]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/StyleEditor/STCStyleEditor.py
Use our own getters and properties for wxVisualAttributes
[wxWidgets.git] / wxPython / samples / StyleEditor / STCStyleEditor.py
index a19bd0ab5641d74a88ec0ef724a11e4b32f4f90e..f2346920e0466824cbf9fae77e118877eb268a45 100644 (file)
@@ -6,8 +6,8 @@
 #
 # Created:     2001/08/20
 # RCS-ID:      $Id$
 #
 # 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
 
 #-----------------------------------------------------------------------------
 #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)
 
 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.
 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
 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:
 common.styleidnames - STC styles shared by all languages
 
 Each supported language defines the following groups:
@@ -34,7 +35,7 @@ braces - Dictionary defining the (line, column) for showing 'good' and 'bad'
          brace matching (both keys optional)
 keywords - Space separated list of keywords
 lexer - wxSTC constant for the language lexer
          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)
 
 [style.<language>] - The users current style values
 [style.<language>.default] - Default style values (can be reverted from)
@@ -42,7 +43,7 @@ styleidnames - Dictionary of language spesific style numbers and names
 0 or more predefined style groups or 'themes'
 [style.<language>.<predefined name>]
 
 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).
     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).
@@ -52,211 +53,375 @@ Use the initSTC function to initialise your wxSTC from a config file.
 
 import os, sys, string, pprint, copy
 
 
 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'}
 
 
 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 = {
 
 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 """
     """ 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)
         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')
         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')
         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')
         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.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._init_ctrls(parent)
-
-        self._onUpdateUI = false
         self.lang = lang
         self.configFile = configFile
         self.style = ''
         self.lang = lang
         self.configFile = configFile
         self.style = ''
+        self.styleNum = 0
         self.names = []
         self.values = {}
         self.STCsToUpdate = STCsToUpdate
         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) = \
          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)
         self.currSpeedSetting = 'style.%s'%self.lang
         for grp in [self.currSpeedSetting]+self.styleGroupNames:
             self.speedsettingCh.Append(grp)
         self.speedsettingCh.SetSelection(0)
-        
+
         margin = 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.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.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.stc.SetEdgeColumn(44)
-        
+
         self.setStyles()
 
         self.populateStyleSelector()
 
         self.defNames, self.defValues = parseProp(\
         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.stc.SetText(self.displaySrc)
         self.stc.EmptyUndoBuffer()
         self.stc.SetCurrentPos(self.stc.GetTextLength())
@@ -265,41 +430,40 @@ class STCStyleEditDlg(wxDialog):
         self.populateCombosWithCommonDefs()
 
         # Logical grouping of controls and the property they edit
         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),
                              'fore', wxID_STCSTYLEEDITDLGFGCOLDEFCB),
-                         ((self.bgColBtn, self.bgColCb), self.bgColDefCb, 
+                         ((self.bgColBtn, self.bgColCb, self.bgColOkBtn), self.bgColDefCb,
                              'back', wxID_STCSTYLEEDITDLGBGCOLDEFCB),
                              'back', wxID_STCSTYLEEDITDLGBGCOLDEFCB),
-                         (self.taBoldCb, self.taBoldDefCb, 
+                         (self.taBoldCb, self.taBoldDefCb,
                              'bold', wxID_STCSTYLEEDITDLGTABOLDDEFCB),
                              '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),
                              'underline', wxID_STCSTYLEEDITDLGTAUNDERLINEDDEFCB),
-                         (self.taEOLfilledCb, self.taEOLfilledDefCb, 
+                         (self.taEOLfilledCb, self.taEOLfilledDefCb,
                              'eolfilled', wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB),
                              'eolfilled', wxID_STCSTYLEEDITDLGTAEOLFILLEDDEFCB),
-                         (self.sizeCb, self.taSizeDefCb, 
+                         ((self.sizeCb, self.sizeOkBtn), self.taSizeDefCb,
                              'size', wxID_STCSTYLEEDITDLGTASIZEDEFCB),
                              'size', wxID_STCSTYLEEDITDLGTASIZEDEFCB),
-                         ((self.faceCb, self.fixedWidthChk), self.faceDefCb, 
+                         ((self.faceCb, self.faceOkBtn, self.fixedWidthChk), self.faceDefCb,
                              'face', wxID_STCSTYLEEDITDLGFACEDEFCB)]
 
                              '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
         # 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')
             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)
 #---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:
     def editProp(self, on, prop, val=''):
         oldstyle = self.rememberStyles()
         if on:
@@ -311,29 +475,33 @@ class STCStyleEditDlg(wxDialog):
             except ValueError: pass
             try: del self.values[prop]
             except KeyError: pass
             except ValueError: pass
             try: del self.values[prop]
             except KeyError: pass
-        
+
         try:
             self.updateStyle()
         try:
             self.updateStyle()
-            return true
+            return True
         except KeyError, errkey:
         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)
                 'please enter valid reference. (%s)'%errkey)
             self.restoreStyles(oldstyle)
-            return false
+            return False
 
 #---Control population methods--------------------------------------------------
     def setStyles(self):
 
 #---Control population methods--------------------------------------------------
     def setStyles(self):
+        if self._blockUpdate: return
         self.styles, self.styleDict, self.styleNumIdxMap = \
         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)
               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':
     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)
             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.commonDefs[self.style[0]] = self.style[2]
             self.styleDefST.SetLabel(strVal)
         else:
@@ -342,12 +510,12 @@ class STCStyleEditDlg(wxDialog):
             self.styles[self.styleNumIdxMap[self.styleNum]] = styleDecl
             self.styleDefST.SetLabel(self.style)
         self.setStyles()
             self.styles[self.styleNumIdxMap[self.styleNum]] = styleDecl
             self.styleDefST.SetLabel(self.style)
         self.setStyles()
-    
+
     def findInStyles(self, txt, styles):
         for style in styles:
     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)
 
     def rememberStyles(self):
         return self.names[:], copy.copy(self.values)
@@ -356,128 +524,151 @@ class STCStyleEditDlg(wxDialog):
         self.names, self.values = style
         self.updateStyle()
 
         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 valIsCommonDef(self, val):
         return len(val) >= 5 and val[:2] == '%('
-    
+
     def populateCtrls(self):
     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:
             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:
             if self.styleNum == -1:
-                self.bgColDefCb.Enable(true)
-            
+                self.bgColDefCb.Enable(True)
+
         # populate with default style
         # 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
         # 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 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):
 
     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()
 
     def populateStyleSelector(self):
         numStyles = self.styleIdNames.items()
@@ -488,17 +679,17 @@ class STCStyleEditDlg(wxDialog):
         extrOffset = 0
         # add styles
         for num, name in numStyles:
         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
             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.elementLb.InsertItems([name], stdStart + extrOffset -1)
                     extrOffset = extrOffset + 1
                 # normal lang styles
@@ -507,7 +698,7 @@ class STCStyleEditDlg(wxDialog):
             self.styleNumLookup[name] = num
 
         # add settings
             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:
         settings = settingsIdNames.items()
         settings.sort();settings.reverse()
         for num, name in settings:
@@ -515,22 +706,22 @@ class STCStyleEditDlg(wxDialog):
             self.styleNumLookup[name] = num
 
         # add definitions
             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
         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=''):
 #---Colour methods--------------------------------------------------------------
     def getColourDlg(self, colour, title=''):
-        data = wxColourData()
+        data = wx.ColourData()
         data.SetColour(colour)
         data.SetColour(colour)
-        data.SetChooseFull(true)
-        dlg = wxColourDialog(self, data)
+        data.SetChooseFull(True)
+        dlg = wx.ColourDialog(self, data)
         try:
             dlg.SetTitle(title)
         try:
             dlg.SetTitle(title)
-            if dlg.ShowModal() == wxID_OK:
+            if dlg.ShowModal() == wx.ID_OK:
                 data = dlg.GetColourData()
                 return data.GetColour()
         finally:
                 data = dlg.GetColourData()
                 return data.GetColour()
         finally:
@@ -539,14 +730,14 @@ class STCStyleEditDlg(wxDialog):
 
     colDlgTitles = {'fore': 'Foreground', 'back': 'Background'}
     def editColProp(self, colBtn, colCb, prop):
 
     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')
               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)
             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 OnFgcolbtnButton(self, event):
         self.editColProp(self.fgColBtn, self.fgColCb, 'fore')
@@ -554,26 +745,39 @@ class STCStyleEditDlg(wxDialog):
     def OnBgcolbtnButton(self, event):
         self.editColProp(self.bgColBtn, self.bgColCb, 'back')
 
     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):
             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.SetBackgroundColour(col)
             else:
-                colBtn.SetForegroundColour(wxColour(255, 255, 255))
+                colBtn.SetForegroundColour(wx.Colour(255, 255, 255))
                 colBtn.SetBackgroundColour(\
                 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')
 
     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')
 
     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):
 
 #---Text attribute events-------------------------------------------------------
     def OnTaeoffilledcbCheckbox(self, event):
@@ -593,20 +797,32 @@ class STCStyleEditDlg(wxDialog):
         if self.valIsCommonDef(val):
             idx = self.elementLb.FindString(val)
             if idx != -1:
         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):
                 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
         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):
         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)
         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-------------------------------------------------------------
         else: self.editProp(val!='', 'size', val)
 
 #---Main GUI events-------------------------------------------------------------
@@ -619,114 +835,120 @@ class STCStyleEditDlg(wxDialog):
         if isCommon:
             common = styleIdent[2:-2]
             prop = self.getCommonDefPropType(common)
         if isCommon:
             common = styleIdent[2:-2]
             prop = self.getCommonDefPropType(common)
-            self.clearCtrls(disableDefs=true)
+            self.clearCtrls(disableDefs=True)
             if prop == 'fore':
             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':
             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':
             elif prop == 'size':
-                self.sizeCb.Enable(true)
+                self.sizeCb.Enable(True)
+                self.sizeOkBtn.Enable(True)
 
             commonDefVal = str(self.commonDefs[common])
             self.styleDefST.SetLabel(commonDefVal)
 
             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}
 
             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)
         # 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.defNames, self.defValues = \
                       self.names, self.values
 
             self.checkBraces(self.styleNum)
-                
+
             self.styleDefST.SetLabel(self.style)
             self.styleDefST.SetLabel(self.style)
-            
+
             self.populateCtrls()
         # separator selected
         else:
             self.populateCtrls()
         # separator selected
         else:
-            self.clearCtrls(disableDefs=true)
+            self.clearCtrls(disableDefs=True)
             if styleIdent:
                 self.styleDefST.SetLabel(styleCategoryDescriptions[styleIdent])
 
         self.populateCombosWithCommonDefs()
             if styleIdent:
                 self.styleDefST.SetLabel(styleCategoryDescriptions[styleIdent])
 
         self.populateCombosWithCommonDefs()
-        
+
     def OnDefaultCheckBox(self, event):
     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
 
     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):
 
     def OnCancelbtnButton(self, event):
-        self.EndModal(wxID_CANCEL)
+        self.EndModal(wx.ID_CANCEL)
 
     def OnCommondefsbtnButton(self, event):
 
     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),
               'Common definitions', pprint.pformat(self.commonDefs),
-              style=wxTE_MULTILINE | wxOK | wxCANCEL | wxCENTRE)
+              style=wx.TE_MULTILINE | wx.OK | wx.CANCEL | wx.CENTRE)
         try:
         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:
                 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()
                           'reverting to previous common definition')
                     self.commonDefs = oldDefs
                     self.setStyles()
                 self.populateCombosWithCommonDefs()
-                    
+
         finally:
             dlg.Destroy()
 
         finally:
             dlg.Destroy()
 
@@ -739,23 +961,23 @@ class STCStyleEditDlg(wxDialog):
             self.styles = self.predefStyleGroups[group]
             self.setStyles()
             self.defNames, self.defValues = parseProp(\
             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.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:
 
     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'))
                 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:
                     self.populateCombosWithCommonDefs()
                     self.OnElementlbListbox(None)
         finally:
@@ -763,8 +985,8 @@ class STCStyleEditDlg(wxDialog):
 
     def OnRemovesharebtnButton(self, event):
         ownGroup = 'style.%s'%self.lang
 
     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)
         # Search ALL styles before removing
         srchDct = {ownGroup: self.styles}
         srchDct.update(self.predefStyleGroups)
@@ -776,41 +998,40 @@ class STCStyleEditDlg(wxDialog):
                 matchList.append(grpName)
 
         if matchList:
                 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'+ \
                   '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)
         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
                 selIdx = selIdx - 1
-            self.elementLb.SetSelection(selIdx, true)
+            self.elementLb.SetSelection(selIdx, True)
             self.OnElementlbListbox(None)
 
 #---STC events------------------------------------------------------------------
     def OnUpdateUI(self, event):
             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):
         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)
             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)
             line, col = self.braceInfo['bad']
             pos = self.stc.PositionFromLine(line-1) + col
             self.stc.BraceBadLight(pos)
@@ -825,32 +1046,32 @@ class STCStyleEditDlg(wxDialog):
         event.Skip()
 
     def OnMarginClick(self, event):
         event.Skip()
 
     def OnMarginClick(self, event):
-        self.elementLb.SetStringSelection('Line numbers', true)
+        self.elementLb.SetStringSelection('Line numbers', True)
         self.OnElementlbListbox(None)
 
         self.OnElementlbListbox(None)
 
-            
+
 #---Common definition dialog----------------------------------------------------
 
 #---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):
     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.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.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 = ''
 
     def __init__(self, parent, name='', propIdx=0):
         self._comDefName = ''
@@ -858,29 +1079,29 @@ class CommonDefDlg(wxDialog):
         self._propTypeIdx = 0
         self._propTypeIdx = propIdx
         self._init_ctrls(parent)
         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.result = ( '', '' )
 
-        self.Center(wxBOTH)
+        self.Center(wx.BOTH)
 
     def OnOkbtnButton(self, event):
         self.result = ( self.propMap[self.propTypeRBx.GetSelection()],
                         self.comDefNameTC.GetValue() )
 
     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 = ( '', '' )
 
     def OnCancelbtnButton(self, event):
         self.result = ( '', '' )
-        self.EndModal(wxID_CANCEL)
-        
+        self.EndModal(wx.ID_CANCEL)
+
 #---Functions useful outside of the editor----------------------------------
 #---Functions useful outside of the editor----------------------------------
-    
+
 def setSelectionColour(stc, style):
     names, values = parseProp(style)
     if 'fore' in names:
 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:
     if 'back' in names:
-        stc.SetSelBackground(true, strToCol(values['back']))
+        stc.SetSelBackground(True, strToCol(values['back']))
 
 def setCursorColour(stc, style):
     names, values = parseProp(style)
 
 def setCursorColour(stc, style):
     names, values = parseProp(style)
@@ -893,12 +1114,12 @@ def setEdgeColour(stc, style):
         stc.SetEdgeColour(strToCol(values['fore']))
 
 def strToCol(strCol):
         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):
                     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))
 
                         string.zfill(string.upper(hex(col.Green())[2:]), 2),
                         string.zfill(string.upper(hex(col.Blue())[2:]), 2))
 
@@ -913,24 +1134,24 @@ def writePropVal(names, values):
     for name in names:
         if name:
             res.append(values[name] and name+':'+values[name] or name)
     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):
 
 def parseProp(prop):
-    items = string.split(prop, ',')
+    items = prop.split(',')
     names = []
     values = {}
     for item in items:
     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:
         if len(nameVal) == 1:
             values[nameVal[0]] = ''
         else:
-            values[nameVal[0]] = string.strip(nameVal[1])
+            values[nameVal[0]] = nameVal[1].strip()
     return names, values
     return names, values
-            
+
 def parsePropLine(prop):
 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 = {}
 
 def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords):
     styleDict = {}
@@ -953,13 +1174,24 @@ def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords):
         newStyles.append(writeProp(num, styleDict[num], lang))
         idx = idx + 1
 
         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)
     # 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():
     stc.StyleClearAll()
 
     for num, style in styleDict.items():
@@ -973,15 +1205,29 @@ def setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords):
             setEdgeColour(stc, style % commonDefs)
 
     stc.Colourise(0, stc.GetTextLength())
             setEdgeColour(stc, style % commonDefs)
 
     stc.Colourise(0, stc.GetTextLength())
-    
+
     return newStyles, styleDict, styleNumIdxMap
 
 #---Config reading and writing -------------------------------------------------
     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):
 
 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
 
     # read in all group names for this language
     groupPrefix = 'style.%s'%lang
@@ -994,30 +1240,30 @@ def initFromConfig(configFile, lang):
                 predefStyleGroupNames.append(val)
             else:
                 otherLangStyleGroupNames.append(val)
                 predefStyleGroupNames.append(val)
             else:
                 otherLangStyleGroupNames.append(val)
-        
+
         cont, val, idx = cfg.GetNextGroup(idx)
         cont, val, idx = cfg.GetNextGroup(idx)
-    
+
     # read in common elements
     # 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
 
     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'
 
     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)
     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
     assert type(commonStyleIdNames) is type({}), \
           'Not a valid dict [%s] braces)'%lang
-    
+
     displaySrc = cfg.Read('displaysrc')
     displaySrc = cfg.Read('displaysrc')
-    lexer = eval(cfg.Read('lexer'))
+    lexer = readPyValFromConfig(cfg, 'lexer')
     keywords = cfg.Read('keywords')
 
     cfg.SetPath('')
     keywords = cfg.Read('keywords')
 
     cfg.SetPath('')
@@ -1025,7 +1271,7 @@ def initFromConfig(configFile, lang):
     # read in current styles
     styles = readStylesFromConfig(cfg, groupPrefix)
 
     # 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)
     predefStyleGroups = {}
     for group in predefStyleGroupNames:
         predefStyleGroups[group] = readStylesFromConfig(cfg, group)
@@ -1034,14 +1280,14 @@ def initFromConfig(configFile, lang):
     otherLangStyleGroups = {}
     for group in otherLangStyleGroupNames:
         otherLangStyleGroups[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('')
             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:
     styles = []
     cont, val, idx = config.GetFirstEntry()
     while cont:
@@ -1057,45 +1303,56 @@ def writeStylesToConfig(config, group, styles):
     config.SetPath(group)
 
     for style in styles:
     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."""
 
     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)
      predefStyleGroups, otherLangStyleGroupNames, otherLangStyleGroups,
      displaySrc, lexer, keywords, braceInfo) = initFromConfig(config, lang)
-    
+
     setSTCStyles(stc, styles, styleIdNames, commonDefs, lang, lexer, keywords)
 
 #-------------------------------------------------------------------------------
 if __name__ == '__main__':
     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:
     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())
         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')
         initSTC(stc, config, 'python')
-        f.Show(true)
+        f.Show(True)
         app.MainLoop()
     else:
         app.MainLoop()
     else:
-        dlg = STCStyleEditDlg(None, 
+        dlg = STCStyleEditDlg(None,
             'Python', 'python',
             #'HTML', 'html',
             #'XML', 'xml',
             '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()
             config)
         try: dlg.ShowModal()
         finally: dlg.Destroy()