#include <wx/fontdlg.h>
#include <wx/fontenum.h>
#include <wx/fontmap.h>
+#include <wx/encconv.h>
#include <wx/textfile.h>
// ----------------------------------------------------------------------------
SetStatusText("Welcome to wxWindows font demo!");
}
+// --------------------------------------------------------
-// event handlers
-void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event))
+class MyEncodingEnumerator : public wxFontEnumerator
{
- class MyEncodingEnumerator : public wxFontEnumerator
- {
- public:
- MyEncodingEnumerator() { m_n = 0; }
+public:
+ MyEncodingEnumerator()
+ { m_n = 0; }
- const wxString& GetText() const { return m_text; }
+ const wxString& GetText() const
+ { return m_text; }
- protected:
- virtual bool OnFontEncoding(const wxString& facename,
- const wxString& encoding)
- {
- wxString text;
- text.Printf("Encoding %d: %s (available in facename '%s')\n",
- ++m_n, encoding.c_str(), facename.c_str());
- m_text += text;
-
- return TRUE;
- }
+protected:
+ virtual bool OnFontEncoding(const wxString& facename,
+ const wxString& encoding)
+ {
+ wxString text;
+ text.Printf("Encoding %d: %s (available in facename '%s')\n",
+ ++m_n, encoding.c_str(), facename.c_str());
+ m_text += text;
+ return TRUE;
+ }
- private:
- size_t m_n;
+private:
+ size_t m_n;
+ wxString m_text;
+};
- wxString m_text;
- } fontEnumerator;
+void MyFrame::OnEnumerateEncodings(wxCommandEvent& WXUNUSED(event))
+{
+ MyEncodingEnumerator fontEnumerator;
fontEnumerator.EnumerateEncodings();
fontEnumerator.GetText().c_str());
}
-bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
- wxFontEncoding encoding,
- bool silent)
-{
- class MyFontEnumerator : public wxFontEnumerator
- {
- public:
- bool GotAny() const { return !m_facenames.IsEmpty(); }
+// -------------------------------------------------------------
- const wxArrayString& GetFacenames() const { return m_facenames; }
+class MyFontEnumerator : public wxFontEnumerator
+{
+public:
+ bool GotAny() const
+ { return !m_facenames.IsEmpty(); }
- protected:
- virtual bool OnFacename(const wxString& facename)
- {
- m_facenames.Add(facename);
+ const wxArrayString& GetFacenames() const
+ { return m_facenames; }
- return TRUE;
- }
+protected:
+ virtual bool OnFacename(const wxString& facename)
+ {
+ m_facenames.Add(facename);
+ return TRUE;
+ }
private:
wxArrayString m_facenames;
- } fontEnumerator;
+} fontEnumerator;
+
+bool MyFrame::DoEnumerateFamilies(bool fixedWidthOnly,
+ wxFontEncoding encoding,
+ bool silent)
+{
+ MyFontEnumerator fontEnumerator;
fontEnumerator.EnumerateFacenames(encoding, fixedWidthOnly);
return;
}
+ m_textctrl->LoadFile(filename);
+
+ if (!wxTheFontMapper->IsEncodingAvailable(fontenc))
+ {
+ // try to find some similar encoding:
+ wxFontEncoding encAlt;
+ if ( wxTheFontMapper->GetAltForEncoding(fontenc, &encAlt) )
+ {
+ wxEncodingConverter conv;
+
+ if (conv.Init(fontenc, encAlt))
+ {
+ fontenc = encAlt;
+ m_textctrl -> SetValue(conv.Convert(m_textctrl -> GetValue()));
+ }
+ else
+ {
+ wxLogWarning("Cannot convert from '%s' to '%s'.",
+ wxFontMapper::GetEncodingDescription(fontenc).c_str(),
+ wxFontMapper::GetEncodingDescription(encAlt).c_str());
+ }
+ }
+ else
+ wxLogWarning("No fonts for encoding '%s' on this system.",
+ wxFontMapper::GetEncodingDescription(fontenc).c_str());
+ }
+
// and now create the correct font
if ( !DoEnumerateFamilies(FALSE, fontenc, TRUE /* silent */) )
{
wxFontMapper::GetEncodingDescription(fontenc).c_str());
}
}
-
- m_textctrl->LoadFile(filename);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))