#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 <stdio.h>
#include <stdlib.h>
#include <fstream.h>

#include "MT-Rechnung.h"
#include "MTToolType.h"
#include "MTLocale.h"
#include "MTScreen.h"
#include "MTWindow.h"
#include "MTAuswert.h"
#include "MTList.h"
#include "Datenbank.h"
#include "Adressen.h"
#include "Artikel.h"
#include "Laender.h"
#include "Versand.h"
#include "RechnungArtikel.h"
#include "Rechnung.h"
#include "ARechnung.h"
#include "ERechnung.h"
#include "Inventur.h"
#include "Konten.h"
#include "KontenPos.h"
#include "Buchen.h"
#include "BuchenPos.h"
#include "Einstellungen.h"
#include "MTWinDruck.h"
#include "MTWinSuch.h"
#include "MTWinNavi.h"
#include "LocaleStrings.h"
#include "Allgemein.h"
#include "MTEditHook.h"

extern Adress				*MyAdressPTR;
extern Kunden				*MyKundenPTR;
extern Mitarbeiter		*MyMitarbeiterPTR;
extern Niederlassung		*MyNiederlassungPTR;
extern Lieferanten		*MyLieferantPTR;
extern Artikel				*MyArtikelPTR;
extern ARechnung			*MyARechnungPTR;
extern ERechnung			*MyERechnungPTR;
extern Laender				*MyLaenderPTR;
extern Prefs				*MyPrefsPTR;
extern OpenLocaleClass	*MyLocalePTR;
extern Inventur			*MyInventurPTR;
extern Konten				*MyKontenPTR;
extern Buchen				*MyBuchenPTR;
extern MTToolType			*MyToolTypesPTR;

extern Allgemein			MyAllgemein;

extern APTR					surface;


MTDru_Gadget::MTDru_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	DruList[0]	= DRU_ADRESSEN_LV;
	DruList[1]	= DRU_KUNDEN_LV;
	DruList[2]	= DRU_MITARBEITER_LV;
	DruList[3]	= DRU_NIEDERLASSUNG_LV;
	DruList[4]	= DRU_LIEFERANT_LV;
	DruList[5]	= DRU_ARTIKEL_LV;
	DruList[6]	= DRU_ARECHNUNG_LV;
	DruList[7]	= DRU_ERECHNUNG_LV;
	DruList[8]	= DRU_INVENTUR_LV;
	DruList[9]	= DRU_KONTEN_LV;
	DruList[10]	= DRU_BUCHEN_LV;

	MerkDB[0]	= MyAdressPTR;
	MerkDB[1]	= MyKundenPTR;
	MerkDB[2]	= MyMitarbeiterPTR;
	MerkDB[3]	= MyNiederlassungPTR;
	MerkDB[4]	= MyLieferantPTR;
	MerkDB[5]	= MyArtikelPTR;
	MerkDB[6]	= MyARechnungPTR;
	MerkDB[7]	= MyERechnungPTR;
	MerkDB[8]	= MyInventurPTR;
	MerkDB[9]	= MyKontenPTR;
	MerkDB[10]	= MyBuchenPTR;

	Berecht[0]	= &MyMitarbeiterPTR->UserDaten.Ber_Adressen;
	Berecht[1]	= &MyMitarbeiterPTR->UserDaten.Ber_Kunden;
	Berecht[2]	= &MyMitarbeiterPTR->UserDaten.Ber_Mitarbeiter;
	Berecht[3]	= &MyMitarbeiterPTR->UserDaten.Ber_Niederlassung;
	Berecht[4]	= &MyMitarbeiterPTR->UserDaten.Ber_Lieferanten;
	Berecht[5]	= &MyMitarbeiterPTR->UserDaten.Ber_Artikel;
	Berecht[6]	= &MyMitarbeiterPTR->UserDaten.Ber_ARechnung;
	Berecht[7]	= &MyMitarbeiterPTR->UserDaten.Ber_ERechnung;
	Berecht[8]	= &MyMitarbeiterPTR->UserDaten.Ber_Inventur;
	Berecht[9]	= &MyMitarbeiterPTR->UserDaten.Ber_Kontenplan;
	Berecht[10]	= &MyMitarbeiterPTR->UserDaten.Ber_Buchen;

	SuchTextFeld[0]	= DRU_SUCH_TEXT_1;
	SuchTextFeld[1]	= DRU_SUCH_TEXT_2;
	SuchTextFeld[2]	= DRU_SUCH_TEXT_3;

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

	InitFelder();

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


void MTDru_Gadget::InitFelder()
{
	if( ThisWindow->BezWin )
		ThisWindow->BezWin->BezWin = NULL;

	for( i = 0; i < 11; i++ )
	{
		First_LV[i]		= 0;
		Select_LV[i]	= 0;
	}

	Bezug					= 0;
	ThisWindow->Karte	= 0;

	StartDaten(0);

	Drucknummer_von	= 1;
	Drucknummer_bis	= 1;
};


void MTDru_Gadget::StartDaten( UBYTE von )
{
	for( i = 0; i < 3; i++ )
	{
		SuchFeld[i]		= MyPrefsPTR->Daten->SuchFeld[(MerkDB[Bezug]->Such_DB_Nr)][von][i];
		SuchWert[i]		= MyPrefsPTR->Daten->SuchWert[(MerkDB[Bezug]->Such_DB_Nr)][von][i];
		VGLFeld[i]		= MyPrefsPTR->Daten->VGLFeld[(MerkDB[Bezug]->Such_DB_Nr)][von][i];
		strcpy(SuchText[i], MyPrefsPTR->Daten->SuchText[(MerkDB[Bezug]->Such_DB_Nr)][von][i]);
	}
	Verknuepf[0]		= MyPrefsPTR->Daten->Verknuepf[(MerkDB[Bezug]->Such_DB_Nr)][von][0];
	Verknuepf[1]		= MyPrefsPTR->Daten->Verknuepf[(MerkDB[Bezug]->Such_DB_Nr)][von][1];
};

void MTDru_Gadget::FillWindow( )
{
	FillSuchen();

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

	for( i = 0; i < 11; i++ )
	{
		SetGadgetAttrs( ThisWindow->gads[(DruList[i])], ThisWindow->Win, NULL,	WLISTVIEWA_List, &MyPrefsPTR->DruDockList[i]->MyList,
																										WLISTVIEWA_Top, First_LV[i],
																										WLISTVIEWA_Selected, Select_LV[i],
																										TAG_DONE);
	}

	if( MyPrefsPTR->DruDockList[Bezug]->Anzahl	== 0	||
		 *Berecht[Bezug]									== 0	||
		 MerkDB[Bezug]->ElementeVorhanden()			== 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[DRU_DRUCK], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_VORSCHAU], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SAVE], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		SetGadgetAttrs( ThisWindow->gads[DRU_DRUCK], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_VORSCHAU], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SAVE], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
	}
};

// Suchvorgaben füllen
void MTDru_Gadget::FillSuchen()
{
	if( ThisWindow->Karte == 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[DRU_NR1], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_NR2], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
	}
	else
	{
		for( i = 0; i < 3; i++ )
		{
			switch( MerkDB[Bezug]->Such_DB_Typ[(SuchFeld[i])] )
			{
				case 0:
				case 1:
				case 2:
				case 3:
					if( MerkDB[Bezug]->Such_DB_Feld[(SuchFeld[i])] )
					{
						SuchEbene[i]	= 1;
						SetGadgetAttrs( ThisWindow->gads[(SuchTextFeld[i])], ThisWindow->Win, NULL, WSTRINGA_Hook, &Dummy_edh, TAG_DONE );
					}
					else
						SuchEbene[i]	= 0;
					break;
				case 4:
				case 5:
				case 6:
				case 7:
				case 8:
				case 9:
				case 10:
					if( MerkDB[Bezug]->Such_DB_CS[(SuchFeld[i])] )
						SuchEbene[i]	= 2;
					else
					{
						SuchEbene[i]	= 1;
						SetGadgetAttrs( ThisWindow->gads[(SuchTextFeld[i])], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosNegZahl_edh, TAG_DONE );
					}
					break;
				default:
					SuchEbene[i]		= 1;
					SetGadgetAttrs( ThisWindow->gads[(SuchTextFeld[i])], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosNegZahlNK_edh, TAG_DONE );
					break;
			}
		}

		if( ThisWindow->BezWin )
		{
			ThisWindow->BezWin->BezWin = ThisWindow;
			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 );
			}
		}

		switch( SuchEbene[0] )
		{
			case 1:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_TEXT_1], ThisWindow->Win, NULL, WSTRINGA_String, SuchText[0], TAG_DONE );
				break;
			case 2:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_CYCLE_1], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_CS[(SuchFeld[0])], WCYCLEA_Active, SuchWert[0], TAG_DONE );
				break;
		}
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_EBENE_1], ThisWindow->Win, NULL, WGROUPA_ActivePage, SuchEbene[0], TAG_DONE );

		switch( SuchEbene[1] )
		{
			case 1:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_TEXT_2], ThisWindow->Win, NULL, WSTRINGA_String, SuchText[1], TAG_DONE );
				break;
			case 2:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_CYCLE_2], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_CS[(SuchFeld[1])], WCYCLEA_Active, SuchWert[1], TAG_DONE );
				break;
		}
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_EBENE_2], ThisWindow->Win, NULL, WGROUPA_ActivePage, SuchEbene[1], TAG_DONE );

		switch( SuchEbene[2] )
		{
			case 1:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_TEXT_3], ThisWindow->Win, NULL, WSTRINGA_String, SuchText[2], TAG_DONE );
				break;
			case 2:
				SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_CYCLE_3], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_CS[(SuchFeld[2])], WCYCLEA_Active, SuchWert[2], TAG_DONE );
				break;
		}
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_EBENE_3], ThisWindow->Win, NULL, WGROUPA_ActivePage, SuchEbene[2], TAG_DONE );

		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_FELD_1], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_Felder_String, WCYCLEA_Active, SuchFeld[0], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_FELD_2], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_Felder_String, WCYCLEA_Active, SuchFeld[1], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_FELD_3], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MerkDB[Bezug]->Such_DB_Felder_String, WCYCLEA_Active, SuchFeld[2], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_VGL_1], ThisWindow->Win, NULL, WCYCLEA_Active, VGLFeld[0], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_VGL_2], ThisWindow->Win, NULL, WCYCLEA_Active, VGLFeld[1], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_VGL_3], ThisWindow->Win, NULL, WCYCLEA_Active, VGLFeld[2], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_VERK_1], ThisWindow->Win, NULL, WMXA_Active, Verknuepf[0], TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[DRU_SUCH_VERK_2], ThisWindow->Win, NULL, WMXA_Active, Verknuepf[1], TAG_DONE );
	}
};

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

	ULONG Merker;
	STRPTR SuchTextPTR[3] = {SuchText[0], SuchText[1], SuchText[2]};

	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 DRU_BEZUG:
					GetAttr( WGROUPA_ActivePage, ThisWindow->gads[IconNummer], (ULONG *)&Bezug );
					if( MyPrefsPTR->DruDockList[Bezug]->Anzahl	== 0	||
						 *Berecht[Bezug]								== 0	||
						 MerkDB[Bezug]->ElementeVorhanden()		== 0 )
					{
						SetGadgetAttrs( ThisWindow->gads[DRU_DRUCK], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
						SetGadgetAttrs( ThisWindow->gads[DRU_VORSCHAU], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
						SetGadgetAttrs( ThisWindow->gads[DRU_SAVE], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
					}
					else
					{
						SetGadgetAttrs( ThisWindow->gads[DRU_DRUCK], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
						SetGadgetAttrs( ThisWindow->gads[DRU_VORSCHAU], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
						SetGadgetAttrs( ThisWindow->gads[DRU_SAVE], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
					}
					if( Drucknummer_von > MerkDB[Bezug]->ElementeVorhanden() )
					{
						Drucknummer_von = MerkDB[Bezug]->ElementeVorhanden();
						SetGadgetAttrs( ThisWindow->gads[DRU_NR1], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
					}
					if( Drucknummer_bis > MerkDB[Bezug]->ElementeVorhanden() )
					{
						Drucknummer_bis = MerkDB[Bezug]->ElementeVorhanden();
						SetGadgetAttrs( ThisWindow->gads[DRU_NR2], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
					}

					StartDaten( 0 );
					FillWindow();
					break;
				case DRU_SEL_WAHL:
					GetAttr( WGROUPA_ActivePage, ThisWindow->gads[IconNummer], (ULONG *)&ThisWindow->Karte );
					FillSuchen();
					break;
				case DRU_NR_SUCHEN1:
				case DRU_NR_SUCHEN2:
					((MTSuch_Gadget *)FindIt->FirstAuswert)->AktDB			= MerkDB[Bezug];
					ThisWindow->ThisScreen->ExclusiveAuswertung( FindIt );
					if( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos )
					{
						if( IconNummer == DRU_NR_SUCHEN1 )
						{
							Drucknummer_von = ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos;
							SetGadgetAttrs( ThisWindow->gads[DRU_NR1], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
							if( Drucknummer_von > Drucknummer_bis )
							{
								Drucknummer_bis = Drucknummer_von;
								SetGadgetAttrs( ThisWindow->gads[DRU_NR2], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
							}
						}
						else
						{
							Drucknummer_bis = ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos;
							SetGadgetAttrs( ThisWindow->gads[DRU_NR2], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
							if( Drucknummer_von > Drucknummer_bis )
							{
								Drucknummer_von = Drucknummer_bis;
								SetGadgetAttrs( ThisWindow->gads[DRU_NR1], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
							}
						}
					}
					break;
				case DRU_NR1:
					GetAttr(WINTEGERA_Long, ThisWindow->gads[IconNummer], (ULONG *)&Drucknummer_von );
					if( Drucknummer_von > MerkDB[Bezug]->ElementeVorhanden() )
					{
						Drucknummer_von = MerkDB[Bezug]->ElementeVorhanden();
						SetGadgetAttrs( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
					}
					if( Drucknummer_von > Drucknummer_bis )
					{
						Drucknummer_bis = Drucknummer_von;
						SetGadgetAttrs( ThisWindow->gads[DRU_NR2], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
					}
					break;
				case DRU_NR2:
					GetAttr(WINTEGERA_Long, ThisWindow->gads[IconNummer], (ULONG *)&Drucknummer_bis );
					if( Drucknummer_bis > MerkDB[Bezug]->ElementeVorhanden() )
					{
						Drucknummer_bis = MerkDB[Bezug]->ElementeVorhanden();
						SetGadgetAttrs( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_bis, TAG_DONE );
					}
					if( Drucknummer_von > Drucknummer_bis )
					{
						Drucknummer_von = Drucknummer_bis;
						SetGadgetAttrs( ThisWindow->gads[DRU_NR1], ThisWindow->Win, NULL, WINTEGERA_Long, (LONG)Drucknummer_von, TAG_DONE );
					}
					break;
				// Suchfelder geändert
				case DRU_SUCH_FELD_1:
					if( CycleAuswert( &SuchFeld[0] ) )
					{
						SuchText[0][0]	= 0;
						SuchWert[0]		= 0;
						FillWindow();
					}
					break;
				case DRU_SUCH_FELD_2:
					if( CycleAuswert( &SuchFeld[1] ) )
					{
						SuchText[1][0]	= 0;
						SuchWert[1]		= 0;
						FillWindow();
					}
					break;
				case DRU_SUCH_FELD_3:
					if( CycleAuswert( &SuchFeld[2] ) )
					{
						SuchText[2][0]	= 0;
						SuchWert[2]		= 0;
						FillWindow();
					}
					break;
				// Vergleichsfunktion geändert
				case DRU_SUCH_VGL_1:
					CycleAuswert( &VGLFeld[0] );
					break;
				case DRU_SUCH_VGL_2:
					CycleAuswert( &VGLFeld[1] );
					break;
				case DRU_SUCH_VGL_3:
					CycleAuswert( &VGLFeld[2] );
					break;
				// Suchtext geändert
				case DRU_SUCH_TEXT_1:
					TextAuswert( SuchText[0] );
					break;
				case DRU_SUCH_TEXT_2:
					TextAuswert( SuchText[1] );
					break;
				case DRU_SUCH_TEXT_3:
					TextAuswert( SuchText[2] );
					break;
				// Suchwert Cycle-Gadget
				case DRU_SUCH_CYCLE_1:
					CycleAuswert( &Merker );
					SuchWert[0] = Merker;
					break;
				case DRU_SUCH_CYCLE_2:
					CycleAuswert( &Merker );
					SuchWert[1] = Merker;
					break;
				case DRU_SUCH_CYCLE_3:
					CycleAuswert( &Merker );
					SuchWert[2] = Merker;
					break;
				// Suchverknüpfung geändert
				case DRU_SUCH_VERK_1:
					GetAttr(WMXA_Active, ThisWindow->gads[IconNummer], (ULONG *)&Merker );
					Verknuepf[0] = Merker;
					break;
				case DRU_SUCH_VERK_2:
					GetAttr(WMXA_Active, ThisWindow->gads[IconNummer], (ULONG *)&Merker );
					Verknuepf[1] = Merker;
					break;
				// Die vier verschiedenen Vorgaben
				case DRU_SUCH_VOR1:
					StartDaten(0);
					FillWindow();
					break;
				case DRU_SUCH_VOR2:
					StartDaten(1);
					FillWindow();
					break;
				case DRU_SUCH_VOR3:
					StartDaten(2);
					FillWindow();
					break;
				case DRU_SUCH_VOR4:
					StartDaten(3);
					FillWindow();
					break;
				case DRU_DRUCK:
				case DRU_VORSCHAU:
				case DRU_SAVE:
					WZ_LockWindows( surface );

					if( Drucknummer_von	< 1 )
						Drucknummer_von	= 1;
					if( Drucknummer_bis	< 1 )
						Drucknummer_bis	= 1;
					MyAllgemein.Drucken(	ThisWindow->Karte, SuchFeld, SuchTextPTR, SuchWert, VGLFeld, Verknuepf,
												MyPrefsPTR->DruDockList[Bezug]->SucheNode(Select_LV[Bezug]),
												Drucknummer_von, Drucknummer_bis, MerkDB[Bezug],
												IconNummer, FALSE );

					WZ_UnlockWindows( surface );
					break;
				case DRU_ADRESSEN_LV:
				case DRU_KUNDEN_LV:
				case DRU_MITARBEITER_LV:
				case DRU_NIEDERLASSUNG_LV:
				case DRU_LIEFERANT_LV:
				case DRU_ARTIKEL_LV:
				case DRU_ARECHNUNG_LV:
				case DRU_ERECHNUNG_LV:
				case DRU_INVENTUR_LV:
				case DRU_KONTEN_LV:
				case DRU_BUCHEN_LV:
					Select_LV[Bezug] = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
					GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV[Bezug] );
					break;
			}
			break;
		case IDCMP_VANILLAKEY:
			switch( imsg->Code )
			{
				case 27:
					DONE	= 1;
					InitFelder();
					break;
			}
			break;
		// Window Aktiviert
		case IDCMP_ACTIVEWINDOW:
			if( ThisWindow->ShortCuts[0] == 0 )
			{
				GetAttr(WLABELA_Label, ThisWindow->gads[DRU_LABEL_VONBIS], (ULONG *)&TextPTR );
				ThisWindow->ShortCuts[0]		= GetHotKey(TextPTR,0);
				ThisWindow->ShortCutIcon[0]	= DRU_NR_SUCHEN1;
				ThisWindow->ShortCuts[1]		= GetHotKey(TextPTR,1);
				ThisWindow->ShortCutIcon[1]	= DRU_NR_SUCHEN2;
				ThisWindow->ShortCuts[2]		= 0;
			}
			FillWindow();
			break;
		// Window schliessen
		case IDCMP_CLOSEWINDOW:
			InitFelder();
			break;
		case IDCMP_RAWKEY:
			switch( imsg->Code )
			{
				case 76:
					if( Select_LV[Bezug] > 0 &&
						 MyPrefsPTR->DruDockList[Bezug]->Anzahl > 0 )
					{
						Select_LV[Bezug]--;
						SetGadgetAttrs( ThisWindow->gads[(DruList[Bezug])], ThisWindow->Win, NULL,
											WLISTVIEWA_Visible, Select_LV[Bezug], WLISTVIEWA_Selected, Select_LV[Bezug], TAG_DONE);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[(DruList[Bezug])], (ULONG *)&First_LV[Bezug] );
					}
					break;
				case 77:
					if( Select_LV[Bezug] < (MyPrefsPTR->DruDockList[Bezug]->Anzahl - 1) &&
						 MyPrefsPTR->DruDockList[Bezug]->Anzahl > 0 )
					{
						Select_LV[Bezug]++;
						SetGadgetAttrs( ThisWindow->gads[(DruList[Bezug])], ThisWindow->Win, NULL,
											WLISTVIEWA_Visible, Select_LV[Bezug], WLISTVIEWA_Selected, Select_LV[Bezug], TAG_DONE);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[(DruList[Bezug])], (ULONG *)&First_LV[Bezug] );
					}
					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;
					}
				}
			}
			break;
	}
	return DONE;
};

