1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/richtext/richeditfontpage.cpp
3 // Purpose: Font page for wxRichTextFormattingDialog
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 2006-10-02
7 // RCS-ID: $Id: richtextfontpage.cpp 62052 2009-09-24 07:36:00Z JS $
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #include "wx/richtext/richtextfontpage.h"
13
14 /*!
15 * wxRichTextFontPage type definition
16 */
17
IMPLEMENT_DYNAMIC_CLASS(wxRichTextFontPage,wxPanel)18 IMPLEMENT_DYNAMIC_CLASS( wxRichTextFontPage, wxPanel )
19
20 /*!
21 * wxRichTextFontPage event table definition
22 */
23
24 BEGIN_EVENT_TABLE( wxRichTextFontPage, wxPanel )
25 EVT_LISTBOX( ID_RICHTEXTFONTPAGE_FACELISTBOX, wxRichTextFontPage::OnFaceListBoxSelected )
26 EVT_BUTTON( ID_RICHTEXTFONTPAGE_COLOURCTRL, wxRichTextFontPage::OnColourClicked )
27 EVT_BUTTON( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxRichTextFontPage::OnColourClicked )
28
29 ////@begin wxRichTextFontPage event table entries
30 EVT_TEXT( ID_RICHTEXTFONTPAGE_FACETEXTCTRL, wxRichTextFontPage::OnFaceTextCtrlUpdated )
31
32 EVT_TEXT( ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, wxRichTextFontPage::OnSizeTextCtrlUpdated )
33
34 EVT_LISTBOX( ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxRichTextFontPage::OnSizeListBoxSelected )
35
36 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_STYLECTRL, wxRichTextFontPage::OnStyleCtrlSelected )
37
38 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_WEIGHTCTRL, wxRichTextFontPage::OnWeightCtrlSelected )
39
40 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, wxRichTextFontPage::OnUnderliningCtrlSelected )
41
42 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, wxRichTextFontPage::OnStrikethroughctrlClick )
43
44 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
45
46 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUPERSCRIPT, wxRichTextFontPage::OnRichtextfontpageSuperscriptClick )
47
48 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUBSCRIPT, wxRichTextFontPage::OnRichtextfontpageSubscriptClick )
49
50 ////@end wxRichTextFontPage event table entries
51
52 END_EVENT_TABLE()
53
54 /*!
55 * wxRichTextFontPage constructors
56 */
57
58 wxRichTextFontPage::wxRichTextFontPage( )
59 {
60 Init();
61 }
62
wxRichTextFontPage(wxWindow * parent,wxWindowID id,const wxPoint & pos,const wxSize & size,long style)63 wxRichTextFontPage::wxRichTextFontPage( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
64 {
65 Init();
66 Create(parent, id, pos, size, style);
67 }
68
69 /*!
70 * Initialise members
71 */
72
Init()73 void wxRichTextFontPage::Init()
74 {
75 m_dontUpdate = false;
76 m_colourPresent = false;
77 m_bgColourPresent = false;
78
79 ////@begin wxRichTextFontPage member initialisation
80 m_faceTextCtrl = NULL;
81 m_faceListBox = NULL;
82 m_sizeTextCtrl = NULL;
83 m_sizeListBox = NULL;
84 m_styleCtrl = NULL;
85 m_weightCtrl = NULL;
86 m_underliningCtrl = NULL;
87 m_colourCtrl = NULL;
88 m_bgColourCtrl = NULL;
89 m_strikethroughCtrl = NULL;
90 m_capitalsCtrl = NULL;
91 m_superscriptCtrl = NULL;
92 m_subscriptCtrl = NULL;
93 m_previewCtrl = NULL;
94 ////@end wxRichTextFontPage member initialisation
95 }
96
97 /*!
98 * wxRichTextFontPage creator
99 */
100
Create(wxWindow * parent,wxWindowID id,const wxPoint & pos,const wxSize & size,long style)101 bool wxRichTextFontPage::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
102 {
103 ////@begin wxRichTextFontPage creation
104 wxPanel::Create( parent, id, pos, size, style );
105
106 CreateControls();
107 if (GetSizer())
108 {
109 GetSizer()->SetSizeHints(this);
110 }
111 Centre();
112 ////@end wxRichTextFontPage creation
113 return true;
114 }
115
116 /*!
117 * Control creation for wxRichTextFontPage
118 */
119
CreateControls()120 void wxRichTextFontPage::CreateControls()
121 {
122 ////@begin wxRichTextFontPage content construction
123 wxRichTextFontPage* itemPanel1 = this;
124
125 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
126 itemPanel1->SetSizer(itemBoxSizer2);
127
128 wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
129 itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
130
131 wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
132 itemBoxSizer3->Add(itemBoxSizer4, 1, wxGROW, 5);
133
134 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
135 itemBoxSizer4->Add(itemBoxSizer5, 1, wxGROW, 5);
136
137 wxStaticText* itemStaticText6 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Font:"), wxDefaultPosition, wxDefaultSize, 0 );
138 itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
139
140 m_faceTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_FACETEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
141 m_faceTextCtrl->SetHelpText(_("Type a font name."));
142 if (wxRichTextFontPage::ShowToolTips())
143 m_faceTextCtrl->SetToolTip(_("Type a font name."));
144 itemBoxSizer5->Add(m_faceTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
145
146 m_faceListBox = new wxRichTextFontListBox( itemPanel1, ID_RICHTEXTFONTPAGE_FACELISTBOX, wxDefaultPosition, wxSize(200, 100), 0 );
147 m_faceListBox->SetHelpText(_("Lists the available fonts."));
148 if (wxRichTextFontPage::ShowToolTips())
149 m_faceListBox->SetToolTip(_("Lists the available fonts."));
150 itemBoxSizer5->Add(m_faceListBox, 1, wxGROW|wxALL|wxFIXED_MINSIZE, 5);
151
152 wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxVERTICAL);
153 itemBoxSizer4->Add(itemBoxSizer9, 0, wxGROW, 5);
154
155 wxStaticText* itemStaticText10 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Size:"), wxDefaultPosition, wxDefaultSize, 0 );
156 itemBoxSizer9->Add(itemStaticText10, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
157
158 m_sizeTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, _T(""), wxDefaultPosition, wxSize(50, -1), 0 );
159 m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
160 if (wxRichTextFontPage::ShowToolTips())
161 m_sizeTextCtrl->SetToolTip(_("Type a size in points."));
162 itemBoxSizer9->Add(m_sizeTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
163
164 wxArrayString m_sizeListBoxStrings;
165 m_sizeListBox = new wxListBox( itemPanel1, ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxDefaultPosition, wxSize(50, -1), m_sizeListBoxStrings, wxLB_SINGLE );
166 m_sizeListBox->SetHelpText(_("Lists font sizes in points."));
167 if (wxRichTextFontPage::ShowToolTips())
168 m_sizeListBox->SetToolTip(_("Lists font sizes in points."));
169 itemBoxSizer9->Add(m_sizeListBox, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxFIXED_MINSIZE, 5);
170
171 wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
172 itemBoxSizer3->Add(itemBoxSizer13, 0, wxGROW, 5);
173
174 wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL);
175 itemBoxSizer13->Add(itemBoxSizer14, 0, wxGROW, 5);
176
177 wxStaticText* itemStaticText15 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font st&yle:"), wxDefaultPosition, wxDefaultSize, 0 );
178 itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
179
180 wxArrayString m_styleCtrlStrings;
181 m_styleCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_STYLECTRL, _T(""), wxDefaultPosition, wxSize(110, -1), m_styleCtrlStrings, wxCB_READONLY );
182 m_styleCtrl->SetHelpText(_("Select regular or italic style."));
183 if (wxRichTextFontPage::ShowToolTips())
184 m_styleCtrl->SetToolTip(_("Select regular or italic style."));
185 itemBoxSizer14->Add(m_styleCtrl, 0, wxGROW|wxALL, 5);
186
187 wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL);
188 itemBoxSizer13->Add(itemBoxSizer17, 0, wxGROW, 5);
189
190 wxStaticText* itemStaticText18 = new wxStaticText( itemPanel1, wxID_STATIC, _("Font &weight:"), wxDefaultPosition, wxDefaultSize, 0 );
191 itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
192
193 wxArrayString m_weightCtrlStrings;
194 m_weightCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, _T(""), wxDefaultPosition, wxSize(110, -1), m_weightCtrlStrings, wxCB_READONLY );
195 m_weightCtrl->SetHelpText(_("Select regular or bold."));
196 if (wxRichTextFontPage::ShowToolTips())
197 m_weightCtrl->SetToolTip(_("Select regular or bold."));
198 itemBoxSizer17->Add(m_weightCtrl, 0, wxGROW|wxALL, 5);
199
200 wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxVERTICAL);
201 itemBoxSizer13->Add(itemBoxSizer20, 0, wxGROW, 5);
202
203 wxStaticText* itemStaticText21 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Underlining:"), wxDefaultPosition, wxDefaultSize, 0 );
204 itemBoxSizer20->Add(itemStaticText21, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
205
206 wxArrayString m_underliningCtrlStrings;
207 m_underliningCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, _T(""), wxDefaultPosition, wxSize(110, -1), m_underliningCtrlStrings, wxCB_READONLY );
208 m_underliningCtrl->SetHelpText(_("Select underlining or no underlining."));
209 if (wxRichTextFontPage::ShowToolTips())
210 m_underliningCtrl->SetToolTip(_("Select underlining or no underlining."));
211 itemBoxSizer20->Add(m_underliningCtrl, 0, wxGROW|wxALL, 5);
212
213 itemBoxSizer13->Add(0, 0, 1, wxALIGN_CENTER_VERTICAL, 5);
214
215 wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
216 itemBoxSizer13->Add(itemBoxSizer24, 0, wxGROW, 5);
217
218 wxStaticText* itemStaticText25 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Colour:"), wxDefaultPosition, wxDefaultSize, 0 );
219 itemBoxSizer24->Add(itemStaticText25, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
220
221 m_colourCtrl = new wxRichTextColourSwatchCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_COLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
222 m_colourCtrl->SetHelpText(_("Click to change the text colour."));
223 if (wxRichTextFontPage::ShowToolTips())
224 m_colourCtrl->SetToolTip(_("Click to change the text colour."));
225 itemBoxSizer24->Add(m_colourCtrl, 0, wxGROW|wxALL, 5);
226
227 wxBoxSizer* itemBoxSizer27 = new wxBoxSizer(wxVERTICAL);
228 itemBoxSizer13->Add(itemBoxSizer27, 0, wxGROW, 5);
229
230 wxStaticText* itemStaticText28 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Bg colour:"), wxDefaultPosition, wxDefaultSize, 0 );
231 itemBoxSizer27->Add(itemStaticText28, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
232
233 m_bgColourCtrl = new wxRichTextColourSwatchCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL, wxDefaultPosition, wxSize(40, 20), 0 );
234 m_bgColourCtrl->SetHelpText(_("Click to change the text background colour."));
235 if (wxRichTextFontPage::ShowToolTips())
236 m_bgColourCtrl->SetToolTip(_("Click to change the text background colour."));
237 itemBoxSizer27->Add(m_bgColourCtrl, 0, wxGROW|wxALL, 5);
238
239 wxBoxSizer* itemBoxSizer30 = new wxBoxSizer(wxHORIZONTAL);
240 itemBoxSizer3->Add(itemBoxSizer30, 0, wxGROW, 5);
241
242 m_strikethroughCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, _("&Strikethrough"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
243 m_strikethroughCtrl->SetValue(false);
244 m_strikethroughCtrl->SetHelpText(_("Check to show a line through the text."));
245 if (wxRichTextFontPage::ShowToolTips())
246 m_strikethroughCtrl->SetToolTip(_("Check to show a line through the text."));
247 itemBoxSizer30->Add(m_strikethroughCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
248
249 m_capitalsCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_CAPSCTRL, _("Ca&pitals"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
250 m_capitalsCtrl->SetValue(false);
251 m_capitalsCtrl->SetHelpText(_("Check to show the text in capitals."));
252 if (wxRichTextFontPage::ShowToolTips())
253 m_capitalsCtrl->SetToolTip(_("Check to show the text in capitals."));
254 itemBoxSizer30->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
255
256 m_superscriptCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_SUPERSCRIPT, _("Supe&rscript"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
257 m_superscriptCtrl->SetValue(false);
258 m_superscriptCtrl->SetHelpText(_("Check to show the text in superscript."));
259 if (wxRichTextFontPage::ShowToolTips())
260 m_superscriptCtrl->SetToolTip(_("Check to show the text in superscript."));
261 itemBoxSizer30->Add(m_superscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
262
263 m_subscriptCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTFONTPAGE_SUBSCRIPT, _("Subscrip&t"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
264 m_subscriptCtrl->SetValue(false);
265 m_subscriptCtrl->SetHelpText(_("Check to show the text in subscript."));
266 if (wxRichTextFontPage::ShowToolTips())
267 m_subscriptCtrl->SetToolTip(_("Check to show the text in subscript."));
268 itemBoxSizer30->Add(m_subscriptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
269
270 itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
271
272 m_previewCtrl = new wxRichTextFontPreviewCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_PREVIEWCTRL, wxDefaultPosition, wxSize(100, 60), 0 );
273 m_previewCtrl->SetHelpText(_("Shows a preview of the font settings."));
274 if (wxRichTextFontPage::ShowToolTips())
275 m_previewCtrl->SetToolTip(_("Shows a preview of the font settings."));
276 itemBoxSizer3->Add(m_previewCtrl, 0, wxGROW|wxALL, 5);
277
278 ////@end wxRichTextFontPage content construction
279
280 m_faceListBox->UpdateFonts();
281
282 m_styleCtrl->Append(_("Regular"));
283 m_styleCtrl->Append(_("Italic"));
284
285 m_weightCtrl->Append(_("Regular"));
286 m_weightCtrl->Append(_("Bold"));
287
288 m_underliningCtrl->Append(_("Not underlined"));
289 m_underliningCtrl->Append(_("Underlined"));
290
291 wxString nStr;
292 int i;
293 for (i = 8; i < 40; i++)
294 {
295 nStr.Printf(wxT("%d"), i);
296 m_sizeListBox->Append(nStr);
297 }
298 m_sizeListBox->Append(wxT("48"));
299 m_sizeListBox->Append(wxT("72"));
300 }
301
302 /// Transfer data from/to window
TransferDataFromWindow()303 bool wxRichTextFontPage::TransferDataFromWindow()
304 {
305 wxPanel::TransferDataFromWindow();
306
307 wxTextAttrEx* attr = GetAttributes();
308
309 if (m_faceListBox->GetSelection() != wxNOT_FOUND)
310 {
311 wxString faceName = m_faceListBox->GetFaceName(m_faceListBox->GetSelection());
312 if (!faceName.IsEmpty())
313 {
314 wxFont font(attr->GetFont().Ok() ? attr->GetFont() : *wxNORMAL_FONT);
315 font.SetFaceName(faceName);
316 wxSetFontPreservingStyles(*attr, font);
317 attr->SetFlags(attr->GetFlags() | wxTEXT_ATTR_FONT_FACE);
318 }
319 }
320 else
321 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_FACE));
322
323 wxString strSize = m_sizeTextCtrl->GetValue();
324 if (!strSize.IsEmpty())
325 {
326 int sz = wxAtoi(strSize);
327 if (sz > 0)
328 {
329 wxFont font(attr->GetFont().Ok() ? attr->GetFont() : *wxNORMAL_FONT);
330 font.SetPointSize(sz);
331 wxSetFontPreservingStyles(*attr, font);
332 attr->SetFlags(attr->GetFlags() | wxTEXT_ATTR_FONT_SIZE);
333 }
334 }
335 else
336 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_SIZE));
337
338 if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
339 {
340 int style;
341 if (m_styleCtrl->GetStringSelection() == _("Italic"))
342 style = wxITALIC;
343 else
344 style = wxNORMAL;
345
346 wxFont font(attr->GetFont().Ok() ? attr->GetFont() : *wxNORMAL_FONT);
347 font.SetStyle(style);
348 wxSetFontPreservingStyles(*attr, font);
349 attr->SetFlags(attr->GetFlags() | wxTEXT_ATTR_FONT_ITALIC);
350 }
351 else
352 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_ITALIC));
353
354 if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
355 {
356 int weight;
357 if (m_weightCtrl->GetStringSelection() == _("Bold"))
358 weight = wxBOLD;
359 else
360 weight = wxNORMAL;
361
362 wxFont font(attr->GetFont().Ok() ? attr->GetFont() : *wxNORMAL_FONT);
363 font.SetWeight(weight);
364 wxSetFontPreservingStyles(*attr, font);
365 attr->SetFlags(attr->GetFlags() | wxTEXT_ATTR_FONT_WEIGHT);
366 }
367 else
368 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_WEIGHT));
369
370 if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
371 {
372 bool underlined;
373 if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
374 underlined = true;
375 else
376 underlined = false;
377
378 wxFont font(attr->GetFont().Ok() ? attr->GetFont() : *wxNORMAL_FONT);
379 font.SetUnderlined(underlined);
380 wxSetFontPreservingStyles(*attr, font);
381 attr->SetFlags(attr->GetFlags() | wxTEXT_ATTR_FONT_UNDERLINE);
382 }
383 else
384 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_UNDERLINE));
385
386 if (m_colourPresent)
387 {
388 attr->SetTextColour(m_colourCtrl->GetBackgroundColour());
389 }
390 else
391 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
392
393 if (m_bgColourPresent)
394 {
395 attr->SetBackgroundColour(m_bgColourCtrl->GetBackgroundColour());
396 }
397 else
398 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_BACKGROUND_COLOUR));
399
400 if (m_strikethroughCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
401 {
402 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
403
404 if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
405 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
406 else
407 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
408 }
409
410 if (m_capitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
411 {
412 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_CAPITALS);
413
414 if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
415 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_CAPITALS);
416 else
417 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
418 }
419
420 if (m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
421 {
422 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
423 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
424 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUBSCRIPT);
425 }
426 else if (m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
427 {
428 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUBSCRIPT);
429 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUBSCRIPT);
430 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUPERSCRIPT);
431 }
432 else
433 {
434 // If they are undetermined, we don't want to include these flags in the text effects - the objects
435 // should retain their original style.
436 attr->SetTextEffectFlags(attr->GetTextEffectFlags() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT|wxTEXT_ATTR_EFFECT_SUPERSCRIPT) );
437 }
438
439 return true;
440 }
441
TransferDataToWindow()442 bool wxRichTextFontPage::TransferDataToWindow()
443 {
444 wxPanel::TransferDataToWindow();
445
446 m_dontUpdate = true;
447 wxTextAttrEx* attr = GetAttributes();
448
449 if (attr->HasFont() && attr->HasFontFaceName())
450 {
451 m_faceTextCtrl->SetValue(attr->GetFont().GetFaceName());
452 m_faceListBox->SetFaceNameSelection(attr->GetFont().GetFaceName());
453 }
454 else
455 {
456 m_faceTextCtrl->SetValue(wxEmptyString);
457 m_faceListBox->SetFaceNameSelection(wxEmptyString);
458 }
459
460 if (attr->HasFont() && attr->HasFontSize())
461 {
462 wxString strSize = wxString::Format(wxT("%d"), attr->GetFont().GetPointSize());
463 m_sizeTextCtrl->SetValue(strSize);
464 if (m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
465 m_sizeListBox->SetStringSelection(strSize);
466 }
467 else
468 {
469 m_sizeTextCtrl->SetValue(wxEmptyString);
470 m_sizeListBox->SetSelection(wxNOT_FOUND);
471 }
472
473 if (attr->HasFont() && attr->HasFontWeight())
474 {
475 if (attr->GetFont().GetWeight() == wxBOLD)
476 m_weightCtrl->SetSelection(1);
477 else
478 m_weightCtrl->SetSelection(0);
479 }
480 else
481 {
482 m_weightCtrl->SetSelection(wxNOT_FOUND);
483 }
484
485 if (attr->HasFont() && attr->HasFontItalic())
486 {
487 if (attr->GetFont().GetStyle() == wxITALIC)
488 m_styleCtrl->SetSelection(1);
489 else
490 m_styleCtrl->SetSelection(0);
491 }
492 else
493 {
494 m_styleCtrl->SetSelection(wxNOT_FOUND);
495 }
496
497 if (attr->HasFont() && attr->HasFontUnderlined())
498 {
499 if (attr->GetFont().GetUnderlined())
500 m_underliningCtrl->SetSelection(1);
501 else
502 m_underliningCtrl->SetSelection(0);
503 }
504 else
505 {
506 m_underliningCtrl->SetSelection(wxNOT_FOUND);
507 }
508
509 if (attr->HasTextColour())
510 {
511 m_colourCtrl->SetColour(attr->GetTextColour());
512 m_colourPresent = true;
513 }
514
515 if (attr->HasBackgroundColour())
516 {
517 m_bgColourCtrl->SetColour(attr->GetBackgroundColour());
518 m_bgColourPresent = true;
519 }
520
521 if (attr->HasTextEffects())
522 {
523 if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
524 {
525 if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
526 m_strikethroughCtrl->Set3StateValue(wxCHK_CHECKED);
527 else
528 m_strikethroughCtrl->Set3StateValue(wxCHK_UNCHECKED);
529 }
530 else
531 m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
532
533 if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_CAPITALS)
534 {
535 if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)
536 m_capitalsCtrl->Set3StateValue(wxCHK_CHECKED);
537 else
538 m_capitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
539 }
540 else
541 m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
542
543 if ( attr->GetTextEffectFlags() & (wxTEXT_ATTR_EFFECT_SUPERSCRIPT | wxTEXT_ATTR_EFFECT_SUBSCRIPT) )
544 {
545 if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUPERSCRIPT)
546 {
547 m_superscriptCtrl->Set3StateValue(wxCHK_CHECKED);
548 m_subscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
549 }
550 else if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUBSCRIPT)
551 {
552 m_superscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
553 m_subscriptCtrl->Set3StateValue(wxCHK_CHECKED);
554 }
555 else
556 {
557 m_superscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
558 m_subscriptCtrl->Set3StateValue(wxCHK_UNCHECKED);
559 }
560 }
561 else
562 {
563 m_superscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
564 m_subscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
565 }
566 }
567 else
568 {
569 m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
570 m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
571 m_superscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
572 m_subscriptCtrl->Set3StateValue(wxCHK_UNDETERMINED);
573 }
574
575 UpdatePreview();
576
577 m_dontUpdate = false;
578
579 return true;
580 }
581
GetAttributes()582 wxTextAttrEx* wxRichTextFontPage::GetAttributes()
583 {
584 return wxRichTextFormattingDialog::GetDialogAttributes(this);
585 }
586
587 /// Updates the font preview
UpdatePreview()588 void wxRichTextFontPage::UpdatePreview()
589 {
590 wxRichTextAttr attr;
591
592 if (m_colourPresent)
593 m_previewCtrl->SetForegroundColour(m_colourCtrl->GetColour());
594
595 if (m_bgColourPresent)
596 m_previewCtrl->SetBackgroundColour(m_bgColourCtrl->GetColour());
597
598 if (m_faceListBox->GetSelection() != wxNOT_FOUND)
599 {
600 wxString faceName = m_faceListBox->GetFaceName(m_faceListBox->GetSelection());
601 attr.SetFontFaceName(faceName);
602 }
603
604 wxString strSize = m_sizeTextCtrl->GetValue();
605 if (!strSize.IsEmpty())
606 {
607 int sz = wxAtoi(strSize);
608 if (sz > 0)
609 attr.SetFontSize(sz);
610 }
611
612 if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
613 {
614 int style;
615 if (m_styleCtrl->GetStringSelection() == _("Italic"))
616 style = wxITALIC;
617 else
618 style = wxNORMAL;
619
620 attr.SetFontStyle(style);
621 }
622
623 if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
624 {
625 int weight;
626 if (m_weightCtrl->GetStringSelection() == _("Bold"))
627 weight = wxBOLD;
628 else
629 weight = wxNORMAL;
630
631 attr.SetFontWeight(weight);
632 }
633
634 if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
635 {
636 bool underlined;
637 if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
638 underlined = true;
639 else
640 underlined = false;
641
642 attr.SetFontUnderlined(underlined);
643 }
644
645 int textEffects = 0;
646
647 if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
648 {
649 textEffects |= wxTEXT_ATTR_EFFECT_STRIKETHROUGH;
650 }
651
652 if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
653 {
654 textEffects |= wxTEXT_ATTR_EFFECT_CAPITALS;
655 }
656
657 if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
658 textEffects |= wxTEXT_ATTR_EFFECT_SUPERSCRIPT;
659 else if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED )
660 textEffects |= wxTEXT_ATTR_EFFECT_SUBSCRIPT;
661
662 wxFont font = attr.CreateFont();
663 m_previewCtrl->SetFont(font);
664 m_previewCtrl->SetTextEffects(textEffects);
665 m_previewCtrl->Refresh();
666 }
667
668 /*!
669 * Should we show tooltips?
670 */
671
ShowToolTips()672 bool wxRichTextFontPage::ShowToolTips()
673 {
674 return wxRichTextFormattingDialog::ShowToolTips();
675 }
676
677 /*!
678 * Get bitmap resources
679 */
680
GetBitmapResource(const wxString & name)681 wxBitmap wxRichTextFontPage::GetBitmapResource( const wxString& name )
682 {
683 // Bitmap retrieval
684 ////@begin wxRichTextFontPage bitmap retrieval
685 wxUnusedVar(name);
686 return wxNullBitmap;
687 ////@end wxRichTextFontPage bitmap retrieval
688 }
689
690 /*!
691 * Get icon resources
692 */
693
GetIconResource(const wxString & name)694 wxIcon wxRichTextFontPage::GetIconResource( const wxString& name )
695 {
696 // Icon retrieval
697 ////@begin wxRichTextFontPage icon retrieval
698 wxUnusedVar(name);
699 return wxNullIcon;
700 ////@end wxRichTextFontPage icon retrieval
701 }
702
703 /*!
704 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_FACETEXTCTRL
705 */
706
OnFaceTextCtrlUpdated(wxCommandEvent & WXUNUSED (event))707 void wxRichTextFontPage::OnFaceTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
708 {
709 if (m_dontUpdate)
710 return;
711
712 wxString facename = m_faceTextCtrl->GetValue();
713 if (!facename.IsEmpty())
714 {
715 if (m_faceListBox->HasFaceName(facename))
716 {
717 m_faceListBox->SetFaceNameSelection(facename);
718 UpdatePreview();
719 }
720 else
721 {
722 // Try to find a partial match
723 const wxArrayString& arr = m_faceListBox->GetFaceNames();
724 size_t i;
725 for (i = 0; i < arr.GetCount(); i++)
726 {
727 if (arr[i].Mid(0, facename.Length()).Lower() == facename.Lower())
728 {
729 m_faceListBox->ScrollToLine(i);
730 break;
731 }
732 }
733 }
734 }
735 }
736
737
738 /*!
739 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
740 */
741
OnSizeTextCtrlUpdated(wxCommandEvent & WXUNUSED (event))742 void wxRichTextFontPage::OnSizeTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
743 {
744 if (m_dontUpdate)
745 return;
746
747 wxString strSize = m_sizeTextCtrl->GetValue();
748 if (!strSize.IsEmpty() && m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
749 m_sizeListBox->SetStringSelection(strSize);
750 UpdatePreview();
751 }
752
753
754 /*!
755 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZELISTBOX
756 */
757
OnSizeListBoxSelected(wxCommandEvent & event)758 void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent& event )
759 {
760 m_dontUpdate = true;
761
762 m_sizeTextCtrl->SetValue(event.GetString());
763
764 m_dontUpdate = false;
765
766 UpdatePreview();
767 }
768
769 /*!
770 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_FACELISTBOX
771 */
772
OnFaceListBoxSelected(wxCommandEvent & WXUNUSED (event))773 void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent& WXUNUSED(event) )
774 {
775 m_dontUpdate = true;
776
777 m_faceTextCtrl->SetValue(m_faceListBox->GetFaceName(m_faceListBox->GetSelection()));
778
779 m_dontUpdate = false;
780
781 UpdatePreview();
782 }
783
784 /*!
785 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_STYLECTRL
786 */
787
OnStyleCtrlSelected(wxCommandEvent & WXUNUSED (event))788 void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent& WXUNUSED(event) )
789 {
790 UpdatePreview();
791 }
792
793
794 /*!
795 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
796 */
797
OnUnderliningCtrlSelected(wxCommandEvent & WXUNUSED (event))798 void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent& WXUNUSED(event) )
799 {
800 UpdatePreview();
801 }
802
803
804 /*!
805 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_WEIGHTCTRL
806 */
807
OnWeightCtrlSelected(wxCommandEvent & WXUNUSED (event))808 void wxRichTextFontPage::OnWeightCtrlSelected( wxCommandEvent& WXUNUSED(event) )
809 {
810 UpdatePreview();
811 }
812
OnColourClicked(wxCommandEvent & event)813 void wxRichTextFontPage::OnColourClicked( wxCommandEvent& event )
814 {
815 if (event.GetId() == m_colourCtrl->GetId())
816 m_colourPresent = true;
817 else if (event.GetId() == m_bgColourCtrl->GetId())
818 m_bgColourPresent = true;
819
820 UpdatePreview();
821 }
822 /*!
823 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
824 */
825
OnStrikethroughctrlClick(wxCommandEvent & WXUNUSED (event))826 void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(event) )
827 {
828 UpdatePreview();
829 }
830
831 /*!
832 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL
833 */
834
OnCapsctrlClick(wxCommandEvent & WXUNUSED (event))835 void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
836 {
837 UpdatePreview();
838 }
839
840 /*!
841 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUPERSCRIPT
842 */
843
OnRichtextfontpageSuperscriptClick(wxCommandEvent & WXUNUSED (event))844 void wxRichTextFontPage::OnRichtextfontpageSuperscriptClick( wxCommandEvent& WXUNUSED(event) )
845 {
846 if ( m_superscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
847 m_subscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
848
849 UpdatePreview();
850 }
851
852 /*!
853 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUBSCRIPT
854 */
855
OnRichtextfontpageSubscriptClick(wxCommandEvent & WXUNUSED (event))856 void wxRichTextFontPage::OnRichtextfontpageSubscriptClick( wxCommandEvent& WXUNUSED(event) )
857 {
858 if ( m_subscriptCtrl->Get3StateValue() == wxCHK_CHECKED)
859 m_superscriptCtrl->Set3StateValue( wxCHK_UNCHECKED );
860
861 UpdatePreview();
862 }
863