oldschool-toontown/otp/web/SettingsMgrBase.py
2019-11-02 18:27:54 -04:00

65 lines
2 KiB
Python

from direct.directnotify.DirectNotifyGlobal import directNotify
class SettingsMgrBase:
notify = directNotify.newCategory('SettingsMgrBase')
def announceGenerate(self):
self._settings = {}
self._originalValueReprs = {}
self._currentValueReprs = {}
self._initSettings()
def delete(self):
del self._settings
def _initSettings(self):
pass
def _iterSettingNames(self):
for name in self._settings.iterkeys():
yield name
def _addSettings(self, *settings):
for setting in settings:
self._addSetting(setting)
def _addSetting(self, setting):
name = setting.getName()
if name in self._settings:
self.notify.error('duplicate setting "%s"' % name)
self._settings[name] = setting
self._originalValueReprs[name] = repr(setting.getValue())
self._currentValueReprs[name] = repr(setting.getValue())
def _getOriginalValueRepr(self, settingName):
return self._originalValueReprs.get(settingName)
def _getCurrentValueRepr(self, settingName):
return self._currentValueReprs.get(settingName)
def _removeSetting(self, setting):
del self._settings[setting.getName()]
del self._originalValueReprs[setting.getName()]
del self._currentValueReprs[setting.getName()]
def _getSetting(self, settingName):
return self._settings[settingName]
def _isSettingModified(self, settingName):
return self._getOriginalValueRepr(settingName) != self._getCurrentValueRepr(settingName)
def _changeSetting(self, settingName, valueStr):
try:
val = eval(valueStr)
except:
self.notify.warning('error evaling "%s" for setting "%s"' % (valueStr, settingName))
return
try:
setting = self._getSetting(settingName)
except:
self.notify.warning('unknown setting %s' % settingName)
return
setting.setValue(val)
self._currentValueReprs[settingName] = valueStr