mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 04:32:33 -06:00
122 lines
4.1 KiB
Python
122 lines
4.1 KiB
Python
"""
|
|
DirectNotify module: this module contains the DirectNotify class
|
|
"""
|
|
|
|
import Notifier
|
|
import Logger
|
|
|
|
class DirectNotify:
|
|
"""
|
|
DirectNotify class: this class contains methods for creating
|
|
mulitple notify categories via a dictionary of Notifiers.
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""
|
|
DirectNotify class keeps a dictionary of Notfiers
|
|
"""
|
|
self.__categories = { }
|
|
# create a default log file
|
|
self.logger = Logger.Logger()
|
|
|
|
# This will get filled in later by ShowBase.py with a
|
|
# C++-level StreamWriter object for writing to standard
|
|
# output.
|
|
self.streamWriter = None
|
|
|
|
def __str__(self):
|
|
"""
|
|
Print handling routine
|
|
"""
|
|
return "DirectNotify categories: %s" % (self.__categories)
|
|
|
|
#getters and setters
|
|
def getCategories(self):
|
|
"""
|
|
Return list of category dictionary keys
|
|
"""
|
|
return (self.__categories.keys())
|
|
|
|
def getCategory(self, categoryName):
|
|
"""getCategory(self, string)
|
|
Return the category with given name if present, None otherwise
|
|
"""
|
|
return (self.__categories.get(categoryName, None))
|
|
|
|
def newCategory(self, categoryName, logger=None):
|
|
"""newCategory(self, string)
|
|
Make a new notify category named categoryName. Return new category
|
|
if no such category exists, else return existing category
|
|
"""
|
|
if (categoryName not in self.__categories):
|
|
self.__categories[categoryName] = Notifier.Notifier(categoryName, logger)
|
|
self.setDconfigLevel(categoryName)
|
|
return (self.getCategory(categoryName))
|
|
|
|
def setDconfigLevel(self, categoryName):
|
|
"""
|
|
Check to see if this category has a dconfig variable
|
|
to set the notify severity and then set that level. You cannot
|
|
set these until config is set.
|
|
"""
|
|
|
|
# We use ConfigVariableString instead of base.config, in case
|
|
# we're running before ShowBase has finished initializing; and
|
|
# we import it directly from libpandaexpress, in case we're
|
|
# running before libpanda.dll is available.
|
|
from panda3d.core import ConfigVariableString
|
|
|
|
dconfigParam = ("notify-level-" + categoryName)
|
|
cvar = ConfigVariableString(dconfigParam, "")
|
|
level = cvar.getValue()
|
|
|
|
if not level:
|
|
# see if there's an override of the default config level
|
|
cvar2 = ConfigVariableString('default-directnotify-level', 'info')
|
|
level = cvar2.getValue()
|
|
if not level:
|
|
level = 'error'
|
|
|
|
category = self.getCategory(categoryName)
|
|
# Note - this print statement is making it difficult to
|
|
# achieve "no output unless there's an error" operation - Josh
|
|
# print ("Setting DirectNotify category: " + categoryName +
|
|
# " to severity: " + level)
|
|
if level == "error":
|
|
category.setWarning(0)
|
|
category.setInfo(0)
|
|
category.setDebug(0)
|
|
elif level == "warning":
|
|
category.setWarning(1)
|
|
category.setInfo(0)
|
|
category.setDebug(0)
|
|
elif level == "info":
|
|
category.setWarning(1)
|
|
category.setInfo(1)
|
|
category.setDebug(0)
|
|
elif level == "debug":
|
|
category.setWarning(1)
|
|
category.setInfo(1)
|
|
category.setDebug(1)
|
|
else:
|
|
print ("DirectNotify: unknown notify level: " + str(level)
|
|
+ " for category: " + str(categoryName))
|
|
|
|
|
|
def setDconfigLevels(self):
|
|
for categoryName in self.getCategories():
|
|
self.setDconfigLevel(categoryName)
|
|
|
|
def setVerbose(self):
|
|
for categoryName in self.getCategories():
|
|
category = self.getCategory(categoryName)
|
|
category.setWarning(1)
|
|
category.setInfo(1)
|
|
category.setDebug(1)
|
|
|
|
def popupControls(self, tl = None):
|
|
from direct.tkpanels import NotifyPanel
|
|
NotifyPanel.NotifyPanel(self, tl)
|
|
|
|
def giveNotify(self,cls):
|
|
cls.notify = self.newCategory(cls.__name__)
|