/* * Datei: MyWindow.cpp Projekt: LocaleKit3 * Autor: Markus Maier Datum: 06.06.2005 * * Erstellt fuer zemag #3 * 2005, Urheberrecht beim Autor */
// Zeta Includes
#include
<app/Application.h>// Globale Variable "be_app"
#include
<app/Messenger.h>#include
<locale/Locale.h>// Projekt Includes
#include
"MyView.h"
#include
"MyWindow.h"
//-----------------------------------------------------------------------------
const
char
* WINDOW_TITLE ="Locale-Kit Example 3"
;// Implementation der Klasse MyWindow
//-----------------------------------------------------------------------------
MyWindow::MyWindow() : BWindow( BRect(100
,100
,300
,300
), _T( WINDOW_TITLE ), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE ), fView( NULL ) {// View erzeugen
fView =new
MyView( Bounds() ); AddChild( fView );// View in Fenster einhaengen
this->refreshLayout();// Window-Layout aktualisieren
}//-----------------------------------------------------------------------------
MyWindow::~MyWindow() {// Hier ist nichts zu tun
}//-----------------------------------------------------------------------------
bool
MyWindow::QuitRequested() {// Wenn der Fenster Schliessbutton betaetigt wird, Anwendung beenden.
BMessenger( be_app ).SendMessage( B_QUIT_REQUESTED );return
true
; }//-----------------------------------------------------------------------------
void
MyWindow::MessageReceived( BMessage* message ) {// Abfangen der Button Messages
switch
( message->what ) {// Datei Menu Messages
case
MSG_BUTTON_HELLO:// "Hello"-Button Aktion ausloesen
break
;case
MSG_BUTTON_HAY:// "Hay"-Button Aktion ausloesen
break
;case
MSG_BUTTON_OK:// "Ok"-Button Aktion ausloesen
break
;// Das Fenster wird benachrichtigt, dass eine Aenderung
// der Sprache statt gefunden hat!
// Jetzt muss bei allen GUI-Elementen der sichtbare Text
// geaendert werden.
case
B_LANGUAGE_CHANGED:// Den Titel des Fensterns neu setzen
SetTitle( _T( WINDOW_TITLE ) );// Der einfache Weg.
// Den View neu erzeugen. Dadurch entsteht
// beim View kein weiterer Implementierungsaufwand!
RemoveChild( fView );delete
fView; fView = NULL; fView =new
MyView( Bounds() ); AddChild( fView ); this->refreshLayout();// Window-Layout aktualisieren
/* // Der bessere Weg // Die Texte des Views neu setzen! // Der View wurde mit einer eigenen Refresh-Methode // ausgestattet. // Hier kann Aufwand entstehen: // Wenn die neuen Texte laenger als die alten sind muss, // das Layout angepasst werden. Es entsteht // Implementierungsaufwand fView->refreshLanguage(); this->refreshLayout(); // Window-Layout aktualisieren break; */
default
:// Restliche Messages an Window weiterleiten
BWindow::MessageReceived( message );break
; } }//-----------------------------------------------------------------------------
void
MyWindow::refreshLayout(void
) {// Windowgroesse an die Viewgroesse anpassen
BRect rect = fView->Frame(); this->ResizeTo( rect.Width(), rect.Height() ); fView->refreshLayout(); }