def onMouseClickAddTool(obj): """ Обработчик щелчка на кнопке панели инструментов addTool. """ try: print('onMouseClickAddTool START!') evalSpace = obj.GetContext() sprav = evalSpace[CONTEXT_SPRAV_NAME] to_cod = sprav.getCurCode() if to_cod is None: # Если код не определен, тогда добавляем в корневой to_cod = '' if to_cod: level = sprav.getLevelByCod(to_cod).getNext() else: level = sprav.getLevelByCod(to_cod) grid = evalSpace.GetObject(SPR_GRID_NAME) if level: grid.GetDataset().SetStructFilter( {'cod': [to_cod, level.getCodLen()]}) grid.AddRows() return to_cod except: ic_log.icLogErr( u'Ошибка обработчика щелчка на кнопке панели инструментов addTool.' )
def icDateRangeSTDDlg(parent=None,DefaultDateRange_=None): """ Стандартный диалог выбора диапазона дат. """ result=None #Подготовить пространство имен evsp=util.InitEvalSpace({'default': DefaultDateRange_}) #Создать форму is_new_parent=False if parent is None: #Если необходимо то создать родительское окно parent=wx.Frame(None,-1,'') is_new_parent=True try: result=icResourceParser.ResultForm('date_range_dlg',parent=parent,evalSpace=evsp,bBuff=False) except: ic_log.icLogErr(u'Ошибка стандартного диалога выбора диапазона дат.') #Если необходимо то удалить родительское окно if is_new_parent: parent.Destroy() parent=None return result
def onMouseClickSaveTool(evalSpace): """ Сохранение внесенных изменений. """ try: #onMouseClickSaveTool.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #GetInterface=evalSpace['GetInterface'] #sprav=evalSpace['sprav'] #old_cod=evalSpace['old_cod'] sprav = evalSpace['OBJ'] old_cod = sprav.getPrevCode() #GetObject=evalSpace['GetObject'] #Внесено изменение global is_changed is_changed = False print('>>> Update old_cod=', old_cod) try: grid = evalSpace.GetInterface('spravGrid').get_grid() except: grid = evalSpace.GetObject('spravGrid') tab = grid.GetTable().GetDataset().data tab = sprav.getStorage().setTypeLevelTable(tab) sprav.getStorage().setLevelTable(old_cod, tab) #Перегрузить дерево справочника sprav_tree = sprav.getStorage().getLevelTree() evalSpace.GetObject('spravTree').LoadTree(sprav_tree) except: #print 'XXX::',sprav_tree ic_log.icLogErr( u'Ошибка обработчика кнопки сохрания изменения справочника.')
def getItemChildren(self, Item_=None): """ Список дочерних элементов узла дерева. @param Item_: Узел/элемент дерева. Если None, то корневой элемент. @return: Список дочерних элементов узла дерева или None в случае ошибки. """ try: # Определить узел if Item_ is None: Item_ = self.root # Список дочерних элементов children = [] children_count = self.GetChildrenCount(Item_, False) for i in range(children_count): if i == 0: child, cookie = self.GetFirstChild(Item_) else: child, cookie = self.GetNextChild(Item_, cookie) if child.IsOk(): children.append(child) return children except: ic_log.icLogErr( u'ОШИБКА компонента %s метода определения списка дочерних элементов' % self.name) return None
def _onInitSpravTree(obj, bRefresh=True): """ Обработчик события инициализации дерева справочника. """ try: evalSpace = obj.GetContext() sprav = evalSpace[CONTEXT_SPRAV_NAME] _tab = sprav.getStorage()._tab tree = evalSpace.GetObject(SPR_TREE_NAME) tree.GetParent().Freeze() tree.begin_load() sprav_tree = sprav.getStorage().getLevelTree() tree.LoadTree(sprav_tree) tree.GetParent().Thaw() # Получить таблицу level_tab_tuple = sprav.getStorage().getLevelTable(None) level_tab = [list(rec) for rec in level_tab_tuple] if level_tab is not None: grid = evalSpace.GetObject(SPR_GRID_NAME) # Устанвливаем буфер изменений, [0] - задает список индексных колонок buff = icsimpledataset.CChangeBuff([0]) grid.GetDataset().set_change_buff(buff) dataset = grid.GetDataset() if dataset: dataset.SetDataBuff(level_tab) # len_cod = sprav.getLevelByIdx(0).getCodLen() grid.GetDataset().SetStructFilter({'cod': [len_cod]}) if bRefresh: grid.RefreshGrid() except: ic_log.icLogErr(u'Ошибка инициализации дерева справочника.')
def onMouseClickFindTool(obj): try: evalSpace = obj.GetContext() tree = evalSpace.GetObject(SPR_TREE_NAME) find_str = evalSpace.GetObject('findEdit').GetValue() if find_str.strip(): tree.selectFindItem(find_str) except: ic_log.icLogErr(u'Ошибка обработчика кнопки поиска в справочнике.')
def onMouseClickDelTool(obj): """ Нажатие кнопки delTool на панели инструментов.""" try: evalSpace = obj.GetContext() grid = evalSpace.GetObject(SPR_GRID_NAME) i_row = grid.GetGridCursorRow() grid.DelRows(i_row) except: ic_log.icLogErr( u'Ошибка обработчика кнопки delTool на панели инструментов.')
def onCodControl(evalSpace): """ Контроль кода. """ try: print('onCodControl START!!!!!!!!!!!!!!!!!!') #onCodControl.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен old_value = evalSpace['old_value'] value = evalSpace['value'] #sprav=evalSpace['sprav'] sprav = evalSpace['OBJ'] #GetInterface=evalSpace['GetInterface'] #GetObject=evalSpace['GetObject'] #Проверка уникальности кода try: new_cod = evalSpace.GetObject('spravTree').getSelectionRecord()[0] except: new_cod = None #Проверка, есть ли подкоды if old_value and sprav.isSubCodes(old_value): ic_dlg.icMsgBox(u'ВНИМАНИЕ!', u'Нельзя изменять значение кода. Есть подкоды.') return (3, None) try: grid = evalSpace.GetInterface('spravGrid').get_grid() except: grid = evalSpace.GetObject('spravGrid') buff_codes = map(lambda rec: rec[0], grid.GetDataset().data)[:-1] ctrl_ret = coderror.IC_CTRL_OK if value in buff_codes: ctrl_ret = coderror.IC_CTRL_FAILED_IGNORE if not ctrl_ret in [coderror.IC_CTRL_OK, coderror.IC_CTRL_REPL]: ic_dlg.icMsgBox(u'ВНИМАНИЕ!', u'Такой код есть уже в справочнике!') return (ctrl_ret, None) # Проверяем по связанному справочнику, если он есть if new_cod == None: new_cod = '' #print '*********** NEW_COD=', new_cod ref_sprav = sprav.getLevelRefSpravByCod(new_cod) if ref_sprav: return ref_sprav.Ctrl(value, field='cod') return (ctrl_ret, None) except: ic_log.icLogErr(u'Ошибка контроля кода справочника.') return (coderror.IC_CTRL_FAILED_IGNORE, None)
def connect(self): """ Соединение с объектом. """ try: self._agent = win32com.client.Dispatch('Agent.Control.2') except: ic_log.icLogErr(u'В системе не установлен MSAgent') self._agent = None if self._agent: self._agent.Connected = True #Подключиться к объекту #Установить персонажа self.setCharacter(self._character)
def _onMouseClickFindTool(obj): try: evalSpace = obj.GetContext() grid = evalSpace.GetObject(SPR_GRID_NAME) find_str = evalSpace.GetObject('findEdit').GetValue() cur_cursor = grid.GetGridCursorRow() i_row, field = grid.GetDataset().FindRowString(find_str, cursor=cur_cursor, fields=['name']) if i_row >= 0: grid.SetCursor(i_row, 1) except: ic_log.icLogErr(u'Ошибка обработчика кнопки поиска в справочнике.')
def onMouseClickAddTool(evalSpace): """ Обработчик щелчка на кнопке панели инструментов addTool. """ try: print('onMouseClickAddTool START!!!!!!!!!!!!!!!!!!') #print evalSpace.has_key('old_cod') #onMouseClickAddTool.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #sprav=evalSpace['sprav'] #old_cod=evalSpace['old_cod'] sprav = evalSpace['OBJ'] old_cod = sprav.getPrevCode() #GetInterface=evalSpace['GetInterface'] if old_cod == None: old_cod = '' if old_cod: #lev=sprav.getLevelByCod(old_cod) level = sprav.getLevelByCod(old_cod).getNext() else: level = sprav.getLevelByCod(old_cod) new_cod = old_cod try: grid = evalSpace.GetInterface('spravGrid').get_grid() except: grid = evalSpace.GetObject('spravGrid') if level: #print '$$$$',level.name,level.getCodLen() grid.GetDataset().SetStructFilter( {'cod': [new_cod, level.getCodLen()]}) # cod_len=level.getCodLen() # new_cod+='*'*cod_len grid.AddRows() #grid.setNameValue('cod',new_cod) #Внесено изменение global is_changed is_changed = True return old_cod except: ic_log.icLogErr( u'Ошибка обработчика щелчка на кнопке панели инструментов addTool.' )
def onKeyDownFindEdit(obj, event): try: key = event.GetKeyCode() if key == wx.WXK_RETURN: evalSpace = obj.GetContext() tree = evalSpace.GetObject(SPR_TREE_NAME) find_str = obj.GetValue() if find_str.strip(): tree.selectFindItem(find_str) event.Skip() except: ic_log.icLogErr( u'Ошибка обработчика нажатия клавиши в поле поиска строки в справочнике.' )
def getItemRecord(self, Item_): """ Список записи на узле. @param Item_: ID узла у которого устанавливается запись. @return: Возвращает список строк записи узла. Или None в случае ошибки. """ try: res = self.GetPyData(Item_)[1] if isinstance(res, dict) and '__record__' in res: return res['__record__'] return None except: ic_log.icLogErr(u'ОШИБКА компонента %s метода getItemRecord' % self.name) return None
def setLabelCols(self, LabelCols_): """ Установить надписи колонок. @param LabelCols_: Надписи колонок. Список строк. @return: Возвращает результат выполнения функции True/False. """ try: col_count = self.GetColumnCount() for i_col, col_label in enumerate(LabelCols_): if i_col < col_count: self.SetColumnText(i_col, col_label) else: break return True except: ic_log.icLogErr(u'ОШИБКА компонента %s метода setLabelCols' % self.name) return False
def onInitSpravTree(evalSpace, bRefresh=True): """ Обработчик события инициализации дерева справочника. """ try: print('!!! onInitSpravTree START') #onInitSpravTree.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #sprav=evalSpace['sprav'] sprav = evalSpace['OBJ'] #GetObject=evalSpace['GetObject'] #GetObject=evalSpace.GetObject #GetInterface=evalSpace['GetInterface'] tree = evalSpace.GetObject('spravTree') sprav_tree = sprav.getStorage().getLevelTree() tree.LoadTree(sprav_tree) #Получить таблицу level_tab_tuple = sprav.getStorage().getLevelTable(None) level_tab = [list(rec) for rec in level_tab_tuple] if level_tab is not None: #grid=GetObject('spravGrid') try: #Использование шаблона grid = evalSpace.GetInterface('spravGrid').get_grid() except: #Использование объекта grid = evalSpace.GetObject('spravGrid') print('GRID:::', grid) #grid=grid.get_grid() dataset = grid.GetDataset() if dataset: dataset.SetDataBuff(level_tab) # len_cod = sprav.getLevelByIdx(0).getCodLen() grid.GetDataset().SetStructFilter({'cod': [len_cod]}) if bRefresh: grid.RefreshGrid() except: ic_log.icLogErr(u'Ошибка инициализации дерева справочника.')
def onMouseClickFindTool(evalSpace): """ """ try: #onMouseClickFindTool.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #GetInterface=evalSpace['GetInterface'] #GetObject=evalSpace['GetObject'] #grid = GetInterface('spravGrid').get_grid() grid = evalSpace.GetObject('spravGrid') find_str = evalSpace.GetObject('findEdit').GetValue() cur_cursor = grid.GetGridCursorRow() i_row, field = grid.GetDataset().FindRowString(find_str, cursor=cur_cursor, fields=['name']) if i_row >= 0: grid.SetCursor(i_row, 1) except: ic_log.icLogErr(u'Ошибка обработчика конпки поиска в справочнике.')
def onMouseClickSaveTool(obj): """ Сохранение внесенных изменений. """ try: evalSpace = obj.GetContext() sprav = evalSpace[CONTEXT_SPRAV_NAME] cur_cod = sprav.getCurCode() grid = evalSpace.GetObject(SPR_GRID_NAME) tab = grid.GetTable().GetDataset().data tab = sprav.getStorage().setTypeLevelTable(tab) buff = grid.GetTable().GetDataset().allChangeBuff _tab = sprav.getStorage()._tab sprav.getStorage().setLevelTable(cur_cod, tab, change_buff=buff) grid.GetDataset().set_change_prz(False) # Перегрузить дерево справочника sprav_tree = sprav.getStorage().getLevelTree() evalSpace.GetObject(SPR_TREE_NAME).LoadTree(sprav_tree) except: ic_log.icLogErr( u'Ошибка обработчика кнопки сохрания изменения справочника.')
def onMouseClickDelTool(evalSpace): """ Нажатие кнопки delTool на панели инструментов. """ try: #onMouseClickDelTool.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #GetInterface=evalSpace['GetInterface'] #GetObject=evalSpace['GetObject'] try: grid = evalSpace.GetInterface('spravGrid').get_grid() except: grid = evalSpace.GetObject('spravGrid') i_row = grid.GetGridCursorRow() grid.DelRows(i_row) #Внесено изменение global is_changed is_changed = True except: ic_log.icLogErr( u'Ошибка обработчика кнопки delTool на панели инструментов.')
def onSelectChangedSpravTree(evalSpace): """ Обработчик смены элемента дерева справочника. """ try: #onSelectChangedSpravTree.func_globals['__builtins__']['locals']().update(evalSpace) #Вытащить глобальные переменные из пространства имен, #иначе они не попадут в локальное пространство имен #sprav=evalSpace['sprav'] sprav = evalSpace['OBJ'] #GetObject=evalSpace['GetObject'] GetObject = evalSpace.GetObject GetInterface = evalSpace.GetInterface #old_cod=evalSpace['old_cod'] old_cod = sprav.getPrevCode() #Внесено изменение global is_changed #print 'DBG is_changed',is_changed,GetObject('spravTree').GetSelections() if is_changed: if ic_dlg.icAskDlg( u'ВНИМАНИЕ!', u'В справочник были внесены изменения. Сохранить?' ) == wx.YES: is_changed = False onMouseClickSaveTool(evalSpace) #Выбранный код try: cod = GetObject('spravTree').getSelectionRecord()[0] except: cod = '' sprav.setCurCode(cod) #Сохранение внесенных изменений #print '!!!1',old_cod,cod,sprav.getLevelByCod(cod) #if old_cod<>cod: # tab=GetObject('spravGrid').GetTable().GetDataset().data # print '!!!',old_cod,tab # sprav.getStorage().setLevelTable(old_cod,tab) # #Перегрузить дерево справочника # sprav_tree=sprav.getStorage().getLevelTree() # GetObject('spravTree'].LoadTree(sprav_tree) #sprav.getStorage().setLevelTable(old_cod, # GetObject('spravGrid'].GetTable().GetDataset().data) old_cod = cod level = sprav.getLevelByCod(cod) #print '>>spravGrid',evalSpace.GetInterface('spravGrid') try: grid = evalSpace.GetInterface('spravGrid').get_grid() except: grid = evalSpace.GetObject('spravGrid') #grid=GetObject('spravGrid') #Получить таблицу level_tab = [ list(rec) for rec in sprav.getStorage().getLevelTable(cod) ] if level_tab is not None: dataset = grid.GetDataset() if dataset: dataset.SetDataBuff(level_tab) #Определение длины кода if level and cod: level_next = level.getNext() if level_next: len_cod = level_next.getCodLen() else: len_cod = -1 else: len_cod = sprav.getLevelByIdx(0).getCodLen() if len_cod >= 0: if dataset: dataset.SetStructFilter({'cod': [cod, len_cod]}) grid.RefreshGrid() #Поменять надписи колонок if level: GetObject('spravTree').setLabelCols(level.labelsNotice()) grid.setColLabels(level.getNoticeDict()) is_next_level = level.isNext() or GetObject( 'spravTree').isRootSelected() GetObject('spravToolBar').enableTool('addTool', is_next_level) GetObject('spravToolBar').enableTool('delTool', is_next_level) GetObject('spravToolBar').enableTool('saveTool', is_next_level) return old_cod except: ic_log.icLogErr( u'Ошибка обработчика смены элемента дерева справочника.') return None
def findItemString(self, string, curItem=None, columns=None, bILike=True): """ Функция ищет подстроку в массиве данных. @type string: C{string} @param string: Строка поиска @type curItem: C{int} @param curItem: Элемент дерева, с которого начинается поиск. @type columns: C{list} @param columns: Список колонок записи каждого элемента, по которым ведется поиск. @type bILike: C{bool} @param bILike: Признак поиска без учета регистра. Если False - то поиск ведется на точное соответствие. @return: Возвращает номер элемента дерева, где найдена искомая строка. """ try: # Без учета регистра? if bILike: string = string.upper() # Текущий элемент дерева if curItem is None: curItem = self.root cur_item_rec = self.getItemRecord(curItem) # Колонки if columns is None: columns = range(len(cur_item_rec)) # Сначала поискать в текущем элементе for col in columns: if cur_item_rec: # Получить значение поля if bILike: value = str(cur_item_rec[col]).upper() else: value = str(cur_item_rec[col]) # Проверка на совпадение подстроки if string in value: return curItem # Обработка дочерних элементов children = self.getItemChildren(curItem) if children: for child in children: result = self.findItemString(string, child, columns, bILike) if result is not None: # Если нашли в дочерних элементах, то вернуть результат return result # Ну если и в дочерних узлах не нашли, # то вызвать поиск для следующего элемента next = self.GetNextSibling(curItem) if next.IsOk(): return self.findItemString(string, next, columns, bILike) # Все равно не нашли return None except: ic_log.icLogErr( u'ОШИБКА компонента %s метода поиска узла по строке' % self.name) 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
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 onSelectChangedSpravTree(obj): """ Обработчик смены элемента дерева справочника. """ try: evalSpace = context = obj.GetContext() sprav = context[CONTEXT_SPRAV_NAME] old_cod = sprav.getPrevCode() grid = context.GetObject(SPR_GRID_NAME) grid.ClearSortPrz() # Внесено изменение if grid.GetDataset().isChanged(): if ic_dlg.icAskDlg( u'ВНИМАНИЕ!', u'В справочник были внесены изменения. Сохранить?' ) == wx.YES: onMouseClickSaveTool(obj) else: # Если отказались от изменений, то сбросить флаг изменения grid.GetDataset().set_change_prz(False) # Сбрасываем признак изменения таблицы # Выбранный код try: cod = context.GetObject(SPR_TREE_NAME).getSelectionRecord()[0] except: cod = '' sprav.setCurCode(cod) # Сохранение внесенных изменений old_cod = cod level = sprav.getLevelByCod(cod) # Получить таблицу level_tab = [ list(rec) for rec in sprav.getStorage().getLevelTable(cod) ] if level_tab is not None: dataset = grid.GetDataset() if dataset: dataset.SetDataBuff(level_tab) # Определение длины кода if level and cod: level_next = level.getNext() if level_next: len_cod = level_next.getCodLen() else: len_cod = -1 else: len_cod = sprav.getLevelByIdx(0).getCodLen() if len_cod >= 0: if dataset: dataset.SetStructFilter({'cod': [cod, len_cod]}) grid.RefreshGrid() # Поменять надписи колонок if level: context.GetObject(SPR_TREE_NAME).setLabelCols(level.labelsNotice()) is_next_level = level.isNext() or context.GetObject( SPR_TREE_NAME).isRootSelected() context.GetObject('spravToolBar').enableTool( 'addTool', is_next_level) context.GetObject('spravToolBar').enableTool( 'delTool', is_next_level) context.GetObject('spravToolBar').enableTool( 'saveTool', is_next_level) if is_next_level: grid.Enable(True) if cod: grid.setColLabels(level.getNext().getNoticeDict()) else: grid.setColLabels(level.getNoticeDict()) print('**** level:', level._index, cod) else: grid.Enable(False) return old_cod except: ic_log.icLogErr( u'Ошибка обработчика смены элемента дерева справочника.') return None