示例#1
0
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.'
        )
示例#2
0
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
示例#3
0
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'Ошибка обработчика кнопки сохрания изменения справочника.')
示例#4
0
    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
示例#5
0
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'Ошибка инициализации дерева справочника.')
示例#6
0
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'Ошибка обработчика кнопки поиска в справочнике.')
示例#7
0
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 на панели инструментов.')
示例#8
0
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)
示例#9
0
 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)
示例#10
0
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'Ошибка обработчика кнопки поиска в справочнике.')
示例#11
0
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.'
        )
示例#12
0
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'Ошибка обработчика нажатия клавиши в поле поиска строки в справочнике.'
        )
示例#13
0
 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
示例#14
0
 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
示例#15
0
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'Ошибка инициализации дерева справочника.')
示例#16
0
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'Ошибка обработчика конпки поиска в справочнике.')
示例#17
0
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'Ошибка обработчика кнопки сохрания изменения справочника.')
示例#18
0
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 на панели инструментов.')
示例#19
0
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
示例#20
0
    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
示例#21
0
    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
示例#22
0
    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
示例#23
0
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