Переглянути джерело

*** empty log message ***

Mark Mine 24 роки тому
батько
коміт
7c448fa7d6

+ 147 - 0
direct/src/directnotify/DirectNotify.py

@@ -89,6 +89,153 @@ class DirectNotify:
         for categoryName in self.getCategories():
             self.setDconfigLevel(categoryName)
 
+    def popupControls(self, tl = None):
+        NotifyControlPanel(self, tl)
+
+class NotifyControlPanel:
+    """NotifyControlPanel class: this class contains methods for creating
+    a panel to control direct/panda notify categories."""
+
+    def __init__(self, directNotify, tl = None):
+        """__init__(self)
+        NotifyControlPanel class keeps a dictionary of Panda Notfiers"""
+        self.__categories = {}
+        self.activeCategory = None
+        self.popupControls(directNotify, tl)
+
+    def _getPandaCategories(self, category):
+        categories = [category]
+        for i in range(category.getNumChildren()):
+            child = category.getChild(i)
+            categories.append(self._getPandaCategories(child))
+        return categories
+
+    def getPandaCategories(self):
+        from PandaModules import Notify
+        topCategory = Notify.ptr().getTopCategory()
+        return self._getPandaCategories(topCategory)
+
+    def _getPandaCategoriesAsList(self, pc, list):
+        import types
+        for item in pc:
+            if type(item) == types.ListType:
+                self._getPandaCategoriesAsList(item, list)
+            else:
+                list.append(item)
+
+    def getPandaCategoriesAsList(self):
+        pc = self.getPandaCategories()
+        pcList = []
+        self._getPandaCategoriesAsList(pc, pcList)
+        return pcList[1:]
+
+    def setActivePandaCategory(self):
+        categoryName = self.categoryList.getcurselection()[0]
+        self.activeCategory = self.__categories.get(categoryName, None)
+        if self.activeCategory:
+            self.severity.set(self.activeCategory.getSeverity())
+
+    def setActiveSeverity(self):
+        if self.activeCategory:
+            self.activeCategory.setSeverity(self.severity.get())
+
+    def popupControls(self, directNotify, tl = None):
+        """ popupControls()
+            Popup control panel for interval.
+        """
+        base.wantTk = 1
+        import TkGlobal
+        from Tkinter import * 
+        import Pmw
+        from NotifySeverity import *
+        if tl == None:
+            tl = Toplevel()
+            tl.title('Notify Controls')
+            tl.geometry('300x400')
+        mainFrame = Frame(tl)
+        # Paned widget for dividing two halves
+        framePane = Pmw.PanedWidget(mainFrame, orient = HORIZONTAL)
+        categoryFrame = framePane.add('categories', size = 200)
+        severityFrame = framePane.add('severities', size = 50)
+        # Category frame
+        from NotifyCategory import *
+        # Assemble PANDA categories
+        categories = self.getPandaCategoriesAsList()
+        self.__categories = {}
+        categoryNames = []
+        for category in categories:
+            name = category.getBasename()
+            self.__categories[name] = category
+            categoryNames.append(name)
+        # Assemble DIRECT categories
+        for name in directNotify.getCategories():
+            category = directNotify.getCategory(name)
+            self.__categories[name] = category
+            categoryNames.append(name)
+        # Sort resulting list of names
+        categoryNames.sort()
+        # Create a listbox
+        self.categoryList = Pmw.ScrolledListBox(
+            categoryFrame,
+            labelpos = NW, label_text = 'Categories:',
+            listbox_takefocus = 1,
+            items = categoryNames,
+            selectioncommand = self.setActivePandaCategory)
+        self.categoryList.pack(expand = 1, fill = BOTH)
+                                           
+        # Severity frame
+        Label(severityFrame, text = 'Severity:',
+              justify = LEFT, anchor = W).pack()
+        self.severity = IntVar()
+        self.severity.set(0)
+        self.fatalSeverity = Radiobutton(severityFrame, text = 'Fatal',
+                                         justify = LEFT, anchor = W,
+                                         value = NSFatal,
+                                         variable = self.severity,
+                                         command = self.setActiveSeverity)
+        self.fatalSeverity.pack(fill = X)
+        self.errorSeverity = Radiobutton(severityFrame, text = 'Error',
+                                         justify = LEFT, anchor = W,
+                                         value = NSError,
+                                         variable = self.severity,
+                                         command = self.setActiveSeverity)
+        self.errorSeverity.pack(fill = X)
+        self.warningSeverity = Radiobutton(severityFrame, text = 'Warning',
+                                           justify = LEFT, anchor = W,
+                                           value = NSWarning,
+                                           variable = self.severity,
+                                           command = self.setActiveSeverity)
+        self.warningSeverity.pack(fill = X)
+        self.infoSeverity = Radiobutton(severityFrame, text = 'Info',
+                                        justify = LEFT, anchor = W,
+                                        value = NSInfo,
+                                        variable = self.severity,
+                                        command = self.setActiveSeverity)
+        self.infoSeverity.pack(fill = X)
+        self.debugSeverity = Radiobutton(severityFrame, text = 'Debug',
+                                         justify = LEFT, anchor = W,
+                                         value = NSDebug,
+                                         variable = self.severity,
+                                         command = self.setActiveSeverity)
+        self.debugSeverity.pack(fill = X)
+        self.spamSeverity = Radiobutton(severityFrame, text = 'Spam',
+                                        justify = LEFT, anchor = W,
+                                        value = NSSpam,
+                                        variable = self.severity,
+                                        command = self.setActiveSeverity)
+        self.spamSeverity.pack(fill = X)
+        # Pack frames
+        framePane.pack(expand = 1, fill = BOTH)
+        mainFrame.pack(expand = 1, fill = BOTH)
+        # Select first item
+        self.categoryList.select_set(0)
+        self.setActivePandaCategory()
+        # And grab focus (to allow keyboard navigation)
+        self.categoryList.component('listbox').focus_set()
+        # And set active index (so keypresses will start with index 0)
+        self.categoryList.component('listbox').activate(0)
+
+
 
 
 

+ 32 - 1
direct/src/directnotify/Notifier.py

@@ -36,7 +36,38 @@ class Notifier:
         Print handling routine"""
         return "%s: info = %d, warning = %d, debug = %d, logging = %d" % \
                (self.__name, self.__info, self.__warning, self.__debug, self.__logging)
-    
+
+    # Severity funcs
+    def setSeverity(self, severity):
+        from NotifySeverity import *
+        if severity >= NSError:
+            self.setWarning(0)
+            self.setInfo(0)
+            self.setDebug(0)
+        elif severity == NSWarning:
+            self.setWarning(1)
+            self.setInfo(0)
+            self.setDebug(0)
+        elif severity == NSInfo:
+            self.setWarning(1)
+            self.setInfo(1)
+            self.setDebug(0)
+        elif severity <= NSDebug:
+            self.setWarning(1)
+            self.setInfo(1)
+            self.setDebug(1)
+
+    def getSeverity(self):
+        from NotifySeverity import *
+        if self.getDebug():
+            return NSDebug
+        elif self.getInfo():
+            return NSInfo
+        elif self.getWarning():
+            return NSWarning
+        else:
+            return NSError
+
     # error funcs
     def error(self, errorString, exception=StandardError):
         """error(self, string, Exception=StandardError)