From 7c448fa7d62dd8223bd881ad66c458b763ff09db Mon Sep 17 00:00:00 2001 From: Mark Mine Date: Sat, 9 Jun 2001 01:41:08 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/directnotify/DirectNotify.py | 147 ++++++++++++++++++++++++ direct/src/directnotify/Notifier.py | 33 +++++- 2 files changed, 179 insertions(+), 1 deletion(-) diff --git a/direct/src/directnotify/DirectNotify.py b/direct/src/directnotify/DirectNotify.py index a44ec4c9e2..22953b618b 100644 --- a/direct/src/directnotify/DirectNotify.py +++ b/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) + + diff --git a/direct/src/directnotify/Notifier.py b/direct/src/directnotify/Notifier.py index ba790d4c93..d536078c1f 100644 --- a/direct/src/directnotify/Notifier.py +++ b/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)