/*
 * 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();
}