def setMiddleTxtFont(self,Font_): """ Шрифт текста в центре поля. """ if Font_: font=icfont.icFont(Font_) self.SetMiddleTextFont(font)
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)
def setTicksFont(self,Font_): """ Шрифт текста мажорной шкалы. """ if Font_: font=icfont.icFont(Font_) self.SetTicksFont(font)
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
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)
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
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
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)
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()
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)
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
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)