#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-2001 by MT Graphic & Design
// Version:					V1.10
//
//    Copyright (C) 1997-2001 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 <stdio.h>

#include "MT-Rechnung.h"
#include "MTLocale.h"
#include "MTList.h"
#include "MTScreen.h"
#include "MTWindow.h"
#include "MTAuswert.h"
#include "MTWinBuchen.h"
#include "Datenbank.h"
#include "Einstellungen.h"
#include "Inventur.h"
#include "KontenPos.h"
#include "Konten.h"
#include "BuchenPos.h"
#include "Buchen.h"
#include "Artikel.h"
#include "Adressen.h"
#include "MTEditHook.h"
#include "MTWinSuch.h"
#include "MTWinNavi.h"
#include "MTWinModSel.h"
#include "MTWinSchnellDruck.h"
#include "LocaleStrings.h"

extern Prefs				*MyPrefsPTR;
extern Konten				*MyKontenPTR;
extern KontenPos			*MyKontenPosPTR;
extern Buchen				*MyBuchenPTR;
extern BuchenPos			*MyBuchenPosPTR;
extern Mitarbeiter		*MyMitarbeiterPTR;
extern OpenLocaleClass	*MyLocalePTR;

extern FillAppStrings	*MyAppStringsPTR;

MTBuchen_Gadget::MTBuchen_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	BuchenList[0]		= new ListenClass(2);
	BuchenList[1]		= new ListenClass(44);
	BuchenList[2]		= new ListenClass(62);

	First_LV[0]			= 0;
	Select_LV[0]		= 0;
	First_LV[1]			= 0;
	Select_LV[1]		= 0;
	First_LV[2]			= 0;
	Select_LV[2]		= 0;

	BuchLV[0]			= NULL;
	BuchLV[1]			= BU_KG_LV;
	BuchLV[2]			= BU_KO_LV;

	DB_Pos				= 1;
	KGTyp					= 0;
	KGTypOld				= 0;

	GetIt					= ThisWindow->ThisScreen->FindWindow( NAVIGATOR_WINDOW );
	FindIt				= ThisWindow->ThisScreen->FindWindow( SUCHEN );
	SDWindow				= ThisWindow->ThisScreen->FindWindow( SCHNELLDRUCK_WIN );

	ThisWindow->ShortCuts[0]		= 0;
};

MTBuchen_Gadget::~MTBuchen_Gadget()
{
	delete BuchenList[2];
	delete BuchenList[1];
	delete BuchenList[0];
};

void MTBuchen_Gadget::FillWindow()
{
	BOOL GadLocked = TRUE;

	Gesperrt = FALSE;

	if( ThisWindow->BezWin )
	{
		ThisWindow->BezWin->BezWin = ThisWindow;
		if( GetIt )
		{
			for( i = 0; i < 10; ((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[i++] = TRUE )
			switch( ThisWindow->Karte )
			{
				case 0:
					if( DB_Pos > 1 )
					{
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] = ThisWindow->Fehler;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] = ThisWindow->Fehler;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] = ThisWindow->Fehler;
					}
					else
					{
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] = TRUE;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] = TRUE;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] = TRUE;
					}

					if( MyBuchenPTR->ElementeVorhanden() > 1 &&
						 MyBuchenPTR->ElementeVorhanden() > DB_Pos )
					{
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] = ThisWindow->Fehler;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] = ThisWindow->Fehler;
							((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] = ThisWindow->Fehler;
					}
					else
					{
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] = TRUE;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] = TRUE;
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] = TRUE;
					}

					if( MyBuchenPTR->ElementeVorhanden() < 2 ||
						 MyMitarbeiterPTR->UserDaten.Ber_Buchen == 0 )
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] = TRUE;
					else
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] = ThisWindow->Fehler;

					if( MyBuchenPTR->UnDoUsed > 0 )
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[9] = ThisWindow->Fehler;
					else
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[9] = TRUE;

					if( MyBuchenPTR->ReDoUsed > 0 )
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[10] = ThisWindow->Fehler;
					else
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[10] = TRUE;

					if( (MyBuchenPTR->ElementeVorhanden()				== 0) ||
						 (MyMitarbeiterPTR->UserDaten.Ber_Buchen		== 0) )
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11]	= TRUE;
					else
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11]	= ThisWindow->Fehler;
					break;

				case 1:
				case 2:
					if( (MyKontenPTR->ElementeVorhanden()				== 0) ||
						 (MyMitarbeiterPTR->UserDaten.Ber_Kontenplan	== 0) )
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11] = TRUE;
					else
						((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11] = ThisWindow->Fehler;
					break;
			}

			((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperren();
		}
	}

	SetGadgetAttrs( ThisWindow->gads[ADRESSEN_EBENEN], ThisWindow->Win, NULL, WGROUPA_ActivePage, ThisWindow->Karte, TAG_DONE );

	if( ThisWindow->Fehler )
		return;

	switch( ThisWindow->Karte )
	{
		case 0:
			FillEbene1();
		case 1:
			FillEbene2();
		case 2:
			FillEbene3();
	}
};

// Buchen
void MTBuchen_Gadget::FillEbene1()
{
	if( MyBuchenPTR->ElementeVorhanden() == 0 )
	{
		SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_KeineDaten], TAG_DONE );
		DB_Pos = 0;
		Gesperrt = TRUE;
		SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, (LONG)DB_Pos, GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		if( MyBuchenPTR->AktElementNr == 0 )
			MyBuchenPTR->GetFirstElement();
		else
			MyBuchenPTR->GetElementNr( DB_Pos );
		MyBuchenPTR->LesenGesamt();

		if( MyBuchenPTR->Daten->Status == 0 ||
			 MyBuchenPTR->Daten->Status == MyBuchenPTR->GetUser() )
		{
			switch( MyMitarbeiterPTR->UserDaten.Ber_Buchen )
			{
				case 0:
					Gesperrt = TRUE;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre2], TAG_DONE );
					break;
				case 1:
					Gesperrt = TRUE;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre1], TAG_DONE );
					break;
				default:
					Gesperrt = FALSE;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
					break;
			}
		}
		else
		{
			Gesperrt = TRUE;
			if( MyBuchenPTR->Daten->Status == 0xffff )
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Geloescht], TAG_DONE );
			else
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Parallelverarb], WARGSA_Arg0, (ULONG)MyBuchenPTR->Daten->Status, TAG_DONE );
		}

		DB_Pos = MyBuchenPTR->AktElementNr;
		SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, (LONG)DB_Pos, GA_DISABLED, FALSE, TAG_DONE );
	}

	SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "%lu", WARGSA_Arg0, (ULONG)MyBuchenPTR->ElementeVorhanden(), TAG_DONE );
};

// Kontengruppen
void MTBuchen_Gadget::FillEbene2()
{
	if( MyKontenPTR->Daten->Status == 0 ||
		 MyKontenPTR->Daten->Status == MyKontenPTR->GetUser() )
	{
		switch( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan )
		{
			case 0:
				Gesperrt = TRUE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre2], TAG_DONE );
				break;
			case 1:
				Gesperrt = TRUE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre1], TAG_DONE );
				break;
			default:
				Gesperrt = FALSE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
				break;
		}
	}
	else
	{
		Gesperrt = TRUE;
		if( MyBuchenPTR->Daten->Status == 0xffff )
			SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Geloescht], TAG_DONE );
		else
			SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Parallelverarb], WARGSA_Arg0, (ULONG)MyKontenPTR->Daten->Status, TAG_DONE );
	}

	SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 1, GA_DISABLED, FALSE, TAG_DONE );
	SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, "1", TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[BU_KG_LV],					ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE);

	if( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan == 0)
	{
		BuchenList[1]->EntferneAlle();
		SetGadgetAttrs( ThisWindow->gads[BU_KG_BEZ],				ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KG_KOMMENTAR],		ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KG_TYP],				ThisWindow->Win, NULL, WMXA_Active, 0, GA_DISABLED, Gesperrt, TAG_DONE );
	}
	else
	{
		if( BuchenList[1]->Anzahl == 0 )
		{
			for( i = 0; i < 20; i++ )
			{
				sprintf( Buffer, "%2lu. %s", ((KGTyp * 20) + i + 1), MyKontenPTR->Daten->KGBez[((KGTyp * 20) + i)] );
				BuchenList[1]->NeuerNode( Buffer );
			}
		}
		else if( KGTypOld != KGTyp )
		{
			KGTypOld = KGTyp;
			for( i = 0; i < 20; i++ )
			{
				sprintf( Buffer, "%2lu. %s", ((KGTyp * 20) + i + 1), MyKontenPTR->Daten->KGBez[((KGTyp * 20) + i)] );
				BuchenList[1]->ErsetzeNode( Buffer, i );
			}
		}
		SetGadgetAttrs( ThisWindow->gads[BU_KG_BEZ],				ThisWindow->Win, NULL, WSTRINGA_String, MyKontenPTR->Daten->KGBez[((KGTyp * 20) + Select_LV[1])], GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KG_KOMMENTAR],		ThisWindow->Win, NULL, WSTRINGA_String, MyKontenPTR->Daten->KGKommentar[((KGTyp * 20) + Select_LV[1])], GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KG_TYP],				ThisWindow->Win, NULL, WMXA_Active, KGTyp, GA_DISABLED, Gesperrt, TAG_DONE );
	}

	SetGadgetAttrs( ThisWindow->gads[BU_KG_LV],					ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[1]->MyList,
																												WLISTVIEWA_Top, First_LV[1],
																												WLISTVIEWA_Selected, Select_LV[1],
																												GA_DISABLED, Gesperrt,
																												TAG_DONE);
};

// Konten
void MTBuchen_Gadget::FillEbene3()
{
	if( MyKontenPTR->Daten->Status == 0 ||
		 MyKontenPTR->Daten->Status == MyKontenPTR->GetUser() )
	{
		switch( MyMitarbeiterPTR->UserDaten.Ber_Kontenplan )
		{
			case 0:
				Gesperrt = TRUE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre2], TAG_DONE );
				break;
			case 1:
				Gesperrt = TRUE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Sperre1], TAG_DONE );
				break;
			default:
				Gesperrt = FALSE;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
				break;
		}
	}
	else
	{
		Gesperrt = TRUE;
		if( MyBuchenPTR->Daten->Status == 0xffff )
			SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_Geloescht], TAG_DONE );
		else
			SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Parallelverarb], WARGSA_Arg0, (ULONG)MyKontenPTR->Daten->Status, TAG_DONE );
	}

	SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 1, GA_DISABLED, FALSE, TAG_DONE );
	SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, "1", TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[BU_KO_LV],					ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE);

	if( (MyMitarbeiterPTR->UserDaten.Ber_Kontenplan == 0) || (MyKontenPosPTR->AnzCyclePos == 0) )
	{
		BuchenList[2]->EntferneAlle();
		SetGadgetAttrs( ThisWindow->gads[BU_KO_NR],				ThisWindow->Win, NULL, WSTRINGA_String,	"",	GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_BEZ],				ThisWindow->Win, NULL, WSTRINGA_String,	"",	GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_TYP],				ThisWindow->Win, NULL, WMXA_Active,			0,		GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_MWST],			ThisWindow->Win, NULL, WCYCLEA_Labels,		"",	GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_GRUPPE],			ThisWindow->Win, NULL, WCYCLEA_Labels,		"",	GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		if( BuchenList[2]->Anzahl != MyKontenPosPTR->AnzCyclePos )
		{
			BuchenList[2]->EntferneAlle();
			for( MyKontenPosPTR->AktKonto = MyKontenPosPTR->FirstKonto; MyKontenPosPTR->AktKonto; MyKontenPosPTR->AktKonto = MyKontenPosPTR->AktKonto->NextKonto )
			{
				sprintf( Buffer, "%-10s %s",	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr,
														MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez );
				BuchenList[2]->NeuerNode( Buffer );
			}
		}

		MyKontenPosPTR->FindKonto( Select_LV[2] );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_NR],				ThisWindow->Win, NULL, WSTRINGA_String,	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr, GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_BEZ],				ThisWindow->Win, NULL, WSTRINGA_String,	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez, GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_TYP],				ThisWindow->Win, NULL, WMXA_Active,			MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoTyp, GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_MWST],			ThisWindow->Win, NULL, WCYCLEA_Labels,		MyPrefsPTR->CycleMWSt, WCYCLEA_Active, MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoMWSt, GA_DISABLED, Gesperrt, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[BU_KO_GRUPPE],			ThisWindow->Win, NULL, WCYCLEA_Labels,		MyKontenPTR->CycleKontenGruppen, WCYCLEA_Active, MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoGruppe, GA_DISABLED, Gesperrt, TAG_DONE );
	}

	SetGadgetAttrs( ThisWindow->gads[BU_KO_LV],					ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[2]->MyList,
																												WLISTVIEWA_Top, First_LV[2],
																												WLISTVIEWA_Selected, Select_LV[2],
																												GA_DISABLED, Gesperrt,
																												TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[BU_KO_NEU],					ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
	if( BuchenList[2]->Anzahl > 0 )
		SetGadgetAttrs( ThisWindow->gads[BU_KO_LOE],				ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
	else
		SetGadgetAttrs( ThisWindow->gads[BU_KO_LOE],				ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
};

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

	BOOL UpDate				= FALSE;
	BOOL UpDateBuch		= FALSE;
	BOOL UpDateKG			= FALSE;
	BOOL SperrePruefen	= FALSE;
	ULONG i;

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

	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 )
			{
				case BU_EBENE:
					GetAttr(WGROUPA_ActivePage, ThisWindow->gads[IconNummer], (ULONG *)&ThisWindow->Karte );
					FillWindow();
					break;


				case BU_KG_LV:
					if( ThisWindow->Fehler )
					{
						SetGadgetAttrs( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL,	WLISTVIEWA_Top, First_LV[1],
																													WLISTVIEWA_Selected, Select_LV[1],
																													TAG_DONE);
					}
					else
					{
						Select_LV[1] = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV[1] );
						FillEbene2();
					}
					break;
				case BU_KG_BEZ:
					UpDateKG = TextAuswert( MyKontenPTR->Daten->KGBez[((KGTyp * 20) + Select_LV[1])] );
					if( UpDateKG )
					{
						SetGadgetAttrs( ThisWindow->gads[BU_KG_LV], ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE);
						sprintf( Buffer, "%2lu. %s", (((KGTyp * 20) + Select_LV[1]) + 1), MyKontenPTR->Daten->KGBez[((KGTyp * 20) + Select_LV[1])] );
						BuchenList[1]->ErsetzeNode( Buffer, Select_LV[1] );
						SetGadgetAttrs( ThisWindow->gads[BU_KG_LV], ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[1]->MyList,
																													WLISTVIEWA_Top, First_LV[1],
																													WLISTVIEWA_Selected, Select_LV[1],
																													GA_DISABLED, Gesperrt,
																													TAG_DONE);
					}
					break;
				case BU_KG_KOMMENTAR:
					UpDateKG = TextAuswert( MyKontenPTR->Daten->KGKommentar[((KGTyp * 20) + Select_LV[1])] );
					break;
				case BU_KG_TYP:
					KGTypOld = KGTyp;
					GetAttr(WMXA_Active, ThisWindow->gads[IconNummer], (ULONG *)&i );
					KGTyp		= i;
					if( KGTyp != KGTypOld )
					{
						First_LV[1]		= 0;
						Select_LV[1]	= 0;
						FillEbene2();
					}
					break;


				case BU_KO_LV:
					if( ThisWindow->Fehler )
					{
						SetGadgetAttrs( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL,	WLISTVIEWA_Top, First_LV[2],
																													WLISTVIEWA_Selected, Select_LV[2],
																													TAG_DONE);
					}
					else
					{
						Select_LV[2] = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV[2] );
						FillEbene3();
					}
					break;
				case BU_KO_NEU:
					SetGadgetAttrs( ThisWindow->gads[BU_KO_LV], ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE);
					Select_LV[2]	= BuchenList[2]->Anzahl;
					BuchenList[2]->NeuerNode( "" );
					SetGadgetAttrs( ThisWindow->gads[BU_KO_LV], ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[2]->MyList,
																												WLISTVIEWA_Visible, Select_LV[2], 
																												WLISTVIEWA_Selected, Select_LV[2],
																												TAG_DONE);
					GetAttr(WLISTVIEWA_Top, ThisWindow->gads[BU_KO_LV], (ULONG *)&First_LV[2] );
					MyKontenPosPTR->NeuesKonto();
					FillEbene3();
					FehlerKennzeichen		|= 1;
					SperrePruefen			= TRUE;
					break;
				case BU_KO_LOE:
					MyKontenPosPTR->LoescheKonto( Select_LV[2] );
					if( Select_LV[2] > 0 )
						Select_LV[2]--;
					if( First_LV[2] < Select_LV[2] )
						First_LV[2] = Select_LV[2];
					FillEbene3();
					break;
				case BU_KO_NR:
					if( TextAuswert( MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr ) )
					{
						if( *MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr )
						{
							i = MyKontenPosPTR->AktKonto->DB_Position;
							MyKontenPosPTR->GetElementNr( i );
							strcpy( MyKontenPosPTR->Daten->KontoNr, MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr );
							MyKontenPosPTR->UpDateElement();
							SetGadgetAttrs( ThisWindow->gads[BU_KO_LV],ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE);
							sprintf( Buffer, "%-10s %s",	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr,
																	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez );
							BuchenList[2]->ErsetzeNode( Buffer, Select_LV[2] );
							if( (Select_LV[2] + 1) != MyKontenPosPTR->ToCycle( i ) )
							{
								Select_LV[2] = MyKontenPosPTR->ToCycle( i ) - 1;
								BuchenList[2]->NeuerNode("");
							}
							SetGadgetAttrs( ThisWindow->gads[BU_KO_LV], ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[2]->MyList,
																														WLISTVIEWA_Visible, Select_LV[2], 
																														WLISTVIEWA_Selected, Select_LV[2],
																														TAG_DONE);
							GetAttr(WLISTVIEWA_Top, ThisWindow->gads[BU_KO_LV], (ULONG *)&First_LV[2] );
							FehlerKennzeichen &= (0xffffffff - 1);
						}
						else
							FehlerKennzeichen	|= 1;

						SperrePruefen			= TRUE;
					}
					break;
				case BU_KO_BEZ:
					if( TextAuswert( MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez ) )
					{
						MyKontenPosPTR->GetElementNr( MyKontenPosPTR->AktKonto->DB_Position );
						strcpy( MyKontenPosPTR->Daten->KontoBez, MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez );
						MyKontenPosPTR->UpDateElement();
						sprintf( Buffer, "%-10s %s",	MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr,
																MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoBez );
						SetGadgetAttrs( ThisWindow->gads[BU_KO_LV], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
						BuchenList[2]->ErsetzeNode( Buffer, Select_LV[2] );
						SetGadgetAttrs( ThisWindow->gads[BU_KO_LV], ThisWindow->Win, NULL,	WLISTVIEWA_List, &BuchenList[2]->MyList,
																													WLISTVIEWA_Top, First_LV[2],
																													WLISTVIEWA_Selected, Select_LV[2],
																													TAG_DONE);
					}
					break;
				case BU_KO_TYP:
					GetAttr(WMXA_Active, ThisWindow->gads[IconNummer], (ULONG *)&i );
					if( i != MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoTyp )
					{
						MyKontenPosPTR->GetElementNr( MyKontenPosPTR->AktKonto->DB_Position );
						MyKontenPosPTR->Daten->KontoTyp		= i;
						MyKontenPosPTR->UpDateElement();
					}
					break;
				case BU_KO_MWST:
					if( CycleAuswert( &MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoMWSt ) )
					{
						MyKontenPosPTR->GetElementNr( MyKontenPosPTR->AktKonto->DB_Position );
						MyKontenPosPTR->Daten->KontoMWSt		= MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoMWSt;
						MyKontenPosPTR->UpDateElement();
					}
					break;
				case BU_KO_GRUPPE:
					if( CycleAuswert( &MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoGruppe ) )
					{
						MyKontenPosPTR->GetElementNr( MyKontenPosPTR->AktKonto->DB_Position );
						MyKontenPosPTR->Daten->KontoGruppe	= MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoGruppe;
						MyKontenPosPTR->UpDateElement();
						SetGadgetAttrs( ThisWindow->gads[BU_KO_TYP], ThisWindow->Win, NULL, WMXA_Active, MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoTyp, TAG_DONE );
					}
					break;
			}
			if( UpDateBuch )
			{
				MyBuchenPTR->UpDateElement();
				UpDateBuch	= FALSE;
			}
			if( UpDateKG )
			{
				MyKontenPTR->UpDateElement();
				UpDateKG		= FALSE;
			}
			break;
		// Window Aktiviert
		case IDCMP_ACTIVEWINDOW:
			SetGadgetAttrs( ThisWindow->gads[BU_KO_NR], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosZahl_edh, TAG_DONE );
			FillWindow();
			break;
		// Window schliessen
		case IDCMP_CLOSEWINDOW:
			if( ThisWindow->BezWin )
			{
				ThisWindow->BezWin->BezWin = NULL;
				if( GetIt )
				{
					((MTNav_Gadget *)(GetIt->FirstAuswert))->AlleSperren();
					SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 0, GA_DISABLED, TRUE, TAG_DONE );
					SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
				}
			}
			break;
		case IDCMP_RAWKEY:
			switch( imsg->Code )
			{
				case 76:
					if( !ThisWindow->Fehler && Select_LV[ThisWindow->Karte] > 0)
					{
						Select_LV[ThisWindow->Karte]--;
						if( First_LV[ThisWindow->Karte]	> Select_LV[ThisWindow->Karte] )
							First_LV[ThisWindow->Karte]	= Select_LV[ThisWindow->Karte];
						FillWindow();
					}
					break;
				case 77:
					if( !ThisWindow->Fehler && Select_LV[ThisWindow->Karte] < (BuchenList[ThisWindow->Karte]->Anzahl - 1) )
					{
						Select_LV[ThisWindow->Karte]++;
						SetGadgetAttrs( ThisWindow->gads[BuchLV[ThisWindow->Karte]], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV[ThisWindow->Karte], WLISTVIEWA_Selected, Select_LV[ThisWindow->Karte], TAG_DONE);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[BuchLV[ThisWindow->Karte]], (ULONG *)&First_LV[ThisWindow->Karte] );
						FillWindow();
					}
					break;
				case 0:
					if( GetAttr(WINTEGERA_Long, GetIt->gads[NAV_NUMMER], (ULONG *)&LongWert ) )
					{
						if( ThisWindow->Karte == 0 )
						{
							if( LongWert > MyBuchenPTR->ElementeVorhanden() )
								LongWert = MyBuchenPTR->ElementeVorhanden();
							if( LongWert < 1 )
								LongWert = 1;
							MyBuchenPTR->GetElementNr( (ULONG)LongWert );
						}
						UpDate = TRUE;
					}
					break;
				case 1:
					if( SDWindow )
					{
						if( ThisWindow->Karte > 0 )
							((MTSDruck_Gadget *)(SDWindow->FirstAuswert))->AktDB		= MyKontenPTR;
						else
							((MTSDruck_Gadget *)(SDWindow->FirstAuswert))->AktDB		= MyBuchenPTR;
						ThisWindow->ThisScreen->ExclusiveAuswertung( SDWindow );
					}
					break;
			}
			if( ( imsg->Qualifier & IEQUALIFIER_LSHIFT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_RSHIFT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_LALT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_RALT ))
			{
				if( imsg->Code > 79 &&
					 imsg->Code < 90 )
				{
					while( AktAuswert )
					{
						DONE = AktAuswert->MTAuswertung( imsg, DONE );
						AktAuswert = AktAuswert->NextAusw;
					}
				}
			}
			else
			{
				switch( imsg->Code )
				{
					case 80:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] )
						{
							MyBuchenPTR->GetFirstElement();
							UpDate = TRUE;
						}
						break;
					case 81:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] )
						{
							MyBuchenPTR->Get10PrevElement();
							UpDate = TRUE;
						}
						break;
					case 82:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] )
						{
							MyBuchenPTR->GetPrevElement();
							UpDate = TRUE;
						}
						break;
					case 83:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] )
						{
							MyBuchenPTR->GetNextElement();
							UpDate = TRUE;
						}
						break;
					case 84:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] )
						{
							MyBuchenPTR->Get10NextElement();
							UpDate = TRUE;
						}
						break;
					case 85:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] )
						{
							MyBuchenPTR->GetLastElement();
							UpDate = TRUE;
						}
						break;
					case 86:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] )
						{
							((MTSuch_Gadget *)FindIt->FirstAuswert)->AktDB			= MyBuchenPTR;
						
							ThisWindow->ThisScreen->ExclusiveAuswertung( FindIt );
							if( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos > 0)
							{
								MyBuchenPTR->GetElementNr( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos );
								UpDate = TRUE;
							}
						}
						break;
					case 87:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[7] )
						{
							MyBuchenPTR->NeuerDatensatz();
							UpDate = TRUE;
							if( ((MTMS_Gadget *)(ThisWindow->BezWin->FirstAuswert))->Sperrkennzeichen[1] )
							{
								((MTMS_Gadget *)(ThisWindow->BezWin->FirstAuswert))->Sperrkennzeichen[1] = FALSE;
								((MTMS_Gadget *)(ThisWindow->BezWin->FirstAuswert))->Sperren();
							}
						}
						break;
					case 89:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[8] )
						{
							MyBuchenPTR->LoeschenAkt();
							UpDate = TRUE;
						}
						break;
				}
			}
			break;
		case IDCMP_VANILLAKEY:
			if( !ThisWindow->Fehler )
			{
				switch( imsg->Code )
				{
					case (ULONG)'#':
						ActivateWindow( GetIt->Win );
						ActivateGadget( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL);
						break;
//					case (ULONG)'u':
//						MyBuchenPTR->UnDo();
//						UpDate = TRUE;
//						break;
//					case (ULONG)'U':
//						MyBuchenPTR->ReDo();
//						UpDate = TRUE;
//						break;
					case 27:
						DONE	= 1;
						if( GetIt && ThisWindow->BezWin )
						{
							ThisWindow->BezWin->BezWin = NULL;
							((MTNav_Gadget *)(GetIt->FirstAuswert))->AlleSperren();
							SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 0, GA_DISABLED, TRUE, TAG_DONE );
							SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
						}
						break;
				}
			}
			break;
	}

	if( FehlerKennzeichen || ThisWindow->Fehler )
	{
		if( FehlerKennzeichen > 0 ) 
		{
			ThisWindow->Fehler = TRUE;
			if( FehlerKennzeichen & 1 )
			{
				IconNummer	= BU_KO_NR;
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "%s", WARGSA_Arg0, AppStrings[MSG_FEHL_KontoNr], TAG_DONE );
				if( *MyKontenPosPTR->AktKonto->ListeKontenDaten.KontoNr > 0 )
					DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
				ThisWindow->Karte		= 2;
			}

			if( !ActivateGadget( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL) )
			{
				GetIt->MTOpenWindow();
				ThisWindow->MTOpenWindow();
				ActivateGadget( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL);
			}
			else
				FillWindow();
		}
		else
		{
			ThisWindow->Fehler = FALSE;
			FillWindow();
		}
	}

	if( UpDate )
	{
		DB_Pos			= MyBuchenPTR->AktElementNr;
		First_LV[0]		= 0;
		Select_LV[0]	= 0;
		First_LV[1]		= 0;
		Select_LV[1]	= 0;
		First_LV[2]		= 0;
		Select_LV[2]	= 0;
		FillWindow();
	}
	return DONE;
};

