#pragma +
// Name:						Window-Klassen
// Programmtyp:			Hilfsroutine für
//								Fakturierprogramm
//	Programmiersprache:	C++ (AT&T Standard 3.0)
// Computersystem:		Commodore AMIGA
// Betriebssystem:		AMIGA OS3.0 oder höher
// Autor:					Manfred Tremmel
// © Copyright:			1997-2000 by MT Graphic & Design
// Version:					V1.08
//
//    Copyright (C) 1997-2000 Manfred Tremmel
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA

// Includes:
#include <new.h>
#include <intuition/intuition.h>
#include <iostream.h>
#include <dos/dostags.h>

#include "MT-Rechnung.h"
#include "MTList.h"
#include "MTLocale.h"
#include "MTToolType.h"
#include "Datenbank.h"
#include "Artikel.h"
#include "RechnungArtikel.h"
#include "Rechnung.h"
#include "Adressen.h"
#include "Laender.h"
#include "MTScreen.h"
#include "MTWindow.h"
#include "MTAuswert.h"
#include "MTWinModSel.h"
#include "MTWinLogin.h"
#include "MTVersion.h"
#include "MTWinRech.h"
#include "MTWinARech.h"
#include "MTWinERech.h"
#include "LocaleStrings.h"
#include "MTEditHook.h"

// Surface-Pointer
extern APTR	surface;

extern Laender				*MyLaenderPTR;
extern Mitarbeiter		*MyMitarbeiterPTR;
extern Niederlassung		*MyNiederlassungPTR;

extern MTARexx				MyARexx;

extern MTToolType			*MyToolTypesPTR;


MTMS_Menu::MTMS_Menu(MTWindow *Win) : MTAuswert( Win )
{};

// Menu-Auswertung:
WORD MTMS_Menu::MTAuswertung( struct IntuiMessage* imsg, WORD DONE )
{
	MTWindow		*HilfeWin;
	MTAuswert	*HilfeAus;

	// Nachschaun, was man damit anfangen kann
	switch( imsg->Class )
	{
		// Menu angewählt
		case IDCMP_MENUPICK:
			if( ThisWindow->Fehler )
				DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
			else
			{
				switch( imsg->Code )
				{
					case INFO1:
						if( (HilfeWin	= ThisWindow->ThisScreen->FindWindow( INFO )) != 0)
							HilfeWin->MTOpenWindow();
						break;
					case USER1:
						if( MyMitarbeiterPTR->ElementeVorhanden() > 0 )
						{
							HilfeWin	= ThisWindow->ThisScreen->FindWindow( LOGIN );
							HilfeAus = HilfeWin->FirstAuswert;
							ThisWindow->ThisScreen->ExclusiveAuswertung( HilfeWin );
							if( ((MTLogin_Gadget *)HilfeAus)->Gefunden == FALSE )
								DONE = 2;
						}
						break;
					case ENDE1:
						DONE = 2;
						break;
					case B_ERSTELLEN1:
						if( (HilfeWin = ThisWindow->ThisScreen->FindWindow( ERECHNUNG )) != 0 )
							((MTERech_Gadget *)HilfeWin->FirstAuswert)->Bestellautomatik( 1 );
						break;
					case B_DRUCKEN1:
						if( (HilfeWin = ThisWindow->ThisScreen->FindWindow( ERECHNUNG )) != 0 )
							((MTERech_Gadget *)HilfeWin->FirstAuswert)->Bestellautomatik( 2 );
						break;
					case M_HINWEIS1:
						if( (HilfeWin = ThisWindow->ThisScreen->FindWindow( ARECHNUNG )) != 0 )
							((MTARech_Gadget *)HilfeWin->FirstAuswert)->Mahnautomatik( 1 );
						break;
					case M_DRUCKEN1:
						if( (HilfeWin = ThisWindow->ThisScreen->FindWindow( ARECHNUNG )) != 0 )
							((MTARech_Gadget *)HilfeWin->FirstAuswert)->Mahnautomatik( 2 );
						break;
					case AREXX_STARTEN:
						struct FileRequester	*fr;
						if ((fr = ( struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
																		ASLFR_Screen,				ThisWindow->ThisScreen->ThisScreen,
																		ASLFR_TitleText,			"ARexx-Script",
																		ASLFR_InitialPattern,	"#?.rexx",
																		ASLFR_InitialDrawer,		MyToolTypesPTR->MTTTVorgaben[15].Wert,
																		ASLFR_InitialHeight,		ThisWindow->ThisScreen->ThisScreen->Height - (ThisWindow->ThisScreen->ThisScreen->BarHeight + 1),
																		ASLFR_InitialWidth,		320,
																		ASLFR_InitialLeftEdge,	ThisWindow->ThisScreen->ThisScreen->LeftEdge,
																		ASLFR_InitialTopEdge,	(ThisWindow->ThisScreen->ThisScreen->BarHeight + 1),
																		TAG_DONE)) != 0)
						{
							if(AslRequest(fr,NULL))
							{
								MyARexx.StartRexxScript( fr->fr_Drawer, fr->fr_File );
							}
							else
							{
								DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
							}
							FreeAslRequest(fr);
						}
						break;
				}
			}
			break;
	}
	return DONE;
};


MTMS_Gadget::MTMS_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	MSGadgets[0]	= LAENDEREINST;
	MSGadgets[1]	= ADRESSVERW;
	MSGadgets[2]	= ARTIKELVERW;
	MSGadgets[3]	= VERSANDVERW;
	MSGadgets[4]	= AUSRECHVERW;
	MSGadgets[5]	= EINRECHVERW;
	MSGadgets[6]	= LAGERVERW;
	MSGadgets[7]	= BUCHUNG;
	MSGadgets[8]	= KASSENVERW;
	MSGadgets[9]	= DRUCKEN;
	MSGadgets[10]	= PREFS;

	FillWindow();
};

// Gadget-Auswertung:
void MTMS_Gadget::FillWindow()
{
	Sperrkennzeichen[0]			= FALSE;
	Sperrkennzeichen[10]			= FALSE;

	if( MyLaenderPTR->ElementeVorhanden() == 0 )
	{	
		Sperrkennzeichen[1]		= TRUE;
		Sperrkennzeichen[2]		= TRUE;
	}
	else
	{	
		Sperrkennzeichen[1]		= FALSE;

		if( (MyMitarbeiterPTR->ElementeVorhanden() + MyNiederlassungPTR->ElementeVorhanden()) == 0 )
			Sperrkennzeichen[2]	= TRUE;
		else
			Sperrkennzeichen[2]	= FALSE;
	}
	Sperrkennzeichen[3]			= Sperrkennzeichen[2];
	Sperrkennzeichen[4]			= Sperrkennzeichen[2];
	Sperrkennzeichen[5]			= Sperrkennzeichen[2];
	Sperrkennzeichen[6]			= Sperrkennzeichen[2];
	Sperrkennzeichen[7]			= Sperrkennzeichen[2];
	Sperrkennzeichen[8]			= Sperrkennzeichen[2];
	Sperrkennzeichen[9]			= Sperrkennzeichen[2];

	if( ThisWindow->WinHandle )
		Sperren();
}

// Gadget-Auswertung:
WORD MTMS_Gadget::MTAuswertung( struct IntuiMessage* imsg, WORD DONE )
{
	class MTAuswert *AktAuswert = NULL;
	ULONG WinNr = 0;

	if( ThisWindow->BezWin )
		AktAuswert = ThisWindow->BezWin->FirstAuswert;

	// Nachschaun, was man damit anfangen kann
	switch( imsg->Class )
	{
		// ein Button wurde betätigt (genaugenommen losgelassen)
		case IDCMP_IDCMPUPDATE:
			if( imsg->Code	== 0xffff )
				IconNummer = imsg->Qualifier;
			else
				IconNummer = GetTagData(GA_ID,0,(struct TagItem *)imsg->IAddress);
			switch( IconNummer )
			{
				// Ländereinstellungen ausgewählt
				case LAENDEREINST:
					WinNr = LAENDER;
					break;
				// Adressverwaltung ausgewählt
				case ADRESSVERW:
					WinNr = ADRESSEN;
					break;
				// Artikelverwaltung ausgewählt
				case ARTIKELVERW:
					WinNr = ARTIKEL;
					break;
				// Versandverwaltung ausgewählt
				case VERSANDVERW:
					WinNr = VERSAND;
					break;
				// Ausgangsrechnungsverwaltung ausgewählt
				case AUSRECHVERW:
					WinNr = ARECHNUNG;
					break;
				// Eingangsrechnungsverwaltung ausgewählt
				case EINRECHVERW:
					WinNr = ERECHNUNG;
					break;
				// Lagerverwaltung ausgewählt
				case LAGERVERW:
					WinNr = LAGER;
					break;
				// Buchungswindow ausgewählt
				case BUCHUNG:
					WinNr = BUCH_WIN;
					break;
				// Kassenverwaltung ausgewählt
				case KASSENVERW:
					WinNr = KASSEN_WIN;
					break;
				// Druckfunktion ausgewählt
				case DRUCKEN:
					WinNr = DRUCKEN_WIN;
					break;
				// Preferences ausgewählt
				case PREFS:
					WinNr = EINSTELL;
					break;
				default:
					break;
			}
			break;
		// Tastatureingabe (nicht ASCII)
		case IDCMP_RAWKEY:
			switch( imsg->Qualifier )
			{
				case IEQUALIFIER_RELATIVEMOUSE | IEQUALIFIER_LSHIFT:
				case IEQUALIFIER_RELATIVEMOUSE | IEQUALIFIER_RSHIFT:
					switch( imsg->Code )
					{
						// Ländereinstellungen ausgewählt
						case 80:
							if( !Sperrkennzeichen[0] )
								WinNr = LAENDER;
							break;
						// Adressverwaltung ausgewählt
						case 81:
							if( !Sperrkennzeichen[1] )
								WinNr = ADRESSEN;
							break;
						// Artikelverwaltung ausgewählt
						case 82:
							if( !Sperrkennzeichen[2] )
								WinNr = ARTIKEL;
							break;
						// Versandverwaltung ausgewählt
						case 83:
							if( !Sperrkennzeichen[3] )
								WinNr = VERSAND;
							break;
						// Ausgangsrechnungsverwaltung ausgewählt
						case 84:
							if( !Sperrkennzeichen[4] )
								WinNr = ARECHNUNG;
							break;
						// Eingangsrechnungsverwaltung ausgewählt
						case 85:
							if( !Sperrkennzeichen[5] )
								WinNr = ERECHNUNG;
							break;
						// Lagerverwaltung ausgewählt
						case 86:
							if( !Sperrkennzeichen[6] )
								WinNr = LAGER;
							break;
						// Buchungswindow ausgewählt
						case 87:
							if( !Sperrkennzeichen[7] )
								WinNr = BUCH_WIN;
							break;
						// Kassenverwaltung ausgewählt
						case 88:
							if( !Sperrkennzeichen[8] )
								WinNr = KASSEN_WIN;
							break;
						// Druckfunktion ausgewählt
						case 89:
							if( !Sperrkennzeichen[9] )
								WinNr = DRUCKEN_WIN;
							break;
					}
					break;
				case IEQUALIFIER_RELATIVEMOUSE | IEQUALIFIER_LALT:
				case IEQUALIFIER_RELATIVEMOUSE | IEQUALIFIER_RALT:
					switch( imsg->Code )
					{
						// Preferences ausgewählt
						case 89:
							if( !Sperrkennzeichen[10] )
								WinNr = EINSTELL;
							break;
					}
					break;
				default:
					if((imsg->Code > 79 &&
						 imsg->Code < 91) ||
						 imsg->Code < 2)
					{
						while( AktAuswert )
						{
							DONE = AktAuswert->MTAuswertung( imsg, DONE );
							AktAuswert = AktAuswert->NextAusw;
						}
						if( imsg->Code != 1 )
							ThisWindow->BezWin->MTOpenWindow();
					}
					break;
			}
			break;
		case IDCMP_VANILLAKEY:
			if( (imsg->Code == (ULONG)'u') |
				 (imsg->Code == (ULONG)'U') )
			{
				while( AktAuswert )
				{
					DONE = AktAuswert->MTAuswertung( imsg, DONE );
					AktAuswert = AktAuswert->NextAusw;
				}
			}
			break;
		// Window Aktiviert
		case IDCMP_ACTIVEWINDOW:
			FillWindow();
			break;
	}
	if( WinNr )
	{
		MTWindow *GetIt;
		if( (GetIt = ThisWindow->ThisScreen->FindWindow( WinNr )) != 0 )
		{
			ThisWindow->BezWin = GetIt;
			WZ_LockWindow( ThisWindow->WinHandle );
			GetIt->MTOpenWindow();
			WZ_UnlockWindow( ThisWindow->WinHandle );
		}
	}
	return DONE;
};


// Sperrfunktion:
void MTMS_Gadget::Sperren( )
{
	for( i = 0; i < 11; i++ )
	{
		SetGadgetAttrs( ThisWindow->gads[(MSGadgets[i])], ThisWindow->Win, NULL, GA_DISABLED, Sperrkennzeichen[i], TAG_DONE );
	}
};

