예제 #1
0
    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")
예제 #2
0
    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")
예제 #3
0
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
예제 #4
0
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