#
# Created: 2001/08/20
# RCS-ID: $Id$
-# Copyright: (c) 2001 Riaan Booysen
-# Licence: wxWindows license
+# Copyright: (c) 2001 - 2005 Riaan Booysen
+# Licence: wxWidgets license
#-----------------------------------------------------------------------------
#Boa:Dialog:STCStyleEditDlg
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
+This is also used to store platform specific settings as fonts and sizes
vary with platform.
The following items are defined in the stc-styles.rc.cfg file.
common.defs.msw - Common definition dictionary used on wxMSW
common.defs.gtk - Common definition dictionary used on wxGTK
+common.defs.mac - Common definition dictionary used on wxMAC
common.styleidnames - STC styles shared by all languages
Each supported language defines the following groups:
brace matching (both keys optional)
keywords - Space separated list of keywords
lexer - wxSTC constant for the language lexer
-styleidnames - Dictionary of language spesific style numbers and names
+styleidnames - Dictionary of language specific style numbers and names
[style.<language>] - The users current style values
[style.<language>.default] - Default style values (can be reverted from)
0 or more predefined style groups or 'themes'
[style.<language>.<predefined name>]
-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).
import os, sys, string, pprint, copy
-from wxPython.wx import *
-from wxPython.lib.anchors import LayoutAnchors
-from wxPython.stc import *
+import wx
+from wx.lib.anchors import LayoutAnchors
+import wx.stc
+import wxPython.stc # needed names from 2.4 for config files
settingsIdNames = {-1: 'Selection', -2: 'Caret', -3: 'Edge'}
-commonPropDefs = {'fore': '#888888', 'size': 8,
- 'face': wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT).GetFaceName()}
+commonPropDefs = {'fore': '#888888', 'size': 8,
+ 'face': ''}
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))
-
-class STCStyleEditDlg(wxDialog):
+ '----Language----': 'Styles specific 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'}
+
+platformSettings = {'__WXMSW__': ('msw', 8),
+ '__WXGTK__': ('gtk', 10),
+ '__WXMAC__': ('mac', 11)}
+
+[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,
+] = [wx.NewId() for _init_ctrls in range(47)]
+
+class STCStyleEditDlg(wx.Dialog):
""" Style editor for the wxStyledTextCtrl """
- _custom_classes = {'wxWindow' : ['wxStyledTextCtrl']}
- def _init_utils(self):
- 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)
- self._init_utils()
- self.SetClientSize(wxSize(417, 454))
- self.SetAutoLayout(true)
+ _custom_classes = {'wx.Window': ['wx.stc.StyledTextCtrl'],}
+ def _init_ctrls(self, prnt):
+ # generated method, don't edit
+ wx.Dialog.__init__(self, id=wxID_STCSTYLEEDITDLG,
+ name='STCStyleEditDlg', parent=prnt, pos=wx.Point(567, 292),
+ size=wx.Size(493, 482),
+ style=wx.WANTS_CHARS | wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+ title=self.stc_title)
+ self.SetClientSize(wx.Size(485, 455))
+ self.SetAutoLayout(True)
self.SetSizeHints(425, 400, -1, -1)
- 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.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.staticText6 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT6, label = 'Style', name = 'staticText6', parent = self, pos = wxPoint(8, 56), size = wxSize(23, 13), style = 0)
+ self.Center(wx.BOTH)
+ self.Bind(wx.EVT_SIZE, self.OnStcstyleeditdlgSize)
+
+ self.speedsettingCh = wx.Choice(choices=[],
+ id=wxID_STCSTYLEEDITDLGSPEEDSETTINGCH, name='speedsettingCh',
+ parent=self, pos=wx.Point(96, 28), size=wx.Size(380, 21),
+ style=0)
+ 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.')
+ self.speedsettingCh.Bind(wx.EVT_CHOICE, self.OnSpeedsettingchChoice,
+ id=wxID_STCSTYLEEDITDLGSPEEDSETTINGCH)
+
+ self.elementLb = wx.ListBox(choices=[],
+ id=wxID_STCSTYLEEDITDLGELEMENTLB, name='elementLb', parent=self,
+ pos=wx.Point(8, 70), size=wx.Size(175, 128), style=0)
+ 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.')
+ self.elementLb.Bind(wx.EVT_LISTBOX, self.OnElementlbListbox,
+ id=wxID_STCSTYLEEDITDLGELEMENTLB)
+
+ self.addCommonItemBtn = wx.Button(id=wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN,
+ label='Add', name='addCommonItemBtn', parent=self, pos=wx.Point(8,
+ 200), size=wx.Size(88, 17), style=0)
+ self.addCommonItemBtn.SetToolTipString('Add new Common definition')
+ self.addCommonItemBtn.Bind(wx.EVT_BUTTON, self.OnAddsharebtnButton,
+ id=wxID_STCSTYLEEDITDLGADDCOMMONITEMBTN)
- 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.removeCommonItemBtn = wx.Button(id=wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN,
+ label='Remove', name='removeCommonItemBtn', parent=self,
+ pos=wx.Point(96, 200), size=wx.Size(88, 17), style=0)
+ self.removeCommonItemBtn.SetToolTipString('Remove the selected Common definition')
+ self.removeCommonItemBtn.Bind(wx.EVT_BUTTON,
+ self.OnRemovesharebtnButton,
+ id=wxID_STCSTYLEEDITDLGREMOVECOMMONITEMBTN)
+
+ self.styleDefST = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTYLEDEFST,
+ label='(nothing selected)', name='styleDefST', parent=self,
+ pos=wx.Point(96, 8), size=wx.Size(376, 16),
+ style=wx.ST_NO_AUTORESIZE)
+ self.styleDefST.SetFont(wx.Font(self.style_font_size, wx.SWISS,
+ wx.NORMAL, wx.BOLD, False, ''))
+ self.styleDefST.SetConstraints(LayoutAnchors(self.styleDefST, True,
+ True, True, False))
+
+ self.staticLine1 = wx.StaticLine(id=wxID_STCSTYLEEDITDLGSTATICLINE1,
+ name='staticLine1', parent=self, pos=wx.Point(48, 64),
+ size=wx.Size(135, 0), style=wx.LI_HORIZONTAL)
+ self.staticLine1.SetConstraints(LayoutAnchors(self.staticLine1, True,
+ True, True, False))
+
+ self.staticText6 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT6,
+ label='Style', name='staticText6', parent=self, pos=wx.Point(8,
+ 56), size=wx.Size(40, 13), style=0)
+
+ self.staticText8 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT8,
+ label='Style def:', name='staticText8', parent=self,
+ pos=wx.Point(8, 8), size=wx.Size(88, 13), style=0)
+
+ self.staticText9 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT9,
+ label='SpeedSetting:', name='staticText9', parent=self,
+ pos=wx.Point(8, 32), size=wx.Size(88, 13), style=0)
+
+ self.panel3 = wx.Panel(id=wxID_STCSTYLEEDITDLGPANEL3, name='panel3',
+ parent=self, pos=wx.Point(199, 56), size=wx.Size(160, 120),
+ style=wx.TAB_TRAVERSAL)
+ self.panel3.SetConstraints(LayoutAnchors(self.panel3, False, True, True,
+ False))
+
+ self.panel4 = wx.Panel(id=wxID_STCSTYLEEDITDLGPANEL4, name='panel4',
+ parent=self, pos=wx.Point(364, 56), size=wx.Size(114, 120),
+ style=wx.TAB_TRAVERSAL)
+ self.panel4.SetConstraints(LayoutAnchors(self.panel4, False, True, True,
+ False))
+
+ self.panel1 = wx.Panel(id=wxID_STCSTYLEEDITDLGPANEL1, name='panel1',
+ parent=self, pos=wx.Point(202, 177), size=wx.Size(149, 40),
+ style=wx.TAB_TRAVERSAL)
+ self.panel1.SetConstraints(LayoutAnchors(self.panel1, False, True, True,
+ False))
+
+ self.panel2 = wx.Panel(id=wxID_STCSTYLEEDITDLGPANEL2, name='panel2',
+ parent=self, pos=wx.Point(364, 178), size=wx.Size(112, 40),
+ style=wx.TAB_TRAVERSAL)
+ self.panel2.SetConstraints(LayoutAnchors(self.panel2, False, True, True,
+ False))
+
+ self.stc = wx.stc.StyledTextCtrl(id=wxID_STCSTYLEEDITDLGSTC, name='stc',
+ parent=self, pos=wx.Point(8, 224), size=wx.Size(469, 191),
+ style=wx.SUNKEN_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 specific style to select the style for editing in the editors above.')
+ self.stc.Bind(wx.EVT_LEFT_UP, self.OnUpdateUI)
+ self.stc.Bind(wx.EVT_KEY_UP, self.OnUpdateUI)
+
+ self.contextHelpButton1 = wx.ContextHelpButton(parent=self,
+ pos=wx.Point(8, 423), size=wx.Size(24, 24), style=wx.BU_AUTODRAW)
+ self.contextHelpButton1.SetConstraints(LayoutAnchors(self.contextHelpButton1,
+ True, False, False, True))
+
+ self.okBtn = wx.Button(id=wxID_STCSTYLEEDITDLGOKBTN, label='OK',
+ name='okBtn', parent=self, pos=wx.Point(316, 423),
+ size=wx.Size(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.okBtn.Bind(wx.EVT_BUTTON, self.OnOkbtnButton,
+ id=wxID_STCSTYLEEDITDLGOKBTN)
+
+ self.cancelBtn = wx.Button(id=wxID_STCSTYLEEDITDLGCANCELBTN,
+ label='Cancel', name='cancelBtn', parent=self, pos=wx.Point(400,
+ 423), size=wx.Size(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.cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancelbtnButton,
+ id=wxID_STCSTYLEEDITDLGCANCELBTN)
- self.staticText8 = wxStaticText(id = wxID_STCSTYLEEDITDLGSTATICTEXT8, label = 'Style def:', name = 'staticText8', parent = self, pos = wxPoint(8, 8), size = wxSize(44, 13), style = 0)
+ self.staticText4 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT4,
+ label='Face:', name='staticText4', parent=self.panel1,
+ pos=wx.Point(0, 0), size=wx.Size(48, 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)
-
- self.faceDefCb = wxCheckBox(id = wxID_STCSTYLEEDITDLGFACEDEFCB, label = 'checkBox1', name = 'faceDefCb', parent = self.panel1, pos = wxPoint(104, 0), size = wxSize(16, 16), 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 = wx.CheckBox(id=wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK,
+ label='', name='fixedWidthChk', parent=self.panel1,
+ pos=wx.Point(0, 23), size=wx.Size(16, 19), style=0)
self.fixedWidthChk.SetToolTipString('Check this for Fixed Width fonts')
- EVT_CHECKBOX(self.fixedWidthChk, wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK, self.OnFixedwidthchkCheckbox)
-
- 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.fixedWidthChk.Bind(wx.EVT_CHECKBOX, self.OnFixedwidthchkCheckbox,
+ id=wxID_STCSTYLEEDITDLGFIXEDWIDTHCHK)
+
+ self.faceCb = wx.ComboBox(choices=[], id=wxID_STCSTYLEEDITDLGFACECB,
+ name='faceCb', parent=self.panel1, pos=wx.Point(17, 18),
+ size=wx.Size(101, 21), style=0, value='')
+
+ self.staticText7 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT7,
+ label='Size:', name='staticText7', parent=self.panel2,
+ pos=wx.Point(0, 0), size=wx.Size(40, 13), style=0)
+
+ self.sizeCb = wx.ComboBox(choices=[], id=wxID_STCSTYLEEDITDLGSIZECB,
+ name='sizeCb', parent=self.panel2, pos=wx.Point(0, 17),
+ size=wx.Size(80, 21), style=0, value='')
+
+ self.sizeOkBtn = wx.Button(id=wxID_STCSTYLEEDITDLGSIZEOKBTN, label='ok',
+ name='sizeOkBtn', parent=self.panel2, pos=wx.Point(80, 17),
+ size=wx.Size(32, 21), style=0)
+
+ self.faceOkBtn = wx.Button(id=wxID_STCSTYLEEDITDLGFACEOKBTN, label='ok',
+ name='faceOkBtn', parent=self.panel1, pos=wx.Point(117, 18),
+ size=wx.Size(32, 21), style=0)
+
+ self.fgColBtn = wx.Button(id=wxID_STCSTYLEEDITDLGFGCOLBTN,
+ label='Foreground', name='fgColBtn', parent=self.panel3,
+ pos=wx.Point(8, 16), size=wx.Size(96, 16), style=0)
+ self.fgColBtn.Bind(wx.EVT_BUTTON, self.OnFgcolbtnButton,
+ id=wxID_STCSTYLEEDITDLGFGCOLBTN)
+
+ self.fgColCb = wx.ComboBox(choices=[], id=wxID_STCSTYLEEDITDLGFGCOLCB,
+ name='fgColCb', parent=self.panel3, pos=wx.Point(8, 32),
+ size=wx.Size(96, 21), style=0, value='')
+
+ self.fgColOkBtn = wx.Button(id=wxID_STCSTYLEEDITDLGFGCOLOKBTN,
+ label='ok', name='fgColOkBtn', parent=self.panel3,
+ pos=wx.Point(104, 32), size=wx.Size(32, 21), style=0)
+
+ self.staticText3 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT3,
+ label='default', name='staticText3', parent=self.panel3,
+ pos=wx.Point(112, 15), size=wx.Size(38, 16), style=0)
+
+ self.fgColDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGFGCOLDEFCB,
+ label='checkBox1', name='fgColDefCb', parent=self.panel3,
+ pos=wx.Point(136, 31), size=wx.Size(16, 16), style=0)
+
+ self.bgColBtn = wx.Button(id=wxID_STCSTYLEEDITDLGBGCOLBTN,
+ label='Background', name='bgColBtn', parent=self.panel3,
+ pos=wx.Point(8, 64), size=wx.Size(96, 16), style=0)
+ self.bgColBtn.Bind(wx.EVT_BUTTON, self.OnBgcolbtnButton,
+ id=wxID_STCSTYLEEDITDLGBGCOLBTN)
+
+ self.bgColCb = wx.ComboBox(choices=[], id=wxID_STCSTYLEEDITDLGBGCOLCB,
+ name='bgColCb', parent=self.panel3, pos=wx.Point(8, 80),
+ size=wx.Size(96, 21), style=0, value='')
+
+ self.bgColOkBtn = wx.Button(id=wxID_STCSTYLEEDITDLGBGCOLOKBTN,
+ label='ok', name='bgColOkBtn', parent=self.panel3,
+ pos=wx.Point(104, 80), size=wx.Size(32, 21), style=0)
+
+ self.staticBox2 = wx.StaticBox(id=wxID_STCSTYLEEDITDLGSTATICBOX2,
+ label='Text attributes', name='staticBox2', parent=self.panel4,
+ pos=wx.Point(0, 0), size=wx.Size(112, 112), style=0)
+ self.staticBox2.SetConstraints(LayoutAnchors(self.staticBox2, False,
+ True, True, False))
+ self.staticBox2.SetHelpText('Text attribute flags.')
+
+ self.staticText2 = wx.StaticText(id=wxID_STCSTYLEEDITDLGSTATICTEXT2,
+ label='default', name='staticText2', parent=self.panel4,
+ pos=wx.Point(64, 12), size=wx.Size(40, 16), style=0)
+
+ self.taBoldDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTABOLDDEFCB,
+ label='checkBox1', name='taBoldDefCb', parent=self.panel4,
+ pos=wx.Point(88, 27), size=wx.Size(16, 16), style=0)
+
+ self.taItalicDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAITALICDEFCB,
+ label='checkBox1', name='taItalicDefCb', parent=self.panel4,
+ pos=wx.Point(88, 48), size=wx.Size(16, 16), style=0)
+
+ self.taUnderlinedDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB,
+ label='checkBox1', name='taUnderlinedDefCb', parent=self.panel4,
+ pos=wx.Point(88, 70), size=wx.Size(16, 16), style=0)
+
+ self.taEOLfilledDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB,
+ label='checkBox1', name='taEOLfilledDefCb', parent=self.panel4,
+ pos=wx.Point(88, 92), size=wx.Size(16, 16), style=0)
+
+ self.taEOLfilledCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAEOLFILLEDCB,
+ label='EOL filled', name='taEOLfilledCb', parent=self.panel4,
+ pos=wx.Point(8, 92), size=wx.Size(80, 16), style=0)
+ self.taEOLfilledCb.Bind(wx.EVT_CHECKBOX, self.OnTaeoffilledcbCheckbox,
+ id=wxID_STCSTYLEEDITDLGTAEOLFILLEDCB)
+
+ self.taUnderlinedCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAUNDERLINEDCB,
+ label='Underlined', name='taUnderlinedCb', parent=self.panel4,
+ pos=wx.Point(8, 70), size=wx.Size(80, 16), style=0)
+ self.taUnderlinedCb.Bind(wx.EVT_CHECKBOX, self.OnTaunderlinedcbCheckbox,
+ id=wxID_STCSTYLEEDITDLGTAUNDERLINEDCB)
+
+ self.taItalicCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTAITALICCB,
+ label='Italic', name='taItalicCb', parent=self.panel4,
+ pos=wx.Point(8, 48), size=wx.Size(80, 16), style=0)
+ self.taItalicCb.Bind(wx.EVT_CHECKBOX, self.OnTaitaliccbCheckbox,
+ id=wxID_STCSTYLEEDITDLGTAITALICCB)
+
+ self.taBoldCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTABOLDCB,
+ label='Bold', name='taBoldCb', parent=self.panel4, pos=wx.Point(8,
+ 27), size=wx.Size(80, 16), style=0)
+ self.taBoldCb.Bind(wx.EVT_CHECKBOX, self.OnTaboldcbCheckbox,
+ id=wxID_STCSTYLEEDITDLGTABOLDCB)
+
+ self.bgColDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGBGCOLDEFCB,
+ label='checkBox1', name='bgColDefCb', parent=self.panel3,
+ pos=wx.Point(136, 79), size=wx.Size(16, 16), style=0)
+
+ self.staticBox1 = wx.StaticBox(id=wxID_STCSTYLEEDITDLGSTATICBOX1,
+ label='Colour', name='staticBox1', parent=self.panel3,
+ pos=wx.Point(0, 0), size=wx.Size(157, 112), style=0)
+ self.staticBox1.SetConstraints(LayoutAnchors(self.staticBox1, False,
+ True, True, False))
+
+ self.faceDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGFACEDEFCB,
+ label='checkBox1', name='faceDefCb', parent=self.panel1,
+ pos=wx.Point(117, 0), size=wx.Size(16, 16), style=0)
+
+ self.taSizeDefCb = wx.CheckBox(id=wxID_STCSTYLEEDITDLGTASIZEDEFCB,
+ label='checkBox1', name='taSizeDefCb', parent=self.panel2,
+ pos=wx.Point(80, 0), size=wx.Size(16, 16), style=0)
+
+ 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()
+ self.style_font_size = 8
+ self.style_font_size = platformSettings[wx.Platform][1]
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
+ self._blockUpdate = False
- 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,
+ global commonPropDefs
+ commonPropDefs = {'fore': '#888888', 'size': 8,
+ 'face': wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT).GetFaceName()}
+
+ 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.SetMarginType(margin, wx.stc.STC_MARGIN_NUMBER)
self.stc.SetMarginWidth(margin, 25)
- self.stc.SetMarginSensitive(margin, true)
- EVT_STC_MARGINCLICK(self.stc, wxID_STCSTYLEEDITDLGSTC, self.OnMarginClick)
+ self.stc.SetMarginSensitive(margin, True)
+ self.stc.Bind(wx.stc.EVT_STC_MARGINCLICK, self.OnMarginClick, id=wxID_STCSTYLEEDITDLGSTC)
- self.stc.SetUseTabs(false)
+ self.stc.SetUseTabs(False)
self.stc.SetTabWidth(4)
- self.stc.SetIndentationGuides(true)
- self.stc.SetEdgeMode(wxSTC_EDGE_BACKGROUND)
+ self.stc.SetIndentationGuides(True)
+ self.stc.SetEdgeMode(wx.stc.STC_EDGE_BACKGROUND)
self.stc.SetEdgeColumn(44)
-
+
self.setStyles()
self.populateStyleSelector()
self.defNames, self.defValues = parseProp(\
- self.styleDict.get(wxSTC_STYLE_DEFAULT, ''))
-
+ self.styleDict.get(wx.stc.STC_STYLE_DEFAULT, ''))
self.stc.SetText(self.displaySrc)
self.stc.EmptyUndoBuffer()
self.stc.SetCurrentPos(self.stc.GetTextLength())
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.Bind(wx.EVT_CHECKBOX, self.OnDefaultCheckBox, id=wid)
chb.SetToolTipString('Toggle defaults')
-
- self.Center(wxBOTH)
- self._onUpdateUI = true
-
+
+ self.Center(wx.BOTH)
+
#---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:
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, '\
+ wx.LogError('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':
+ #if not self.values:
+ # return
+
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:
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
+ if style.find(txt) != -1:
+ return True
+ return False
def rememberStyles(self):
return self.names[:], copy.copy(self.values)
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(\
+ wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
+ cbtn.SetForegroundColour(wx.Colour(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(wx.Colour(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,
+ self.clearCtrls(self.styleNum == wx.stc.STC_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.styleNum != wxSTC_STYLE_DEFAULT)
+ self.populateProp(self.defValues.items(), True,
+ self.styleNum != wx.stc.STC_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)]))
- 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)')
+ def bindComboEvts(self, combo, btn, btnEvtMeth, comboEvtMeth, rdclickEvtMeth):
+ combo.Bind(wx.EVT_COMBOBOX, comboEvtMeth, id=combo.GetId())
+ btn.Bind(wx.EVT_BUTTON, btnEvtMeth, id=btn.GetId())
+ combo.Bind(wx.EVT_RIGHT_DCLICK, rdclickEvtMeth)
+ 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 = wx.FontEnumerator()
+ fontEnum.EnumerateFacenames(fixedWidthOnly=fixedWidthOnly)
+ fontNameList = fontEnum.GetFacenames()
+ fontNameList.sort()
+
+ 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()
extrOffset = 0
# 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()
+ if num == wx.stc.STC_STYLE_DEFAULT:
+ 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
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:
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 = wx.ColourData()
data.SetColour(colour)
- data.SetChooseFull(true)
- dlg = wxColourDialog(self, data)
+ data.SetChooseFull(True)
+ dlg = wx.ColourDialog(self, data)
try:
dlg.SetTitle(title)
- if dlg.ShowModal() == wxID_OK:
+ if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetColourData()
return data.GetColour()
finally:
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:
- colBtn.SetForegroundColour(wxColour(0, 0, 0))
+ if col:
+ colBtn.SetForegroundColour(wx.Colour(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')
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:
- colBtn.SetForegroundColour(wxColour(0, 0, 0))
+ if colStr:
+ colBtn.SetForegroundColour(wx.Colour(0, 0, 0))
colBtn.SetBackgroundColour(col)
else:
- colBtn.SetForegroundColour(wxColour(255, 255, 255))
+ colBtn.SetForegroundColour(wx.Colour(255, 255, 255))
colBtn.SetBackgroundColour(\
- wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNFACE))
+ wxSystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE))
def OnfgColRet(self, event):
try: self.editColTCProp(self.fgColCb, self.fgColBtn, 'fore')
- except AssertionError: wxLogError('Not a valid colour value')
+ except AssertionError: wx.LogError('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: wx.LogError('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')
+ except AssertionError: wx.LogError('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: wx.LogError('Not a valid colour value')
#---Text attribute events-------------------------------------------------------
def OnTaeoffilledcbCheckbox(self, event):
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')
+ except KeyError: wx.LogError('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')
+ except ValueError: wx.LogError('Not a valid integer size value')
+ except KeyError: wx.LogError('Invalid common definition')
else: self.editProp(val!='', 'size', val)
#---Main GUI events-------------------------------------------------------------
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:
+ if self.styleNum == wx.stc.STC_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)
-
- self.EndModal(wxID_OK)
+ wx.BeginBusyCursor()
+ 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:
+ wx.EndBusyCursor()
+ self.EndModal(wx.ID_OK)
def OnCancelbtnButton(self, event):
- self.EndModal(wxID_CANCEL)
+ self.EndModal(wx.ID_CANCEL)
def OnCommondefsbtnButton(self, event):
- dlg = wxTextEntryDialog(self, 'Edit common definitions dictionary',
+ dlg = wx.TextEntryDialog(self, 'Edit common definitions dictionary',
'Common definitions', pprint.pformat(self.commonDefs),
- style=wxTE_MULTILINE | wxOK | wxCANCEL | wxCENTRE)
+ style=wx.TE_MULTILINE | wx.OK | wx.CANCEL | wx.CENTRE)
try:
- if dlg.ShowModal() == wxID_OK:
- answer = eval(dlg.GetValue())
+ if dlg.ShowModal() == wx.ID_OK:
+ answer = eval(dlg.GetValue(), stc.__dict__)
assert type(answer) is type({}), 'Not a valid dictionary'
oldDefs = self.commonDefs
self.commonDefs = answer
try:
self.setStyles()
except KeyError, badkey:
- wxLogError(str(badkey)+' not defined but required, \n'\
+ wx.LogError(str(badkey)+' not defined but required, \n'\
'reverting to previous common definition')
self.commonDefs = oldDefs
self.setStyles()
self.populateCombosWithCommonDefs()
-
+
finally:
dlg.Destroy()
self.styles = self.predefStyleGroups[group]
self.setStyles()
self.defNames, self.defValues = parseProp(\
- self.styleDict.get(wxSTC_STYLE_DEFAULT, ''))
+ self.styleDict.get(wx.stc.STC_STYLE_DEFAULT, ''))
self.OnElementlbListbox(None)
self.currSpeedSetting = group
def OnFixedwidthchkCheckbox(self, event):
- self.populateCombosWithCommonDefs(event.Checked())
+ self.populateCombosWithCommonDefs(event.IsChecked())
def OnAddsharebtnButton(self, event):
dlg = CommonDefDlg(self)
try:
- if dlg.ShowModal() == wxID_OK:
+ if dlg.ShowModal() == wx.ID_OK:
prop, name = dlg.result
if not self.commonDefs.has_key(name):
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:
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)
matchList.append(grpName)
if matchList:
- wxLogError('Aborted: '+comDef+' is still used in the styles of the \n'\
+ wx.LogError('Aborted: '+comDef+' is still used in the styles of the \n'\
'following groups in the config file (stc-styles.rc.cfg):\n'+ \
- string.join(matchList, '\n'))
+ '\n'.join(matchList))
else:
del self.commonDefs[comDef[2:-2]]
self.setStyles()
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):
- if style == wxSTC_STYLE_BRACELIGHT and self.braceInfo.has_key('good'):
+ if style == wx.stc.STC_STYLE_BRACELIGHT and self.braceInfo.has_key('good'):
line, col = self.braceInfo['good']
pos = self.stc.PositionFromLine(line-1) + col
braceOpposite = self.stc.BraceMatch(pos)
if braceOpposite != -1:
self.stc.BraceHighlight(pos, braceOpposite)
- elif style == wxSTC_STYLE_BRACEBAD and self.braceInfo.has_key('bad'):
+ elif style == wx.stc.STC_STYLE_BRACEBAD and self.braceInfo.has_key('bad'):
line, col = self.braceInfo['bad']
pos = self.stc.PositionFromLine(line-1) + col
self.stc.BraceBadLight(pos)
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))
+[wxID_COMMONDEFDLG, wxID_COMMONDEFDLGCANCELBTN, wxID_COMMONDEFDLGCOMDEFNAMETC, wxID_COMMONDEFDLGOKBTN, wxID_COMMONDEFDLGPROPTYPERBX, wxID_COMMONDEFDLGSTATICBOX1] = [wx.NewId() for _init_ctrls in range(6)]
-class CommonDefDlg(wxDialog):
+class CommonDefDlg(wx.Dialog):
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))
+ wx.Dialog.__init__(self, id = wxID_COMMONDEFDLG, name = 'CommonDefDlg', parent = prnt, pos = wx.Point(398, 249), size = wx.Size(192, 220), style= wx.DEFAULT_DIALOG_STYLE, title = 'Common definition')
+ self.SetClientSize(wx.Size(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 = wx.RadioBox(choices = ['Colour value', 'Font face', 'Size value'], id = wxID_COMMONDEFDLGPROPTYPERBX, label = 'Property type', majorDimension = 1, name = 'propTypeRBx', parent = self, point = wx.Point(8, 8), size = wx.Size(168, 92), style= wx.RA_SPECIFY_COLS)
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 = wx.StaticBox(id = wxID_COMMONDEFDLGSTATICBOX1, label = 'Name', name = 'staticBox1', parent = self, pos = wx.Point(8, 108), size = wx.Size(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 = wx.TextCtrl(id = wxID_COMMONDEFDLGCOMDEFNAMETC, name = 'comDefNameTC', parent = self, pos = wx.Point(16, 124), size = wx.Size(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)
- EVT_BUTTON(self.okBtn, wxID_COMMONDEFDLGOKBTN, self.OnOkbtnButton)
+ self.okBtn = wx.Button(id = wxID_COMMONDEFDLGOKBTN, label = 'OK', name = 'okBtn', parent = self, pos = wx.Point(8, 164), size = wx.Size(80, 23), style = 0)
+ self.okBtn.Bind(wx.EVT_BUTTON, self.OnOkbtnButton, id=wxID_COMMONDEFDLGOKBTN)
- self.cancelBtn = wxButton(id = wxID_COMMONDEFDLGCANCELBTN, label = 'Cancel', name = 'cancelBtn', parent = self, pos = wxPoint(96, 144), size = wxSize(80, 23), style = 0)
- EVT_BUTTON(self.cancelBtn, wxID_COMMONDEFDLGCANCELBTN, self.OnCancelbtnButton)
+ self.cancelBtn = wx.Button(id = wxID_COMMONDEFDLGCANCELBTN, label = 'Cancel', name = 'cancelBtn', parent = self, pos = wx.Point(96, 164), size = wx.Size(80, 23), style = 0)
+ self.cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancelbtnButton, id=wxID_COMMONDEFDLGCANCELBTN)
def __init__(self, parent, name='', propIdx=0):
self._comDefName = ''
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)
+ self.Center(wx.BOTH)
def OnOkbtnButton(self, event):
self.result = ( self.propMap[self.propTypeRBx.GetSelection()],
self.comDefNameTC.GetValue() )
- self.EndModal(wxID_OK)
+ self.EndModal(wx.ID_OK)
def OnCancelbtnButton(self, event):
self.result = ( '', '' )
- self.EndModal(wxID_CANCEL)
-
+ self.EndModal(wx.ID_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)
stc.SetEdgeColour(strToCol(values['fore']))
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),
+ assert len(strCol) == 7 and strCol[0] == '#', 'Not a valid colour string: '+strCol
+ return wx.Colour(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))
for name in names:
if name:
res.append(values[name] and name+':'+values[name] or name)
- return string.join(res, ',')
+ return ','.join(res)
def parseProp(prop):
- items = string.split(prop, ',')
+ items = prop.split(',')
names = []
values = {}
for item in items:
- nameVal = string.split(item, ':')
- names.append(string.strip(nameVal[0]))
+ nameVal = item.split(':')
+ names.append(nameVal[0].strip())
if len(nameVal) == 1:
values[nameVal[0]] = ''
else:
- values[nameVal[0]] = string.strip(nameVal[1])
+ values[nameVal[0]] = nameVal[1].strip()
return names, values
-
+
def parsePropLine(prop):
- name, value = string.split(prop, '=')
- return int(string.split(name, '.')[-1]), value
+ name, value = prop.split('=')
+ return int(name.split('.')[-1]), value
def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords):
styleDict = {}
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[wx.stc.STC_STYLE_DEFAULT]
+ names, vals = parseProp(prop)
+ if 'back' in names:
+ bkCol = strToCol(vals['back']%commonDefs)
+ if bkCol is None:
+ bkCol = wx.WHITE
+ stc.SetBackgroundColour(bkCol)
+
# Set the styles on the wxSTC
stc.StyleResetDefault()
stc.ClearDocumentStyle()
stc.SetLexer(lexer)
stc.SetKeyWords(0, keywords)
- stc.StyleSetSpec(wxSTC_STYLE_DEFAULT,
- styleDict[wxSTC_STYLE_DEFAULT] % commonDefs)
+ stc.StyleSetSpec(wx.stc.STC_STYLE_DEFAULT,
+ styleDict[wx.stc.STC_STYLE_DEFAULT] % commonDefs)
stc.StyleClearAll()
for num, style in styleDict.items():
setEdgeColour(stc, style % commonDefs)
stc.Colourise(0, stc.GetTextLength())
-
+
return newStyles, styleDict, styleNumIdxMap
#---Config reading and writing -------------------------------------------------
-commonDefsFile = 'common.defs.%s'%(wxPlatform == '__WXMSW__' and 'msw' or 'gtk')
+commonDefsFile = 'common.defs.%s'%(platformSettings[wx.Platform][0])
+
+def readPyValFromConfig(conf, name):
+ ns = {}
+ #ns.update(wx.stc.__dict__)
+ ns.update(wxPython.stc.__dict__)
+ ns['wx'] = wx
+ value = conf.Read(name).replace('\r\n', '\n')+'\n'
+ try:
+ return eval(value, ns)
+ except:
+ print value
+ raise
def initFromConfig(configFile, lang):
- cfg = wxFileConfig(localFilename=configFile, style=wxCONFIG_USE_LOCAL_FILE)
- cfg.SetExpandEnvVars(false)
+ if not os.path.exists(configFile):
+ raise Exception, 'Config file %s not found'%configFile
+ cfg = wx.FileConfig(localFilename=configFile, style= wx.CONFIG_USE_LOCAL_FILE)
+ cfg.SetExpandEnvVars(False)
# read in all group names for this language
groupPrefix = 'style.%s'%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'))
+ # Lang specific settings
+ 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('')
# 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)
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:
config.SetPath(group)
for style in styles:
- name, value = string.split(style, '=')
- config.Write(name, string.strip(value))
+ name, value = style.split('=')
+ config.Write(name, value.strip())
config.SetPath('')
#-------------------------------------------------------------------------------
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__':
- app = wxPySimpleApp()
- config = os.path.abspath('stc-styles.rc.cfg')
-
+ app = wx.PySimpleApp()
+
+ provider = wx.SimpleHelpProvider()
+ wx.HelpProvider.Set(provider)
+
+ home = os.environ.get('HOME')
+ if home:
+ home = os.path.join(home, '.boa-constructor')
+ if not os.path.exists(home):
+ home = '.'
+ else:
+ home = '.'
+
+ config = os.path.abspath(os.path.join(home, 'stc-styles.rc.cfg'))
if 0:
- f = wxFrame(None, -1, 'Test frame (double click for editor)')
- stc = wxStyledTextCtrl(f, -1)
+ f = wx.Frame(None, -1, 'Test frame (double click for editor)')
+ stc = wx.stc.StyledTextCtrl(f, -1)
def OnDblClick(evt, stc=stc):
dlg = STCStyleEditDlg(None, 'Python', 'python', config, (stc,))
try: dlg.ShowModal()
finally: dlg.Destroy()
stc.SetText(open('STCStyleEditor.py').read())
- EVT_LEFT_DCLICK(stc, OnDblClick)
+ stc.Bind(wx.EVT_LEFT_DCLICK, 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()