]> git.saurik.com Git - wxWidgets.git/blame - src/richtext/richtextfontpage.cpp
wxSizer::Fit() now sets client size
[wxWidgets.git] / src / richtext / richtextfontpage.cpp
CommitLineData
97ff49b3
JS
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
41a85215 12#include "wx/richtext/richtextfontpage.h"
97ff49b3 13
97ff49b3
JS
14/*!
15 * wxRichTextFontPage type definition
16 */
17
18IMPLEMENT_DYNAMIC_CLASS( wxRichTextFontPage, wxPanel )
19
20/*!
21 * wxRichTextFontPage event table definition
22 */
23
24BEGIN_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
42688aea
JS
41 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL, wxRichTextFontPage::OnStrikethroughctrlClick )
42
43 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL, wxRichTextFontPage::OnCapsctrlClick )
44
97ff49b3
JS
45////@end wxRichTextFontPage event table entries
46
47END_EVENT_TABLE()
48
49/*!
50 * wxRichTextFontPage constructors
51 */
52
53wxRichTextFontPage::wxRichTextFontPage( )
54{
55 Init();
56}
57
58wxRichTextFontPage::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 */
5778b3c8 67
97ff49b3
JS
68void 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;
42688aea
JS
82 m_strikethroughCtrl = NULL;
83 m_capitalsCtrl = NULL;
97ff49b3
JS
84 m_previewCtrl = NULL;
85////@end wxRichTextFontPage member initialisation
86}
87
88/*!
89 * wxRichTextFontPage creator
90 */
91
92bool 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
111void 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 );
69ce77e2 129 itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3 130
42688aea 131 m_faceTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_FACETEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
97ff49b3 132 m_faceTextCtrl->SetHelpText(_("Type a font name."));
2fce6547 133 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
134 m_faceTextCtrl->SetToolTip(_("Type a font name."));
135 itemBoxSizer5->Add(m_faceTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
136
2fce6547 137 m_faceListBox = new wxRichTextFontListBox( itemPanel1, ID_RICHTEXTFONTPAGE_FACELISTBOX, wxDefaultPosition, wxSize(200, 100), 0 );
97ff49b3 138 m_faceListBox->SetHelpText(_("Lists the available fonts."));
2fce6547 139 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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 );
69ce77e2 147 itemBoxSizer9->Add(itemStaticText10, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3 148
42688aea 149 m_sizeTextCtrl = new wxTextCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL, _T(""), wxDefaultPosition, wxSize(50, -1), 0 );
97ff49b3 150 m_sizeTextCtrl->SetHelpText(_("Type a size in points."));
2fce6547 151 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
152 m_sizeTextCtrl->SetToolTip(_("Type a size in points."));
153 itemBoxSizer9->Add(m_sizeTextCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
154
2fce6547
JS
155 wxArrayString m_sizeListBoxStrings;
156 m_sizeListBox = new wxListBox( itemPanel1, ID_RICHTEXTFONTPAGE_SIZELISTBOX, wxDefaultPosition, wxSize(50, -1), m_sizeListBoxStrings, wxLB_SINGLE );
97ff49b3 157 m_sizeListBox->SetHelpText(_("Lists font sizes in points."));
2fce6547 158 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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 );
69ce77e2 169 itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3 170
2fce6547
JS
171 wxArrayString m_styleCtrlStrings;
172 m_styleCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_STYLECTRL, _T(""), wxDefaultPosition, wxDefaultSize, m_styleCtrlStrings, wxCB_READONLY );
97ff49b3 173 m_styleCtrl->SetHelpText(_("Select regular or italic style."));
2fce6547 174 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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 );
69ce77e2 182 itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3 183
2fce6547
JS
184 wxArrayString m_weightCtrlStrings;
185 m_weightCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_WEIGHTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, m_weightCtrlStrings, wxCB_READONLY );
97ff49b3 186 m_weightCtrl->SetHelpText(_("Select regular or bold."));
2fce6547 187 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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 );
69ce77e2 195 itemBoxSizer20->Add(itemStaticText21, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3 196
2fce6547
JS
197 wxArrayString m_underliningCtrlStrings;
198 m_underliningCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL, _T(""), wxDefaultPosition, wxDefaultSize, m_underliningCtrlStrings, wxCB_READONLY );
97ff49b3 199 m_underliningCtrl->SetHelpText(_("Select underlining or no underlining."));
2fce6547 200 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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 );
69ce77e2 208 itemBoxSizer23->Add(itemStaticText24, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
97ff49b3
JS
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."));
2fce6547 212 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
213 m_colourCtrl->SetToolTip(_("Click to change the text colour."));
214 itemBoxSizer23->Add(m_colourCtrl, 0, wxALIGN_LEFT|wxALL, 5);
215
42688aea
JS
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."));
2fce6547 222 if (wxRichTextFontPage::ShowToolTips())
42688aea
JS
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."));
2fce6547 229 if (wxRichTextFontPage::ShowToolTips())
42688aea
JS
230 m_capitalsCtrl->SetToolTip(_("Check to show the text in capitals."));
231 itemBoxSizer26->Add(m_capitalsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
232
2fce6547 233 itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
97ff49b3 234
2fce6547 235 m_previewCtrl = new wxRichTextFontPreviewCtrl( itemPanel1, ID_RICHTEXTFONTPAGE_PREVIEWCTRL, wxDefaultPosition, wxSize(100, 60), 0 );
97ff49b3 236 m_previewCtrl->SetHelpText(_("Shows a preview of the font settings."));
2fce6547 237 if (wxRichTextFontPage::ShowToolTips())
97ff49b3
JS
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
266bool wxRichTextFontPage::TransferDataFromWindow()
267{
268 wxPanel::TransferDataFromWindow();
269
44cc96a8 270 wxTextAttr* attr = GetAttributes();
97ff49b3
JS
271
272 if (m_faceListBox->GetSelection() != wxNOT_FOUND)
273 {
274 wxString faceName = m_faceListBox->GetFaceName(m_faceListBox->GetSelection());
275 if (!faceName.IsEmpty())
276 {
44cc96a8 277 attr->SetFontFaceName(faceName);
97ff49b3
JS
278 }
279 }
280 else
281 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_FACE));
282
283 wxString strSize = m_sizeTextCtrl->GetValue();
284 if (!strSize.IsEmpty())
285 {
286 int sz = wxAtoi(strSize);
287 if (sz > 0)
288 {
44cc96a8 289 attr->SetFontSize(sz);
97ff49b3
JS
290 }
291 }
292 else
293 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_SIZE));
294
295 if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
296 {
297 int style;
298 if (m_styleCtrl->GetStringSelection() == _("Italic"))
299 style = wxITALIC;
300 else
301 style = wxNORMAL;
302
44cc96a8 303 attr->SetFontStyle(style);
97ff49b3
JS
304 }
305 else
306 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_ITALIC));
307
308 if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
309 {
310 int weight;
311 if (m_weightCtrl->GetStringSelection() == _("Bold"))
312 weight = wxBOLD;
313 else
314 weight = wxNORMAL;
315
44cc96a8 316 attr->SetFontWeight(weight);
97ff49b3
JS
317 }
318 else
319 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_WEIGHT));
320
321 if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
322 {
323 bool underlined;
324 if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
325 underlined = true;
326 else
327 underlined = false;
328
44cc96a8 329 attr->SetFontUnderlined(underlined);
97ff49b3
JS
330 }
331 else
332 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_FONT_UNDERLINE));
333
334 if (m_colourPresent)
335 {
336 attr->SetTextColour(m_colourCtrl->GetBackgroundColour());
337 }
338 else
339 attr->SetFlags(attr->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR));
44cc96a8 340
42688aea
JS
341 if (m_strikethroughCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
342 {
343 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
344
345 if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
346 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
347 else
348 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH);
349 }
350
351 if (m_capitalsCtrl->Get3StateValue() != wxCHK_UNDETERMINED)
352 {
353 attr->SetTextEffectFlags(attr->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_CAPITALS);
44cc96a8 354
42688aea
JS
355 if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
356 attr->SetTextEffects(attr->GetTextEffects() | wxTEXT_ATTR_EFFECT_CAPITALS);
357 else
358 attr->SetTextEffects(attr->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS);
359 }
97ff49b3
JS
360
361 return true;
362}
363
364bool wxRichTextFontPage::TransferDataToWindow()
365{
366 wxPanel::TransferDataToWindow();
367
368 m_dontUpdate = true;
44cc96a8 369 wxTextAttr* attr = GetAttributes();
97ff49b3 370
44cc96a8 371 if (attr->HasFontFaceName())
97ff49b3 372 {
44cc96a8 373 m_faceTextCtrl->SetValue(attr->GetFontFaceName());
97ff49b3
JS
374 m_faceListBox->SetFaceNameSelection(attr->GetFont().GetFaceName());
375 }
376 else
377 {
378 m_faceTextCtrl->SetValue(wxEmptyString);
379 m_faceListBox->SetFaceNameSelection(wxEmptyString);
380 }
381
44cc96a8 382 if (attr->HasFontSize())
97ff49b3 383 {
44cc96a8 384 wxString strSize = wxString::Format(wxT("%d"), attr->GetFontSize());
97ff49b3
JS
385 m_sizeTextCtrl->SetValue(strSize);
386 if (m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
387 m_sizeListBox->SetStringSelection(strSize);
388 }
389 else
390 {
391 m_sizeTextCtrl->SetValue(wxEmptyString);
392 m_sizeListBox->SetSelection(wxNOT_FOUND);
393 }
394
44cc96a8 395 if (attr->HasFontWeight())
97ff49b3 396 {
44cc96a8 397 if (attr->GetFontWeight() == wxBOLD)
97ff49b3
JS
398 m_weightCtrl->SetSelection(1);
399 else
400 m_weightCtrl->SetSelection(0);
401 }
402 else
403 {
404 m_weightCtrl->SetSelection(wxNOT_FOUND);
405 }
406
44cc96a8 407 if (attr->HasFontItalic())
97ff49b3 408 {
44cc96a8 409 if (attr->GetFontStyle() == wxITALIC)
97ff49b3
JS
410 m_styleCtrl->SetSelection(1);
411 else
412 m_styleCtrl->SetSelection(0);
413 }
414 else
415 {
416 m_styleCtrl->SetSelection(wxNOT_FOUND);
417 }
418
44cc96a8 419 if (attr->HasFontUnderlined())
97ff49b3 420 {
44cc96a8 421 if (attr->GetFontUnderlined())
97ff49b3
JS
422 m_underliningCtrl->SetSelection(1);
423 else
424 m_underliningCtrl->SetSelection(0);
425 }
426 else
427 {
428 m_underliningCtrl->SetSelection(wxNOT_FOUND);
429 }
430
431 if (attr->HasTextColour())
432 {
433 m_colourCtrl->SetBackgroundColour(attr->GetTextColour());
434 m_colourPresent = true;
435 }
436
42688aea
JS
437 if (attr->HasTextEffects())
438 {
439 if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
440 {
441 if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH)
442 m_strikethroughCtrl->Set3StateValue(wxCHK_CHECKED);
443 else
444 m_strikethroughCtrl->Set3StateValue(wxCHK_UNCHECKED);
445 }
446 else
447 m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
448
449 if (attr->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_CAPITALS)
450 {
451 if (attr->GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS)
452 m_capitalsCtrl->Set3StateValue(wxCHK_CHECKED);
453 else
454 m_capitalsCtrl->Set3StateValue(wxCHK_UNCHECKED);
455 }
456 else
457 m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
458 }
459 else
460 {
461 m_strikethroughCtrl->Set3StateValue(wxCHK_UNDETERMINED);
462 m_capitalsCtrl->Set3StateValue(wxCHK_UNDETERMINED);
463 }
464
97ff49b3
JS
465 UpdatePreview();
466
467 m_dontUpdate = false;
468
469 return true;
470}
471
44cc96a8 472wxTextAttr* wxRichTextFontPage::GetAttributes()
97ff49b3
JS
473{
474 return wxRichTextFormattingDialog::GetDialogAttributes(this);
475}
476
477/// Updates the font preview
478void wxRichTextFontPage::UpdatePreview()
479{
480 wxFont font(*wxNORMAL_FONT);
481
482 if (m_colourPresent)
483 m_previewCtrl->SetForegroundColour(m_colourCtrl->GetBackgroundColour());
484
485 if (m_faceListBox->GetSelection() != wxNOT_FOUND)
486 {
487 wxString faceName = m_faceListBox->GetFaceName(m_faceListBox->GetSelection());
488 font.SetFaceName(faceName);
489 }
490
491 wxString strSize = m_sizeTextCtrl->GetValue();
492 if (!strSize.IsEmpty())
493 {
494 int sz = wxAtoi(strSize);
495 if (sz > 0)
496 font.SetPointSize(sz);
497 }
498
499 if (m_styleCtrl->GetSelection() != wxNOT_FOUND)
500 {
501 int style;
502 if (m_styleCtrl->GetStringSelection() == _("Italic"))
503 style = wxITALIC;
504 else
505 style = wxNORMAL;
506
507 font.SetStyle(style);
508 }
509
510 if (m_weightCtrl->GetSelection() != wxNOT_FOUND)
511 {
512 int weight;
513 if (m_weightCtrl->GetStringSelection() == _("Bold"))
514 weight = wxBOLD;
515 else
516 weight = wxNORMAL;
517
518 font.SetWeight(weight);
519 }
520
521 if (m_underliningCtrl->GetSelection() != wxNOT_FOUND)
522 {
523 bool underlined;
524 if (m_underliningCtrl->GetStringSelection() == _("Underlined"))
525 underlined = true;
526 else
527 underlined = false;
528
529 font.SetUnderlined(underlined);
530 }
44cc96a8 531
42688aea
JS
532 int textEffects = 0;
533
534 if (m_strikethroughCtrl->Get3StateValue() == wxCHK_CHECKED)
535 {
536 textEffects |= wxTEXT_ATTR_EFFECT_STRIKETHROUGH;
537 }
538
539 if (m_capitalsCtrl->Get3StateValue() == wxCHK_CHECKED)
540 {
541 textEffects |= wxTEXT_ATTR_EFFECT_CAPITALS;
542 }
97ff49b3
JS
543
544 m_previewCtrl->SetFont(font);
42688aea 545 m_previewCtrl->SetTextEffects(textEffects);
97ff49b3
JS
546 m_previewCtrl->Refresh();
547}
548
549/*!
550 * Should we show tooltips?
551 */
552
553bool wxRichTextFontPage::ShowToolTips()
554{
dadd4f55 555 return wxRichTextFormattingDialog::ShowToolTips();
97ff49b3
JS
556}
557
558/*!
559 * Get bitmap resources
560 */
561
562wxBitmap wxRichTextFontPage::GetBitmapResource( const wxString& name )
563{
564 // Bitmap retrieval
565////@begin wxRichTextFontPage bitmap retrieval
566 wxUnusedVar(name);
567 return wxNullBitmap;
568////@end wxRichTextFontPage bitmap retrieval
569}
570
571/*!
572 * Get icon resources
573 */
574
575wxIcon wxRichTextFontPage::GetIconResource( const wxString& name )
576{
577 // Icon retrieval
578////@begin wxRichTextFontPage icon retrieval
579 wxUnusedVar(name);
580 return wxNullIcon;
581////@end wxRichTextFontPage icon retrieval
582}
583
584/*!
585 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_FACETEXTCTRL
586 */
587
588void wxRichTextFontPage::OnFaceTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
589{
590 if (m_dontUpdate)
591 return;
592
593 wxString facename = m_faceTextCtrl->GetValue();
594 if (!facename.IsEmpty())
595 {
596 if (m_faceListBox->HasFaceName(facename))
597 {
598 m_faceListBox->SetFaceNameSelection(facename);
599 UpdatePreview();
600 }
601 else
602 {
603 // Try to find a partial match
604 const wxArrayString& arr = m_faceListBox->GetFaceNames();
605 size_t i;
606 for (i = 0; i < arr.GetCount(); i++)
607 {
608 if (arr[i].Mid(0, facename.Length()).Lower() == facename.Lower())
609 {
f18eaf26 610 m_faceListBox->ScrollToRow(i);
97ff49b3
JS
611 break;
612 }
613 }
614 }
615 }
616}
617
618
619/*!
620 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
621 */
622
623void wxRichTextFontPage::OnSizeTextCtrlUpdated( wxCommandEvent& WXUNUSED(event) )
624{
625 if (m_dontUpdate)
626 return;
627
628 wxString strSize = m_sizeTextCtrl->GetValue();
629 if (!strSize.IsEmpty() && m_sizeListBox->FindString(strSize) != wxNOT_FOUND)
630 m_sizeListBox->SetStringSelection(strSize);
631 UpdatePreview();
632}
633
634
635/*!
636 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZELISTBOX
637 */
638
639void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent& event )
640{
641 m_dontUpdate = true;
642
643 m_sizeTextCtrl->SetValue(event.GetString());
644
645 m_dontUpdate = false;
646
647 UpdatePreview();
648}
649
650/*!
651 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_FACELISTBOX
652 */
653
654void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent& WXUNUSED(event) )
655{
656 m_dontUpdate = true;
657
658 m_faceTextCtrl->SetValue(m_faceListBox->GetFaceName(m_faceListBox->GetSelection()));
659
660 m_dontUpdate = false;
661
662 UpdatePreview();
663}
664
665/*!
666 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_STYLECTRL
667 */
668
669void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent& WXUNUSED(event) )
670{
671 UpdatePreview();
672}
673
674
675/*!
676 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
677 */
678
679void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent& WXUNUSED(event) )
680{
681 UpdatePreview();
682}
683
684
685/*!
686 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_WEIGHTCTRL
687 */
688
689void wxRichTextFontPage::OnWeightCtrlSelected( wxCommandEvent& WXUNUSED(event) )
690{
691 UpdatePreview();
692}
693
694void wxRichTextFontPage::OnColourClicked( wxCommandEvent& WXUNUSED(event) )
695{
696 m_colourPresent = true;
697
698 UpdatePreview();
699}
42688aea
JS
700/*!
701 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
702 */
703
704void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent& WXUNUSED(event) )
705{
706 UpdatePreview();
707}
708
709/*!
710 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL
711 */
712
713void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent& WXUNUSED(event) )
714{
715 UpdatePreview();
716}
717
718