added "set encoding" menu item

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40739 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-08-22 10:29:32 +00:00
parent 1baec21fce
commit c6b7296035

View File

@@ -35,10 +35,13 @@
#include "../sample.xpm" #include "../sample.xpm"
#ifdef __WXMAC__ #ifdef __WXMAC__
#undef wxFontDialog #undef wxFontDialog
#include "wx/mac/fontdlg.h" #include "wx/mac/fontdlg.h"
#endif #endif
// used as title for several dialog boxes
static const wxChar SAMPLE_TITLE[] = "wxWidgets Font Sample";
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// private classes // private classes
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -111,9 +114,10 @@ public:
{ DoEnumerateFamilies(true); } { DoEnumerateFamilies(true); }
void OnEnumerateEncodings(wxCommandEvent& event); void OnEnumerateEncodings(wxCommandEvent& event);
void OnCheckNativeToFromString(wxCommandEvent& event); void OnSetNativeDesc(wxCommandEvent& event);
void OnCheckNativeToFromUserString(wxCommandEvent& event); void OnSetNativeUserDesc(wxCommandEvent& event);
void OnCheckFaceName(wxCommandEvent& event); void OnSetFaceName(wxCommandEvent& event);
void OnSetEncoding(wxCommandEvent& event);
protected: protected:
bool DoEnumerateFamilies(bool fixedWidthOnly, bool DoEnumerateFamilies(bool fixedWidthOnly,
@@ -123,6 +127,11 @@ protected:
void DoResizeFont(int diff); void DoResizeFont(int diff);
void DoChangeFont(const wxFont& font, const wxColour& col = wxNullColour); void DoChangeFont(const wxFont& font, const wxColour& col = wxNullColour);
// ask the user to choose an encoding and return it or
// wxFONTENCODING_SYSTEM if the dialog was cancelled
wxFontEncoding GetEncodingFromUser();
size_t m_fontSize; // in points size_t m_fontSize; // in points
wxTextCtrl *m_textctrl; wxTextCtrl *m_textctrl;
@@ -160,9 +169,10 @@ enum
Font_EnumFamilies, Font_EnumFamilies,
Font_EnumFixedFamilies, Font_EnumFixedFamilies,
Font_EnumEncodings, Font_EnumEncodings,
Font_CheckNativeToFromString, Font_SetNativeDesc,
Font_CheckNativeToFromUserString, Font_SetNativeUserDesc,
Font_CheckFaceName, Font_SetFaceName,
Font_SetEncoding,
Font_Max Font_Max
}; };
@@ -190,9 +200,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Font_wxSWISS_FONT, MyFrame::OnwxPointerFont) EVT_MENU(Font_wxSWISS_FONT, MyFrame::OnwxPointerFont)
EVT_MENU(Font_CheckNativeToFromString, MyFrame::OnCheckNativeToFromString) EVT_MENU(Font_SetNativeDesc, MyFrame::OnSetNativeDesc)
EVT_MENU(Font_CheckNativeToFromUserString, MyFrame::OnCheckNativeToFromUserString) EVT_MENU(Font_SetNativeUserDesc, MyFrame::OnSetNativeUserDesc)
EVT_MENU(Font_CheckFaceName, MyFrame::OnCheckFaceName) EVT_MENU(Font_SetFaceName, MyFrame::OnSetFaceName)
EVT_MENU(Font_SetEncoding, MyFrame::OnSetEncoding)
EVT_MENU(Font_Choose, MyFrame::OnSelectFont) EVT_MENU(Font_Choose, MyFrame::OnSelectFont)
EVT_MENU(Font_EnumFamiliesForEncoding, MyFrame::OnEnumerateFamiliesForEncoding) EVT_MENU(Font_EnumFamiliesForEncoding, MyFrame::OnEnumerateFamiliesForEncoding)
@@ -265,12 +276,12 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
wxT("Toggle underlined state")); wxT("Toggle underlined state"));
menuFont->AppendSeparator(); menuFont->AppendSeparator();
menuFont->Append(Font_CheckNativeToFromString, menuFont->Append(Font_SetNativeDesc,
wxT("Set native font &description\tShift-Ctrl-D")); wxT("Set native font &description\tShift-Ctrl-D"));
menuFont->Append(Font_CheckNativeToFromUserString, menuFont->Append(Font_SetNativeUserDesc,
wxT("Set &user font description\tShift-Ctrl-U")); wxT("Set &user font description\tShift-Ctrl-U"));
menuFont->Append(Font_CheckFaceName, menuFont->Append(Font_SetFaceName, wxT("Check font face name"));
wxT("Check font face name")); menuFont->Append(Font_SetEncoding, wxT("Set font &encoding\tShift-Ctrl-E"));
wxMenu *menuSelect = new wxMenu; wxMenu *menuSelect = new wxMenu;
menuSelect->Append(Font_Choose, wxT("&Select font...\tCtrl-S"), menuSelect->Append(Font_Choose, wxT("&Select font...\tCtrl-S"),
@@ -411,8 +422,14 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
for ( n = 0; n < nFacenames; n++ ) for ( n = 0; n < nFacenames; n++ )
facenames[n] = fontEnumerator.GetFacenames().Item(n); facenames[n] = fontEnumerator.GetFacenames().Item(n);
n = wxGetSingleChoiceIndex(wxT("Choose a facename"), wxT("Font demo"), n = wxGetSingleChoiceIndex
nFacenames, facenames, this); (
wxT("Choose a facename"),
SAMPLE_TITLE,
nFacenames,
facenames,
this
);
if ( n != -1 ) if ( n != -1 )
facename = facenames[n]; facename = facenames[n];
@@ -440,46 +457,14 @@ bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event))
{ {
static wxFontEncoding encodings[] = wxFontEncoding enc = GetEncodingFromUser();
if ( enc != wxFONTENCODING_SYSTEM )
{ {
wxFONTENCODING_ISO8859_1, DoEnumerateFamilies(false, enc);
wxFONTENCODING_ISO8859_2,
wxFONTENCODING_ISO8859_5,
wxFONTENCODING_ISO8859_7,
wxFONTENCODING_ISO8859_15,
wxFONTENCODING_KOI8,
wxFONTENCODING_KOI8_U,
wxFONTENCODING_CP1250,
wxFONTENCODING_CP1251,
wxFONTENCODING_CP1252,
};
static const wxString encodingNames[] =
{
wxT("Western European (ISO-8859-1)"),
wxT("Central European (ISO-8859-2)"),
wxT("Cyrillic (ISO-8859-5)"),
wxT("Greek (ISO-8859-7)"),
wxT("Western European with Euro (ISO-8859-15)"),
wxT("KOI8-R"),
wxT("KOI8-U"),
wxT("Windows Central European (CP 1250)"),
wxT("Windows Cyrillic (CP 1251)"),
wxT("Windows Western European (CP 1252)"),
};
int n = wxGetSingleChoiceIndex(wxT("Choose an encoding"), wxT("Font demo"),
WXSIZEOF(encodingNames),
encodingNames,
this);
if ( n != -1 )
{
DoEnumerateFamilies(false, encodings[n]);
} }
} }
void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnSetNativeDesc(wxCommandEvent& WXUNUSED(event))
{ {
wxString fontInfo = wxGetTextFromUser wxString fontInfo = wxGetTextFromUser
( (
@@ -503,7 +488,7 @@ void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event))
DoChangeFont(font); DoChangeFont(font);
} }
void MyFrame::OnCheckFaceName(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnSetFaceName(wxCommandEvent& WXUNUSED(event))
{ {
wxString facename = GetCanvas()->GetTextFont().GetFaceName(); wxString facename = GetCanvas()->GetTextFont().GetFaceName();
wxString newFaceName = wxGetTextFromUser( wxString newFaceName = wxGetTextFromUser(
@@ -527,7 +512,7 @@ void MyFrame::OnCheckFaceName(wxCommandEvent& WXUNUSED(event))
} }
} }
void MyFrame::OnCheckNativeToFromUserString(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnSetNativeUserDesc(wxCommandEvent& WXUNUSED(event))
{ {
wxString fontdesc = GetCanvas()->GetTextFont().GetNativeFontInfoUserDesc(); wxString fontdesc = GetCanvas()->GetTextFont().GetNativeFontInfoUserDesc();
wxString fontUserInfo = wxGetTextFromUser( wxString fontUserInfo = wxGetTextFromUser(
@@ -550,6 +535,44 @@ void MyFrame::OnCheckNativeToFromUserString(wxCommandEvent& WXUNUSED(event))
} }
} }
void MyFrame::OnSetEncoding(wxCommandEvent& WXUNUSED(event))
{
wxFontEncoding enc = GetEncodingFromUser();
if ( enc == wxFONTENCODING_SYSTEM )
return;
wxFont font = m_canvas->GetTextFont();
font.SetEncoding(enc);
DoChangeFont(font);
}
wxFontEncoding MyFrame::GetEncodingFromUser()
{
wxArrayString names;
wxArrayInt encodings;
const size_t count = wxFontMapper::GetSupportedEncodingsCount();
names.reserve(count);
encodings.reserve(count);
for ( size_t n = 0; n < count; n++ )
{
wxFontEncoding enc = wxFontMapper::GetEncoding(n);
encodings.push_back(enc);
names.push_back(wxFontMapper::GetEncodingName(enc));
}
int i = wxGetSingleChoiceIndex
(
wxT("Choose the encoding"),
SAMPLE_TITLE,
names,
this
);
return i == -1 ? wxFONTENCODING_SYSTEM : (wxFontEncoding)encodings[i];
}
void MyFrame::DoResizeFont(int diff) void MyFrame::DoResizeFont(int diff)
{ {
wxFont font = m_canvas->GetTextFont(); wxFont font = m_canvas->GetTextFont();
@@ -586,13 +609,27 @@ void MyFrame::OnwxPointerFont(wxCommandEvent& event)
{ {
wxFont font; wxFont font;
switch (event.GetId()) switch ( event.GetId() )
{ {
case Font_wxNORMAL_FONT : font = wxFont(*wxNORMAL_FONT); break; case Font_wxNORMAL_FONT:
case Font_wxSMALL_FONT : font = wxFont(*wxSMALL_FONT); break; font = *wxNORMAL_FONT;
case Font_wxITALIC_FONT : font = wxFont(*wxITALIC_FONT); break; break;
case Font_wxSWISS_FONT : font = wxFont(*wxSWISS_FONT); break;
default : font = wxFont(*wxNORMAL_FONT); break; case Font_wxSMALL_FONT:
font = *wxSMALL_FONT;
break;
case Font_wxITALIC_FONT:
font = *wxITALIC_FONT;
break;
case Font_wxSWISS_FONT:
font = *wxSWISS_FONT;
break;
default:
wxFAIL_MSG( wxT("unknown standard font") );
return;
} }
DoChangeFont(font); DoChangeFont(font);