示例#1
0
    def childCreator(self, bCounter, progressDlg):
        """
        Функция создает объекты, которые содержаться в данном компоненте.
        """
        if self.child:
            indx = 0
            for el in self.child:
                if not el['activate'] in (0, '0', None, 'None', 'False',
                                          'false'):
                    if el['type'] == 'ToolBarTool':
                        img_indx = el.get('img_indx', -1)
                        if img_indx < 0:
                            img_indx = indx
                        self.AddToolRes(icwidget.icNewId(), el, img_indx)
                        indx += 1
                    elif el['type'] == 'Separator':
                        self.AddSeparator()
                    else:
                        res = self.GetKernel().parse_resource(
                            self, [el],
                            None,
                            context=self.evalSpace,
                            bCounter=bCounter,
                            progressDlg=progressDlg)

                        nm = el['name']
                        if nm in self.components:
                            obj = self.components[nm]
                            self.AddControl(obj)

            self.Realize()
示例#2
0
    def __init__(self, nameValue, pos, size, style=0):
        """
        @type nameValue: C{NameValue}
        @param nameValue: Указатель на объект свойства NameValue.
        @type pos: C{wx.Point}
        @param pos: Позиция компонента.
        @type size: C{wx.Size}
        @param size: Размеры компонента.
        @type style: C{long}
        @param style: Стиль компонента.
        """
        if int(nameValue.value) <= 0:
            label = 'False'
            value = 0
        else:
            label = 'True'
            value = 1

        icEditPropCtrl.__init__(self, nameValue)
        self.editorCtrl = wx.Window(nameValue.main.panel2,
                                    icwidget.icNewId(),
                                    pos=pos,
                                    size=size,
                                    style=wx.WANTS_CHARS)
        self.checkBox = wx.CheckBox(self.editorCtrl,
                                    self.wID,
                                    label,
                                    pos=(2, 1))

        self.checkBox.SetValue(value)
        self.editorCtrl.Bind(wx.EVT_CHECKBOX, self.OnCheckBox, id=self.wID)
        self.editorCtrl.SetFocus()
示例#3
0
    def __init__(self, nameValue, pos, size, style=wx.SIMPLE_BORDER):
        """
        @type nameValue: C{NameValue}
        @param nameValue: Указатель на объект свойства NameValue.
        @type pos: C{wx.Point}
        @param pos: Позиция компонента.
        @type size: C{wx.Size}
        @param size: Размеры компонента.
        @type style: C{long}
        @param style: Стиль компонента.
        """
        icEditPropPyScript.__init__(self, nameValue, pos, size, style)

        x, y = pos
        w, h = size
        ss = 3

        idButtonDel = icwidget.icNewId()

        self.buttonDel = wx.Button(self.editorCtrl,
                                   idButtonDel,
                                   'X',
                                   pos=(w - 2 * EPBSize - 1 + ss, 0),
                                   size=(EPBSize - ss, h - ss))
        self.buttonDel.editor = self
        self.buttonDel.Show()

        self.editorCtrl.Bind(wx.EVT_BUTTON, self.OnDelProperty, id=idButtonDel)
示例#4
0
    def OnKeyDown(self, evt):
        """
        Отлавливаем нажатие <Ctrl-M> для выбора метода из библиотеки методов.
        """
        cod = evt.GetKeyCode()

        if (cod in [ord('m'), ord('M')]
                and evt.ControlDown()) or cod == wx.WXK_F1:
            dlg = MthDialog(self.nameValue.main,
                            icwidget.icNewId(),
                            u'Выбери метод',
                            size=(400, 350))
            ret = dlg.ShowModal()

            # Копия
            if ret in [10, 20]:
                wx.TheClipboard.Open()
                txt_obj = wx.TextDataObject()
                txt = '@' + dlg.ret_tpl
                txt_obj.SetText(txt)
                wx.TheClipboard.SetData(txt_obj)
                wx.TheClipboard.Close()

                self.nameValue.value = txt
                self.nameValue.oldValue = txt

                self.nameValue.value_ctrl.SetLabel(self.nameValue.GetStr())
                self.nameValue.edit_ctrl.SetValue(txt)
                self.editorCtrl.SetValue(self.nameValue.GetStr())
                self.nameValue.edit_ctrl.SetFocus()

            dlg.Destroy()

        evt.Skip()
示例#5
0
 def __init__(self, nameValue):
     """
     Конструктор.
     """
     icEvent.__init__(self)
     self.nameValue = nameValue
     self.propEditor = nameValue.dict
     self.editorCtrl = None
     self.wID = icwidget.icNewId()
     self.value = nameValue.value
示例#6
0
    def __init__(self,
                 nameValue,
                 pos,
                 size,
                 style=wx.SIMPLE_BORDER,
                 label='...'):
        """
        @type nameValue: C{NameValue}
        @param nameValue: Указатель на объект свойства NameValue.
        @type pos: C{wx.Point}
        @param pos: Позиция компонента.
        @type size: C{wx.Size}
        @param size: Размеры компонента.
        @type style: C{long}
        @param style: Стиль компонента.
        """
        icEditPropCtrl.__init__(self, nameValue)
        x, y = pos
        w, h = size
        self.editorCtrl = wx.TextCtrl(nameValue.main.panel2,
                                      self.wID,
                                      nameValue.GetStr(),
                                      pos=pos,
                                      size=size,
                                      style=style)
        idButton = icwidget.icNewId()
        self.button = wx.Button(self.editorCtrl,
                                idButton,
                                label,
                                pos=(w - EPBSize - 1, 0),
                                size=(EPBSize, h))
        self.button.editor = self
        self.button.Show()

        if 'OnButton' in self.propEditor:
            self.editorCtrl.Bind(wx.EVT_BUTTON,
                                 self.propEditor['OnButton'],
                                 id=idButton)

        self.nameValue.main.panel2.Bind(wx.EVT_TEXT, self.OnText, id=self.wID)
示例#7
0
def icResourceParser(parent,
                     components,
                     sizer=None,
                     logType=0,
                     evalSpace=None,
                     bCounter=True,
                     progressDlg=None,
                     ids=None,
                     **kwargs):
    """
    Парсер. Функция рекурсивного разбора ресурсного описания.
    @type parent: C{wx.Window}
    @param parent: Указатель на родительское окно, на котором располагаются другие компоненты.
    @type components: C{List}
    @param components: Список компонентов.
    @type sizer: C{wx.Sizer}
    @param sizer: Сайзер куда добавляются компоненты.
    @type logType: C{int}
    @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога).
    @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений.
    @type evalSpace: C{dictionary}
    @type bCounter: C{bool}
    @param bCounter: Признак отображения в ProgressBar-е. Иногда это не нужно -
        для создания объектов полученных по ссылки. Т. к. они не учтены при подсчете
        общего количества объектов.
    @type ids: {list | tuple}
    @param ids: Список идентификаторов объектов.
    """
    log.info(u'Сборка объектов')

    #   Получаем указатель на индикатор и указатель главного окна (Dialog, Frame)
    main_parent = evalSpace.get('_main_parent', None)

    # Создаем компоненты
    for cindx, component in enumerate(components):
        # Определяем идентификатор объекта
        if cindx < len(ids or []):
            component_id = ids[cindx]
        else:
            component_id = None

        #   Компонент создается только если установлен признак активации bActivated = True
        if util.isAcivateRes(component, evalSpace):
            #   Определяем имя родительского интерфейса, если он определен
            try:
                interface = parent.GetInterfaceName()
                if not interface and sizer:
                    interface = sizer.GetInterfaceName()
            except:
                interface = None

            wxw = None
            #   Если у компонета есть алиас, то разбор ведем с алиасным именем.
            #   Как правило алиас появляется при создании объета по ссылке через
            #   объект ссылки DataLink
            if 'alias' in component and not component['alias'] in [
                    None, '', 'None'
            ]:
                name = component['alias']
            else:
                name = component['name']

            #   Прописываем имя родительского интерфеса в специальный ключ ресурса
            if interface and ('__interface__' not in component or
                              ('__interface__' in component
                               and not component['__interface__'])):
                component['__interface__'] = interface
            elif not interface and '__interface__' in component and component[
                    '__interface__']:
                interface = component['__interface__']

            if '__interface__' in component:
                interface = component['__interface__']
            #   Прописываем в пространстве имен имя файла ресурса
            if '__file_res' in component and component['__file_res']:
                evalSpace['__file_res'] = component['__file_res']
            #   Если определен индикатор процесса, то отображаем количество
            #   созданных компонентов ресурса
            if bCounter:
                progress.icUpdateProgressBar(u'Создаем компонент: <%s>' % name)
            else:
                log.debug(u'Создаем компонент: <%s> type: <%s>' %
                          (name, component['type']))

            # Оконные компоненты
            if parent is None and component['type'] in ('Panel', 'Window',
                                                        'ScrolledWindow',
                                                        'SplitterWindow'):
                parent = createFrame(
                    main_parent, component_id or icNewId(), {
                        'title': '',
                        'size': component['size'],
                        'position': component['position']
                    }, logType, evalSpace)

            if component['type'] == 'Frame':
                parent = wxw = createFrame(main_parent, component_id
                                           or icNewId(), component, logType,
                                           evalSpace)
            elif component['type'] == 'Dialog':
                parent = wxw = createDialog(main_parent, component_id
                                            or icNewId(), component, logType,
                                            evalSpace)
            elif component['type'] == 'SizerSpace':
                # В режиме графического редактора заменяем на окно таких-же размеров
                if isEditorMode():
                    component['type'] = 'Panel'
                    wxw = components_lib.icwxpanel.icWXPanel(
                        parent, -1, component, logType, evalSpace)
                    wxw.SetBackgroundColour(wx.Colour(200, 200, 250))
                else:
                    wxw = components_lib.sizers.icspacesizer.icSpaceSizer(
                        parent, icNewId(), component, logType, evalSpace)

            # Служебные компоненты
            elif component['type'] == 'DataLink':
                link = icdataset.icDataLink(component,
                                            logType=logType,
                                            evalSpace=evalSpace,
                                            fltDict=DatasetFilterBuff)
                if isinstance(link.resource, dict):
                    parent = icResourceParser(parent, [link.resource],
                                              logType=logType,
                                              sizer=sizer,
                                              evalSpace=evalSpace,
                                              bCounter=False,
                                              ids=[component_id])

            # Импорт модулей и имен
            elif component['type'] == 'Import':
                imp = components_lib.icimport.icImport(parent,
                                                       component_id
                                                       or icNewId(),
                                                       component,
                                                       0,
                                                       evalSpace,
                                                       isDebug=IS_TEST_MODE)
                wxw = imp.GetObject()

            # Объект группы
            elif component['type'] == 'Group':
                if len(component['child']):
                    # Модуль ресурса грузится конструкторе icSimple, поэтому
                    # передаем имя модуля дочернему компоненту - все остальные
                    # компоненты системы наследники icSimple
                    if 'res_module' in component:
                        component['child'][0]['res_module'] = component[
                            'res_module']
                    parent = icResourceParser(parent,
                                              component['child'],
                                              sizer,
                                              logType=logType,
                                              evalSpace=evalSpace,
                                              bCounter=bCounter,
                                              ids=ids)

            # Стандартные и пользовательские компоненты
            else:
                wxw = Constructor(parent,
                                  component_id or icNewId(),
                                  component,
                                  logType,
                                  evalSpace,
                                  bCounter,
                                  progressDlg,
                                  sizer=sizer)

            # Выполняем выражения инициализации для не визуальных компонентов
            if wxw is None and 'init_expr' in component and not component[
                    'init_expr'] in (None, 'None', ''):
                if component.get('_uuid', None):
                    util.ic_eval(component['init_expr'],
                                 0,
                                 evalSpace,
                                 'icResourceParser()<init_expr>. name:' + name,
                                 compileKey=component['_uuid'] + 'init_expr')
                else:
                    util.ic_eval(component['init_expr'], 0, evalSpace,
                                 'icResourceParser()<init_expr>. name:' + name)

            # Регистрация компонентов
            if wxw:
                # Регестрируем компоненты в родительском интерфейсе
                if interface and interface in evalSpace['_interfaces']:
                    ifc = evalSpace['_interfaces'][interface]
                    ifc.reg_object(wxw, name)
                # Если корневой компонент еще не определен, определяем его
                if evalSpace['_root_obj'] is None:
                    evalSpace['_root_obj'] = wxw
                    parent = wxw
                # Регестрируем компоненты в контексте
                evalSpace['_dict_obj'][name] = wxw
                evalSpace['_list_obj'].append(wxw)
                evalSpace['self'] = wxw
                # В режиме редактирования регестрируем все компоненты в редакторе
                if isEditorMode():
                    edt = evalSpace['_root_obj']
                    if wxw != edt:
                        try:
                            edt.AddObject(wxw)
                        except:
                            io_prnt.outErr('### AddOject Error: <%s> edt=%s' %
                                           (wxw, edt))

            # Заполнение контейнеров
            if wxw is not None and parent is not None and name and component[
                    'type'] != 'Table':
                # Регестрируем компонены в родительском компоненте
                if parent.type != 'ExternalWin':
                    if not sizer:
                        parent.reg_child(wxw, name)
                    # NOTE: 7/05/08. Для того, чтобы можно было объект вставить в сайзер,
                    # который не является компонентом ic - для дизайнера форм
                    elif hasattr(sizer, 'reg_child'):
                        sizer.reg_child(wxw, name)
                elif sizer:
                    sizer.reg_child(wxw, name)
                # Выполняем выражения инициализации для компонентов
                if 'init_expr' in component and not component['init_expr'] in [
                        None, 'None', ''
                ]:
                    evalSpace['evt'] = evalSpace.get('evt', None)
                    evalSpace['self'] = wxw
                    if '_uuid' in component and component['_uuid']:
                        util.ic_eval(
                            component['init_expr'],
                            0,
                            evalSpace,
                            'icResourceParser()<init_expr>. name:' + name,
                            compileKey=component['_uuid'] + 'init_expr')
                    else:
                        util.ic_eval(
                            component['init_expr'], 0, evalSpace,
                            'icResourceParser()<init_expr>. name:' + name)

                if 'source' in component and not component['source'] in [
                        '', None, 'None'
                ]:
                    evalSpace['_has_source'][name] = wxw
                # Обрабатываем атрибут <show> - выражение, которое определяет
                #     показывать компонент или скрыть
                if 'show' in component:
                    bShow = component['show']
                    if bShow in ('1', 'True'):
                        bShow = True
                    elif bShow in ('0', 'False'):
                        bShow = False
                    else:
                        if '_uuid' in component and component['_uuid']:
                            res, val = util.ic_eval(
                                component['show'],
                                0,
                                evalSpace,
                                'icResourceParser()<show>. name:' + name,
                                compileKey=component['_uuid'] + 'show')
                        else:
                            res, val = util.ic_eval(
                                component['show'], 0, evalSpace,
                                'Exception in icResourceParser()')

                        if res:
                            try:
                                bShow = bool(val)
                            except:
                                bShow = True

                    if not bShow:
                        wxw.Show(bShow)
    return parent
示例#8
0
    def OnRightClick(self, evt):
        """
        Обрабатываем сообщение <EVT_RIGHT_DOWN>.
        """
        if not self._bEditMode:
            return

        menuObj = wx.Menu()
        menuGroup = wx.Menu()
        itm = self.GetSelection()
        #   Если словарь является метокомпонентом, то создаем меню со списком
        #   компонентов, которые можно добавлять в текущий объект
        if self.treeDict and not isinstance(self.treeDict, dict):

            level, obj = self.GetPyData(itm)
            lst = obj.getMyContainerMetaItems()

            for cob in lst:
                id = cob.GetUniqId()

                if not cob.resource['description']:
                    label = cob.resource['name']
                else:
                    label = cob.resource['description']

                item = wx.MenuItem(menuGroup, id, label)

                if cob.getPic():
                    item.SetBitmap(cob.getPic())

                menuGroup.AppendItem(item)
                self.Bind(wx.EVT_MENU, self.OnAddItem, id=id)

        id = icwidget.icNewId()
        menuObj.AppendMenu(id, u'Добавить объект', menuGroup)

        if self.treeDict and not isinstance(self.treeDict,
                                            dict) and itm != self.root:
            level, obj = self.GetPyData(itm)
            id = icwidget.icNewId()
            item = wx.MenuItem(menuObj, id, u'Удалить объект')
            item.SetBitmap(common.imgDeleteRed)
            menuObj.AppendItem(item)
            self.Bind(wx.EVT_MENU, self.OnDelItem, id=id)

            id = icwidget.icNewId()
            item = wx.MenuItem(menuObj, id, u'Клонировать объект')
            item.SetBitmap(common.imgClone)
            menuObj.AppendItem(item)
            self.Bind(wx.EVT_MENU, self.OnCloneItem, id=id)

            id = icwidget.icNewId()
            item = wx.MenuItem(menuObj, id, u'Копировать содержимое объекта')
            item.SetBitmap(common.imgEdtMnuCopy)
            menuObj.AppendItem(item)
            self.Bind(wx.EVT_MENU, self.OnCopy, id=id)

            if self.bObjBuff and obj.canPastChildren():
                id = icwidget.icNewId()
                item = wx.MenuItem(menuObj, id, u'Вставить из буфера в объект')
                item.SetBitmap(common.imgEdtMnuPaste)
                menuObj.AppendItem(item)
                self.Bind(wx.EVT_MENU, self.OnPaste, id=id)

        self.PopupMenu(menuObj, evt.GetPoint())