Пример #1
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    from ic.dlg import msgbox
    parent = propEdt.GetPropertyGrid().GetView()
    if attr in ('sourcePsp', ):
        ret = str_to_val_user_property(attr, value, propEdt)
        if ret:
            if not ret[0][0] in icsqlalchemy.DB_TYPES:
                msgbox.MsgBox(parent, _('Object is not DB source (*.src).'))
                return coderror.IC_CTRL_FAILED_IGNORE
            return ret
    elif attr in ('catalog_types', ):
        tps = str_to_val_user_property(attr, value, propEdt)
        if tps is None:
            return tps

        if type(tps) in (type([]), type((0, ))):
            lst = iccatalog.catalog_type_dct.keys()
            for el in tps:
                if not el in lst:
                    msgbox.MsgBox(
                        parent,
                        _('Type <%s> is not registered catalog item.' % el))
                    return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        else:
            return coderror.IC_CTRL_FAILED

        return coderror.IC_CTRL_OK
Пример #2
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('model','view','controller'):
        res = propEdt.GetResource()
        parent = propEdt.GetPropertyGrid().GetView()
        prnt_res = propEdt.GetPrntResource()
        lst = icmvcelement.findClassLst(propEdt.GetPrntResource(), parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo())
        rlst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo())
            
        if attr == 'view' and value in lst:
            #lst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo())
            v_res = None
            # находим ресурс представления
            for r in rlst:
                if value == r['name']:
                    v_res = r
                    break
            # находим ресурс контроллера и проверяем
            for r in rlst:
                if r['name'] == res['controller']:
                    if r['socket_in'] == v_res['socket_out']:
                        return coderror.IC_CTRL_OK
                    else:
                        msgbox.MsgBox(parent, """Выходной интерфейс <%s>
представления <%s>
не совпадает с входным интерфесом <%s>
контроллера <%s>""" % (v_res['socket_out'], v_res['name'], r['socket_in'], r['name']))
                        return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif attr == 'controller' and value in lst:
            #lst = icmvcelement.findClassResLst(prnt_res, parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo())
            #print '... controller'
            ctrl_res = None
            # находим ресурс контроллера
            for r in rlst:
                if value == r['name']:
                    ctrl_res = r
                    break
                    
            for r in rlst:
                if r['name'] == res['view']:
                    if r['socket_out'] == ctrl_res['socket_in']:
                        return coderror.IC_CTRL_OK
                    else:
                        msgbox.MsgBox(parent, """Входной интерфейс <%s>
контроллера <%s>
не совпадает с выходным интерфесом <%s>
представления <%s>""" % (ctrl_res['socket_in'], ctrl_res['name'], r['socket_out'], r['name']))
                        return coderror.IC_CTRL_FAILED_IGNORE
            return coderror.IC_CTRL_OK
        elif value in lst:
            return coderror.IC_CTRL_OK
Пример #3
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr in ('model', 'view', 'controller'):
        pres = propEdt.GetPrntResource()
        lst = icmvcelement.findClassLst(pres, parentModule.ic_mvc_element,
                                        propEdt.GetResTree().GetObjectsInfo())
        lstp = icmvcelement.findClassResLst(
            pres, parentModule.ic_mvc_pattern,
            propEdt.GetResTree().GetObjectsInfo())

        if value in lst:
            name = propEdt.GetResource()['name']
            for pt in lstp:
                if name <> pt['name'] and value in (pt['model'], pt['view'],
                                                    pt['controller']):
                    parent = propEdt.GetPropertyGrid().GetView()
                    msgbox.MsgBox(
                        parent,
                        u'Элемент <%s> уже зарегистрирован в другом паттерне <%s>.'
                        % (value, pt['name']))
                    return coderror.IC_CTRL_FAILED_IGNORE

            return icmvcpattern.property_editor_ctrl(attr, value, propEdt)
Пример #4
0
    def init_panel(self):
        """
        Инициализация панели.
        """
        if self._form:
            #   Получаем указатель на ядро
            name, subsys = self._form
            win = self.create_obj(name, subsys)
            if win:
                self.SetPanel(win)

            # Вызываем у объекта функцию чтения данных на форму
            if self._obj:
                if hasattr(self._obj.metaitem.value, 'doc_uuid') and self._obj.metaitem.value.doc_uuid:
                    io_prnt.outLog(u'>>> Загружаем документ UUID=%s' % self._obj.metaitem.value.doc_uuid)
                    self._obj.load(self._obj.metaitem.value.doc_uuid)
                    self._obj.startEdit()

                    if not self._obj.isMyLock():
                        msgbox.MsgBox(win, u'Документ заблокирова пользователем %s' % self._obj.ownerLock())
                        
                ifs = win.GetComponentInterface()
                if ifs:
                    ifs.set_object(self._obj)
                    ifs.LoadData()
Пример #5
0
def RunWizard(parent):
    """
    Create the wizard and the pages.
    """
    wizard = wiz.Wizard(parent, -1, _('Create Component Wizard'),
                        common.imgUserCompWizard)
    page1 = FirstPage(wizard, _('Base parameters'))
    page2 = AttrPage(wizard, _('Class attributes'))
    page3 = MsgPage(wizard, _('Event attributes'))
    page4 = EditModulPage(wizard, _('Edit module'))
    parent.page1 = page1
    wizard.FitToPage(page1)

    page1.SetNext(page2)
    page2.SetPrev(page1)
    page2.SetNext(page3)
    page3.SetPrev(page2)
    page3.SetNext(page4)
    page4.SetPrev(page3)

    if wizard.RunWizard(page1):
        #   Сохраняем модуль в библиотеке пользовательских компонентов
        txt = page4.editor.GetText()

        if resource.icGetResPath():
            user_mod_dir = resource.icGetResPath() + '/usercomponents'
        else:
            user_mod_dir = None

        if not user_mod_dir:
            module_name = resource.icGetICPath(
            ) + '/components/user/' + page4.modulName.GetLabel()
        elif not os.path.isdir(user_mod_dir):
            # Создаем пакет
            ic_res.CreatePackage(user_mod_dir)
            module_name = user_mod_dir + '/' + page4.modulName.GetLabel()
        else:
            module_name = user_mod_dir + '/' + page4.modulName.GetLabel()

        bCr = wx.ID_YES

        if os.path.isfile(module_name):
            bCr = msg.MsgBox(None,
                             _('Module %s already exist. Rewrite?') %
                             module_name,
                             style=wx.YES_NO | wx.NO_DEFAULT)

        if bCr == wx.ID_YES:
            f = open(module_name, 'w')
            io_prnt.outLog(u'CREATE MODULE: <%s>' % module_name)
            f.write(txt.encode('utf-8'))
            f.close()
            wx.MessageBox(_('Module %s is created.') % module_name, '')
    else:
        wx.MessageBox(_('Wizard was cancelled'), u'')
Пример #6
0
    def OnOK(self, evt):
        """
        """
        dlg = self.getObject()

        if dlg:
            typeObj = self.evalSpace['_dict_obj'][
                'typeChoice'].GetStringSelection()
            if not typeObj:
                msgbox.MsgBox(self.getObject(), u'-')

            name = self.evalSpace['_dict_obj']['nameText'].GetValue()
            if typeObj and not name:
                msgbox.MsgBox(self.getObject(), u'-')

            attr = self.evalSpace['_dict_obj'][
                'attrChoice'].GetStringSelection()
            if typeObj and name and not attr:
                msgbox.MsgBox(self.getObject(), u'-')

            if typeObj and name and attr:
                dlg.EndModal(wx.ID_OK)
        evt.Skip()
Пример #7
0
def get_user_property_editor(attr, value, pos, size, style, propEdt, *arg, **kwarg):
    """
    Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY).
    """
    if attr in ('model','view','controller'):
        parent = propEdt.GetPropertyGrid().GetView()
        #lst = icmvcelement.findObjLst(propEdt.GetPrntResource(), 'MVCElement')
        lst = icmvcelement.findClassLst(propEdt.GetPrntResource(), parentModule.ic_mvc_element, propEdt.GetResTree().GetObjectsInfo())
        if lst:
            dlg = baseeditor.ChoiceMenu(parent, lst)
            parent.PopupMenu(dlg, pos)
        
            #   Возвращаем выбранный элемент списка
            if lst and dlg.IsSelString():
                value = dlg.GetSelString()
            
            dlg.Destroy()
            return value
        else:
            msgbox.MsgBox(parent, u'Базисные элементы паттернов не определены')
Пример #8
0
def get_user_property_editor(attr, value, pos, size, style, propEdt, *arg, **kwarg):
    """
    Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY).
    """
    if attr in ('object', 'socket_in', 'socket_out'):
        return pspEdt.get_user_property_editor(value, pos, size, style, propEdt)
    elif attr == 'current_pattern':
        parent = propEdt.GetPropertyGrid().GetView()
        lst = findObjLst(propEdt.GetResource(), 'MVCPattern')
        
        if lst:
            dlg = baseeditor.ChoiceMenu(parent, lst)
            parent.PopupMenu(dlg, pos)
        
            #   Возвращаем выбранный элемент списка
            if lst and dlg.IsSelString():
                value = dlg.GetSelString()
            
            dlg.Destroy()
            return value
        else:
            msgbox.MsgBox(parent, u'Паттерны элемента не определены')
Пример #9
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
Пример #10
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