/*
 * File:        listdb.h
 * Purpose:     Header file for data table lookup listbox
 * Author:      George Tasker/Doug Card
 * Created:     16-DEC-1996
 * Mods:			
 * Updated:		
 * Copyright:	(c)1996, Remstar International, Inc.
 *
 * Notice:		This class library and its intellectual design are free of charge for use,
 *             modification, enhancement, debugging under the following conditions:
 *
 *             1) These classes may only be used as part of the implementation of a wxWindows
 *                based application
 *             2) All enhancements and bug fixes are to be submitted back to the wxWindows
 *                user groups free of all charges for use with the wxWindows library.
 *             3) These classes may not be distributed as part of any other class library,
 *                DLL, text (written or electronic), other than a complete distribution of
 *                the wxWindows GUI development toolkit.
 */

/*
// SYNOPSIS START

	Contains dialog class for creating a data table lookup listbox

// SYNOPSIS STOP
*/

/* static const char sccsid[] = "%W% %G%"; */

#ifndef LISTDB_DOT_H
#define LISTDB_DOT_H


#include "dbtable.h"

const LOOKUP_COL_LEN = 250;

// Global database connection
extern wxDB *READONLY_DB;

// Clookup class
class Clookup : public wxTable
{
	public:

		char lookupCol[LOOKUP_COL_LEN+1];

		Clookup(char *tblName, char *colName);

};  // Clookup

// Clookup2 class
class Clookup2 : public wxTable
{
	public:

		char lookupCol1[LOOKUP_COL_LEN+1];
		char lookupCol2[LOOKUP_COL_LEN+1];

		Clookup2(char *tblName, char *colName1, char *colName2, wxDB *pDb);

};  // Clookup2

class ClookUpDlg : public wxDialogBox
{
	private:
		Bool			 widgetPtrsSet;
		int			 currentCursor;
		Clookup		*lookup;
		Clookup2		*lookup2;
		int			 noDisplayCols;
		int			 col1Len;

		wxListBox	*pLookUpSelectList;
		wxButton		*pLookUpOkBtn;
		wxButton		*pLookUpCancelBtn;

	public:

		// This is a generic lookup constructor that will work with any table and any column
		ClookUpDlg(wxWindow	*parent,
					  char		*windowTitle,
					  char		*tableName,
					  char		*colName,
					  char		*where,
					  char		*orderBy);

		//
		// This is a generic lookup constructor that will work with any table and any column.
		// It extends the capabilites of the lookup dialog in the following ways:
		//
		//	1) 2 columns rather than one
		// 2) The ability to select DISTINCT column values
		//
		// Only set distinctValues equal to true if necessary.  In many cases, the constraints
		// of the index(es) will enforce this uniqueness.  Selecting DISTINCT does require
		// overhead by the database to ensure that all values returned are distinct.  Therefore,
		// use this ONLY when you need it.
		//
		// For complicated queries, you can pass in the sql select statement.  This would be
		// necessary if joins are involved since by default both columns must come from the
		// same table.
		//
		// If you do query by sql statement, you must pass in the maximum length of column1,
		// since it cannot be derived when you query using your own sql statement.
		//
		// The optional database connection can be used if you'd like the lookup class
		// to use a database pointer other than the global READONLY_DB.  This is necessary if
		// records are being saved, but not committed to the db, yet should be included
		// in the lookup window.
		//
		ClookUpDlg(wxWindow	*parent,
					  char		*windowTitle,
					  char		*tableName,
					  char		*dispCol1,					// Must have at least 1 display column
					  char		*dispCol2,					// Optional
					  char		*where,
					  char		*orderBy,
					  Bool		 distinctValues,			// e.g. SELECT DISTINCT ...
					  char		*selectStmt = 0,			// If you wish to query by SQLstmt (complicated lookups)
					  int			 maxLenCol1 = 0,			// Mandatory if querying by SQLstmt
					  wxDB		*pDb = READONLY_DB,		// Database connection pointer
					  Bool		 allowOk		= TRUE);		// is the OK button enabled

		void		OnCommand(wxWindow& win, wxCommandEvent& event);
		Bool		OnClose();
		void		OnActivate(Bool) {};  // necessary for hot keys
};

#endif  // LISTDB_DOT_H

// ************************************ listdb.h *********************************
