#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 "Einstellungen.h"
#include "MTWinSchnellDruck.h"
#include "MTWinNavi.h"
#include "LocaleStrings.h"
#include "Allgemein.h"
#include "MTEditHook.h"

extern Prefs				*MyPrefsPTR;

extern Allgemein			MyAllgemein;

// Surface-Pointer
extern APTR	surface;

MTSDruck_Gadget::MTSDruck_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	DruDockSelected	= new ListenClass(32);
	AnzahlElementeMax = 0;

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

	First_LV				= 0;
	Select_LV			= 0;
	First_LV_Selected	= 0;
	Select_LV_Selected= 0;
	DBSatz				= 0;
};

MTSDruck_Gadget::~MTSDruck_Gadget()
{
	delete DruDockSelected;
};

void MTSDruck_Gadget::FillWindow( )
{
	if( GetIt )
		((MTNav_Gadget *)(GetIt->FirstAuswert))->AlleSperren();

	SetGadgetAttrs( ThisWindow->gads[SD_LV_DOCUEB], ThisWindow->Win, NULL,	WLISTVIEWA_List, &MyPrefsPTR->DruDockList[AktDB->Such_DB_Nr]->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									TAG_DONE);
	if( MyPrefsPTR->DruDockList[AktDB->Such_DB_Nr]->Anzahl == 0 )
		SetGadgetAttrs( ThisWindow->gads[SD_DRU_PLUS], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
	else
		SetGadgetAttrs( ThisWindow->gads[SD_DRU_PLUS], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL,	WLISTVIEWA_List, &DruDockSelected->MyList,
																									WLISTVIEWA_Top, First_LV_Selected,
																									WLISTVIEWA_Selected, Select_LV_Selected,
																									TAG_DONE);
	if( DruDockSelected->Anzahl == 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[SD_DRU_MINUS], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[SD_DRUCKEN], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		SetGadgetAttrs( ThisWindow->gads[SD_DRU_MINUS], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[SD_DRUCKEN], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
	}

	DBSatz = AktDB->AktElementNr;
};

void MTSDruck_Gadget::DruPlus()
{
	SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE );
	DruDockSelected->NeuerNode( MyPrefsPTR->DruDockList[AktDB->Such_DB_Nr]->SucheNode(Select_LV) );
	Select_LV_Selected = DruDockSelected->Anzahl - 1;
	SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL,	WLISTVIEWA_List, &DruDockSelected->MyList,
																					WLISTVIEWA_Visible, Select_LV_Selected,
																					WLISTVIEWA_Selected, Select_LV_Selected,
																					TAG_DONE);
	GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV_Selected );
	SetGadgetAttrs( ThisWindow->gads[SD_DRU_MINUS], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[SD_DRUCKEN], ThisWindow->Win, NULL, GA_DISABLED, FALSE, TAG_DONE );
};

void MTSDruck_Gadget::DruMinus()
{
	SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE );
	DruDockSelected->EntferneNode( Select_LV_Selected );
	if( Select_LV_Selected >= DruDockSelected->Anzahl )
	Select_LV_Selected--;
	if( DruDockSelected->Anzahl == 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[SD_DRU_MINUS], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[SD_DRUCKEN], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
	}

	SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL,	WLISTVIEWA_List, &DruDockSelected->MyList,
																					WLISTVIEWA_Visible, Select_LV_Selected,
																					WLISTVIEWA_Selected, Select_LV_Selected,
																					TAG_DONE);
	GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV_Selected );
};

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

	ULONG IconNummer, 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 SD_LV_DOCUEB:
					if( !GetTagData(WLISTVIEWA_DoubleClick, FALSE, (struct TagItem *)imsg->IAddress) )
					{
						Select_LV = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV );
					}
					else
					{
						DruPlus();
					}
					break;
				case SD_LV_DRUDOC:
					if( !GetTagData(WLISTVIEWA_DoubleClick, FALSE, (struct TagItem *)imsg->IAddress) )
					{
						Select_LV_Selected = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV_Selected );
					}
					else
					{
						DruMinus();
					}
					break;
				case SD_DRU_PLUS:
					DruPlus();
					break;
				case SD_DRU_MINUS:
					DruMinus();
					break;
				case SD_DRUCKEN:
					WZ_LockWindows( surface );

					for( i = 0; i < DruDockSelected->Anzahl; i++ )
					{
						MyAllgemein.Drucken( 0, NULL, NULL, NULL, NULL, NULL,
													DruDockSelected->SucheNode(i), DBSatz, DBSatz,
													AktDB, DRU_DRUCK, MyPrefsPTR->Daten->SchnellDruckFragen );
					}
					WZ_UnlockWindows( surface );
					// kein break!!!!
				case SD_ABBRUCH:
					DONE					= 2;
					First_LV				= 0;
					Select_LV			= 0;
					First_LV_Selected	= 0;
					Select_LV_Selected= 0;
					DBSatz				= 0;
					SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL, WLISTVIEWA_List, NULL, TAG_DONE );
					DruDockSelected->EntferneAlle();
					break;
			}
			break;
		case IDCMP_RAWKEY:
			if( ( imsg->Qualifier & IEQUALIFIER_LSHIFT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_RSHIFT ))
			{
				switch( imsg->Code )
				{
					case 76:
						if( Select_LV_Selected > 0)
						{
							Select_LV_Selected--;
							SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV_Selected, TAG_DONE);
							GetAttr(WLISTVIEWA_Top, ThisWindow->gads[SD_LV_DRUDOC], (ULONG *)&First_LV_Selected );
						}
						break;
					case 77:
						if( Select_LV_Selected < (DruDockSelected->Anzahl - 1) )
						{
							Select_LV_Selected++;
							SetGadgetAttrs( ThisWindow->gads[SD_LV_DRUDOC], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV_Selected, TAG_DONE);
							GetAttr(WLISTVIEWA_Top, ThisWindow->gads[SD_LV_DRUDOC], (ULONG *)&First_LV_Selected );
						}
						break;
				}
			}
			else
			{
				switch( imsg->Code )
				{
					case 76:
						if( Select_LV > 0)
						{
							Select_LV--;
							SetGadgetAttrs( ThisWindow->gads[SD_LV_DOCUEB], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
							GetAttr(WLISTVIEWA_Top, ThisWindow->gads[SD_LV_DOCUEB], (ULONG *)&First_LV );
						}
						break;
					case 77:
						if( Select_LV < (MyPrefsPTR->DruDockList[AktDB->Such_DB_Nr]->Anzahl - 1) )
						{
							Select_LV++;
							SetGadgetAttrs( ThisWindow->gads[SD_LV_DOCUEB], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
							GetAttr(WLISTVIEWA_Top, ThisWindow->gads[SD_LV_DOCUEB], (ULONG *)&First_LV );
						}
						break;
				}
			}
			break;
		// Window Aktiviert
		case IDCMP_ACTIVEWINDOW:
			FillWindow();
			break;
	}
	return DONE;
};

