############################################################################# ## Name: lib/Wx/DemoModules/wxLocal.pm ## Purpose: wxPerl demo helper for Wx::Locale ## Author: Mark Dootson ## Modified by: ## Created: 2008-04-14 ## svn-ID: $Id: $ ## Copyright: (c) 2008 Mattia Barbon ## Licence: This program is free software; you can redistribute it and/or ## modify it under the same terms as Perl itself ############################################################################# package Wx::DemoModules::wxLocale; use strict; use Wx qw( :window :misc :id :sizer :locale :dialog :textctrl); use Wx::Event qw( EVT_MENU ); use base qw(Wx::Panel); use Wx::Locale( gettext => 't'); sub new { my( $class, $parent ) = @_; my $self = $class->SUPER::new( $parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN ); $self->{lblText} = Wx::StaticText->new( $self, wxID_ANY, 'Default', # write actual labels elsewhere wxDefaultPosition, wxDefaultSize); $self->{lblNumber} = Wx::StaticText->new( $self, wxID_ANY, 'Number', # write actual labels elsewhere wxDefaultPosition, wxDefaultSize); $self->{txtNumber} = Wx::TextCtrl->new($self, wxID_ANY, '1000000.00', # write actual labels elsewhere wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE); $self->{lblDate} = Wx::StaticText->new( $self, wxID_ANY, 'Time Now', # write actual labels elsewhere wxDefaultPosition, wxDefaultSize); $self->{txtDate} = Wx::TextCtrl->new($self, wxID_ANY, 'Date', # write actual labels elsewhere wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE); my $sizer = Wx::BoxSizer->new(wxVERTICAL); my $fsizer = Wx::FlexGridSizer->new(2,2,5,5); $fsizer->AddGrowableCol(1,1); $fsizer->Add($self->{lblNumber}, 0, wxALL|wxEXPAND, 5); $fsizer->Add($self->{txtNumber}, 1, wxALL|wxEXPAND, 5); $fsizer->Add($self->{lblDate}, 0, wxALL|wxEXPAND, 5); $fsizer->Add($self->{txtDate}, 1, wxALL|wxEXPAND, 5); $sizer->Add($self->{lblText}, 1, wxALL|wxEXPAND, 20); $sizer->Add($fsizer, 0, wxALL|wxEXPAND, 20); $self->SetSizer($sizer); $self->create_menu; # get the default language my $langid = Wx::Locale::GetSystemLanguage; $self->refresh_locale($langid); return $self; } sub refresh_locale { my($self, $langid) = @_; my $locale = Wx::Locale->new($langid); my $pathcheck = Wx::Demo->get_data_file( 'locale' ); $locale->AddCatalogLookupPathPrefix( $pathcheck ); my $langname = $locale->GetCanonicalName(); my $shortname = $langname ? substr($langname,0,2) : 'en'; # we are only providing default sublangs my $filename = qq($pathcheck/$shortname.mo); $locale->AddCatalog( $shortname ) if -f $filename; # all menu labels and currently loaded strings # menu items $self->{menu}->[1]->SetLabel( $self->{menuitems}->{'Locale/Select Language'}, t("Select Language\tCtrl+S") ); # menu labels my $top = Wx::GetTopLevelParent( $self ); my $menuindex = $top->GetMenuBar()->FindMenu($self->{menutitles}->{'Locale'}); my $menulabel = t("&Locale"); $top->GetMenuBar()->SetLabelTop( $menuindex, $menulabel ); $self->{menutitles}->{'Locale'} = $menulabel; # currently loaded labels $self->{lblText}->SetLabel(t("Translations from English provided by Google. Please use the menu to select a different locale.")); $self->{lblDate}->SetLabel(t("Time Now")); $self->{lblNumber}->SetLabel(t("Number")); # language dialog strings $self->{langdialogstrs} = { title => t('Wx::Locale Example'), msg => t('Select the required application language'), choices => [ t('English'), t('French'), t('Italian'), t('German'), t('Spanish'), ], data => [ wxLANGUAGE_ENGLISH, wxLANGUAGE_FRENCH, wxLANGUAGE_ITALIAN, wxLANGUAGE_GERMAN, wxLANGUAGE_SPANISH ], }; # the date my $date = Wx::DateTime::Now(); $self->{txtDate}->ChangeValue( $date->FormatDate() . ' ' . $date->FormatTime()); # the number $self->{txtNumber}->ChangeValue( sprintf("%.2f", 100.45) ); $self->Layout; } sub on_event_language { my( $self, $event) = @_; # single select dialog for en, fr, de, it, es my $langid = Wx::GetSingleChoiceData( $self->{langdialogstrs}->{msg}, $self->{langdialogstrs}->{title}, $self->{langdialogstrs}->{choices}, $self->{langdialogstrs}->{data}, $self ); $self->refresh_locale($langid) if $langid; } sub create_menu { my( $self ) = @_; my $top = Wx::GetTopLevelParent( $self ); my $menu = Wx::Menu->new; $self->{menuitems}->{'Locale/Select Language'} = $menu->Append( -1, 'Item1' )->GetId; EVT_MENU( $top, $self->{menuitems}->{'Locale/Select Language'}, sub { $self->on_event_language($_[1]); } ); my $menutitle = t("&Locale"); $self->{menu} = [ $menutitle, $menu ]; $self->{menutitles}->{'Locale'} = $menutitle; } sub menu { @{$_[0]->{menu}} } sub noop { # get some translations for wxWidgets internal strings t("ok"); t("cancel"); t("ctrl"); } sub add_to_tags { qw(misc) } sub title { 'wxLocale' } 1;