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