]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextfontpage.cpp
No changes, just remove an unused line of code.
[wxWidgets.git] / src / richtext / richtextfontpage.cpp
index 61f4bf514520ccd3f0ccbb65473a6801d1155b09..aa24a1b212e5ac536f09a6987b75381770a36cd4 100644 (file)
@@ -27,10 +27,17 @@ BEGIN_EVENT_TABLE( wxRichTextFontPage, wxRichTextDialogPage )
     EVT_BUTTON( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxRichTextFontPage::OnColourClicked )
 
 ////@begin wxRichTextFontPage event table entries
+    EVT_IDLE( wxRichTextFontPage::OnIdle )
+
     EVT_TEXT( ID_RICHTEXTFONTPAGE_FACETEXTCTRL, wxRichTextFontPage::OnFaceTextCtrlUpdated )
 
     EVT_TEXT( ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, wxRichTextFontPage::OnSizeTextCtrlUpdated )
 
+    EVT_SPIN_UP( ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp )
+    EVT_SPIN_DOWN( ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown )
+
+    EVT_CHOICE( ID_RICHTEXTFONTPAGE_SIZE_UNITS, wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected )
+
     EVT_LISTBOX( ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxRichTextFontPage::OnSizeListBoxSelected )
 
     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_STYLECTRL, wxRichTextFontPage::OnStyleCtrlSelected )
@@ -39,10 +46,16 @@ BEGIN_EVENT_TABLE( wxRichTextFontPage, wxRichTextDialogPage )
 
     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxRichTextFontPage::OnUnderliningCtrlSelected )
 
+    EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL, wxRichTextFontPage::OnUnderliningCtrlSelected )
+
+    EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL, wxRichTextFontPage::OnUnderliningCtrlSelected )
+
     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, wxRichTextFontPage::OnStrikethroughctrlClick )
 
     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
 
+    EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SMALLCAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
+
     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUPERSCRIPT, wxRichTextFontPage::OnRichtextfontpageSuperscriptClick )
 
     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUBSCRIPT, wxRichTextFontPage::OnRichtextfontpageSubscriptClick )
@@ -79,16 +92,22 @@ void wxRichTextFontPage::Init()
 
 ////@begin wxRichTextFontPage member initialisation
     m_faceTextCtrl = NULL;
-    m_faceListBox = NULL;
     m_sizeTextCtrl = NULL;
+    m_fontSizeSpinButtons = NULL;
+    m_sizeUnitsCtrl = NULL;
+    m_fontListBoxParent = NULL;
+    m_faceListBox = NULL;
     m_sizeListBox = NULL;
     m_styleCtrl = NULL;
     m_weightCtrl = NULL;
     m_underliningCtrl = NULL;
+    m_textColourLabel = NULL;
     m_colourCtrl = NULL;
+    m_bgColourLabel = NULL;
     m_bgColourCtrl = NULL;
     m_strikethroughCtrl = NULL;
     m_capitalsCtrl = NULL;
+    m_smallCapitalsCtrl = NULL;
     m_superscriptCtrl = NULL;
     m_subscriptCtrl = NULL;
     m_previewCtrl = NULL;
@@ -144,129 +163,159 @@ void wxRichTextFontPage::CreateControls()
         m_faceTextCtrl->SetToolTip(_("Type a font name."));
     itemBoxSizer5->Add(m_faceTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
 
-    m_faceListBox = new wxRichTextFontListBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_FACELISTBOX, wxDefaultPosition, wxSize(200, 100), 0 );
-    m_faceListBox->SetHelpText(_("Lists the available fonts."));
-    if (wxRichTextFontPage::ShowToolTips())
-        m_faceListBox->SetToolTip(_("Lists the available fonts."));
-    itemBoxSizer5->Add(m_faceListBox, 1, wxGROW|wxALL|wxFIXED_MINSIZE, 5);
+    wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer4->Add(itemBoxSizer8, 0, wxGROW, 5);
 
-    wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer4->Add(itemBoxSizer9, 0, wxGROW, 5);
+    wxStaticText* itemStaticText9 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
+    itemBoxSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
-    wxStaticText* itemStaticText10 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer9->Add(itemStaticText10, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxHORIZONTAL);
+    itemBoxSizer8->Add(itemBoxSizer10, 0, wxGROW, 5);
 
     m_sizeTextCtrl = new wxTextCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 );
     m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
     if (wxRichTextFontPage::ShowToolTips())
         m_sizeTextCtrl->SetToolTip(_("Type a size in points."));
-    itemBoxSizer9->Add(m_sizeTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
+    itemBoxSizer10->Add(m_sizeTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5);
+
+    m_fontSizeSpinButtons = new wxSpinButton( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxDefaultPosition, wxSize(-1, 20), wxSP_VERTICAL );
+    m_fontSizeSpinButtons->SetRange(0, 100);
+    m_fontSizeSpinButtons->SetValue(0);
+    itemBoxSizer10->Add(m_fontSizeSpinButtons, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP, 5);
+
+    wxArrayString m_sizeUnitsCtrlStrings;
+    m_sizeUnitsCtrlStrings.Add(_("pt"));
+    m_sizeUnitsCtrlStrings.Add(_("px"));
+    m_sizeUnitsCtrl = new wxChoice( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZE_UNITS, wxDefaultPosition, wxDefaultSize, m_sizeUnitsCtrlStrings, 0 );
+    m_sizeUnitsCtrl->SetStringSelection(_("pt"));
+    m_sizeUnitsCtrl->SetHelpText(_("The font size units, points or pixels."));
+    if (wxRichTextFontPage::ShowToolTips())
+        m_sizeUnitsCtrl->SetToolTip(_("The font size units, points or pixels."));
+    itemBoxSizer10->Add(m_sizeUnitsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP, 5);
+
+    m_fontListBoxParent = new wxBoxSizer(wxHORIZONTAL);
+    itemBoxSizer3->Add(m_fontListBoxParent, 0, wxGROW, 5);
+
+    m_faceListBox = new wxRichTextFontListBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_FACELISTBOX, wxDefaultPosition, wxSize(200, 100), 0 );
+    m_faceListBox->SetHelpText(_("Lists the available fonts."));
+    if (wxRichTextFontPage::ShowToolTips())
+        m_faceListBox->SetToolTip(_("Lists the available fonts."));
+    m_fontListBoxParent->Add(m_faceListBox, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5);
 
     wxArrayString m_sizeListBoxStrings;
     m_sizeListBox = new wxListBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxDefaultPosition, wxSize(50, -1), m_sizeListBoxStrings, wxLB_SINGLE );
     m_sizeListBox->SetHelpText(_("Lists font sizes in points."));
     if (wxRichTextFontPage::ShowToolTips())
         m_sizeListBox->SetToolTip(_("Lists font sizes in points."));
-    itemBoxSizer9->Add(m_sizeListBox, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxFIXED_MINSIZE, 5);
+    m_fontListBoxParent->Add(m_sizeListBox, 0, wxGROW|wxALL|wxFIXED_MINSIZE, 5);
 
-    wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
-    itemBoxSizer3->Add(itemBoxSizer13, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxHORIZONTAL);
+    itemBoxSizer3->Add(itemBoxSizer17, 0, wxGROW, 5);
 
-    wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer13->Add(itemBoxSizer14, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer17->Add(itemBoxSizer18, 0, wxGROW, 5);
 
-    wxStaticText* itemStaticText15 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    wxStaticText* itemStaticText19 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
+    itemBoxSizer18->Add(itemStaticText19, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxArrayString m_styleCtrlStrings;
     m_styleCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_STYLECTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_styleCtrlStrings, wxCB_READONLY );
     m_styleCtrl->SetHelpText(_("Select regular or italic style."));
     if (wxRichTextFontPage::ShowToolTips())
         m_styleCtrl->SetToolTip(_("Select regular or italic style."));
-    itemBoxSizer14->Add(m_styleCtrl, 0, wxGROW|wxALL, 5);
+    itemBoxSizer18->Add(m_styleCtrl, 0, wxGROW|wxALL, 5);
 
-    wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer13->Add(itemBoxSizer17, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer21 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer17->Add(itemBoxSizer21, 0, wxGROW, 5);
 
-    wxStaticText* itemStaticText18 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    wxStaticText* itemStaticText22 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
+    itemBoxSizer21->Add(itemStaticText22, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxArrayString m_weightCtrlStrings;
     m_weightCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_weightCtrlStrings, wxCB_READONLY );
     m_weightCtrl->SetHelpText(_("Select regular or bold."));
     if (wxRichTextFontPage::ShowToolTips())
         m_weightCtrl->SetToolTip(_("Select regular or bold."));
-    itemBoxSizer17->Add(m_weightCtrl, 0, wxGROW|wxALL, 5);
+    itemBoxSizer21->Add(m_weightCtrl, 0, wxGROW|wxALL, 5);
 
-    wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer13->Add(itemBoxSizer20, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer17->Add(itemBoxSizer24, 0, wxGROW, 5);
 
-    wxStaticText* itemStaticText21 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer20->Add(itemStaticText21, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    wxStaticText* itemStaticText25 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
+    itemBoxSizer24->Add(itemStaticText25, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxArrayString m_underliningCtrlStrings;
     m_underliningCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_underliningCtrlStrings, wxCB_READONLY );
     m_underliningCtrl->SetHelpText(_("Select underlining or no underlining."));
     if (wxRichTextFontPage::ShowToolTips())
         m_underliningCtrl->SetToolTip(_("Select underlining or no underlining."));
-    itemBoxSizer20->Add(m_underliningCtrl, 0, wxGROW|wxALL, 5);
+    itemBoxSizer24->Add(m_underliningCtrl, 0, wxGROW|wxALL, 5);
 
-    itemBoxSizer13->Add(0, 0, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5);
+    itemBoxSizer17->Add(0, 0, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5);
 
-    wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer13->Add(itemBoxSizer24, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer28 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer17->Add(itemBoxSizer28, 0, wxGROW, 5);
 
-    wxStaticText* itemStaticText25 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer24->Add(itemStaticText25, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    m_textColourLabel = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
+    m_textColourLabel->SetValue(false);
+    itemBoxSizer28->Add(m_textColourLabel, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_colourCtrl = new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_COLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
     m_colourCtrl->SetHelpText(_("Click to change the text colour."));
     if (wxRichTextFontPage::ShowToolTips())
         m_colourCtrl->SetToolTip(_("Click to change the text colour."));
-    itemBoxSizer24->Add(m_colourCtrl, 0, wxGROW|wxALL, 5);
+    itemBoxSizer28->Add(m_colourCtrl, 0, wxGROW|wxALL, 5);
 
-    wxBoxSizer* itemBoxSizer27 = new wxBoxSizer(wxVERTICAL);
-    itemBoxSizer13->Add(itemBoxSizer27, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer31 = new wxBoxSizer(wxVERTICAL);
+    itemBoxSizer17->Add(itemBoxSizer31, 0, wxGROW, 5);
 
-    wxStaticText* itemStaticText28 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Bg colour:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer27->Add(itemStaticText28, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
+    m_bgColourLabel = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL, _("&Bg colour:"), wxDefaultPosition, wxDefaultSize, 0 );
+    m_bgColourLabel->SetValue(false);
+    itemBoxSizer31->Add(m_bgColourLabel, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_bgColourCtrl = new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
     m_bgColourCtrl->SetHelpText(_("Click to change the text background colour."));
     if (wxRichTextFontPage::ShowToolTips())
         m_bgColourCtrl->SetToolTip(_("Click to change the text background colour."));
-    itemBoxSizer27->Add(m_bgColourCtrl, 0, wxGROW|wxALL, 5);
+    itemBoxSizer31->Add(m_bgColourCtrl, 0, wxGROW|wxALL, 5);
 
-    wxBoxSizer* itemBoxSizer30 = new wxBoxSizer(wxHORIZONTAL);
-    itemBoxSizer3->Add(itemBoxSizer30, 0, wxGROW, 5);
+    wxBoxSizer* itemBoxSizer34 = new wxBoxSizer(wxHORIZONTAL);
+    itemBoxSizer3->Add(itemBoxSizer34, 0, wxGROW, 5);
 
-    m_strikethroughCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, _("&Strikethrough"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_strikethroughCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, _("&Strikethrough"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
     m_strikethroughCtrl->SetValue(false);
     m_strikethroughCtrl->SetHelpText(_("Check to show a line through the text."));
     if (wxRichTextFontPage::ShowToolTips())
         m_strikethroughCtrl->SetToolTip(_("Check to show a line through the text."));
-    itemBoxSizer30->Add(m_strikethroughCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+    itemBoxSizer34->Add(m_strikethroughCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
 
-    m_capitalsCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_CAPSCTRL, _("Ca&pitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_capitalsCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_CAPSCTRL, _("Ca&pitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
     m_capitalsCtrl->SetValue(false);
     m_capitalsCtrl->SetHelpText(_("Check to show the text in capitals."));
     if (wxRichTextFontPage::ShowToolTips())
         m_capitalsCtrl->SetToolTip(_("Check to show the text in capitals."));
-    itemBoxSizer30->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+    itemBoxSizer34->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+    m_smallCapitalsCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SMALLCAPSCTRL, _("Small C&apitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
+    m_smallCapitalsCtrl->SetValue(false);
+    m_smallCapitalsCtrl->SetHelpText(_("Check to show the text in small capitals."));
+    if (wxRichTextFontPage::ShowToolTips())
+        m_smallCapitalsCtrl->SetToolTip(_("Check to show the text in small capitals."));
+    itemBoxSizer34->Add(m_smallCapitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
 
-    m_superscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUPERSCRIPT, _("Supe&rscript"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_superscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUPERSCRIPT, _("Supe&rscript"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
     m_superscriptCtrl->SetValue(false);
     m_superscriptCtrl->SetHelpText(_("Check to show the text in superscript."));
     if (wxRichTextFontPage::ShowToolTips())
         m_superscriptCtrl->SetToolTip(_("Check to show the text in superscript."));
-    itemBoxSizer30->Add(m_superscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+    itemBoxSizer34->Add(m_superscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
 
-    m_subscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUBSCRIPT, _("Subscrip&t"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_subscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUBSCRIPT, _("Subscrip&t"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
     m_subscriptCtrl->SetValue(false);
     m_subscriptCtrl->SetHelpText(_("Check to show the text in subscript."));
     if (wxRichTextFontPage::ShowToolTips())
         m_subscriptCtrl->SetToolTip(_("Check to show the text in subscript."));
-    itemBoxSizer30->Add(m_subscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+    itemBoxSizer34->Add(m_subscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
 
     itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
 
@@ -280,12 +329,15 @@ void wxRichTextFontPage::CreateControls()
 
     m_faceListBox->UpdateFonts();
 
+    m_styleCtrl->Append(_("(none)"));
     m_styleCtrl->Append(_("Regular"));
     m_styleCtrl->Append(_("Italic"));
 
+    m_weightCtrl->Append(_("(none)"));
     m_weightCtrl->Append(_("Regular"));
     m_weightCtrl->Append(_("Bold"));
 
+    m_underliningCtrl->Append(_("(none)"));
     m_underliningCtrl->Append(_("Not underlined"));
     m_underliningCtrl->Append(_("Underlined"));
 
@@ -321,16 +373,19 @@ bool wxRichTextFontPage::TransferDataFromWindow()
         int sz = wxAtoi(strSize);
         if (sz > 0)
         {
-            attr->SetFontSize(sz);
+            if (m_sizeUnitsCtrl->GetSelection() == 0)
+                attr->SetFontPointSize(sz);
+            else
+                attr->SetFontPixelSize(sz);
         }
     }
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_SIZE));
 
-    if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_styleCtrl->GetSelection() != wxNOT_FOUND && m_styleCtrl->GetSelection() != 0)
     {
         wxFontStyle style;
-        if (m_styleCtrl->GetStringSelection() == _("Italic"))
+        if (m_styleCtrl->GetSelection() == 2)
             style = wxFONTSTYLE_ITALIC;
         else
             style = wxFONTSTYLE_NORMAL;
@@ -340,10 +395,10 @@ bool wxRichTextFontPage::TransferDataFromWindow()
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_ITALIC));
 
-    if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_weightCtrl->GetSelection() != wxNOT_FOUND && m_weightCtrl->GetSelection() != 0)
     {
         wxFontWeight weight;
-        if (m_weightCtrl->GetStringSelection() == _("Bold"))
+        if (m_weightCtrl->GetSelection() == 2)
             weight = wxFONTWEIGHT_BOLD;
         else
             weight = wxFONTWEIGHT_NORMAL;
@@ -353,10 +408,10 @@ bool wxRichTextFontPage::TransferDataFromWindow()
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_WEIGHT));
 
-    if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_underliningCtrl->GetSelection() != wxNOT_FOUND && m_underliningCtrl->GetSelection() != 0)
     {
         bool underlined;
-        if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
+        if (m_underliningCtrl->GetSelection() == 2)
             underlined = true;
         else
             underlined = false;
@@ -366,14 +421,14 @@ bool wxRichTextFontPage::TransferDataFromWindow()
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_UNDERLINE));
 
-    if (m_colourPresent)
+    if (m_textColourLabel->GetValue())
     {
         attr->SetTextColour(m_colourCtrl->GetColour());
     }
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
 
-    if (m_bgColourPresent)
+    if (m_bgColourLabel->GetValue())
     {
         attr->SetBackgroundColour(m_bgColourCtrl->GetColour());
     }
@@ -389,6 +444,11 @@ bool wxRichTextFontPage::TransferDataFromWindow()
         else
             attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
     }
+    else
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
+        attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
+    }
 
     if (m_capitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
     {
@@ -399,6 +459,26 @@ bool wxRichTextFontPage::TransferDataFromWindow()
         else
             attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
     }
+    else
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
+        attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
+    }
+
+    if (m_smallCapitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
+
+        if (m_smallCapitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
+            attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
+        else
+            attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
+    }
+    else
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
+        attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
+    }
 
     if (m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
     {
@@ -417,8 +497,12 @@ bool wxRichTextFontPage::TransferDataFromWindow()
         // If they are undetermined, we don't want to include these flags in the text effects - the objects
         // should retain their original style.
         attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT|wxTEXT_ATTR_EFFECT_SUPERSCRIPT) );
+        attr->SetTextEffects(attr->GetTextEffects() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT|wxTEXT_ATTR_EFFECT_SUPERSCRIPT) );
     }
 
+    if (attr->GetTextEffectFlags() == 0)
+        attr->SetFlags(attr->GetFlags() & ~wxTEXT_ATTR_EFFECTS);
+
     return true;
 }
 
@@ -440,13 +524,21 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_faceListBox->SetFaceNameSelection(wxEmptyString);
     }
 
-    if (attr->HasFontSize())
+    if (attr->HasFontPointSize())
     {
         wxString strSize = wxString::Format(wxT("%d"), attr->GetFontSize());
         m_sizeTextCtrl->SetValue(strSize);
+        m_sizeUnitsCtrl->SetSelection(0);
         if (m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
             m_sizeListBox->SetStringSelection(strSize);
     }
+    else if (attr->HasFontPixelSize())
+    {
+        wxString strSize = wxString::Format(wxT("%d"), attr->GetFontSize());
+        m_sizeTextCtrl->SetValue(strSize);
+        m_sizeUnitsCtrl->SetSelection(1);
+        m_sizeListBox->SetSelection(wxNOT_FOUND);
+    }
     else
     {
         m_sizeTextCtrl->SetValue(wxEmptyString);
@@ -455,51 +547,63 @@ bool wxRichTextFontPage::TransferDataToWindow()
 
     if (attr->HasFontWeight())
     {
-        if (attr->GetFontWeight() == wxBOLD)
-            m_weightCtrl->SetSelection(1);
+        if (attr->GetFontWeight() == wxFONTWEIGHT_BOLD)
+            m_weightCtrl->SetSelection(2);
         else
-            m_weightCtrl->SetSelection(0);
+            m_weightCtrl->SetSelection(1);
     }
     else
     {
-        m_weightCtrl->SetSelection(wxNOT_FOUND);
+        m_weightCtrl->SetSelection(0);
     }
 
     if (attr->HasFontItalic())
     {
-        if (attr->GetFontStyle() == wxITALIC)
-            m_styleCtrl->SetSelection(1);
+        if (attr->GetFontStyle() == wxFONTSTYLE_ITALIC)
+            m_styleCtrl->SetSelection(2);
         else
-            m_styleCtrl->SetSelection(0);
+            m_styleCtrl->SetSelection(1);
     }
     else
     {
-        m_styleCtrl->SetSelection(wxNOT_FOUND);
+        m_styleCtrl->SetSelection(0);
     }
 
     if (attr->HasFontUnderlined())
     {
         if (attr->GetFontUnderlined())
-            m_underliningCtrl->SetSelection(1);
+            m_underliningCtrl->SetSelection(2);
         else
-            m_underliningCtrl->SetSelection(0);
+            m_underliningCtrl->SetSelection(1);
     }
     else
     {
-        m_underliningCtrl->SetSelection(wxNOT_FOUND);
+        m_underliningCtrl->SetSelection(0);
     }
 
     if (attr->HasTextColour())
     {
         m_colourCtrl->SetColour(attr->GetTextColour());
+        m_textColourLabel->SetValue(true);
         m_colourPresent = true;
     }
+    else
+    {
+        m_colourCtrl->SetColour(*wxBLACK);
+        m_textColourLabel->SetValue(false);
+    }
 
     if (attr->HasBackgroundColour())
     {
         m_bgColourCtrl->SetColour(attr->GetBackgroundColour());
+        m_bgColourLabel->SetValue(true);
         m_bgColourPresent = true;
     }
+    else
+    {
+        m_bgColourCtrl->SetColour(*wxWHITE);
+        m_bgColourLabel->SetValue(false);
+    }
 
     if (attr->HasTextEffects())
     {
@@ -523,6 +627,16 @@ bool wxRichTextFontPage::TransferDataToWindow()
         else
             m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
 
+        if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_SMALL_CAPITALS)
+        {
+            if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SMALL_CAPITALS)
+                m_smallCapitalsCtrl->Set3StateValue(wxCHK_CHECKED);
+            else
+                m_smallCapitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
+        }
+        else
+            m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+
         if ( attr->GetTextEffectFlags() & (wxTEXT_ATTR_EFFECT_SUPERSCRIPT | wxTEXT_ATTR_EFFECT_SUBSCRIPT) )
         {
             if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUPERSCRIPT)
@@ -551,6 +665,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
     {
         m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
         m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+        m_smallCapitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
         m_superscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
         m_subscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
     }
@@ -572,11 +687,30 @@ void wxRichTextFontPage::UpdatePreview()
 {
     wxRichTextAttr attr;
 
-    if (m_colourPresent)
-        m_previewCtrl->SetForegroundColour(m_colourCtrl->GetBackgroundColour());
+    if (m_textColourLabel->GetValue())
+        m_previewCtrl->SetForegroundColour(m_colourCtrl->GetColour());
+    else
+    {
+        m_previewCtrl->SetForegroundColour(*wxBLACK);
+        if (!(m_colourCtrl->GetColour() == *wxBLACK))
+        {
+            m_colourCtrl->SetColour(*wxBLACK);
+            m_colourCtrl->Refresh();
+        }
+    }
 
-    if (m_bgColourPresent)
-        m_previewCtrl->SetBackgroundColour(m_bgColourCtrl->GetBackgroundColour());
+    if (m_bgColourLabel->GetValue())
+        m_previewCtrl->SetBackgroundColour(m_bgColourCtrl->GetColour());
+    else
+    {
+        m_previewCtrl->SetBackgroundColour(*wxWHITE);
+
+        if (!(m_bgColourCtrl->GetColour() == *wxWHITE))
+        {
+            m_bgColourCtrl->SetColour(*wxWHITE);
+            m_bgColourCtrl->Refresh();
+        }
+    }
 
     if (m_faceListBox->GetSelection() != wxNOT_FOUND)
     {
@@ -589,13 +723,18 @@ void wxRichTextFontPage::UpdatePreview()
     {
         int sz = wxAtoi(strSize);
         if (sz > 0)
-            attr.SetFontSize(sz);
+        {
+            if (m_sizeUnitsCtrl->GetSelection() == 1)
+                attr.SetFontPixelSize(sz);
+            else
+                attr.SetFontPointSize(sz);
+        }
     }
 
-    if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_styleCtrl->GetSelection() != wxNOT_FOUND && m_styleCtrl->GetSelection() != 0)
     {
         wxFontStyle style;
-        if (m_styleCtrl->GetStringSelection() == _("Italic"))
+        if (m_styleCtrl->GetSelection() == 2)
             style = wxFONTSTYLE_ITALIC;
         else
             style = wxFONTSTYLE_NORMAL;
@@ -603,10 +742,10 @@ void wxRichTextFontPage::UpdatePreview()
         attr.SetFontStyle(style);
     }
 
-    if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_weightCtrl->GetSelection() != wxNOT_FOUND && m_weightCtrl->GetSelection() != 0)
     {
         wxFontWeight weight;
-        if (m_weightCtrl->GetStringSelection() == _("Bold"))
+        if (m_weightCtrl->GetSelection() == 2)
             weight = wxFONTWEIGHT_BOLD;
         else
             weight = wxFONTWEIGHT_NORMAL;
@@ -614,10 +753,10 @@ void wxRichTextFontPage::UpdatePreview()
         attr.SetFontWeight(weight);
     }
 
-    if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
+    if (m_underliningCtrl->GetSelection() != wxNOT_FOUND && m_underliningCtrl->GetSelection() != 0)
     {
         bool underlined;
-        if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
+        if (m_underliningCtrl->GetSelection() == 2)
             underlined = true;
         else
             underlined = false;
@@ -637,6 +776,11 @@ void wxRichTextFontPage::UpdatePreview()
         textEffects |= wxTEXT_ATTR_EFFECT_CAPITALS;
     }
 
+    if (m_smallCapitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
+    {
+        textEffects |= wxTEXT_ATTR_EFFECT_SMALL_CAPITALS;
+    }
+
     if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
         textEffects |= wxTEXT_ATTR_EFFECT_SUPERSCRIPT;
     else if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
@@ -740,11 +884,15 @@ void wxRichTextFontPage::OnSizeTextCtrlUpdated( wxCommandEvent& WXUNUSED(event)
 
 void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent& event )
 {
+    bool oldDontUpdate = m_dontUpdate;
     m_dontUpdate = true;
 
     m_sizeTextCtrl->SetValue(event.GetString());
 
-    m_dontUpdate = false;
+    m_dontUpdate = oldDontUpdate;
+
+    if (m_dontUpdate)
+        return;
 
     UpdatePreview();
 }
@@ -755,11 +903,15 @@ void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent& event )
 
 void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent& WXUNUSED(event) )
 {
+    bool oldDontUpdate = m_dontUpdate;
     m_dontUpdate = true;
 
     m_faceTextCtrl->SetValue(m_faceListBox->GetFaceName(m_faceListBox->GetSelection()));
 
-    m_dontUpdate = false;
+    m_dontUpdate = oldDontUpdate;
+
+    if (m_dontUpdate)
+        return;
 
     UpdatePreview();
 }
@@ -770,6 +922,9 @@ void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent& WXUNUSED(event)
 
 void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     UpdatePreview();
 }
 
@@ -780,6 +935,9 @@ void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent& WXUNUSED(event) )
 
 void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     UpdatePreview();
 }
 
@@ -790,6 +948,9 @@ void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent& WXUNUSED(eve
 
 void wxRichTextFontPage::OnWeightCtrlSelected( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     UpdatePreview();
 }
 
@@ -800,6 +961,19 @@ void wxRichTextFontPage::OnColourClicked( wxCommandEvent& event )
     else if (event.GetId() == m_bgColourCtrl->GetId())
         m_bgColourPresent = true;
 
+    m_dontUpdate = true;
+
+    if (event.GetId() == m_colourCtrl->GetId())
+    {
+        m_textColourLabel->SetValue(true);
+    }
+    else if (event.GetId() == m_bgColourCtrl->GetId())
+    {
+        m_bgColourLabel->SetValue(true);
+    }
+
+    m_dontUpdate = false;
+
     UpdatePreview();
 }
 /*!
@@ -808,6 +982,9 @@ void wxRichTextFontPage::OnColourClicked( wxCommandEvent& event )
 
 void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     UpdatePreview();
 }
 
@@ -817,6 +994,9 @@ void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(even
 
 void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     UpdatePreview();
 }
 
@@ -826,6 +1006,9 @@ void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
 
 void wxRichTextFontPage::OnRichtextfontpageSuperscriptClick( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
         m_subscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
 
@@ -838,8 +1021,87 @@ void wxRichTextFontPage::OnRichtextfontpageSuperscriptClick( wxCommandEvent& WXU
 
 void wxRichTextFontPage::OnRichtextfontpageSubscriptClick( wxCommandEvent& WXUNUSED(event) )
 {
+    if (m_dontUpdate)
+        return;
+
     if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
         m_superscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
 
     UpdatePreview();
 }
+
+/*!
+ * wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZE_UNITS
+ */
+
+void wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected( wxCommandEvent& WXUNUSED(event) )
+{
+    if (m_dontUpdate)
+        return;
+
+    UpdatePreview();
+}
+
+/*!
+ * wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
+ */
+
+void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp( wxSpinEvent& WXUNUSED(event) )
+{
+    wxString text = m_sizeTextCtrl->GetValue();
+    if (!text.IsEmpty())
+    {
+        int size = wxAtoi(text);
+        if (size > 0)
+        {
+            size ++;
+            m_sizeTextCtrl->SetValue(wxString::Format(wxT("%d"), size));
+            UpdatePreview();
+        }
+    }
+}
+
+/*!
+ * wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
+ */
+
+void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown( wxSpinEvent& WXUNUSED(event) )
+{
+    wxString text = m_sizeTextCtrl->GetValue();
+    if (!text.IsEmpty())
+    {
+        int size = wxAtoi(text);
+        if (size > 0)
+        {
+            size --;
+            m_sizeTextCtrl->SetValue(wxString::Format(wxT("%d"), size));
+            UpdatePreview();
+        }
+    }
+}
+
+/*!
+ * wxEVT_IDLE event handler for ID_RICHTEXTFONTPAGE
+ */
+
+void wxRichTextFontPage::OnIdle( wxIdleEvent& WXUNUSED(event) )
+{
+    if (!m_sizeUnitsCtrl)
+        return;
+
+    if (m_sizeUnitsCtrl->GetSelection() == 1 && m_sizeListBox->IsShown())
+    {
+        m_fontListBoxParent->Show(m_sizeListBox, false);
+        Layout();
+    }
+    else if (m_sizeUnitsCtrl->GetSelection() == 0 && !m_sizeListBox->IsShown())
+    {
+        m_fontListBoxParent->Show(m_sizeListBox, true);
+        Layout();
+    }
+    if (!wxRichTextFormattingDialog::GetDialog(this)->HasOption(wxRichTextFormattingDialog::Option_AllowPixelFontSize) &&
+        m_sizeUnitsCtrl->IsEnabled())
+    {
+        m_sizeUnitsCtrl->Disable();
+    }
+}