Ejemplo n.º 1
0
    def addRequisiteData(self, RequisiteData_=None):
        """
        Создать новую запись со всеми реквизиты объекта в хранилище. 
        Данные реквизитов в виде словаря.
        @param RequisiteData_: Словарь значений реквизитов.
            Словарь реквизитов представлен в виде 
                {
                'имя реквизита':значение реквизита,
                ...
                'имя спецификации документа':[список словарей реквизитов],
                ...
                }
            Если словарь значений не определен, тогда значения 
            реквизитов заполняются значениями по умолчанию.
        @return: Возвращает True-сохранение прошло удачно, False-не удачно,None-ошибка.
        """
        try:
            if RequisiteData_ is None:
                RequisiteData_ = {}
            self._setRequisiteData(RequisiteData_)

            if 'uuid' in RequisiteData_:
                obj_uuid = RequisiteData_['uuid']
            else:
                obj_uuid = ic_uuid.get_uuid()
            result = self.add(obj_uuid, RequisiteData_)
            return obj_uuid
        except:
            ic.io_prnt.outErr(
                u'ОШИБКА сохранения словаря данных объекта <%s>' % self.name)
            return None
Ejemplo n.º 2
0
    def init_data(self):
        """
        Инициализация объекта.
        """
        # Генерация идентификатора документа
        self.uuid = ic_uuid.get_uuid()
        # Проинициализировать все дочерние объекты
        self.init_children_data()

        self.save()
Ejemplo n.º 3
0
 def _genLineName(self, Line_):
     """
     Генерация имени линии по ее данным.
     @param Line_: Данные, описывающие линию.
     """
     if 'name' in Line_:
         return Line_['name']
     elif ('name' not in Line_) and \
          ('from' in Line_ and 'to' in Line_):
         return Line_['from'] + '->' + Line_['to']
     from ic.utils import ic_uuid
     return ic_uuid.get_uuid()
Ejemplo n.º 4
0
 def init_signal(self):
     """
     Функция инициации сигнала.
     """
     #   Генерируем uuid
     self.uuid = ic_uuid.get_uuid()
     #   Значение
     self.value = None
     #   Признак дальнейшей обработки сигнала.
     self._bSkip = True
     #   Тип сигнала
     self.type = self.__class__.__name__
Ejemplo n.º 5
0
def PyScriptEdtDlg(parent, attr, text, pos, size, uuid_attr, bEnable=True):
    """
    Диалоговое окно для редактирования скриптов.

    @type parent: C{wx.Window}
    @param parent: Указатель на родительское окно.
    @type attr: C{string}
    @param attr: Имя атрибута.
    @type text: C{string}
    @param text: Текст скрипта.
    @type pos: C{wx.Point}
    @param pos: Позиция.
    @type size: C{wx.Size}
    @param size: Размер редактора.
    @rtype: C{tuplpe}
    @return: Первый элемент признак редактирования, второй текст, третий новый uuid.
    """
    # Определяем смещение видимой части окна
    old = text
    x, y = pos
    pos = parent.ClientToScreenXY(x, y)
    dlg = ic_pyed.icPyEditorDlg(parent, text, pos, size)

    if not bEnable:
        self.dlg.editor.SetReadOnlyMode()

    ret = dlg.ShowModal()
    prz = False

    if ret == wx.ID_OK:

        # Генерируем новый UUID
        old_uuid = uuid_attr

        if bEnable:
            text = dlg.editor.GetText()

            # Если текст изменился генерируем новый uuid
            if old != text:
                prz = True
                uuid_attr = ic_uuid.get_uuid()

        # запомнинаем точки останова
        dlg.editor.GetBreakpoints()
        SysProc.SetPointList(old_uuid, uuid_attr, attr,
                             dlg.editor._Breakpoints, dlg.editor.GetText(),
                             (dlg.editor.GetLineCount(),
                              dlg.editor.GetIndent(), dlg.editor.GetEOLMode()))
    if dlg:
        dlg.Destroy()

    return prz, text, uuid_attr
Ejemplo n.º 6
0
 def InitResource(res, *arg, **kwarg):
     if len(res['cols']) == 0:
         from ic.components import icgrid, icfont
         component = {}
         component['type'] = 'GridCell'
         spc = icgrid.SPC_IC_CELL
         util.icSpcDefStruct(icgrid.SPC_IC_CELL, component, True)
         util.icSpcDefStruct(icgrid.SPC_IC_CELLATTR, component['cell_attr'], True)
         util.icSpcDefStruct(icfont.SPC_IC_FONT, component['cell_attr']['font'], True)
         component['_uuid'] = ic_uuid.get_uuid()
         res['cols'].append(component)
         wx.MessageBox(_('Editor add default column to GridDataset'))
         
     return res
Ejemplo n.º 7
0
    def __init__(self,
                 component={},
                 logType=0,
                 evalSpace=None,
                 bDefSearch=True,
                 fltDict=None):
        """
        Конструктор для создания ссылки.

        @type component: C{dictionary}
        @param component: Словарь описания компонента.
        @type logType: C{int}
        @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога).
        @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений.
        @type evalSpace: C{dictionary}
        @type bDefSearch: C{bool}
        @param bDefSearch: Используется если в пространстве имен нужный объект не обнаружен. Признак определяет искать ли нужное
            ресурсное описание в ресурсных файлах по умолчанию (./res/resource.tab).
        @type fltDict: C{dictionary}
        @param fltDict: Словарь заменяемых фильтров у источников данных.
        """
        icwidget.icSimple.__init__(self,
                                   parent=None,
                                   component=component,
                                   logType=logType,
                                   evalSpace=evalSpace)
        # self.evalSpace = evalSpace
        # self.logType = logType
        self.obj = None

        if fltDict:
            self.fltDict = fltDict
        else:
            self.fltDict = {}

        icSpcDefStruct(SPC_IC_DATALINK, component)

        self._component = component
        self.name = component['name']
        self.source = util.getSpcAttr(component, 'file', evalSpace).strip()
        self._uuid = component['_uuid']

        if not self._uuid:
            self._uuid = ic_uuid.get_uuid()

        self.resource = self.GetResource(component)
Ejemplo n.º 8
0
    def __init__(self, passport, func, *arg, **kwarg):
        """
        Конструктор сигнала.
        
        @type passport: C{icObjectPassport}
        @param passport: Объект идентификации (паспорт) объекта приемника сигнала.
        """
        self.uuid = ic_uuid.get_uuid()
        self.passport = passport
        #   Указатель на объект, к которому прикреплен слот
        self._object = None
        #   Функция возбуждения
        self._func = func
        #   Признак активации слота
        self._bAcivated = True

        #
        self.init_slot()
Ejemplo n.º 9
0
    def _init_ctrls(self, prnt):
        """
        Создаем необходимые компоненты
        """
        icEvent.__init__(self)
        # UUID ресурса
        self._uuidRes = None
        self._uuid = ic_uuid.get_uuid()

        # Список свойств
        self.NameValues = []

        # Список удаленных свойств
        self._delPropertyLst = []

        self.oldLen = 0
        self.parent = prnt
        id_sash = icwidget.icNewId()
        self.splitter = wx.SplitterWindow(self,
                                          id_sash,
                                          wx.Point(0, 0),
                                          prnt.GetSize(),
                                          style=wx.SP_LIVE_UPDATE | wx.NO_3D
                                          | wx.SP_3D | wx.SP_NOBORDER)
        self.splitter.SetSashSize(4)

        #   Создаем панели
        self.panel1 = wx.Panel(self.splitter,
                               icwidget.icNewId(),
                               style=wx.WANTS_CHARS)
        self.panel1.Bind(wx.EVT_SIZE, self.OnNameSize)
        self.panel1.box = None
        self.panel1._uuid = self._uuid + ':p1'

        self.panel2 = wx.Panel(self.splitter,
                               icwidget.icNewId(),
                               style=wx.WANTS_CHARS)
        self.panel2.box = None
        self.panel2._uuid = self._uuid + ':p2'
        self.splitter.SplitVertically(self.panel1, self.panel2)
        self.splitter.SetMinimumPaneSize(20)
        self.splitter.SetSashPosition(100)

        self.Bind(wx.EVT_SIZE, self.OnSize)
Ejemplo n.º 10
0
 def setPropertyValue(self, name, value, bConvert=True):
     """
     Установить значение свойства в ресурсе.
     @param name: Имя свойства/аттрибута.
     @param value: Значение свойства/аттрибута.
     @param bConvert: Произвести конвертацию строкового значения?
     """
     # ВНИМАНИЕ! Значение может задаваться в виде строки.
     # Если задается в виде строки, то возможно необходимо
     # сделать преобразование типа
     if bConvert and type(value) in (str, unicode):
         str_value = value
         value = self.convertPropertyValue(name, str_value, self._spc)
         log.info(u'Set string property [%s] value <%s - \'%s\'>' %
                  (name, value, str_value))
     self._resource[name] = value
     # Синхронизировать ресурс с редактором ресурса
     resource.RefreshResUUID(self._resource, self.getParentResource(),
                             ic_uuid.get_uuid())
Ejemplo n.º 11
0
 def GenNewUUIDObj(self):
     """
     Генерирует новый идентификатор ресурса.
     """
     self._uuidRes = ic_uuid.get_uuid()
     return self._uuidRes
Ejemplo n.º 12
0
    def HlpDlg(parent,
               attr,
               value,
               pos=wx.DefaultPosition,
               size=wx.DefaultSize,
               style=0,
               *arg,
               **par):
        """
        Диалоговое окно для редактирования словаря в текстовом редакторе.
        @type parent: C{wx.Window}
        @param parent: Указатель на родительское окно (грид).
        @type attr: C{string}
        @param attr: Имя текущего атрибута.
        @type value: C{string}
        @param value: Текущее значение.
        @type pos: C{wx.Point}
        @param pos: Расположение диалога на гриде.
        @type size: C{wx.Size}
        @param size: Размер диалогового окна.
        @type style: C{int}
        @param style: Стиль диалогового окна.
        @type par: C{dictionary}
        @param par: Словарь дополнительных именованных параметров. <attr> - имя атрибута,
            <uuid_attr> - старый UUID атрибута, <bEnable=True> - признак режима редактирования.
        @rtype: C{tuplpe}
        @return: Первый элемент признак редактирования, второй текст, третий новый uuid.
        """
        from ic.PropertyEditor import ic_pyed
        text = value
        uuid_attr = par['uuid_attr']

        if 'bEnable' in par:
            bEnable = par['bEnable']
        else:
            bEnable = True

        try:
            # Определяем смещение видимой части окна
            old = text
            x, y = pos
            sx, sy = size
            if sx < 450:
                size = (450, sy)

            pos = parent.ClientToScreenXY(x, y)
            dlg = ic_pyed.icPyEditorDlg(parent, text, pos, size, style=style)
            if not bEnable:
                dlg.editor.SetReadOnlyMode()

            ret = dlg.ShowModal()
            prz = False
            if ret == wx.ID_OK:
                # Генерируем новый UUID
                old_uuid = uuid_attr
                if bEnable:
                    text = dlg.editor.GetText()
                    # Если текст изменился генерируем новый uuid
                    if old != text:
                        prz = True
                        uuid_attr = ic_uuid.get_uuid()
            if dlg:
                dlg.Destroy()
        except:
            io_prnt.outLastErr(u'icTextDictEdt HlpDlg ERROR')

        return prz, text, uuid_attr
Ejemplo n.º 13
0
    def __init__(self, name=None, id=-1, context=None, bCreate=False,
                 cmpInterface=None, typ=None, *arg, **kwarg):
        """
        Конструктор.
        @type name: C{string}
        @param name: Имя объекта.
        @type id: C{int}
        @param id: Идентификатор объекта.
        @type context: C{icContext}
        @param context: Окружение (контекст) объекта.
        @type bCreate: C{bool}
        @param bCreate: Признак создания нового окружения объекта. Если = True, то
            создается новое окружение и из старого заимствуются объекты родительского
            контекста.
        @type cmpInterface: C{icObject}
        @param cmpInterface: Имя интерфеса, которому принадлежит объект (в случае
            комбинированных компонентов).
        """
        #
        self.permissions = list()
        #   Тип объекта
        if typ:
            self.type = typ
        else:
            self.type = self.__class__.__name__
        #   Имя объекта
        self.name = name
        # 
        self.__wrapper = None
        #   Идентификатор объекта системы в рабочем состоянии. При каждом создании
        #   он может быть разным.
        self._uniqId = id
        #   Уникальный идентификатор объекта описания (ресурса, если он есть)
        self._uuid = None
        #   Уникальный универсальный идентификатор объекта
        self._uuidObject = ic_uuid.get_uuid()
        #   Описание прав доступа к данному объект
        self._acl = None
        #   Атрибуты, за которыми ведется наблюдение
        self.__spy_attr = []
        #   Функции, за которыми ведется наблюдение
        self.__spy_function = []
        self.spy_function_dct = {}
        #   Паспорт объекта
        if context and not isinstance(context, dict):
            rfn = context.resFileName
            subsys = context.subsys
        else:
            rfn = None
            subsys = None
        
        #   Определяем паспорт объекта
        self.__interface = cmpInterface
        self.__passport = icObjectPassport((self.type, self.name, cmpInterface, rfn, subsys), id, self._uuidObject)
        #   Список соединений, в котором объект выступает в качестве источника
        self.srcCntLst = []
        #   Список соединений, в котором объект выступает в качестве приемника
        self.slotCntLst = []
        #   Список преобразователей событий в сигналы базовой сигнальной ситемы
        self.convLst = []
        #   Создаем контекст
        if context is None:
            self.context = icContext.Context()
        #   Заимствуем пространство имен (кроме служебных)
        elif bCreate:
            self.context = icContext.Context()
            self.context.update_context(context)
            self.context.SetParentContext(context)
        #   Полностью заимствуем контекст
        else:
            self.context = context

        self.init_object()

        # Регестрируем соединения с данным объектом
        self._reg_connection()