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