X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00b6c4e33bdb2fcc1b56d429653963182608674b..25b3661bd4cb44304418b93c0dee1d0dfb99765c:/wxPython/samples/StyleEditor/STCStyleEditor.py diff --git a/wxPython/samples/StyleEditor/STCStyleEditor.py b/wxPython/samples/StyleEditor/STCStyleEditor.py index a19bd0ab56..61ca5ed0a7 100644 --- a/wxPython/samples/StyleEditor/STCStyleEditor.py +++ b/wxPython/samples/StyleEditor/STCStyleEditor.py @@ -6,7 +6,7 @@ # # Created: 2001/08/20 # RCS-ID: $Id$ -# Copyright: (c) 2001 Riaan Booysen +# Copyright: (c) 2001 - 2002 Riaan Booysen # Licence: wxWindows license #----------------------------------------------------------------------------- #Boa:Dialog:STCStyleEditDlg @@ -16,7 +16,7 @@ Reads in property style definitions from a config file. Modified styled can be saved (and optionally applied to a given list of STCs) -It can also maintain a Common definition dictionary of font names, colours and +It can also maintain a Common definition dictionary of font names, colours and sizes which can be shared across multiple language style definitions. This is also used to store platform spesific settings as fonts and sizes vary with platform. @@ -42,7 +42,7 @@ styleidnames - Dictionary of language spesific style numbers and names 0 or more predefined style groups or 'themes' [style..] -Currently the following languages are supported: +Currently the following languages are supported: python, html, xml, cpp, text, props Other languages can be added by just defining the above settings for them in the config file (if wxSTC implements them). @@ -53,210 +53,380 @@ Use the initSTC function to initialise your wxSTC from a config file. import os, sys, string, pprint, copy from wxPython.wx import * +from wxPython.help import * from wxPython.lib.anchors import LayoutAnchors from wxPython.stc import * settingsIdNames = {-1: 'Selection', -2: 'Caret', -3: 'Edge'} -commonPropDefs = {'fore': '#888888', 'size': 8, - 'face': wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT).GetFaceName()} +commonPropDefs = {} styleCategoryDescriptions = { -'-----Language-----': 'Styles spesific to the language', -'-----Standard-----': 'Styles shared by all languages', -'-----Settings-----': 'Properties set by STC methods', -'-----Common-----': 'User definable values that can be shared between languages'} - -[wxID_STCSTYLEEDITDLG, wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, wxID_STCSTYLEEDITDLGBGCOLBTN, wxID_STCSTYLEEDITDLGBGCOLCB, wxID_STCSTYLEEDITDLGBGCOLDEFCB, wxID_STCSTYLEEDITDLGCANCELBTN, wxID_STCSTYLEEDITDLGCOMMONDEFSBTN, wxID_STCSTYLEEDITDLGELEMENTLB, wxID_STCSTYLEEDITDLGFACECB, wxID_STCSTYLEEDITDLGFACEDEFCB, wxID_STCSTYLEEDITDLGFGCOLBTN, wxID_STCSTYLEEDITDLGFGCOLCB, wxID_STCSTYLEEDITDLGFGCOLDEFCB, wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, wxID_STCSTYLEEDITDLGOKBTN, wxID_STCSTYLEEDITDLGPANEL1, wxID_STCSTYLEEDITDLGPANEL2, wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, wxID_STCSTYLEEDITDLGSIZECB, wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, wxID_STCSTYLEEDITDLGSTATICBOX1, wxID_STCSTYLEEDITDLGSTATICBOX2, wxID_STCSTYLEEDITDLGSTATICLINE1, wxID_STCSTYLEEDITDLGSTATICTEXT2, wxID_STCSTYLEEDITDLGSTATICTEXT3, wxID_STCSTYLEEDITDLGSTATICTEXT4, wxID_STCSTYLEEDITDLGSTATICTEXT6, wxID_STCSTYLEEDITDLGSTATICTEXT7, wxID_STCSTYLEEDITDLGSTATICTEXT8, wxID_STCSTYLEEDITDLGSTATICTEXT9, wxID_STCSTYLEEDITDLGSTC, wxID_STCSTYLEEDITDLGSTYLEDEFST, wxID_STCSTYLEEDITDLGTABOLDCB, wxID_STCSTYLEEDITDLGTABOLDDEFCB, wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB, wxID_STCSTYLEEDITDLGTAITALICCB, wxID_STCSTYLEEDITDLGTAITALICDEFCB, wxID_STCSTYLEEDITDLGTASIZEDEFCB, wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB] = map(lambda _init_ctrls: wxNewId(), range(41)) + '----Language----': 'Styles spesific to the language', + '----Standard----': 'Styles shared by all languages', + '----Settings----': 'Properties set by STC methods', + '----Common----': 'User definable values that can be shared between languages'} + +[wxID_STCSTYLEEDITDLG, wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, + wxID_STCSTYLEEDITDLGBGCOLBTN, wxID_STCSTYLEEDITDLGBGCOLCB, + wxID_STCSTYLEEDITDLGBGCOLDEFCB, wxID_STCSTYLEEDITDLGBGCOLOKBTN, + wxID_STCSTYLEEDITDLGCANCELBTN, wxID_STCSTYLEEDITDLGCONTEXTHELPBUTTON1, + wxID_STCSTYLEEDITDLGELEMENTLB, wxID_STCSTYLEEDITDLGFACECB, + wxID_STCSTYLEEDITDLGFACEDEFCB, wxID_STCSTYLEEDITDLGFACEOKBTN, + wxID_STCSTYLEEDITDLGFGCOLBTN, wxID_STCSTYLEEDITDLGFGCOLCB, + wxID_STCSTYLEEDITDLGFGCOLDEFCB, wxID_STCSTYLEEDITDLGFGCOLOKBTN, + wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, wxID_STCSTYLEEDITDLGOKBTN, + wxID_STCSTYLEEDITDLGPANEL1, wxID_STCSTYLEEDITDLGPANEL2, + wxID_STCSTYLEEDITDLGPANEL3, wxID_STCSTYLEEDITDLGPANEL4, + wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, wxID_STCSTYLEEDITDLGSIZECB, + wxID_STCSTYLEEDITDLGSIZEOKBTN, wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, + wxID_STCSTYLEEDITDLGSTATICBOX1, wxID_STCSTYLEEDITDLGSTATICBOX2, + wxID_STCSTYLEEDITDLGSTATICLINE1, wxID_STCSTYLEEDITDLGSTATICTEXT2, + wxID_STCSTYLEEDITDLGSTATICTEXT3, wxID_STCSTYLEEDITDLGSTATICTEXT4, + wxID_STCSTYLEEDITDLGSTATICTEXT6, wxID_STCSTYLEEDITDLGSTATICTEXT7, + wxID_STCSTYLEEDITDLGSTATICTEXT8, wxID_STCSTYLEEDITDLGSTATICTEXT9, + wxID_STCSTYLEEDITDLGSTC, wxID_STCSTYLEEDITDLGSTYLEDEFST, + wxID_STCSTYLEEDITDLGTABOLDCB, wxID_STCSTYLEEDITDLGTABOLDDEFCB, + wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB, + wxID_STCSTYLEEDITDLGTAITALICCB, wxID_STCSTYLEEDITDLGTAITALICDEFCB, + wxID_STCSTYLEEDITDLGTASIZEDEFCB, wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, + wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB, +] = map(lambda _init_ctrls: wxNewId(), range(47)) class STCStyleEditDlg(wxDialog): """ Style editor for the wxStyledTextCtrl """ _custom_classes = {'wxWindow' : ['wxStyledTextCtrl']} - def _init_utils(self): + def _init_utils(self): + # generated method, don't edit pass - def _init_ctrls(self, prnt): - wxDialog.__init__(self, id = wxID_STCSTYLEEDITDLG, name = 'STCStyleEditDlg', parent = prnt, pos = wxPoint(416, 307), size = wxSize(425, 481), style = wxWANTS_CHARS | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER, title = self.stc_title) + def _init_ctrls(self, prnt): + # generated method, don't edit + wxDialog.__init__(self, id=wxID_STCSTYLEEDITDLG, name='STCStyleEditDlg', + parent=prnt, pos=wxPoint(583, 291), size=wxSize(459, 482), + style=wxWANTS_CHARS | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER, + title=self.stc_title) self._init_utils() - self.SetClientSize(wxSize(417, 454)) - self.SetAutoLayout(true) + self.SetClientSize(wxSize(451, 455)) + self.SetAutoLayout(True) self.SetSizeHints(425, 400, -1, -1) + self.Center(wxBOTH) EVT_SIZE(self, self.OnStcstyleeditdlgSize) - self.staticBox2 = wxStaticBox(id = wxID_STCSTYLEEDITDLGSTATICBOX2, label = 'Text attributes', name = 'staticBox2', parent = self, pos = wxPoint(296, 56), size = wxSize(112, 99), style = 0) - self.staticBox2.SetConstraints(LayoutAnchors(self.staticBox2, false, true, true, false)) - - self.staticBox1 = wxStaticBox(id = wxID_STCSTYLEEDITDLGSTATICBOX1, label = 'Colour', name = 'staticBox1', parent = self, pos = wxPoint(157, 56), size = wxSize(128, 99), style = 0) - self.staticBox1.SetConstraints(LayoutAnchors(self.staticBox1, false, true, true, false)) - - self.elementLb = wxListBox(choices = [], id = wxID_STCSTYLEEDITDLGELEMENTLB, name = 'elementLb', parent = self, pos = wxPoint(8, 72), size = wxSize(144, 112), style = 0, validator = wxDefaultValidator) - self.elementLb.SetConstraints(LayoutAnchors(self.elementLb, true, true, true, false)) - EVT_LISTBOX(self.elementLb, wxID_STCSTYLEEDITDLGELEMENTLB, self.OnElementlbListbox) - - self.styleDefST = wxStaticText(id = wxID_STCSTYLEEDITDLGSTYLEDEFST, label = '(nothing selected)', name = 'styleDefST', parent = self, pos = wxPoint(56, 8), size = wxSize(352, 16), style = wxST_NO_AUTORESIZE) - self.styleDefST.SetFont(wxFont(8, wxSWISS, wxNORMAL, wxBOLD, false, self.sys_font)) - self.styleDefST.SetConstraints(LayoutAnchors(self.styleDefST, true, true, true, false)) - - self.taEOLfilledCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, label = 'EOL filled', name = 'taEOLfilledCb', parent = self.staticBox2, pos = wxPoint(8, 75), size = wxSize(72, 16), style = 0) - self.taEOLfilledCb.SetValue(false) - EVT_CHECKBOX(self.taEOLfilledCb, wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, self.OnTaeoffilledcbCheckbox) - - self.staticText2 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT2, label = 'default', name = 'staticText2', parent = self.staticBox2, pos = wxPoint(72, 11), size = wxSize(32, 16), style = 0) - - self.taItalicCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAITALICCB, label = 'Italic', name = 'taItalicCb', parent = self.staticBox2, pos = wxPoint(8, 43), size = wxSize(72, 16), style = 0) - EVT_CHECKBOX(self.taItalicCb, wxID_STCSTYLEEDITDLGTAITALICCB, self.OnTaitaliccbCheckbox) - - self.taUnderlinedDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB, label = 'checkBox1', name = 'taUnderlinedDefCb', parent = self.staticBox2, pos = wxPoint(88, 59), size = wxSize(16, 16), style = 0) - - self.taBoldDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTABOLDDEFCB, label = 'checkBox1', name = 'taBoldDefCb', parent = self.staticBox2, pos = wxPoint(88, 27), size = wxSize(16, 16), style = 0) - - self.taItalicDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAITALICDEFCB, label = 'checkBox1', name = 'taItalicDefCb', parent = self.staticBox2, pos = wxPoint(88, 43), size = wxSize(16, 16), style = 0) - - self.taBoldCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTABOLDCB, label = 'Bold', name = 'taBoldCb', parent = self.staticBox2, pos = wxPoint(8, 27), size = wxSize(72, 16), style = 0) - EVT_CHECKBOX(self.taBoldCb, wxID_STCSTYLEEDITDLGTABOLDCB, self.OnTaboldcbCheckbox) - - self.taEOLfilledDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB, label = 'checkBox1', name = 'taEOLfilledDefCb', parent = self.staticBox2, pos = wxPoint(88, 75), size = wxSize(16, 16), style = 0) - - self.taUnderlinedCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, label = 'Underlined', name = 'taUnderlinedCb', parent = self.staticBox2, pos = wxPoint(8, 59), size = wxSize(72, 16), style = 0) - EVT_CHECKBOX(self.taUnderlinedCb, wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, self.OnTaunderlinedcbCheckbox) - - self.fgColDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGFGCOLDEFCB, label = 'checkBox1', name = 'fgColDefCb', parent = self.staticBox1, pos = wxPoint(104, 31), size = wxSize(16, 16), style = 0) - - self.staticText3 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT3, label = 'default', name = 'staticText3', parent = self.staticBox1, pos = wxPoint(88, 16), size = wxSize(32, 16), style = 0) - - self.bgColDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGBGCOLDEFCB, label = 'checkBox1', name = 'bgColDefCb', parent = self.staticBox1, pos = wxPoint(104, 71), size = wxSize(16, 16), style = 0) - - self.fgColBtn = wxButton(id = wxID_STCSTYLEEDITDLGFGCOLBTN, label = 'Foreground', name = 'fgColBtn', parent = self.staticBox1, pos = wxPoint(8, 16), size = wxSize(72, 16), style = 0) - EVT_BUTTON(self.fgColBtn, wxID_STCSTYLEEDITDLGFGCOLBTN, self.OnFgcolbtnButton) - - self.bgColBtn = wxButton(id = wxID_STCSTYLEEDITDLGBGCOLBTN, label = 'Background', name = 'bgColBtn', parent = self.staticBox1, pos = wxPoint(8, 56), size = wxSize(72, 16), style = 0) - EVT_BUTTON(self.bgColBtn, wxID_STCSTYLEEDITDLGBGCOLBTN, self.OnBgcolbtnButton) + self.speedsettingCh = wxChoice(choices=[], + id=wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, name='speedsettingCh', + parent=self, pos=wxPoint(96, 28), size=wxSize(346, 21), style=0, + validator=wxDefaultValidator) + self.speedsettingCh.SetConstraints(LayoutAnchors(self.speedsettingCh, + True, True, True, False)) + self.speedsettingCh.SetHelpText('The speed setting allows you to revert to one of the predefined style sets. This will overwrite your current settings when tha dialog is posted.') + EVT_CHOICE(self.speedsettingCh, wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, + self.OnSpeedsettingchChoice) + + self.elementLb = wxListBox(choices=[], id=wxID_STCSTYLEEDITDLGELEMENTLB, + name='elementLb', parent=self, pos=wxPoint(8, 72), + size=wxSize(160, 112), style=0, validator=wxDefaultValidator) + self.elementLb.SetConstraints(LayoutAnchors(self.elementLb, True, True, + True, False)) + self.elementLb.SetHelpText('Select a style here to edit it. Common definitions can be added and maintained here. A common definition is a property that can be shared between styles and special cased per platform.') + EVT_LISTBOX(self.elementLb, wxID_STCSTYLEEDITDLGELEMENTLB, + self.OnElementlbListbox) + + self.addCommonItemBtn = wxButton(id=wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, + label='Add', name='addCommonItemBtn', parent=self, pos=wxPoint(8, + 184), size=wxSize(80, 17), style=0) + self.addCommonItemBtn.SetToolTipString('Add new Common definition') + EVT_BUTTON(self.addCommonItemBtn, wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, + self.OnAddsharebtnButton) - self.staticLine1 = wxStaticLine(id = wxID_STCSTYLEEDITDLGSTATICLINE1, name = 'staticLine1', parent = self, pos = wxPoint(36, 62), size = wxSize(115, 2), style = wxLI_HORIZONTAL) - self.staticLine1.SetConstraints(LayoutAnchors(self.staticLine1, true, true, true, false)) + self.removeCommonItemBtn = wxButton(id=wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, + label='Remove', name='removeCommonItemBtn', parent=self, + pos=wxPoint(88, 184), size=wxSize(80, 17), style=0) + self.removeCommonItemBtn.SetToolTipString('Remove the selected Common definition') + EVT_BUTTON(self.removeCommonItemBtn, + wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, + self.OnRemovesharebtnButton) + + self.styleDefST = wxStaticText(id=wxID_STCSTYLEEDITDLGSTYLEDEFST, + label='(nothing selected)', name='styleDefST', parent=self, + pos=wxPoint(96, 8), size=wxSize(366, 16), + style=wxST_NO_AUTORESIZE) + self.styleDefST.SetFont(wxFont(self.style_font_size, wxSWISS, wxNORMAL, + wxBOLD, False, '')) + self.styleDefST.SetConstraints(LayoutAnchors(self.styleDefST, True, + True, True, False)) + + self.staticLine1 = wxStaticLine(id=wxID_STCSTYLEEDITDLGSTATICLINE1, + name='staticLine1', parent=self, pos=wxPoint(48, 62), + size=wxSize(120, 2), style=wxLI_HORIZONTAL) + self.staticLine1.SetConstraints(LayoutAnchors(self.staticLine1, True, + True, True, False)) + + self.staticText6 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT6, + label='Style', name='staticText6', parent=self, pos=wxPoint(8, + 56), size=wxSize(40, 13), style=0) + + self.staticText8 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT8, + label='Style def:', name='staticText8', parent=self, + pos=wxPoint(8, 8), size=wxSize(88, 13), style=0) + + self.staticText9 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT9, + label='SpeedSetting:', name='staticText9', parent=self, + pos=wxPoint(8, 32), size=wxSize(88, 13), style=0) + + self.panel3 = wxPanel(id=wxID_STCSTYLEEDITDLGPANEL3, name='panel3', + parent=self, pos=wxPoint(176, 56), size=wxSize(146, 104), + style=wxTAB_TRAVERSAL) + self.panel3.SetConstraints(LayoutAnchors(self.panel3, False, True, True, + False)) + + self.panel4 = wxPanel(id=wxID_STCSTYLEEDITDLGPANEL4, name='panel4', + parent=self, pos=wxPoint(330, 56), size=wxSize(114, 104), + style=wxTAB_TRAVERSAL) + self.panel4.SetConstraints(LayoutAnchors(self.panel4, False, True, True, + False)) + + self.panel1 = wxPanel(id=wxID_STCSTYLEEDITDLGPANEL1, name='panel1', + parent=self, pos=wxPoint(176, 161), size=wxSize(143, 40), + style=wxTAB_TRAVERSAL) + self.panel1.SetConstraints(LayoutAnchors(self.panel1, False, True, True, + False)) + + self.panel2 = wxPanel(id=wxID_STCSTYLEEDITDLGPANEL2, name='panel2', + parent=self, pos=wxPoint(330, 162), size=wxSize(112, 40), + style=wxTAB_TRAVERSAL) + self.panel2.SetConstraints(LayoutAnchors(self.panel2, False, True, True, + False)) + + self.stc = wxStyledTextCtrl(id=wxID_STCSTYLEEDITDLGSTC, name='stc', + parent=self, pos=wxPoint(8, 208), size=wxSize(435, 207), + style=wxSUNKEN_BORDER) + self.stc.SetConstraints(LayoutAnchors(self.stc, True, True, True, True)) + self.stc.SetHelpText('The style preview window. Click or move the cursor over a spesific style to select the style for editing in the editors above.') + EVT_LEFT_UP(self.stc, self.OnUpdateUI) + EVT_KEY_UP(self.stc, self.OnUpdateUI) - self.staticText6 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT6, label = 'Style', name = 'staticText6', parent = self, pos = wxPoint(8, 56), size = wxSize(23, 13), style = 0) + self.contextHelpButton1 = wxContextHelpButton(parent=self, + pos=wxPoint(8, 423), size=wxSize(24, 24), style=wxBU_AUTODRAW) + self.contextHelpButton1.SetConstraints(LayoutAnchors(self.contextHelpButton1, + True, False, False, True)) - self.okBtn = wxButton(id = wxID_STCSTYLEEDITDLGOKBTN, label = 'OK', name = 'okBtn', parent = self, pos = wxPoint(248, 422), size = wxSize(75, 23), style = 0) - self.okBtn.SetConstraints(LayoutAnchors(self.okBtn, false, false, true, true)) + self.okBtn = wxButton(id=wxID_STCSTYLEEDITDLGOKBTN, label='OK', + name='okBtn', parent=self, pos=wxPoint(282, 423), size=wxSize(75, + 23), style=0) + self.okBtn.SetConstraints(LayoutAnchors(self.okBtn, False, False, True, + True)) self.okBtn.SetToolTipString('Save changes to the config file') EVT_BUTTON(self.okBtn, wxID_STCSTYLEEDITDLGOKBTN, self.OnOkbtnButton) - self.cancelBtn = wxButton(id = wxID_STCSTYLEEDITDLGCANCELBTN, label = 'Cancel', name = 'cancelBtn', parent = self, pos = wxPoint(332, 422), size = wxSize(75, 23), style = 0) - self.cancelBtn.SetConstraints(LayoutAnchors(self.cancelBtn, false, false, true, true)) + self.cancelBtn = wxButton(id=wxID_STCSTYLEEDITDLGCANCELBTN, + label='Cancel', name='cancelBtn', parent=self, pos=wxPoint(366, + 423), size=wxSize(75, 23), style=0) + self.cancelBtn.SetConstraints(LayoutAnchors(self.cancelBtn, False, + False, True, True)) self.cancelBtn.SetToolTipString('Close dialog without saving changes') - EVT_BUTTON(self.cancelBtn, wxID_STCSTYLEEDITDLGCANCELBTN, self.OnCancelbtnButton) - - self.commonDefsBtn = wxButton(id = wxID_STCSTYLEEDITDLGCOMMONDEFSBTN, label = 'Common definitions', name = 'commonDefsBtn', parent = self, pos = wxPoint(8, 422), size = wxSize(104, 23), style = 0) - self.commonDefsBtn.SetConstraints(LayoutAnchors(self.commonDefsBtn, true, false, false, true)) - self.commonDefsBtn.SetToolTipString('Directly edit the common definitions dictionary') - self.commonDefsBtn.Show(false) - EVT_BUTTON(self.commonDefsBtn, wxID_STCSTYLEEDITDLGCOMMONDEFSBTN, self.OnCommondefsbtnButton) - - self.staticText8 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT8, label = 'Style def:', name = 'staticText8', parent = self, pos = wxPoint(8, 8), size = wxSize(44, 13), style = 0) - - self.staticText9 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT9, label = 'SpeedSetting:', name = 'staticText9', parent = self, pos = wxPoint(8, 32), size = wxSize(67, 13), style = 0) - - self.speedsettingCh = wxChoice(choices = [], id = wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, name = 'speedsettingCh', parent = self, pos = wxPoint(88, 28), size = wxSize(320, 21), style = 0, validator = wxDefaultValidator) - self.speedsettingCh.SetConstraints(LayoutAnchors(self.speedsettingCh, true, true, true, false)) - EVT_CHOICE(self.speedsettingCh, wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, self.OnSpeedsettingchChoice) - - self.stc = wxStyledTextCtrl(id = wxID_STCSTYLEEDITDLGSTC, name = 'stc', parent = self, pos = wxPoint(8, 208), size = wxSize(401, 206), style = wxSUNKEN_BORDER) - self.stc.SetConstraints(LayoutAnchors(self.stc, true, true, true, true)) - EVT_LEFT_UP(self.stc, self.OnUpdateUI) - EVT_KEY_UP(self.stc, self.OnUpdateUI) - - self.panel1 = wxPanel(id = wxID_STCSTYLEEDITDLGPANEL1, name = 'panel1', parent = self, pos = wxPoint(157, 161), size = wxSize(128, 40), style = wxTAB_TRAVERSAL) - self.panel1.SetConstraints(LayoutAnchors(self.panel1, false, true, true, false)) - - self.staticText4 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT4, label = 'Face:', name = 'staticText4', parent = self.panel1, pos = wxPoint(0, 0), size = wxSize(27, 13), style = 0) + EVT_BUTTON(self.cancelBtn, wxID_STCSTYLEEDITDLGCANCELBTN, + self.OnCancelbtnButton) - self.faceDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGFACEDEFCB, label = 'checkBox1', name = 'faceDefCb', parent = self.panel1, pos = wxPoint(104, 0), size = wxSize(16, 16), style = 0) + self.staticText4 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT4, + label='Face:', name='staticText4', parent=self.panel1, + pos=wxPoint(0, 0), size=wxSize(48, 13), style=0) - self.fixedWidthChk = wxCheckBox(id = wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, label = '', name = 'fixedWidthChk', parent = self.panel1, pos = wxPoint(0, 23), size = wxSize(13, 19), style = 0) - self.fixedWidthChk.SetValue(false) + self.fixedWidthChk = wxCheckBox(id=wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, + label='', name='fixedWidthChk', parent=self.panel1, pos=wxPoint(0, + 23), size=wxSize(13, 19), style=0) self.fixedWidthChk.SetToolTipString('Check this for Fixed Width fonts') - EVT_CHECKBOX(self.fixedWidthChk, wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, self.OnFixedwidthchkCheckbox) + EVT_CHECKBOX(self.fixedWidthChk, wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, + self.OnFixedwidthchkCheckbox) + + self.faceCb = wxComboBox(choices=[], id=wxID_STCSTYLEEDITDLGFACECB, + name='faceCb', parent=self.panel1, pos=wxPoint(17, 18), + size=wxSize(105, 21), style=0, validator=wxDefaultValidator, + value='') + + self.staticText7 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT7, + label='Size:', name='staticText7', parent=self.panel2, + pos=wxPoint(0, 0), size=wxSize(40, 13), style=0) + + self.sizeCb = wxComboBox(choices=[], id=wxID_STCSTYLEEDITDLGSIZECB, + name='sizeCb', parent=self.panel2, pos=wxPoint(0, 17), + size=wxSize(91, 21), style=0, validator=wxDefaultValidator, + value='') + + self.sizeOkBtn = wxButton(id=wxID_STCSTYLEEDITDLGSIZEOKBTN, label='ok', + name='sizeOkBtn', parent=self.panel2, pos=wxPoint(90, 17), + size=wxSize(21, 21), style=0) + + self.faceOkBtn = wxButton(id=wxID_STCSTYLEEDITDLGFACEOKBTN, label='ok', + name='faceOkBtn', parent=self.panel1, pos=wxPoint(122, 18), + size=wxSize(21, 21), style=0) + + self.fgColBtn = wxButton(id=wxID_STCSTYLEEDITDLGFGCOLBTN, + label='Foreground', name='fgColBtn', parent=self.panel3, + pos=wxPoint(8, 16), size=wxSize(72, 16), style=0) + EVT_BUTTON(self.fgColBtn, wxID_STCSTYLEEDITDLGFGCOLBTN, + self.OnFgcolbtnButton) + + self.fgColCb = wxComboBox(choices=[], id=wxID_STCSTYLEEDITDLGFGCOLCB, + name='fgColCb', parent=self.panel3, pos=wxPoint(8, 32), + size=wxSize(89, 21), style=0, validator=wxDefaultValidator, + value='') + + self.fgColOkBtn = wxButton(id=wxID_STCSTYLEEDITDLGFGCOLOKBTN, + label='ok', name='fgColOkBtn', parent=self.panel3, pos=wxPoint(96, + 32), size=wxSize(21, 21), style=0) + + self.staticText3 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT3, + label='default', name='staticText3', parent=self.panel3, + pos=wxPoint(100, 16), size=wxSize(37, 16), style=0) + + self.fgColDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGFGCOLDEFCB, + label='checkBox1', name='fgColDefCb', parent=self.panel3, + pos=wxPoint(120, 31), size=wxSize(16, 16), style=0) + + self.bgColBtn = wxButton(id=wxID_STCSTYLEEDITDLGBGCOLBTN, + label='Background', name='bgColBtn', parent=self.panel3, + pos=wxPoint(8, 56), size=wxSize(72, 16), style=0) + EVT_BUTTON(self.bgColBtn, wxID_STCSTYLEEDITDLGBGCOLBTN, + self.OnBgcolbtnButton) + + self.bgColCb = wxComboBox(choices=[], id=wxID_STCSTYLEEDITDLGBGCOLCB, + name='bgColCb', parent=self.panel3, pos=wxPoint(8, 72), + size=wxSize(89, 21), style=0, validator=wxDefaultValidator, + value='') + + self.bgColOkBtn = wxButton(id=wxID_STCSTYLEEDITDLGBGCOLOKBTN, + label='ok', name='bgColOkBtn', parent=self.panel3, pos=wxPoint(96, + 72), size=wxSize(21, 21), style=0) + + self.staticBox2 = wxStaticBox(id=wxID_STCSTYLEEDITDLGSTATICBOX2, + label='Text attributes', name='staticBox2', parent=self.panel4, + pos=wxPoint(0, 0), size=wxSize(112, 99), style=0) + self.staticBox2.SetConstraints(LayoutAnchors(self.staticBox2, False, + True, True, False)) + self.staticBox2.SetHelpText('Text attribute flags.') + + self.staticText2 = wxStaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT2, + label='default', name='staticText2', parent=self.panel4, + pos=wxPoint(68, 11), size=wxSize(37, 16), style=0) + + self.taBoldDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTABOLDDEFCB, + label='checkBox1', name='taBoldDefCb', parent=self.panel4, + pos=wxPoint(88, 27), size=wxSize(16, 16), style=0) + + self.taItalicDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAITALICDEFCB, + label='checkBox1', name='taItalicDefCb', parent=self.panel4, + pos=wxPoint(88, 43), size=wxSize(16, 16), style=0) + + self.taUnderlinedDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB, + label='checkBox1', name='taUnderlinedDefCb', parent=self.panel4, + pos=wxPoint(88, 59), size=wxSize(16, 16), style=0) + + self.taEOLfilledDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB, + label='checkBox1', name='taEOLfilledDefCb', parent=self.panel4, + pos=wxPoint(88, 75), size=wxSize(16, 16), style=0) + + self.taEOLfilledCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, + label='EOL filled', name='taEOLfilledCb', parent=self.panel4, + pos=wxPoint(8, 75), size=wxSize(72, 16), style=0) + EVT_CHECKBOX(self.taEOLfilledCb, wxID_STCSTYLEEDITDLGTAEOLFILLEDCB, + self.OnTaeoffilledcbCheckbox) + + self.taUnderlinedCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, + label='Underlined', name='taUnderlinedCb', parent=self.panel4, + pos=wxPoint(8, 59), size=wxSize(72, 16), style=0) + EVT_CHECKBOX(self.taUnderlinedCb, wxID_STCSTYLEEDITDLGTAUNDERLINEDCB, + self.OnTaunderlinedcbCheckbox) + + self.taItalicCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTAITALICCB, + label='Italic', name='taItalicCb', parent=self.panel4, + pos=wxPoint(8, 43), size=wxSize(72, 16), style=0) + EVT_CHECKBOX(self.taItalicCb, wxID_STCSTYLEEDITDLGTAITALICCB, + self.OnTaitaliccbCheckbox) + + self.taBoldCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTABOLDCB, + label='Bold', name='taBoldCb', parent=self.panel4, pos=wxPoint(8, + 27), size=wxSize(72, 16), style=0) + EVT_CHECKBOX(self.taBoldCb, wxID_STCSTYLEEDITDLGTABOLDCB, + self.OnTaboldcbCheckbox) + + self.bgColDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGBGCOLDEFCB, + label='checkBox1', name='bgColDefCb', parent=self.panel3, + pos=wxPoint(120, 71), size=wxSize(16, 16), style=0) + + self.staticBox1 = wxStaticBox(id=wxID_STCSTYLEEDITDLGSTATICBOX1, + label='Colour', name='staticBox1', parent=self.panel3, + pos=wxPoint(0, 0), size=wxSize(142, 99), style=0) + self.staticBox1.SetConstraints(LayoutAnchors(self.staticBox1, False, + True, True, False)) + + self.faceDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGFACEDEFCB, + label='checkBox1', name='faceDefCb', parent=self.panel1, + pos=wxPoint(120, 0), size=wxSize(16, 16), style=0) + + self.taSizeDefCb = wxCheckBox(id=wxID_STCSTYLEEDITDLGTASIZEDEFCB, + label='checkBox1', name='taSizeDefCb', parent=self.panel2, + pos=wxPoint(88, 0), size=wxSize(16, 16), style=0) + + def __init__(self, parent, langTitle, lang, configFile, STCsToUpdate=()): + global commonPropDefs + commonPropDefs = {'fore': '#888888', + 'size': 8, + 'face': wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT).GetFaceName()} - self.addCommonItemBtn = wxButton(id = wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, label = 'Add', name = 'addCommonItemBtn', parent = self, pos = wxPoint(8, 184), size = wxSize(72, 16), style = 0) - self.addCommonItemBtn.SetToolTipString('Add new Common definition') - EVT_BUTTON(self.addCommonItemBtn, wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN, self.OnAddsharebtnButton) - - self.removeCommonItemBtn = wxButton(id = wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, label = 'Remove', name = 'removeCommonItemBtn', parent = self, pos = wxPoint(80, 184), size = wxSize(72, 16), style = 0) - self.removeCommonItemBtn.Enable(false) - self.removeCommonItemBtn.SetToolTipString('Remove the selected Common definition') - EVT_BUTTON(self.removeCommonItemBtn, wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN, self.OnRemovesharebtnButton) - - self.panel2 = wxPanel(id = wxID_STCSTYLEEDITDLGPANEL2, name = 'panel2', parent = self, pos = wxPoint(296, 162), size = wxSize(112, 40), style = wxTAB_TRAVERSAL) - self.panel2.SetConstraints(LayoutAnchors(self.panel2, false, true, true, false)) - - self.staticText7 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT7, label = 'Size:', name = 'staticText7', parent = self.panel2, pos = wxPoint(0, 0), size = wxSize(23, 13), style = 0) - - self.taSizeDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGTASIZEDEFCB, label = 'checkBox1', name = 'taSizeDefCb', parent = self.panel2, pos = wxPoint(88, 0), size = wxSize(16, 16), style = 0) - - self.sizeCb = wxComboBox(choices = [], id = wxID_STCSTYLEEDITDLGSIZECB, name = 'sizeCb', parent = self.panel2, pos = wxPoint(0, 17), size = wxSize(112, 21), style = 0, validator = wxDefaultValidator, value = '') - self.sizeCb.SetLabel('') - - self.faceCb = wxComboBox(choices = [], id = wxID_STCSTYLEEDITDLGFACECB, name = 'faceCb', parent = self.panel1, pos = wxPoint(17, 18), size = wxSize(111, 21), style = 0, validator = wxDefaultValidator, value = '') - self.faceCb.SetLabel('') - - self.fgColCb = wxComboBox(choices = [], id = wxID_STCSTYLEEDITDLGFGCOLCB, name = 'fgColCb', parent = self.staticBox1, pos = wxPoint(8, 32), size = wxSize(91, 21), style = 0, validator = wxDefaultValidator, value = '') - self.fgColCb.SetLabel('') - - self.bgColCb = wxComboBox(choices = [], id = wxID_STCSTYLEEDITDLGBGCOLCB, name = 'bgColCb', parent = self.staticBox1, pos = wxPoint(8, 72), size = wxSize(91, 21), style = 0, validator = wxDefaultValidator, value = '') - self.bgColCb.SetLabel('') - - def __init__(self, parent, langTitle, lang, configFile, STCsToUpdate=()): self.stc_title = 'wxStyledTextCtrl Style Editor' self.stc_title = 'wxStyledTextCtrl Style Editor - %s' % langTitle - self.sys_font = wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT).GetFaceName() + if wxPlatform == '__WXMSW__': + self.style_font_size = 8 + else: + self.style_font_size = 10 self._init_ctrls(parent) - - self._onUpdateUI = false self.lang = lang self.configFile = configFile self.style = '' + self.styleNum = 0 self.names = [] self.values = {} self.STCsToUpdate = STCsToUpdate - - for combo, evtRet, evtRDC in ( - (self.fgColCb, self.OnfgColRet, self.OnGotoCommonDef), - (self.bgColCb, self.OnbgColRet, self.OnGotoCommonDef), - (self.faceCb, self.OnfaceRet, self.OnGotoCommonDef), - (self.sizeCb, self.OnsizeRet, self.OnGotoCommonDef)): - self.bindComboEvts(combo, evtRet, evtRDC) - - (self.config, self.commonDefs, self.styleIdNames, self.styles, - self.styleGroupNames, self.predefStyleGroups, + self._blockUpdate = False + + + for combo, okBtn, evtRet, evtCB, evtRDC in ( + (self.fgColCb, self.fgColOkBtn, self.OnfgColRet, self.OnfgColCombobox, self.OnGotoCommonDef), + (self.bgColCb, self.bgColOkBtn, self.OnbgColRet, self.OnbgColCombobox, self.OnGotoCommonDef), + (self.faceCb, self.faceOkBtn, self.OnfaceRet, self.OnfaceCombobox, self.OnGotoCommonDef), + (self.sizeCb, self.sizeOkBtn, self.OnsizeRet, self.OnsizeCombobox, self.OnGotoCommonDef)): + self.bindComboEvts(combo, okBtn, evtRet, evtCB, evtRDC) + + (self.config, self.commonDefs, self.styleIdNames, self.styles, + self.styleGroupNames, self.predefStyleGroups, self.otherLangStyleGroupNames, self.otherLangStyleGroups, self.displaySrc, self.lexer, self.keywords, self.braceInfo) = \ - initFromConfig(configFile, lang) - + initFromConfig(configFile, lang) + self.currSpeedSetting = 'style.%s'%self.lang for grp in [self.currSpeedSetting]+self.styleGroupNames: self.speedsettingCh.Append(grp) self.speedsettingCh.SetSelection(0) - + margin = 0 self.stc.SetMarginType(margin, wxSTC_MARGIN_NUMBER) self.stc.SetMarginWidth(margin, 25) - self.stc.SetMarginSensitive(margin, true) + self.stc.SetMarginSensitive(margin, True) EVT_STC_MARGINCLICK(self.stc, wxID_STCSTYLEEDITDLGSTC, self.OnMarginClick) - self.stc.SetUseTabs(false) + self.stc.SetUseTabs(False) self.stc.SetTabWidth(4) - self.stc.SetIndentationGuides(true) + self.stc.SetIndentationGuides(True) self.stc.SetEdgeMode(wxSTC_EDGE_BACKGROUND) self.stc.SetEdgeColumn(44) - + self.setStyles() self.populateStyleSelector() self.defNames, self.defValues = parseProp(\ self.styleDict.get(wxSTC_STYLE_DEFAULT, '')) - self.stc.SetText(self.displaySrc) self.stc.EmptyUndoBuffer() self.stc.SetCurrentPos(self.stc.GetTextLength()) @@ -265,41 +435,40 @@ class STCStyleEditDlg(wxDialog): self.populateCombosWithCommonDefs() # Logical grouping of controls and the property they edit - self.allCtrls = [((self.fgColBtn, self.fgColCb), self.fgColDefCb, + self.allCtrls = [((self.fgColBtn, self.fgColCb, self.fgColOkBtn), self.fgColDefCb, 'fore', wxID_STCSTYLEEDITDLGFGCOLDEFCB), - ((self.bgColBtn, self.bgColCb), self.bgColDefCb, + ((self.bgColBtn, self.bgColCb, self.bgColOkBtn), self.bgColDefCb, 'back', wxID_STCSTYLEEDITDLGBGCOLDEFCB), - (self.taBoldCb, self.taBoldDefCb, + (self.taBoldCb, self.taBoldDefCb, 'bold', wxID_STCSTYLEEDITDLGTABOLDDEFCB), - (self.taItalicCb, self.taItalicDefCb, - 'italic', wxID_STCSTYLEEDITDLGTAITALICDEFCB), - (self.taUnderlinedCb, self.taUnderlinedDefCb, + (self.taItalicCb, self.taItalicDefCb, + 'italic', wxID_STCSTYLEEDITDLGTAITALICDEFCB), + (self.taUnderlinedCb, self.taUnderlinedDefCb, 'underline', wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB), - (self.taEOLfilledCb, self.taEOLfilledDefCb, + (self.taEOLfilledCb, self.taEOLfilledDefCb, 'eolfilled', wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB), - (self.sizeCb, self.taSizeDefCb, + ((self.sizeCb, self.sizeOkBtn), self.taSizeDefCb, 'size', wxID_STCSTYLEEDITDLGTASIZEDEFCB), - ((self.faceCb, self.fixedWidthChk), self.faceDefCb, + ((self.faceCb, self.faceOkBtn, self.fixedWidthChk), self.faceDefCb, 'face', wxID_STCSTYLEEDITDLGFACEDEFCB)] - self.clearCtrls(disableDefs=true) + self.clearCtrls(disableDefs=True) # centralised default checkbox event handler self.chbIdMap = {} for ctrl, chb, prop, wid in self.allCtrls: self.chbIdMap[wid] = ctrl, chb, prop, wid EVT_CHECKBOX(chb, wid, self.OnDefaultCheckBox) chb.SetToolTipString('Toggle defaults') - + self.Center(wxBOTH) - self._onUpdateUI = true - + #---Property methods------------------------------------------------------------ def getCtrlForProp(self, findprop): for ctrl, chb, prop, wid in self.allCtrls: if findprop == prop: return ctrl, chb raise Exception('PropNotFound', findprop) - + def editProp(self, on, prop, val=''): oldstyle = self.rememberStyles() if on: @@ -311,29 +480,30 @@ class STCStyleEditDlg(wxDialog): except ValueError: pass try: del self.values[prop] except KeyError: pass - + try: self.updateStyle() - return true + return True except KeyError, errkey: wxLogError('Name not found in Common definition, '\ 'please enter valid reference. (%s)'%errkey) self.restoreStyles(oldstyle) - return false + return False #---Control population methods-------------------------------------------------- def setStyles(self): + if self._blockUpdate: return self.styles, self.styleDict, self.styleNumIdxMap = \ - setSTCStyles(self.stc, self.styles, self.styleIdNames, + setSTCStyles(self.stc, self.styles, self.styleIdNames, self.commonDefs, self.lang, self.lexer, self.keywords) - + def updateStyle(self): # called after a control edited self.names, self.values # Special case for saving common defs settings if self.styleNum == 'common': strVal = self.style[2] = self.values.values()[0] if self.style[1] == 'size': self.style[2] = int(strVal) - + self.commonDefs[self.style[0]] = self.style[2] self.styleDefST.SetLabel(strVal) else: @@ -342,12 +512,12 @@ class STCStyleEditDlg(wxDialog): self.styles[self.styleNumIdxMap[self.styleNum]] = styleDecl self.styleDefST.SetLabel(self.style) self.setStyles() - + def findInStyles(self, txt, styles): for style in styles: if string.find(style, txt) != -1: - return true - return false + return True + return False def rememberStyles(self): return self.names[:], copy.copy(self.values) @@ -356,128 +526,150 @@ class STCStyleEditDlg(wxDialog): self.names, self.values = style self.updateStyle() - def clearCtrls(self, isDefault=false, disableDefs=false): - for ctrl, chb, prop, wid in self.allCtrls: - if prop in ('fore', 'back'): - btn, txt = ctrl - btn.SetBackgroundColour(\ - wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNFACE)) - btn.SetForegroundColour(wxColour(255, 255, 255)) - btn.Enable(isDefault) - txt.SetValue('') - txt.Enable(isDefault) - elif prop == 'size': - ctrl.SetValue('') - ctrl.Enable(isDefault) - elif prop == 'face': - ctrl[0].SetValue('') - ctrl[0].Enable(isDefault) - ctrl[1].Enable(isDefault) - ctrl[1].SetValue(false) - elif prop in ('bold', 'italic', 'underline', 'eolfilled'): - ctrl.SetValue(false) - ctrl.Enable(isDefault) - - chb.Enable(not isDefault and not disableDefs) - chb.SetValue(true) - - def populateProp(self, items, default, forceDisable=false): - for name, val in items: - if name: - ctrl, chb = self.getCtrlForProp(name) - - if name in ('fore', 'back'): - btn, txt = ctrl - repval = val%self.commonDefs - btn.SetBackgroundColour(strToCol(repval)) - btn.SetForegroundColour(wxColour(0, 0, 0)) - btn.Enable(not forceDisable) - txt.SetValue(val) - txt.Enable(not forceDisable) - chb.SetValue(default) - elif name == 'size': - ctrl.SetValue(val) - ctrl.Enable(not forceDisable) - chb.SetValue(default) - elif name == 'face': - ctrl[0].SetValue(val) - ctrl[0].Enable(not forceDisable) - ctrl[1].Enable(not forceDisable) - chb.SetValue(default) - elif name in ('bold', 'italic', 'underline', 'eolfilled'): - ctrl.Enable(not forceDisable) - ctrl.SetValue(true) - chb.SetValue(default) - + def clearCtrls(self, isDefault=False, disableDefs=False): + self._blockUpdate = True + try: + for ctrl, chb, prop, wid in self.allCtrls: + if prop in ('fore', 'back'): + cbtn, txt, btn = ctrl + cbtn.SetBackgroundColour(\ + wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNFACE)) + cbtn.SetForegroundColour(wxColour(255, 255, 255)) + cbtn.Enable(isDefault) + txt.SetValue('') + txt.Enable(isDefault) + btn.Enable(isDefault) + elif prop == 'size': + cmb, btn = ctrl + cmb.SetValue('') + cmb.Enable(isDefault) + btn.Enable(isDefault) + elif prop == 'face': + cmb, btn, chk = ctrl + cmb.SetValue('') + cmb.Enable(isDefault) + btn.Enable(isDefault) + chk.Enable(isDefault) + chk.SetValue(False) + elif prop in ('bold', 'italic', 'underline', 'eolfilled'): + ctrl.SetValue(False) + ctrl.Enable(isDefault) + + chb.Enable(not isDefault and not disableDefs) + chb.SetValue(True) + finally: + self._blockUpdate = False + + def populateProp(self, items, default, forceDisable=False): + self._blockUpdate = True + try: + for name, val in items: + if name: + ctrl, chb = self.getCtrlForProp(name) + + if name in ('fore', 'back'): + cbtn, txt, btn = ctrl + repval = val%self.commonDefs + cbtn.SetBackgroundColour(strToCol(repval)) + cbtn.SetForegroundColour(wxColour(0, 0, 0)) + cbtn.Enable(not forceDisable) + txt.SetValue(val) + txt.Enable(not forceDisable) + btn.Enable(not forceDisable) + chb.SetValue(default) + elif name == 'size': + cmb, btn = ctrl + cmb.SetValue(val) + cmb.Enable(not forceDisable) + btn.Enable(not forceDisable) + chb.SetValue(default) + elif name == 'face': + cmb, btn, chk = ctrl + cmb.SetValue(val) + cmb.Enable(not forceDisable) + btn.Enable(not forceDisable) + chk.Enable(not forceDisable) + chb.SetValue(default) + elif name in ('bold', 'italic', 'underline', 'eolfilled'): + ctrl.Enable(not forceDisable) + ctrl.SetValue(True) + chb.SetValue(default) + finally: + self._blockUpdate = False + def valIsCommonDef(self, val): return len(val) >= 5 and val[:2] == '%(' - + def populateCtrls(self): self.clearCtrls(self.styleNum == wxSTC_STYLE_DEFAULT, disableDefs=self.styleNum < 0) # handle colour controls for settings if self.styleNum < 0: - self.fgColDefCb.Enable(true) + self.fgColDefCb.Enable(True) if self.styleNum == -1: - self.bgColDefCb.Enable(true) - + self.bgColDefCb.Enable(True) + # populate with default style - self.populateProp(self.defValues.items(), true, + self.populateProp(self.defValues.items(), True, self.styleNum != wxSTC_STYLE_DEFAULT) # override with current settings - self.populateProp(self.values.items(), false) - + self.populateProp(self.values.items(), False) + def getCommonDefPropType(self, commonDefName): val = self.commonDefs[commonDefName] if type(val) == type(0): return 'size' if len(val) == 7 and val[0] == '#': return 'fore' return 'face' - def bindComboEvts(self, combo, returnEvtMeth, rdclickEvtMeth): - wId = wxNewId() - EVT_MENU(self, wId, returnEvtMeth) - combo.SetAcceleratorTable(wxAcceleratorTable([(0, WXK_RETURN, wId)])) + def bindComboEvts(self, combo, btn, btnEvtMeth, comboEvtMeth, rdclickEvtMeth): + EVT_COMBOBOX(combo, combo.GetId(), comboEvtMeth) + EVT_BUTTON(btn, btn.GetId(), btnEvtMeth) EVT_RIGHT_DCLICK(combo, rdclickEvtMeth) - combo.SetToolTipString('Select or press Enter to change, right double-click \n'\ - 'the drop down button to select Common definition (if applicable)') + combo.SetToolTipString('Select from list or click "ok" button on the right to change a manual entry, right double-click \n'\ + 'the drop down button to select Common definition in the Style Editor (if applicable)') + btn.SetToolTipString('Accept value') def populateCombosWithCommonDefs(self, fixedWidthOnly=None): - commonDefs = {'fore': [], 'face': [], 'size': []} - - if self.elementLb.GetSelection() < self.commonDefsStartIdx: - for common in self.commonDefs.keys(): - prop = self.getCommonDefPropType(common) - commonDefs[prop].append('%%(%s)%s'%(common, - prop=='size' and 'd' or 's')) - - # Colours - currFg, currBg = self.fgColCb.GetValue(), self.bgColCb.GetValue() - self.fgColCb.Clear(); self.bgColCb.Clear() - for colCommonDef in commonDefs['fore']: - self.fgColCb.Append(colCommonDef) - self.bgColCb.Append(colCommonDef) - self.fgColCb.SetValue(currFg); self.bgColCb.SetValue(currBg) - - # Font - if fixedWidthOnly is None: - fixedWidthOnly = self.fixedWidthChk.GetValue() - fontEnum = wxFontEnumerator() - fontEnum.EnumerateFacenames(fixedWidthOnly=fixedWidthOnly) - fontNameList = fontEnum.GetFacenames() - - currFace = self.faceCb.GetValue() - self.faceCb.Clear() - for colCommonDef in ['']+fontNameList+commonDefs['face']: - self.faceCb.Append(colCommonDef) - self.faceCb.SetValue(currFace) - - # Size (XXX add std font sizes) - currSize = self.sizeCb.GetValue() - self.sizeCb.Clear() - for colCommonDef in commonDefs['size']: - self.sizeCb.Append(colCommonDef) - self.sizeCb.SetValue(currSize) + self._blockUpdate = True + try: + commonDefs = {'fore': [], 'face': [], 'size': []} + + if self.elementLb.GetSelection() < self.commonDefsStartIdx: + for common in self.commonDefs.keys(): + prop = self.getCommonDefPropType(common) + commonDefs[prop].append('%%(%s)%s'%(common, + prop=='size' and 'd' or 's')) + + # Colours + currFg, currBg = self.fgColCb.GetValue(), self.bgColCb.GetValue() + self.fgColCb.Clear(); self.bgColCb.Clear() + for colCommonDef in commonDefs['fore']: + self.fgColCb.Append(colCommonDef) + self.bgColCb.Append(colCommonDef) + self.fgColCb.SetValue(currFg); self.bgColCb.SetValue(currBg) + + # Font + if fixedWidthOnly is None: + fixedWidthOnly = self.fixedWidthChk.GetValue() + fontEnum = wxFontEnumerator() + fontEnum.EnumerateFacenames(fixedWidthOnly=fixedWidthOnly) + fontNameList = fontEnum.GetFacenames() + + currFace = self.faceCb.GetValue() + self.faceCb.Clear() + for colCommonDef in ['']+fontNameList+commonDefs['face']: + self.faceCb.Append(colCommonDef) + self.faceCb.SetValue(currFace) + + # Size (XXX add std font sizes) + currSize = self.sizeCb.GetValue() + self.sizeCb.Clear() + for colCommonDef in commonDefs['size']: + self.sizeCb.Append(colCommonDef) + self.sizeCb.SetValue(currSize) + finally: + self._blockUpdate = False def populateStyleSelector(self): numStyles = self.styleIdNames.items() @@ -489,16 +681,16 @@ class STCStyleEditDlg(wxDialog): # add styles for num, name in numStyles: if num == wxSTC_STYLE_DEFAULT: - self.elementLb.InsertItems([name, '-----Language-----'], 0) - self.elementLb.Append('-----Standard-----') - stdStart = stdPos = self.elementLb.Number() + self.elementLb.InsertItems([name, '----Language----'], 0) + self.elementLb.Append('----Standard----') + stdStart = stdPos = self.elementLb.GetCount() else: # std styles if num >= 33 and num < 40: self.elementLb.InsertItems([name], stdStart + stdOffset) stdOffset = stdOffset + 1 # extra styles - elif num >= 40: + elif num >= 40: self.elementLb.InsertItems([name], stdStart + extrOffset -1) extrOffset = extrOffset + 1 # normal lang styles @@ -507,7 +699,7 @@ class STCStyleEditDlg(wxDialog): self.styleNumLookup[name] = num # add settings - self.elementLb.Append('-----Settings-----') + self.elementLb.Append('----Settings----') settings = settingsIdNames.items() settings.sort();settings.reverse() for num, name in settings: @@ -515,18 +707,18 @@ class STCStyleEditDlg(wxDialog): self.styleNumLookup[name] = num # add definitions - self.elementLb.Append('-----Common-----') - self.commonDefsStartIdx = self.elementLb.Number() + self.elementLb.Append('----Common----') + self.commonDefsStartIdx = self.elementLb.GetCount() for common in self.commonDefs.keys(): tpe = type(self.commonDefs[common]) self.elementLb.Append('%('+common+')'+(tpe is type('') and 's' or 'd')) self.styleNumLookup[common] = num - + #---Colour methods-------------------------------------------------------------- def getColourDlg(self, colour, title=''): data = wxColourData() data.SetColour(colour) - data.SetChooseFull(true) + data.SetChooseFull(True) dlg = wxColourDialog(self, data) try: dlg.SetTitle(title) @@ -539,14 +731,14 @@ class STCStyleEditDlg(wxDialog): colDlgTitles = {'fore': 'Foreground', 'back': 'Background'} def editColProp(self, colBtn, colCb, prop): - col = self.getColourDlg(colBtn.GetBackgroundColour(), + col = self.getColourDlg(colBtn.GetBackgroundColour(), self.colDlgTitles[prop]+ ' colour') - if col: + if col: colBtn.SetForegroundColour(wxColour(0, 0, 0)) colBtn.SetBackgroundColour(col) colStr = colToStr(col) colCb.SetValue(colStr) - self.editProp(true, prop, colStr) + self.editProp(True, prop, colStr) def OnFgcolbtnButton(self, event): self.editColProp(self.fgColBtn, self.fgColCb, 'fore') @@ -554,12 +746,15 @@ class STCStyleEditDlg(wxDialog): def OnBgcolbtnButton(self, event): self.editColProp(self.bgColBtn, self.bgColCb, 'back') - def editColTCProp(self, colCb, colBtn, prop): - colStr = colCb.GetValue() - if colStr: + def editColTCProp(self, colCb, colBtn, prop, val=None): + if val is None: + colStr = colCb.GetValue() + else: + colStr = val + if colStr: col = strToCol(colStr%self.commonDefs) if self.editProp(colStr!='', prop, colStr): - if colStr: + if colStr: colBtn.SetForegroundColour(wxColour(0, 0, 0)) colBtn.SetBackgroundColour(col) else: @@ -571,10 +766,20 @@ class STCStyleEditDlg(wxDialog): try: self.editColTCProp(self.fgColCb, self.fgColBtn, 'fore') except AssertionError: wxLogError('Not a valid colour value') + def OnfgColCombobox(self, event): + if self._blockUpdate: return + try: self.editColTCProp(self.fgColCb, self.fgColBtn, 'fore', event.GetString()) + except AssertionError: wxLogError('Not a valid colour value') + def OnbgColRet(self, event): try: self.editColTCProp(self.bgColCb, self.bgColBtn, 'back') except AssertionError: wxLogError('Not a valid colour value') + def OnbgColCombobox(self, event): + if self._blockUpdate: return + try: self.editColTCProp(self.bgColCb, self.bgColBtn, 'back', event.GetString()) + except AssertionError: wxLogError('Not a valid colour value') + #---Text attribute events------------------------------------------------------- def OnTaeoffilledcbCheckbox(self, event): self.editProp(event.IsChecked(), 'eolfilled') @@ -593,17 +798,29 @@ class STCStyleEditDlg(wxDialog): if self.valIsCommonDef(val): idx = self.elementLb.FindString(val) if idx != -1: - self.elementLb.SetSelection(idx, true) + self.elementLb.SetSelection(idx, True) self.OnElementlbListbox(None) def OnfaceRet(self, event): - val = self.faceCb.GetValue() + self.setFace(self.faceCb.GetValue()) + + def OnfaceCombobox(self, event): + if self._blockUpdate: return + self.setFace(event.GetString()) + + def setFace(self, val): try: val%self.commonDefs except KeyError: wxLogError('Invalid common definition') else: self.editProp(val!='', 'face', val) def OnsizeRet(self, event): - val = self.sizeCb.GetValue() + self.setSize(self.sizeCb.GetValue()) + + def OnsizeCombobox(self, event): + if self._blockUpdate: return + self.setSize(event.GetString()) + + def setSize(self, val): try: int(val%self.commonDefs) except ValueError: wxLogError('Not a valid integer size value') except KeyError: wxLogError('Invalid common definition') @@ -619,97 +836,103 @@ class STCStyleEditDlg(wxDialog): if isCommon: common = styleIdent[2:-2] prop = self.getCommonDefPropType(common) - self.clearCtrls(disableDefs=true) + self.clearCtrls(disableDefs=True) if prop == 'fore': - self.fgColBtn.Enable(true) - self.fgColCb.Enable(true) + self.fgColBtn.Enable(True) + self.fgColCb.Enable(True) + self.fgColOkBtn.Enable(True) elif prop == 'face': - self.faceCb.Enable(true) - self.fixedWidthChk.Enable(true) + self.faceCb.Enable(True) + self.fixedWidthChk.Enable(True) + self.faceOkBtn.Enable(True) elif prop == 'size': - self.sizeCb.Enable(true) + self.sizeCb.Enable(True) + self.sizeOkBtn.Enable(True) commonDefVal = str(self.commonDefs[common]) self.styleDefST.SetLabel(commonDefVal) - self.populateProp( [(prop, commonDefVal)], true) + self.populateProp( [(prop, commonDefVal)], True) self.styleNum = 'common' self.style = [common, prop, commonDefVal] self.names, self.values = [prop], {prop: commonDefVal} - + # normal style element selected elif len(styleIdent) >=2 and styleIdent[:2] != '--': self.styleNum = self.styleNumLookup[styleIdent] self.style = self.styleDict[self.styleNum] self.names, self.values = parseProp(self.style) - if self.styleNum == wxSTC_STYLE_DEFAULT: self.defNames, self.defValues = \ self.names, self.values self.checkBraces(self.styleNum) - + self.styleDefST.SetLabel(self.style) - + self.populateCtrls() # separator selected else: - self.clearCtrls(disableDefs=true) + self.clearCtrls(disableDefs=True) if styleIdent: self.styleDefST.SetLabel(styleCategoryDescriptions[styleIdent]) self.populateCombosWithCommonDefs() - + def OnDefaultCheckBox(self, event): - self._onUpdateUI = false - try: - if self.chbIdMap.has_key(event.GetId()): - ctrl, chb, prop, wid = self.chbIdMap[event.GetId()] - restore = not event.IsChecked() - if prop in ('fore', 'back'): - ctrl[0].Enable(restore) - ctrl[1].Enable(restore) - if restore: - # XXX use ctrl[1] !! - colStr = ctrl[1].GetValue() - #if prop == 'fore': colStr = self.fgColCb.GetValue() - #else: colStr = self.bgColCb.GetValue() - if colStr: self.editProp(true, prop, colStr) - else: - self.editProp(false, prop) - elif prop == 'size': - val = ctrl.GetValue() - if val: self.editProp(restore, prop, val) - ctrl.Enable(restore) - elif prop == 'face': - val = ctrl[0].GetStringSelection() - if val: self.editProp(restore, prop, val) - ctrl[0].Enable(restore) - ctrl[1].Enable(restore) - elif prop in ('bold', 'italic', 'underline', 'eolfilled'): - ctrl.Enable(restore) - if ctrl.GetValue(): self.editProp(restore, prop) - finally: - self._onUpdateUI = true + if self.chbIdMap.has_key(event.GetId()): + ctrl, chb, prop, wid = self.chbIdMap[event.GetId()] + restore = not event.IsChecked() + if prop in ('fore', 'back'): + cbtn, cmb, btn = ctrl + cbtn.Enable(restore) + cmb.Enable(restore) + btn.Enable(restore) + if restore: + colStr = cmb.GetValue() + #if prop == 'fore': colStr = self.fgColCb.GetValue() + #else: colStr = self.bgColCb.GetValue() + if colStr: self.editProp(True, prop, colStr) + else: + self.editProp(False, prop) + elif prop == 'size': + cmb, btn = ctrl + val = cmb.GetValue() + if val: self.editProp(restore, prop, val) + cmb.Enable(restore) + btn.Enable(restore) + elif prop == 'face': + cmb, btn, chk = ctrl + val = cmb.GetStringSelection() + if val: self.editProp(restore, prop, val) + cmb.Enable(restore) + btn.Enable(restore) + chk.Enable(restore) + elif prop in ('bold', 'italic', 'underline', 'eolfilled'): + ctrl.Enable(restore) + if ctrl.GetValue(): self.editProp(restore, prop) def OnOkbtnButton(self, event): # write styles and common defs to the config - writeStylesToConfig(self.config, 'style.%s'%self.lang, self.styles) - self.config.SetPath('') - self.config.Write(commonDefsFile, `self.commonDefs`) - self.config.Flush() - - for stc in self.STCsToUpdate: - setSTCStyles(stc, self.styles, self.styleIdNames, self.commonDefs, - self.lang, self.lexer, self.keywords) - + wxBeginBusyCursor() + try: + writeStylesToConfig(self.config, 'style.%s'%self.lang, self.styles) + self.config.SetPath('') + self.config.Write(commonDefsFile, `self.commonDefs`) + self.config.Flush() + + for stc in self.STCsToUpdate: + setSTCStyles(stc, self.styles, self.styleIdNames, self.commonDefs, + self.lang, self.lexer, self.keywords) + finally: + wxEndBusyCursor() self.EndModal(wxID_OK) def OnCancelbtnButton(self, event): self.EndModal(wxID_CANCEL) def OnCommondefsbtnButton(self, event): - dlg = wxTextEntryDialog(self, 'Edit common definitions dictionary', + dlg = wxTextEntryDialog(self, 'Edit common definitions dictionary', 'Common definitions', pprint.pformat(self.commonDefs), style=wxTE_MULTILINE | wxOK | wxCANCEL | wxCENTRE) try: @@ -726,7 +949,7 @@ class STCStyleEditDlg(wxDialog): self.commonDefs = oldDefs self.setStyles() self.populateCombosWithCommonDefs() - + finally: dlg.Destroy() @@ -755,7 +978,7 @@ class STCStyleEditDlg(wxDialog): self.commonDefs[name] = commonPropDefs[prop] self.elementLb.Append('%('+name+')'+\ (type(commonPropDefs[prop]) is type('') and 's' or 'd')) - self.elementLb.SetSelection(self.elementLb.Number()-1, true) + self.elementLb.SetSelection(self.elementLb.GetCount()-1, True) self.populateCombosWithCommonDefs() self.OnElementlbListbox(None) finally: @@ -763,8 +986,8 @@ class STCStyleEditDlg(wxDialog): def OnRemovesharebtnButton(self, event): ownGroup = 'style.%s'%self.lang - comDef = self.elementLb.GetStringSelection() - + comDef = self.elementLb.GetStringSelection() + # Search ALL styles before removing srchDct = {ownGroup: self.styles} srchDct.update(self.predefStyleGroups) @@ -785,22 +1008,21 @@ class STCStyleEditDlg(wxDialog): self.populateCombosWithCommonDefs() selIdx = self.elementLb.GetSelection() self.elementLb.Delete(selIdx) - if selIdx == self.elementLb.Number(): + if selIdx == self.elementLb.GetCount(): selIdx = selIdx - 1 - self.elementLb.SetSelection(selIdx, true) + self.elementLb.SetSelection(selIdx, True) self.OnElementlbListbox(None) #---STC events------------------------------------------------------------------ def OnUpdateUI(self, event): - if self._onUpdateUI: - styleBefore = self.stc.GetStyleAt(self.stc.GetCurrentPos()) - if self.styleIdNames.has_key(styleBefore): - self.elementLb.SetStringSelection(self.styleIdNames[styleBefore], - true) - else: - self.elementLb.SetSelection(0, false) - self.styleDefST.SetLabel('Style %d not defined, sorry.'%styleBefore) - self.OnElementlbListbox(None) + styleBefore = self.stc.GetStyleAt(self.stc.GetCurrentPos()) + if self.styleIdNames.has_key(styleBefore): + self.elementLb.SetStringSelection(self.styleIdNames[styleBefore], + True) + else: + self.elementLb.SetSelection(0, False) + self.styleDefST.SetLabel('Style %d not defined, sorry.'%styleBefore) + self.OnElementlbListbox(None) event.Skip() def checkBraces(self, style): @@ -825,10 +1047,10 @@ class STCStyleEditDlg(wxDialog): event.Skip() def OnMarginClick(self, event): - self.elementLb.SetStringSelection('Line numbers', true) + self.elementLb.SetStringSelection('Line numbers', True) self.OnElementlbListbox(None) - + #---Common definition dialog---------------------------------------------------- [wxID_COMMONDEFDLG, wxID_COMMONDEFDLGCANCELBTN, wxID_COMMONDEFDLGCOMDEFNAMETC, wxID_COMMONDEFDLGOKBTN, wxID_COMMONDEFDLGPROPTYPERBX, wxID_COMMONDEFDLGSTATICBOX1] = map(lambda _init_ctrls: wxNewId(), range(6)) @@ -836,20 +1058,20 @@ class STCStyleEditDlg(wxDialog): class CommonDefDlg(wxDialog): def _init_ctrls(self, prnt): wxDialog.__init__(self, id = wxID_COMMONDEFDLG, name = 'CommonDefDlg', parent = prnt, pos = wxPoint(398, 249), size = wxSize(192, 220), style = wxDEFAULT_DIALOG_STYLE, title = 'Common definition') - self.SetClientSize(wxSize(184, 175)) + self.SetClientSize(wxSize(184, 200)) - self.propTypeRBx = wxRadioBox(choices = ['Colour value', 'Font face', 'Size value'], id = wxID_COMMONDEFDLGPROPTYPERBX, label = 'Common definition property type', majorDimension = 1, name = 'propTypeRBx', parent = self, point = wxPoint(8, 8), size = wxSize(168, 72), style = wxRA_SPECIFY_COLS, validator = wxDefaultValidator) + self.propTypeRBx = wxRadioBox(choices = ['Colour value', 'Font face', 'Size value'], id = wxID_COMMONDEFDLGPROPTYPERBX, label = 'Property type', majorDimension = 1, name = 'propTypeRBx', parent = self, point = wxPoint(8, 8), size = wxSize(168, 92), style = wxRA_SPECIFY_COLS, validator = wxDefaultValidator) self.propTypeRBx.SetSelection(self._propTypeIdx) - self.staticBox1 = wxStaticBox(id = wxID_COMMONDEFDLGSTATICBOX1, label = 'Name', name = 'staticBox1', parent = self, pos = wxPoint(8, 88), size = wxSize(168, 46), style = 0) + self.staticBox1 = wxStaticBox(id = wxID_COMMONDEFDLGSTATICBOX1, label = 'Name', name = 'staticBox1', parent = self, pos = wxPoint(8, 108), size = wxSize(168, 46), style = 0) - self.comDefNameTC = wxTextCtrl(id = wxID_COMMONDEFDLGCOMDEFNAMETC, name = 'comDefNameTC', parent = self, pos = wxPoint(16, 104), size = wxSize(152, 21), style = 0, value = '') + self.comDefNameTC = wxTextCtrl(id = wxID_COMMONDEFDLGCOMDEFNAMETC, name = 'comDefNameTC', parent = self, pos = wxPoint(16, 124), size = wxSize(152, 21), style = 0, value = '') self.comDefNameTC.SetLabel(self._comDefName) - self.okBtn = wxButton(id = wxID_COMMONDEFDLGOKBTN, label = 'OK', name = 'okBtn', parent = self, pos = wxPoint(8, 144), size = wxSize(80, 23), style = 0) + self.okBtn = wxButton(id = wxID_COMMONDEFDLGOKBTN, label = 'OK', name = 'okBtn', parent = self, pos = wxPoint(8, 164), size = wxSize(80, 23), style = 0) EVT_BUTTON(self.okBtn, wxID_COMMONDEFDLGOKBTN, self.OnOkbtnButton) - self.cancelBtn = wxButton(id = wxID_COMMONDEFDLGCANCELBTN, label = 'Cancel', name = 'cancelBtn', parent = self, pos = wxPoint(96, 144), size = wxSize(80, 23), style = 0) + self.cancelBtn = wxButton(id = wxID_COMMONDEFDLGCANCELBTN, label = 'Cancel', name = 'cancelBtn', parent = self, pos = wxPoint(96, 164), size = wxSize(80, 23), style = 0) EVT_BUTTON(self.cancelBtn, wxID_COMMONDEFDLGCANCELBTN, self.OnCancelbtnButton) def __init__(self, parent, name='', propIdx=0): @@ -858,8 +1080,8 @@ class CommonDefDlg(wxDialog): self._propTypeIdx = 0 self._propTypeIdx = propIdx self._init_ctrls(parent) - - self.propMap = {0: 'fore', 1: 'face', 2: 'size'} + + self.propMap = {0: 'fore', 1: 'face', 2: 'size'} self.result = ( '', '' ) self.Center(wxBOTH) @@ -872,15 +1094,15 @@ class CommonDefDlg(wxDialog): def OnCancelbtnButton(self, event): self.result = ( '', '' ) self.EndModal(wxID_CANCEL) - + #---Functions useful outside of the editor---------------------------------- - + def setSelectionColour(stc, style): names, values = parseProp(style) if 'fore' in names: - stc.SetSelForeground(true, strToCol(values['fore'])) + stc.SetSelForeground(True, strToCol(values['fore'])) if 'back' in names: - stc.SetSelBackground(true, strToCol(values['back'])) + stc.SetSelBackground(True, strToCol(values['back'])) def setCursorColour(stc, style): names, values = parseProp(style) @@ -894,11 +1116,11 @@ def setEdgeColour(stc, style): def strToCol(strCol): assert len(strCol) == 7 and strCol[0] == '#', 'Not a valid colour string' - return wxColour(string.atoi('0x'+strCol[1:3], 16), - string.atoi('0x'+strCol[3:5], 16), + return wxColour(string.atoi('0x'+strCol[1:3], 16), + string.atoi('0x'+strCol[3:5], 16), string.atoi('0x'+strCol[5:7], 16)) def colToStr(col): - return '#%s%s%s' % (string.zfill(string.upper(hex(col.Red())[2:]), 2), + return '#%s%s%s' % (string.zfill(string.upper(hex(col.Red())[2:]), 2), string.zfill(string.upper(hex(col.Green())[2:]), 2), string.zfill(string.upper(hex(col.Blue())[2:]), 2)) @@ -927,12 +1149,13 @@ def parseProp(prop): else: values[nameVal[0]] = string.strip(nameVal[1]) return names, values - + def parsePropLine(prop): name, value = string.split(prop, '=') return int(string.split(name, '.')[-1]), value def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords): + #wxLogMessage('Set style') styleDict = {} styleNumIdxMap = {} @@ -953,12 +1176,24 @@ def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords): newStyles.append(writeProp(num, styleDict[num], lang)) idx = idx + 1 + # Set background colour to reduce flashing effect on refresh or page switch + bkCol = None + if styleDict.has_key(0): prop = styleDict[0] + else: prop = styleDict[wxSTC_STYLE_DEFAULT] + names, vals = parseProp(prop) + if 'back' in names: + bkCol = strToCol(vals['back']) + if bkCol is None: + bkCol = wxWHITE + stc.SetBackgroundColour(bkCol) + # Set the styles on the wxSTC +# stc.Show(False) stc.StyleResetDefault() stc.ClearDocumentStyle() stc.SetLexer(lexer) stc.SetKeyWords(0, keywords) - stc.StyleSetSpec(wxSTC_STYLE_DEFAULT, + stc.StyleSetSpec(wxSTC_STYLE_DEFAULT, styleDict[wxSTC_STYLE_DEFAULT] % commonDefs) stc.StyleClearAll() @@ -973,15 +1208,19 @@ def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords): setEdgeColour(stc, style % commonDefs) stc.Colourise(0, stc.GetTextLength()) - +# stc.Show(True) + return newStyles, styleDict, styleNumIdxMap #---Config reading and writing ------------------------------------------------- commonDefsFile = 'common.defs.%s'%(wxPlatform == '__WXMSW__' and 'msw' or 'gtk') +def readPyValFromConfig(conf, name): + return eval(string.replace(conf.Read(name), '\r\n', '\n')+'\n') + def initFromConfig(configFile, lang): cfg = wxFileConfig(localFilename=configFile, style=wxCONFIG_USE_LOCAL_FILE) - cfg.SetExpandEnvVars(false) + cfg.SetExpandEnvVars(False) # read in all group names for this language groupPrefix = 'style.%s'%lang @@ -994,30 +1233,30 @@ def initFromConfig(configFile, lang): predefStyleGroupNames.append(val) else: otherLangStyleGroupNames.append(val) - + cont, val, idx = cfg.GetNextGroup(idx) - + # read in common elements - commonDefs = eval(cfg.Read(commonDefsFile)) + commonDefs = readPyValFromConfig(cfg, commonDefsFile) assert type(commonDefs) is type({}), \ 'Common definitions (%s) not a valid dict'%commonDefsFile - commonStyleIdNames = eval(cfg.Read('common.styleidnames')) + commonStyleIdNames = readPyValFromConfig(cfg, 'common.styleidnames') assert type(commonStyleIdNames) is type({}), \ 'Common definitions (%s) not a valid dict'%'common.styleidnames' # Lang spesific settings - cfg.SetPath(lang) - styleIdNames = eval(cfg.Read('styleidnames')) + cfg.SetPath(lang) + styleIdNames = readPyValFromConfig(cfg, 'styleidnames') assert type(commonStyleIdNames) is type({}), \ 'Not a valid dict [%s] styleidnames)'%lang styleIdNames.update(commonStyleIdNames) - braceInfo = eval(cfg.Read('braces')) + braceInfo = readPyValFromConfig(cfg, 'braces') assert type(commonStyleIdNames) is type({}), \ 'Not a valid dict [%s] braces)'%lang - + displaySrc = cfg.Read('displaysrc') - lexer = eval(cfg.Read('lexer')) + lexer = readPyValFromConfig(cfg, 'lexer') keywords = cfg.Read('keywords') cfg.SetPath('') @@ -1025,7 +1264,7 @@ def initFromConfig(configFile, lang): # read in current styles styles = readStylesFromConfig(cfg, groupPrefix) - # read in predefined styles + # read in predefined styles predefStyleGroups = {} for group in predefStyleGroupNames: predefStyleGroups[group] = readStylesFromConfig(cfg, group) @@ -1034,14 +1273,14 @@ def initFromConfig(configFile, lang): otherLangStyleGroups = {} for group in otherLangStyleGroupNames: otherLangStyleGroups[group] = readStylesFromConfig(cfg, group) - - return (cfg, commonDefs, styleIdNames, styles, predefStyleGroupNames, + + return (cfg, commonDefs, styleIdNames, styles, predefStyleGroupNames, predefStyleGroups, otherLangStyleGroupNames, otherLangStyleGroups, displaySrc, lexer, keywords, braceInfo) def readStylesFromConfig(config, group): config.SetPath('') - config.SetPath(group) + config.SetPath(group) styles = [] cont, val, idx = config.GetFirstEntry() while cont: @@ -1065,17 +1304,23 @@ def writeStylesToConfig(config, group, styles): #------------------------------------------------------------------------------- def initSTC(stc, config, lang): """ Main module entry point. Initialise a wxSTC from given config file.""" - (cfg, commonDefs, styleIdNames, styles, predefStyleGroupNames, + (cfg, commonDefs, styleIdNames, styles, predefStyleGroupNames, predefStyleGroups, otherLangStyleGroupNames, otherLangStyleGroups, displaySrc, lexer, keywords, braceInfo) = initFromConfig(config, lang) - + setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords) #------------------------------------------------------------------------------- if __name__ == '__main__': + from wxPython.help import * + app = wxPySimpleApp() - config = os.path.abspath('stc-styles.rc.cfg') - + + provider = wxSimpleHelpProvider() + wxHelpProvider_Set(provider) + + base = os.path.split(__file__)[0] + config = os.path.abspath(os.path.join(base, 'stc-styles.rc.cfg')) if 0: f = wxFrame(None, -1, 'Test frame (double click for editor)') stc = wxStyledTextCtrl(f, -1) @@ -1086,16 +1331,16 @@ if __name__ == '__main__': stc.SetText(open('STCStyleEditor.py').read()) EVT_LEFT_DCLICK(stc, OnDblClick) initSTC(stc, config, 'python') - f.Show(true) + f.Show(True) app.MainLoop() else: - dlg = STCStyleEditDlg(None, + dlg = STCStyleEditDlg(None, 'Python', 'python', #'HTML', 'html', #'XML', 'xml', - #'C++', 'cpp', - #'Text', 'text', - #'Properties', 'prop', + #'C++', 'cpp', + #'Text', 'text', + #'Properties', 'prop', config) try: dlg.ShowModal() finally: dlg.Destroy()