VCS/StatusMonitorLed.py

changeset 0
de9c2efb9d02
child 6
52e8c820d0dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VCS/StatusMonitorLed.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,140 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2007 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a LED to indicate the status of the VCS status monitor thread.
+"""
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4Led import E4Led, E4LedRectangular
+
+import Preferences
+
+class StatusMonitorLed(E4Led):
+    """
+    Class implementing a LED to indicate the status of the VCS status monitor thread.
+    """
+    def __init__(self, project, parent):
+        """
+        Constructor
+        
+        @param project reference to the project object (Project.Project)
+        @param parent reference to the parent object (QWidget)
+        """
+        E4Led.__init__(self, parent, shape = E4LedRectangular, rectRatio = 1.0)
+        
+        self.project = project
+        self.vcsMonitorLedColors = {
+            "off"       : QColor(Qt.lightGray),
+            "ok"        : QColor(Qt.green),
+            "nok"       : QColor(Qt.red),
+            "op"        : QColor(Qt.yellow),
+            "send"      : QColor(Qt.blue), 
+            "wait"      : QColor(Qt.cyan), 
+            "timeout"   : QColor(Qt.darkRed)
+        }
+        self.__on = False
+        
+        self.setWhatsThis(self.trUtf8(
+            """<p>This LED indicates the operating"""
+            """ status of the VCS monitor thread (off = monitoring off,"""
+            """ green = monitoring on and ok, red = monitoring on, but not ok,"""
+            """ yellow = checking VCS status). A status description is given"""
+            """ in the tooltip.</p>"""
+        ))
+        self.setToolTip(\
+            self.trUtf8("Repository status checking is switched off")
+        )
+        self.setColor(self.vcsMonitorLedColors["off"])
+        
+        # define a context menu
+        self.__menu = QMenu(self)
+        self.__checkAct = \
+            self.__menu.addAction(self.trUtf8("Check status"), self.__checkStatus)
+        self.__intervalAct = \
+            self.__menu.addAction(self.trUtf8("Set interval..."), self.__setInterval)
+        self.__menu.addSeparator()
+        self.__onAct  = \
+            self.__menu.addAction(self.trUtf8("Switch on"), self.__switchOn)
+        self.__offAct = \
+            self.__menu.addAction(self.trUtf8("Switch off"), self.__switchOff)
+        self.__checkActions()
+        
+        # connect signals to our slots
+        self.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.connect(self, SIGNAL("customContextMenuRequested(const QPoint &)"),
+                     self._showContextMenu)
+        self.connect(self.project, SIGNAL('vcsStatusMonitorStatus(QString, QString)'),
+                     self.__projectVcsMonitorStatus)
+    
+    def __checkActions(self):
+        """
+        Private method to set the enabled status of the context menu actions.
+        """
+        if self.project.pudata["VCSSTATUSMONITORINTERVAL"]:
+            vcsStatusMonitorInterval = self.project.pudata["VCSSTATUSMONITORINTERVAL"][0]
+        else:
+            vcsStatusMonitorInterval = Preferences.getVCS("StatusMonitorInterval")
+        self.__checkAct.setEnabled(self.__on)
+        self.__intervalAct.setEnabled(self.__on)
+        self.__onAct.setEnabled((not self.__on) and vcsStatusMonitorInterval > 0)
+        self.__offAct.setEnabled(self.__on)
+        
+    def __projectVcsMonitorStatus(self, status, statusMsg):
+        """
+        Private method to receive the status monitor status.
+        
+        @param status status of the monitoring thread (string, ok, nok or off)
+        @param statusMsg explanotory text for the signaled status (string)
+        """
+        self.setColor(self.vcsMonitorLedColors[unicode(status)])
+        self.setToolTip(statusMsg)
+        
+        self.__on = status != 'off'
+    
+    def _showContextMenu(self, coord):
+        """
+        Protected slot to show the context menu.
+        
+        @param coord the position of the mouse pointer (QPoint)
+        """
+        if not self.project.isOpen():
+            return
+        
+        self.__checkActions()
+        self.__menu.popup(self.mapToGlobal(coord))
+    
+    def __checkStatus(self):
+        """
+        Private slot to initiate a new status check.
+        """
+        self.project.checkVCSStatus()
+    
+    def __setInterval(self):
+        """
+        Private slot to change the status check interval.
+        """
+        interval,  ok = QInputDialog.getInteger(\
+            None,
+            self.trUtf8("VCS Status Monitor"),
+            self.trUtf8("Enter monitor interval [s]"),
+            self.project.getStatusMonitorInterval(), 
+            0, 3600, 1)
+        if ok:
+            self.project.setStatusMonitorInterval(interval)
+    
+    def __switchOn(self):
+        """
+        Private slot to switch the status monitor thread to On.
+        """
+        self.project.startStatusMonitor()
+    
+    def __switchOff(self):
+        """
+        Private slot to switch the status monitor thread to Off.
+        """
+        self.project.stopStatusMonitor()

eric ide

mercurial