/*

	09.06.99:

		Changed the complete code. The Applications
		is splitted into C++ objects. 
		This allows me to put the complete application
		into a new project as a complete object.

*/

#ifndef GUI_FILE_H
#define GUI_FILE_H

/* Types */

#ifdef __cplusplus
extern "C"
{
#endif

#include <exec/types.h>
#include <libraries/mui.h>
#include <libraries/gadtools.h> /* for BARLABEL in MenuItem */

#include <clib/muimaster_protos.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <clib/dos_protos.h>

#include <pragmas/muimaster_pragmas.h>

/*  Ansi  */
#include <stdlib.h>
#include <stdio.h>

#ifdef __cplusplus
}
#endif

#include <MUI/NListview_mcc.h>
#include <MUI/NFloattext_mcc.h>

#include <adac/AdacException.h>

#include <adac/DataBase.h>
#include <adac/DataTable.h>
#include <adac/DataRecord.h>

#include <libraries/aArray.h>

#include <Hook.h>
#include <Criteria.h>
#include <Cat.h>

enum
{
	ID_FILL_DATABASE_LIST = 0x09061999,
	ID_FILL_TABLE_LIST,
	ID_POP_SELECT_DATABASE,
	ID_POP_SELECT_TABLE,
	ID_CREATE_QUERY_STRING,
	ID_EXECUTE_QUERY,
	ID_ADD_CRITERIA,
	ID_REM_CRITERIA,
};

// make cy_FieldNames globaly available
// need it by a hook, and don't get access to the class
// there!
extern STRPTR *cy_FieldNames;

class SearchGUI
{
protected:
	char *db_ID;

	Object*	APL_Search;
	Object*	MN_Menu;
	Object*  MN_Quit;
	Object*	WI_Search;
	Object*	GR_Search_Regs;
	Object*  GR_Criteria;
	Object*	BT_Add;
	Object*	BT_Remove;
	Object*	STR_Query;
	Object*	BT_Search;
	Object*	BT_Quit;
	Object*	STR_DB_Server;
	Object*	PO_DataBase;
	Object*	STR_PO_DataBase;
	Object*	LV_DataBase;
	Object*	PO_Table;
	Object*	STR_PO_Table;
	Object*	LV_Table;
	Object*	LV_Results;
	Object*  STR_Status;

	aArray<Criteria*,Criteria*> AR_Criteria;
// see above
//	STRPTR *cy_FieldNames;

	char *STR_GR_Search_Regs[3];
	char *CY_FieldContent[2];
	char *CY_OperatorContent[4];

	mSQL sql;
	char *sg_Host,*sg_Database,*sg_Table;

private:
	void InitGUI();

	long ads_RecordFillFunc(register __a0 Hook *hook,register __a2 char **c,register __a1 DataRecord* record);
	long ads_RecordConstructFunc(register __a0 Hook *hook,register __a2 char **c,register __a1 DataRecord* record);
	long ads_RecordDestructFunc(register __a0 Hook *hook,register __a2 char **c,register __a1 DataRecord* record);
	long ads_RecordCompareFunc(register __a0 Hook *hook,register __a2 char **r1,register __a1 DataRecord* r2);

public:
	SearchGUI(char* host = NULL,char* database = NULL, char* table = NULL);
	~SearchGUI();

	BOOL Open();
	void Close();

	BOOL CreateQuery();
	BOOL ExecuteQuery();
	void FillDataBaseList();
	void FillTableList();
	void FillFieldList();
	void AddCriteria();
	void RemCriteria();

	void DoEventLoop();
};



#endif
