def __init__(self, app=None):
        #QMainWindow.__init__(self, None)
        super(MainWindow, self).__init__(None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(
            QIcon("/usr/share/package-manager/data/tray-zero.svg"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)
Beispiel #2
0
    def __init__(self, parent, url):
        PAbstractBox.__init__(self, parent.parent)
        self.setupUi(self)
        self.parent = parent

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        # self._disable_parent_in_shown = True

        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self.parent._hide()
        QTimer.singleShot(0, lambda: self.showPackageScreenShot(url))

        self.setOverlayClickMethod(lambda x: self._hide())
    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 500
        self.last_msg = None
        self.enableOverlay()
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.connect(self.cancelButton, SIGNAL("clicked()"), self.cancel)
        self.parent = parent

        self.setStyleSheet(
            "QLabel, QTextEdit, QTextBrowser{background:rgba(0,0,0,0);color:white;}"
        )

        self._last_action = ''
        self._shown = False
Beispiel #4
0
    def __init__(self, parent, connection):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.available = True
        self.parent = parent
        self.connection = connection

        bus = parent.bus.get_object(NM_BUS_NAME,
                                    str(connection.proxy.object_path))
        interface = dbus.Interface(bus, NM_SETTINGS_CONNECTION)

        interface.connect_to_signal("Removed", parent.fillConnections)
        interface.connect_to_signal("Updated", self.updateState)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QSize(32, 32))
        self.mainLayout.insertWidget(0, self.busy)
        self.busy.hide()

        self.connect(parent, SIGNAL("stateChanged()"), self.updateState)
        self.button.clicked.connect(lambda: self.parent.setState(self))

        self.updateState()
        self.toggleButtons()
    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.cancelButton.clicked.connect(self.cancel)
        self.cancelButton.setIcon(QIcon.fromTheme("list-remove"))
        self.parent = parent
        self.widget.setStyleSheet("QTextEdit { \
            background:rgba(0,0,0,0); \
            color:white;}")

        self._last_action = ''
        self._shown = False
    def __init__(self, package, parent, item):
        QtWidgets.QWidget.__init__(self, None)

        self.ui = Ui_ServiceItemWidget()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.ui.mainLayout.insertWidget(0, self.busy)
        self.ui.spacer.hide()
        self.busy.hide()

        self.ui.labelName.setText(package)

        self.toggleButtons()

        self.ui.buttonStart.setIcon(QIcon.fromTheme("media-playback-start"))
        self.ui.buttonStop.setIcon(QIcon.fromTheme("media-playback-stop"))
        self.ui.buttonReload.setIcon(QIcon.fromTheme("view-refresh"))
        self.ui.buttonInfo.setIcon(QIcon.fromTheme("dialog-information"))

        self.toggled = False
        self.root = parent
        self.iface = parent.iface
        self.item = item
        self.package = package
        self.info = ServiceItemInfo(self)

        self.type = None
        self.desc = None
        self.ui.buttonStart.clicked.connect(self.setService)
        self.ui.buttonStop.clicked.connect(self.setService)
        self.ui.buttonReload.clicked.connect(self.setService)
        self.ui.checkStart.clicked.connect(self.setService)
        self.ui.buttonInfo.clicked.connect(self.info.showDescription)
Beispiel #7
0
class PreviewDialog(PAbstractBox, Ui_Preview):
    def __init__(self, parent, url):
        PAbstractBox.__init__(self, parent.parent)
        self.setupUi(self)
        self.parent = parent

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        # self._disable_parent_in_shown = True

        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self.parent._hide()
        QTimer.singleShot(0, lambda: self.showPackageScreenShot(url))

        self.setOverlayClickMethod(lambda x: self._hide())

    def showPackageScreenShot(self, url):
        if network_available():

            self.webView.loadFinished.connect(
                lambda x: self.webView.setVisible(x))
            self.webView.loadFinished.connect(
                lambda x: self.busy.setVisible(not x))
            self.webView.loadFinished.connect(
                lambda x: self.cancelButton.setVisible(x))

            self.registerFunction(FINISHED, lambda: self.webView.load(url))

            self.cancelButton.hide()
            self.webView.hide()
            self.busy.busy()

            self.animate(start=BOTCENTER, stop=MIDCENTER)

    def _hide(self):
        self.busy.stopAnimation()
        self.webView.loadFinished.disconnect()
        self.animate(start=MIDCENTER, stop=BOTCENTER, direction=OUT)
        self.parent.animate(start=BOTCENTER, stop=MIDCENTER)
Beispiel #8
0
    def __init__(self, parent, url):
        PAbstractBox.__init__(self, parent.parent)
        self.setupUi(self)
        self.parent = parent

        # PDS Settings
        self._animation = 1
        self._duration = 400
        self.enableOverlay()
        # self._disable_parent_in_shown = True

        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("dialog-close"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self.parent._hide()
        QTimer.singleShot(0, lambda: self.showPackageScreenShot(url))

        self.setOverlayClickMethod(lambda x:self._hide())
Beispiel #9
0
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.ui = Ui_MessageBox()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.busy.hide()
        self.ui.mainLayout.insertWidget(1, self.busy)

        self._animation = 2
        self._duration = 500
        self.last_msg = None
        self.setStyleSheet(PMessageBox.STYLE)
        self.enableOverlay()
        self.hide()
Beispiel #10
0
    def __init__(self, package, parent, item):
        QtGui.QWidget.__init__(self, None)
        
        self.ui = Ui_ServiceItemWidget()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.ui.mainLayout.insertWidget(0, self.busy)
        self.ui.spacer.hide()
        self.busy.hide()

        self.ui.labelName.setText(package)

        self.toggleButtons()

        self.ui.buttonStart.setIcon(KIcon("media-playback-start"))
        self.ui.buttonStop.setIcon(KIcon("media-playback-stop"))
        self.ui.buttonReload.setIcon(KIcon("view-refresh"))
        self.ui.buttonInfo.setIcon(KIcon("dialog-information"))

        self.toggled = False
        self.root = parent
        self.iface = parent.iface
        self.item = item
        self.package = package
        self.info = ServiceItemInfo(self)

        self.type = None
        self.desc = None
        self.connect(self.ui.buttonStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonStop, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonReload, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.checkStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonInfo, SIGNAL("clicked()"), self.info.showDescription)
Beispiel #11
0
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.gl = QtGui.QGridLayout(self)

        butonh = QtGui.QPushButton("click to hide", self)
        butons = QtGui.QPushButton("click to show", self)
        self.busy = QProgressIndicator(self)

        self.gl.addWidget(butonh)
        self.gl.addWidget(self.busy)
        self.gl.addWidget(butons)

        self.busy.startAnimation()
        butonh.clicked.connect(self.busy.stopAnimation)
        butons.clicked.connect(self.busy.startAnimation)
Beispiel #12
0
    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.connect(self.cancelButton, SIGNAL("clicked()"), self.cancel)
        self.cancelButton.setIcon(KIcon("cancel"))
        self.parent = parent

        self.setStyleSheet("QLabel, QTextEdit, QTextBrowser{background:rgba(0,0,0,0);color:white;}")

        self._last_action = ''
        self._shown = False
Beispiel #13
0
    def __init__(self, app = None):
        KXmlGuiWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        #set style
        self._style = "/usr/share/kde4/apps/package-manager/data/style.qss"
        self.setStyleSheet(file(self._style).read())


        self.setWindowIcon(KIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)
Beispiel #14
0
class PreviewDialog(PAbstractBox, Ui_Preview):
    def __init__(self, parent, url):
        PAbstractBox.__init__(self, parent.parent)
        self.setupUi(self)
        self.parent = parent

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        # self._disable_parent_in_shown = True

        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self.parent._hide()
        QTimer.singleShot(0, lambda: self.showPackageScreenShot(url))

        self.setOverlayClickMethod(lambda x:self._hide())

    def showPackageScreenShot(self, url):
        if network_available():

            self.webView.loadFinished.connect(lambda x: self.webView.setVisible(x))
            self.webView.loadFinished.connect(lambda x: self.busy.setVisible(not x))
            self.webView.loadFinished.connect(lambda x: self.cancelButton.setVisible(x))

            self.registerFunction(FINISHED, lambda: self.webView.load(url))

            self.cancelButton.hide()
            self.webView.hide()
            self.busy.busy()

            self.animate(start = BOTCENTER, stop = MIDCENTER)

    def _hide(self):
        self.busy.stopAnimation()
        self.webView.loadFinished.disconnect()
        self.animate(start = MIDCENTER, stop = BOTCENTER, direction = OUT)
        self.parent.animate(start = BOTCENTER, stop = MIDCENTER)
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)

        self.layout = QtWidgets.QHBoxLayout(self)

        self.icon = QtWidgets.QLabel(self)
        self.icon.hide()
        self.layout.addWidget(self.icon)

        self.busy = QProgressIndicator(self, "white")
        self.busy.hide()
        self.layout.addWidget(self.busy)

        self.label = QtWidgets.QLabel(self)
        self.layout.addWidget(self.label)

        self._animation = 2
        self._duration = 500
Beispiel #16
0
class UI(QtGui.QWidget):

    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        self.gl = QtGui.QGridLayout(self)

        butonh = QtGui.QPushButton("click to hide", self)
        butons = QtGui.QPushButton("click to show", self)
        self.busy = QProgressIndicator(self)

        self.gl.addWidget(butonh)
        self.gl.addWidget(self.busy)
        self.gl.addWidget(butons)

        self.busy.startAnimation()
        butonh.clicked.connect(self.busy.stopAnimation)
        butons.clicked.connect(self.busy.startAnimation)
Beispiel #17
0
class PMessageBox(PAbstractBox):

    # STYLE SHEET
    STYLE = """color:white;font-size:16pt;"""
    OUT_POS = MIDCENTER
    IN_POS = MIDCENTER
    STOP_POS = MIDCENTER

    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.ui = Ui_MessageBox()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(32, 32))
        self.busy.hide()
        self.ui.mainLayout.insertWidget(1, self.busy)

        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.setStyleSheet(PMessageBox.STYLE)
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self.hide()

    def showMessage(self, message, icon=None, busy=False):
        self.ui.label.setText(message)

        if busy:
            self.busy.busy()
            self.ui.icon.hide()
        else:
            if icon:
                if type(icon) == str:
                    icon = KIcon(icon).pixmap(32, 32)
                self.ui.icon.setPixmap(QPixmap(icon))
                self.ui.icon.show()
            else:
                self.ui.icon.hide()
            self.busy.hide()

        self.last_msg = self.animate(start=PMessageBox.IN_POS,
                                     stop=PMessageBox.STOP_POS)
        qApp.processEvents()  # ???

    def hideMessage(self, force=False):
        if self.isVisible() or force:
            self.animate(start=PMessageBox.STOP_POS,
                         stop=PMessageBox.OUT_POS,
                         direction=OUT,
                         dont_animate=True)
Beispiel #18
0
class PMessageBox(PAbstractBox):

    Style = """color:white;
               background-color:rgba(0,0,0,200);
               border: 1px solid rgba(0,0,0,200);
               border-radius:4px;"""

    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)

        self.layout = QtWidgets.QHBoxLayout(self)

        self.icon = QtWidgets.QLabel(self)
        self.icon.hide()
        self.layout.addWidget(self.icon)

        self.busy = QProgressIndicator(self, "White")
        self.busy.hide()
        self.layout.addWidget(self.busy)

        self.label = QtWidgets.QLabel(self)
        self.layout.addWidget(self.label)

        self._animation = 2
        self._duration = 500
        self.raise_()

    def setMessage(self, message):
        if message == '':
            self.label.hide()
        else:
            self.label.setText(message)
            self.label.setAlignment(QtCore.Qt.AlignVCenter)
        self.adjustSize()

    def setIcon(self, icon=None):
        if not icon:
            self.icon.hide()
        else:
            self.icon.setPixmap(icon.pixmap(22, 22))
            self.icon.show()
        self.adjustSize()
Beispiel #19
0
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.setupUi(self)

        self.iface = parent.iface

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(IN, lambda: parent.statusBar().hide())
        self.registerFunction(
            FINISHED,
            lambda: parent.statusBar().setVisible(not self.isVisible()))
        self._as = 'http://appinfo.pisilinux.org'
        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.webView.page().setLinkDelegationPolicy(
            QtWebKit.QWebPage.DelegateAllLinks)
        self.webView.page().linkClicked.connect(self.showFullImage)

        self.tabWidget.removeTab(0)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self._filesThread = PThread(self, self.getFiles, self.getFilesFinished)
        self.noconnection.hide()
        self.parent = parent
class PMessageBox(PAbstractBox):

    # STYLE SHEET
    STYLE = """color:white;font-size:16pt;"""
    OUT_POS  = MIDCENTER
    IN_POS   = MIDCENTER
    STOP_POS = MIDCENTER

    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.ui = Ui_MessageBox()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.busy.hide()
        self.ui.mainLayout.insertWidget(1, self.busy)

        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.setStyleSheet(PMessageBox.STYLE)
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self.hide()

    def showMessage(self, message, icon = None, busy = False):
        self.ui.label.setText(message)

        if busy:
            self.busy.busy()
            self.ui.icon.hide()
        else:
            if icon:
                if type(icon) == str:
                    icon = QIcon(icon).pixmap(32,32)
                self.ui.icon.setPixmap(QtGui.QPixmap(icon))
                self.ui.icon.show()
            else:
                self.ui.icon.hide()
            self.busy.hide()

        self.last_msg = self.animate(start = PMessageBox.IN_POS, stop = PMessageBox.STOP_POS)
        QtWidgets.qApp.processEvents()

    def hideMessage(self, force = False):
        if self.isVisible() or force:
            self.animate(start = PMessageBox.STOP_POS,
                         stop  = PMessageBox.OUT_POS,
                         direction = OUT,
                         dont_animate = True)
Beispiel #21
0
    def __init__(self, app=None):
        KXmlGuiWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(KIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)
Beispiel #22
0
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.ui = Ui_MessageBox()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.busy.hide()
        self.ui.mainLayout.insertWidget(1, self.busy)

        self._animation = 2
        self._duration = 500
        self.last_msg = None
        self.setStyleSheet(PMessageBox.STYLE)
        self.enableOverlay()
        self.hide()
Beispiel #23
0
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)

        self.layout = QtGui.QHBoxLayout(self)

        self.icon = QtGui.QLabel(self)
        self.icon.hide()
        self.layout.addWidget(self.icon)

        self.busy = QProgressIndicator(self, "white")
        self.busy.hide()
        self.layout.addWidget(self.busy)

        self.label = QtGui.QLabel(self)
        self.layout.addWidget(self.label)

        self._animation = 2
        self._duration = 500
Beispiel #24
0
    def __init__(self, app = None):
        QMainWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(QIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)
Beispiel #25
0
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.setupUi(self)

        self.iface = parent.iface

        # PDS Settings
        self._animation = 1
        self._duration = 400
        self.enableOverlay()
        self._disable_parent_in_shown = True

        self.registerFunction(IN, lambda: parent.statusBar().hide())
        self.registerFunction(FINISHED, lambda: parent.statusBar().setVisible(not self.isVisible()))
        self._as = 'http://onurguzel.com/appinfo'
        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("dialog-close"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.webView.page().setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateAllLinks)
        self.webView.page().linkClicked.connect(self.redirectLinks)

        self.tabWidget.removeTab(0)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self._filesThread = PThread(self, self.getFiles, self.getFilesFinished)
        self.filterLine.setListWidget(self.filesList)
        self.noconnection.hide()
        self.parent = parent
    def __init__(self, parent, connection):
        QtWidgets.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.available = True
        self.parent = parent
        self.connection = connection

        bus = parent.bus.get_object(NM_BUS_NAME, str(connection.proxy.object_path))
        interface = dbus.Interface(bus, NM_SETTINGS_CONNECTION)

        interface.connect_to_signal("Removed", parent.fillConnections)
        interface.connect_to_signal("Updated", self.updateState)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QSize(32, 32))
        self.mainLayout.insertWidget(0, self.busy)
        self.busy.hide()

        self.connect(parent, SIGNAL("stateChanged()"), self.updateState)
        self.button.clicked.connect(lambda: self.parent.setState(self))

        self.updateState()
        self.toggleButtons()
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, app = None):
        #QMainWindow.__init__(self, None)
        super(MainWindow, self).__init__(None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(QIcon("/usr/share/package-manager/data/tray-zero.svg"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)
        

    def connectMainSignals(self):
        self.cw.connectMainSignals()
        
        move_shortcut=QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab),self)
        move_shortcut.activated.connect(lambda: self.moveTab('next'))
        QShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Tab),self).activated.connect(lambda: self.moveTab('prev'))
        QShortcut(QKeySequence(Qt.CTRL + Qt.Key_F),self).activated.connect(self.cw.searchLine.setFocus)
        QShortcut(QKeySequence(Qt.Key_F3),self).activated.connect(self.cw.searchLine.setFocus)

        self.settingsDialog.generalSettings.packagesChanged.connect(self.cw.initialize)
        self.settingsDialog.generalSettings.packageViewChanged.connect(self.cw.updateSettings)
        self.settingsDialog.generalSettings.traySettingChanged.connect(self.tray.settingsChanged)
        self.cw.state.repositoriesChanged.connect(self.tray.populateRepositoryMenu)
        self.cw.repositoriesUpdated.connect(self.tray.updateTrayUnread)
        

    def moveTab(self, direction):
        new_index = self.cw.stateTab.currentIndex() - 1
        if direction == 'next':
            new_index = self.cw.stateTab.currentIndex() + 1
        if new_index not in range(self.cw.stateTab.count()):
            new_index = 0
        self.cw.stateTab.setCurrentIndex(new_index)

    def initializeTray(self):
        self.tray = Tray(self, self.iface)
        self.cw.operation.finished[str].connect(self.trayAction)
        self.cw.operation.finished[str].connect(self.tray.stop)
        self.cw.operation.operationCancelled.connect(self.tray.stop)
        self.cw.operation.started[str].connect(self.tray.animate)
        self.tray.showUpdatesSelected.connect(self.trayShowUpdates)         # buraya dikkat

    def trayShowUpdates(self):
        self.showUpgradeAction.setChecked(True)

        self.cw.switchState(StateManager.UPGRADE)

        KApplication.kApplication().updateUserTimestamp()
       
        self.show()
        self.raise_()

    def trayAction(self, operation):
        if not self.isVisible() and operation in ["System.Manager.updateRepository", "System.Manager.updateAllRepositories"]:
            self.tray.showPopup()
        if self.tray.isVisible() and operation in ["System.Manager.updatePackage",
                                                   "System.Manager.installPackage",
                                                   "System.Manager.removePackage"]:
            self.tray.updateTrayUnread()

    def initializeStatusBar(self):
        self.cw.mainLayout.insertWidget(0, self.busy)
        self.statusBar().addPermanentWidget(self.cw.actions, 1)
        self.statusBar().show()

        self.updateStatusBar('')

        self.cw.selectionStatusChanged[str].connect(self.updateStatusBar)
        self.cw.updatingStatus.connect(self.statusWaiting)

    def initializeActions(self):
        self.initializeOperationActions()

    def initializeOperationActions(self):

        self.showAllAction = QAction(QIcon.fromTheme("media-optical"), _translate("Packaga Manager","All Packages"), self)
        self.showAllAction.triggered.connect(lambda:self.cw.switchState(StateManager.ALL))
        self.cw.stateTab.addTab(QWidget(), QIcon.fromTheme("media-optical"), _translate("Packaga Manager","All Packages"))

        self.showInstallAction = QAction(QIcon.fromTheme("list-remove"), _translate("Packaga Manager","Installable Packages"), self)
        self.showInstallAction.triggered.connect(lambda:self.cw.switchState(StateManager.INSTALL))
        self.cw.stateTab.addTab(QWidget(), QIcon.fromTheme("list-add"), _translate("Packaga Manager","Installable Packages"))

        self.showRemoveAction = QAction(QIcon.fromTheme("list-add"), _translate("Packaga Manager","Installed Packages"), self)
        self.showRemoveAction.triggered.connect(lambda:self.cw.switchState(StateManager.REMOVE))
        self.cw.stateTab.addTab(QWidget(), QIcon.fromTheme("list-remove"), _translate("Packaga Manager","Installed Packages"))

        self.showUpgradeAction = QAction(QIcon.fromTheme("system-software-update"), _translate("Packaga Manager","Updates"), self)
        self.showUpgradeAction.triggered.connect(lambda:self.cw.switchState(StateManager.UPGRADE))
        self.cw.stateTab.addTab(QWidget(), QIcon("/usr/share/package-manager/data/star_1.svg"), _translate("Packaga Manager","Updates"))

        self.showPreferences = QAction(QIcon.fromTheme("preferences-system"), _translate("Packaga Manager","Settings"), self)
        self.showPreferences.triggered.connect(self.settingsDialog.show_)

        self.actionHelp = QAction(QIcon.fromTheme("help-about"), _translate("Packaga Manager","Help"), self)
        self.actionHelp.setShortcuts(QKeySequence.HelpContents)
        self.actionHelp.triggered.connect(self.showHelp)

        self.actionQuit = QAction(QIcon.fromTheme("media-eject"), _translate("Packaga Manager","Quit"), self)
        self.actionQuit.setShortcuts(QKeySequence.Quit)
        self.actionQuit.triggered.connect(qApp.exit)

        self.cw.menuButton.setMenu(QMenu('MainMenu', self.cw.menuButton))
        self.cw.menuButton.setIcon(QIcon.fromTheme("preferences-system"))
        self.cw.menuButton.menu().clear()

        self.cw.contentHistory.hide()

        self.cw.menuButton.menu().addAction(self.showPreferences)
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionHelp)
        self.cw.menuButton.menu().addAction(self.actionQuit)

        self.cw._states = {self.cw.state.ALL    :(0, self.showAllAction),
                           self.cw.state.INSTALL:(1, self.showInstallAction),
                           self.cw.state.REMOVE :(2, self.showRemoveAction),
                           self.cw.state.UPGRADE:(3, self.showUpgradeAction)}

        self.showAllAction.setChecked(True)
        self.cw.checkUpdatesButton.hide()
        self.cw.checkUpdatesButton.setIcon(QIcon.fromTheme("system-reboot"))
        self.cw.showBasketButton.clicked.connect(self.cw.showBasket)

        # Little time left for the new ui
        self.menuBar().setVisible(False)
        self.cw.switchState(self.cw.state.ALL)

    def statusWaiting(self):
        self.updateStatusBar(_translate("Packaga Manager",'Calculating dependencies...'), busy = True)

    def showHelp(self):
        self.Pds = pds.Pds()
        self.lang = localedata.setSystemLocale(justGet = True)
        
        if self.lang in os.listdir("/usr/share/package-manager/help"):
            pass
        else:
            self.lang = "en"

        
        if self.Pds.session == pds.Kde3 :
            os.popen("khelpcenter /usr/share/package-manager/help/%s/main_help.html" %(self.lang))
        else:
            helpdialog.HelpDialog(self,helpdialog.MAINAPP)


    def updateStatusBar(self, text, busy = False):
        if text == '':
            text = _translate("Packaga Manager","Currently your basket is empty.")
            self.busy.hide()
            self.cw.showBasketButton.hide()
        else:
            self.cw.showBasketButton.show()

        if busy:
            self.busy.busy()
            self.cw.showBasketButton.hide()
        else:
            self.busy.hide()

        self.cw.statusLabel.setText(text)
        self.cw.statusLabel.setToolTip(text)

    def queryClose(self):
        if config.PMConfig().systemTray():
            self.hide()
            return False
        return True

    def queryExit(self):
        if not self.iface.operationInProgress():
            if self.tray:
                del self.tray.notification
            return True
        return False

    def CloseEvent(self,event):
        if self.iface.operationInProgress():
            return
class ConnectionItem(QtWidgets.QWidget, Ui_ConnectionItem):

    def __init__(self, parent, connection):
        QtWidgets.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.available = True
        self.parent = parent
        self.connection = connection

        bus = parent.bus.get_object(NM_BUS_NAME, str(connection.proxy.object_path))
        interface = dbus.Interface(bus, NM_SETTINGS_CONNECTION)

        interface.connect_to_signal("Removed", parent.fillConnections)
        interface.connect_to_signal("Updated", self.updateState)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QSize(32, 32))
        self.mainLayout.insertWidget(0, self.busy)
        self.busy.hide()

        self.connect(parent, SIGNAL("stateChanged()"), self.updateState)
        self.button.clicked.connect(lambda: self.parent.setState(self))

        self.updateState()
        self.toggleButtons()

    def updateState(self, *args):
        if self.available is not True:
            return

        active = self.parent.isActive(self.connection)

        if active:
            state = self.parent.getState(self.connection)
            if state == ActiveConnectionState.ACTIVATED.value:
                self.setIcon(get_icon(self.connection.settings.conn_type, True))
            elif state == ActiveConnectionState.ACTIVATING.value:
                self.showBusy()
        else:
            self.setIcon(get_icon(self.connection.settings.conn_type, False))

        self.name.setText(unicode(self.connection.settings.id))
        self.details.setText(unicode(self.connection.settings.conn_type))
        self.button.setText("Disconnect" if active else "Connect")

    def showBusy(self):
        self.busy.busy()
        self.icon.hide()

    def setIcon(self, icon):
        self.busy.hide()
        self.icon.setPixmap(icon)
        self.icon.show()

    def resizeEvent(self, event):
        if self.parent.msgbox:
            self.parent.msgbox._resizeCallBacks(event)

    def enterEvent(self, event):
        if not self.button.isVisible():
            self.toggleButtons(True)

    def leaveEvent(self, event):
        if self.button.isVisible():
            self.toggleButtons()

    def toggleButtons(self, toggle=False):
        self.button.setVisible(toggle)
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, app=None):
        QMainWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(QIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)

    activated = pyqtSignal()

    def connectMainSignals(self):
        self.cw.connectMainSignals()
        QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab),
                  self).activated.connect(lambda: self.moveTab('next'))
        QShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Tab),
                  self).activated.connect(lambda: self.moveTab('prev'))
        QShortcut(QKeySequence(Qt.CTRL + Qt.Key_F),
                  self).activated.connect(self.cw.searchLine.setFocus)
        QShortcut(QKeySequence(Qt.Key_F3),
                  self).activated.connect(self.cw.searchLine.setFocus)

        self.settingsDialog.packagesChanged.connect(self.cw.initialize)
        self.settingsDialog.packageViewChanged.connect(self.cw.updateSettings)
        self.settingsDialog.traySettingChanged.connect(
            self.tray.settingsChanged)
        self.cw.state.repositoriesChanged.connect(
            self.tray.populateRepositoryMenu)
        self.cw.repositoriesUpdated.connect(self.tray.updateTrayUnread)
        qApp.shutDown.connect(self.slotQuit)

    def moveTab(self, direction):
        new_index = self.cw.stateTab.currentIndex() - 1
        if direction == 'next':
            new_index = self.cw.stateTab.currentIndex() + 1
        if new_index not in range(self.cw.stateTab.count()):
            new_index = 0
        self.cw.stateTab.setCurrentIndex(new_index)

    def initializeTray(self):
        self.tray = Tray(self, self.iface)
        self.cw.operation.finished.connect(self.trayAction)
        self.cw.operation.finished.connect(self.tray.stop)
        self.cw.operation.operationCancelled.connect(self.tray.stop)
        self.cw.operation.started.connect(self.tray.animate)
        self.tray.showUpdatesSelected.connect(self.trayShowUpdates)

    def trayShowUpdates(self):
        self.showUpgradeAction.setChecked(True)

        self.cw.switchState(StateManager.UPGRADE)

        KApplication.kApplication().updateUserTimestamp()

        self.show()
        self.raise_()

    def trayAction(self, operation):
        if not self.isVisible() and operation in [
                "System.Manager.updateRepository",
                "System.Manager.updateAllRepositories"
        ]:
            self.tray.showPopup()
        if self.tray.isVisible() and operation in [
                "System.Manager.updatePackage",
                "System.Manager.installPackage", "System.Manager.removePackage"
        ]:
            self.tray.updateTrayUnread()

    def initializeStatusBar(self):
        self.cw.mainLayout.insertWidget(0, self.busy)
        self.statusBar().addPermanentWidget(self.cw.actions, 1)
        self.statusBar().show()

        self.updateStatusBar('')

        self.cw.selectionStatusChanged.connect(self.updateStatusBar)
        self.cw.updatingStatus.connect(self.statusWaiting)

    def initializeActions(self):
        self.initializeOperationActions()

    def initializeOperationActions(self):

        self.showAllAction = QAction(
            KIcon(("applications-other", "package_applications")),
            self.tr("All Packages"), self)
        self.showAllAction.triggered.connect(
            lambda: self.cw.switchState(StateManager.ALL))
        self.cw.stateTab.addTab(
            QWidget(), KIcon(("applications-other", "package_applications")),
            self.tr("All Packages"))

        self.showInstallAction = QAction(KIcon(("list-add", "add")),
                                         self.tr("Installable Packages"), self)
        self.showInstallAction.triggered.connect(
            lambda: self.cw.switchState(StateManager.INSTALL))
        self.cw.stateTab.addTab(QWidget(), KIcon(("list-add", "add")),
                                self.tr("Installable Packages"))

        self.showRemoveAction = QAction(KIcon(("list-remove", "remove")),
                                        self.tr("Installed Packages"), self)
        self.showRemoveAction.triggered.connect(
            lambda: self.cw.switchState(StateManager.REMOVE))
        self.cw.stateTab.addTab(QWidget(), KIcon(("list-remove", "remove")),
                                self.tr("Installed Packages"))

        self.showUpgradeAction = QAction(
            KIcon(("system-software-update", "gear")), self.tr("Updates"),
            self)
        self.showUpgradeAction.triggered.connect(
            lambda: self.cw.switchState(StateManager.UPGRADE))
        self.cw.stateTab.addTab(QWidget(),
                                KIcon(("system-software-update", "gear")),
                                self.tr("Updates"))

        self.showPreferences = QAction(
            KIcon(("preferences-system", "package_settings")),
            self.tr("Settings"), self)
        self.showPreferences.triggered.connect(self.settingsDialog.show)

        self.actionHelp = QAction(KIcon("help"), self.tr("Help"), self)
        self.actionHelp.setShortcuts(QKeySequence.HelpContents)
        self.actionHelp.triggered.connect(self.showHelp)

        self.actionQuit = QAction(KIcon("exit"), self.tr("Quit"), self)
        self.actionQuit.setShortcuts(QKeySequence.Quit)
        self.actionQuit.triggered.connect(qApp.exit)

        self.cw.menuButton.setMenu(QMenu('MainMenu', self.cw.menuButton))
        self.cw.menuButton.setIcon(
            KIcon(("preferences-system", "package_settings")))
        self.cw.menuButton.menu().clear()

        self.cw.contentHistory.hide()

        self.cw.menuButton.menu().addAction(self.showPreferences)
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionHelp)
        self.cw.menuButton.menu().addAction(self.actionQuit)

        self.cw._states = {
            self.cw.state.ALL: (0, self.showAllAction),
            self.cw.state.INSTALL: (1, self.showInstallAction),
            self.cw.state.REMOVE: (2, self.showRemoveAction),
            self.cw.state.UPGRADE: (3, self.showUpgradeAction)
        }

        self.showAllAction.setChecked(True)
        self.cw.checkUpdatesButton.hide()
        self.cw.checkUpdatesButton.setIcon(KIcon(("view-refresh", "reload")))
        self.cw.showBasketButton.clicked.connect(self.cw.showBasket)

        # Little time left for the new ui
        self.menuBar().setVisible(False)
        self.cw.switchState(self.cw.state.ALL)

    def statusWaiting(self):
        self.updateStatusBar(self.tr('Calculating dependencies...'), busy=True)

    def showHelp(self):
        self.Pds = pds.Pds()
        self.lang = localedata.setSystemLocale(justGet=True)

        if self.lang in os.listdir("/usr/share/package-manager/help"):
            pass
        else:
            self.lang = "en"

        if self.Pds.session == pds.Kde3:
            os.popen(
                "khelpcenter /usr/share/package-manager/help/%s/main_help.html"
                % (self.lang))
        else:
            helpdialog.HelpDialog(self, helpdialog.MAINAPP)

    def updateStatusBar(self, text, busy=False):
        if text == '':
            text = self.tr("Currently your basket is empty.")
            self.busy.hide()
            self.cw.showBasketButton.hide()
        else:
            self.cw.showBasketButton.show()

        if busy:
            self.busy.busy()
            self.cw.showBasketButton.hide()
        else:
            self.busy.hide()

        self.cw.statusLabel.setText(text)
        self.cw.statusLabel.setToolTip(text)

    def queryClose(self):
        if config.PMConfig().systemTray():
            self.hide()
            return False
        return True

    def queryExit(self):
        if not self.iface.operationInProgress():
            if self.tray:
                del self.tray.notification
            return True
        return False

    def slotQuit(self):
        if self.iface.operationInProgress():
            return
Beispiel #30
0
    def __init__(self, parent=None, step=1):
        QDialog.__init__(self, parent)
        self.setupUi(self)

        self.logger = SimpleLogger()
        self.log = self.logger.log

        self.target_repo = REPO_TEMPLATE % 'stable'
        self.iface = Iface(self)

        self.connect(self.iface, SIGNAL("notify(PyQt_PyObject)"),
                     self.showMessage)

        self.msgbox = PMessageBox(self)
        self.msgbox.setStyleSheet("color:white;")
        self.msgbox.enableOverlay()
        # Just for Fun :)
        self.pageWidget = QPageWidget(
            self.widget_screens)  # , direction = 'ttb')
        self.layout.addWidget(self.pageWidget)

        self.button_next.clicked.connect(self.pageWidget.next)
        self.button_previous.clicked.connect(self.pageWidget.prev)
        self.button_cancel.clicked.connect(self.reject)

        # Threads
        self.thread_step_1 = PThread(self, self.step_1_start, self.step_1_end)
        self.thread_step_2 = PThread(self, self.step_2_start, self.step_2_end)
        self.thread_step_3 = PThread(self, self.step_3_start, self.step_3_end)

        # Update Page Title
        self.connect(self.pageWidget, SIGNAL("currentChanged()"), lambda:\
                     self.label_header.setText(self.pageWidget.getCurrentWidget().title))

        self.current_step = step

        if step == 1:
            self.thread_check = PThread(self, self.findMissingPackages,
                                        self.showResults)

            # Welcome
            self.pageWidget.createPage(
                getWidget(ui_screen_1, _("Welcome to Upgrade Manager...")))

            # Repo Selection
            self.pageWidget.createPage(
                getWidget(ui_screen_2, _("Select Upgrade Repository...")))

            # Check Results Page
            self.pageWidget.createPage(getWidget(ui_screen_3,
                                                 _("Checking your system...")),
                                       inMethod=self.checkSystem,
                                       outMethod=self.hideMessage)

            resultWidget = self.pageWidget.getWidget(2).ui
            resultWidget.widget.hide()

            def updateButtons():
                if self.button_next.text() == _("Next"):
                    self.button_next.setText(_("Yes, Upgrade"))
                    self.button_previous.setText(_("Cancel"))
                    self.button_cancel.hide()
                else:
                    self.button_next.setText(_("Next"))
                    self.button_previous.setText(_("Previous"))
                    self.button_cancel.show()

            # Last Question
            self.pageWidget.createPage(getWidget(ui_screen_4, ""),
                                       inMethod=updateButtons,
                                       outMethod=updateButtons)
        self._step_counter = 0

        # Progress Screen
        self.pageWidget.createPage(getWidget(ui_screen_5,
                                             _("Upgrading the system...")),
                                   inMethod=self.upgradeStep_1)

        # Shortcut for Progress Screen UI
        # Get the last added page as progress page
        # After the first step completed, um will use just this page !
        self.ps = self.pageWidget.getWidget(self.pageWidget.count() - 1).ui

        # Busy indicator to Progress Screen
        self.ps.busy = QProgressIndicator(self)
        self.ps.busy.hide()
        self.ps.layout.addWidget(self.ps.busy)

        if step == 2:
            self.upgradeStep_2()
        elif step == 3:
            self.upgradeStep_3()
Beispiel #31
0
class ServiceItemWidget(QtGui.QWidget):
    def __init__(self, package, parent, item):
        QtGui.QWidget.__init__(self, None)

        self.ui = Ui_ServiceItemWidget()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.ui.mainLayout.insertWidget(0, self.busy)
        self.ui.spacer.hide()
        self.busy.hide()

        self.ui.labelName.setText(package)

        self.toggleButtons()

        self.ui.buttonStart.setIcon(KIcon("media-playback-start"))
        self.ui.buttonStop.setIcon(KIcon("media-playback-stop"))
        self.ui.buttonReload.setIcon(KIcon("view-refresh"))
        self.ui.buttonInfo.setIcon(KIcon("dialog-information"))

        self.toggled = False
        self.root = parent
        self.iface = parent.iface
        self.item = item
        self.package = package
        self.info = ServiceItemInfo(self)

        self.type = None
        self.desc = None
        self.connect(self.ui.buttonStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonStop, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonReload, SIGNAL("clicked()"),
                     self.setService)
        self.connect(self.ui.checkStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonInfo, SIGNAL("clicked()"),
                     self.info.showDescription)

    def updateService(self, data, firstRun):
        self.type, self.desc, serviceState = data
        self.setState(serviceState, firstRun)
        self.ui.labelDesc.setText(self.desc)

    def setState(self, state, firstRun=False):
        if not firstRun:
            # There is a raise condition, FIXME in System.Service
            time.sleep(1)
            state = self.iface.info(self.package)[2]
        if state in ('on', 'started', 'conditional_started'):
            self.running = True
            icon = 'flag-green'
        else:
            self.running = False
            icon = 'flag-black'

        self.ui.buttonStop.setEnabled(self.running)
        self.ui.buttonReload.setEnabled(self.running)

        self.ui.labelStatus.setPixmap(KIcon(icon).pixmap(32, 32))
        self.showStatus()
        self.runningAtStart = False
        if state in ('on', 'stopped'):
            self.runningAtStart = True
        elif state in ('off', 'started', 'conditional_started'):
            self.runningAtStart = False
        self.ui.checkStart.setChecked(self.runningAtStart)
        self._last_state = self.ui.checkStart.isChecked()
        # print self.package, state

    def setService(self):
        try:
            self.showBusy()
            self._last_state = not self.ui.checkStart.isChecked()
            if self.sender() == self.ui.buttonStart:
                self.iface.start(self.package)
            elif self.sender() == self.ui.buttonStop:
                self.iface.stop(self.package)
            elif self.sender() == self.ui.buttonReload:
                self.iface.restart(self.package)
            elif self.sender() == self.ui.checkStart:
                self.iface.setEnable(self.package,
                                     self.ui.checkStart.isChecked())
        except Exception, msg:
            self.showStatus()
            self.root.showFail(msg)
Beispiel #32
0
class ServiceItemWidget(QtGui.QWidget):

    def __init__(self, package, parent, item):
        QtGui.QWidget.__init__(self, None)
        
        self.ui = Ui_ServiceItemWidget()
        self.ui.setupUi(self)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QtCore.QSize(32, 32))
        self.ui.mainLayout.insertWidget(0, self.busy)
        self.ui.spacer.hide()
        self.busy.hide()

        self.ui.labelName.setText(package)

        self.toggleButtons()

        self.ui.buttonStart.setIcon(KIcon("media-playback-start"))
        self.ui.buttonStop.setIcon(KIcon("media-playback-stop"))
        self.ui.buttonReload.setIcon(KIcon("view-refresh"))
        self.ui.buttonInfo.setIcon(KIcon("dialog-information"))

        self.toggled = False
        self.root = parent
        self.iface = parent.iface
        self.item = item
        self.package = package
        self.info = ServiceItemInfo(self)

        self.type = None
        self.desc = None
        self.connect(self.ui.buttonStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonStop, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonReload, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.checkStart, SIGNAL("clicked()"), self.setService)
        self.connect(self.ui.buttonInfo, SIGNAL("clicked()"), self.info.showDescription)

    def updateService(self, data, firstRun):
        self.type, self.desc, serviceState = data
        self.setState(serviceState, firstRun)
        self.ui.labelDesc.setText(self.desc)

    def setState(self, state, firstRun=False):
        if not firstRun:
            # There is a raise condition, FIXME in System.Service
            time.sleep(1)
            state = self.iface.info(self.package)[2]
        if state in ('on', 'started', 'conditional_started'):
            self.running = True
            icon = 'flag-green'
        else:
            self.running = False
            icon = 'flag-black'

        self.ui.buttonStop.setEnabled(self.running)
        self.ui.buttonReload.setEnabled(self.running)

        self.ui.labelStatus.setPixmap(KIcon(icon).pixmap(32, 32))
        self.showStatus()
        self.runningAtStart = False
        if state in ('on', 'stopped'):
            self.runningAtStart = True
        elif state in ('off', 'started', 'conditional_started'):
            self.runningAtStart = False
        self.ui.checkStart.setChecked(self.runningAtStart)
        self._last_state = self.ui.checkStart.isChecked()
        # print self.package, state

    def setService(self):
        try:
            self.showBusy()
            self._last_state = not self.ui.checkStart.isChecked()
            if self.sender() == self.ui.buttonStart:
                self.iface.start(self.package)
            elif self.sender() == self.ui.buttonStop:
                self.iface.stop(self.package)
            elif self.sender() == self.ui.buttonReload:
                self.iface.restart(self.package)
            elif self.sender() == self.ui.checkStart:
                self.iface.setEnable(self.package, self.ui.checkStart.isChecked())
        except Exception, msg:
            self.showStatus()
            self.root.showFail(msg)
Beispiel #33
0
class ConnectionItem(QtGui.QWidget, Ui_ConnectionItem):
    def __init__(self, parent, connection):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.available = True
        self.parent = parent
        self.connection = connection

        bus = parent.bus.get_object(NM_BUS_NAME,
                                    str(connection.proxy.object_path))
        interface = dbus.Interface(bus, NM_SETTINGS_CONNECTION)

        interface.connect_to_signal("Removed", parent.fillConnections)
        interface.connect_to_signal("Updated", self.updateState)

        self.busy = QProgressIndicator(self)
        self.busy.setMinimumSize(QSize(32, 32))
        self.mainLayout.insertWidget(0, self.busy)
        self.busy.hide()

        self.connect(parent, SIGNAL("stateChanged()"), self.updateState)
        self.button.clicked.connect(lambda: self.parent.setState(self))

        self.updateState()
        self.toggleButtons()

    def updateState(self, *args):
        if self.available is not True:
            return

        active = self.parent.isActive(self.connection)

        if active:
            state = self.parent.getState(self.connection)
            if state == ActiveConnectionState.ACTIVATED.value:
                self.setIcon(get_icon(self.connection.settings.conn_type,
                                      True))
            elif state == ActiveConnectionState.ACTIVATING.value:
                self.showBusy()
        else:
            self.setIcon(get_icon(self.connection.settings.conn_type, False))

        self.name.setText(unicode(self.connection.settings.id))
        self.details.setText(unicode(self.connection.settings.conn_type))
        self.button.setText("Disconnect" if active else "Connect")

    def showBusy(self):
        self.busy.busy()
        self.icon.hide()

    def setIcon(self, icon):
        self.busy.hide()
        self.icon.setPixmap(icon)
        self.icon.show()

    def resizeEvent(self, event):
        if self.parent.msgbox:
            self.parent.msgbox._resizeCallBacks(event)

    def enterEvent(self, event):
        if not self.button.isVisible():
            self.toggleButtons(True)

    def leaveEvent(self, event):
        if self.button.isVisible():
            self.toggleButtons()

    def toggleButtons(self, toggle=False):
        self.button.setVisible(toggle)
Beispiel #34
0
class MainWindow(KXmlGuiWindow, Ui_MainWindow):
    def __init__(self, app=None):
        KXmlGuiWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(KIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)

    def connectMainSignals(self):
        self.cw.connectMainSignals()
        self.connect(QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab), self),
                     SIGNAL("activated()"), lambda: self.moveTab('next'))
        self.connect(
            QShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Tab), self),
            SIGNAL("activated()"), lambda: self.moveTab('prev'))
        self.connect(QShortcut(QKeySequence(Qt.CTRL + Qt.Key_F), self),
                     SIGNAL("activated()"), self.cw.searchLine.setFocus)
        self.connect(QShortcut(QKeySequence(Qt.Key_F3), self),
                     SIGNAL("activated()"), self.cw.searchLine.setFocus)

        self.connect(self.settingsDialog, SIGNAL("packagesChanged()"),
                     self.cw.initialize)
        self.connect(self.settingsDialog, SIGNAL("packageViewChanged()"),
                     self.cw.updateSettings)
        self.connect(self.settingsDialog, SIGNAL("traySettingChanged()"),
                     self.tray.settingsChanged)
        self.connect(self.cw.state, SIGNAL("repositoriesChanged()"),
                     self.tray.populateRepositoryMenu)
        self.connect(self.cw, SIGNAL("repositoriesUpdated()"),
                     self.tray.updateTrayUnread)
        self.connect(KApplication.kApplication(), SIGNAL("shutDown()"),
                     self.slotQuit)

    def moveTab(self, direction):
        new_index = self.cw.stateTab.currentIndex() - 1
        if direction == 'next':
            new_index = self.cw.stateTab.currentIndex() + 1
        if new_index not in range(self.cw.stateTab.count()):
            new_index = 0
        self.cw.stateTab.setCurrentIndex(new_index)

    def initializeTray(self):
        self.tray = Tray(self, self.iface)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"),
                     self.trayAction)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"),
                     self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("operationCancelled()"),
                     self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("started(QString)"),
                     self.tray.animate)
        self.connect(self.tray, SIGNAL("showUpdatesSelected()"),
                     self.trayShowUpdates)

    def trayShowUpdates(self):
        self.showUpgradeAction.setChecked(True)

        self.cw.switchState(StateManager.UPGRADE)

        KApplication.kApplication().updateUserTimestamp()

        self.show()
        self.raise_()

    def trayAction(self, operation):
        if not self.isVisible() and operation in [
                "System.Manager.updateRepository",
                "System.Manager.updateAllRepositories"
        ]:
            self.tray.showPopup()
        if self.tray.isActive() and operation in [
                "System.Manager.updatePackage",
                "System.Manager.installPackage", "System.Manager.removePackage"
        ]:
            self.tray.updateTrayUnread()

    def initializeStatusBar(self):
        self.cw.mainLayout.insertWidget(0, self.busy)
        self.statusBar().addPermanentWidget(self.cw.actions, 1)
        self.statusBar().show()

        self.updateStatusBar('')

        self.connect(self.cw, SIGNAL("selectionStatusChanged(QString)"),
                     self.updateStatusBar)
        self.connect(self.cw, SIGNAL("updatingStatus()"), self.statusWaiting)

    def initializeActions(self):
        self.toolBar().setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
        KStandardAction.quit(KApplication.kApplication().quit,
                             self.actionCollection())
        KStandardAction.preferences(self.settingsDialog.show,
                                    self.actionCollection())
        self.setupGUI(
            KXmlGuiWindow.Default,
            "/usr/share/kde4/apps/package-manager/data/packagemanagerui.rc")
        self.initializeOperationActions()

    def initializeOperationActions(self):
        actionGroup = QtGui.QActionGroup(self)

        self.showAllAction = KToggleAction(KIcon("applications-other"),
                                           i18n("All Packages"), self)
        self.actionCollection().addAction("showAllAction", self.showAllAction)
        self.connect(self.showAllAction, SIGNAL("triggered()"),
                     lambda: self.cw.switchState(StateManager.ALL))
        self.cw.stateTab.addTab(QWidget(), KIcon("applications-other"),
                                i18n("All Packages"))
        actionGroup.addAction(self.showAllAction)

        self.showInstallAction = KToggleAction(KIcon("list-add"),
                                               i18n("Installable Packages"),
                                               self)
        self.actionCollection().addAction("showInstallAction",
                                          self.showInstallAction)
        self.connect(self.showInstallAction, SIGNAL("triggered()"),
                     lambda: self.cw.switchState(StateManager.INSTALL))
        self.cw.stateTab.addTab(QWidget(), KIcon("list-add"),
                                i18n("Installable Packages"))
        actionGroup.addAction(self.showInstallAction)

        self.showRemoveAction = KToggleAction(KIcon("list-remove"),
                                              i18n("Installed Packages"), self)
        self.actionCollection().addAction("showRemoveAction",
                                          self.showRemoveAction)
        self.connect(self.showRemoveAction, SIGNAL("triggered()"),
                     lambda: self.cw.switchState(StateManager.REMOVE))
        self.cw.stateTab.addTab(QWidget(), KIcon("list-remove"),
                                i18n("Installed Packages"))
        actionGroup.addAction(self.showRemoveAction)

        self.showUpgradeAction = KToggleAction(KIcon("system-software-update"),
                                               i18n("Updates"), self)
        self.actionCollection().addAction("showUpgradeAction",
                                          self.showUpgradeAction)
        self.connect(self.showUpgradeAction, SIGNAL("triggered()"),
                     lambda: self.cw.switchState(StateManager.UPGRADE))
        self.cw.stateTab.addTab(QWidget(), KIcon("system-software-update"),
                                i18n("Updates"))
        actionGroup.addAction(self.showUpgradeAction)

        # self.showHistoryAction = KToggleAction(KIcon("view-refresh"), i18n("History"), self)
        # self.actionCollection().addAction("showHistoryAction", self.showHistoryAction)
        # self.connect(self.showHistoryAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.HISTORY))
        # self.cw.stateTab.addTab(QWidget(), KIcon("view-refresh"), i18n("History"))
        # actionGroup.addAction(self.showHistoryAction)

        self.cw.menuButton.setMenu(QMenu('MainMenu', self.cw.menuButton))
        self.cw.menuButton.setIcon(KIcon('preferences-other'))
        self.cw.menuButton.menu().clear()

        self.cw.contentHistory.hide()

        # self.cw.menuButton.menu().addAction(self.showAllAction)
        # self.cw.menuButton.menu().addAction(self.showInstallAction)
        # self.cw.menuButton.menu().addAction(self.showRemoveAction)
        # self.cw.menuButton.menu().addAction(self.showUpgradeAction)
        # self.cw.menuButton.menu().addSeparator()

        self.cw.menuButton.menu().addAction(self.actionCollection().action(
            KStandardAction.name(KStandardAction.Preferences)))
        self.cw.menuButton.menu().addAction(self.actionCollection().action(
            KStandardAction.name(KStandardAction.Help)))
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionCollection().action(
            KStandardAction.name(KStandardAction.AboutApp)))
        self.cw.menuButton.menu().addAction(self.actionCollection().action(
            KStandardAction.name(KStandardAction.AboutKDE)))
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionCollection().action(
            KStandardAction.name(KStandardAction.Quit)))

        self.cw._states = {
            self.cw.state.ALL: (0, self.showAllAction),
            self.cw.state.INSTALL: (1, self.showInstallAction),
            self.cw.state.REMOVE: (2, self.showRemoveAction),
            self.cw.state.UPGRADE: (3, self.showUpgradeAction)
        }
        #                  self.cw.state.HISTORY:(4, self.showHistoryAction)}

        self.showAllAction.setChecked(True)
        self.cw.checkUpdatesButton.hide()
        self.cw.checkUpdatesButton.setIcon(KIcon('view-refresh'))
        self.cw.showBasketButton.clicked.connect(self.cw.showBasket)

        # Little time left for the new ui
        self.menuBar().setVisible(False)
        self.cw.switchState(self.cw.state.ALL)

    def statusWaiting(self):
        self.updateStatusBar(i18n('Calculating dependencies...'), busy=True)

    def updateStatusBar(self, text, busy=False):
        if text == '':
            text = i18n("Currently your basket is empty.")
            self.busy.hide()
            self.cw.showBasketButton.hide()
        else:
            self.cw.showBasketButton.show()

        if busy:
            self.busy.busy()
            self.cw.showBasketButton.hide()
        else:
            self.busy.hide()

        self.cw.statusLabel.setText(text)

    def queryClose(self):
        if config.PMConfig().systemTray(
        ) and not KApplication.kApplication().sessionSaving():
            self.hide()
            return False
        return True

    def queryExit(self):
        if not self.iface.operationInProgress():
            if self.tray:
                del self.tray.notification
            return True
        return False

    def slotQuit(self):
        if self.iface.operationInProgress():
            return
Beispiel #35
0
class WebDialog(PAbstractBox, Ui_WebDialog):
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.setupUi(self)

        self.iface = parent.iface

        # PDS Settings
        self._animation = 1
        self._duration = 400
        self.enableOverlay()
        self._disable_parent_in_shown = True

        self.registerFunction(IN, lambda: parent.statusBar().hide())
        self.registerFunction(FINISHED, lambda: parent.statusBar().setVisible(not self.isVisible()))
        self._as = 'http://onurguzel.com/appinfo'
        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("dialog-close"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.webView.page().setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateAllLinks)
        self.webView.page().linkClicked.connect(self.redirectLinks)

        self.tabWidget.removeTab(0)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self._filesThread = PThread(self, self.getFiles, self.getFilesFinished)
        self.filterLine.setListWidget(self.filesList)
        self.noconnection.hide()
        self.parent = parent

    def redirectLinks(self, url):
        if url.hasFragment():
            if url.fragment() == 'login':
                self.showLogin()
        else:
            PreviewDialog(self, url)

    def showLogin(self):
        self._hide()
        self.parent.settingsDialog.show()
        self.parent.settingsDialog.tabWidget.setCurrentIndex(4)

    def showPage(self, addr):
        if network_available():
            self.webView.load(QUrl(addr))
        else:
            self._sync_template(status = False)
        self.animate(start = BOTCENTER, stop = MIDCENTER)

    def getFiles(self):
        return self.iface.getPackageFiles(str(self.packageName.text()))

    def getFilesFinished(self):
        self.filesList.addItems(self._filesThread.get())
        self.filesList.sortItems()

    def _tabSwitched(self, index):
        if index == 0 and self.tabWidget.count() > 1:
            if self.filesList.count() == 0:
                self._filesThread.start()

    def _sync_template(self, status, package = '', summary = '', description = ''):
        def _replace(key, value):
            self.webView.page().mainFrame().evaluateJavaScript(\
                    '%s.innerHTML="%s";' % (key, value))

        self.busy.hide()
        self.busy.stopAnimation()

        if status:
            _replace('title', package)
            _replace('summary', summary)
            _replace('description', description)
            self.webWidget.show()
            self.noconnection.hide()
        else:
            self.noconnection.show()
            self.webWidget.hide()

        reset_proxy_settings()

    def showPackageDetails(self, package, installed, summary='', description=''):
        self.packageName.setText(package)
        self.key = config.PMConfig().getOpenDesktopKey()

        self.filesList.clear()
        self.webView.loadFinished.connect(lambda x: \
                self._sync_template(x, package, summary, description))

        if network_available():
            set_proxy_settings()
            self.webWidget.hide()
            self.busy.show()
            self.busy.startAnimation()
            params = {'p': package}
            if self.key:
                params['k'] = self.key
            self.webView.load(QUrl('%s/?%s' % (self._as, urlencode(params))))
        else:
            self._sync_template(status = False)

        self.tabWidget.insertTab(0, self.packageFiles, i18n('Package Files'))
        self.tabWidget.currentChanged.connect(self._tabSwitched)

        if not installed:
            self.tabWidget.removeTab(0)
            self.tabWidget.currentChanged.disconnect(self._tabSwitched)

        self.animate(start = BOTCENTER, stop = MIDCENTER)

    def _hide(self):
        self.busy.stopAnimation()
        try:
            self.webView.loadFinished.disconnect()
        except:
            pass
        self.animate(start = MIDCENTER, stop = BOTCENTER, direction = OUT)
Beispiel #36
0
class ProgressDialog(PAbstractBox, Ui_ProgressDialog):
    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 500
        self.last_msg = None
        self.enableOverlay()
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.connect(self.cancelButton, SIGNAL("clicked()"), self.cancel)
        self.parent = parent

        self.setStyleSheet(
            "QLabel, QTextEdit, QTextBrowser{background:rgba(0,0,0,0);color:white;}"
        )

        self._last_action = ''
        self._shown = False

    def _show(self):
        self.animate(start=MIDCENTER, stop=MIDCENTER)
        self._shown = True

    def _hide(self):
        if self._shown:
            self.animate(direction=OUT, start=MIDCENTER, stop=MIDCENTER)
            self.parent.setWindowTitle(i18n("Package Manager"))
            self._shown = False

    def updateProgress(self, progress):
        self.busy.stopAnimation()
        self.busy.hide()
        self.widget.show()
        if not self.isVisible():
            if not self.parent.cw._started:
                self.disableCancel()
            self._show()
        self.progressBar.setValue(progress)
        self.percentage.setText(i18n("<p align='right'>%1 %</p>", progress))
        self.parent.setWindowTitle(i18n("Operation - %1%", progress))

    def updateOperation(self, operation, arg):
        if operation in [i18n("configuring"), i18n("extracting")]:
            self.disableCancel()

        if operation == "updatingrepo":
            operationInfo = i18n("Downloading package list of %1", arg)
        else:
            operationInfo = i18n('%1 %2', operation, arg)

        self.operationInfo.setText(operationInfo)

    def updateStatus(self, packageNo, totalPackages, operation):
        text = i18n("[%1 / %2]", packageNo, totalPackages)
        self.actionLabel.setText("%s %s" % (text, self._last_action))

    def updateRemainingTime(self, time):
        self.timeRemaining.setText("<p align='right'>%s</p>" % time)

    def updateCompletedInfo(self, completed, total, rate):
        text = i18n("%1 / %2, %3", completed, total, rate)
        self.completedInfo.setText(text)

    def updateActionLabel(self, action):
        self.actionLabel.setText("<i>%s</i>" %
                                 self.state.getActionCurrent(action))
        self._last_action = self.actionLabel.toPlainText()

    def enableCancel(self):
        self.cancelButton.setEnabled(True)

    def disableCancel(self):
        self.cancelButton.setEnabled(False)

    def reset(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(i18n("Preparing PiSi..."))
        self.progressBar.setValue(0)
        self.operationInfo.setText("")
        self.completedInfo.setText("")
        self.timeRemaining.setText("<p align='right'>--:--:--</p>")
        self.timeRemaining.show()

    def cancel(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(i18n("<b>Cancelling operation...</b>"))
        self.disableCancel()
        QTimer.singleShot(100, self.iface.cancel)

    def repoOperationView(self):
        self.timeRemaining.setText("")
        self.timeRemaining.hide()
class ProgressDialog(PAbstractBox, Ui_ProgressDialog):
    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.cancelButton.clicked.connect(self.cancel)
        self.cancelButton.setIcon(QIcon.fromTheme("list-remove"))
        self.parent = parent
        self.widget.setStyleSheet("QTextEdit { \
            background:rgba(0,0,0,0); \
            color:white;}")

        self._last_action = ''
        self._shown = False

    def _show(self):
        self.animate(start=MIDCENTER, stop=MIDCENTER)
        self._shown = True
        print("start")

    def _hide(self):
        if self._shown:
            self.animate(direction=OUT, start=MIDCENTER, stop=MIDCENTER)
            self.parent.setWindowTitle(
                _translate("Package Manager", "Package Manager"))
            self._shown = False

    def updateProgress(self, progress):
        self.busy.stopAnimation()
        self.busy.hide()
        self.widget.show()
        if not self.isVisible():
            if not self.parent.cw._started:
                self.disableCancel()
            self._show()
        self.progressBar.setValue(progress)
        self.percentage.setText(
            _translate("Package Manager",
                       "<p align='right'>{0} %</p>").format(progress))
        self.parent.setWindowTitle(
            _translate("Package Manager", "Operation - {0}%").format(progress))

    def updateOperation(self, operation, arg):
        if operation in [
                _translate("Package Manager", "configuring"),
                _translate("Package Manager", "extracting")
        ]:
            self.disableCancel()

        if operation == "updatingrepo":
            operationInfo = _translate(
                "Package Manager",
                "Downloading package list of {0}").format(arg)
        else:
            operationInfo = _translate("Package Manager",
                                       '{0} {1}').format(operation, arg)

        self.operationInfo.setText(operationInfo)

    def updateStatus(self, packageNo, totalPackages, operation):
        text = _translate("Package Manager",
                          "[{0} / {1}]").format(packageNo, totalPackages)
        self.actionLabel.setText("%s %s" % (text, self._last_action))

    def updateRemainingTime(self, time):
        self.timeRemaining.setText("<p align='right'>%s</p>" % time)

    def updateCompletedInfo(self, completed, total, rate):
        text = _translate("Package Manager",
                          "{0} / {1}, {2}").format(completed, total, rate)
        self.completedInfo.setText(text)

    def updateActionLabel(self, action):
        self.actionLabel.setText("<i>%s</i>" %
                                 self.state.getActionCurrent(action))
        self._last_action = self.actionLabel.toPlainText()

    def enableCancel(self):
        self.cancelButton.setEnabled(True)

    def disableCancel(self):
        self.cancelButton.setEnabled(False)

    def reset(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(
            _translate("Package Manager", "Preparing PiSi..."))
        self.progressBar.setValue(0)
        self.operationInfo.setText("")
        self.completedInfo.setText("")
        self.timeRemaining.setText("<p align='right'>--:--:--</p>")
        self.timeRemaining.show()

    def cancel(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(
            _translate("Package Manager", "<b>Cancelling operation...</b>"))
        self.disableCancel()
        QTimer.singleShot(100, self.iface.cancel)

    def repoOperationView(self):
        self.timeRemaining.setText("")
        self.timeRemaining.hide()
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, app=None):
        QMainWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(QIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)

    def connectMainSignals(self):
        self.cw.connectMainSignals()
        self.connect(
            QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab), self), SIGNAL("activated()"), lambda: self.moveTab("next")
        )
        self.connect(
            QShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Tab), self),
            SIGNAL("activated()"),
            lambda: self.moveTab("prev"),
        )
        self.connect(
            QShortcut(QKeySequence(Qt.CTRL + Qt.Key_F), self), SIGNAL("activated()"), self.cw.searchLine.setFocus
        )
        self.connect(QShortcut(QKeySequence(Qt.Key_F3), self), SIGNAL("activated()"), self.cw.searchLine.setFocus)

        self.connect(self.settingsDialog, SIGNAL("packagesChanged()"), self.cw.initialize)
        self.connect(self.settingsDialog, SIGNAL("packageViewChanged()"), self.cw.updateSettings)
        self.connect(self.settingsDialog, SIGNAL("traySettingChanged()"), self.tray.settingsChanged)
        self.connect(self.cw.state, SIGNAL("repositoriesChanged()"), self.tray.populateRepositoryMenu)
        self.connect(self.cw, SIGNAL("repositoriesUpdated()"), self.tray.updateTrayUnread)
        self.connect(qApp, SIGNAL("shutDown()"), self.slotQuit)

    def moveTab(self, direction):
        new_index = self.cw.stateTab.currentIndex() - 1
        if direction == "next":
            new_index = self.cw.stateTab.currentIndex() + 1
        if new_index not in range(self.cw.stateTab.count()):
            new_index = 0
        self.cw.stateTab.setCurrentIndex(new_index)

    def initializeTray(self):
        self.tray = Tray(self, self.iface)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"), self.trayAction)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"), self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("operationCancelled()"), self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("started(QString)"), self.tray.animate)
        self.connect(self.tray, SIGNAL("showUpdatesSelected()"), self.trayShowUpdates)

    def trayShowUpdates(self):
        self.showUpgradeAction.setChecked(True)

        self.cw.switchState(StateManager.UPGRADE)

        KApplication.kApplication().updateUserTimestamp()

        self.show()
        self.raise_()

    def trayAction(self, operation):
        if not self.isVisible() and operation in [
            "System.Manager.updateRepository",
            "System.Manager.updateAllRepositories",
        ]:
            self.tray.showPopup()
        if self.tray.isVisible() and operation in [
            "System.Manager.updatePackage",
            "System.Manager.installPackage",
            "System.Manager.removePackage",
        ]:
            self.tray.updateTrayUnread()

    def initializeStatusBar(self):
        self.cw.mainLayout.insertWidget(0, self.busy)
        self.statusBar().addPermanentWidget(self.cw.actions, 1)
        self.statusBar().show()

        self.updateStatusBar("")

        self.connect(self.cw, SIGNAL("selectionStatusChanged(QString)"), self.updateStatusBar)
        self.connect(self.cw, SIGNAL("updatingStatus()"), self.statusWaiting)

    def initializeActions(self):
        self.initializeOperationActions()

    def initializeOperationActions(self):

        self.showAllAction = QAction(KIcon(("applications-other", "package_applications")), i18n("All Packages"), self)
        self.connect(self.showAllAction, SIGNAL("triggered()"), lambda: self.cw.switchState(StateManager.ALL))
        self.cw.stateTab.addTab(QWidget(), KIcon(("applications-other", "package_applications")), i18n("All Packages"))

        self.showInstallAction = QAction(KIcon(("list-add", "add")), i18n("Installable Packages"), self)
        self.connect(self.showInstallAction, SIGNAL("triggered()"), lambda: self.cw.switchState(StateManager.INSTALL))
        self.cw.stateTab.addTab(QWidget(), KIcon(("list-add", "add")), i18n("Installable Packages"))

        self.showRemoveAction = QAction(KIcon(("list-remove", "remove")), i18n("Installed Packages"), self)
        self.connect(self.showRemoveAction, SIGNAL("triggered()"), lambda: self.cw.switchState(StateManager.REMOVE))
        self.cw.stateTab.addTab(QWidget(), KIcon(("list-remove", "remove")), i18n("Installed Packages"))

        self.showUpgradeAction = QAction(KIcon(("system-software-update", "gear")), i18n("Updates"), self)
        self.connect(self.showUpgradeAction, SIGNAL("triggered()"), lambda: self.cw.switchState(StateManager.UPGRADE))
        self.cw.stateTab.addTab(QWidget(), KIcon(("system-software-update", "gear")), i18n("Updates"))

        self.showPreferences = QAction(KIcon(("preferences-system", "package_settings")), i18n("Settings"), self)
        self.connect(self.showPreferences, SIGNAL("triggered()"), self.settingsDialog.show)

        self.actionQuit = QAction(KIcon("exit"), i18n("Quit"), self)
        self.actionQuit.setShortcuts(QKeySequence.Quit)
        self.connect(self.actionQuit, SIGNAL("triggered()"), qApp.exit)

        self.cw.menuButton.setMenu(QMenu("MainMenu", self.cw.menuButton))
        self.cw.menuButton.setIcon(KIcon(("preferences-system", "package_settings")))
        self.cw.menuButton.menu().clear()

        self.cw.contentHistory.hide()

        self.cw.menuButton.menu().addAction(self.showPreferences)
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionQuit)

        self.cw._states = {
            self.cw.state.ALL: (0, self.showAllAction),
            self.cw.state.INSTALL: (1, self.showInstallAction),
            self.cw.state.REMOVE: (2, self.showRemoveAction),
            self.cw.state.UPGRADE: (3, self.showUpgradeAction),
        }

        self.showAllAction.setChecked(True)
        self.cw.checkUpdatesButton.hide()
        self.cw.checkUpdatesButton.setIcon(KIcon(("view-refresh", "reload")))
        self.cw.showBasketButton.clicked.connect(self.cw.showBasket)

        # Little time left for the new ui
        self.menuBar().setVisible(False)
        self.cw.switchState(self.cw.state.ALL)

    def statusWaiting(self):
        self.updateStatusBar(i18n("Calculating dependencies..."), busy=True)

    def updateStatusBar(self, text, busy=False):
        if text == "":
            text = i18n("Currently your basket is empty.")
            self.busy.hide()
            self.cw.showBasketButton.hide()
        else:
            self.cw.showBasketButton.show()

        if busy:
            self.busy.busy()
            self.cw.showBasketButton.hide()
        else:
            self.busy.hide()

        self.cw.statusLabel.setText(text)
        self.cw.statusLabel.setToolTip(text)

    def queryClose(self):
        if config.PMConfig().systemTray():
            self.hide()
            return False
        return True

    def queryExit(self):
        if not self.iface.operationInProgress():
            if self.tray:
                del self.tray.notification
            return True
        return False

    def slotQuit(self):
        if self.iface.operationInProgress():
            return
Beispiel #39
0
class ProgressDialog(PAbstractBox, Ui_ProgressDialog):

    def __init__(self, state, parent=None):
        PAbstractBox.__init__(self, parent)
        self.iface = backend.pm.Iface()
        self.state = state
        self.setupUi(self)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMinimumSize(QSize(48, 48))
        self.mainLayout.addWidget(self.busy)

        # PDS Settings
        self._animation = 2
        self._duration = 1
        self.last_msg = None
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(FINISHED, self.busy.startAnimation)
        self.registerFunction(OUT, self.busy.stopAnimation)

        self.connect(self.cancelButton, SIGNAL("clicked()"), self.cancel)
        self.cancelButton.setIcon(KIcon("cancel"))
        self.parent = parent

        self.setStyleSheet("QLabel, QTextEdit, QTextBrowser{background:rgba(0,0,0,0);color:white;}")

        self._last_action = ''
        self._shown = False

    def _show(self):
        self.animate(start = MIDCENTER, stop = MIDCENTER)
        self._shown = True

    def _hide(self):
        if self._shown:
            self.animate(direction = OUT, start = MIDCENTER, stop = MIDCENTER)
            self.parent.setWindowTitle(i18n("Package Manager"))
            self._shown = False

    def updateProgress(self, progress):
        self.busy.stopAnimation()
        self.busy.hide()
        self.widget.show()
        if not self.isVisible():
            if not self.parent.cw._started:
                self.disableCancel()
            self._show()
        self.progressBar.setValue(progress)
        self.percentage.setText(i18n("<p align='right'>%1 %</p>", progress))
        self.parent.setWindowTitle(i18n("Operation - %1%", progress))

    def updateOperation(self, operation, arg):
        if operation in [i18n("configuring"),  i18n("extracting")]:
            self.disableCancel()

        if operation == "updatingrepo":
            operationInfo = i18n("Downloading package list of %1", arg)
        else:
            operationInfo = i18n('%1 %2', operation, arg)

        self.operationInfo.setText(operationInfo)

    def updateStatus(self, packageNo, totalPackages, operation):
        text = i18n("[%1 / %2]", packageNo, totalPackages)
        self.actionLabel.setText("%s %s" % (text, self._last_action))

    def updateRemainingTime(self, time):
        self.timeRemaining.setText("<p align='right'>%s</p>" % time)

    def updateCompletedInfo(self, completed, total, rate):
        text = i18n("%1 / %2, %3", completed, total, rate)
        self.completedInfo.setText(text)

    def updateActionLabel(self, action):
        self.actionLabel.setText("<i>%s</i>" % self.state.getActionCurrent(action))
        self._last_action = self.actionLabel.toPlainText()

    def enableCancel(self):
        self.cancelButton.setEnabled(True)

    def disableCancel(self):
        self.cancelButton.setEnabled(False)

    def reset(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(i18n("Preparing PiSi..."))
        self.progressBar.setValue(0)
        self.operationInfo.setText("")
        self.completedInfo.setText("")
        self.timeRemaining.setText("<p align='right'>--:--:--</p>")
        self.timeRemaining.show()

    def cancel(self):
        self.widget.hide()
        self.busy.show()

        self.actionLabel.setText(i18n("<b>Cancelling operation...</b>"))
        self.disableCancel()
        QTimer.singleShot(100, self.iface.cancel)

    def repoOperationView(self):
        self.timeRemaining.setText("")
        self.timeRemaining.hide()
Beispiel #40
0
class WebDialog(PAbstractBox, Ui_WebDialog):
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.setupUi(self)

        self.iface = parent.iface

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(IN, lambda: parent.statusBar().hide())
        self.registerFunction(
            FINISHED,
            lambda: parent.statusBar().setVisible(not self.isVisible()))
        self._as = 'http://appinfo.pisilinux.org'
        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(KIcon("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.webView.page().setLinkDelegationPolicy(
            QtWebKit.QWebPage.DelegateAllLinks)
        self.webView.page().linkClicked.connect(self.showFullImage)

        self.tabWidget.removeTab(0)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self._filesThread = PThread(self, self.getFiles, self.getFilesFinished)
        self.noconnection.hide()
        self.parent = parent

    def showFullImage(self, url):
        PreviewDialog(self, url)

    def showPage(self, addr):
        if network_available():
            self.webView.load(QUrl(addr))
        else:
            self._sync_template(status=False)
        self.animate(start=BOTCENTER, stop=MIDCENTER)

    def getFiles(self):
        return self.iface.getPackageFiles(str(self.packageName.text()))

    def getFilesFinished(self):
        self.filesList.addItems(self._filesThread.get())
        self.filesList.sortItems()

    def _tabSwitched(self, index):
        if index == 0 and self.tabWidget.count() > 1:
            if self.filesList.count() == 0:
                self._filesThread.start()

    def _sync_template(self, status, package='', summary='', description=''):
        def _replace(key, value):
            self.webView.page().mainFrame().evaluateJavaScript(\
                    '%s.innerHTML="%s";' % (key, value))

        self.busy.hide()
        self.busy.stopAnimation()

        if status:
            _replace('title', package)
            _replace('summary', summary)
            _replace('description', description)
            self.webWidget.show()
            self.noconnection.hide()
        else:
            self.noconnection.show()
            self.webWidget.hide()

        reset_proxy_settings()

    def showPackageDetails(self,
                           package,
                           installed,
                           summary='',
                           description=''):
        self.packageName.setText(package)
        self.filesList.clear()

        self.tabWidget.insertTab(0, self.packageFiles, i18n('Package Files'))
        self.tabWidget.currentChanged.connect(self._tabSwitched)

        if config.USE_APPINFO:
            self.webView.loadFinished.connect(lambda x: \
                    self._sync_template(x, package, summary, description))

            if network_available():
                set_proxy_settings()
                self.webWidget.hide()
                self.busy.show()
                self.busy.startAnimation()
                self.webView.load(QUrl('%s/?p=%s' % (self._as, package)))
            else:
                self._sync_template(status=False)
        else:
            self.tabWidget.removeTab(1)
            self._filesThread.start()

        if not installed:
            self.tabWidget.removeTab(0)
            self.tabWidget.currentChanged.disconnect(self._tabSwitched)

        self.animate(start=BOTCENTER, stop=MIDCENTER)

    def _hide(self):
        self.busy.stopAnimation()
        try:
            self.webView.loadFinished.disconnect()
        except:
            pass
        self.animate(start=MIDCENTER, stop=BOTCENTER, direction=OUT)
Beispiel #41
0
class MainWindow(KXmlGuiWindow, Ui_MainWindow):
    def __init__(self, app = None):
        KXmlGuiWindow.__init__(self, None)
        self.setupUi(self)

        self.app = app
        self.iface = backend.pm.Iface()

        self.busy = QProgressIndicator(self)
        self.busy.setFixedSize(QSize(20, 20))

        self.setWindowIcon(KIcon(":/data/package-manager.png"))

        self.setCentralWidget(MainWidget(self))
        self.cw = self.centralWidget()

        self.settingsDialog = SettingsDialog(self)

        self.initializeActions()
        self.initializeStatusBar()
        self.initializeTray()
        self.connectMainSignals()

        self.pdsMessageBox = PMessageBox(self)

    def connectMainSignals(self):
        self.cw.connectMainSignals()
        self.connect(QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab),self),
                SIGNAL("activated()"), lambda: self.moveTab('next'))
        self.connect(QShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Tab),self),
                SIGNAL("activated()"), lambda: self.moveTab('prev'))
        self.connect(QShortcut(QKeySequence(Qt.CTRL + Qt.Key_F),self),
                SIGNAL("activated()"), self.cw.searchLine.setFocus)
        self.connect(QShortcut(QKeySequence(Qt.Key_F3),self),
                SIGNAL("activated()"), self.cw.searchLine.setFocus)

        self.connect(self.settingsDialog, SIGNAL("packagesChanged()"), self.cw.initialize)
        self.connect(self.settingsDialog, SIGNAL("packageViewChanged()"), self.cw.updateSettings)
        self.connect(self.settingsDialog, SIGNAL("traySettingChanged()"), self.tray.settingsChanged)
        self.connect(self.cw.state, SIGNAL("repositoriesChanged()"), self.tray.populateRepositoryMenu)
        self.connect(self.cw, SIGNAL("repositoriesUpdated()"), self.tray.updateTrayUnread)
        self.connect(KApplication.kApplication(), SIGNAL("shutDown()"), self.slotQuit)

    def moveTab(self, direction):
        new_index = self.cw.stateTab.currentIndex() - 1
        if direction == 'next':
            new_index = self.cw.stateTab.currentIndex() + 1
        if new_index not in range(self.cw.stateTab.count()):
            new_index = 0
        self.cw.stateTab.setCurrentIndex(new_index)

    def initializeTray(self):
        self.tray = Tray(self, self.iface)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"), self.trayAction)
        self.connect(self.cw.operation, SIGNAL("finished(QString)"), self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("operationCancelled()"), self.tray.stop)
        self.connect(self.cw.operation, SIGNAL("started(QString)"), self.tray.animate)
        self.connect(self.tray, SIGNAL("showUpdatesSelected()"), self.trayShowUpdates)

    def trayShowUpdates(self):
        self.showUpgradeAction.setChecked(True)

        self.cw.switchState(StateManager.UPGRADE)

        KApplication.kApplication().updateUserTimestamp()

        self.show()
        self.raise_()

    def trayAction(self, operation):
        if not self.isVisible() and operation in ["System.Manager.updateRepository", "System.Manager.updateAllRepositories"]:
            self.tray.showPopup()
        if self.tray.isActive() and operation in ["System.Manager.updatePackage",
                                                  "System.Manager.installPackage",
                                                  "System.Manager.removePackage"]:
            self.tray.updateTrayUnread()

    def initializeStatusBar(self):
        self.cw.mainLayout.insertWidget(0, self.busy)
        self.statusBar().addPermanentWidget(self.cw.actions, 1)
        self.statusBar().show()

        self.updateStatusBar('')

        self.connect(self.cw, SIGNAL("selectionStatusChanged(QString)"), self.updateStatusBar)
        self.connect(self.cw, SIGNAL("updatingStatus()"), self.statusWaiting)

    def initializeActions(self):
        self.toolBar().setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
        KStandardAction.quit(KApplication.kApplication().quit, self.actionCollection())
        KStandardAction.preferences(self.settingsDialog.show, self.actionCollection())
        self.setupGUI(KXmlGuiWindow.Default, "/usr/share/kde4/apps/package-manager/data/packagemanagerui.rc")
        self.initializeOperationActions()

    def initializeOperationActions(self):
        actionGroup = QtGui.QActionGroup(self)

        self.showAllAction = KToggleAction(KIcon("applications-other"), i18n("All Packages"), self)
        self.actionCollection().addAction("showAllAction", self.showAllAction)
        self.connect(self.showAllAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.ALL))
        self.cw.stateTab.addTab(QWidget(), KIcon("applications-other"), i18n("All Packages"))
        actionGroup.addAction(self.showAllAction)

        self.showInstallAction = KToggleAction(KIcon("list-add"), i18n("Installable Packages"), self)
        self.actionCollection().addAction("showInstallAction", self.showInstallAction)
        self.connect(self.showInstallAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.INSTALL))
        self.cw.stateTab.addTab(QWidget(), KIcon("list-add"), i18n("Installable Packages"))
        actionGroup.addAction(self.showInstallAction)

        self.showRemoveAction = KToggleAction(KIcon("list-remove"), i18n("Installed Packages"), self)
        self.actionCollection().addAction("showRemoveAction", self.showRemoveAction)
        self.connect(self.showRemoveAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.REMOVE))
        self.cw.stateTab.addTab(QWidget(), KIcon("list-remove"), i18n("Installed Packages"))
        actionGroup.addAction(self.showRemoveAction)

        self.showUpgradeAction = KToggleAction(KIcon("system-software-update"), i18n("Updates"), self)
        self.actionCollection().addAction("showUpgradeAction", self.showUpgradeAction)
        self.connect(self.showUpgradeAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.UPGRADE))
        self.cw.stateTab.addTab(QWidget(), KIcon("system-software-update"), i18n("Updates"))
        actionGroup.addAction(self.showUpgradeAction)

        # self.showHistoryAction = KToggleAction(KIcon("view-refresh"), i18n("History"), self)
        # self.actionCollection().addAction("showHistoryAction", self.showHistoryAction)
        # self.connect(self.showHistoryAction, SIGNAL("triggered()"), lambda:self.cw.switchState(StateManager.HISTORY))
        # self.cw.stateTab.addTab(QWidget(), KIcon("view-refresh"), i18n("History"))
        # actionGroup.addAction(self.showHistoryAction)

        self.cw.menuButton.setMenu(QMenu('MainMenu', self.cw.menuButton))
        self.cw.menuButton.setIcon(KIcon('preferences-other'))
        self.cw.menuButton.menu().clear()

        self.cw.contentHistory.hide()

        # self.cw.menuButton.menu().addAction(self.showAllAction)
        # self.cw.menuButton.menu().addAction(self.showInstallAction)
        # self.cw.menuButton.menu().addAction(self.showRemoveAction)
        # self.cw.menuButton.menu().addAction(self.showUpgradeAction)
        # self.cw.menuButton.menu().addSeparator()

        self.cw.menuButton.menu().addAction(self.actionCollection().action(KStandardAction.name(KStandardAction.Preferences)))
        self.cw.menuButton.menu().addAction(self.actionCollection().action(KStandardAction.name(KStandardAction.Help)))
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionCollection().action(KStandardAction.name(KStandardAction.AboutApp)))
        self.cw.menuButton.menu().addAction(self.actionCollection().action(KStandardAction.name(KStandardAction.AboutKDE)))
        self.cw.menuButton.menu().addSeparator()
        self.cw.menuButton.menu().addAction(self.actionCollection().action(KStandardAction.name(KStandardAction.Quit)))

        self.cw._states = {self.cw.state.ALL    :(0, self.showAllAction),
                           self.cw.state.INSTALL:(1, self.showInstallAction),
                           self.cw.state.REMOVE :(2, self.showRemoveAction),
                           self.cw.state.UPGRADE:(3, self.showUpgradeAction)}
        #                  self.cw.state.HISTORY:(4, self.showHistoryAction)}

        self.showAllAction.setChecked(True)
        self.cw.checkUpdatesButton.hide()
        self.cw.checkUpdatesButton.setIcon(KIcon('view-refresh'))
        self.cw.showBasketButton.clicked.connect(self.cw.showBasket)

        # Little time left for the new ui
        self.menuBar().setVisible(False)
        self.cw.switchState(self.cw.state.ALL)

    def statusWaiting(self):
        self.updateStatusBar(i18n('Calculating dependencies...'), busy = True)

    def updateStatusBar(self, text, busy = False):
        if text == '':
            text = i18n("Currently your basket is empty.")
            self.busy.hide()
            self.cw.showBasketButton.hide()
        else:
            self.cw.showBasketButton.show()

        if busy:
            self.busy.busy()
            self.cw.showBasketButton.hide()
        else:
            self.busy.hide()

        self.cw.statusLabel.setText(text)

    def queryClose(self):
        if config.PMConfig().systemTray() and not KApplication.kApplication().sessionSaving():
            self.hide()
            return False
        return True

    def queryExit(self):
        if not self.iface.operationInProgress():
            if self.tray:
                del self.tray.notification
            return True
        return False

    def slotQuit(self):
        if self.iface.operationInProgress():
            return
class WebDialog(PAbstractBox, Ui_WebDialog):
    finished = pyqtSignal()
    
    def __init__(self, parent):
        PAbstractBox.__init__(self, parent)
        self.setupUi(self)

        self.iface = backend.pm.Iface()   #parent.iface

        # PDS Settings
        self._animation = 1
        self._duration = 1
        self.enableOverlay()
        self.setOverlayOpacity(150)
        self._disable_parent_in_shown = True

        self.registerFunction(IN, lambda: parent.statusBar().hide())
        self.registerFunction(FINISHED, lambda: parent.statusBar().setVisible(not self.isVisible()))
        self._as = 'http://appinfo.pisilinux.org'
        self.cancelButton.clicked.connect(self._hide)
        self.cancelButton.setIcon(QIcon.fromTheme("cancel"))

        # Hide Scrollbars and context menu in webview
        self.webView.setContextMenuPolicy(Qt.NoContextMenu)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

        self.webView.page().setLinkDelegationPolicy(QtWebKitWidgets.QWebPage.DelegateAllLinks)
        self.webView.page().linkClicked.connect(self.showFullImage)

        self.tabWidget.removeTab(0)

        self.busy = QProgressIndicator(self, "white")
        self.busy.setMaximumSize(QSize(48, 48))
        self.webLayout.addWidget(self.busy)
        self.busy.hide()

        self._filesThread = PThread(self, self.getFiles, self.getFilesFinished)
        self.noconnection.hide()
        self.parent = parent
        
    def destroyed(self):
        self.finished.emit()

    def showFullImage(self, url):
        PreviewDialog(self, url)

    def showPage(self, addr):
        if network_available():
            self.webView.load(QUrl(addr))
        else:
            self._sync_template(status = False)
        self.animate(start = BOTCENTER, stop = MIDCENTER)

    def getFiles(self):
        files=self.iface.getPackageFiles(str(self.packageName.text()))
        self.filesList.addItems(files)
        self.filesList.sortItems()
        return files #self.iface.getPackageFiles(str(self.packageName.text()))

    def getFilesFinished(self):
        self.filesList.addItems(self._filesThread.get())
        self.filesList.sortItems()

    def _tabSwitched(self, index):
        if index == 0 and self.tabWidget.count() > 1:
            if self.filesList.count() == 0:
                self._filesThread.start()

    def _sync_template(self, status, package = '', summary = '', description = ''):
        def _replace(key, value):
            self.webView.page().mainFrame().evaluateJavaScript(\
                    '%s.innerHTML="%s";' % (key, value))

        self.busy.hide()
        self.busy.stopAnimation()

        if status:
            _replace('title', package)
            _replace('summary', summary)
            _replace('description', description)
            self.webWidget.show()
            self.noconnection.hide()
        else:
            self.noconnection.show()
            self.webWidget.hide()

        reset_proxy_settings()

    def showPackageDetails(self, package, installed, summary='', description=''):
        package = str(QVariant.value(package))
        summary = str(QVariant.value(summary))
        description = str(QVariant.value(description))
        
        self.packageName.setText(package)
        self.filesList.clear()
        
        
        self.tabWidget.insertTab(0, self.packageFiles, _translate("Packaga Manager",'Package Files'))
        self.tabWidget.currentChanged.connect(self._tabSwitched)

        if config.USE_APPINFO:
            self.webView.loadFinished.connect(lambda x: \
                    self._sync_template(x, package, summary, description))

            if network_available():
                set_proxy_settings()
                self.webWidget.hide()
                self.busy.show()
                self.busy.startAnimation()
                self.webView.load(QUrl('%s/?p=%s' % (self._as, package)))
            else:
                self._sync_template(status = False)
        else:
            self.tabWidget.removeTab(1)
        
        self._filesThread.start()

        if not installed:
            self.tabWidget.removeTab(0)
            self.tabWidget.currentChanged.disconnect(self._tabSwitched)

        self.animate(start = BOTCENTER, stop = MIDCENTER)

    def _hide(self):
        self.busy.stopAnimation()
        try:
            self.webView.loadFinished.disconnect()
        except:
            pass
        self.animate(start = MIDCENTER, stop = BOTCENTER, direction = OUT)