//
// langdialog.cc
//
#include "wx/bitmap.h"
#include "wx/bmpbuttn.h"
#include "wx/button.h"
#include "wx/dialog.h"
#include "wx/gbsizer.h"
#include "wx/image.h"
#include "wx/sizer.h"
#include "wx/statline.h"
#include "wx/stattext.h"
#include "wx/string.h"
#include "wx/utils.h"
#include "lang.h"
#include "langdialog.h"
#include "flags/cat.xpm"
#include "flags/de.xpm"
#include "flags/es.xpm"
#include "flags/fr.xpm"
#include "flags/it.xpm"
#include "flags/ro.xpm"
#include "flags/se.xpm"
#include "flags/uk.xpm"
// List of all languages we (at least partially) support
static struct lang_data {
Language lang; // enum value from lang.h (e.g. German)
char **xpm; // XPM data (may be NULL)
} supported[] = {
{ Catalan, cat_xpm },
{ English, uk_xpm },
{ French, fr_xpm },
{ German, de_xpm },
{ Italian, it_xpm },
{ Romanian, ro_xpm },
{ Spanish, es_xpm },
{ SwedishChef, se_xpm }
};
#define NUM_SUPPORTED (sizeof (supported) / sizeof (supported[0]))
enum {
ID_LANG = 1000
};
BEGIN_EVENT_TABLE(LangDialog, wxDialog)
EVT_BUTTON(ID_LANG, LangDialog::OnButton)
END_EVENT_TABLE()
LangDialog::LangDialog ()
: wxDialog (0, wxID_ANY, wxString (wxT("Select Language")))
{
m_lang = English;
wxBeginBusyCursor();
wxGridBagSizer *mainsizer = new wxGridBagSizer (5, 5);
int num_rows, num_cols;
num_cols = 3; // TODO: make this adaptive
num_rows = (NUM_SUPPORTED + num_cols - 1) / num_cols;
int row = 0, col = 0;
for (unsigned int i = 0; i < NUM_SUPPORTED; ++i) {
Language lang = supported[i].lang;
//String lang_name = Translator::get_language_name (lang);
wxString lang_name = translator->lookup (lang, "English");
wxButton *btn;
#if 0
if (supported[i].xpm) {
wxBitmap *bmp = new wxBitmap (supported[i].xpm);
wxImage img = bmp->ConvertToImage ();
img.Rescale (img.GetWidth () * 2, img.GetHeight () * 2);
wxPoint pos (img.GetWidth () / 2, img.GetHeight () / 2);
wxSize sz (img.GetWidth () * 2, img.GetHeight () * 2);
img.Resize (sz, pos);
wxBitmap *f_bmp = new wxBitmap (img);
btn = new wxBitmapButton (this, ID_LANG + i, *f_bmp);
btn->SetToolTip (lang_name);
#else
if (supported[i].xpm) {
wxBitmap *bmp = new wxBitmap (supported[i].xpm);
btn = new wxBitmapButton (this, ID_LANG + i, *bmp);
btn->SetToolTip (lang_name);
#endif
} else {
btn = new wxButton (this, ID_LANG + i, lang_name);
}
if (supported[i].lang == m_lang)
btn->SetFocus ();
Connect (ID_LANG + i,
wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler (LangDialog::OnButton));
wxGBPosition pos (row, col);
mainsizer->Add (btn, pos);
++col;
if (col >= num_cols) {
++row;
col = 0;
}
}
SetSizer (mainsizer);
SetAutoLayout (true);
mainsizer->Layout ();
mainsizer->SetSizeHints (this);
mainsizer->Fit (this);
Centre (wxBOTH);
wxEndBusyCursor();
}
void LangDialog::OnButton (wxCommandEvent &event)
{
m_lang = supported[event.GetId () - ID_LANG].lang;
//std::cerr << "LangDialog: event ID = " << event.GetId () << ".\n";
//std::cerr << "LangDialog: m_lang = " << m_lang << ".\n";
EndModal (wxID_OK);
}
syntax highlighted by Code2HTML, v. 0.9.1