]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextfontpage.cpp
corrected off by 1 error in cMB2WC() call (thanks valgrind)
[wxWidgets.git] / src / richtext / richtextfontpage.cpp
index b6c2f58aa03fd46522653ec80b3a3e460f497817..1324dab7f1234ba00349127a9b67138a579a6fd8 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#include "../../include/wx/richtext/richtextfontpage.h"
+#include "wx/richtext/richtextfontpage.h"
 
 /*!
  * wxRichTextFontPage type definition
 
 /*!
  * wxRichTextFontPage type definition
@@ -38,6 +38,10 @@ BEGIN_EVENT_TABLE( wxRichTextFontPage, wxPanel )
 
     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxRichTextFontPage::OnUnderliningCtrlSelected )
 
 
     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxRichTextFontPage::OnUnderliningCtrlSelected )
 
+    EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, wxRichTextFontPage::OnStrikethroughctrlClick )
+
+    EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
+
 ////@end wxRichTextFontPage event table entries
 
 END_EVENT_TABLE()
 ////@end wxRichTextFontPage event table entries
 
 END_EVENT_TABLE()
@@ -75,6 +79,8 @@ void wxRichTextFontPage::Init()
     m_weightCtrl = NULL;
     m_underliningCtrl = NULL;
     m_colourCtrl = NULL;
     m_weightCtrl = NULL;
     m_underliningCtrl = NULL;
     m_colourCtrl = NULL;
+    m_strikethroughCtrl = NULL;
+    m_capitalsCtrl = NULL;
     m_previewCtrl = NULL;
 ////@end wxRichTextFontPage member initialisation
 }
     m_previewCtrl = NULL;
 ////@end wxRichTextFontPage member initialisation
 }
@@ -120,7 +126,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer4->Add(itemBoxSizer5, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText6 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Font:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer4->Add(itemBoxSizer5, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText6 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Font:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_faceTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_FACETEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
     m_faceTextCtrl->SetHelpText(_("Type a font name."));
 
     m_faceTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_FACETEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
     m_faceTextCtrl->SetHelpText(_("Type a font name."));
@@ -138,7 +144,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer4->Add(itemBoxSizer9, 0, wxGROW, 5);
 
     wxStaticText* itemStaticText10 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer4->Add(itemBoxSizer9, 0, wxGROW, 5);
 
     wxStaticText* itemStaticText10 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer9->Add(itemStaticText10, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer9->Add(itemStaticText10, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_sizeTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, _T(""), wxDefaultPosition, wxSize(50, -1), 0 );
     m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
 
     m_sizeTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, _T(""), wxDefaultPosition, wxSize(50, -1), 0 );
     m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
@@ -160,7 +166,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer13->Add(itemBoxSizer14, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText15 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer13->Add(itemBoxSizer14, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText15 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxString* m_styleCtrlStrings = NULL;
     m_styleCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_STYLECTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_styleCtrlStrings, wxCB_READONLY );
 
     wxString* m_styleCtrlStrings = NULL;
     m_styleCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_STYLECTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_styleCtrlStrings, wxCB_READONLY );
@@ -173,7 +179,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer13->Add(itemBoxSizer17, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText18 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer13->Add(itemBoxSizer17, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText18 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxString* m_weightCtrlStrings = NULL;
     m_weightCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_weightCtrlStrings, wxCB_READONLY );
 
     wxString* m_weightCtrlStrings = NULL;
     m_weightCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_weightCtrlStrings, wxCB_READONLY );
@@ -186,7 +192,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer13->Add(itemBoxSizer20, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText21 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer13->Add(itemBoxSizer20, 1, wxGROW, 5);
 
     wxStaticText* itemStaticText21 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer20->Add(itemStaticText21, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer20->Add(itemStaticText21, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     wxString* m_underliningCtrlStrings = NULL;
     m_underliningCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_underliningCtrlStrings, wxCB_READONLY );
 
     wxString* m_underliningCtrlStrings = NULL;
     m_underliningCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_underliningCtrlStrings, wxCB_READONLY );
@@ -199,7 +205,7 @@ void wxRichTextFontPage::CreateControls()
     itemBoxSizer13->Add(itemBoxSizer23, 0, wxGROW, 5);
 
     wxStaticText* itemStaticText24 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
     itemBoxSizer13->Add(itemBoxSizer23, 0, wxGROW, 5);
 
     wxStaticText* itemStaticText24 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
-    itemBoxSizer23->Add(itemStaticText24, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
+    itemBoxSizer23->Add(itemStaticText24, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
 
     m_colourCtrl = new wxRichTextColourSwatchCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_COLOURCTRL, wxDefaultPosition, wxSize(40, 20), wxSIMPLE_BORDER );
     m_colourCtrl->SetHelpText(_("Click to change the text colour."));
 
     m_colourCtrl = new wxRichTextColourSwatchCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_COLOURCTRL, wxDefaultPosition, wxSize(40, 20), wxSIMPLE_BORDER );
     m_colourCtrl->SetHelpText(_("Click to change the text colour."));
@@ -207,6 +213,23 @@ void wxRichTextFontPage::CreateControls()
         m_colourCtrl->SetToolTip(_("Click to change the text colour."));
     itemBoxSizer23->Add(m_colourCtrl, 0, wxALIGN_LEFT|wxALL, 5);
 
         m_colourCtrl->SetToolTip(_("Click to change the text colour."));
     itemBoxSizer23->Add(m_colourCtrl, 0, wxALIGN_LEFT|wxALL, 5);
 
+    wxBoxSizer* itemBoxSizer26 = new wxBoxSizer(wxHORIZONTAL);
+    itemBoxSizer3->Add(itemBoxSizer26, 0, wxGROW, 5);
+
+    m_strikethroughCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, _("&Strikethrough"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_strikethroughCtrl->SetValue(false);
+    m_strikethroughCtrl->SetHelpText(_("Check to show a line through the text."));
+    if (ShowToolTips())
+        m_strikethroughCtrl->SetToolTip(_("Check to show a line through the text."));
+    itemBoxSizer26->Add(m_strikethroughCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+    m_capitalsCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_CAPSCTRL, _("Ca&pitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+    m_capitalsCtrl->SetValue(false);
+    m_capitalsCtrl->SetHelpText(_("Check to show the text in capitals."));
+    if (ShowToolTips())
+        m_capitalsCtrl->SetToolTip(_("Check to show the text in capitals."));
+    itemBoxSizer26->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
     itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
 
     m_previewCtrl = new wxRichTextFontPreviewCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_PREVIEWCTRL, wxDefaultPosition, wxSize(100, 80), wxSIMPLE_BORDER );
     itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
 
     m_previewCtrl = new wxRichTextFontPreviewCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_PREVIEWCTRL, wxDefaultPosition, wxSize(100, 80), wxSIMPLE_BORDER );
@@ -329,6 +352,26 @@ bool wxRichTextFontPage::TransferDataFromWindow()
     }
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
     }
     else
         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
+        
+    if (m_strikethroughCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
+
+        if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
+            attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
+        else
+            attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
+    }
+
+    if (m_capitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
+    {
+        attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_CAPITALS);
+    
+        if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
+            attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_CAPITALS);
+        else
+            attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
+    }
 
     return true;
 }
 
     return true;
 }
@@ -340,7 +383,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
     m_dontUpdate = true;
     wxTextAttrEx* attr = GetAttributes();
 
     m_dontUpdate = true;
     wxTextAttrEx* attr = GetAttributes();
 
-    if (attr->HasFont() && attr->HasFaceName())
+    if (attr->HasFont() && attr->HasFontFaceName())
     {
         m_faceTextCtrl->SetValue(attr->GetFont().GetFaceName());
         m_faceListBox->SetFaceNameSelection(attr->GetFont().GetFaceName());
     {
         m_faceTextCtrl->SetValue(attr->GetFont().GetFaceName());
         m_faceListBox->SetFaceNameSelection(attr->GetFont().GetFaceName());
@@ -351,7 +394,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_faceListBox->SetFaceNameSelection(wxEmptyString);
     }
 
         m_faceListBox->SetFaceNameSelection(wxEmptyString);
     }
 
-    if (attr->HasFont() && attr->HasSize())
+    if (attr->HasFont() && attr->HasFontSize())
     {
         wxString strSize = wxString::Format(wxT("%d"), attr->GetFont().GetPointSize());
         m_sizeTextCtrl->SetValue(strSize);
     {
         wxString strSize = wxString::Format(wxT("%d"), attr->GetFont().GetPointSize());
         m_sizeTextCtrl->SetValue(strSize);
@@ -364,7 +407,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_sizeListBox->SetSelection(wxNOT_FOUND);
     }
 
         m_sizeListBox->SetSelection(wxNOT_FOUND);
     }
 
-    if (attr->HasFont() && attr->HasWeight())
+    if (attr->HasFont() && attr->HasFontWeight())
     {
         if (attr->GetFont().GetWeight() == wxBOLD)
             m_weightCtrl->SetSelection(1);
     {
         if (attr->GetFont().GetWeight() == wxBOLD)
             m_weightCtrl->SetSelection(1);
@@ -376,7 +419,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_weightCtrl->SetSelection(wxNOT_FOUND);
     }
 
         m_weightCtrl->SetSelection(wxNOT_FOUND);
     }
 
-    if (attr->HasFont() && attr->HasItalic())
+    if (attr->HasFont() && attr->HasFontItalic())
     {
         if (attr->GetFont().GetStyle() == wxITALIC)
             m_styleCtrl->SetSelection(1);
     {
         if (attr->GetFont().GetStyle() == wxITALIC)
             m_styleCtrl->SetSelection(1);
@@ -388,7 +431,7 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_styleCtrl->SetSelection(wxNOT_FOUND);
     }
 
         m_styleCtrl->SetSelection(wxNOT_FOUND);
     }
 
-    if (attr->HasFont() && attr->HasUnderlined())
+    if (attr->HasFont() && attr->HasFontUnderlined())
     {
         if (attr->GetFont().GetUnderlined())
             m_underliningCtrl->SetSelection(1);
     {
         if (attr->GetFont().GetUnderlined())
             m_underliningCtrl->SetSelection(1);
@@ -406,6 +449,34 @@ bool wxRichTextFontPage::TransferDataToWindow()
         m_colourPresent = true;
     }
 
         m_colourPresent = true;
     }
 
+    if (attr->HasTextEffects())
+    {
+        if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
+        {
+            if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
+                m_strikethroughCtrl->Set3StateValue(wxCHK_CHECKED);
+            else
+                m_strikethroughCtrl->Set3StateValue(wxCHK_UNCHECKED);
+        }
+        else
+            m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+
+        if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_CAPITALS)
+        {
+            if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)
+                m_capitalsCtrl->Set3StateValue(wxCHK_CHECKED);
+            else
+                m_capitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
+        }
+        else
+            m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+    }
+    else
+    {
+        m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+        m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
+    }
+
     UpdatePreview();
 
     m_dontUpdate = false;
     UpdatePreview();
 
     m_dontUpdate = false;
@@ -472,8 +543,21 @@ void wxRichTextFontPage::UpdatePreview()
 
         font.SetUnderlined(underlined);
     }
 
         font.SetUnderlined(underlined);
     }
+    
+    int textEffects = 0;
+
+    if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
+    {
+        textEffects |= wxTEXT_ATTR_EFFECT_STRIKETHROUGH;
+    }
+
+    if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
+    {
+        textEffects |= wxTEXT_ATTR_EFFECT_CAPITALS;
+    }
 
     m_previewCtrl->SetFont(font);
 
     m_previewCtrl->SetFont(font);
+    m_previewCtrl->SetTextEffects(textEffects);
     m_previewCtrl->Refresh();
 }
 
     m_previewCtrl->Refresh();
 }
 
@@ -538,7 +622,7 @@ void wxRichTextFontPage::OnFaceTextCtrlUpdated( wxCommandEvent& WXUNUSED(event)
             {
                 if (arr[i].Mid(0, facename.Length()).Lower() == facename.Lower())
                 {
             {
                 if (arr[i].Mid(0, facename.Length()).Lower() == facename.Lower())
                 {
-                    m_faceListBox->ScrollToLine(i);
+                    m_faceListBox->ScrollToRow(i);
                     break;
                 }
             }
                     break;
                 }
             }
@@ -628,3 +712,22 @@ void wxRichTextFontPage::OnColourClicked( wxCommandEvent& WXUNUSED(event) )
 
     UpdatePreview();
 }
 
     UpdatePreview();
 }
+/*!
+ * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
+ */
+
+void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(event) )
+{
+    UpdatePreview();
+}
+
+/*!
+ * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL
+ */
+
+void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
+{
+    UpdatePreview();
+}
+
+