1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/richtext/richtextfontpage.cpp
3 // Purpose: Font page for wxRichTextFormattingDialog
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/richtext/richtextfontpage.h"
15 * wxRichTextFontPage type definition
18 IMPLEMENT_DYNAMIC_CLASS( wxRichTextFontPage
, wxRichTextDialogPage
)
21 * wxRichTextFontPage event table definition
24 BEGIN_EVENT_TABLE( wxRichTextFontPage
, wxRichTextDialogPage
)
25 EVT_LISTBOX( ID_RICHTEXTFONTPAGE_FACELISTBOX
, wxRichTextFontPage::OnFaceListBoxSelected
)
26 EVT_BUTTON( ID_RICHTEXTFONTPAGE_COLOURCTRL
, wxRichTextFontPage::OnColourClicked
)
27 EVT_BUTTON( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL
, wxRichTextFontPage::OnColourClicked
)
29 ////@begin wxRichTextFontPage event table entries
30 EVT_IDLE( wxRichTextFontPage::OnIdle
)
32 EVT_TEXT( ID_RICHTEXTFONTPAGE_FACETEXTCTRL
, wxRichTextFontPage::OnFaceTextCtrlUpdated
)
34 EVT_TEXT( ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
, wxRichTextFontPage::OnSizeTextCtrlUpdated
)
36 EVT_SPIN_UP( ID_RICHTEXTFONTPAGE_SPINBUTTONS
, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp
)
37 EVT_SPIN_DOWN( ID_RICHTEXTFONTPAGE_SPINBUTTONS
, wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown
)
39 EVT_CHOICE( ID_RICHTEXTFONTPAGE_SIZE_UNITS
, wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected
)
41 EVT_LISTBOX( ID_RICHTEXTFONTPAGE_SIZELISTBOX
, wxRichTextFontPage::OnSizeListBoxSelected
)
43 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_STYLECTRL
, wxRichTextFontPage::OnStyleCtrlSelected
)
45 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_WEIGHTCTRL
, wxRichTextFontPage::OnWeightCtrlSelected
)
47 EVT_COMBOBOX( ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
, wxRichTextFontPage::OnUnderliningCtrlSelected
)
49 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL
, wxRichTextFontPage::OnUnderliningCtrlSelected
)
51 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL
, wxRichTextFontPage::OnUnderliningCtrlSelected
)
53 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
, wxRichTextFontPage::OnStrikethroughctrlClick
)
55 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_CAPSCTRL
, wxRichTextFontPage::OnCapsctrlClick
)
57 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUPERSCRIPT
, wxRichTextFontPage::OnRichtextfontpageSuperscriptClick
)
59 EVT_CHECKBOX( ID_RICHTEXTFONTPAGE_SUBSCRIPT
, wxRichTextFontPage::OnRichtextfontpageSubscriptClick
)
61 ////@end wxRichTextFontPage event table entries
65 IMPLEMENT_HELP_PROVISION(wxRichTextFontPage
)
67 * wxRichTextFontPage constructors
70 wxRichTextFontPage::wxRichTextFontPage( )
75 wxRichTextFontPage::wxRichTextFontPage( wxWindow
* parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
)
78 Create(parent
, id
, pos
, size
, style
);
85 void wxRichTextFontPage::Init()
88 m_colourPresent
= false;
89 m_bgColourPresent
= false;
91 ////@begin wxRichTextFontPage member initialisation
92 m_faceTextCtrl
= NULL
;
93 m_sizeTextCtrl
= NULL
;
94 m_fontSizeSpinButtons
= NULL
;
95 m_sizeUnitsCtrl
= NULL
;
96 m_fontListBoxParent
= NULL
;
101 m_underliningCtrl
= NULL
;
102 m_textColourLabel
= NULL
;
104 m_bgColourLabel
= NULL
;
105 m_bgColourCtrl
= NULL
;
106 m_strikethroughCtrl
= NULL
;
107 m_capitalsCtrl
= NULL
;
108 m_superscriptCtrl
= NULL
;
109 m_subscriptCtrl
= NULL
;
110 m_previewCtrl
= NULL
;
111 ////@end wxRichTextFontPage member initialisation
115 * wxRichTextFontPage creator
118 bool wxRichTextFontPage::Create( wxWindow
* parent
, wxWindowID id
, const wxPoint
& pos
, const wxSize
& size
, long style
)
120 ////@begin wxRichTextFontPage creation
121 wxRichTextDialogPage::Create( parent
, id
, pos
, size
, style
);
126 GetSizer()->SetSizeHints(this);
129 ////@end wxRichTextFontPage creation
134 * Control creation for wxRichTextFontPage
137 void wxRichTextFontPage::CreateControls()
139 ////@begin wxRichTextFontPage content construction
140 wxRichTextFontPage
* itemRichTextDialogPage1
= this;
142 wxBoxSizer
* itemBoxSizer2
= new wxBoxSizer(wxVERTICAL
);
143 itemRichTextDialogPage1
->SetSizer(itemBoxSizer2
);
145 wxBoxSizer
* itemBoxSizer3
= new wxBoxSizer(wxVERTICAL
);
146 itemBoxSizer2
->Add(itemBoxSizer3
, 1, wxGROW
|wxALL
, 5);
148 wxBoxSizer
* itemBoxSizer4
= new wxBoxSizer(wxHORIZONTAL
);
149 itemBoxSizer3
->Add(itemBoxSizer4
, 1, wxGROW
, 5);
151 wxBoxSizer
* itemBoxSizer5
= new wxBoxSizer(wxVERTICAL
);
152 itemBoxSizer4
->Add(itemBoxSizer5
, 1, wxGROW
, 5);
154 wxStaticText
* itemStaticText6
= new wxStaticText( itemRichTextDialogPage1
, wxID_STATIC
, _("&Font:"), wxDefaultPosition
, wxDefaultSize
, 0 );
155 itemBoxSizer5
->Add(itemStaticText6
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
157 m_faceTextCtrl
= new wxTextCtrl( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_FACETEXTCTRL
, wxEmptyString
, wxDefaultPosition
, wxDefaultSize
, 0 );
158 m_faceTextCtrl
->SetHelpText(_("Type a font name."));
159 if (wxRichTextFontPage::ShowToolTips())
160 m_faceTextCtrl
->SetToolTip(_("Type a font name."));
161 itemBoxSizer5
->Add(m_faceTextCtrl
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
163 wxBoxSizer
* itemBoxSizer8
= new wxBoxSizer(wxVERTICAL
);
164 itemBoxSizer4
->Add(itemBoxSizer8
, 0, wxGROW
, 5);
166 wxStaticText
* itemStaticText9
= new wxStaticText( itemRichTextDialogPage1
, wxID_STATIC
, _("&Size:"), wxDefaultPosition
, wxDefaultSize
, 0 );
167 itemBoxSizer8
->Add(itemStaticText9
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
169 wxBoxSizer
* itemBoxSizer10
= new wxBoxSizer(wxHORIZONTAL
);
170 itemBoxSizer8
->Add(itemBoxSizer10
, 0, wxGROW
, 5);
172 m_sizeTextCtrl
= new wxTextCtrl( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
, wxEmptyString
, wxDefaultPosition
, wxSize(50, -1), 0 );
173 m_sizeTextCtrl
->SetHelpText(_("Type a size in points."));
174 if (wxRichTextFontPage::ShowToolTips())
175 m_sizeTextCtrl
->SetToolTip(_("Type a size in points."));
176 itemBoxSizer10
->Add(m_sizeTextCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxLEFT
|wxTOP
, 5);
178 m_fontSizeSpinButtons
= new wxSpinButton( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SPINBUTTONS
, wxDefaultPosition
, wxSize(-1, 20), wxSP_VERTICAL
);
179 m_fontSizeSpinButtons
->SetRange(0, 100);
180 m_fontSizeSpinButtons
->SetValue(0);
181 itemBoxSizer10
->Add(m_fontSizeSpinButtons
, 0, wxALIGN_CENTER_VERTICAL
|wxRIGHT
|wxTOP
, 5);
183 wxArrayString m_sizeUnitsCtrlStrings
;
184 m_sizeUnitsCtrlStrings
.Add(_("pt"));
185 m_sizeUnitsCtrlStrings
.Add(_("px"));
186 m_sizeUnitsCtrl
= new wxChoice( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SIZE_UNITS
, wxDefaultPosition
, wxDefaultSize
, m_sizeUnitsCtrlStrings
, 0 );
187 m_sizeUnitsCtrl
->SetStringSelection(_("pt"));
188 m_sizeUnitsCtrl
->SetHelpText(_("The font size units, points or pixels."));
189 if (wxRichTextFontPage::ShowToolTips())
190 m_sizeUnitsCtrl
->SetToolTip(_("The font size units, points or pixels."));
191 itemBoxSizer10
->Add(m_sizeUnitsCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxRIGHT
|wxTOP
, 5);
193 m_fontListBoxParent
= new wxBoxSizer(wxHORIZONTAL
);
194 itemBoxSizer3
->Add(m_fontListBoxParent
, 0, wxGROW
, 5);
196 m_faceListBox
= new wxRichTextFontListBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_FACELISTBOX
, wxDefaultPosition
, wxSize(200, 100), 0 );
197 m_faceListBox
->SetHelpText(_("Lists the available fonts."));
198 if (wxRichTextFontPage::ShowToolTips())
199 m_faceListBox
->SetToolTip(_("Lists the available fonts."));
200 m_fontListBoxParent
->Add(m_faceListBox
, 1, wxALIGN_CENTER_VERTICAL
|wxALL
|wxFIXED_MINSIZE
, 5);
202 wxArrayString m_sizeListBoxStrings
;
203 m_sizeListBox
= new wxListBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SIZELISTBOX
, wxDefaultPosition
, wxSize(50, -1), m_sizeListBoxStrings
, wxLB_SINGLE
);
204 m_sizeListBox
->SetHelpText(_("Lists font sizes in points."));
205 if (wxRichTextFontPage::ShowToolTips())
206 m_sizeListBox
->SetToolTip(_("Lists font sizes in points."));
207 m_fontListBoxParent
->Add(m_sizeListBox
, 0, wxGROW
|wxALL
|wxFIXED_MINSIZE
, 5);
209 wxBoxSizer
* itemBoxSizer17
= new wxBoxSizer(wxHORIZONTAL
);
210 itemBoxSizer3
->Add(itemBoxSizer17
, 0, wxGROW
, 5);
212 wxBoxSizer
* itemBoxSizer18
= new wxBoxSizer(wxVERTICAL
);
213 itemBoxSizer17
->Add(itemBoxSizer18
, 0, wxGROW
, 5);
215 wxStaticText
* itemStaticText19
= new wxStaticText( itemRichTextDialogPage1
, wxID_STATIC
, _("Font st&yle:"), wxDefaultPosition
, wxDefaultSize
, 0 );
216 itemBoxSizer18
->Add(itemStaticText19
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
218 wxArrayString m_styleCtrlStrings
;
219 m_styleCtrl
= new wxComboBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_STYLECTRL
, wxEmptyString
, wxDefaultPosition
, wxSize(110, -1), m_styleCtrlStrings
, wxCB_READONLY
);
220 m_styleCtrl
->SetHelpText(_("Select regular or italic style."));
221 if (wxRichTextFontPage::ShowToolTips())
222 m_styleCtrl
->SetToolTip(_("Select regular or italic style."));
223 itemBoxSizer18
->Add(m_styleCtrl
, 0, wxGROW
|wxALL
, 5);
225 wxBoxSizer
* itemBoxSizer21
= new wxBoxSizer(wxVERTICAL
);
226 itemBoxSizer17
->Add(itemBoxSizer21
, 0, wxGROW
, 5);
228 wxStaticText
* itemStaticText22
= new wxStaticText( itemRichTextDialogPage1
, wxID_STATIC
, _("Font &weight:"), wxDefaultPosition
, wxDefaultSize
, 0 );
229 itemBoxSizer21
->Add(itemStaticText22
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
231 wxArrayString m_weightCtrlStrings
;
232 m_weightCtrl
= new wxComboBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_WEIGHTCTRL
, wxEmptyString
, wxDefaultPosition
, wxSize(110, -1), m_weightCtrlStrings
, wxCB_READONLY
);
233 m_weightCtrl
->SetHelpText(_("Select regular or bold."));
234 if (wxRichTextFontPage::ShowToolTips())
235 m_weightCtrl
->SetToolTip(_("Select regular or bold."));
236 itemBoxSizer21
->Add(m_weightCtrl
, 0, wxGROW
|wxALL
, 5);
238 wxBoxSizer
* itemBoxSizer24
= new wxBoxSizer(wxVERTICAL
);
239 itemBoxSizer17
->Add(itemBoxSizer24
, 0, wxGROW
, 5);
241 wxStaticText
* itemStaticText25
= new wxStaticText( itemRichTextDialogPage1
, wxID_STATIC
, _("&Underlining:"), wxDefaultPosition
, wxDefaultSize
, 0 );
242 itemBoxSizer24
->Add(itemStaticText25
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
244 wxArrayString m_underliningCtrlStrings
;
245 m_underliningCtrl
= new wxComboBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
, wxEmptyString
, wxDefaultPosition
, wxSize(110, -1), m_underliningCtrlStrings
, wxCB_READONLY
);
246 m_underliningCtrl
->SetHelpText(_("Select underlining or no underlining."));
247 if (wxRichTextFontPage::ShowToolTips())
248 m_underliningCtrl
->SetToolTip(_("Select underlining or no underlining."));
249 itemBoxSizer24
->Add(m_underliningCtrl
, 0, wxGROW
|wxALL
, 5);
251 itemBoxSizer17
->Add(0, 0, 1, wxALIGN_CENTER_VERTICAL
|wxBOTTOM
, 5);
253 wxBoxSizer
* itemBoxSizer28
= new wxBoxSizer(wxVERTICAL
);
254 itemBoxSizer17
->Add(itemBoxSizer28
, 0, wxGROW
, 5);
256 m_textColourLabel
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_COLOURCTRL_LABEL
, _("&Colour:"), wxDefaultPosition
, wxDefaultSize
, 0 );
257 m_textColourLabel
->SetValue(false);
258 itemBoxSizer28
->Add(m_textColourLabel
, 0, wxALIGN_CENTER_HORIZONTAL
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
260 m_colourCtrl
= new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_COLOURCTRL
, wxDefaultPosition
, wxSize(40, 20), 0 );
261 m_colourCtrl
->SetHelpText(_("Click to change the text colour."));
262 if (wxRichTextFontPage::ShowToolTips())
263 m_colourCtrl
->SetToolTip(_("Click to change the text colour."));
264 itemBoxSizer28
->Add(m_colourCtrl
, 0, wxGROW
|wxALL
, 5);
266 wxBoxSizer
* itemBoxSizer31
= new wxBoxSizer(wxVERTICAL
);
267 itemBoxSizer17
->Add(itemBoxSizer31
, 0, wxGROW
, 5);
269 m_bgColourLabel
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL_LABEL
, _("&Bg colour:"), wxDefaultPosition
, wxDefaultSize
, 0 );
270 m_bgColourLabel
->SetValue(false);
271 itemBoxSizer31
->Add(m_bgColourLabel
, 0, wxALIGN_CENTER_HORIZONTAL
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
273 m_bgColourCtrl
= new wxRichTextColourSwatchCtrl( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_BGCOLOURCTRL
, wxDefaultPosition
, wxSize(40, 20), 0 );
274 m_bgColourCtrl
->SetHelpText(_("Click to change the text background colour."));
275 if (wxRichTextFontPage::ShowToolTips())
276 m_bgColourCtrl
->SetToolTip(_("Click to change the text background colour."));
277 itemBoxSizer31
->Add(m_bgColourCtrl
, 0, wxGROW
|wxALL
, 5);
279 wxBoxSizer
* itemBoxSizer34
= new wxBoxSizer(wxHORIZONTAL
);
280 itemBoxSizer3
->Add(itemBoxSizer34
, 0, wxGROW
, 5);
282 m_strikethroughCtrl
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
, _("&Strikethrough"), wxDefaultPosition
, wxDefaultSize
, wxCHK_3STATE
|wxCHK_ALLOW_3RD_STATE_FOR_USER
);
283 m_strikethroughCtrl
->SetValue(false);
284 m_strikethroughCtrl
->SetHelpText(_("Check to show a line through the text."));
285 if (wxRichTextFontPage::ShowToolTips())
286 m_strikethroughCtrl
->SetToolTip(_("Check to show a line through the text."));
287 itemBoxSizer34
->Add(m_strikethroughCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
289 m_capitalsCtrl
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_CAPSCTRL
, _("Ca&pitals"), wxDefaultPosition
, wxDefaultSize
, wxCHK_3STATE
|wxCHK_ALLOW_3RD_STATE_FOR_USER
);
290 m_capitalsCtrl
->SetValue(false);
291 m_capitalsCtrl
->SetHelpText(_("Check to show the text in capitals."));
292 if (wxRichTextFontPage::ShowToolTips())
293 m_capitalsCtrl
->SetToolTip(_("Check to show the text in capitals."));
294 itemBoxSizer34
->Add(m_capitalsCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
296 m_superscriptCtrl
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SUPERSCRIPT
, _("Supe&rscript"), wxDefaultPosition
, wxDefaultSize
, wxCHK_3STATE
|wxCHK_ALLOW_3RD_STATE_FOR_USER
);
297 m_superscriptCtrl
->SetValue(false);
298 m_superscriptCtrl
->SetHelpText(_("Check to show the text in superscript."));
299 if (wxRichTextFontPage::ShowToolTips())
300 m_superscriptCtrl
->SetToolTip(_("Check to show the text in superscript."));
301 itemBoxSizer34
->Add(m_superscriptCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
303 m_subscriptCtrl
= new wxCheckBox( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_SUBSCRIPT
, _("Subscrip&t"), wxDefaultPosition
, wxDefaultSize
, wxCHK_3STATE
|wxCHK_ALLOW_3RD_STATE_FOR_USER
);
304 m_subscriptCtrl
->SetValue(false);
305 m_subscriptCtrl
->SetHelpText(_("Check to show the text in subscript."));
306 if (wxRichTextFontPage::ShowToolTips())
307 m_subscriptCtrl
->SetToolTip(_("Check to show the text in subscript."));
308 itemBoxSizer34
->Add(m_subscriptCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
310 itemBoxSizer3
->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL
, 5);
312 m_previewCtrl
= new wxRichTextFontPreviewCtrl( itemRichTextDialogPage1
, ID_RICHTEXTFONTPAGE_PREVIEWCTRL
, wxDefaultPosition
, wxSize(100, 60), 0 );
313 m_previewCtrl
->SetHelpText(_("Shows a preview of the font settings."));
314 if (wxRichTextFontPage::ShowToolTips())
315 m_previewCtrl
->SetToolTip(_("Shows a preview of the font settings."));
316 itemBoxSizer3
->Add(m_previewCtrl
, 0, wxGROW
|wxALL
, 5);
318 ////@end wxRichTextFontPage content construction
320 m_faceListBox
->UpdateFonts();
322 m_styleCtrl
->Append(_("(none)"));
323 m_styleCtrl
->Append(_("Regular"));
324 m_styleCtrl
->Append(_("Italic"));
326 m_weightCtrl
->Append(_("(none)"));
327 m_weightCtrl
->Append(_("Regular"));
328 m_weightCtrl
->Append(_("Bold"));
330 m_underliningCtrl
->Append(_("(none)"));
331 m_underliningCtrl
->Append(_("Not underlined"));
332 m_underliningCtrl
->Append(_("Underlined"));
336 for (i
= 8; i
< 40; i
++)
338 nStr
.Printf(wxT("%d"), i
);
339 m_sizeListBox
->Append(nStr
);
341 m_sizeListBox
->Append(wxT("48"));
342 m_sizeListBox
->Append(wxT("72"));
345 /// Transfer data from/to window
346 bool wxRichTextFontPage::TransferDataFromWindow()
348 wxPanel::TransferDataFromWindow();
350 wxRichTextAttr
* attr
= GetAttributes();
352 if (!m_faceTextCtrl
->GetValue().IsEmpty())
354 wxString faceName
= m_faceTextCtrl
->GetValue();
355 attr
->SetFontFaceName(faceName
);
358 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_FONT_FACE
));
360 wxString strSize
= m_sizeTextCtrl
->GetValue();
361 if (!strSize
.IsEmpty())
363 int sz
= wxAtoi(strSize
);
366 if (m_sizeUnitsCtrl
->GetSelection() == 0)
367 attr
->SetFontPointSize(sz
);
369 attr
->SetFontPixelSize(sz
);
373 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_FONT_SIZE
));
375 if (m_styleCtrl
->GetSelection() != wxNOT_FOUND
&& m_styleCtrl
->GetSelection() != 0)
378 if (m_styleCtrl
->GetSelection() == 2)
379 style
= wxFONTSTYLE_ITALIC
;
381 style
= wxFONTSTYLE_NORMAL
;
383 attr
->SetFontStyle(style
);
386 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_FONT_ITALIC
));
388 if (m_weightCtrl
->GetSelection() != wxNOT_FOUND
&& m_weightCtrl
->GetSelection() != 0)
391 if (m_weightCtrl
->GetSelection() == 2)
392 weight
= wxFONTWEIGHT_BOLD
;
394 weight
= wxFONTWEIGHT_NORMAL
;
396 attr
->SetFontWeight(weight
);
399 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_FONT_WEIGHT
));
401 if (m_underliningCtrl
->GetSelection() != wxNOT_FOUND
&& m_underliningCtrl
->GetSelection() != 0)
404 if (m_underliningCtrl
->GetSelection() == 2)
409 attr
->SetFontUnderlined(underlined
);
412 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_FONT_UNDERLINE
));
414 if (m_textColourLabel
->GetValue())
416 attr
->SetTextColour(m_colourCtrl
->GetColour());
419 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_TEXT_COLOUR
));
421 if (m_bgColourLabel
->GetValue())
423 attr
->SetBackgroundColour(m_bgColourCtrl
->GetColour());
426 attr
->SetFlags(attr
->GetFlags() & (~ wxTEXT_ATTR_BACKGROUND_COLOUR
));
428 if (m_strikethroughCtrl
->Get3StateValue() != wxCHK_UNDETERMINED
)
430 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH
);
432 if (m_strikethroughCtrl
->Get3StateValue() == wxCHK_CHECKED
)
433 attr
->SetTextEffects(attr
->GetTextEffects() | wxTEXT_ATTR_EFFECT_STRIKETHROUGH
);
435 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH
);
439 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH
);
440 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_STRIKETHROUGH
);
443 if (m_capitalsCtrl
->Get3StateValue() != wxCHK_UNDETERMINED
)
445 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_CAPITALS
);
447 if (m_capitalsCtrl
->Get3StateValue() == wxCHK_CHECKED
)
448 attr
->SetTextEffects(attr
->GetTextEffects() | wxTEXT_ATTR_EFFECT_CAPITALS
);
450 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS
);
454 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() & ~wxTEXT_ATTR_EFFECT_CAPITALS
);
455 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_CAPITALS
);
458 if (m_superscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
460 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT
);
461 attr
->SetTextEffects(attr
->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUPERSCRIPT
);
462 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUBSCRIPT
);
464 else if (m_subscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
466 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() | wxTEXT_ATTR_EFFECT_SUBSCRIPT
);
467 attr
->SetTextEffects(attr
->GetTextEffects() | wxTEXT_ATTR_EFFECT_SUBSCRIPT
);
468 attr
->SetTextEffects(attr
->GetTextEffects() & ~wxTEXT_ATTR_EFFECT_SUPERSCRIPT
);
472 // If they are undetermined, we don't want to include these flags in the text effects - the objects
473 // should retain their original style.
474 attr
->SetTextEffectFlags(attr
->GetTextEffectFlags() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT
|wxTEXT_ATTR_EFFECT_SUPERSCRIPT
) );
475 attr
->SetTextEffects(attr
->GetTextEffects() & ~(wxTEXT_ATTR_EFFECT_SUBSCRIPT
|wxTEXT_ATTR_EFFECT_SUPERSCRIPT
) );
478 if (attr
->GetTextEffectFlags() == 0)
479 attr
->SetFlags(attr
->GetFlags() & ~wxTEXT_ATTR_EFFECTS
);
484 bool wxRichTextFontPage::TransferDataToWindow()
486 wxPanel::TransferDataToWindow();
489 wxRichTextAttr
* attr
= GetAttributes();
491 if (attr
->HasFontFaceName())
493 m_faceTextCtrl
->SetValue(attr
->GetFontFaceName());
494 m_faceListBox
->SetFaceNameSelection(attr
->GetFont().GetFaceName());
498 m_faceTextCtrl
->SetValue(wxEmptyString
);
499 m_faceListBox
->SetFaceNameSelection(wxEmptyString
);
502 if (attr
->HasFontPointSize())
504 wxString strSize
= wxString::Format(wxT("%d"), attr
->GetFontSize());
505 m_sizeTextCtrl
->SetValue(strSize
);
506 m_sizeUnitsCtrl
->SetSelection(0);
507 if (m_sizeListBox
->FindString(strSize
) != wxNOT_FOUND
)
508 m_sizeListBox
->SetStringSelection(strSize
);
510 else if (attr
->HasFontPixelSize())
512 wxString strSize
= wxString::Format(wxT("%d"), attr
->GetFontSize());
513 m_sizeTextCtrl
->SetValue(strSize
);
514 m_sizeUnitsCtrl
->SetSelection(1);
515 m_sizeListBox
->SetSelection(wxNOT_FOUND
);
519 m_sizeTextCtrl
->SetValue(wxEmptyString
);
520 m_sizeListBox
->SetSelection(wxNOT_FOUND
);
523 if (attr
->HasFontWeight())
525 if (attr
->GetFontWeight() == wxBOLD
)
526 m_weightCtrl
->SetSelection(2);
528 m_weightCtrl
->SetSelection(1);
532 m_weightCtrl
->SetSelection(0);
535 if (attr
->HasFontItalic())
537 if (attr
->GetFontStyle() == wxITALIC
)
538 m_styleCtrl
->SetSelection(2);
540 m_styleCtrl
->SetSelection(1);
544 m_styleCtrl
->SetSelection(0);
547 if (attr
->HasFontUnderlined())
549 if (attr
->GetFontUnderlined())
550 m_underliningCtrl
->SetSelection(2);
552 m_underliningCtrl
->SetSelection(1);
556 m_underliningCtrl
->SetSelection(0);
559 if (attr
->HasTextColour())
561 m_colourCtrl
->SetColour(attr
->GetTextColour());
562 m_textColourLabel
->SetValue(true);
563 m_colourPresent
= true;
567 m_colourCtrl
->SetColour(*wxBLACK
);
568 m_textColourLabel
->SetValue(false);
571 if (attr
->HasBackgroundColour())
573 m_bgColourCtrl
->SetColour(attr
->GetBackgroundColour());
574 m_bgColourLabel
->SetValue(true);
575 m_bgColourPresent
= true;
579 m_bgColourCtrl
->SetColour(*wxWHITE
);
580 m_bgColourLabel
->SetValue(false);
583 if (attr
->HasTextEffects())
585 if (attr
->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH
)
587 if (attr
->GetTextEffects() & wxTEXT_ATTR_EFFECT_STRIKETHROUGH
)
588 m_strikethroughCtrl
->Set3StateValue(wxCHK_CHECKED
);
590 m_strikethroughCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
593 m_strikethroughCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
595 if (attr
->GetTextEffectFlags() & wxTEXT_ATTR_EFFECT_CAPITALS
)
597 if (attr
->GetTextEffects() & wxTEXT_ATTR_EFFECT_CAPITALS
)
598 m_capitalsCtrl
->Set3StateValue(wxCHK_CHECKED
);
600 m_capitalsCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
603 m_capitalsCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
605 if ( attr
->GetTextEffectFlags() & (wxTEXT_ATTR_EFFECT_SUPERSCRIPT
| wxTEXT_ATTR_EFFECT_SUBSCRIPT
) )
607 if (attr
->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUPERSCRIPT
)
609 m_superscriptCtrl
->Set3StateValue(wxCHK_CHECKED
);
610 m_subscriptCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
612 else if (attr
->GetTextEffects() & wxTEXT_ATTR_EFFECT_SUBSCRIPT
)
614 m_superscriptCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
615 m_subscriptCtrl
->Set3StateValue(wxCHK_CHECKED
);
619 m_superscriptCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
620 m_subscriptCtrl
->Set3StateValue(wxCHK_UNCHECKED
);
625 m_superscriptCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
626 m_subscriptCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
631 m_strikethroughCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
632 m_capitalsCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
633 m_superscriptCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
634 m_subscriptCtrl
->Set3StateValue(wxCHK_UNDETERMINED
);
639 m_dontUpdate
= false;
644 wxRichTextAttr
* wxRichTextFontPage::GetAttributes()
646 return wxRichTextFormattingDialog::GetDialogAttributes(this);
649 /// Updates the font preview
650 void wxRichTextFontPage::UpdatePreview()
654 if (m_textColourLabel
->GetValue())
655 m_previewCtrl
->SetForegroundColour(m_colourCtrl
->GetColour());
658 m_previewCtrl
->SetForegroundColour(*wxBLACK
);
659 if (!(m_colourCtrl
->GetColour() == *wxBLACK
))
661 m_colourCtrl
->SetColour(*wxBLACK
);
662 m_colourCtrl
->Refresh();
666 if (m_bgColourLabel
->GetValue())
667 m_previewCtrl
->SetBackgroundColour(m_bgColourCtrl
->GetColour());
670 m_previewCtrl
->SetBackgroundColour(*wxWHITE
);
672 if (!(m_bgColourCtrl
->GetColour() == *wxWHITE
))
674 m_bgColourCtrl
->SetColour(*wxWHITE
);
675 m_bgColourCtrl
->Refresh();
679 if (m_faceListBox
->GetSelection() != wxNOT_FOUND
)
681 wxString faceName
= m_faceListBox
->GetFaceName(m_faceListBox
->GetSelection());
682 attr
.SetFontFaceName(faceName
);
685 wxString strSize
= m_sizeTextCtrl
->GetValue();
686 if (!strSize
.IsEmpty())
688 int sz
= wxAtoi(strSize
);
691 if (m_sizeUnitsCtrl
->GetSelection() == 1)
692 attr
.SetFontPixelSize(sz
);
694 attr
.SetFontPointSize(sz
);
698 if (m_styleCtrl
->GetSelection() != wxNOT_FOUND
&& m_styleCtrl
->GetSelection() != 0)
701 if (m_styleCtrl
->GetSelection() == 2)
702 style
= wxFONTSTYLE_ITALIC
;
704 style
= wxFONTSTYLE_NORMAL
;
706 attr
.SetFontStyle(style
);
709 if (m_weightCtrl
->GetSelection() != wxNOT_FOUND
&& m_weightCtrl
->GetSelection() != 0)
712 if (m_weightCtrl
->GetSelection() == 2)
713 weight
= wxFONTWEIGHT_BOLD
;
715 weight
= wxFONTWEIGHT_NORMAL
;
717 attr
.SetFontWeight(weight
);
720 if (m_underliningCtrl
->GetSelection() != wxNOT_FOUND
&& m_underliningCtrl
->GetSelection() != 0)
723 if (m_underliningCtrl
->GetSelection() == 2)
728 attr
.SetFontUnderlined(underlined
);
733 if (m_strikethroughCtrl
->Get3StateValue() == wxCHK_CHECKED
)
735 textEffects
|= wxTEXT_ATTR_EFFECT_STRIKETHROUGH
;
738 if (m_capitalsCtrl
->Get3StateValue() == wxCHK_CHECKED
)
740 textEffects
|= wxTEXT_ATTR_EFFECT_CAPITALS
;
743 if ( m_superscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
744 textEffects
|= wxTEXT_ATTR_EFFECT_SUPERSCRIPT
;
745 else if ( m_subscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
746 textEffects
|= wxTEXT_ATTR_EFFECT_SUBSCRIPT
;
748 wxFont font
= attr
.GetFont();
749 m_previewCtrl
->SetFont(font
);
750 m_previewCtrl
->SetTextEffects(textEffects
);
751 m_previewCtrl
->Refresh();
755 * Should we show tooltips?
758 bool wxRichTextFontPage::ShowToolTips()
760 return wxRichTextFormattingDialog::ShowToolTips();
764 * Get bitmap resources
767 wxBitmap
wxRichTextFontPage::GetBitmapResource( const wxString
& name
)
770 ////@begin wxRichTextFontPage bitmap retrieval
773 ////@end wxRichTextFontPage bitmap retrieval
780 wxIcon
wxRichTextFontPage::GetIconResource( const wxString
& name
)
783 ////@begin wxRichTextFontPage icon retrieval
786 ////@end wxRichTextFontPage icon retrieval
790 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_FACETEXTCTRL
793 void wxRichTextFontPage::OnFaceTextCtrlUpdated( wxCommandEvent
& WXUNUSED(event
) )
798 wxString facename
= m_faceTextCtrl
->GetValue();
799 if (!facename
.IsEmpty())
801 if (m_faceListBox
->HasFaceName(facename
))
803 m_faceListBox
->SetFaceNameSelection(facename
);
808 // Try to find a partial match
809 const wxArrayString
& arr
= m_faceListBox
->GetFaceNames();
811 for (i
= 0; i
< arr
.GetCount(); i
++)
813 if (arr
[i
].Mid(0, facename
.Length()).Lower() == facename
.Lower())
815 m_faceListBox
->ScrollToRow(i
);
825 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_SIZETEXTCTRL
828 void wxRichTextFontPage::OnSizeTextCtrlUpdated( wxCommandEvent
& WXUNUSED(event
) )
833 wxString strSize
= m_sizeTextCtrl
->GetValue();
834 if (!strSize
.IsEmpty() && m_sizeListBox
->FindString(strSize
) != wxNOT_FOUND
)
835 m_sizeListBox
->SetStringSelection(strSize
);
841 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZELISTBOX
844 void wxRichTextFontPage::OnSizeListBoxSelected( wxCommandEvent
& event
)
846 bool oldDontUpdate
= m_dontUpdate
;
849 m_sizeTextCtrl
->SetValue(event
.GetString());
851 m_dontUpdate
= oldDontUpdate
;
860 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_FACELISTBOX
863 void wxRichTextFontPage::OnFaceListBoxSelected( wxCommandEvent
& WXUNUSED(event
) )
865 bool oldDontUpdate
= m_dontUpdate
;
868 m_faceTextCtrl
->SetValue(m_faceListBox
->GetFaceName(m_faceListBox
->GetSelection()));
870 m_dontUpdate
= oldDontUpdate
;
879 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_STYLECTRL
882 void wxRichTextFontPage::OnStyleCtrlSelected( wxCommandEvent
& WXUNUSED(event
) )
892 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL
895 void wxRichTextFontPage::OnUnderliningCtrlSelected( wxCommandEvent
& WXUNUSED(event
) )
905 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_WEIGHTCTRL
908 void wxRichTextFontPage::OnWeightCtrlSelected( wxCommandEvent
& WXUNUSED(event
) )
916 void wxRichTextFontPage::OnColourClicked( wxCommandEvent
& event
)
918 if (event
.GetId() == m_colourCtrl
->GetId())
919 m_colourPresent
= true;
920 else if (event
.GetId() == m_bgColourCtrl
->GetId())
921 m_bgColourPresent
= true;
925 if (event
.GetId() == m_colourCtrl
->GetId())
927 m_textColourLabel
->SetValue(true);
929 else if (event
.GetId() == m_bgColourCtrl
->GetId())
931 m_bgColourLabel
->SetValue(true);
934 m_dontUpdate
= false;
939 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL
942 void wxRichTextFontPage::OnStrikethroughctrlClick( wxCommandEvent
& WXUNUSED(event
) )
951 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL
954 void wxRichTextFontPage::OnCapsctrlClick( wxCommandEvent
& WXUNUSED(event
) )
963 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUPERSCRIPT
966 void wxRichTextFontPage::OnRichtextfontpageSuperscriptClick( wxCommandEvent
& WXUNUSED(event
) )
971 if ( m_superscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
972 m_subscriptCtrl
->Set3StateValue( wxCHK_UNCHECKED
);
978 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUBSCRIPT
981 void wxRichTextFontPage::OnRichtextfontpageSubscriptClick( wxCommandEvent
& WXUNUSED(event
) )
986 if ( m_subscriptCtrl
->Get3StateValue() == wxCHK_CHECKED
)
987 m_superscriptCtrl
->Set3StateValue( wxCHK_UNCHECKED
);
993 * wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZE_UNITS
996 void wxRichTextFontPage::OnRichtextfontpageSizeUnitsSelected( wxCommandEvent
& WXUNUSED(event
) )
1005 * wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
1008 void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsUp( wxSpinEvent
& WXUNUSED(event
) )
1010 wxString text
= m_sizeTextCtrl
->GetValue();
1011 if (!text
.IsEmpty())
1013 int size
= wxAtoi(text
);
1017 m_sizeTextCtrl
->SetValue(wxString::Format(wxT("%d"), size
));
1024 * wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTFONTPAGE_SPINBUTTONS
1027 void wxRichTextFontPage::OnRichtextfontpageSpinbuttonsDown( wxSpinEvent
& WXUNUSED(event
) )
1029 wxString text
= m_sizeTextCtrl
->GetValue();
1030 if (!text
.IsEmpty())
1032 int size
= wxAtoi(text
);
1036 m_sizeTextCtrl
->SetValue(wxString::Format(wxT("%d"), size
));
1043 * wxEVT_IDLE event handler for ID_RICHTEXTFONTPAGE
1046 void wxRichTextFontPage::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1048 if (!m_sizeUnitsCtrl
)
1051 if (m_sizeUnitsCtrl
->GetSelection() == 1 && m_sizeListBox
->IsShown())
1053 m_fontListBoxParent
->Show(m_sizeListBox
, false);
1056 else if (m_sizeUnitsCtrl
->GetSelection() == 0 && !m_sizeListBox
->IsShown())
1058 m_fontListBoxParent
->Show(m_sizeListBox
, true);
1061 if (!wxRichTextFormattingDialog::GetDialog(this)->HasOption(wxRichTextFormattingDialog::Option_AllowPixelFontSize
) &&
1062 m_sizeUnitsCtrl
->IsEnabled())
1064 m_sizeUnitsCtrl
->Disable();