def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg): """ Стандартная функция контроля. """ from ic.dlg import msgbox parent = propEdt.GetPropertyGrid().GetView() if attr in ('sourcePsp', ): ret = str_to_val_user_property(attr, value, propEdt) if ret: if not ret[0][0] in icsqlalchemy.DB_TYPES: msgbox.MsgBox(parent, _('Object is not DB source (*.src).')) return coderror.IC_CTRL_FAILED_IGNORE return ret elif attr in ('catalog_types', ): tps = str_to_val_user_property(attr, value, propEdt) if tps is None: return tps if type(tps) in (type([]), type((0, ))): lst = iccatalog.catalog_type_dct.keys() for el in tps: if not el in lst: msgbox.MsgBox( parent, _('Type <%s> is not registered catalog item.' % el)) return coderror.IC_CTRL_FAILED_IGNORE return coderror.IC_CTRL_OK else: return coderror.IC_CTRL_FAILED return coderror.IC_CTRL_OK
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg): """ Стандартная функция контроля. """ if attr in ('model','view','controller'): res = propEdt.GetResource() parent = propEdt.GetPropertyGrid().GetView() prnt_res = propEdt.GetPrntResource() lst = icmvcelement.findClassLst(propEdt.GetPrntResource(), parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) rlst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) if attr == 'view' and value in lst: #lst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) v_res = None # находим ресурс представления for r in rlst: if value == r['name']: v_res = r break # находим ресурс контроллера и проверяем for r in rlst: if r['name'] == res['controller']: if r['socket_in'] == v_res['socket_out']: return coderror.IC_CTRL_OK else: msgbox.MsgBox(parent, """Выходной интерфейс <%s> представления <%s> не совпадает с входным интерфесом <%s> контроллера <%s>""" % (v_res['socket_out'], v_res['name'], r['socket_in'], r['name'])) return coderror.IC_CTRL_FAILED_IGNORE return coderror.IC_CTRL_OK elif attr == 'controller' and value in lst: #lst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) #print '... controller' ctrl_res = None # находим ресурс контроллера for r in rlst: if value == r['name']: ctrl_res = r break for r in rlst: if r['name'] == res['view']: if r['socket_out'] == ctrl_res['socket_in']: return coderror.IC_CTRL_OK else: msgbox.MsgBox(parent, """Входной интерфейс <%s> контроллера <%s> не совпадает с выходным интерфесом <%s> представления <%s>""" % (ctrl_res['socket_in'], ctrl_res['name'], r['socket_out'], r['name'])) return coderror.IC_CTRL_FAILED_IGNORE return coderror.IC_CTRL_OK elif value in lst: return coderror.IC_CTRL_OK
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg): """ Стандартная функция контроля. """ if attr in ('model', 'view', 'controller'): pres = propEdt.GetPrntResource() lst = icmvcelement.findClassLst(pres, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) lstp = icmvcelement.findClassResLst( pres, parentModule.ic_mvc_pattern, propEdt.GetResTree().GetObjectsInfo()) if value in lst: name = propEdt.GetResource()['name'] for pt in lstp: if name <> pt['name'] and value in (pt['model'], pt['view'], pt['controller']): parent = propEdt.GetPropertyGrid().GetView() msgbox.MsgBox( parent, u'Элемент <%s> уже зарегистрирован в другом паттерне <%s>.' % (value, pt['name'])) return coderror.IC_CTRL_FAILED_IGNORE return icmvcpattern.property_editor_ctrl(attr, value, propEdt)
def init_panel(self): """ Инициализация панели. """ if self._form: # Получаем указатель на ядро name, subsys = self._form win = self.create_obj(name, subsys) if win: self.SetPanel(win) # Вызываем у объекта функцию чтения данных на форму if self._obj: if hasattr(self._obj.metaitem.value, 'doc_uuid') and self._obj.metaitem.value.doc_uuid: io_prnt.outLog(u'>>> Загружаем документ UUID=%s' % self._obj.metaitem.value.doc_uuid) self._obj.load(self._obj.metaitem.value.doc_uuid) self._obj.startEdit() if not self._obj.isMyLock(): msgbox.MsgBox(win, u'Документ заблокирова пользователем %s' % self._obj.ownerLock()) ifs = win.GetComponentInterface() if ifs: ifs.set_object(self._obj) ifs.LoadData()
def RunWizard(parent): """ Create the wizard and the pages. """ wizard = wiz.Wizard(parent, -1, _('Create Component Wizard'), common.imgUserCompWizard) page1 = FirstPage(wizard, _('Base parameters')) page2 = AttrPage(wizard, _('Class attributes')) page3 = MsgPage(wizard, _('Event attributes')) page4 = EditModulPage(wizard, _('Edit module')) parent.page1 = page1 wizard.FitToPage(page1) page1.SetNext(page2) page2.SetPrev(page1) page2.SetNext(page3) page3.SetPrev(page2) page3.SetNext(page4) page4.SetPrev(page3) if wizard.RunWizard(page1): # Сохраняем модуль в библиотеке пользовательских компонентов txt = page4.editor.GetText() if resource.icGetResPath(): user_mod_dir = resource.icGetResPath() + '/usercomponents' else: user_mod_dir = None if not user_mod_dir: module_name = resource.icGetICPath( ) + '/components/user/' + page4.modulName.GetLabel() elif not os.path.isdir(user_mod_dir): # Создаем пакет ic_res.CreatePackage(user_mod_dir) module_name = user_mod_dir + '/' + page4.modulName.GetLabel() else: module_name = user_mod_dir + '/' + page4.modulName.GetLabel() bCr = wx.ID_YES if os.path.isfile(module_name): bCr = msg.MsgBox(None, _('Module %s already exist. Rewrite?') % module_name, style=wx.YES_NO | wx.NO_DEFAULT) if bCr == wx.ID_YES: f = open(module_name, 'w') io_prnt.outLog(u'CREATE MODULE: <%s>' % module_name) f.write(txt.encode('utf-8')) f.close() wx.MessageBox(_('Module %s is created.') % module_name, '') else: wx.MessageBox(_('Wizard was cancelled'), u'')
def OnOK(self, evt): """ """ dlg = self.getObject() if dlg: typeObj = self.evalSpace['_dict_obj'][ 'typeChoice'].GetStringSelection() if not typeObj: msgbox.MsgBox(self.getObject(), u'-') name = self.evalSpace['_dict_obj']['nameText'].GetValue() if typeObj and not name: msgbox.MsgBox(self.getObject(), u'-') attr = self.evalSpace['_dict_obj'][ 'attrChoice'].GetStringSelection() if typeObj and name and not attr: msgbox.MsgBox(self.getObject(), u'-') if typeObj and name and attr: dlg.EndModal(wx.ID_OK) evt.Skip()
def get_user_property_editor(attr, value, pos, size, style, propEdt, *arg, **kwarg): """ Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY). """ if attr in ('model','view','controller'): parent = propEdt.GetPropertyGrid().GetView() #lst = icmvcelement.findObjLst(propEdt.GetPrntResource(), 'MVCElement') lst = icmvcelement.findClassLst(propEdt.GetPrntResource(), parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo()) if lst: dlg = baseeditor.ChoiceMenu(parent, lst) parent.PopupMenu(dlg, pos) # Возвращаем выбранный элемент списка if lst and dlg.IsSelString(): value = dlg.GetSelString() dlg.Destroy() return value else: msgbox.MsgBox(parent, u'Базисные элементы паттернов не определены')
def get_user_property_editor(attr, value, pos, size, style, propEdt, *arg, **kwarg): """ Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY). """ if attr in ('object', 'socket_in', 'socket_out'): return pspEdt.get_user_property_editor(value, pos, size, style, propEdt) elif attr == 'current_pattern': parent = propEdt.GetPropertyGrid().GetView() lst = findObjLst(propEdt.GetResource(), 'MVCPattern') if lst: dlg = baseeditor.ChoiceMenu(parent, lst) parent.PopupMenu(dlg, pos) # Возвращаем выбранный элемент списка if lst and dlg.IsSelString(): value = dlg.GetSelString() dlg.Destroy() return value else: msgbox.MsgBox(parent, u'Паттерны элемента не определены')
def selectedFuncplansTreeCtrl(self, evt): """ Функция обрабатывает событие <selected>. """ tree = self.GetNameObj('plansTreeCtrl') split = self.GetNameObj('splitterPanel') leftPanel = self.GetNameObj('leftPanel') pos = split.GetSashPosition() item = evt.GetItem() level, data = tree.GetPyData(item) # Предварительно сохраняем if self.ILeftPanel and self.ILeftPanel.metaObj.isMyLock(): if self.ILeftPanel.itemTree != tree.root: self.ILeftPanel.SaveData() self.ILeftPanel.metaObj.unLock() if 1: if data.isLock() and not data.isMyLock(): msgbox.MsgBox(split, u'Элемент плана заблокирован пользлвателем <%s>' % data.ownerLock()) else: data.lock() # --- Сохраняем старую панель в буфере if self.ILeftPanel and self.ILeftPanel.itemTree not in tree.GetDelItemLst(): oldItem = self.ILeftPanel.itemTree metaKey = self._getTypeBuffKey(self.ILeftPanel.metatype) if metaKey not in MetaTreeBrows.edtPanelBuff: MetaTreeBrows.edtPanelBuff[metaKey] = self.ILeftPanel if oldItem == tree.root: self.ILeftPanel.Show(False) else: self.ILeftPanel.getObject().Show(False) # --- Если панель сохранена достаем ее из буфера metaKey = self._getTypeBuffKey(data.value.metatype) _fromBuff = False if metaKey in MetaTreeBrows.edtPanelBuff: self.ILeftPanel = MetaTreeBrows.edtPanelBuff[metaKey] _fromBuff = True if item == tree.root: obj = self.ILeftPanel self.ILeftPanel.metaObj = data obj.Show() else: obj = self.ILeftPanel.getObject() self.ILeftPanel.metaObj = data obj.Show() # В противном случае создаем elif item != tree.root: if not self.rootPanel: if self.GetEditMode(): obj = data.Edit(split, data) else: obj = data.Edit(split, data) if obj: self.ILeftPanel = obj.evalSpace['WrapperObj'] else: if self.GetEditMode(): obj = data.Edit(self.rootPanel, data) else: obj = data.Edit(self.rootPanel, data) if obj: obj.Reparent(split) self.ILeftPanel = obj.evalSpace['WrapperObj'] # Для корневого элемента создаем панельку else: self.rootPanel = obj = wx.Panel(split, -1) self.ILeftPanel = obj self.ILeftPanel.metaObj = data obj.SetBackgroundColour(wx.Colour(200,200,200)) if self.ILeftPanel: self.ILeftPanel.tree = tree self.ILeftPanel.itemTree = item self.ILeftPanel.metatype = data.value.metatype # Загружаем данные try: if item != tree.root: self.ILeftPanel.LoadData() except: ic_log.icLogErr() split.Unsplit() split.SplitVertically(leftPanel, obj, pos) split.Refresh() elif data: data.unLock() return None
def selectedFuncTreeCtrl(self, evt): """ Функция обрабатывает событие <selected>. """ #print 'selectedFuncTreeCtrl START' tree = self.GetNameObj('reestrTreeCtrl') split = self.GetNameObj('splitterPanel') leftPanel = self.GetNameObj('leftPanel') obj = None pos = split.GetSashPosition() item = evt.GetItem() level, data = tree.GetPyData(item) #self.rootPanel = None # Предварительно сохраняем if self.ILeftPanel and self.ILeftPanel.metaObj.isMyLock(): if self.ILeftPanel.itemTree <> tree.root: print('SaveData START') self.ILeftPanel.SaveData() self.ILeftPanel.metaObj.unLock() print('!!! SaveData') if 1: #data._edit_form: if data.isLock() and not data.isMyLock(): msgbox.MsgBox( split, u'Объект заблокирован пользователем <%s>' % data.ownerLock()) else: print('????? >>>> lock() ??????') data.lock() #--- Сохраняем старую панель в буфере if self.ILeftPanel and not self.ILeftPanel.itemTree in tree.GetDelItemLst( ): oldItem = self.ILeftPanel.itemTree metaKey = self._getTypeBuffKey(self.ILeftPanel.metatype) if metaKey not in ReestrBrowser.edtPanelBuff: ReestrBrowser.edtPanelBuff[metaKey] = self.ILeftPanel if oldItem == tree.root: self.ILeftPanel.Show(False) else: self.ILeftPanel.getObject().Show(False) #--- Если панель сохранена достаем ее из буфера metaKey = self._getTypeBuffKey(data.value.metatype) _fromBuff = False if metaKey in ReestrBrowser.edtPanelBuff: self.ILeftPanel = ReestrBrowser.edtPanelBuff[metaKey] _fromBuff = True if item == tree.root: obj = self.ILeftPanel self.ILeftPanel.metaObj = data obj.Show() else: obj = self.ILeftPanel.getObject() self.ILeftPanel.metaObj = data obj.Show() # В противном случае создаем elif item <> tree.root: if not self.rootPanel: if self.GetEditMode(): obj = data.Edit(split, data) else: obj = data.Edit(split, data) if obj: self.ILeftPanel = obj.evalSpace['WrapperObj'] print('>>>> Create Panel') else: if self.GetEditMode(): obj = data.Edit(self.rootPanel, data) else: obj = data.Edit(self.rootPanel, data) if obj: obj.Reparent(split) self.ILeftPanel = obj.evalSpace['WrapperObj'] print('>>>> Reparent Panel') # Для корневого элемента создаем панельку else: self.rootPanel = obj = wx.Panel(split, -1) self.ILeftPanel = obj self.ILeftPanel.metaObj = data if self.ILeftPanel: self.ILeftPanel.tree = tree self.ILeftPanel.itemTree = item self.ILeftPanel.metatype = data.value.metatype # Загружаем данные try: #self.ILeftPanel.LoadData() # if _fromBuff: # ic_proccess_dlg.ProccessFunc(split,'Обновляем состояние индикаторов', self.ILeftPanel.LoadData, tuple(), {}, bAutoIncr=True) # else: self.ILeftPanel.LoadData() except: print('#### LoadData() ERROR in ReestrBrowser', self.ILeftPanel) print(self.ILeftPanel.__class__.__name__) ic_log.icLogErr() split.Unsplit() if obj is None: #Если правая панельне определена, тогда сделать пустую панель obj = wx.Panel(split, -1) split.SplitVertically(leftPanel, obj, pos) split.Refresh() #obj.Enable(False) elif data: data.unLock() return None