def __init__(self, parent, embed=False): QtGui.QWidget.__init__(self, parent) if embed: self.setupUi(parent) else: self.setupUi(self) # Backend self.iface = Interface() self.iface.listenSignals(self.signalHandler) # Fail if no packages provide backend self.checkBackend() # Build item list self.buildItemList() # Get system partitions self._partitions = getPartitions() self._hidden_fss = ("swap")
class MainWidget(QtGui.QWidget, Ui_MainWidget): def __init__(self, parent, embed=False): QtGui.QWidget.__init__(self, parent) if embed: self.setupUi(parent) else: self.setupUi(self) # Backend self.iface = Interface() self.iface.listenSignals(self.signalHandler) # Fail if no packages provide backend self.checkBackend() # Build item list self.buildItemList() # Get system partitions self._partitions = getPartitions() self._hidden_fss = ("swap") def checkBackend(self): """ Check if there are packages that provide required backend. """ if not len(self.iface.getPackages()): QtGui.QMessageBox.critical(self, i18n("Error"), \ i18n("There are no packages that provide \ backend for this application.\n \ Please make sure that packages \ are installed and configured correctly.")) return False return True def clearItemList(self): """ Clears item list. """ self.listItems.clear() def makeItemWidget(self, id_, title="", description="",diskUsage="", type_=None, icon=None, state=None): """ Makes an item widget having given properties. """ widget = ItemWidget(self.listItems, id_, title, \ description, diskUsage, type_, icon, state) self.connect(widget, QtCore.SIGNAL("stateChanged(int)"), \ self.slotItemState) self.connect(widget, QtCore.SIGNAL("editClicked()"), \ self.slotItemEdit) self.connect(widget, QtCore.SIGNAL("deleteClicked()"), \ self.slotItemDelete) return widget def addItem(self, id_, name="", description="", diskUsage="", mounted=False): """ Adds an item to list. """ if mounted: if ctx.Pds.session == ctx.pds.Kde4: icon = KIcon("drive-harddisk", None, ["emblem-mounted"]) else: icon = QtGui.QIcon(KIconLoader.loadOverlayed('drive-harddisk', ["emblem-mounted"], 32)) else: icon = KIcon("drive-harddisk") type_ = "disk" # Build widget and widget item widget = self.makeItemWidget(id_, name, description, \ diskUsage, type_, icon, mounted) widgetItem = ItemListWidgetItem(self.listItems, widget) # Delete is unnecessary widget.hideDelete() # Add to list self.listItems.setItemWidget(widgetItem, widget) def buildItemList(self): """ Builds item list. """ # Clear list self.clearItemList() self.device_entries = {} self.mounted_devices = {} for entry in self.iface.entryList(): self.device_entries[entry] = entry for device, path in self.iface.mountList(): self.mounted_devices[device] = path def handleList(package, exception, args): if exception: pass # TODO: Handle exception else: devices = args[0] for device in devices: parts = self.iface.partitionList(device) parts = filter(lambda x: not self._partitions[x]["fstype"] in self._hidden_fss, parts) parts.sort() for part in parts: if part in self.mounted_devices: description = i18n("Mounted at %1", self.mounted_devices[part]) diskUsage = self.iface.calculateDiskUsage(self.mounted_devices[part].decode("string_escape")) if diskUsage: self.addItem(part, part, description, diskUsage, True) else: self.addItem(part, part, description, True) else: self.addItem(part, part, "") self.iface.deviceList(func=handleList) def slotItemState(self, state): """ Item state changed. """ widget = self.sender() if state == QtCore.Qt.Checked: if widget.getId() not in self.iface.entryList(): widget.pushEdit.animateClick(100) widget.setState(False) return path = self.iface.getEntry(widget.getId())[0] try: self.iface.mount(widget.getId(), path) except Exception, e: if "Comar.PolicyKit" in e._dbus_error_name: QtGui.QMessageBox.critical(self, i18n("Error"), i18n("Access denied.")) else: QtGui.QMessageBox.critical(self, i18n("Error"), i18n("Error") + unicode(e)[unicode(e).find(":"):]) widget.setState(False) return elif state == QtCore.Qt.Unchecked: try: self.iface.umount(widget.getId()) except Exception, e: if "Comar.PolicyKit" in e._dbus_error_name: QtGui.QMessageBox.critical(self, i18n("Error"), i18n("Access denied.")) else: QtGui.QMessageBox.critical(self, i18n("Error"), i18n("Error") + unicode(e)[unicode(e).find(":"):]) widget.setState(True) return
class MainWidget(QtGui.QWidget, Ui_MainWidget): def __init__(self, parent, embed=False): QtGui.QWidget.__init__(self, parent) if embed: self.setupUi(parent) else: self.setupUi(self) # Backend self.iface = Interface() self.iface.listenSignals(self.signalHandler) # Fail if no packages provide backend self.checkBackend() # Build item list self.buildItemList() # Get system partitions self._partitions = getPartitions() self._hidden_fss = ("swap") def checkBackend(self): """ Check if there are packages that provide required backend. """ if not len(self.iface.getPackages()): kdeui.KMessageBox.error(self, \ kdecore.i18n("There are no packages that provide " \ "backend for this application.\n" \ "Please make sure that packages " \ "are installed and configured correctly.")) return False return True def clearItemList(self): """ Clears item list. """ self.listItems.clear() def makeItemWidget(self, id_, title="", description="", type_=None, icon=None, state=None): """ Makes an item widget having given properties. """ widget = ItemWidget(self.listItems, id_, title, \ description, type_, icon, state) self.connect(widget, QtCore.SIGNAL("stateChanged(int)"), \ self.slotItemState) self.connect(widget, QtCore.SIGNAL("editClicked()"), \ self.slotItemEdit) self.connect(widget, QtCore.SIGNAL("deleteClicked()"), \ self.slotItemDelete) return widget def addItem(self, id_, name="", description="", mounted=False): """ Adds an item to list. """ if mounted: icon = kdeui.KIcon("drive-harddisk", None, ["emblem-mounted"]) else: icon = kdeui.KIcon("drive-harddisk") type_ = "disk" # Build widget and widget item widget = self.makeItemWidget(id_, name, description, \ type_, icon, mounted) widgetItem = ItemListWidgetItem(self.listItems, widget) # Delete is unnecessary widget.hideDelete() # Add to list self.listItems.setItemWidget(widgetItem, widget) def buildItemList(self): """ Builds item list. """ # Clear list self.clearItemList() self.device_entries = {} self.mounted_devices = {} for entry in self.iface.entryList(): self.device_entries[entry] = entry for device, path in self.iface.mountList(): self.mounted_devices[device] = path def handleList(package, exception, args): if exception: pass # TODO: Handle exception else: devices = args[0] for device in devices: parts = self.iface.partitionList(device) parts = filter(lambda x: not self._partitions[x]["fstype"] in self._hidden_fss, parts) parts.sort() for part in parts: if part in self.mounted_devices: description = kdecore.i18n("Mounted at %1", \ self.mounted_devices[part]) self.addItem(part, part, description, True) else: self.addItem(part, part, "") self.iface.deviceList(func=handleList) def slotItemState(self, state): """ Item state changed. """ widget = self.sender() if state == QtCore.Qt.Checked: if widget.getId() not in self.iface.entryList(): widget.pushEdit.animateClick(100) widget.setState(False) return path = self.iface.getEntry(widget.getId())[0] try: self.iface.mount(widget.getId(), path) except Exception, e: if "Comar.PolicyKit" in e._dbus_error_name: kdeui.KMessageBox.error(self, kdecore.i18n("Access denied.")) else: kdeui.KMessageBox.error(self, unicode(e)) widget.setState(False) return elif state == QtCore.Qt.Unchecked: try: self.iface.umount(widget.getId()) except Exception, e: if "Comar.PolicyKit" in e._dbus_error_name: kdeui.KMessageBox.error(self, kdecore.i18n("Access denied.")) else: kdeui.KMessageBox.error(self, unicode(e)) widget.setState(True) return