pmb.gui: add support for choosing device kernel variant
This commit is contained in:
parent
245bccbfcb
commit
0ef4dccb8f
|
@ -16,6 +16,7 @@ import pmb.config.pmaports
|
|||
import pmb.helpers.devices
|
||||
import pmb.helpers.git
|
||||
import pmb.helpers.ui
|
||||
import pmb.parse._apkbuild
|
||||
|
||||
|
||||
class DeviceInfo:
|
||||
|
@ -125,6 +126,16 @@ def list_vendor_codenames(args, vendor: str,
|
|||
return pmb.helpers.devices.list_codenames(args, vendor, unmaintained)
|
||||
|
||||
|
||||
def list_device_kernels(args, codename: str) -> dict:
|
||||
"""
|
||||
Get device kernel subpackages
|
||||
:param args: global program state
|
||||
:param codename: device codename (for example qemu-amd64)
|
||||
:return: dict('kernel_subpkgname' => 'description', ...)
|
||||
"""
|
||||
return pmb.parse._apkbuild.kernels(args, codename)
|
||||
|
||||
|
||||
def list_deviceinfos(args) -> List[DeviceInfo]:
|
||||
""" Get a list of all devices with the information contained in the
|
||||
deviceinfo
|
||||
|
|
|
@ -93,6 +93,22 @@ ApplicationWindow {
|
|||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: cbDeviceKernels.height
|
||||
Label {
|
||||
height: cbDeviceKernels.height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: qsTr("Select kernel: ")
|
||||
}
|
||||
ComboBox {
|
||||
id: cbDeviceKernels
|
||||
model: pmbDevices.device_kernels
|
||||
onActivated: {
|
||||
pmbDevices.select_kernel(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: cbUis.height
|
||||
Label {
|
||||
|
|
|
@ -29,6 +29,7 @@ class PmbDevices(QObject):
|
|||
channels_changed = pyqtSignal()
|
||||
current_channel_changed = pyqtSignal()
|
||||
devices_changed = pyqtSignal()
|
||||
device_kernels_changed = pyqtSignal()
|
||||
uis_changed = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
|
@ -43,6 +44,8 @@ class PmbDevices(QObject):
|
|||
self._selected_vendor = 0
|
||||
self._avail_codenames = []
|
||||
self._selected_codename = None
|
||||
self._avail_kernels = None
|
||||
self._sel_kernel = None
|
||||
|
||||
@pyqtProperty(list, notify=vendors_changed)
|
||||
def vendors(self) -> list[str]:
|
||||
|
@ -70,6 +73,8 @@ class PmbDevices(QObject):
|
|||
self.devices_changed.emit()
|
||||
self._selected_codename = 0
|
||||
self.uis_changed.emit()
|
||||
self._avail_kernels = None
|
||||
self.device_kernels_changed.emit()
|
||||
|
||||
@pyqtProperty(list, notify=devices_changed)
|
||||
def vendor_devices(self) -> list[str]:
|
||||
|
@ -85,11 +90,31 @@ class PmbDevices(QObject):
|
|||
self.devices_changed.emit()
|
||||
self._selected_codename = None
|
||||
self.uis_changed.emit()
|
||||
self._avail_kernels = None
|
||||
self.device_kernels_changed.emit()
|
||||
|
||||
@pyqtSlot(int)
|
||||
def select_device(self, idx: int) -> None:
|
||||
self._selected_codename = self._avail_codenames[idx]
|
||||
self.uis_changed.emit()
|
||||
self._avail_kernels = None
|
||||
self.device_kernels_changed.emit()
|
||||
|
||||
@pyqtProperty(list, notify=device_kernels_changed)
|
||||
def device_kernels(self) -> list[str]:
|
||||
ret = []
|
||||
if self._selected_codename:
|
||||
self._avail_kernels = pmb.gui.pmb_api.list_device_kernels(
|
||||
_args, self._selected_codename)
|
||||
self._sel_kernel = 0
|
||||
if self._avail_kernels:
|
||||
for kernel in self._avail_kernels.keys():
|
||||
ret.append(f"{kernel} ({self._avail_kernels[kernel]})")
|
||||
return ret
|
||||
|
||||
@pyqtSlot(int)
|
||||
def select_kernel(self, idx: int) -> None:
|
||||
self._sel_kernel = idx
|
||||
|
||||
@pyqtProperty(list, notify=uis_changed)
|
||||
def uis_list(self) -> list[str]:
|
||||
|
|
Loading…
Reference in New Issue