diff options
Diffstat (limited to 'debian/compizconfig-python-trinity/compizconfig-python-trinity-0.8.4/src/compizconfig.pyx')
-rw-r--r-- | debian/compizconfig-python-trinity/compizconfig-python-trinity-0.8.4/src/compizconfig.pyx | 1307 |
1 files changed, 0 insertions, 1307 deletions
diff --git a/debian/compizconfig-python-trinity/compizconfig-python-trinity-0.8.4/src/compizconfig.pyx b/debian/compizconfig-python-trinity/compizconfig-python-trinity-0.8.4/src/compizconfig.pyx deleted file mode 100644 index f8ab652c..00000000 --- a/debian/compizconfig-python-trinity/compizconfig-python-trinity-0.8.4/src/compizconfig.pyx +++ /dev/null @@ -1,1307 +0,0 @@ -''' -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Authors: - Quinn Storm ([email protected]) - Patrick Niklaus ([email protected]) - Guillaume Seguin ([email protected]) -Copyright (C) 2007 Quinn Storm -''' - -import operator -StringSettingKeyFunc = operator.itemgetter (1) - -ctypedef unsigned int Bool - -cdef enum CCSSettingType: - TypeBool - TypeInt - TypeFloat - TypeString - TypeColor - TypeAction - TypeKey - TypeButton - TypeEdge - TypeBell - TypeMatch - TypeList - TypeNum - -cdef enum CCSPluginConflictType: - # produced on plugin activation - ConflictRequiresPlugin, - ConflictRequiresFeature, - ConflictFeature, - ConflictPlugin, - # produced on plugin deactivation - ConflictFeatureNeeded, - ConflictPluginNeeded, - ConflictPluginError - -SettingTypeString = [ - "Bool", - "Int", - "Float", - "String", - "Color", - "Action", - "Key", - "Button", - "Edge", - "Bell", - "Match", - "List", - "Invalid" -] - -ConflictTypeString = [ - "RequiresPlugin", #A - "RequiresFeature", #A - "ConflictFeature", #A - "ConflictPlugin", #A - "FeatureNeeded", #D - "PluginNeeded", #D - "PluginError" -] - -cdef struct CCSList: - void * data - CCSList * next - -ctypedef CCSList CCSSettingList -ctypedef CCSList CCSPluginList -ctypedef CCSList CCSStringList -ctypedef CCSList CCSGroupList -ctypedef CCSList CCSSubGroupList -ctypedef CCSList CCSPluginConflictList -ctypedef CCSList CCSSettingValueList -ctypedef CCSList CCSBackendInfoList -ctypedef CCSList CCSIntDescList -ctypedef CCSList CCSStrRestrictionList -ctypedef CCSList CCSStrExtensionList - -cdef struct CCSBackendInfo: - char * name - char * shortDesc - char * longDesc - Bool integrationSupport - Bool profileSupport - -cdef struct CCSSettingKeyValue: - int keysym - unsigned int keyModMask - -cdef struct CCSSettingButtonValue: - int button - unsigned int buttonModMask - int edgeMask - -cdef struct CCSSettingColorValueColor: - unsigned short red - unsigned short green - unsigned short blue - unsigned short alpha - -cdef union CCSSettingColorValue: - CCSSettingColorValueColor color - unsigned short array[4] - -cdef union CCSSettingValueUnion: - Bool asBool - int asInt - float asFloat - char * asString - char * asMatch - CCSSettingColorValue asColor - CCSSettingValueList * asList - CCSSettingKeyValue asKey - CCSSettingButtonValue asButton - unsigned int asEdge - Bool asBell - -cdef struct CCSIntDesc: - int value - char * name - -cdef struct CCSStrRestriction: - char * value - char * name - -cdef struct CCSSettingIntInfo: - int min - int max - CCSIntDescList * desc - -cdef struct CCSSettingFloatInfo: - float min - float max - float precision - -cdef struct CCSSettingStringInfo: - CCSStrRestrictionList * restriction - int sortStartsAt - Bool extensible - -cdef struct CCSSettingListInfo: - CCSSettingType listType - void * listInfo # actually CCSSettingInfo *, works around pyrex - -cdef struct CCSSettingActionInfo: - Bool internal - -cdef union CCSSettingInfo: - CCSSettingIntInfo forInt - CCSSettingFloatInfo forFloat - CCSSettingStringInfo forString - CCSSettingListInfo forList - CCSSettingActionInfo forAction - -cdef struct CCSSettingValue: - CCSSettingValueUnion value - void * parent - Bool isListChild - -cdef struct CCSGroup: - char * name - CCSSubGroupList * subGroups - -cdef struct CCSSubGroup: - char * name - CCSSettingList * settings - -cdef struct CCSPluginCategory: - char * name - char * shortDesc - char * longDesc - CCSStringList * plugins - -cdef struct CCSContext: - CCSPluginList * plugins - CCSPluginCategory * categories - - void * priv - void * ccsPrivate - - CCSSettingList * changedSettings - - unsigned int * screens - unsigned int numScreens - -cdef struct CCSPlugin - -cdef struct CCSSetting: - char * name - char * shortDesc - char * longDesc - - CCSSettingType type - - Bool isScreen - unsigned int screenNum - - CCSSettingInfo info - char * group - char * subGroup - char * hints - - CCSSettingValue defaultValue - CCSSettingValue * value - Bool isDefault - - CCSPlugin * parent - void * priv - -cdef struct CCSStrExtension: - char * basePlugin - CCSSettingList * baseSettings - CCSStrRestrictionList * restriction - Bool isScreen - -cdef struct CCSPlugin: - char * name - char * shortDesc - char * longDesc - char * hints - char * category - - CCSStringList * loadAfter - CCSStringList * loadBefore - CCSStringList * requiresPlugin - CCSStringList * conflictPlugin - CCSStringList * conflictFeature - CCSStringList * providesFeature - CCSStringList * requiresFeature - - void * priv - CCSContext * context - void * ccsPrivate - -cdef struct CCSPluginConflict: - char * value - CCSPluginConflictType type - CCSPluginList * plugins - -'''Context functions''' -cdef extern void ccsSetBasicMetadata (Bool value) -cdef extern CCSContext * ccsContextNew (unsigned int * screens, - unsigned int numScreens) -cdef extern CCSContext * ccsEmptyContextNew (unsigned int * screens, - unsigned int numScreens) -cdef extern void ccsContextDestroy (CCSContext * context) - -'''Plugin functions''' -cdef extern Bool ccsLoadPlugin (CCSContext * context, char * name) -cdef extern CCSPlugin * ccsFindPlugin (CCSContext * context, char * name) -cdef extern CCSSetting * ccsFindSetting (CCSPlugin * plugin, - char * name, - Bool isScreen, - int screenNum) -cdef extern CCSSettingList * ccsGetPluginSettings (CCSPlugin * plugin) -cdef extern CCSGroupList * ccsGetPluginGroups (CCSPlugin * plugin) - -'''Action => String''' -cdef extern char * ccsModifiersToString (unsigned int modMask) -cdef extern char * ccsEdgesToString (unsigned int edge) -cdef extern char * ccsEdgesToModString (unsigned int edge) -cdef extern char * ccsKeyBindingToString (CCSSettingKeyValue *key) -cdef extern char * ccsButtonBindingToString (CCSSettingButtonValue *button) - -'''String utils''' -cdef extern from 'string.h': - ctypedef int size_t - cdef extern char * strdup (char * s) - cdef extern void memset (void * s, int c, size_t n) - cdef extern void free (void * f) - cdef extern void * malloc (size_t s) - -'''String => Action''' -cdef extern unsigned int ccsStringToModifiers (char *binding) -cdef extern unsigned int ccsStringToEdges (char *edge) -cdef extern unsigned int ccsModStringToEdges (char *edge) -cdef extern Bool ccsStringToKeyBinding (char * binding, - CCSSettingKeyValue * key) -cdef extern Bool ccsStringToButtonBinding (char * binding, - CCSSettingButtonValue * button) - -'''General settings handling''' -cdef extern Bool ccsSetValue (CCSSetting * setting, - CCSSettingValue * value) -cdef extern void ccsFreeSettingValue (CCSSettingValue * value) -cdef extern CCSSettingValueList * ccsSettingValueListAppend ( - CCSSettingValueList * l, - CCSSettingValue * v) -cdef extern CCSSettingList *ccsSettingListFree (CCSSettingList * list, - Bool freeObj) - -'''Profiles''' -cdef extern CCSStringList * ccsGetExistingProfiles (CCSContext * context) -cdef extern void ccsDeleteProfile (CCSContext * context, char * name) -cdef extern void ccsSetProfile (CCSContext * context, char * name) -cdef extern char* ccsGetProfile (CCSContext * context) - -'''Backends''' -cdef extern CCSBackendInfoList * ccsGetExistingBackends () -cdef extern Bool ccsSetBackend (CCSContext * context, char * name) -cdef extern char* ccsGetBackend (CCSContext * context) - -'''Sorting''' -cdef extern void ccsSetPluginListAutoSort (CCSContext *context, Bool value) -cdef extern Bool ccsGetPluginListAutoSort (CCSContext *context) - -'''Integration''' -cdef extern void ccsSetIntegrationEnabled (CCSContext * context, Bool value) -cdef extern Bool ccsGetIntegrationEnabled (CCSContext * context) - -'''IO handling''' -cdef extern void ccsReadSettings (CCSContext * c) -cdef extern void ccsWriteSettings (CCSContext * c) -cdef extern void ccsWriteChangedSettings (CCSContext * c) -cdef extern void ccsResetToDefault (CCSSetting * s) - -'''Event loop''' -ProcessEventsNoGlibMainLoopMask = (1 << 0) -cdef extern void ccsProcessEvents (CCSContext * context, unsigned int flags) - -'''Import/export''' -cdef extern Bool ccsExportToFile (CCSContext * context, char * fileName, Bool skipDefaults) -cdef extern Bool ccsImportFromFile (CCSContext * context, - char * fileName, - Bool overwrite) - -'''Misc. Plugin/Setting utils''' -cdef extern Bool ccsSettingIsReadOnly (CCSSetting * setting) -cdef extern Bool ccsSettingIsIntegrated (CCSSetting * setting) - -cdef extern void ccsPluginConflictListFree (CCSPluginConflictList * l, - Bool freeObj) -cdef extern CCSPluginConflictList * ccsCanEnablePlugin (CCSContext * c, - CCSPlugin * p) -cdef extern CCSPluginConflictList * ccsCanDisablePlugin (CCSContext * c, - CCSPlugin * p) - -cdef extern Bool ccsPluginSetActive (CCSPlugin * p, Bool v) -cdef extern Bool ccsPluginIsActive (CCSContext * c, char * n) - -cdef extern CCSStrExtensionList * ccsGetPluginStrExtensions (CCSPlugin * plugin) - -cdef class Context -cdef class Plugin -cdef class Setting - -cdef CCSSettingType GetType (CCSSettingValue * value): - if value.isListChild: - return (<CCSSetting *> value.parent).info.forList.listType - else: - return (<CCSSetting *> value.parent).type - -cdef CCSStringList * ListToStringList (object list): - if len (list) <= 0: - return NULL - - cdef CCSStringList * listStart - cdef CCSStringList * stringList - cdef CCSStringList * prev - listStart = <CCSStringList *> malloc (sizeof (CCSStringList)) - listStart.data = <char *> strdup (list[0]) - listStart.next = NULL - prev = listStart - - for l in list[1:]: - stringList = <CCSStringList *> malloc (sizeof (CCSStringList)) - stringList.data = <char *> strdup (l) - stringList.next = NULL - prev.next = stringList - prev = stringList - - return listStart - -cdef object StringListToList (CCSList * stringList): - list = [] - while stringList: - item = <char *> stringList.data - list.append (item) - stringList = stringList.next - return list - -cdef CCSSettingList * ListToSettingList (object list): - if len (list) <= 0: - return NULL - - cdef CCSSettingList * listStart - cdef CCSSettingList * settingList - cdef CCSSettingList * prev - cdef Setting setting - - listStart = <CCSSettingList *> malloc (sizeof (CCSSettingList)) - setting = <Setting> list[0] - listStart.data = <CCSSetting *> setting.ccsSetting - listStart.next = NULL - prev = listStart - - for l in list[1:]: - settingList = <CCSSettingList *> malloc (sizeof (CCSSettingList)) - setting = <Setting> l - settingList.data = <CCSSetting *> setting.ccsSetting - settingList.next = NULL - prev.next = settingList - prev = settingList - - return listStart - -cdef object SettingListToList (Context context, CCSList * settingList): - cdef CCSSetting * ccsSetting - list = [] - - while settingList: - ccsSetting = <CCSSetting *> settingList.data - setting = None - plugin = context.Plugins[ccsSetting.parent.name] - if ccsSetting.isScreen: - setting = plugin.Screens[ccsSetting.screenNum][ccsSetting.name] - else: - setting = plugin.Display[ccsSetting.name] - list.append (setting) - settingList = settingList.next - - return list - -cdef object IntDescListToDict (CCSIntDescList * intDescList): - cdef CCSIntDesc * desc - dict = {} - while intDescList: - desc = <CCSIntDesc *> intDescList.data - dict[desc.name] = desc.value - intDescList = intDescList.next - return dict - -cdef object StrRestrictionListToDict (CCSStrRestrictionList * restrictionList, - object initialDict): - cdef CCSStrRestriction * restriction - dict = initialDict - listOfAddedItems = [] - while restrictionList: - restriction = <CCSStrRestriction *> restrictionList.data - dict[restriction.name] = restriction.value - listOfAddedItems.append ((restriction.name, restriction.value)) - restrictionList = restrictionList.next - return (dict, listOfAddedItems) - -cdef CCSSettingValue * EncodeValue (object data, - CCSSetting * setting, - Bool isListChild): - cdef CCSSettingValue * bv - cdef CCSSettingType t - cdef CCSList * l - bv = <CCSSettingValue *> malloc (sizeof (CCSSettingValue)) - memset (bv, 0, sizeof (CCSSettingValue)) - bv.isListChild = isListChild - bv.parent = setting - if isListChild: - t = setting.info.forList.listType - else: - t = setting.type - if t == TypeString: - bv.value.asString = strdup (data) - elif t == TypeMatch: - bv.value.asMatch = strdup (data) - elif t == TypeInt: - bv.value.asInt = data - elif t == TypeFloat: - bv.value.asFloat = data - elif t == TypeBool: - if data: - bv.value.asBool = 1 - else: - bv.value.asBool = 0 - elif t == TypeColor: - bv.value.asColor.color.red = data[0] - bv.value.asColor.color.green = data[1] - bv.value.asColor.color.blue = data[2] - bv.value.asColor.color.alpha = data[3] - elif t == TypeKey: - ccsStringToKeyBinding (data, &bv.value.asKey) - elif t == TypeButton: - ccsStringToButtonBinding (data, &bv.value.asButton) - elif t == TypeEdge: - bv.value.asEdge = ccsStringToEdges (data) - elif t == TypeBell: - if (data): - bv.value.asBell = 1 - else: - bv.value.asBell = 0 - elif t == TypeList: - l = NULL - for item in data: - l = ccsSettingValueListAppend (l, EncodeValue (item, setting, 1)) - bv.value.asList = l - return bv - -cdef object DecodeValue (CCSSettingValue * value): - cdef CCSSettingType t - cdef char * s - cdef CCSList * l - cdef object cs - cdef object ks - cdef object bs - cdef object es - cdef object eb - t = GetType (value) - if t == TypeString: - return value.value.asString - elif t == TypeMatch: - return value.value.asMatch - elif t == TypeBool: - if value.value.asBool: - return True - return False - elif t == TypeInt: - return value.value.asInt - elif t == TypeFloat: - return value.value.asFloat - elif t == TypeColor: - return [value.value.asColor.color.red, - value.value.asColor.color.green, - value.value.asColor.color.blue, - value.value.asColor.color.alpha] - elif t == TypeKey: - s = ccsKeyBindingToString (&value.value.asKey) - if s != NULL: - ks = s - free (s) - else: - ks = "None" - return ks - elif t == TypeButton: - s = ccsButtonBindingToString (&value.value.asButton) - if s != NULL: - bs = s - free (s) - else: - bs = "None" - if bs == "Button0": - bs = "None" - return bs - elif t == TypeEdge: - s = ccsEdgesToString (value.value.asEdge) - if s != NULL: - es = s - free (s) - else: - es = "None" - return es - elif t == TypeBell: - bb = False - if value.value.asBell: - bb = True - return bb - elif t == TypeList: - lret = [] - l = value.value.asList - while l != NULL: - lret.append (DecodeValue (<CCSSettingValue *> l.data)) - l = l.next - return lret - return "Unhandled" - -cdef class Setting: - cdef CCSSetting * ccsSetting - cdef object info - cdef Plugin plugin - cdef object extendedStrRestrictions - cdef object baseStrRestrictions - - def __new__ (self, Plugin plugin, name, isScreen, screenNum = 0): - cdef CCSSettingType t - cdef CCSSettingInfo * i - - self.ccsSetting = ccsFindSetting (plugin.ccsPlugin, - name, isScreen, screenNum) - self.plugin = plugin - - self.extendedStrRestrictions = None - self.baseStrRestrictions = None - info = () - t = self.ccsSetting.type - i = &self.ccsSetting.info - if t == TypeList: - t = self.ccsSetting.info.forList.listType - i = <CCSSettingInfo *> self.ccsSetting.info.forList.listInfo - if t == TypeInt: - desc = IntDescListToDict (i.forInt.desc) - info = (i.forInt.min, i.forInt.max, desc) - elif t == TypeFloat: - info = (i.forFloat.min, i.forFloat.max, - i.forFloat.precision) - elif t == TypeString: - # info is filled later in Plugin.SortSingleStringSetting - info = ({}, {}, []) - self.baseStrRestrictions = [] - self.extendedStrRestrictions = {} - elif t in (TypeKey, TypeButton, TypeEdge, TypeBell): - info = (bool (i.forAction.internal),) - if self.ccsSetting.type == TypeList: - info = (SettingTypeString[t], info) - self.info = info - - def Reset (self): - ccsResetToDefault (self.ccsSetting) - - property Plugin: - def __get__ (self): - return self.plugin - - property Name: - def __get__ (self): - return self.ccsSetting.name - - property ShortDesc: - def __get__ (self): - return self.ccsSetting.shortDesc - - property LongDesc: - def __get__ (self): - return self.ccsSetting.longDesc - - property Group: - def __get__ (self): - return self.ccsSetting.group - - property SubGroup: - def __get__ (self): - return self.ccsSetting.subGroup - - property Type: - def __get__ (self): - return SettingTypeString[self.ccsSetting.type] - - property Info: - def __get__ (self): - return self.info - - property Hints: - def __get__ (self): - if self.ccsSetting.hints == '': - return [] - else: - return str (self.ccsSetting.hints).split (";")[:-1] - - property IsDefault: - def __get__ (self): - if self.ccsSetting.isDefault: - return True - return False - - property DefaultValue: - def __get__ (self): - return DecodeValue (&self.ccsSetting.defaultValue) - - property Value: - def __get__ (self): - return DecodeValue (self.ccsSetting.value) - def __set__ (self, value): - cdef CCSSettingValue * sv - sv = EncodeValue (value, self.ccsSetting, 0) - ccsSetValue (self.ccsSetting, sv) - ccsFreeSettingValue (sv) - - property Integrated: - def __get__ (self): - return bool (ccsSettingIsIntegrated (self.ccsSetting)) - - property ReadOnly: - def __get__ (self): - return bool (ccsSettingIsReadOnly (self.ccsSetting)) - -cdef class SSGroup: - cdef object display - cdef object screens - - def __new__ (self, disp, screen): - self.display = disp - self.screens = screen - - property Display: - def __get__ (self): - return self.display - def __set__ (self, value): - self.display = value - - property Screens: - def __get__ (self): - return self.screens - def __set__ (self, value): - self.screens = value - -cdef class Plugin: - cdef CCSPlugin * ccsPlugin - cdef Context context - cdef object screens - cdef object display - cdef object groups - cdef object loaded - cdef object ranking - cdef object hasExtendedString - - def __new__ (self, Context context, name): - self.ccsPlugin = ccsFindPlugin (context.ccsContext, name) - self.context = context - self.screens = [] - self.display = {} - self.groups = {} - self.loaded = False - self.ranking = {} - self.hasExtendedString = False - - for n in range (0, context.NScreens): - self.screens.append ({}) - - def Update (self): - cdef CCSList * setlist - cdef CCSList * glist - cdef CCSList * sglist - cdef CCSSetting * sett - cdef CCSGroup * gr - cdef CCSSubGroup * sgr - cdef CCSSettingType t - cdef CCSSettingInfo * i - - groupIndex = 0 - glist = ccsGetPluginGroups (self.ccsPlugin) - while glist != NULL: - gr = <CCSGroup *> glist.data - self.groups[gr.name] = (groupIndex, {}) - subGroupIndex = 0 - sglist = gr.subGroups - while sglist != NULL: - sgr = <CCSSubGroup *> sglist.data - scr = [] - for n in range (0, self.context.NScreens): - scr.append ({}) - self.groups[gr.name][1][sgr.name] = (subGroupIndex, - SSGroup ({}, scr)) - subGroupIndex = subGroupIndex + 1 - sglist = sglist.next - groupIndex = groupIndex + 1 - glist = glist.next - setlist = ccsGetPluginSettings (self.ccsPlugin) - - self.hasExtendedString = False - rank = 0 - while setlist != NULL: - sett = <CCSSetting *> setlist.data - - subgroup = self.groups[sett.group][1][sett.subGroup][1] - - if sett.isScreen: - setting = Setting (self, sett.name, True, sett.screenNum) - self.screens[sett.screenNum][sett.name] = setting - subgroup.Screens[sett.screenNum][sett.name] = setting - else: - setting = Setting (self, sett.name, False) - self.display[sett.name] = setting - subgroup.Display[sett.name] = setting - - t = sett.type - i = &sett.info - if t == TypeList: - t = i.forList.listType - i = <CCSSettingInfo *> i.forList.listInfo - if t == TypeString and i.forString.extensible: - self.hasExtendedString = True - - if not self.ranking.has_key (sett.name): - self.ranking[sett.name] = rank - rank = rank + 1 - - setlist = setlist.next - - self.loaded = True - - self.ApplyStringExtensions (True, self.Enabled) - self.SortStringSettings () - - def SortStringSettings (self): - for i in xrange (self.context.nScreens): - for name, setting in self.Screens[i].items (): - self.SortSingleStringSetting (setting) - for name, setting in self.Display.items (): - self.SortSingleStringSetting (setting) - - def SortSingleStringSetting (self, Setting setting): - cdef CCSSettingType t - cdef CCSSettingInfo * i - - t = setting.ccsSetting.type - i = &setting.ccsSetting.info - if t == TypeList: - t = i.forList.listType - i = <CCSSettingInfo *> i.forList.listInfo - if t != TypeString: - return - - (itemsByName, listOfAddedItems) = \ - StrRestrictionListToDict (i.forString.restriction, - setting.extendedStrRestrictions) - - # Let base string restrictions be the ones given in the option metadata - # in the base plugin plus the ones found in the extensions in the same - # plugin. - setting.baseStrRestrictions = \ - listOfAddedItems + setting.baseStrRestrictions - - if i.forString.sortStartsAt < 0: - # don't sort - sortedItems = itemsByName.items () - elif i.forString.sortStartsAt == 0: - # Sort all items by value - sortedItems = sorted (itemsByName.items (), - key=StringSettingKeyFunc) - else: - # Sort first sortStartsAt many items by value and - # the remaining ones by name - itemsNotSorted = \ - setting.baseStrRestrictions[:i.forString.sortStartsAt] - itemsNotSortedSet = set (itemsNotSorted) - allItemsSet = set (itemsByName.items ()) - itemsSortedByName = sorted (list (allItemsSet - itemsNotSortedSet), - key=operator.itemgetter (0)) - sortedItems = itemsNotSorted + itemsSortedByName - - itemsByValue = {} - for (index, (name, value)) in enumerate (sortedItems): - itemsByValue[value] = (name, index) - - # Insert itemsByName and sortedItems into setting.info - if setting.ccsSetting.type == TypeList: - setting.info = (setting.info[0], (itemsByName, - itemsByValue, - sortedItems)) - else: - setting.info = (itemsByName, itemsByValue, sortedItems) - - def ApplyStringExtensions (self, sortBaseSetting, extendOthersToo): - cdef CCSStrExtensionList * extList - cdef CCSStrExtension * ext - cdef char * baseSettingName - cdef CCSStringList * baseSettingList - cdef CCSSettingType t - cdef CCSSettingInfo * i - cdef CCSStrRestrictionList * restrictionList - cdef CCSStrRestriction * restriction - cdef Plugin basePlugin - cdef Setting setting - - extList = ccsGetPluginStrExtensions (self.ccsPlugin) - while extList: - ext = <CCSStrExtension *> extList.data - - # If not extending others and extension base is not self, skip - if (not (extendOthersToo or ext.basePlugin == self.Name)) or \ - ext.basePlugin not in self.context.Plugins: - extList = extList.next - continue - - basePlugin = self.context.Plugins[ext.basePlugin] - - baseSettingList = ext.baseSettings - while baseSettingList: - baseSettingName = <char *> baseSettingList.data - - if ext.isScreen: - settings = [] - for x in xrange (self.context.nScreens): - settings.append (basePlugin.Screens[x][baseSettingName]) - else: - settings = [basePlugin.Display[baseSettingName]] - - for settingItem in settings: - setting = settingItem - t = setting.ccsSetting.type - i = &setting.ccsSetting.info - if t == TypeList: - t = i.forList.listType - i = <CCSSettingInfo *> i.forList.listInfo - if not (t == TypeString and i.forString.extensible): - return - - restrictionList = ext.restriction - - # Add each item in restriction list to the setting - while restrictionList != NULL: - restriction = <CCSStrRestriction *> restrictionList.data - setting.extendedStrRestrictions[restriction.name] = \ - restriction.value - if ext.basePlugin == self.Name: - setting.baseStrRestrictions.append ((restriction.name, - restriction.value)) - restrictionList = restrictionList.next - - if sortBaseSetting: - basePlugin.SortSingleStringSetting (setting) - - baseSettingList = baseSettingList.next - - extList = extList.next - - def GetExtensionBasePlugins (self): - cdef CCSStrExtensionList * extList - cdef CCSStrExtension * ext - - basePlugins = set ([]) - extList = ccsGetPluginStrExtensions (self.ccsPlugin) - while extList: - ext = <CCSStrExtension *> extList.data - basePlugins.add (self.context.Plugins[ext.basePlugin]) - extList = extList.next - - return list (basePlugins) - - property Context: - def __get__ (self): - return self.context - - property Groups: - def __get__ (self): - if not self.loaded: - self.Update () - return self.groups - - property Display: - def __get__ (self): - if not self.loaded: - self.Update () - return self.display - - property Screens: - def __get__ (self): - if not self.loaded: - self.Update () - return self.screens - - property Ranking: - def __get__ (self): - if not self.loaded: - self.Update () - return self.ranking - - property Name: - def __get__ (self): - return self.ccsPlugin.name - - property ShortDesc: - def __get__ (self): - return self.ccsPlugin.shortDesc - - property LongDesc: - def __get__ (self): - return self.ccsPlugin.longDesc - - property Category: - def __get__ (self): - return self.ccsPlugin.category - - property Features: - def __get__ (self): - features = StringListToList (self.ccsPlugin.providesFeature) - return features - - property Initialized: - def __get__ (self): - return bool (self.loaded) - - property Enabled: - def __get__ (self): - return bool (ccsPluginIsActive (self.context.ccsContext, - self.ccsPlugin.name)) - def __set__ (self, val): - if val: - if len (self.EnableConflicts): - return - ccsPluginSetActive (self.ccsPlugin, True) - else: - if len (self.DisableConflicts): - return - ccsPluginSetActive (self.ccsPlugin, False) - - property EnableConflicts: - def __get__ (self): - cdef CCSPluginConflictList * pl, * pls - cdef CCSPluginConflict * pc - cdef CCSPluginList * ppl - cdef CCSPlugin * plg - - if self.Enabled: - return [] - - ret = [] - pl = ccsCanEnablePlugin (self.context.ccsContext, - self.ccsPlugin) - pls = pl - while pls != NULL: - pc = <CCSPluginConflict *> pls.data - rpl = [] - ppl = pc.plugins - while ppl != NULL: - plg = <CCSPlugin *> ppl.data - rpl.append (self.context.Plugins[plg.name]) - ppl = ppl.next - ret.append ((ConflictTypeString[pc.type], pc.value, rpl)) - pls = pls.next - if pl != NULL: - ccsPluginConflictListFree (pl, True) - return ret - - property DisableConflicts: - def __get__ (self): - cdef CCSPluginConflictList * pl, * pls - cdef CCSPluginConflict * pc - cdef CCSPluginList * ppl - cdef CCSPlugin * plg - - if not self.Enabled: - return [] - - ret = [] - pl = ccsCanDisablePlugin (self.context.ccsContext, - self.ccsPlugin) - pls = pl - while pls != NULL: - pc = <CCSPluginConflict *> pls.data - rpl = [] - ppl = pc.plugins - while ppl != NULL: - plg = <CCSPlugin *> ppl.data - rpl.append (self.context.Plugins[plg.name]) - ppl = ppl.next - ret.append ((ConflictTypeString[pc.type], pc.value, rpl)) - pls = pls.next - if pl != NULL: - ccsPluginConflictListFree (pl, True) - return ret - -cdef class Profile: - cdef Context context - cdef char * name - - def __new__ (self, Context context, name): - self.context = context - self.name = strdup (name) - - def __dealloc (self): - free (self.name) - - def Delete (self): - ccsDeleteProfile (self.context.ccsContext, self.name) - - property Name: - def __get__ (self): - return self.name - -cdef class Backend: - cdef Context context - cdef char * name - cdef char * shortDesc - cdef char * longDesc - cdef Bool profileSupport - cdef Bool integrationSupport - - def __new__ (self, Context context, info): - self.context = context - self.name = strdup (info[0]) - self.shortDesc = strdup (info[1]) - self.longDesc = strdup (info[2]) - self.profileSupport = bool (info[3]) - self.integrationSupport = bool (info[4]) - - def __dealloc__ (self): - free (self.name) - free (self.shortDesc) - free (self.longDesc) - - property Name: - def __get__ (self): - return self.name - - property ShortDesc: - def __get__ (self): - return self.shortDesc - - property LongDesc: - def __get__ (self): - return self.longDesc - - property IntegrationSupport: - def __get__ (self): - return self.integrationSupport - - property ProfileSupport: - def __get__ (self): - return self.profileSupport - -cdef class Context: - cdef CCSContext * ccsContext - cdef object plugins - cdef object categories - cdef object profiles - cdef object currentProfile - cdef object backends - cdef object currentBackend - cdef int nScreens - cdef Bool integration - - def __new__ (self, screens = [0], plugins = [], basic_metadata = False): - cdef CCSPlugin * pl - cdef CCSList * pll - if basic_metadata: - ccsSetBasicMetadata (True) - self.nScreens = nScreens = len (screens) - self.plugins = {} - cdef unsigned int * screensBuf - screensBuf = <unsigned int *> malloc (sizeof (unsigned int) * nScreens) - for i in range (nScreens): - screensBuf[i] = screens[i] - if not len (plugins): - self.ccsContext = ccsContextNew (screensBuf, nScreens) - else: - self.ccsContext = ccsEmptyContextNew (screensBuf, nScreens) - free (screensBuf) - - for plugin in plugins: - self.LoadPlugin (plugin) - - ccsReadSettings (self.ccsContext) - pll = self.ccsContext.plugins - self.categories = {} - while pll != NULL: - pl = <CCSPlugin *> pll.data - self.plugins[pl.name] = Plugin (self, pl.name) - if pl.category == NULL: - cat = '' - else: - cat = pl.category - if not self.categories.has_key (cat): - self.categories[cat] = [] - self.categories[cat].append (self.plugins[pl.name]) - pll = pll.next - - self.integration = ccsGetIntegrationEnabled (self.ccsContext) - - self.UpdateProfiles () - - def UpdateExtensiblePlugins (self): - cdef Plugin plugin - - # Reset all extensible plugins - for name, pluginItem in self.plugins.items (): - plugin = pluginItem - if plugin.hasExtendedString: - plugin.Update () - - # Apply restricted string extensions - for name, pluginItem in self.plugins.items (): - plugin = pluginItem - if plugin.Enabled: - plugin.ApplyStringExtensions (False, True) - - # Sort restricted string settings - for name, pluginItem in self.plugins.items (): - plugin = pluginItem - if plugin.Enabled and plugin.hasExtendedString: - plugin.SortStringSettings () - - def __dealloc__ (self): - ccsContextDestroy (self.ccsContext) - - def LoadPlugin (self, plugin): - return ccsLoadPlugin (self.ccsContext, plugin) - - # Returns the settings that should be updated - def ProcessEvents (self, flags = 0): - ccsProcessEvents (self.ccsContext, flags) - if len (self.ChangedSettings): - self.Read () - return True - return False - - def Write (self, onlyChanged = True): - if onlyChanged: - ccsWriteChangedSettings (self.ccsContext) - else: - ccsWriteSettings (self.ccsContext) - - def Read (self): - ccsReadSettings (self.ccsContext) - - def UpdateProfiles (self): - self.profiles = {} - self.currentProfile = Profile (self, ccsGetProfile (self.ccsContext)) - cdef CCSStringList * profileList - cdef char * profileName - profileList = ccsGetExistingProfiles (self.ccsContext) - while profileList != NULL: - profileName = <char *> profileList.data - self.profiles[profileName] = Profile (self, profileName) - profileList = profileList.next - - self.backends = {} - cdef CCSBackendInfoList * backendList - cdef CCSBackendInfo * backendInfo - backendList = ccsGetExistingBackends () - while backendList != NULL: - backendInfo = <CCSBackendInfo *> backendList.data - info = (backendInfo.name, backendInfo.shortDesc, - backendInfo.longDesc, backendInfo.profileSupport, - backendInfo.integrationSupport) - self.backends[backendInfo.name] = Backend (self, info) - backendList = backendList.next - self.currentBackend = self.backends[ccsGetBackend (self.ccsContext)] - - def ResetProfile (self): - self.currentProfile = Profile (self, "") - ccsSetProfile (self.ccsContext, "") - ccsReadSettings (self.ccsContext) - - def Import (self, path, autoSave = True): - ret = bool (ccsImportFromFile (self.ccsContext, path, True)) - if autoSave: - ccsWriteSettings (self.ccsContext) - return ret - - def Export (self, path, skipDefaults = False): - return bool (ccsExportToFile (self.ccsContext, path, skipDefaults)) - - property Plugins: - def __get__ (self): - return self.plugins - - property Categories: - def __get__ (self): - return self.categories - - property CurrentProfile: - def __get__ (self): - return self.currentProfile - def __set__ (self, profile): - self.currentProfile = profile - ccsSetProfile (self.ccsContext, profile.Name) - ccsReadSettings (self.ccsContext) - - property Profiles: - def __get__ (self): - return self.profiles - - property CurrentBackend: - def __get__ (self): - return self.currentBackend - def __set__ (self, backend): - self.currentBackend = backend - ccsSetBackend (self.ccsContext, backend.Name) - ccsReadSettings (self.ccsContext) - - property Backends: - def __get__ (self): - return self.backends - - property ChangedSettings: - def __get__ (self): - return SettingListToList (self, self.ccsContext.changedSettings) - def __set__ (self, value): - cdef CCSSettingList * settingList - if self.ccsContext.changedSettings != NULL: - self.ccsContext.changedSettings = \ - ccsSettingListFree (self.ccsContext.changedSettings, False) - if value != None and len (value) != 0: - settingList = ListToSettingList (value) - self.ccsContext.changedSettings = settingList - - property AutoSort: - def __get__ (self): - return bool (ccsGetPluginListAutoSort (self.ccsContext)) - def __set__ (self, value): - ccsSetPluginListAutoSort (self.ccsContext, bool (value)) - - property NScreens: - def __get__ (self): - return self.nScreens - - property Integration: - def __get__ (self): - return bool (self.integration) - def __set__ (self, value): - self.integration = value - ccsSetIntegrationEnabled (self.ccsContext, value) - ccsReadSettings (self.ccsContext) - |