def childCreator(self, bCounter, progressDlg): """ Функция создает объекты, которые содержаться в данном компоненте. """ if self.child: indx = 0 for el in self.child: if not el['activate'] in (0, '0', None, 'None', 'False', 'false'): if el['type'] == 'ToolBarTool': img_indx = el.get('img_indx', -1) if img_indx < 0: img_indx = indx self.AddToolRes(icwidget.icNewId(), el, img_indx) indx += 1 elif el['type'] == 'Separator': self.AddSeparator() else: res = self.GetKernel().parse_resource( self, [el], None, context=self.evalSpace, bCounter=bCounter, progressDlg=progressDlg) nm = el['name'] if nm in self.components: obj = self.components[nm] self.AddControl(obj) self.Realize()
def __init__(self, nameValue, pos, size, style=0): """ @type nameValue: C{NameValue} @param nameValue: Указатель на объект свойства NameValue. @type pos: C{wx.Point} @param pos: Позиция компонента. @type size: C{wx.Size} @param size: Размеры компонента. @type style: C{long} @param style: Стиль компонента. """ if int(nameValue.value) <= 0: label = 'False' value = 0 else: label = 'True' value = 1 icEditPropCtrl.__init__(self, nameValue) self.editorCtrl = wx.Window(nameValue.main.panel2, icwidget.icNewId(), pos=pos, size=size, style=wx.WANTS_CHARS) self.checkBox = wx.CheckBox(self.editorCtrl, self.wID, label, pos=(2, 1)) self.checkBox.SetValue(value) self.editorCtrl.Bind(wx.EVT_CHECKBOX, self.OnCheckBox, id=self.wID) self.editorCtrl.SetFocus()
def __init__(self, nameValue, pos, size, style=wx.SIMPLE_BORDER): """ @type nameValue: C{NameValue} @param nameValue: Указатель на объект свойства NameValue. @type pos: C{wx.Point} @param pos: Позиция компонента. @type size: C{wx.Size} @param size: Размеры компонента. @type style: C{long} @param style: Стиль компонента. """ icEditPropPyScript.__init__(self, nameValue, pos, size, style) x, y = pos w, h = size ss = 3 idButtonDel = icwidget.icNewId() self.buttonDel = wx.Button(self.editorCtrl, idButtonDel, 'X', pos=(w - 2 * EPBSize - 1 + ss, 0), size=(EPBSize - ss, h - ss)) self.buttonDel.editor = self self.buttonDel.Show() self.editorCtrl.Bind(wx.EVT_BUTTON, self.OnDelProperty, id=idButtonDel)
def OnKeyDown(self, evt): """ Отлавливаем нажатие <Ctrl-M> для выбора метода из библиотеки методов. """ cod = evt.GetKeyCode() if (cod in [ord('m'), ord('M')] and evt.ControlDown()) or cod == wx.WXK_F1: dlg = MthDialog(self.nameValue.main, icwidget.icNewId(), u'Выбери метод', size=(400, 350)) ret = dlg.ShowModal() # Копия if ret in [10, 20]: wx.TheClipboard.Open() txt_obj = wx.TextDataObject() txt = '@' + dlg.ret_tpl txt_obj.SetText(txt) wx.TheClipboard.SetData(txt_obj) wx.TheClipboard.Close() self.nameValue.value = txt self.nameValue.oldValue = txt self.nameValue.value_ctrl.SetLabel(self.nameValue.GetStr()) self.nameValue.edit_ctrl.SetValue(txt) self.editorCtrl.SetValue(self.nameValue.GetStr()) self.nameValue.edit_ctrl.SetFocus() dlg.Destroy() evt.Skip()
def __init__(self, nameValue): """ Конструктор. """ icEvent.__init__(self) self.nameValue = nameValue self.propEditor = nameValue.dict self.editorCtrl = None self.wID = icwidget.icNewId() self.value = nameValue.value
def __init__(self, nameValue, pos, size, style=wx.SIMPLE_BORDER, label='...'): """ @type nameValue: C{NameValue} @param nameValue: Указатель на объект свойства NameValue. @type pos: C{wx.Point} @param pos: Позиция компонента. @type size: C{wx.Size} @param size: Размеры компонента. @type style: C{long} @param style: Стиль компонента. """ icEditPropCtrl.__init__(self, nameValue) x, y = pos w, h = size self.editorCtrl = wx.TextCtrl(nameValue.main.panel2, self.wID, nameValue.GetStr(), pos=pos, size=size, style=style) idButton = icwidget.icNewId() self.button = wx.Button(self.editorCtrl, idButton, label, pos=(w - EPBSize - 1, 0), size=(EPBSize, h)) self.button.editor = self self.button.Show() if 'OnButton' in self.propEditor: self.editorCtrl.Bind(wx.EVT_BUTTON, self.propEditor['OnButton'], id=idButton) self.nameValue.main.panel2.Bind(wx.EVT_TEXT, self.OnText, id=self.wID)
def icResourceParser(parent, components, sizer=None, logType=0, evalSpace=None, bCounter=True, progressDlg=None, ids=None, **kwargs): """ Парсер. Функция рекурсивного разбора ресурсного описания. @type parent: C{wx.Window} @param parent: Указатель на родительское окно, на котором располагаются другие компоненты. @type components: C{List} @param components: Список компонентов. @type sizer: C{wx.Sizer} @param sizer: Сайзер куда добавляются компоненты. @type logType: C{int} @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога). @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений. @type evalSpace: C{dictionary} @type bCounter: C{bool} @param bCounter: Признак отображения в ProgressBar-е. Иногда это не нужно - для создания объектов полученных по ссылки. Т. к. они не учтены при подсчете общего количества объектов. @type ids: {list | tuple} @param ids: Список идентификаторов объектов. """ log.info(u'Сборка объектов') # Получаем указатель на индикатор и указатель главного окна (Dialog, Frame) main_parent = evalSpace.get('_main_parent', None) # Создаем компоненты for cindx, component in enumerate(components): # Определяем идентификатор объекта if cindx < len(ids or []): component_id = ids[cindx] else: component_id = None # Компонент создается только если установлен признак активации bActivated = True if util.isAcivateRes(component, evalSpace): # Определяем имя родительского интерфейса, если он определен try: interface = parent.GetInterfaceName() if not interface and sizer: interface = sizer.GetInterfaceName() except: interface = None wxw = None # Если у компонета есть алиас, то разбор ведем с алиасным именем. # Как правило алиас появляется при создании объета по ссылке через # объект ссылки DataLink if 'alias' in component and not component['alias'] in [ None, '', 'None' ]: name = component['alias'] else: name = component['name'] # Прописываем имя родительского интерфеса в специальный ключ ресурса if interface and ('__interface__' not in component or ('__interface__' in component and not component['__interface__'])): component['__interface__'] = interface elif not interface and '__interface__' in component and component[ '__interface__']: interface = component['__interface__'] if '__interface__' in component: interface = component['__interface__'] # Прописываем в пространстве имен имя файла ресурса if '__file_res' in component and component['__file_res']: evalSpace['__file_res'] = component['__file_res'] # Если определен индикатор процесса, то отображаем количество # созданных компонентов ресурса if bCounter: progress.icUpdateProgressBar(u'Создаем компонент: <%s>' % name) else: log.debug(u'Создаем компонент: <%s> type: <%s>' % (name, component['type'])) # Оконные компоненты if parent is None and component['type'] in ('Panel', 'Window', 'ScrolledWindow', 'SplitterWindow'): parent = createFrame( main_parent, component_id or icNewId(), { 'title': '', 'size': component['size'], 'position': component['position'] }, logType, evalSpace) if component['type'] == 'Frame': parent = wxw = createFrame(main_parent, component_id or icNewId(), component, logType, evalSpace) elif component['type'] == 'Dialog': parent = wxw = createDialog(main_parent, component_id or icNewId(), component, logType, evalSpace) elif component['type'] == 'SizerSpace': # В режиме графического редактора заменяем на окно таких-же размеров if isEditorMode(): component['type'] = 'Panel' wxw = components_lib.icwxpanel.icWXPanel( parent, -1, component, logType, evalSpace) wxw.SetBackgroundColour(wx.Colour(200, 200, 250)) else: wxw = components_lib.sizers.icspacesizer.icSpaceSizer( parent, icNewId(), component, logType, evalSpace) # Служебные компоненты elif component['type'] == 'DataLink': link = icdataset.icDataLink(component, logType=logType, evalSpace=evalSpace, fltDict=DatasetFilterBuff) if isinstance(link.resource, dict): parent = icResourceParser(parent, [link.resource], logType=logType, sizer=sizer, evalSpace=evalSpace, bCounter=False, ids=[component_id]) # Импорт модулей и имен elif component['type'] == 'Import': imp = components_lib.icimport.icImport(parent, component_id or icNewId(), component, 0, evalSpace, isDebug=IS_TEST_MODE) wxw = imp.GetObject() # Объект группы elif component['type'] == 'Group': if len(component['child']): # Модуль ресурса грузится конструкторе icSimple, поэтому # передаем имя модуля дочернему компоненту - все остальные # компоненты системы наследники icSimple if 'res_module' in component: component['child'][0]['res_module'] = component[ 'res_module'] parent = icResourceParser(parent, component['child'], sizer, logType=logType, evalSpace=evalSpace, bCounter=bCounter, ids=ids) # Стандартные и пользовательские компоненты else: wxw = Constructor(parent, component_id or icNewId(), component, logType, evalSpace, bCounter, progressDlg, sizer=sizer) # Выполняем выражения инициализации для не визуальных компонентов if wxw is None and 'init_expr' in component and not component[ 'init_expr'] in (None, 'None', ''): if component.get('_uuid', None): util.ic_eval(component['init_expr'], 0, evalSpace, 'icResourceParser()<init_expr>. name:' + name, compileKey=component['_uuid'] + 'init_expr') else: util.ic_eval(component['init_expr'], 0, evalSpace, 'icResourceParser()<init_expr>. name:' + name) # Регистрация компонентов if wxw: # Регестрируем компоненты в родительском интерфейсе if interface and interface in evalSpace['_interfaces']: ifc = evalSpace['_interfaces'][interface] ifc.reg_object(wxw, name) # Если корневой компонент еще не определен, определяем его if evalSpace['_root_obj'] is None: evalSpace['_root_obj'] = wxw parent = wxw # Регестрируем компоненты в контексте evalSpace['_dict_obj'][name] = wxw evalSpace['_list_obj'].append(wxw) evalSpace['self'] = wxw # В режиме редактирования регестрируем все компоненты в редакторе if isEditorMode(): edt = evalSpace['_root_obj'] if wxw != edt: try: edt.AddObject(wxw) except: io_prnt.outErr('### AddOject Error: <%s> edt=%s' % (wxw, edt)) # Заполнение контейнеров if wxw is not None and parent is not None and name and component[ 'type'] != 'Table': # Регестрируем компонены в родительском компоненте if parent.type != 'ExternalWin': if not sizer: parent.reg_child(wxw, name) # NOTE: 7/05/08. Для того, чтобы можно было объект вставить в сайзер, # который не является компонентом ic - для дизайнера форм elif hasattr(sizer, 'reg_child'): sizer.reg_child(wxw, name) elif sizer: sizer.reg_child(wxw, name) # Выполняем выражения инициализации для компонентов if 'init_expr' in component and not component['init_expr'] in [ None, 'None', '' ]: evalSpace['evt'] = evalSpace.get('evt', None) evalSpace['self'] = wxw if '_uuid' in component and component['_uuid']: util.ic_eval( component['init_expr'], 0, evalSpace, 'icResourceParser()<init_expr>. name:' + name, compileKey=component['_uuid'] + 'init_expr') else: util.ic_eval( component['init_expr'], 0, evalSpace, 'icResourceParser()<init_expr>. name:' + name) if 'source' in component and not component['source'] in [ '', None, 'None' ]: evalSpace['_has_source'][name] = wxw # Обрабатываем атрибут <show> - выражение, которое определяет # показывать компонент или скрыть if 'show' in component: bShow = component['show'] if bShow in ('1', 'True'): bShow = True elif bShow in ('0', 'False'): bShow = False else: if '_uuid' in component and component['_uuid']: res, val = util.ic_eval( component['show'], 0, evalSpace, 'icResourceParser()<show>. name:' + name, compileKey=component['_uuid'] + 'show') else: res, val = util.ic_eval( component['show'], 0, evalSpace, 'Exception in icResourceParser()') if res: try: bShow = bool(val) except: bShow = True if not bShow: wxw.Show(bShow) return parent
def OnRightClick(self, evt): """ Обрабатываем сообщение <EVT_RIGHT_DOWN>. """ if not self._bEditMode: return menuObj = wx.Menu() menuGroup = wx.Menu() itm = self.GetSelection() # Если словарь является метокомпонентом, то создаем меню со списком # компонентов, которые можно добавлять в текущий объект if self.treeDict and not isinstance(self.treeDict, dict): level, obj = self.GetPyData(itm) lst = obj.getMyContainerMetaItems() for cob in lst: id = cob.GetUniqId() if not cob.resource['description']: label = cob.resource['name'] else: label = cob.resource['description'] item = wx.MenuItem(menuGroup, id, label) if cob.getPic(): item.SetBitmap(cob.getPic()) menuGroup.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnAddItem, id=id) id = icwidget.icNewId() menuObj.AppendMenu(id, u'Добавить объект', menuGroup) if self.treeDict and not isinstance(self.treeDict, dict) and itm != self.root: level, obj = self.GetPyData(itm) id = icwidget.icNewId() item = wx.MenuItem(menuObj, id, u'Удалить объект') item.SetBitmap(common.imgDeleteRed) menuObj.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnDelItem, id=id) id = icwidget.icNewId() item = wx.MenuItem(menuObj, id, u'Клонировать объект') item.SetBitmap(common.imgClone) menuObj.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnCloneItem, id=id) id = icwidget.icNewId() item = wx.MenuItem(menuObj, id, u'Копировать содержимое объекта') item.SetBitmap(common.imgEdtMnuCopy) menuObj.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnCopy, id=id) if self.bObjBuff and obj.canPastChildren(): id = icwidget.icNewId() item = wx.MenuItem(menuObj, id, u'Вставить из буфера в объект') item.SetBitmap(common.imgEdtMnuPaste) menuObj.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnPaste, id=id) self.PopupMenu(menuObj, evt.GetPoint())