def getSelectionFromResource(self, attr, ctrl): """ Get the data entered for a given attribute. It returns the dialog values entered by the user for the given attribute. """ dicta = [] attrName = config.getResourceAttrName(attr) attrType = config.getResourceAttrType(attr) attrDim = config.getResourceAttrDim(attr) if attrName not in ctrl: return if attrType in (config.RES_TYPE_SINGLE, ): dicta = str(ctrl[attrName].GetValue()) elif attrType in (config.RES_TYPE_LIST, ): dicta = config.getResourceAttrValues(attr)(self)[ctrl[attrName].GetSelection()] elif attrType in (config.RES_TYPE_SINGLE_ARRAY, ): for index in xrange(attrDim): dicta.append(str(ctrl[attrName][index].GetValue())) elif attrType in (config.RES_TYPE_LIST_ARRAY, ): for index in xrange(attrDim): dicta.append(config.getResourceAttrValues(attr)(self)[ctrl[attrName][index].GetSelection()]) elif attrType in (config.RES_TYPE_GROUP, ): for index in xrange(attrDim): dicta.append({}) for childAttr in config.getResourceAttrValues(attr): childAttrName = config.getResourceAttrName(childAttr) dicta[index][childAttrName] = self.getSelectionFromResource(childAttr, self.ctrl[attrName][index]) return dicta
def addCtrlFromResource(self, attr, index=None): """ Create a new control widget in the dialog. It process data from a new entry and it creates the proper widget for that. Data is coming from the resource.attribute entry. """ attrName = config.getResourceAttrName(attr) dispName = config.getResourceAttrDisplay(attr) attrType = config.getResourceAttrType(attr) attrDim = config.getResourceAttrDim(attr) attrDeps = config.getResourceAttrDeps(attr) lbl, ctrl = [], [] if attrType in (config.RES_TYPE_SINGLE, ): lbl, ctrl = self.addLabelTextCtrlEntry(self.sizer, '%s: ' % dispName, fieldName=attrName if index is None else (attrName, index), data=attrDeps) self.Bind(wx.EVT_TEXT, self.OnTextCtrlAction, ctrl) elif attrType in (config.RES_TYPE_LIST, ): lbl, ctrl = self.addLabelChoiceEntry(self.sizer, '%s: ' % dispName, choices=config.getResourceAttrValues(attr)(self), initSel=config.getResourceAttrDefault(attr)(self), fieldName=attrName if index is None else (attrName, index), data=attrDeps) elif attrType in (config.RES_TYPE_SINGLE_ARRAY, ): for i in xrange(attrDim): lbl, aCtrl = self.addLabelTextCtrlEntry(self.sizer, '%s [%s]: ' % (dispName, i), attrName if index is None else (attrName, index), data=attrDeps) ctrl.append(aCtrl) self.Bind(wx.EVT_TEXT, self.OnTextCtrlAction, aCtrl) elif attrType in (config.RES_TYPE_LIST_ARRAY, ): for i in xrange(attrDim): lbl, aCtrl = self.addLabelChoiceEntry(self.sizer, '%s [%s]: ' % (dispName, i), choices=config.getResourceAttrValues(attr)(self), initSel=config.getResourceAttrDefault(attr)(self), fieldName=attrName if index is None else (attrName, index), data=attrDeps) self.ctrl.append(aCtrl) elif attrType in (config.RES_TYPE_GROUP, ): for i in xrange(attrDim): lbl.append({}) ctrl.append({}) for childAttr in [aAttr for aAttr in config.getResourceAttrValues(attr) if config.getResourceAttrEnable(aAttr)]: childAttrName = config.getResourceAttrName(childAttr) lbl[i][childAttrName], ctrl[i][childAttrName] = self.addCtrlFromResource(childAttr, i) return (lbl, ctrl)