1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        src/richtext/richtextfontpage.cpp
3 // Purpose:     Font page for wxRichTextFormattingDialog
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     2006-10-02
7 // Copyright:   (c) Julian Smart
8 // Licence:     wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10 
11 #include "wx/richtext/richtextfontpage.h"
12 
13 /*!
14  * wxRichTextFontPage type definition
15  */
16 
IMPLEMENT_DYNAMIC_CLASS(wxRichTextFontPage,wxRichTextDialogPage)17 IMPLEMENT_DYNAMIC_CLASS( wxRichTextFontPage, wxRichTextDialogPage )
18 
19 /*!
20  * wxRichTextFontPage event table definition
21  */
22 
23 BEGIN_EVENT_TABLE( wxRichTextFontPage, wxRichTextDialogPage )
24     EVT_LISTBOX( ID_RICHTEXTFONTPAGE_FACELISTBOX, wxRichTextFontPage::OnFaceListBoxSelected )
25     EVT_BUTTON( ID_RICHTEXTFONTPAGE_COLOURCTRL, wxRichTextFontPage::OnColourClicked )
26     EVT_BUTTON( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxRichTextFontPage::OnColourClicked )
27 
28 ////@begin wxRichTextFontPage event table entries
29     EVT_IDLE( wxRichTextFontPage::OnIdle )
30 
31     EVT_TEXT( ID_RICHTEXTFONTPAGE_FACETEXTCTRL, wxRichTextFontPage::OnFaceTextCtrlUpdated )
32 
33     EVT_TEXT( ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, wxRichTextFontPage::OnSizeTextCtrlUpdated )
34 
35     EVT_SPIN_UP( ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp )
36     EVT_SPIN_DOWN( ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown )
37 
38     EVT_CHOICE( ID_RICHTEXTFONTPAGE_SIZE_UNITS, wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected )
39 
40     EVT_LISTBOX( ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxRichTextFontPage::OnSizeListBoxSelected )
41 
42     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_STYLECTRL, wxRichTextFontPage::OnStyleCtrlSelected )
43 
44     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_WEIGHTCTRL, wxRichTextFontPage::OnWeightCtrlSelected )
45 
46     EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxRichTextFontPage::OnUnderliningCtrlSelected )
47 
48     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL, wxRichTextFontPage::OnUnderliningCtrlSelected )
49 
50     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL, wxRichTextFontPage::OnUnderliningCtrlSelected )
51 
52     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, wxRichTextFontPage::OnStrikethroughctrlClick )
53 
54     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
55 
56     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SMALLCAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
57 
58     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUPERSCRIPT, wxRichTextFontPage::OnRichtextfontpageSuperscriptClick )
59 
60     EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUBSCRIPT, wxRichTextFontPage::OnRichtextfontpageSubscriptClick )
61 
62 ////@end wxRichTextFontPage event table entries
63 
64 END_EVENT_TABLE()
65 
66 IMPLEMENT_HELP_PROVISION(wxRichTextFontPage)
67 /*!
68  * wxRichTextFontPage constructors
69  */
70 
71 wxRichTextFontPage::wxRichTextFontPage( )
72 {
73     Init();
74 }
75 
wxRichTextFontPage(wxWindow * parent,wxWindowID id,const wxPoint & pos,const wxSize & size,long style)76 wxRichTextFontPage::wxRichTextFontPage( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
77 {
78     Init();
79     Create(parent, id, pos, size, style);
80 }
81 
82 /*!
83  * Initialise members
84  */
85 
Init()86 void wxRichTextFontPage::Init()
87 {
88     m_dontUpdate = false;
89     m_colourPresent = false;
90     m_bgColourPresent = false;
91 
92 ////@begin wxRichTextFontPage member initialisation
93     m_faceTextCtrl = NULL;
94     m_sizeTextCtrl = NULL;
95     m_fontSizeSpinButtons = NULL;
96     m_sizeUnitsCtrl = NULL;
97     m_fontListBoxParent = NULL;
98     m_faceListBox = NULL;
99     m_sizeListBox = NULL;
100     m_styleCtrl = NULL;
101     m_weightCtrl = NULL;
102     m_underliningCtrl = NULL;
103     m_textColourLabel = NULL;
104     m_colourCtrl = NULL;
105     m_bgColourLabel = NULL;
106     m_bgColourCtrl = NULL;
107     m_strikethroughCtrl = NULL;
108     m_capitalsCtrl = NULL;
109     m_smallCapitalsCtrl = NULL;
110     m_superscriptCtrl = NULL;
111     m_subscriptCtrl = NULL;
112     m_previewCtrl = NULL;
113 ////@end wxRichTextFontPage member initialisation
114 }
115 
116 /*!
117  * wxRichTextFontPage creator
118  */
119 
Create(wxWindow * parent,wxWindowID id,const wxPoint & pos,const wxSize & size,long style)120 bool wxRichTextFontPage::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
121 {
122 ////@begin wxRichTextFontPage creation
123     wxRichTextDialogPage::Create( parent, id, pos, size, style );
124 
125     CreateControls();
126     if (GetSizer())
127     {
128         GetSizer()->SetSizeHints(this);
129     }
130     Centre();
131 ////@end wxRichTextFontPage creation
132     return true;
133 }
134 
135 /*!
136  * Control creation for wxRichTextFontPage
137  */
138 
CreateControls()139 void wxRichTextFontPage::CreateControls()
140 {
141 ////@begin wxRichTextFontPage content construction
142     wxRichTextFontPage* itemRichTextDialogPage1 = this;
143 
144     wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
145     itemRichTextDialogPage1->SetSizer(itemBoxSizer2);
146 
147     wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
148     itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
149 
150     wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
151     itemBoxSizer3->Add(itemBoxSizer4, 1, wxGROW, 5);
152 
153     wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
154     itemBoxSizer4->Add(itemBoxSizer5, 1, wxGROW, 5);
155 
156     wxStaticText* itemStaticText6 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Font:"), wxDefaultPosition, wxDefaultSize, 0 );
157     itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
158 
159     m_faceTextCtrl = new wxTextCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_FACETEXTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
160     m_faceTextCtrl->SetHelpText(_("Type a font name."));
161     if (wxRichTextFontPage::ShowToolTips())
162         m_faceTextCtrl->SetToolTip(_("Type a font name."));
163     itemBoxSizer5->Add(m_faceTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
164 
165     wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL);
166     itemBoxSizer4->Add(itemBoxSizer8, 0, wxGROW, 5);
167 
168     wxStaticText* itemStaticText9 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
169     itemBoxSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
170 
171     wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxHORIZONTAL);
172     itemBoxSizer8->Add(itemBoxSizer10, 0, wxGROW, 5);
173 
174     m_sizeTextCtrl = new wxTextCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 );
175     m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
176     if (wxRichTextFontPage::ShowToolTips())
177         m_sizeTextCtrl->SetToolTip(_("Type a size in points."));
178     itemBoxSizer10->Add(m_sizeTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5);
179 
180     m_fontSizeSpinButtons = new wxSpinButton( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SPINBUTTONS, wxDefaultPosition, wxSize(-1, 20), wxSP_VERTICAL );
181     m_fontSizeSpinButtons->SetRange(0, 100);
182     m_fontSizeSpinButtons->SetValue(0);
183     itemBoxSizer10->Add(m_fontSizeSpinButtons, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP, 5);
184 
185     wxArrayString m_sizeUnitsCtrlStrings;
186     m_sizeUnitsCtrlStrings.Add(_("pt"));
187     m_sizeUnitsCtrlStrings.Add(_("px"));
188     m_sizeUnitsCtrl = new wxChoice( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZE_UNITS, wxDefaultPosition, wxDefaultSize, m_sizeUnitsCtrlStrings, 0 );
189     m_sizeUnitsCtrl->SetStringSelection(_("pt"));
190     m_sizeUnitsCtrl->SetHelpText(_("The font size units, points or pixels."));
191     if (wxRichTextFontPage::ShowToolTips())
192         m_sizeUnitsCtrl->SetToolTip(_("The font size units, points or pixels."));
193     itemBoxSizer10->Add(m_sizeUnitsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP, 5);
194 
195     m_fontListBoxParent = new wxBoxSizer(wxHORIZONTAL);
196     itemBoxSizer3->Add(m_fontListBoxParent, 0, wxGROW, 5);
197 
198     m_faceListBox = new wxRichTextFontListBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_FACELISTBOX, wxDefaultPosition, wxSize(200, 100), 0 );
199     m_faceListBox->SetHelpText(_("Lists the available fonts."));
200     if (wxRichTextFontPage::ShowToolTips())
201         m_faceListBox->SetToolTip(_("Lists the available fonts."));
202     m_fontListBoxParent->Add(m_faceListBox, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5);
203 
204     wxArrayString m_sizeListBoxStrings;
205     m_sizeListBox = new wxListBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxDefaultPosition, wxSize(50, -1), m_sizeListBoxStrings, wxLB_SINGLE );
206     m_sizeListBox->SetHelpText(_("Lists font sizes in points."));
207     if (wxRichTextFontPage::ShowToolTips())
208         m_sizeListBox->SetToolTip(_("Lists font sizes in points."));
209     m_fontListBoxParent->Add(m_sizeListBox, 0, wxGROW|wxALL|wxFIXED_MINSIZE, 5);
210 
211     wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxHORIZONTAL);
212     itemBoxSizer3->Add(itemBoxSizer17, 0, wxGROW, 5);
213 
214     wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL);
215     itemBoxSizer17->Add(itemBoxSizer18, 0, wxGROW, 5);
216 
217     wxStaticText* itemStaticText19 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
218     itemBoxSizer18->Add(itemStaticText19, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
219 
220     wxArrayString m_styleCtrlStrings;
221     m_styleCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_STYLECTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_styleCtrlStrings, wxCB_READONLY );
222     m_styleCtrl->SetHelpText(_("Select regular or italic style."));
223     if (wxRichTextFontPage::ShowToolTips())
224         m_styleCtrl->SetToolTip(_("Select regular or italic style."));
225     itemBoxSizer18->Add(m_styleCtrl, 0, wxGROW|wxALL, 5);
226 
227     wxBoxSizer* itemBoxSizer21 = new wxBoxSizer(wxVERTICAL);
228     itemBoxSizer17->Add(itemBoxSizer21, 0, wxGROW, 5);
229 
230     wxStaticText* itemStaticText22 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
231     itemBoxSizer21->Add(itemStaticText22, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
232 
233     wxArrayString m_weightCtrlStrings;
234     m_weightCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_weightCtrlStrings, wxCB_READONLY );
235     m_weightCtrl->SetHelpText(_("Select regular or bold."));
236     if (wxRichTextFontPage::ShowToolTips())
237         m_weightCtrl->SetToolTip(_("Select regular or bold."));
238     itemBoxSizer21->Add(m_weightCtrl, 0, wxGROW|wxALL, 5);
239 
240     wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
241     itemBoxSizer17->Add(itemBoxSizer24, 0, wxGROW, 5);
242 
243     wxStaticText* itemStaticText25 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
244     itemBoxSizer24->Add(itemStaticText25, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
245 
246     wxArrayString m_underliningCtrlStrings;
247     m_underliningCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxEmptyString, wxDefaultPosition, wxSize(110, -1), m_underliningCtrlStrings, wxCB_READONLY );
248     m_underliningCtrl->SetHelpText(_("Select underlining or no underlining."));
249     if (wxRichTextFontPage::ShowToolTips())
250         m_underliningCtrl->SetToolTip(_("Select underlining or no underlining."));
251     itemBoxSizer24->Add(m_underliningCtrl, 0, wxGROW|wxALL, 5);
252 
253     itemBoxSizer17->Add(0, 0, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5);
254 
255     wxBoxSizer* itemBoxSizer28 = new wxBoxSizer(wxVERTICAL);
256     itemBoxSizer17->Add(itemBoxSizer28, 0, wxGROW, 5);
257 
258     m_textColourLabel = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
259     m_textColourLabel->SetValue(false);
260     itemBoxSizer28->Add(m_textColourLabel, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
261 
262     m_colourCtrl = new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_COLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
263     m_colourCtrl->SetHelpText(_("Click to change the text colour."));
264     if (wxRichTextFontPage::ShowToolTips())
265         m_colourCtrl->SetToolTip(_("Click to change the text colour."));
266     itemBoxSizer28->Add(m_colourCtrl, 0, wxGROW|wxALL, 5);
267 
268     wxBoxSizer* itemBoxSizer31 = new wxBoxSizer(wxVERTICAL);
269     itemBoxSizer17->Add(itemBoxSizer31, 0, wxGROW, 5);
270 
271     m_bgColourLabel = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL, _("&Bg colour:"), wxDefaultPosition, wxDefaultSize, 0 );
272     m_bgColourLabel->SetValue(false);
273     itemBoxSizer31->Add(m_bgColourLabel, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
274 
275     m_bgColourCtrl = new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
276     m_bgColourCtrl->SetHelpText(_("Click to change the text background colour."));
277     if (wxRichTextFontPage::ShowToolTips())
278         m_bgColourCtrl->SetToolTip(_("Click to change the text background colour."));
279     itemBoxSizer31->Add(m_bgColourCtrl, 0, wxGROW|wxALL, 5);
280 
281     wxBoxSizer* itemBoxSizer34 = new wxBoxSizer(wxHORIZONTAL);
282     itemBoxSizer3->Add(itemBoxSizer34, 0, wxGROW, 5);
283 
284     m_strikethroughCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, _("&Strikethrough"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
285     m_strikethroughCtrl->SetValue(false);
286     m_strikethroughCtrl->SetHelpText(_("Check to show a line through the text."));
287     if (wxRichTextFontPage::ShowToolTips())
288         m_strikethroughCtrl->SetToolTip(_("Check to show a line through the text."));
289     itemBoxSizer34->Add(m_strikethroughCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
290 
291     m_capitalsCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_CAPSCTRL, _("Ca&pitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
292     m_capitalsCtrl->SetValue(false);
293     m_capitalsCtrl->SetHelpText(_("Check to show the text in capitals."));
294     if (wxRichTextFontPage::ShowToolTips())
295         m_capitalsCtrl->SetToolTip(_("Check to show the text in capitals."));
296     itemBoxSizer34->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
297 
298     m_smallCapitalsCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SMALLCAPSCTRL, _("Small C&apitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
299     m_smallCapitalsCtrl->SetValue(false);
300     m_smallCapitalsCtrl->SetHelpText(_("Check to show the text in small capitals."));
301     if (wxRichTextFontPage::ShowToolTips())
302         m_smallCapitalsCtrl->SetToolTip(_("Check to show the text in small capitals."));
303     itemBoxSizer34->Add(m_smallCapitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
304 
305     m_superscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUPERSCRIPT, _("Supe&rscript"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
306     m_superscriptCtrl->SetValue(false);
307     m_superscriptCtrl->SetHelpText(_("Check to show the text in superscript."));
308     if (wxRichTextFontPage::ShowToolTips())
309         m_superscriptCtrl->SetToolTip(_("Check to show the text in superscript."));
310     itemBoxSizer34->Add(m_superscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
311 
312     m_subscriptCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_SUBSCRIPT, _("Subscrip&t"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
313     m_subscriptCtrl->SetValue(false);
314     m_subscriptCtrl->SetHelpText(_("Check to show the text in subscript."));
315     if (wxRichTextFontPage::ShowToolTips())
316         m_subscriptCtrl->SetToolTip(_("Check to show the text in subscript."));
317     itemBoxSizer34->Add(m_subscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
318 
319     itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
320 
321     m_previewCtrl = new wxRichTextFontPreviewCtrl( itemRichTextDialogPage1, ID_RICHTEXTFONTPAGE_PREVIEWCTRL, wxDefaultPosition, wxSize(100, 60), 0 );
322     m_previewCtrl->SetHelpText(_("Shows a preview of the font settings."));
323     if (wxRichTextFontPage::ShowToolTips())
324         m_previewCtrl->SetToolTip(_("Shows a preview of the font settings."));
325     itemBoxSizer3->Add(m_previewCtrl, 0, wxGROW|wxALL, 5);
326 
327 ////@end wxRichTextFontPage content construction
328 
329     m_fontSizeSpinButtons->SetRange(0, 999);
330 
331     m_faceListBox->UpdateFonts();
332 
333     m_styleCtrl->Append(_("(none)"));
334     m_styleCtrl->Append(_("Regular"));
335     m_styleCtrl->Append(_("Italic"));
336 
337     m_weightCtrl->Append(_("(none)"));
338     m_weightCtrl->Append(_("Regular"));
339     m_weightCtrl->Append(_("Bold"));
340 
341     m_underliningCtrl->Append(_("(none)"));
342     m_underliningCtrl->Append(_("Not underlined"));
343     m_underliningCtrl->Append(_("Underlined"));
344 
345     wxString nStr;
346     int i;
347     for (i = 8; i < 40; i++)
348     {
349         nStr.Printf(wxT("%d"), i);
350         m_sizeListBox->Append(nStr);
351     }
352     m_sizeListBox->Append(wxT("48"));
353     m_sizeListBox->Append(wxT("72"));
354 }
355 
356 /// Transfer data from/to window
TransferDataFromWindow()357 bool wxRichTextFontPage::TransferDataFromWindow()
358 {
359     wxPanel::TransferDataFromWindow();
360 
361     wxRichTextAttr* attr = GetAttributes();
362 
363     if (!m_faceTextCtrl->GetValue().IsEmpty())
364     {
365         wxString faceName = m_faceTextCtrl->GetValue();
366         attr->SetFontFaceName(faceName);
367     }
368     else
369         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_FACE));
370 
371     wxString strSize = m_sizeTextCtrl->GetValue();
372     if (!strSize.IsEmpty())
373     {
374         int sz = wxAtoi(strSize);
375         if (sz > 0)
376         {
377             if (m_sizeUnitsCtrl->GetSelection() == 0)
378                 attr->SetFontPointSize(sz);
379             else
380                 attr->SetFontPixelSize(sz);
381         }
382     }
383     else
384         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_SIZE));
385 
386     if (m_styleCtrl->GetSelection() != wxNOT_FOUND && m_styleCtrl->GetSelection() != 0)
387     {
388         wxFontStyle style;
389         if (m_styleCtrl->GetSelection() == 2)
390             style = wxFONTSTYLE_ITALIC;
391         else
392             style = wxFONTSTYLE_NORMAL;
393 
394         attr->SetFontStyle(style);
395     }
396     else
397         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_ITALIC));
398 
399     if (m_weightCtrl->GetSelection() != wxNOT_FOUND && m_weightCtrl->GetSelection() != 0)
400     {
401         wxFontWeight weight;
402         if (m_weightCtrl->GetSelection() == 2)
403             weight = wxFONTWEIGHT_BOLD;
404         else
405             weight = wxFONTWEIGHT_NORMAL;
406 
407         attr->SetFontWeight(weight);
408     }
409     else
410         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_WEIGHT));
411 
412     if (m_underliningCtrl->GetSelection() != wxNOT_FOUND && m_underliningCtrl->GetSelection() != 0)
413     {
414         bool underlined;
415         if (m_underliningCtrl->GetSelection() == 2)
416             underlined = true;
417         else
418             underlined = false;
419 
420         attr->SetFontUnderlined(underlined);
421     }
422     else
423         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_UNDERLINE));
424 
425     if (m_textColourLabel->GetValue())
426     {
427         attr->SetTextColour(m_colourCtrl->GetColour());
428     }
429     else
430         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
431 
432     if (m_bgColourLabel->GetValue())
433     {
434         attr->SetBackgroundColour(m_bgColourCtrl->GetColour());
435     }
436     else
437         attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_BACKGROUND_COLOUR));
438 
439     if (m_strikethroughCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
440     {
441         attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
442 
443         if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
444             attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
445         else
446             attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
447     }
448     else
449     {
450         attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
451         attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
452     }
453 
454     if (m_capitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
455     {
456         attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_CAPITALS);
457 
458         if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
459             attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_CAPITALS);
460         else
461             attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
462     }
463     else
464     {
465         attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
466         attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
467     }
468 
469     if (m_smallCapitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
470     {
471         attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
472 
473         if (m_smallCapitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
474             attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
475         else
476             attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
477     }
478     else
479     {
480         attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
481         attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SMALL_CAPITALS);
482     }
483 
484     if (m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
485     {
486         attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
487         attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
488         attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUBSCRIPT);
489     }
490     else if (m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
491     {
492         attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUBSCRIPT);
493         attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUBSCRIPT);
494         attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
495     }
496     else
497     {
498         // If they are undetermined, we don't want to include these flags in the text effects - the objects
499         // should retain their original style.
500         attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT|wxTEXT_ATTR_EFFECT_SUPERSCRIPT) );
501         attr->SetTextEffects(attr->GetTextEffects() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT|wxTEXT_ATTR_EFFECT_SUPERSCRIPT) );
502     }
503 
504     if (attr->GetTextEffectFlags() == 0)
505         attr->SetFlags(attr->GetFlags() & ~wxTEXT_ATTR_EFFECTS);
506 
507     return true;
508 }
509 
TransferDataToWindow()510 bool wxRichTextFontPage::TransferDataToWindow()
511 {
512     wxPanel::TransferDataToWindow();
513 
514     m_dontUpdate = true;
515     wxRichTextAttr* attr = GetAttributes();
516 
517     if (attr->HasFontFaceName())
518     {
519         m_faceTextCtrl->SetValue(attr->GetFontFaceName());
520         m_faceListBox->SetFaceNameSelection(attr->GetFont().GetFaceName());
521     }
522     else
523     {
524         m_faceTextCtrl->SetValue(wxEmptyString);
525         m_faceListBox->SetFaceNameSelection(wxEmptyString);
526     }
527 
528     if (attr->HasFontPointSize())
529     {
530         wxString strSize = wxString::Format(wxT("%d"), attr->GetFontSize());
531         m_sizeTextCtrl->SetValue(strSize);
532         m_fontSizeSpinButtons->SetValue(attr->GetFontSize());
533         m_sizeUnitsCtrl->SetSelection(0);
534         if (m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
535             m_sizeListBox->SetStringSelection(strSize);
536     }
537     else if (attr->HasFontPixelSize())
538     {
539         wxString strSize = wxString::Format(wxT("%d"), attr->GetFontSize());
540         m_sizeTextCtrl->SetValue(strSize);
541         m_fontSizeSpinButtons->SetValue(attr->GetFontSize());
542         m_sizeUnitsCtrl->SetSelection(1);
543         m_sizeListBox->SetSelection(wxNOT_FOUND);
544     }
545     else
546     {
547         m_sizeTextCtrl->SetValue(wxEmptyString);
548         m_sizeListBox->SetSelection(wxNOT_FOUND);
549     }
550 
551     if (attr->HasFontWeight())
552     {
553         if (attr->GetFontWeight() == wxFONTWEIGHT_BOLD)
554             m_weightCtrl->SetSelection(2);
555         else
556             m_weightCtrl->SetSelection(1);
557     }
558     else
559     {
560         m_weightCtrl->SetSelection(0);
561     }
562 
563     if (attr->HasFontItalic())
564     {
565         if (attr->GetFontStyle() == wxFONTSTYLE_ITALIC)
566             m_styleCtrl->SetSelection(2);
567         else
568             m_styleCtrl->SetSelection(1);
569     }
570     else
571     {
572         m_styleCtrl->SetSelection(0);
573     }
574 
575     if (attr->HasFontUnderlined())
576     {
577         if (attr->GetFontUnderlined())
578             m_underliningCtrl->SetSelection(2);
579         else
580             m_underliningCtrl->SetSelection(1);
581     }
582     else
583     {
584         m_underliningCtrl->SetSelection(0);
585     }
586 
587     if (attr->HasTextColour())
588     {
589         m_colourCtrl->SetColour(attr->GetTextColour());
590         m_textColourLabel->SetValue(true);
591         m_colourPresent = true;
592     }
593     else
594     {
595         m_colourCtrl->SetColour(*wxBLACK);
596         m_textColourLabel->SetValue(false);
597     }
598 
599     if (attr->HasBackgroundColour())
600     {
601         m_bgColourCtrl->SetColour(attr->GetBackgroundColour());
602         m_bgColourLabel->SetValue(true);
603         m_bgColourPresent = true;
604     }
605     else
606     {
607         m_bgColourCtrl->SetColour(*wxWHITE);
608         m_bgColourLabel->SetValue(false);
609     }
610 
611     if (attr->HasTextEffects())
612     {
613         if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
614         {
615             if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
616                 m_strikethroughCtrl->Set3StateValue(wxCHK_CHECKED);
617             else
618                 m_strikethroughCtrl->Set3StateValue(wxCHK_UNCHECKED);
619         }
620         else
621             m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
622 
623         if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_CAPITALS)
624         {
625             if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)
626                 m_capitalsCtrl->Set3StateValue(wxCHK_CHECKED);
627             else
628                 m_capitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
629         }
630         else
631             m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
632 
633         if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_SMALL_CAPITALS)
634         {
635             if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SMALL_CAPITALS)
636                 m_smallCapitalsCtrl->Set3StateValue(wxCHK_CHECKED);
637             else
638                 m_smallCapitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
639         }
640         else
641             m_smallCapitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
642 
643         if ( attr->GetTextEffectFlags() & (wxTEXT_ATTR_EFFECT_SUPERSCRIPT | wxTEXT_ATTR_EFFECT_SUBSCRIPT) )
644         {
645             if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUPERSCRIPT)
646             {
647                 m_superscriptCtrl->Set3StateValue(wxCHK_CHECKED);
648                 m_subscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
649             }
650             else if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUBSCRIPT)
651             {
652                 m_superscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
653                 m_subscriptCtrl->Set3StateValue(wxCHK_CHECKED);
654             }
655             else
656             {
657                 m_superscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
658                 m_subscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
659             }
660         }
661         else
662         {
663             m_superscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
664             m_subscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
665         }
666     }
667     else
668     {
669         m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
670         m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
671         m_smallCapitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
672         m_superscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
673         m_subscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
674     }
675 
676     UpdatePreview();
677 
678     m_dontUpdate = false;
679 
680     return true;
681 }
682 
GetAttributes()683 wxRichTextAttr* wxRichTextFontPage::GetAttributes()
684 {
685     return wxRichTextFormattingDialog::GetDialogAttributes(this);
686 }
687 
688 /// Updates the font preview
UpdatePreview()689 void wxRichTextFontPage::UpdatePreview()
690 {
691     wxRichTextAttr attr;
692 
693     if (m_textColourLabel->GetValue())
694         m_previewCtrl->SetForegroundColour(m_colourCtrl->GetColour());
695     else
696     {
697         m_previewCtrl->SetForegroundColour(*wxBLACK);
698         if (!(m_colourCtrl->GetColour() == *wxBLACK))
699         {
700             m_colourCtrl->SetColour(*wxBLACK);
701             m_colourCtrl->Refresh();
702         }
703     }
704 
705     if (m_bgColourLabel->GetValue())
706         m_previewCtrl->SetBackgroundColour(m_bgColourCtrl->GetColour());
707     else
708     {
709         m_previewCtrl->SetBackgroundColour(*wxWHITE);
710 
711         if (!(m_bgColourCtrl->GetColour() == *wxWHITE))
712         {
713             m_bgColourCtrl->SetColour(*wxWHITE);
714             m_bgColourCtrl->Refresh();
715         }
716     }
717 
718     if (m_faceListBox->GetSelection() != wxNOT_FOUND)
719     {
720         wxString faceName = m_faceListBox->GetFaceName(m_faceListBox->GetSelection());
721         attr.SetFontFaceName(faceName);
722     }
723 
724     wxString strSize = m_sizeTextCtrl->GetValue();
725     if (!strSize.IsEmpty())
726     {
727         int sz = wxAtoi(strSize);
728         if (sz > 0)
729         {
730             if (m_sizeUnitsCtrl->GetSelection() == 1)
731                 attr.SetFontPixelSize(sz);
732             else
733                 attr.SetFontPointSize(sz);
734         }
735     }
736 
737     if (m_styleCtrl->GetSelection() != wxNOT_FOUND && m_styleCtrl->GetSelection() != 0)
738     {
739         wxFontStyle style;
740         if (m_styleCtrl->GetSelection() == 2)
741             style = wxFONTSTYLE_ITALIC;
742         else
743             style = wxFONTSTYLE_NORMAL;
744 
745         attr.SetFontStyle(style);
746     }
747 
748     if (m_weightCtrl->GetSelection() != wxNOT_FOUND && m_weightCtrl->GetSelection() != 0)
749     {
750         wxFontWeight weight;
751         if (m_weightCtrl->GetSelection() == 2)
752             weight = wxFONTWEIGHT_BOLD;
753         else
754             weight = wxFONTWEIGHT_NORMAL;
755 
756         attr.SetFontWeight(weight);
757     }
758 
759     if (m_underliningCtrl->GetSelection() != wxNOT_FOUND && m_underliningCtrl->GetSelection() != 0)
760     {
761         bool underlined;
762         if (m_underliningCtrl->GetSelection() == 2)
763             underlined = true;
764         else
765             underlined = false;
766 
767         attr.SetFontUnderlined(underlined);
768     }
769 
770     int textEffects = 0;
771 
772     if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
773     {
774         textEffects |= wxTEXT_ATTR_EFFECT_STRIKETHROUGH;
775     }
776 
777     if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
778     {
779         textEffects |= wxTEXT_ATTR_EFFECT_CAPITALS;
780     }
781 
782     if (m_smallCapitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
783     {
784         textEffects |= wxTEXT_ATTR_EFFECT_SMALL_CAPITALS;
785     }
786 
787     if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
788         textEffects |= wxTEXT_ATTR_EFFECT_SUPERSCRIPT;
789     else if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
790         textEffects |= wxTEXT_ATTR_EFFECT_SUBSCRIPT;
791 
792     wxFont font = attr.GetFont();
793     m_previewCtrl->SetFont(font);
794     m_previewCtrl->SetTextEffects(textEffects);
795     m_previewCtrl->Refresh();
796 }
797 
798 /*!
799  * Should we show tooltips?
800  */
801 
ShowToolTips()802 bool wxRichTextFontPage::ShowToolTips()
803 {
804     return wxRichTextFormattingDialog::ShowToolTips();
805 }
806 
807 /*!
808  * Get bitmap resources
809  */
810 
GetBitmapResource(const wxString & name)811 wxBitmap wxRichTextFontPage::GetBitmapResource( const wxString& name )
812 {
813     // Bitmap retrieval
814 ////@begin wxRichTextFontPage bitmap retrieval
815     wxUnusedVar(name);
816     return wxNullBitmap;
817 ////@end wxRichTextFontPage bitmap retrieval
818 }
819 
820 /*!
821  * Get icon resources
822  */
823 
GetIconResource(const wxString & name)824 wxIcon wxRichTextFontPage::GetIconResource( const wxString& name )
825 {
826     // Icon retrieval
827 ////@begin wxRichTextFontPage icon retrieval
828     wxUnusedVar(name);
829     return wxNullIcon;
830 ////@end wxRichTextFontPage icon retrieval
831 }
832 
833 /*!
834  * wxEVT_TEXT event handler for ID_RICHTEXTFONTPAGE_FACETEXTCTRL
835  */
836 
OnFaceTextCtrlUpdated(wxCommandEvent & WXUNUSED (event))837 void wxRichTextFontPage::OnFaceTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
838 {
839     if (m_dontUpdate)
840         return;
841 
842     wxString facename = m_faceTextCtrl->GetValue();
843     if (!facename.IsEmpty())
844     {
845         if (m_faceListBox->HasFaceName(facename))
846         {
847             m_faceListBox->SetFaceNameSelection(facename);
848             UpdatePreview();
849         }
850         else
851         {
852             // Try to find a partial match
853             const wxArrayString& arr = m_faceListBox->GetFaceNames();
854             size_t i;
855             for (i = 0; i < arr.GetCount(); i++)
856             {
857                 if (arr[i].Mid(0, facename.Length()).Lower() == facename.Lower())
858                 {
859                     m_faceListBox->ScrollToRow(i);
860                     break;
861                 }
862             }
863         }
864     }
865 }
866 
867 
868 /*!
869  * wxEVT_TEXT event handler for ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
870  */
871 
OnSizeTextCtrlUpdated(wxCommandEvent & WXUNUSED (event))872 void wxRichTextFontPage::OnSizeTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
873 {
874     if (m_dontUpdate)
875         return;
876 
877     m_dontUpdate = true;
878 
879     wxString strSize = m_sizeTextCtrl->GetValue();
880     if (!strSize.IsEmpty() && m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
881         m_sizeListBox->SetStringSelection(strSize);
882     if (!strSize.IsEmpty())
883         m_fontSizeSpinButtons->SetValue(wxAtoi(strSize));
884 
885     m_dontUpdate = false;
886 
887     UpdatePreview();
888 }
889 
890 
891 /*!
892  * wxEVT_LISTBOX event handler for ID_RICHTEXTFONTPAGE_SIZELISTBOX
893  */
894 
OnSizeListBoxSelected(wxCommandEvent & event)895 void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent& event )
896 {
897     bool oldDontUpdate = m_dontUpdate;
898     m_dontUpdate = true;
899 
900     m_sizeTextCtrl->SetValue(event.GetString());
901     if (!event.GetString().IsEmpty())
902         m_fontSizeSpinButtons->SetValue(wxAtoi(event.GetString()));
903 
904     m_dontUpdate = oldDontUpdate;
905 
906     if (m_dontUpdate)
907         return;
908 
909     UpdatePreview();
910 }
911 
912 /*!
913  * wxEVT_LISTBOX event handler for ID_RICHTEXTFONTPAGE_FACELISTBOX
914  */
915 
OnFaceListBoxSelected(wxCommandEvent & WXUNUSED (event))916 void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent& WXUNUSED(event) )
917 {
918     bool oldDontUpdate = m_dontUpdate;
919     m_dontUpdate = true;
920 
921     m_faceTextCtrl->SetValue(m_faceListBox->GetFaceName(m_faceListBox->GetSelection()));
922 
923     m_dontUpdate = oldDontUpdate;
924 
925     if (m_dontUpdate)
926         return;
927 
928     UpdatePreview();
929 }
930 
931 /*!
932  * wxEVT_COMBOBOX event handler for ID_RICHTEXTFONTPAGE_STYLECTRL
933  */
934 
OnStyleCtrlSelected(wxCommandEvent & WXUNUSED (event))935 void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent& WXUNUSED(event) )
936 {
937     if (m_dontUpdate)
938         return;
939 
940     UpdatePreview();
941 }
942 
943 
944 /*!
945  * wxEVT_COMBOBOX event handler for ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
946  */
947 
OnUnderliningCtrlSelected(wxCommandEvent & WXUNUSED (event))948 void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent& WXUNUSED(event) )
949 {
950     if (m_dontUpdate)
951         return;
952 
953     UpdatePreview();
954 }
955 
956 
957 /*!
958  * wxEVT_COMBOBOX event handler for ID_RICHTEXTFONTPAGE_WEIGHTCTRL
959  */
960 
OnWeightCtrlSelected(wxCommandEvent & WXUNUSED (event))961 void wxRichTextFontPage::OnWeightCtrlSelected( wxCommandEvent& WXUNUSED(event) )
962 {
963     if (m_dontUpdate)
964         return;
965 
966     UpdatePreview();
967 }
968 
OnColourClicked(wxCommandEvent & event)969 void wxRichTextFontPage::OnColourClicked( wxCommandEvent& event )
970 {
971     if (event.GetId() == m_colourCtrl->GetId())
972         m_colourPresent = true;
973     else if (event.GetId() == m_bgColourCtrl->GetId())
974         m_bgColourPresent = true;
975 
976     m_dontUpdate = true;
977 
978     if (event.GetId() == m_colourCtrl->GetId())
979     {
980         m_textColourLabel->SetValue(true);
981     }
982     else if (event.GetId() == m_bgColourCtrl->GetId())
983     {
984         m_bgColourLabel->SetValue(true);
985     }
986 
987     m_dontUpdate = false;
988 
989     UpdatePreview();
990 }
991 /*!
992  * wxEVT_CHECKBOX event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
993  */
994 
OnStrikethroughctrlClick(wxCommandEvent & WXUNUSED (event))995 void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(event) )
996 {
997     if (m_dontUpdate)
998         return;
999 
1000     UpdatePreview();
1001 }
1002 
1003 /*!
1004  * wxEVT_CHECKBOX event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL
1005  */
1006 
OnCapsctrlClick(wxCommandEvent & WXUNUSED (event))1007 void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
1008 {
1009     if (m_dontUpdate)
1010         return;
1011 
1012     UpdatePreview();
1013 }
1014 
1015 /*!
1016  * wxEVT_CHECKBOX event handler for ID_RICHTEXTFONTPAGE_SUPERSCRIPT
1017  */
1018 
OnRichtextfontpageSuperscriptClick(wxCommandEvent & WXUNUSED (event))1019 void wxRichTextFontPage::OnRichtextfontpageSuperscriptClick( wxCommandEvent& WXUNUSED(event) )
1020 {
1021     if (m_dontUpdate)
1022         return;
1023 
1024     if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
1025         m_subscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
1026 
1027     UpdatePreview();
1028 }
1029 
1030 /*!
1031  * wxEVT_CHECKBOX event handler for ID_RICHTEXTFONTPAGE_SUBSCRIPT
1032  */
1033 
OnRichtextfontpageSubscriptClick(wxCommandEvent & WXUNUSED (event))1034 void wxRichTextFontPage::OnRichtextfontpageSubscriptClick( wxCommandEvent& WXUNUSED(event) )
1035 {
1036     if (m_dontUpdate)
1037         return;
1038 
1039     if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
1040         m_superscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
1041 
1042     UpdatePreview();
1043 }
1044 
1045 /*!
1046  * wxEVT_CHOICE event handler for ID_RICHTEXTFONTPAGE_SIZE_UNITS
1047  */
1048 
OnRichtextfontpageSizeUnitsSelected(wxCommandEvent & WXUNUSED (event))1049 void wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected( wxCommandEvent& WXUNUSED(event) )
1050 {
1051     if (m_dontUpdate)
1052         return;
1053 
1054     UpdatePreview();
1055 }
1056 
1057 /*!
1058  * wxEVT_SPINCTRL event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
1059  */
1060 
OnRichtextfontpageSpinbuttonsUp(wxSpinEvent & WXUNUSED (event))1061 void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp( wxSpinEvent& WXUNUSED(event) )
1062 {
1063     if (m_dontUpdate)
1064         return;
1065 
1066     m_dontUpdate = true;
1067 
1068     wxString text = m_sizeTextCtrl->GetValue();
1069     int size = 12;
1070     if (!text.IsEmpty())
1071     {
1072         size = wxAtoi(text);
1073         size ++;
1074     }
1075 
1076     if (size < 1 || size > 999)
1077         size = 12;
1078 
1079     if (m_fontSizeSpinButtons->GetValue() != size)
1080         m_fontSizeSpinButtons->SetValue(size);
1081 
1082     wxString newText(wxString::Format(wxT("%d"), size));
1083 
1084     m_sizeTextCtrl->SetValue(newText);
1085     if (!newText.IsEmpty() && m_sizeListBox->FindString(newText) != wxNOT_FOUND)
1086         m_sizeListBox->SetStringSelection(newText);
1087     UpdatePreview();
1088 
1089     m_dontUpdate = false;
1090 }
1091 
1092 /*!
1093  * wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
1094  */
1095 
OnRichtextfontpageSpinbuttonsDown(wxSpinEvent & WXUNUSED (event))1096 void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown( wxSpinEvent& WXUNUSED(event) )
1097 {
1098     if (m_dontUpdate)
1099         return;
1100 
1101     m_dontUpdate = true;
1102 
1103     wxString text = m_sizeTextCtrl->GetValue();
1104     int size = 12;
1105     if (!text.IsEmpty())
1106     {
1107         size = wxAtoi(text);
1108         if (size > 1)
1109             size --;
1110     }
1111 
1112     if (size < 1 || size > 999)
1113         size = 12;
1114 
1115     if (m_fontSizeSpinButtons->GetValue() != size)
1116         m_fontSizeSpinButtons->SetValue(size);
1117 
1118     wxString newText(wxString::Format(wxT("%d"), size));
1119 
1120     m_sizeTextCtrl->SetValue(newText);
1121     if (!newText.IsEmpty() && m_sizeListBox->FindString(newText) != wxNOT_FOUND)
1122         m_sizeListBox->SetStringSelection(newText);
1123     UpdatePreview();
1124 
1125     m_dontUpdate = false;
1126 }
1127 
1128 /*!
1129  * wxEVT_IDLE event handler for ID_RICHTEXTFONTPAGE
1130  */
1131 
OnIdle(wxIdleEvent & WXUNUSED (event))1132 void wxRichTextFontPage::OnIdle( wxIdleEvent& WXUNUSED(event) )
1133 {
1134     if (!m_sizeUnitsCtrl)
1135         return;
1136 
1137     if (m_sizeUnitsCtrl->GetSelection() == 1 && m_sizeListBox->IsShown())
1138     {
1139         m_fontListBoxParent->Show(m_sizeListBox, false);
1140         Layout();
1141     }
1142     else if (m_sizeUnitsCtrl->GetSelection() == 0 && !m_sizeListBox->IsShown())
1143     {
1144         m_fontListBoxParent->Show(m_sizeListBox, true);
1145         Layout();
1146     }
1147     if (!wxRichTextFormattingDialog::GetDialog(this)->HasOption(wxRichTextFormattingDialog::Option_AllowPixelFontSize) &&
1148         m_sizeUnitsCtrl->IsEnabled())
1149     {
1150         m_sizeUnitsCtrl->Disable();
1151     }
1152 }
1153