コード例 #1
0
ファイル: ic_link_wrp.py プロジェクト: XHermitOne/defis
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('table', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in (icsqlalchemy.TABLE_TYPE, ):
                ic_dlg.icWarningBox(u'ОШИБКА',
                                    u'Выбранный объект не является таблицей.')
                return coderror.IC_CTRL_FAILED_IGNORE
            try:
                kernel = ic_user.getKernel()
                res = propEdt.GetResEditor().GetResource()
                my_db_psp = res['source']
                if my_db_psp:
                    my_db_psp = icobject.icObjectPassport(*my_db_psp)

                res = kernel.getResByPsp(ret)
                link_db_psp = res['source']
                if link_db_psp:
                    link_db_psp = icobject.icObjectPassport(*link_db_psp)

                if my_db_psp != link_db_psp:
                    ic_dlg.icWarningBox(
                        u'ОШИБКА',
                        u'ВНИМАНИЕ! Связанные таблицы должны находиться в одной БД.'
                    )
                    return coderror.IC_CTRL_FAILED_IGNORE
            except:
                io_prnt.outErr(u'Ошибка контроля вводимого значения %s : %s' %
                               (attr, value))
            return ret
コード例 #2
0
    def addPage(self, Page_, Title_, Select_=False, Image_=None, not_dublicate=True):
        """
        Добавить страницу.
        @param Page_: Страница-объект наследник wx.Window.
        @param Title_: Заголовок страницы.
        @param Select_: Выбирается по умолчанию эта страница?
        @param Image_: Файл образа или сам образ в заголовке страницы.
        @param not_dublicate: Не открывать страницу с таким же именем?
        """
        if Page_ is None:
            log.warning(u'Не определена страница для добавления в главный нотебук')
            return

        if not_dublicate:
            # Запретить открытие страницы с таким же заголовком
            page_titles = [page['title'] for page in self.getPages()]
            if Title_ in page_titles:
                msg = u'Страница <%s> уже открыта' % Title_
                log.warning(msg)
                Page_.Destroy()
                ic_dlg.icWarningBox(u'ВНИМАНИЕ!', msg)
                return None

        # У объекта страницы поменять хозяина
        # Чтобы органайзер синхронно переразмеривался с главным окном
        if Page_.GetParent() != self:
            log.debug(u'Смена родителя <%s> страницы <%s>' % (Page_.GetParent(), Page_.__class__.__name__))
            Page_.Reparent(self)
        return self.AddPage(Page_, Title_, Select_, Image_)
コード例 #3
0
    def OnImport1C(self, event):
        """
        Импорт метаобъектов 1С.
        """
        node = self._Parent
        prj_filename = node.getPrjFileName()
        # Проверить открыт ли какой-нибудь проект
        if not prj_filename:
            ic_dlg.icWarningBox(u'ВНИМАНИЕ',
                                u'''Импорт можно производить только в определенный проект.
 Откройте проект для возможности импорта''')
            return

        import_system_names = [sub_sys.name for sub_sys in node.getImpSystems().getSubSytems()]
        # Проверить импортированны ли NSI и work_flow
        if 'NSI' not in import_system_names or 'work_flow' not in import_system_names:
            ic_dlg.icWarningBox(u'ВНИМАНИЕ',
                                u'''Импортирование метаобъектов возможно
 только при подключенных подсистемах <NSI> и <work_flow>''')

        try:
            from work_flow.cf_importer import icWizard

            icWizard.run_wizard()

            # Обновление дерева проектов
            self._Parent.getRoot().getParent().Refresh()
        except:
            io_prnt.outErr(u'Ошибка запуска визарда импорта метаобъектов 1С')
コード例 #4
0
    def onMoveDownToolClicked(self, event):
        """
        Обработчик инструмента перемещения ящика/паллета вниз в списке ящиков.
        """
        selected_idx = self.getItemSelectedIdx(self.box_ListCtrl)

        if selected_idx == wx.NOT_FOUND:
            log.warning(u'Не выбран ящик/паллет')
            ic_dlg.icWarningBox(u'ВНИМАНИЕ!', u'Необходимо выбрать позицию для перемещения!')
            event.Skip()
            return

        data_list = self.getBoxListRecords()
        is_move = self.moveDownRow_list_ctrl(self.box_ListCtrl, data_list, idx=selected_idx, n_col=0)

        if is_move:
            src_cell = self.truck_constructor.truck_load_constructor.getCellByIdx(selected_idx)
            dst_cell = self.truck_constructor.truck_load_constructor.getCellByIdx(selected_idx+1)
            self.truck_constructor.truck_load_constructor.replaceCells(src_cell, dst_cell)
            self.refreshBoxList()

        # Отключить кнопки если достигнут край списка
        selected_idx = self.getItemSelectedIdx(self.box_ListCtrl)
        last_item_idx = len(data_list)-1
        self.enableTools_toolbar(self.box_toolBar,
                                 moveup_tool=selected_idx != wx.NOT_FOUND and selected_idx > 0,
                                 movedown_tool=selected_idx != wx.NOT_FOUND and selected_idx < last_item_idx)
        event.Skip()
コード例 #5
0
 def onSearchToolClicked(self, event):
     """
     Обработчик инструмента поиска по наименованию записи справочника.
     """
     search_txt = self.search_textCtrl.GetValue()
     if search_txt:
         do_find = True
         if self.not_actual_search:
             search_codes = self.getSearchCodes(search_txt)
             if not search_codes:
                 ic_dlg.icWarningBox(u'ПРЕДУПРЕЖДЕНИЕ', u'Не найдены записи, соответствующие строке поиска')
                 do_find = False
             self.not_actual_search = False
         else:
             # Если не надо обновлять список найденных кодов, то просто
             # искать следующий код в списке
             self.search_code_idx += 1
             if self.search_code_idx >= len(self.search_codes):
                 self.search_code_idx = 0
                 
         if do_find and self.search_codes:
             find_code = self.search_codes[self.search_code_idx]
             self.select_sprav_tree_item(find_code)
     else:
         ic_dlg.icWarningBox(u'ПРЕДУПРЕЖДЕНИЕ', u'Не выбрана строка поиска')
         
     event.Skip()        
コード例 #6
0
ファイル: icstaticbitmap.py プロジェクト: XHermitOne/defis
    def OnSelect(self, evt):
        """
        Обрабатываем установку фокуса на компонент
        """
        if self.editor is None and self.hlp not in (None, 'None', ''):
            #   Блокируем запись для редактирования, если позволяет объект данных
            try:
                err = self.dataset.Lock()

                if err in [1, 2]:
                    ic_dlg.icWarningBox(
                        u'ОШИБКА', u'Запись заблокирована err=%s' % str(err))
            except:
                pass

            id = wx.NewId()
            self.editor = wx.Button(self, id, size=(15, 15), label='>')
            self.Bind(wx.EVT_BUTTON, self.OnHelp, self.editor, id)

        elif self.editor is not None:
            self.editor.Destroy()
            self.editor = None

            #   Разблокируем запись для редактирования, если объект данных поддерживает блокировки
            try:
                self.dataset.Unlock()
            except:
                pass
コード例 #7
0
    def edit(self):
        """
        Редактирование модуля.
        """
        ic_dlg.icWarningBox(
            u'ПРЕДУПРЕЖДЕНИЕ',
            u'''Редактирование модуля библиотеки образов запрещено.
Модули библиотеки образов генерируются в редакторе библиотеки образов.''')
コード例 #8
0
    def edit(self):
        """
        Редактирование модуля.
        """
        ic_dlg.icWarningBox(
            u'ПРЕДУПРЕЖДЕНИЕ',
            u'''Редактирование модуля форм wxFormBuilder запрещено.
Модули форм генерируются в среде wxFormBuilder.''')
コード例 #9
0
    def edit(self):
        """
        Редактирование модуля.
        """
        ic_dlg.icWarningBox(
            u'ПРЕДУПРЕЖДЕНИЕ',
            u'''Редактирование модуля форм, сгенерированных утилитой pywxrc (из XRC ресурса), запрещено.
Модули форм генерируются средствами дизайнера XRC файла.''')
コード例 #10
0
ファイル: icuserpropertydlg.py プロジェクト: XHermitOne/defis
    def _refreshData(self):
        """
        Обновить данные по контролам редактирования.
        """
        # Главное окно и горизонтальное меню наследуются у текущего пользователя
        default_main_win = ic.getKernel().GetAuthUser().resource['main_win']
        default_main_menubars = ic.getKernel().GetAuthUser(
        ).resource['menubars']

        data = util.icSpcDefStruct(icUser.SPC_IC_USER, {
            'main_win': default_main_win,
            'menubars': default_main_menubars
        })

        name_edit = self.GetNameObj('nameEdit')
        if name_edit:
            data['name'] = name_edit.GetValue()

        description_edit = self.GetNameObj('descriptionEdit')
        if description_edit:
            data['description'] = description_edit.GetValue()

        local_dir_edit = self.GetNameObj('localDirEdit')
        if local_dir_edit:
            data['local_dir'] = local_dir_edit.GetValue()

        role_choice = self.GetNameObj('roleChoice')
        if role_choice:
            roles = self._manager.getRoles()
            selection = role_choice.GetSelection()
            try:
                data['roles'] = [roles[selection][0]]
            except:
                data['roles'] = []

        password_edit1 = self.GetNameObj('passwordEdit1')
        password_edit2 = self.GetNameObj('passwordEdit2')
        if password_edit1 and password_edit2:
            password1_txt = password_edit1.GetValue()
            password2_txt = password_edit2.GetValue()
            password1_md5 = md5.new(password1_txt).hexdigest()
            password2_md5 = md5.new(password2_txt).hexdigest()
            if password1_md5 == password2_md5:
                if not password1_txt.strip():
                    # Выбрана пустая строка
                    data['password'] = md5.new('').hexdigest()
                else:
                    data['password'] = password1_md5
            else:
                ic_dlg.icWarningBox(
                    u'ВНИМАНИЕ!',
                    u'Введенный пароль и подтверждение на совпадают. Введите еще раз.',
                    ParentWin_=self.getDialog())
                return None

        self._data = data
        return self._data
コード例 #11
0
ファイル: icspraveditdlg.py プロジェクト: XHermitOne/defis
    def onFindToolClicked(self, event):
        """
        Обработчик инструмента поиска записи справочника по ключевому слову.
        """
        find_txt = self.find_textCtrl.GetValue()
        if find_txt:
            self.findWordInRecordsListCtrl()
        else:
            ic_dlg.icWarningBox(u'ПРЕДУПРЕЖДЕНИЕ', u'Не выбрана строка поиска')

        event.Skip()
コード例 #12
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('object_link',):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('GridDataset', ):
                ic_dlg.icWarningBox(u'ОШИБКА', u'Тип выбранный объект не корректен.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #13
0
ファイル: icdataset.py プロジェクト: XHermitOne/defis
    def getResourceByPspLink(self, component):
        """
        Собирает ресурсное описание по ссылке.
        Ресурсное описание собирается по паспорту объекта.
        @type component: C{dictionary}
        @param component: Словарь описания ссылки.
        """
        res = None
        res_query = util.getSpcAttr(component, 'res_query',
                                    self.evalSpace).strip()
        psp_link = component['psp_link']

        _query = res_query.split(':')

        try:
            link_type = _query[1].split('.')[0]
            link_name = _query[1].split('.')[1]

            io_prnt.outLog(
                u'ICDATASET: point to object resource: type=<%s>, name=<%s>' %
                (link_type, link_name))
        except:
            link_type = None
            link_name = None

        #   Получаем ресурсное описание, где в общем случае ищется
        #   описание нужного компонента
        io_prnt.outLog(u'Связь с ресурсом по паспорту: %s' % psp_link)
        res = resource.getResByPsp(psp_link)

        # ---- В ресурсе ищем описание нужного компoнента
        #   (<key_in_fileres>:type.name)
        if link_name and link_type:
            ret = getRes(res, link_type, link_name)

            if not ret:
                io_prnt.outWarning(u'Не найден объект [%s : %s] в ресурсе' %
                                   (link_type, link_name))
                res = None

        # -------------------------------------------------------------
        #   В полученном ресурсном описании ищем ссылки и заменяем их
        #   на ресурсные описания
        if res:
            res = self.doReplacementRes(res, component)
        else:
            # Если ресурсное описание не найдено и выражение изменений не
            #   определено, то сообщаем об этом пльзователю
            ic_dlg.icWarningBox(
                u'ОШИБКА', u'Описание объекта <%s> в %s не найдено.' %
                (res_query, psp_link))

        return res
コード例 #14
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('sourcePsp',):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in ('Table',):
                ic_dlg.icWarningBox(u'ОШИБКА', u'Выбранный объект не является таблицей.')
                return coderror.IC_CTRL_FAILED_IGNORE
            return ret
コード例 #15
0
ファイル: ic_query_wrp.py プロジェクト: XHermitOne/defis
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('source', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            ctrl_types = icsqlalchemy.DB_TYPES
            if ret[0][0] not in ctrl_types:
                ic_dlg.icWarningBox(u'ОШИБКА', u'Объект не БД типа.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #16
0
ファイル: ic_menuitem_wrp.py プロジェクト: XHermitOne/defis
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('bitmap',):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('Bitmap',):
                ic_dlg.icWarningBox(u'ОШИБКА',
                                    u'Выбранный объект не является картинкой.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #17
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('data_src',):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('Document', 'StateObj', 'BusinessObj',
                                 'Table', 'GridDataset', 'Recordset', 'Query'):
                ic_dlg.icWarningBox(u'ОШИБКА', u'Выбранный объект не является ИСТОЧНИКОМ ДАННЫХ.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
    return coderror.IC_CTRL_OK
コード例 #18
0
ファイル: nsi_requisite.py プロジェクト: XHermitOne/defis
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('nsi_psp', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if ret[0][0] not in ('Sprav', ):
                ic_dlg.icWarningBox(
                    u'ВНИМАНИЕ!',
                    u'Выбранный объект не является СПРАВОЧНИКОМ NSI.', parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #19
0
 def onOkButtonClick(self, event):
     """
     Обработчик кнопки <ОК>.
     """
     value = self.masked_textCtrl.GetValue()
     # Контроль значения на правильное заполнение
     if self.masked_textCtrl.IsValid(value):
         self.edit_text = value
     else:
         msg = u'Не корректное введеное значение <%s>' % value
         log.warning(msg)
         ic_dlg.icWarningBox(u'ОШИБКА', msg)
         self.edit_text = None
     self.EndModal(wx.ID_OK)
     event.Skip()
コード例 #20
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('content', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in ('Panel', 'ScrolledWindow', 'Notebook',
                                 'SplitterWindow'):
                ic_dlg.icWarningBox(
                    u'ОШИБКА', u'Выбранный объект не является главным окном.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #21
0
ファイル: ref_requisite.py プロジェクト: XHermitOne/defis
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('obj_psp', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if ret[0][0] not in ('BusinessObj', 'StateObj', 'Document'):
                ic_dlg.icWarningBox(
                    u'ОШИБКА',
                    u'Выбранный объект не является Бизнес-объектом/Документом.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
コード例 #22
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('nsi_psp', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt.GetPropertyGrid().GetView()
            if not ret[0][0] in ('Sprav', ):
                ic_dlg.icWarningBox(
                    u'ОШИБКА', u'Выбранный объект не является Справочником.',
                    parent)
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif ret in (None, ''):
            return coderror.IC_CTRL_OK
コード例 #23
0
    def onAddToolClicked(self, event):
        """
        Обработчик инструмента <Добавить тег>
        """
        tag_name = self.tag_textCtrl.GetValue()
        tag_address = self.address_textCtrl.GetValue()

        if tag_name not in self.tags:
            self.tags[tag_name] = tag_address
            self.update_tags(**self.tags)
        else:
            msg = u'Тег <%s> уже есть в списке' % tag_name
            log.warning(msg)
            ic_dlg.icWarningBox(u'ОШИБКА', msg)

        event.Skip()
コード例 #24
0
ファイル: icusereditpanel.py プロジェクト: XHermitOne/defis
 def onDelButtonMouseClick(self, event, values=None):
     """
     Обработчик нажатия на кнопку удаления пользователя.
     """
     try:
         if values:
             user_name = values['user']
             if ic_dlg.icAskBox(u'УДАЛЕНИЕ',
                                u'Удалить пользователя %s?' % user_name):
                 del self._data[user_name]
                 self._init_data(self._data)
         else:
             ic_dlg.icWarningBox(u'ВНИМАНИЕ', u'Выберите пользователя, которого надо удалить.')
                 
         if event:
             event.Skip()
     except:
         io_prnt.outErr(u'Ошибка удаления пользователя.')
コード例 #25
0
 def OnHelp(self, event):
     """
     Помощь...
     """
     import ic
     hlp_file_name = os.path.join(os.path.dirname(ic.__file__), 'doc', 'index.html')
     if ic_file.Exists(hlp_file_name):
         if wx.Platform == '__WXMSW__':
             hlp_file_name = os.path.normpath(hlp_file_name)
             ic_exec.icSysCmd('start explorer ' + hlp_file_name)
         elif wx.Platform == '__WXGTK__':
             try:
                 www_browser = os.environ.get('BROWSER', DEFAULT_WWW_BROWSER)
                 ic_exec.icSysCmd(www_browser + ' ' + hlp_file_name)
             except:
                 io_prnt.outErr()
     else:
         ic_dlg.icWarningBox(u'ПОМОЩЬ',
                             u'Файл помощи <%s> не найден. Запустите генерацию документации :-)' % hlp_file_name)
コード例 #26
0
ファイル: icusereditpanel.py プロジェクト: XHermitOne/defis
    def onEditButtonMouseClick(self, event, values=None):
        """
        Обработчик нажатия на кнопку редактирования пользователя.
        """
        try:
            if values:
                user_name = values['user']
                default_res = self._data[user_name]
                user_res = icuserpropertydlg.icUserPropertyDlg(self.getPanel(),
                                                               default_res, self._manager)
                if user_res:
                    self.updateData(user_res)
            else:
                ic_dlg.icWarningBox(u'ВНИМАНИЕ', u'Выберите пользователя для редактирования.')

            if event:    
                event.Skip()
        except:
            io_prnt.outErr(u'Ошибка редактирования пользователя.')
コード例 #27
0
    def read_tags(self, **tags):
        """
        Прочитать теги из контроллера.
        @param tags: Словарь тегов в формате:
            {'имя тега': 'адрес тега', ... }
        @return: Словарь прочитанных значений:
            {'имя тега': 'значение тега', ... }
            Либо None в случае ошибки.
        """
        if self.controller is None:
            msg = u'Не определен объект контроллера для тестирования'
            log.warning(msg)
            ic_dlg.icWarningBox(u'ОШИБКА', msg)
            return None

        tag_values = self.controller.read_tags(**tags)
        if tags and not tag_values:
            log.warning(u'Ошибка определения значений тегов')
        return tag_values
コード例 #28
0
ファイル: fb_form_gen.py プロジェクト: XHermitOne/defis
def gen_wxfb_prj(parent=None, resource=None, fbp_filename=None):
    """
    Функция запуска генерации форм wxFormBuilder бизнес объекта/документа.
    @param parent: Родительское окно.
    @param resource: Ресурс, по которому происходит генерация
    @param fbp_filename: Файл проекта wxFormBuilder для сохранения.
    @return: True - генерация прошла успешно.
        False - Возникла какая-то ошибка.
    """
    if parent is None:
        app = wx.GetApp()
        parent = app.GetTopWindow()

    if resource is None:
        log.warning(u'Не определен ресурс генерации форм wxFormBuilder')
        return False

    if fbp_filename is None:
        fbp_filename = ic_dlg.icFileDlg(parent,
                                        u'Выбор файла проекта wxFormBuilder для генерации',
                                        u'wxFormBuilder project (*.fbp)|*.fbp')

    if not fbp_filename:
        log.warning(u'Не определен файл проекта wxFormBuilder для генерации форм')
        return False

    if os.path.exists(fbp_filename):
        if not ic_dlg.icAskBox(u'ВНИМАНИЕ', u'Файл <%s> уже существует. Перезаписать его?' % fbp_filename):
            # Не надо перезаписывать,
            # тогда нет смысла и генерировать его
            return False

    generator = icWxFBPrjGenerator()
    if not generator.isParsed(resource):
        ic_dlg.icWarningBox(u'ОШИБКА', u'Тип ресурса не поддерживается генератором форм wxFormBuilder')
        return False

    generator.setResource(resource)
    generator.setGenFilename(fbp_filename)
    txt = generator.genPrj()
    return generator.savePrj(txt)
コード例 #29
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('main_win', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            if not ret[0][0] in ('MainWindow', 'AUIMainWindow'):
                ic_dlg.icWarningBox(
                    u'ОШИБКА', u'Выбранный объект не является главным окном.')
                return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
    elif attr in ('menubars', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            parent = propEdt
            first_menubar_type = ret[0][0][0]
            for cur_psp in ret:
                if not cur_psp[0][0] in ('MenuBar', 'FlatMenuBar'):
                    ic_dlg.icWarningBox(
                        u'ОШИБКА',
                        u'Выбранный объект [%s] не является главным меню.' %
                        cur_psp)
                    return coderror.IC_CTRL_FAILED_IGNORE
                # Все горизонтальные  меню должны быть одного типа
                if cur_psp[0][0] != first_menubar_type:
                    ic_dlg.icWarningBox(u'ОШИБКА',
                                        u'Ошибка типа. Обект [%s].' % cur_psp)
                    return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
    elif attr in ('password', ):
        return passwordEdt.property_editor_ctrl(value, propEdt)
    elif attr in ('roles', ):
        return multiChoiceEdt.property_editor_ctrl(value, propEdt)
コード例 #30
0
    def LoadSpravTree(self, root):
        """
        Создает дерево со структрурой заданного иерархического справочника.
        """
        if not self.getTypeSprav():
            ic_dlg.icWarningBox(u'ОШИБКА',
                                u'Не указан тип справочника <typeSprav>')
            return False

        #   Получаем ссылку на класс данных
        cl = self.dataset.dataclass
        rs = cl.select(cl.q.type == self.getTypeSprav())

        rows_dict = {}

        #   Буфферизируем справочник - раскидываем по разным уровням кода
        for r in rs:
            cod = getattr(r, self.codfield)
            row_buff = range(len(self.fields) + 1)
            row_buff[0] = cod

            #   Читаем значения дополнительных полей
            for i, fld in enumerate(self.fields):
                row_buff[i + 1] = getattr(r, fld)

            cod_len = len(cod)

            if cod_len > 0:
                if cod_len in rows_dict:
                    rows_dict[cod_len].append(row_buff)
                else:
                    rows_dict[cod_len] = [row_buff]

        #   Сортируем по размеру кода
        keyList = rows_dict.keys()
        keyList.sort()

        #   Заполняем дерево
        self.AddCodItem(self.root, self.mask, 0, keyList, rows_dict)