X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94f5392355df17ef8cd4884637a1ce71a07dd685..129b8b1a215fc1fcc1b9f06daa0aeaf22bbce614:/src/generic/fontdlgg.cpp diff --git a/src/generic/fontdlgg.cpp b/src/generic/fontdlgg.cpp index abf7bd4504..66191c4993 100644 --- a/src/generic/fontdlgg.cpp +++ b/src/generic/fontdlgg.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "fontdlgg.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -34,16 +30,20 @@ #include "wx/choice.h" #include "wx/checkbox.h" #include "wx/intl.h" + #include "wx/settings.h" + #include "wx/cmndata.h" + #include "wx/sizer.h" #endif #include #include -#include "wx/cmndata.h" -#include "wx/sizer.h" #include "wx/fontdlg.h" #include "wx/generic/fontdlgg.h" -#include "wx/settings.h" + +#if USE_SPINCTRL_FOR_POINT_SIZE +#include "wx/spinctrl.h" +#endif //----------------------------------------------------------------------------- // helper class - wxFontPreviewer @@ -79,13 +79,10 @@ void wxFontPreviewer::OnPaint(wxPaintEvent& WXUNUSED(event)) if ( font.Ok() ) { dc.SetFont(font); - // Calculate vertical centre - long w, h; - dc.GetTextExtent( wxT("X"), &w, &h); dc.SetTextForeground(GetForegroundColour()); dc.SetClippingRegion(2, 2, size.x-4, size.y-4); dc.DrawText(_("ABCDEFGabcdefg12345"), - 10, size.y/2 - h/2); + 10, (size.y - dc.GetTextExtent(wxT("X")).y)/2); dc.DestroyClippingRegion(); } } @@ -102,7 +99,12 @@ BEGIN_EVENT_TABLE(wxGenericFontDialog, wxDialog) EVT_CHOICE(wxID_FONT_WEIGHT, wxGenericFontDialog::OnChangeFont) EVT_CHOICE(wxID_FONT_FAMILY, wxGenericFontDialog::OnChangeFont) EVT_CHOICE(wxID_FONT_COLOUR, wxGenericFontDialog::OnChangeFont) +#if USE_SPINCTRL_FOR_POINT_SIZE + EVT_SPINCTRL(wxID_FONT_SIZE, wxGenericFontDialog::OnChangeSize) + EVT_TEXT(wxID_FONT_SIZE, wxGenericFontDialog::OnChangeFont) +#else EVT_CHOICE(wxID_FONT_SIZE, wxGenericFontDialog::OnChangeFont) +#endif EVT_CLOSE(wxGenericFontDialog::OnCloseWindow) END_EVENT_TABLE() @@ -169,9 +171,9 @@ static wxString wxColourDialogNames[NUM_COLS]={wxT("ORANGE"), void wxGenericFontDialog::Init() { - m_useEvents = false; - m_previewer = NULL; - Create( m_parent ) ; + m_useEvents = false; + m_previewer = NULL; + Create( m_parent ) ; } wxGenericFontDialog::~wxGenericFontDialog() @@ -185,7 +187,10 @@ void wxGenericFontDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) bool wxGenericFontDialog::DoCreate(wxWindow *parent) { - if ( !wxDialog::Create( parent , wxID_ANY , _T("Choose Font") , wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, + parent = GetParentForModalDialog(parent); + + if ( !wxDialog::Create( parent , wxID_ANY , _T("Choose Font") , + wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("fontdialog") ) ) { wxFAIL_MSG( wxT("wxFontDialog creation failed") ); @@ -196,8 +201,7 @@ bool wxGenericFontDialog::DoCreate(wxWindow *parent) CreateWidgets(); // sets initial font in preview area - wxCommandEvent dummy; - OnChangeFont(dummy); + DoChangeFont(); return true; } @@ -208,7 +212,7 @@ int wxGenericFontDialog::ShowModal() if (ret != wxID_CANCEL) { - m_fontData.m_chosenFont = dialogFont; + m_fontData.m_chosenFont = m_dialogFont; } return ret; @@ -219,10 +223,9 @@ static bool ShowToolTips() { return false; } void wxGenericFontDialog::CreateWidgets() { - wxString - *families = new wxString[6], - *styles = new wxString[3], - *weights = new wxString[3]; + wxString *families = new wxString[6], + *styles = new wxString[3], + *weights = new wxString[3]; families[0] = _("Roman"); families[1] = _("Decorative"); families[2] = _("Modern"); @@ -236,6 +239,7 @@ void wxGenericFontDialog::CreateWidgets() weights[1] = _("Light"); weights[2] = _("Bold"); +#if !USE_SPINCTRL_FOR_POINT_SIZE wxString *pointSizes = new wxString[40]; int i; for ( i = 0; i < 40; i++) @@ -244,6 +248,7 @@ void wxGenericFontDialog::CreateWidgets() wxSprintf(buf, wxT("%d"), i + 1); pointSizes[i] = buf; } +#endif // layout @@ -260,8 +265,8 @@ void wxGenericFontDialog::CreateWidgets() wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); this->SetSizer(itemBoxSizer2); - this->SetAutoLayout(TRUE); - + this->SetAutoLayout(true); + wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL); itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5); @@ -271,7 +276,7 @@ void wxGenericFontDialog::CreateWidgets() wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL); itemGridSizer4->Add(itemBoxSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW, 5); wxStaticText* itemStaticText6 = new wxStaticText( this, wxID_STATIC, _("&Font family:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); wxChoice* itemChoice7 = new wxChoice( this, wxID_FONT_FAMILY, wxDefaultPosition, wxDefaultSize, 5, families, 0 ); itemChoice7->SetHelpText(_("The font family.")); @@ -282,7 +287,7 @@ void wxGenericFontDialog::CreateWidgets() wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL); itemGridSizer4->Add(itemBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW, 5); wxStaticText* itemStaticText9 = new wxStaticText( this, wxID_STATIC, _("&Style:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + itemBoxSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); wxChoice* itemChoice10 = new wxChoice( this, wxID_FONT_STYLE, wxDefaultPosition, wxDefaultSize, 3, styles, 0 ); itemChoice10->SetHelpText(_("The font style.")); @@ -293,7 +298,7 @@ void wxGenericFontDialog::CreateWidgets() wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL); itemGridSizer4->Add(itemBoxSizer11, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW, 5); wxStaticText* itemStaticText12 = new wxStaticText( this, wxID_STATIC, _("&Weight:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer11->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + itemBoxSizer11->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); wxChoice* itemChoice13 = new wxChoice( this, wxID_FONT_WEIGHT, wxDefaultPosition, wxDefaultSize, 3, weights, 0 ); itemChoice13->SetHelpText(_("The font weight.")); @@ -306,13 +311,13 @@ void wxGenericFontDialog::CreateWidgets() if (m_fontData.GetEnableEffects()) { wxStaticText* itemStaticText15 = new wxStaticText( this, wxID_STATIC, _("C&olour:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - + itemBoxSizer14->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); + wxSize colourSize = wxDefaultSize; if (is_pda) colourSize.x = 100; - wxChoice* itemChoice16 = new wxChoice( this, wxID_FONT_COLOUR, wxDefaultPosition, wxDefaultSize, NUM_COLS, wxColourDialogNames, 0 ); + wxChoice* itemChoice16 = new wxChoice( this, wxID_FONT_COLOUR, wxDefaultPosition, colourSize, NUM_COLS, wxColourDialogNames, 0 ); itemChoice16->SetHelpText(_("The font colour.")); if (ShowToolTips()) itemChoice16->SetToolTip(_("The font colour.")); @@ -322,20 +327,29 @@ void wxGenericFontDialog::CreateWidgets() wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL); itemGridSizer4->Add(itemBoxSizer17, 0, wxALIGN_CENTER_HORIZONTAL|wxGROW, 5); wxStaticText* itemStaticText18 = new wxStaticText( this, wxID_STATIC, _("&Point size:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); +#if USE_SPINCTRL_FOR_POINT_SIZE + wxSpinCtrl* spinCtrl = new wxSpinCtrl(this, wxID_FONT_SIZE, wxT("12"), wxDefaultPosition, wxSize(80, wxDefaultCoord), wxSP_ARROW_KEYS, 1, 500, 12); + spinCtrl->SetHelpText(_("The font point size.")); + if (ShowToolTips()) + spinCtrl->SetToolTip(_("The font point size.")); + + itemBoxSizer17->Add(spinCtrl, 0, wxALIGN_LEFT|wxALL, 5); +#else wxChoice* itemChoice19 = new wxChoice( this, wxID_FONT_SIZE, wxDefaultPosition, wxDefaultSize, 40, pointSizes, 0 ); itemChoice19->SetHelpText(_("The font point size.")); if (ShowToolTips()) itemChoice19->SetToolTip(_("The font point size.")); itemBoxSizer17->Add(itemChoice19, 0, wxALIGN_LEFT|wxALL, 5); +#endif if (m_fontData.GetEnableEffects()) { wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxVERTICAL); itemGridSizer4->Add(itemBoxSizer20, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); wxCheckBox* itemCheckBox21 = new wxCheckBox( this, wxID_FONT_UNDERLINE, _("&Underline"), wxDefaultPosition, wxDefaultSize, 0 ); - itemCheckBox21->SetValue(FALSE); + itemCheckBox21->SetValue(false); itemCheckBox21->SetHelpText(_("Whether the font is underlined.")); if (ShowToolTips()) itemCheckBox21->SetToolTip(_("Whether the font is underlined.")); @@ -346,14 +360,14 @@ void wxGenericFontDialog::CreateWidgets() itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); wxStaticText* itemStaticText23 = new wxStaticText( this, wxID_STATIC, _("Preview:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer3->Add(itemStaticText23, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - + itemBoxSizer3->Add(itemStaticText23, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5); + wxFontPreviewer* itemWindow24 = new wxFontPreviewer( this ); m_previewer = itemWindow24; itemWindow24->SetHelpText(_("Shows the font preview.")); if (ShowToolTips()) itemWindow24->SetToolTip(_("Shows the font preview.")); - itemBoxSizer3->Add(itemWindow24, 0, wxGROW|wxALL, 5); + itemBoxSizer3->Add(itemWindow24, 1, wxGROW|wxALL, 5); wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer3->Add(itemBoxSizer25, 0, wxGROW, 5); @@ -385,43 +399,49 @@ void wxGenericFontDialog::CreateWidgets() itemBoxSizer25->Add(itemButton28, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); #endif - familyChoice = (wxChoice*) FindWindow(wxID_FONT_FAMILY); - styleChoice = (wxChoice*) FindWindow(wxID_FONT_STYLE); - weightChoice = (wxChoice*) FindWindow(wxID_FONT_WEIGHT); - colourChoice = (wxChoice*) FindWindow(wxID_FONT_COLOUR); - pointSizeChoice = (wxChoice*) FindWindow(wxID_FONT_SIZE); - underLineCheckBox = (wxCheckBox*) FindWindow(wxID_FONT_UNDERLINE); - - familyChoice->SetStringSelection( wxFontFamilyIntToString(dialogFont.GetFamily()) ); - styleChoice->SetStringSelection(wxFontStyleIntToString(dialogFont.GetStyle())); - weightChoice->SetStringSelection(wxFontWeightIntToString(dialogFont.GetWeight())); - - if (colourChoice) + m_familyChoice = (wxChoice*) FindWindow(wxID_FONT_FAMILY); + m_styleChoice = (wxChoice*) FindWindow(wxID_FONT_STYLE); + m_weightChoice = (wxChoice*) FindWindow(wxID_FONT_WEIGHT); + m_colourChoice = (wxChoice*) FindWindow(wxID_FONT_COLOUR); + m_underLineCheckBox = (wxCheckBox*) FindWindow(wxID_FONT_UNDERLINE); + + m_familyChoice->SetStringSelection( wxFontFamilyIntToString(m_dialogFont.GetFamily()) ); + m_styleChoice->SetStringSelection(wxFontStyleIntToString(m_dialogFont.GetStyle())); + m_weightChoice->SetStringSelection(wxFontWeightIntToString(m_dialogFont.GetWeight())); + + if (m_colourChoice) { wxString name(wxTheColourDatabase->FindName(m_fontData.GetColour())); if (name.length()) - colourChoice->SetStringSelection(name); + m_colourChoice->SetStringSelection(name); else - colourChoice->SetStringSelection(wxT("BLACK")); + m_colourChoice->SetStringSelection(wxT("BLACK")); } - - if (underLineCheckBox) + + if (m_underLineCheckBox) { - underLineCheckBox->SetValue(dialogFont.GetUnderlined()); + m_underLineCheckBox->SetValue(m_dialogFont.GetUnderlined()); } - pointSizeChoice->SetSelection(dialogFont.GetPointSize()-1); +#if USE_SPINCTRL_FOR_POINT_SIZE + spinCtrl->SetValue(m_dialogFont.GetPointSize()); +#else + m_pointSizeChoice = (wxChoice*) FindWindow(wxID_FONT_SIZE); + m_pointSizeChoice->SetSelection(m_dialogFont.GetPointSize()-1); +#endif GetSizer()->SetItemMinSize(m_previewer, is_pda ? 100 : 430, is_pda ? 40 : 100); GetSizer()->SetSizeHints(this); - GetSizer()->Fit(this); + GetSizer()->Fit(this); Centre(wxBOTH); delete[] families; delete[] styles; delete[] weights; +#if !USE_SPINCTRL_FOR_POINT_SIZE delete[] pointSizes; +#endif // Don't block events any more m_useEvents = true; @@ -445,38 +465,49 @@ void wxGenericFontDialog::InitializeFont() fontUnderline = m_fontData.m_initialFont.GetUnderlined(); } - dialogFont = wxFont(fontSize, fontFamily, fontStyle, - fontWeight, fontUnderline); + m_dialogFont = wxFont(fontSize, fontFamily, fontStyle, + fontWeight, fontUnderline); if (m_previewer) - m_previewer->SetFont(dialogFont); + m_previewer->SetFont(m_dialogFont); } void wxGenericFontDialog::OnChangeFont(wxCommandEvent& WXUNUSED(event)) +{ + DoChangeFont(); +} + +void wxGenericFontDialog::DoChangeFont() { if (!m_useEvents) return; - int fontFamily = wxFontFamilyStringToInt(WXSTRINGCAST familyChoice->GetStringSelection()); - int fontWeight = wxFontWeightStringToInt(WXSTRINGCAST weightChoice->GetStringSelection()); - int fontStyle = wxFontStyleStringToInt(WXSTRINGCAST styleChoice->GetStringSelection()); - int fontSize = wxAtoi(pointSizeChoice->GetStringSelection()); + int fontFamily = wxFontFamilyStringToInt(WXSTRINGCAST m_familyChoice->GetStringSelection()); + int fontWeight = wxFontWeightStringToInt(WXSTRINGCAST m_weightChoice->GetStringSelection()); + int fontStyle = wxFontStyleStringToInt(WXSTRINGCAST m_styleChoice->GetStringSelection()); +#if USE_SPINCTRL_FOR_POINT_SIZE + wxSpinCtrl* fontSizeCtrl = wxDynamicCast(FindWindow(wxID_FONT_SIZE), wxSpinCtrl); + int fontSize = fontSizeCtrl->GetValue(); +#else + int fontSize = wxAtoi(m_pointSizeChoice->GetStringSelection()); +#endif + // Start with previous underline setting, we want to retain it even if we can't edit it - // dialogFont is always initialized because of the call to InitializeFont - int fontUnderline = dialogFont.GetUnderlined(); + // m_dialogFont is always initialized because of the call to InitializeFont + int fontUnderline = m_dialogFont.GetUnderlined(); - if (underLineCheckBox) + if (m_underLineCheckBox) { - fontUnderline = underLineCheckBox->GetValue(); + fontUnderline = m_underLineCheckBox->GetValue(); } - dialogFont = wxFont(fontSize, fontFamily, fontStyle, fontWeight, (fontUnderline != 0)); - m_previewer->SetFont(dialogFont); + m_dialogFont = wxFont(fontSize, fontFamily, fontStyle, fontWeight, (fontUnderline != 0)); + m_previewer->SetFont(m_dialogFont); - if ( colourChoice ) + if ( m_colourChoice ) { - if ( !colourChoice->GetStringSelection().empty() ) + if ( !m_colourChoice->GetStringSelection().empty() ) { - wxColour col = wxTheColourDatabase->Find(colourChoice->GetStringSelection()); + wxColour col = wxTheColourDatabase->Find(m_colourChoice->GetStringSelection()); if (col.Ok()) { m_fontData.m_fontColour = col; @@ -487,100 +518,106 @@ void wxGenericFontDialog::OnChangeFont(wxCommandEvent& WXUNUSED(event)) // (EnableEffects may be false) if (m_fontData.m_fontColour.Ok()) m_previewer->SetForegroundColour(m_fontData.m_fontColour); - + m_previewer->Refresh(); } +#if USE_SPINCTRL_FOR_POINT_SIZE +void wxGenericFontDialog::OnChangeSize(wxSpinEvent& WXUNUSED(event)) +{ + DoChangeFont(); +} +#endif + const wxChar *wxFontWeightIntToString(int weight) { - switch (weight) - { - case wxLIGHT: - return wxT("Light"); - case wxBOLD: - return wxT("Bold"); - case wxNORMAL: - default: - return wxT("Normal"); - } + switch (weight) + { + case wxLIGHT: + return wxT("Light"); + case wxBOLD: + return wxT("Bold"); + case wxNORMAL: + default: + return wxT("Normal"); + } } const wxChar *wxFontStyleIntToString(int style) { - switch (style) - { - case wxITALIC: - return wxT("Italic"); - case wxSLANT: - return wxT("Slant"); - case wxNORMAL: - default: - return wxT("Normal"); - } + switch (style) + { + case wxITALIC: + return wxT("Italic"); + case wxSLANT: + return wxT("Slant"); + case wxNORMAL: + default: + return wxT("Normal"); + } } const wxChar *wxFontFamilyIntToString(int family) { - switch (family) - { - case wxROMAN: - return wxT("Roman"); - case wxDECORATIVE: - return wxT("Decorative"); - case wxMODERN: - return wxT("Modern"); - case wxSCRIPT: - return wxT("Script"); - case wxTELETYPE: - return wxT("Teletype"); - case wxSWISS: - default: - return wxT("Swiss"); - } + switch (family) + { + case wxROMAN: + return wxT("Roman"); + case wxDECORATIVE: + return wxT("Decorative"); + case wxMODERN: + return wxT("Modern"); + case wxSCRIPT: + return wxT("Script"); + case wxTELETYPE: + return wxT("Teletype"); + case wxSWISS: + default: + return wxT("Swiss"); + } } int wxFontFamilyStringToInt(wxChar *family) { - if (!family) - return wxSWISS; - - if (wxStrcmp(family, wxT("Roman")) == 0) - return wxROMAN; - else if (wxStrcmp(family, wxT("Decorative")) == 0) - return wxDECORATIVE; - else if (wxStrcmp(family, wxT("Modern")) == 0) - return wxMODERN; - else if (wxStrcmp(family, wxT("Script")) == 0) - return wxSCRIPT; - else if (wxStrcmp(family, wxT("Teletype")) == 0) - return wxTELETYPE; - else return wxSWISS; + if (!family) + return wxSWISS; + + if (wxStrcmp(family, wxT("Roman")) == 0) + return wxROMAN; + else if (wxStrcmp(family, wxT("Decorative")) == 0) + return wxDECORATIVE; + else if (wxStrcmp(family, wxT("Modern")) == 0) + return wxMODERN; + else if (wxStrcmp(family, wxT("Script")) == 0) + return wxSCRIPT; + else if (wxStrcmp(family, wxT("Teletype")) == 0) + return wxTELETYPE; + else return wxSWISS; } int wxFontStyleStringToInt(wxChar *style) { - if (!style) - return wxNORMAL; - if (wxStrcmp(style, wxT("Italic")) == 0) - return wxITALIC; - else if (wxStrcmp(style, wxT("Slant")) == 0) - return wxSLANT; - else - return wxNORMAL; + if (!style) + return wxNORMAL; + if (wxStrcmp(style, wxT("Italic")) == 0) + return wxITALIC; + else if (wxStrcmp(style, wxT("Slant")) == 0) + return wxSLANT; + else + return wxNORMAL; } int wxFontWeightStringToInt(wxChar *weight) { - if (!weight) - return wxNORMAL; - if (wxStrcmp(weight, wxT("Bold")) == 0) - return wxBOLD; - else if (wxStrcmp(weight, wxT("Light")) == 0) - return wxLIGHT; - else - return wxNORMAL; + if (!weight) + return wxNORMAL; + if (wxStrcmp(weight, wxT("Bold")) == 0) + return wxBOLD; + else if (wxStrcmp(weight, wxT("Light")) == 0) + return wxLIGHT; + else + return wxNORMAL; } #endif // wxUSE_FONTDLG -