Example #1
0
 def setMiddleTxtFont(self,Font_):
     """
     Шрифт текста в центре поля.
     """
     if Font_:
         font=icfont.icFont(Font_)
         self.SetMiddleTextFont(font)
Example #2
0
def FontEdtDlg(parent, value):
    """
    Диалоговое окно для определения шрифта.

    @type parent: C{wx.Window}
    @param parent: Указатель на родительское окно.
    @type value: C{string}
    @param value: Текущее значение шрифта в виде словаря.
    """
    data = wx.FontData()
    data.EnableEffects(True)

    if value:
        fnt = eval(value)
    else:
        fnt = {}

    curFont = icfont.icFont(fnt)
    data.SetInitialFont(curFont)

    dlg = wx.FontDialog(parent, data)

    if dlg.ShowModal() == wx.ID_OK:
        data = dlg.GetFontData()
        font = data.GetChosenFont()

        fnt = {}
        fnt['size'] = font.GetPointSize()
        fnt['family'] = icfont.getICFamily(font)
        fnt['style'] = icfont.getICFontStyle(font)
        fnt['faceName'] = font.GetFaceName()
        fnt['underline'] = font.GetUnderlined()

    dlg.Destroy()
    return str(fnt)
Example #3
0
 def setTicksFont(self,Font_):
     """
     Шрифт текста мажорной шкалы.
     """
     if Font_:
         font=icfont.icFont(Font_)
         self.SetTicksFont(font)
Example #4
0
    def __init__(self,
                 parent,
                 id=-1,
                 component=None,
                 logType=0,
                 evalSpace=None,
                 bCounter=False,
                 progressDlg=None):
        """ Interface constructor."""
        # Append for specification
        component = util.icSpcDefStruct(ic_class_spc, component)
        parentClass.__init__(self, parent, id, component, logType, evalSpace,
                             bCounter, progressDlg)
        header = ({'label': u'Код'}, {'label': u'Наименование'})
        table = HugeTable(header=header)
        self.SetTable(table, True)

        #   По спецификации создаем соответствующие атрибуты (кроме служебных атрибутов)
        for key in [x for x in component.keys() if not x.startswith('__')]:
            setattr(self, key, component[key])

        self.SetCornerLabelRenderer(xpr.XPCornerLabelRenderer())
        self._colAttrs = []
        for col in xrange(self.GetNumberCols()):
            self.SetColLabelRenderer(col, xpr.XPColLabelRenderer())
            attr = xpr.XPColAttr()
            self.SetColAttr(col, attr)
            self._colAttrs.append(attr)
            if col < len(self.wcols):
                self.SetColSize(col, self.wcols[col])

#        self._row_render = rowr = xpr.XPRowLabelRenderer()
#        for row in xrange(self.GetNumberRows()):
#            self.SetRowLabelRenderer(row, rowr)
        self.SetRowLabelSize(0)

        self._cell_height = 18
        self.SetColLabelSize(self._cell_height)
        font = icfont.icFont({})
        self.SetLabelFont(font)
        self.SetDefaultCellBackgroundColour(xpr.DEFAULT_EMPTY_BGR_CLR)
        self.SetLabelTextColour(xpr.TEXT_LAB_CLR)
        self.SetGridLineColour(xpr.GRID_LINE_CLR)
        self.SetLabelBackgroundColour(xpr.BOT_LAB_CLR)
        self.SetRowMinimalAcceptableHeight(0)
        #self.SetDefaultRenderer(xpr.DefaultCellRenderer())
        self.state = 0
        self.state_dct = {}
        # Список имен кода
        self.cod_name_lst = []
        self.cur_cod = None
        self.sprav = None
Example #5
0
    def HlpDlg(parent,
               attr,
               value,
               pos=wx.DefaultPosition,
               size=wx.DefaultSize,
               style=0,
               *arg,
               **kwarg):
        """
        Диалоговое окно для определения шрифта.
        @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: Стиль диалога.
        """
        from ic.components import icfont
        data = wx.FontData()
        data.EnableEffects(True)
        if value:
            fnt = eval(value)
        else:
            fnt = {}

        curFont = icfont.icFont(fnt)
        data.SetInitialFont(curFont)
        dlg = wx.FontDialog(parent, data)
        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetFontData()
            font = data.GetChosenFont()
            fnt = dict()
            fnt['size'] = font.GetPointSize()
            fnt['family'] = icfont.getICFamily(font)
            fnt['style'] = icfont.getICFontStyle(font)
            fnt['faceName'] = font.GetFaceName()
            fnt['underline'] = font.GetUnderlined()

        dlg.Destroy()
        return unicode(fnt)
Example #6
0
    def __init__(self, parent, id, component, logType=0, evalSpace={},
                 bCounter=False, progressDlg=None):
        """
        Конструктор.

        @type parent: C{wx.Window}
        @param parent: Указатель на родительское окно
        @type id: C{int}
        @param id: Идентификатор окна
        @type component: C{dictionary}
        @param component: Словарь описания компонента
        @type logType: C{int}
        @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога)
        @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений
        @type evalSpace: C{dictionary}
        """
        component = util.icSpcDefStruct(self.component_spc, component, True)
        icwidget.icWidget.__init__(self, parent, id, component, logType, evalSpace)

        pos = component['position']
        size = component['size']
        fgr = component['foregroundColor']
        bgr = component['backgroundColor']
        font = component['font']
        style = component['style']

        label = self.getDefaultLabel()
        wx.StaticText.__init__(self, parent, id, label, pos, size=size,
                               style=style, name=self.name)

        if fgr is not None:
            self.SetForegroundColour(wx.Colour(*fgr))

        if bgr is not None:
            self.SetBackgroundColour(wx.Colour(*bgr))

        font_obj = icfont.icFont(font)
        self.SetFont(font_obj)

        # Текущее внутреннее значение
        self._value = None
Example #7
0
    def __init__(self,
                 parent,
                 id=-1,
                 component=None,
                 logType=0,
                 evalSpace=None,
                 bCounter=False,
                 progressDlg=None):
        """ 
        Interface constructor.
        """
        # Append for specification
        component = util.icSpcDefStruct(ic_class_spc, component)
        parentClass.__init__(self, parent, id, component, logType, evalSpace,
                             bCounter, progressDlg)
        header = ({'label': u'Код'}, {'label': u'Наименование'})
        table = icHugeTable(header=header)
        self.SetTable(table, True)

        #   По спецификации создаем соответствующие атрибуты (кроме служебных атрибутов)
        for key in [x for x in component.keys() if not x.startswith('__')]:
            setattr(self, key, component[key])

        for col in xrange(self.GetNumberCols()):
            if col < len(self.wcols):
                self.SetColSize(col, self.wcols[col])

        self.SetRowLabelSize(0)

        self._cell_height = 18
        self.SetColLabelSize(self._cell_height)
        font = icfont.icFont({})
        self.SetLabelFont(font)
        self.SetRowMinimalAcceptableHeight(0)

        self.state = 0
        self.state_dct = {}
        # Список имен кода
        self.cod_name_lst = []
        self.cur_cod = None
        self.sprav = None
Example #8
0
    def __init__(self,
                 parent,
                 id=-1,
                 component=None,
                 logType=0,
                 evalSpace=None,
                 bCounter=False,
                 progressDlg=None):
        """ Interface constructor."""
        # Append for specification
        component = util.icSpcDefStruct(ic_class_spc, component)
        parentClass.__init__(self, parent, id, component, logType, evalSpace,
                             bCounter, progressDlg)
        #   По спецификации создаем соответствующие атрибуты (кроме служебных атрибутов)
        for key in [x for x in component.keys() if not x.startswith('__')]:
            setattr(self, key, component[key])

        self.SetCornerLabelRenderer(xpr.XPCornerLabelRenderer())
        self._colAttrs = []
        for col in xrange(self.GetNumberCols()):
            rndr = xpr.XPColLabelRenderer()
            if not self.cols[col]['sort'] in (None, 0, '0', 'False', 'None'):
                rndr.SetSortFlag()


#            self._colRendr.append(rndr)
            self.SetColLabelRenderer(col, rndr)
            attr = xpr.XPColAttr()
            self.SetColAttr(col, attr)
            self._colAttrs.append(attr)

        self._cell_height = 18
        self.SetColLabelSize(self._cell_height)
        font = icfont.icFont({})
        self.SetLabelFont(font)
        self.SetDefaultCellBackgroundColour(xpr.DEFAULT_EMPTY_BGR_CLR)
        self.SetLabelTextColour(xpr.TEXT_LAB_CLR)
        self.SetGridLineColour(xpr.GRID_LINE_CLR)
        self.SetLabelBackgroundColour(xpr.BOT_LAB_CLR)
Example #9
0
    def __init__(self,
                 parent,
                 id,
                 component,
                 logType=0,
                 evalSpace=None,
                 bCounter=False,
                 progressDlg=None):
        """
        Конструктор базового класса пользовательских компонентов.
        @type parent: C{wx.Window}
        @param parent: Указатель на родительское окно.
        @type id: C{int}
        @param id: Идентификатор окна.
        @type component: C{dictionary}
        @param component: Словарь описания компонента.
        @type logType: C{int}
        @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога).
        @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений.
        @type evalSpace: C{dictionary}
        @type bCounter: C{bool}
        @param bCounter: Признак отображения в ProgressBar-е. Иногда это не нужно -
            для создания объектов полученных по ссылки. Т. к. они не учтены при подсчете
            общего количества объектов.
        @type progressDlg: C{wx.ProgressDialog}
        @param progressDlg: Указатель на идикатор создания формы.
        """
        component = util.icSpcDefStruct(self.component_spc, component)
        icwidget.icWidget.__init__(self, parent, id, component, logType,
                                   evalSpace)

        #   По спецификации создаем соответствующие атрибуты (кроме служебных атрибутов)
        lst_keys = [x for x in component.keys() if x.find('__') != 0]
        for key in lst_keys:
            setattr(self, key, component[key])

        #   Локализуем подписи закладок
        if self.isLocaleTitles:
            self.titles = [_(el) for el in self.titles]
        #   Цвета текста и фона
        self.bgr = bgr = component['backgroundColor'] or (100, 100, 100)
        self.fgr = fgr = component['foregroundColor']

        # -----------------------------------------------------------
        style = wx.ST_NO_AUTORESIZE | wx.NO_BORDER
        parentModule.PyControl.__init__(self,
                                        parent,
                                        id,
                                        self.position,
                                        self.size,
                                        style,
                                        name=self.name)
        # -----------------------------------------------------------
        self.SetAutoLayout(True)

        #   Устанавливаем шрифт
        if not self.font:
            font = parent.GetFont()
            if not font.Ok():
                font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
            self.passiveFont = font
        else:
            self.passiveFont = icfont.icFont(self.font)

        parentModule.PyControl.SetFont(self, self.passiveFont)
        #   Устанавливаем цвета
        if bgr:
            self.SetBackgroundColour(bgr)
        if fgr:
            self.SetForegroundColour(fgr)

        #   Размер
        rw, rh = self.size
        self.SetSize(wx.Size(rw, IC_NB_HEIGHT + 3))

        # ----------------------------------------------
        #   Регистрация обработчиков событий
        self.Bind(wx.EVT_LEFT_UP, self.OnSelectTitle)
        self.Bind(wx.EVT_LEFT_DOWN, self.OnPreSelect)
        self.Bind(wx.EVT_MOTION, self.OnMove)
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
        self.BindICEvt()
        # ----------------------------------------------
        self.clientPanel = self

        #   Признаки, определяющие можно нажать кнопки Next, Prev
        self._canNext = False
        self._canPrev = False
        #   Список закладок
        self._tilesObjList = []
        #   Индекс первой видимой закладки
        self._firstVisible = 0
        #   Индекс последней видимой закладки
        self._lastVisible = -1
        #   Индекс активной закладки
        self._selected = 0
        #   Список присоединеных объектов
        self._connectedObjList = []
        #   Указатель на окно подсказки
        self._helpWin = None
        self._lastHelp = -1

        self.path = self.getICAttr('path')
        if not self.path:
            self.path = os.getcwd()

        self.path = self.path.replace('\\', '/')
        if self.path[-1] != '/':
            self.path += '/'

        #   Наполняем панель закладками
        for indx, title in enumerate(self.titles):
            img = None
            if indx < len(self.images):
                filename = self.path + self.images[indx]
                bmptype = icbitmap.icBitmapType(filename)
                if bmptype is not None and os.path.isfile(filename):
                    img = wx.Image(filename, bmptype).ConvertToBitmap()

            self.AddTitle(title, img=img)

        #   Создаем дочерние компоненты
        if 'child' in component:
            self.childCreator(bCounter, progressDlg)
            #   Привязвыаем объекты к панели закладок
            for indx, spc in enumerate(self.child):
                try:
                    #   Если описанием подключаемого объекта является группа,
                    #   то к закладке подключаются объекты из группы
                    if spc['type'] == 'Group':
                        for spc_grp in spc['child']:
                            obj = self.evalSpace['_dict_obj'][spc_grp['name']]
                            if obj not in self.GetConnectedObjLst():
                                self.ConnectObjToTitle(indx, obj)
                    else:
                        obj = self.evalSpace['_dict_obj'][spc['name']]
                        if obj not in self.GetConnectedObjLst():
                            self.ConnectObjToTitle(indx, obj)
                except:
                    io_prnt.outLastErr('')
        self.SelectTitle()
Example #10
0
    def __init__(self,
                 Parent_,
                 Frames_,
                 Msg_,
                 min=0,
                 max=100,
                 Msg2_=None,
                 min2=None,
                 max2=None,
                 style=0,
                 bAutoIncr=False):
        """
        Конструктор.
        
        @type Parent_: C{wx.Window}
        @param Parent_: Указатель на родительское окно.
        @type Msg_: C{string}
        @param Msg_: Сообщение верхнего индикатора.
        @type min: C{int}
        @param min: Минимальное значение верхнего индикатора.
        @type max: C{int}
        @param max: Максимальное значение верхнего индикатора.
        @type Msg2_: C{string}
        @param Msg2_: Сообщение нижнего индикатора.
        @type min2: C{int}
        @param min2: Минимальное значение нижнего индикатора.
        @type max2: C{int}
        @param max2: Максимальное значение нижнего индикатора.
        @type style: C{int}
        @param style: Стиль окна процесса.
        @type bAutoIncr: C{bool}
        @param bAutoIncr: Признак автоматического изменения состояния индикаторов.
            Используется в тех случаях, когда размерность процесса не определена,
            а показывать чего то надо.
        """
        if Msg2_ is not None:
            sy = 70
        else:
            sy = 40

        if Parent_:
            self.defBackClr = Parent_.GetBackgroundColour()
        else:
            app = ic_user.icGetRunner()
            if app:
                Parent_ = app.GetTopWindow()
                self.defBackClr = app.GetTopWindow().GetBackgroundColour()
            else:
                self.defBackClr = wx.SystemSettings.GetColour(
                    wx.SYS_COLOUR_3DFACE)

        if Parent_ is None:
            style = wx.STAY_ON_TOP

        # Instead of calling wx.Dialog.__init__ we precreate the dialog
        # so we can set an extra style that must be set before
        # creation, and then we create the GUI object using the Create
        # method.
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(Parent_, -1, size=wx.Size(150, sy), style=style)

        # This next step is the most important, it turns this Python
        # object into the real wrapper of the dialog (instead of pre)
        # as far as the wxPython extension is concerned.
        self.PostCreate(pre)

        self._ani = [
            ic_bmp.icCreateBitmap(frame_file_name)
            for frame_file_name in Frames_
        ]
        self._cur_ani_state = 0  # Индекс состояния анимации
        self._max_ani_state = len(Frames_)
        self._delay = 0.3
        self._autoIncr = bAutoIncr

        if self._ani:
            self._pic_size = (self._ani[0].GetWidth(),
                              self._ani[0].GetHeight())
        else:
            self._pic_size = (0, 0)

        self.title = ''
        self.label = Msg_
        self.label2 = Msg2_
        self.min = min
        self.max = max
        self.value = min
        self.min2 = min2
        self.max2 = max2
        self.value2 = min2

        #
        self.indBgrClr = wx.Colour(230, 230, 230)
        self.indClr = wx.Colour(100, 100, 135)

        self.indBgrBrush = wx.Brush(self.indBgrClr, wx.SOLID)
        self.indBrush = wx.Brush(self.indClr, wx.SOLID)

        self.bgrBrush = wx.Brush(self.defBackClr, wx.SOLID)
        self.font = icfont.icFont({})

        # Высота индикатора
        self.indH = 15

        self.CenterOnScreen()
        self._count = 0
        self._running = True  # Признак запущенной функции
        self._closed = False  # Признак закрытия окна
        self._result_list = None
        self.old_time = time.clock()

        self._oSize = self.GetSize()
        self._oPos = self.GetPosition()
        self._oPar = None

        self.timer = wx.FutureCall(1, self.OnTimer, None)
Example #11
0
    def createWXProperty(self, name, value, property_type, spc=None):
        """
        Создать свойство wx по типу редактора.
        @param name: Имя свойства/атрибута.
        @param value: Значение свойства/атрибута.
        @param property_type: Тип редактора свойства.
        @param spc: Спецификация компонента.
        @return: wx.Property объект.
        """
        if spc is None:
            spc = self._spc if self._spc else self._resource

        wx_property = None
        if property_type == icDefInf.EDT_TEXTFIELD:
            # Текстовое поле
            if type(value) not in (str, unicode):
                value = str(value)
            wx_property = wx.propgrid.StringProperty(name, value=value)

        elif property_type == icDefInf.EDT_TEXTLIST:
            # Список в синтаксисе Python. Пример: ['1', '2', 'abc']
            value_list = []
            if type(value) in (list, tuple):
                for item in value:
                    if isinstance(item, str):
                        item = unicode(item, DEFAULT_ENCODE)
                    elif not isinstance(item, unicode):
                        item = str(item)
                    value_list.append(item)
            wx_property = wx.propgrid.ArrayStringProperty(name,
                                                          value=value_list)

        elif property_type == icDefInf.EDT_TEXTDICT:
            # Словарь в синтаксисе Python.
            # value = str(value)
            # Привести словарь к структурному виду
            value = ic_util.StructToTxt(value)
            wx_property = wx.propgrid.LongStringProperty(name, value=value)

        elif property_type == icDefInf.EDT_DICT:
            # Словарь
            # value = str(value)
            # Привести словарь к структурному виду
            value = ic_util.StructToTxt(value)
            wx_property = wx.propgrid.LongStringProperty(name, value=value)

        elif property_type == icDefInf.EDT_IMPORT_NAMES:
            # Словарь импортируемых имен
            # value = str(value)
            # Привести словарь к структурному виду
            value = ic_util.StructToTxt(value)
            wx_property = wx.propgrid.LongStringProperty(name, value=value)

        elif property_type == icDefInf.EDT_NUMBER:
            # Числовое поле
            value = float(value) if value else 0.0
            wx_property = wx.propgrid.FloatProperty(name, value=value)

        elif property_type == icDefInf.EDT_CHOICE:
            # ComboBox
            choice_list = spc.get('__lists__', dict()).get(name, list())
            choice_list = [str(item) for item in choice_list]
            idx = choice_list.index(value) if value in choice_list else 0
            wx_property = wx.propgrid.EnumProperty(
                name, name, choice_list, [i for i in range(len(choice_list))],
                idx)

        elif property_type == icDefInf.EDT_CHECK_BOX:
            # CheckBox
            if type(value) in (str, unicode):
                value = eval(value)
            value = bool(value)
            wx_property = wx.propgrid.BoolProperty(name, value=value)
            wx_property.SetAttribute('UseCheckbox', True)

        elif property_type == icDefInf.EDT_EXTERNAL:
            # Внешний редактор.
            log.warning(
                u'Свойство [%s]. Редактор свойства <Внешний редактор> не реализован'
                % name)

        elif property_type == icDefInf.EDT_COMBINE:
            # Редактор комбинированных свойств.
            choice_list = None
            codes = None
            value_list = []
            if name == 'style':
                if spc and '__styles__' in spc:
                    choice_list = spc['__styles__'].keys(
                    ) if spc['__styles__'] else []
                    codes = [spc['__styles__'][key] for key in choice_list]
                else:
                    choice_list = []
                    codes = []
                styles = spc['__styles__'] if spc.get('__styles__',
                                                      None) else {}
                value_list = self._get_combin_value_list(value, styles)
            elif name == 'flag':
                choice_list = icDefInf.ICSizerFlag.keys()
                codes = [icDefInf.ICSizerFlag[key] for key in choice_list]
                value_list = self._get_combin_value_list(
                    value, icDefInf.ICSizerFlag)
            else:
                log.warning(
                    u'Свойство [%s]. Редактор свойства <Редактор комбинированных свойств> не поддерживается'
                    % name)
            if choice_list is not None and codes is not None:
                wx_property = wx.propgrid.MultiChoiceProperty(
                    name, choices=choice_list, value=value_list)

        elif property_type == icDefInf.EDT_COLOR:
            # Редактор цветов wxColour.
            colour = None
            if type(value) in (list, tuple):
                colour = wx.Colour(*value)
            wx_property = wx.propgrid.ColourProperty(name, value=colour)

        elif property_type == icDefInf.EDT_FONT:
            # Редактор шрифтов wxFont.
            value = value if value else dict()
            font = icfont.icFont(value)
            wx_property = wx.propgrid.FontProperty(name, value=font)

        elif property_type == icDefInf.EDT_POINT:
            # Редактор координат точки wxPoint.
            if type(value) not in (str, unicode):
                value = str(value)
            wx_property = wx.propgrid.StringProperty(name, value=value)

        elif property_type == icDefInf.EDT_SIZE:
            # Редактор paзмеров wxSize.
            if type(value) not in (str, unicode):
                value = str(value)
            wx_property = wx.propgrid.StringProperty(name, value=value)

        elif property_type == icDefInf.EDT_PY_SCRIPT:
            # Редактор Python скриптов
            if value is None:
                value = str(value)
            elif isinstance(value, str):
                value = unicode(value, DEFAULT_ENCODE)
            elif isinstance(value, unicode):
                pass
            elif type(value) in (int, float, list, tuple, dict, bool):
                value = str(value)
            elif type(value) in (datetime.datetime, ):
                # Если указывается время, то скорее всего это текущее время
                value = u'@datetime.datetime.now()'
            elif type(value) in (datetime.date, ):
                # Если указывается день, то скорее всего это сегодняшний
                value = u'@datetime.date.today()'
            else:
                log.warning(
                    u'Свойство [%s]. Редактор свойства <Редактор Python скриптов> для типа <%s> не реализован'
                    % (name, value.__class__.__name__))
                value = u''
            # Захотелось по дополнительной кнопке генерировать текст функции
            # если ее нет и делать прокрутку на нее если она есть в модуле менеджера
            # ресурса. Создал расширенный редактор. Подключается после добавления
            # свойства в PropertyGrid
            wx_property = wx.propgrid.LongStringProperty(name, value=value)

        elif property_type == icDefInf.EDT_ADD_PROPERTY:
            # Редактор дополнительных свойств
            log.warning(
                u'Свойство [%s]. Редактор свойства <Редактор дополнительных свойств> не реализован'
                % name)

        elif property_type == icDefInf.EDT_NEW_PROPERTY:
            # Редактор для добавления дополнительного свойства
            log.warning(
                u'Свойство [%s]. Редактор свойства <Редактор для добавления дополнительного свойства> не реализован'
                % name)

        elif property_type == icDefInf.EDT_USER_PROPERTY:
            # Редактор пользовательского свойства,
            # определяемого компонентом
            if type(value) not in (str, unicode):
                value = str(value)
            wx_property = icedituserproperty.icEditUserProperty(name,
                                                                value=value)
            wx_property.setPropertyEditManager(self)

        elif property_type == icDefInf.EDT_RO_TEXTFIELD:
            # Read-Only текстовое поле
            if type(value) not in (str, unicode):
                value = str(value)
            wx_property = wx.propgrid.StringProperty(name, value=value)
            wx_property.Enable(False)

        elif property_type == icDefInf.EDT_IMG:
            # Редактор изображений
            wx_property = wx.propgrid.ImageFileProperty(name)

        elif property_type == icDefInf.EDT_FILE:
            # Редактор выбора файла
            if type(value) not in (str, unicode):
                value = u''
            wx_property = wx.propgrid.FileProperty(name, value=value)

        elif property_type == icDefInf.EDT_DIR:
            # Редактор выбора директории
            if type(value) not in (str, unicode):
                value = u''
            wx_property = wx.propgrid.DirProperty(name, value=value)
        else:
            log.warning(u'Не поддерживаемы йтип свойства <%s>' % property_type)

        # Установить строку помощи для редактора свойства
        if wx_property:
            wx_property.SetHelpString(self._property_hlp.get(name, name))
        return wx_property
Example #12
0
    def __init__(self,
                 parent,
                 id=-1,
                 component={},
                 logType=0,
                 evalSpace={},
                 bCounter=False,
                 progressDlg=None):
        """
        Конструктор для создания объекта icBoxSizer.
        @type parent: C{wxWindow}
        @param parent: Указатель на родительское окно.
        @type id: C{int}
        @param id: Идентификатор окна.
        @type component: C{dictionary}
        @param component: Словарь описания компонента.
        @type logType: C{int}
        @param logType: Тип лога (0 - консоль, 1- файл, 2- окно лога).
        @param evalSpace: Пространство имен, необходимых для вычисления внешних выражений.
        @type evalSpace: C{dictionary}
        """
        icSpcDefStruct(SPC_IC_HEADCELL, component)
        icwidget.icWidget.__init__(self, parent, id, component, logType,
                                   evalSpace)
        self.position = pos = component['position']
        self.size = size = component['size']
        self.span = component['span']
        label = self.getICAttr('label')
        if not label:
            label = ''

        self.add_style = wx.EXPAND | wx.GROW
        self._isSort = getICAttr(
            '@' + str(component['isSort']), self.evalSpace,
            'Error in icheadgrid.__init__()<isSort>. Name:' + self.name)
        self.shortHelpString = component['shortHelpString']
        self._helpWin = None
        # -----------------------------------------------------------------------
        aln = component['alignment']
        if type(aln) in (str, unicode):
            try:
                aln = eval(aln)
            except:
                aln = ('centred', 'middle')

        horiz, vert = self.alignment = aln

        if horiz == 'centred':
            style = wx.ALIGN_CENTRE
        elif horiz == 'right':
            style = wx.ALIGN_RIGHT
        else:
            style = wx.ALIGN_LEFT

        style = style | wx.ST_NO_AUTORESIZE | wx.NO_BORDER

        # ----------------------------------------------------------------------
        wx.PyControl.__init__(self,
                              parent,
                              id,
                              pos,
                              size,
                              style,
                              name=self.name)
        # ----------------------------------------------------------------------
        self.SetLabel(label)
        self.SetPosition(pos)
        font = parent.GetFont()
        if not font.Ok():
            font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
        wx.PyControl.SetFont(self, font)

        self.defBackClr = parent.GetBackgroundColour()
        if not self.defBackClr.Ok():
            self.defBackClr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
        self.SetBackgroundColour(self.defBackClr)

        clr = parent.GetForegroundColour()
        if not clr.Ok():
            clr = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT)
        self.SetForegroundColour(clr)

        rw, rh = size
        bw, bh = self.GetBestSize()
        if rw == -1:
            rw = bw
        if rh == -1:
            rh = bh
        self.SetSize(wx.Size(rw, rh))
        # ----------------------------------------------------------------------

        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
        self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
        self.Bind(wx.EVT_MOTION, self.OnMove)
        self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
        self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
        self.Bind(wx.EVT_SIZE, self.OnSize)

        self.BindICEvt()

        #   Цвета текста и фона
        self.bgr = bgr = component['backgroundColor']
        if component['backgroundColor2']:
            self.bgr2 = bgr2 = wx.Colour(*component['backgroundColor2'])
        else:
            self.bgr2 = bgr2 = None

        if not bgr2:
            if bgr:
                self.bgr2 = graphicUtils.GetMidColor(wx.Colour(*bgr),
                                                     wx.Colour(0, 0, 0), 0.25)
            else:
                self.bgr2 = graphicUtils.GetMidColor(
                    parent.GetBackgroundColour(), wx.Colour(0, 0, 0), 0.25)

        self.fgr = fgr = component['foregroundColor']

        #   Цвета границы
        self.leftColor = component['borderLeftColor']
        self.topColor = component['borderTopColor']
        self.rightColor = component['borderRightColor']
        self.bottomColor = component['borderBottomColor']
        self.borderStep = component['borderStep']
        self.borderWidth = component['borderWidth']
        self.cursorColor = component['cursorColor']

        #   Стиль границы - соответствует стиль wx.Pen
        self.borderStyle = None
        ret, val = self.eval_attr('borderStyle')
        if ret:
            self.borderStyle = val

        if not self.borderStyle or not isinstance(self.borderStyle, wx.SOLID):
            self.borderStyle = wx.SOLID

        #   Тип штриховки фона
        self.backgroundType = component['backgroundType']

        #   Изображение подложки
        if component['bgrImage'] and issubclass(
                component['bgrImage'].__class__, wx.Bitmap):
            self.bgrImage = component['bgrImage']
        else:
            self.bgrImage = self.countAttr('bgrImage')

        #   Шрифт текста
        self.font = font = component['font']

        if bgr:
            self.SetBackgroundColour(bgr)

        if fgr:
            self.SetForegroundColour(fgr)

        if font:
            obj = icFont(font)
            self.SetFont(obj)

        # Направление сортировки.
        #  0 - сортировка не установлена
        #  1 - сортировка по возрастанию
        # -1 - сортировка по убыванию
        self.sortDirection = 0

        #
        self.bButton = False
        self._buttonPress = False
        self._buttonEnter = False

        # Описание наличия скругленных углов границы в виде (LT, RT, RB, LB)
        self.SetRoundCorners(
            ((component.get('roundConer', None) or []) + [0] * 4)[:4])

        #   Создаем дочерние компоненты
        self.child = component['child']
        if 'child' in component:
            self.childCreator(bCounter, progressDlg)