Huge cleanup of the code. Reformatting, spelling fixes, standardizing on wxWindows conventions, etc.

Changed the couple lines of code required to work with checkins of the new ODBC classes that use wxStrings.
Fixed a ton of memory leaks
Demo still crashes on exit though - this problem has exited for nearly a year though.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9256 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
George Tasker
2001-02-01 20:24:44 +00:00
parent 4fdae9972d
commit 645889ad25
17 changed files with 3157 additions and 2979 deletions

View File

@@ -1,12 +1,12 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Name: BrowserDB.h,cpp // Name: BrowserDB.h,cpp
// Purpose: a wxDB class // Purpose: a wxDB class
// Author: Mark Johnson, mj10777@gmx.net // Author: Mark Johnson, mj10777@gmx.net
// Modified by: // Modified by:
// Created: 19991127.mj10777 // Created: 19991127.mj10777
// Copyright: (c) Mark Johnson // Copyright: (c) Mark Johnson
// Licence: wxWindows license // Licence: wxWindows license
// RCS-ID: $Id$ // RCS-ID: $Id$
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//-- 1) //-- 1)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
@@ -32,441 +32,458 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Global structure for holding ODBC connection information // Global structure for holding ODBC connection information
// - darf nur einmal im Projekte definiert werden ?? Extra Databasse Klasse ? // - darf nur einmal im Projekte definiert werden ?? Extra Databasse Klasse ?
wxDbConnectInf ConnectInf; // F<>r DBase wxDbConnectInf ConnectInf; // F<>r DBase
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
extern WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList; /* from db.cpp, used in getting back error results from db connections */ extern WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList; /* from db.cpp, used in getting back error results from db connections */
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
char *GetExtendedDBErrorMsg(char *ErrFile, int ErrLine) char *GetExtendedDBErrorMsg(char *ErrFile, int ErrLine)
{ {
static wxString msg; static wxString msg;
wxString tStr; wxString tStr;
if (ErrFile || ErrLine) if (ErrFile || ErrLine)
{ {
msg += "File: "; msg += "File: ";
msg += ErrFile; msg += ErrFile;
msg += " Line: "; msg += " Line: ";
tStr.Printf("%d",ErrLine); tStr.Printf("%d",ErrLine);
msg += tStr.GetData(); msg += tStr.GetData();
// msg += "\n"; // msg += "\n";
} }
msg.Append ("\nODBC errors:\n"); msg.Append ("\nODBC errors:\n");
// msg += "\n"; // msg += "\n";
/* Scan through each database connection displaying /* Scan through each database connection displaying
* any ODBC errors that have occured. */ * any ODBC errors that have occured. */
wxDbList *pDbList; wxDbList *pDbList;
for (pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext) for (pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext)
{ {
// Skip over any free connections // Skip over any free connections
if (pDbList->Free) if (pDbList->Free)
continue; continue;
// Display errors for this connection // Display errors for this connection
for (int i = 0; i < DB_MAX_ERROR_HISTORY; i++) for (int i = 0; i < DB_MAX_ERROR_HISTORY; i++)
{ {
if (pDbList->PtrDb->errorList[i]) if (pDbList->PtrDb->errorList[i])
{ {
msg.Append(pDbList->PtrDb->errorList[i]); msg.Append(pDbList->PtrDb->errorList[i]);
if (strcmp(pDbList->PtrDb->errorList[i],"") != 0) if (strcmp(pDbList->PtrDb->errorList[i],"") != 0)
msg.Append("\n"); msg.Append("\n");
} }
} }
} }
msg += "\n"; msg += "\n";
return (char*) (const char*) msg; return (char*) (const char*) msg;
} // GetExtendedDBErrorMsg } // GetExtendedDBErrorMsg
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BrowserDB::BrowserDB() BrowserDB::BrowserDB()
{ {
Zeiger_auf_NULL(0); Zeiger_auf_NULL(0);
ODBCSource = ""; // ODBC data source name (created with ODBC Administrator under Win95/NT) ODBCSource = ""; // ODBC data source name (created with ODBC Administrator under Win95/NT)
UserName = ""; // database username - must already exist in the data source UserName = ""; // database username - must already exist in the data source
Password = ""; // password database username Password = ""; // password database username
OnFillSqlTyp(); OnFillSqlTyp();
OnFilldbTyp(); OnFilldbTyp();
} // BrowserDB Constructor } // BrowserDB Constructor
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BrowserDB::~BrowserDB() BrowserDB::~BrowserDB()
{ {
Zeiger_auf_NULL(1); // Clean up Tables and Databases (Commit, Close und delete) Zeiger_auf_NULL(1); // Clean up Tables and Databases (Commit, Close und delete)
} // BrowserDB destructor } // BrowserDB destructor
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::Initialize(int Quiet) bool BrowserDB::Initialize(int Quiet)
{ {
if (!OnStartDB(Quiet)) if (!OnStartDB(Quiet))
{ {
wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str()); wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str());
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} // BrowserDB:Initialize } // BrowserDB:Initialize
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::OnStartDB(int Quiet) bool BrowserDB::OnStartDB(int Quiet)
{ {
wxStopWatch sw; wxStopWatch sw;
if (!Quiet) if (!Quiet)
wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str()); wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str());
if (db_BrowserDB != NULL) if (db_BrowserDB != NULL)
{ {
if (!Quiet) if (!Quiet)
wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is allready open.")); wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is allready open."));
return TRUE; return TRUE;
} }
// Initialize the ODBC Environment for Database Operations // Initialize the ODBC Environment for Database Operations
if (SQLAllocEnv(&ConnectInf.Henv) != SQL_SUCCESS) if (SQLAllocEnv(&ConnectInf.Henv) != SQL_SUCCESS)
{ {
if (!Quiet) if (!Quiet)
wxLogMessage(_("\n-E-> BrowserDB::OnStartDB() : DB CONNECTION ERROR : A problem occured while trying to get a connection to the data source")); wxLogMessage(_("\n-E-> BrowserDB::OnStartDB() : DB CONNECTION ERROR : A problem occured while trying to get a connection to the data source"));
return FALSE; return FALSE;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Connect to datasource // Connect to datasource
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
DlgUser *p_Dlg; DlgUser *p_Dlg;
p_Dlg = new DlgUser(pDoc->p_MainFrame,pDoc,""); p_Dlg = new DlgUser(pDoc->p_MainFrame,pDoc,"");
p_Dlg->s_DSN = ODBCSource; p_Dlg->s_DSN = ODBCSource;
p_Dlg->s_User = UserName; p_Dlg->s_User = UserName;
p_Dlg->s_Password = Password; p_Dlg->s_Password = Password;
p_Dlg->OnInit(); p_Dlg->OnInit();
p_Dlg->Fit(); p_Dlg->Fit();
bool OK = FALSE; bool OK = FALSE;
if (p_Dlg->ShowModal() == wxID_OK) if (p_Dlg->ShowModal() == wxID_OK)
{ {
(pDoc->p_DSN+i_Which)->Usr = p_Dlg->s_User; (pDoc->p_DSN+i_Which)->Usr = p_Dlg->s_User;
(pDoc->p_DSN+i_Which)->Pas = p_Dlg->s_Password; (pDoc->p_DSN+i_Which)->Pas = p_Dlg->s_Password;
UserName = p_Dlg->s_User; UserName = p_Dlg->s_User;
Password = p_Dlg->s_Password; Password = p_Dlg->s_Password;
OK = TRUE; OK = TRUE;
} }
delete p_Dlg; delete p_Dlg;
if (OK) if (OK)
{ {
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
strcpy(ConnectInf.Dsn, ODBCSource); // ODBC data source name (created with ODBC Administrator under Win95/NT) ConnectInf.Dsn = ODBCSource; // ODBC data source name (created with ODBC Administrator under Win95/NT)
strcpy(ConnectInf.Uid, UserName); // database username - must already exist in the data source ConnectInf.Uid = UserName; // database username - must already exist in the data source
strcpy(ConnectInf.AuthStr, Password); // password database username ConnectInf.AuthStr= Password; // password database username
db_BrowserDB = wxDbGetConnection(&ConnectInf); db_BrowserDB = wxDbGetConnection(&ConnectInf);
// wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str()); // wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str());
if (db_BrowserDB == NULL) if (db_BrowserDB == NULL)
{ {
strcpy(ConnectInf.Dsn, ""); ConnectInf.Dsn = "";
strcpy(ConnectInf.Uid, ""); ConnectInf.Uid = "";
strcpy(ConnectInf.AuthStr, ""); ConnectInf.AuthStr = "";
if (!Quiet) if (!Quiet)
{ {
wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)")); wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)"));
wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time()); wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
} }
return FALSE; return FALSE;
} }
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
if (!Quiet) if (!Quiet)
{ {
Temp1 = db_BrowserDB->GetDatabaseName(); Temp1 = db_BrowserDB->GetDatabaseName();
Temp2 = db_BrowserDB->GetDataSource(); Temp2 = db_BrowserDB->GetDataSource();
wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str()); wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str());
wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time()); wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time());
} }
return TRUE; return TRUE;
} else return FALSE; }
else
return FALSE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::OnCloseDB(int Quiet) bool BrowserDB::OnCloseDB(int Quiet)
{ {
if (!Quiet) if (!Quiet)
wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin ")); wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin "));
if (db_BrowserDB) if (db_BrowserDB)
{ {
db_BrowserDB->Close(); // db_BrowserDB->Close();
wxDbFreeConnection(db_BrowserDB); wxDbFreeConnection(db_BrowserDB);
/*
// Free Environment Handle that ODBC uses // Free Environment Handle that ODBC uses
if (SQLFreeEnv(&ConnectInf.Henv) != SQL_SUCCESS) if (SQLFreeEnv(&ConnectInf.Henv) != SQL_SUCCESS)
{ {
// Error freeing environment handle // Error freeing environment handle
} }
db_BrowserDB = NULL; */
} db_BrowserDB = NULL;
if (!Quiet) }
wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End ")); if (!Quiet)
return TRUE; wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End "));
return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::OnGetNext(int Cols,int Quiet) bool BrowserDB::OnGetNext(int Cols,int Quiet)
{ {
SDWORD cb; SDWORD cb;
int i_dbDataType; int i_dbDataType;
int i=0; int i=0;
char s_temp[1024+1]; char s_temp[1024+1];
long l_temp; long l_temp;
double f_temp; double f_temp;
int AnzError=0; int AnzError=0;
TIMESTAMP_STRUCT t_temp; TIMESTAMP_STRUCT t_temp;
wxString Temp0; wxString Temp0;
//----------------------------- //-----------------------------
if (!db_BrowserDB->GetNext()) if (!db_BrowserDB->GetNext())
{ {
return FALSE; return FALSE;
Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> ")); Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> "));
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
wxLogMessage(Temp0); wxLogMessage(Temp0);
wxMessageBox(Temp0); wxMessageBox(Temp0);
} }
else else
{ {
for (i=0;i<Cols;i++) for (i=0;i<Cols;i++)
{ {
strcpy((cl_BrowserDB+i)->tableName,"-E->"); strcpy((cl_BrowserDB+i)->tableName,"-E->");
i_dbDataType = (cl_BrowserDB->pColFor+i)->i_dbDataType; i_dbDataType = (cl_BrowserDB->pColFor+i)->i_dbDataType;
if (i_dbDataType == 0) // Filter unsupported dbDataTypes if (i_dbDataType == 0) // Filter unsupported dbDataTypes
{ {
if (((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_VARCHAR) || ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_LONGVARCHAR)) if (((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_VARCHAR) || ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_LONGVARCHAR))
i_dbDataType = DB_DATA_TYPE_VARCHAR; i_dbDataType = DB_DATA_TYPE_VARCHAR;
if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DATE) if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DATE)
i_dbDataType = DB_DATA_TYPE_DATE; i_dbDataType = DB_DATA_TYPE_DATE;
if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_BIT) if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_BIT)
i_dbDataType = DB_DATA_TYPE_INTEGER; i_dbDataType = DB_DATA_TYPE_INTEGER;
if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_NUMERIC) if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_NUMERIC)
i_dbDataType = DB_DATA_TYPE_VARCHAR; i_dbDataType = DB_DATA_TYPE_VARCHAR;
if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_REAL) if ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_REAL)
i_dbDataType = DB_DATA_TYPE_FLOAT; i_dbDataType = DB_DATA_TYPE_FLOAT;
} }
if ((i_dbDataType == DB_DATA_TYPE_INTEGER) && ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DOUBLE)) if ((i_dbDataType == DB_DATA_TYPE_INTEGER) && ((cl_BrowserDB->pColFor+i)->i_sqlDataType == SQL_C_DOUBLE))
{ // DBASE Numeric { // DBASE Numeric
i_dbDataType = DB_DATA_TYPE_FLOAT; i_dbDataType = DB_DATA_TYPE_FLOAT;
} }
switch(i_dbDataType) switch(i_dbDataType)
{ {
case DB_DATA_TYPE_VARCHAR: case DB_DATA_TYPE_VARCHAR:
strcpy(s_temp,""); strcpy(s_temp,"");
if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_dbDataType,&s_temp,sizeof(s_temp), &cb)) if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_dbDataType,&s_temp,sizeof(s_temp), &cb))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName); Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName);
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
wxLogMessage(Temp0); wxLogMessage(Temp0);
} }
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,s_temp); Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,s_temp);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
break; break;
case DB_DATA_TYPE_INTEGER: case DB_DATA_TYPE_INTEGER:
l_temp = 0; l_temp = 0;
if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&l_temp,sizeof(l_temp), &cb)) if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&l_temp,sizeof(l_temp), &cb))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
} }
else else
{ {
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,l_temp); Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,l_temp);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
} }
break; break;
case DB_DATA_TYPE_FLOAT: case DB_DATA_TYPE_FLOAT:
f_temp = 0; f_temp = 0;
if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&f_temp,sizeof(f_temp), &cb)) if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&f_temp,sizeof(f_temp), &cb))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
wxMessageBox(Temp0); wxMessageBox(Temp0);
} }
else else
{ {
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,f_temp); Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,f_temp);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
} }
break; break;
case DB_DATA_TYPE_DATE: case DB_DATA_TYPE_DATE:
t_temp.day = t_temp.month = t_temp.year = t_temp.hour = t_temp.minute = t_temp.second = t_temp.fraction = 0; t_temp.day = t_temp.month = t_temp.year = t_temp.hour = t_temp.minute = t_temp.second = t_temp.fraction = 0;
if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&t_temp,sizeof(t_temp), &cb)) if (!db_BrowserDB->GetData(i+1,(cl_BrowserDB->pColFor+i)->i_sqlDataType,&t_temp,sizeof(t_temp), &cb))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> "));
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
} }
else else
{ {
// i_Nation = 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US // i_Nation = 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US
if (((cl_BrowserDB->pColFor+i)->i_Nation == 0) || // TS YYYY-MM-DD if (((cl_BrowserDB->pColFor+i)->i_Nation == 0) || // TS YYYY-MM-DD
((cl_BrowserDB->pColFor+i)->i_Nation == 3)) // IT YYYY-MM-DD ((cl_BrowserDB->pColFor+i)->i_Nation == 3)) // IT YYYY-MM-DD
{ {
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.year,t_temp.month,t_temp.day, Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.year,t_temp.month,t_temp.day,
t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
} }
if (((cl_BrowserDB->pColFor+i)->i_Nation == 1) || // EU DD.MM.YYYY if (((cl_BrowserDB->pColFor+i)->i_Nation == 1) || // EU DD.MM.YYYY
((cl_BrowserDB->pColFor+i)->i_Nation == 2)) // UK DD/MM/YYYY ((cl_BrowserDB->pColFor+i)->i_Nation == 2)) // UK DD/MM/YYYY
{ {
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.day,t_temp.month,t_temp.year, Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.day,t_temp.month,t_temp.year,
t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
} }
if ((cl_BrowserDB->pColFor+i)->i_Nation == 3) // US MM/DD/YYYY if ((cl_BrowserDB->pColFor+i)->i_Nation == 3) // US MM/DD/YYYY
{ {
Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.month,t_temp.day,t_temp.year, Temp0.Printf((cl_BrowserDB->pColFor+i)->s_Field,t_temp.month,t_temp.day,t_temp.year,
t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
} }
} }
break; break;
default: default:
AnzError++; AnzError++;
if (AnzError <= 100) if (AnzError <= 100)
{ {
Temp0 = (cl_BrowserDB+i)->colName; Temp0 = (cl_BrowserDB+i)->colName;
wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,Temp0.c_str()); wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,Temp0.c_str());
} }
else else
return TRUE; return TRUE;
Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,(cl_BrowserDB->pColFor+i)->i_sqlDataType); Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB->pColFor+i)->i_dbDataType,(cl_BrowserDB->pColFor+i)->i_sqlDataType);
strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); strcpy((cl_BrowserDB+i)->tableName,Temp0.c_str());
break; break;
}; }; // switch
} } // for
} } // else
// wxLogMessage("-E-> BrowserDB::OnGetNext - End");
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::OnSelect(wxString tb_Name, int Quiet) bool BrowserDB::OnSelect(wxString tb_Name, int Quiet)
{ {
wxStopWatch sw; wxStopWatch sw;
wxString SQLStmt; wxString SQLStmt;
i_Records = 0; i_Records = 0;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
SQLStmt.sprintf("SELECT * FROM %s",tb_Name.c_str()); SQLStmt.sprintf("SELECT * FROM %s",tb_Name.c_str());
if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
wxLogMessage(Temp0); wxLogMessage(Temp0);
wxMessageBox("-E-> BrowserDB::OnSelect - GetData()"); wxMessageBox("-E-> BrowserDB::OnSelect - GetData()");
return FALSE; return FALSE;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
while (db_BrowserDB->GetNext()) while (db_BrowserDB->GetNext())
{ {
i_Records++; i_Records++;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str());
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
wxLogMessage(Temp0); wxLogMessage(Temp0);
return FALSE; return FALSE;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// SetColDefs ( 0,"NAME", DB_DATA_TYPE_VARCHAR, Name, SQL_C_CHAR, sizeof(Name), TRUE, TRUE); // Primary index // SetColDefs ( 0,"NAME", DB_DATA_TYPE_VARCHAR, Name, SQL_C_CHAR, sizeof(Name), TRUE, TRUE); // Primary index
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (!Quiet) if (!Quiet)
{ {
wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End - Time needed : %ld ms"),tb_Name.c_str(),i_Records,sw.Time()); wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End - Time needed : %ld ms"),tb_Name.c_str(),i_Records,sw.Time());
} }
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool BrowserDB::OnExecSql(wxString SQLStmt, int Quiet) bool BrowserDB::OnExecSql(wxString SQLStmt, int Quiet)
{ {
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData()))) if (!db_BrowserDB->ExecSql((char *)(SQLStmt.GetData())))
{ {
Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str()); Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str());
Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__); Temp0 += GetExtendedDBErrorMsg(__FILE__,__LINE__);
if (!Quiet) if (!Quiet)
wxLogMessage(Temp0); wxLogMessage(Temp0);
else else
wxMessageBox("-E-> BrowserDB::OnExecSql - ExecSql()"); wxMessageBox("-E-> BrowserDB::OnExecSql - ExecSql()");
return FALSE; return FALSE;
} }
if (!Quiet) if (!Quiet)
{ {
// wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End - Time needed : %ld ms"),SQLStmt.c_str(),sw.Time()); // wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End - Time needed : %ld ms"),SQLStmt.c_str(),sw.Time());
} }
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
wxDbInf* BrowserDB::OnGetCatalog(int Quiet) wxDbInf* BrowserDB::OnGetCatalog(int Quiet)
{ {
char UName[255]; char UName[255];
strcpy(UName,UserName); strcpy(UName,UserName);
ct_BrowserDB = db_BrowserDB->GetCatalog(UName); ct_BrowserDB = db_BrowserDB->GetCatalog(UName);
return ct_BrowserDB; return ct_BrowserDB;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
wxDbColInf* BrowserDB::OnGetColumns(char *tableName, int numCols, int Quiet) wxDbColInf* BrowserDB::OnGetColumns(char *tableName, int numCols, int Quiet)
{ {
char UName[255]; char UName[255];
int i; int i;
strcpy(UName,UserName); strcpy(UName,UserName);
cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName); cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName);
cl_BrowserDB->pColFor = new wxDbColFor[numCols]; cl_BrowserDB->pColFor = new wxDbColFor[numCols];
for (i=0;i<numCols;i++) for (i=0;i<numCols;i++)
{ {
(cl_BrowserDB->pColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType, (cl_BrowserDB->pColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType,
(cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits); (cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits);
} }
return cl_BrowserDB; return cl_BrowserDB;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void BrowserDB::Zeiger_auf_NULL(int Art) void BrowserDB::Zeiger_auf_NULL(int Art)
{ {
if (Art == 1) // L<>schen if (Art == 1) // L<>schen
{ {
if (cl_BrowserDB != NULL) if (cl_BrowserDB != NULL)
{ // Destroy the memory { // Destroy the memory
delete [] cl_BrowserDB; delete [] cl_BrowserDB;
} }
if (ct_BrowserDB != NULL) if (ct_BrowserDB != NULL)
{ // Destroy the memory { // Destroy the memory
delete [] ct_BrowserDB; delete [] ct_BrowserDB;
} }
if (db_BrowserDB != NULL) if (db_BrowserDB != NULL)
{ {
db_BrowserDB->CommitTrans(); db_BrowserDB->CommitTrans();
db_BrowserDB->Close(); db_BrowserDB->Close();
wxDbCloseConnections(); wxDbCloseConnections();
delete db_BrowserDB; delete db_BrowserDB;
} }
} }
cl_BrowserDB = NULL; cl_BrowserDB = NULL;
ct_BrowserDB = NULL; ct_BrowserDB = NULL;
db_BrowserDB = NULL; db_BrowserDB = NULL;
p_LogWindow = NULL; p_LogWindow = NULL;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void BrowserDB::OnFillSqlTyp() void BrowserDB::OnFillSqlTyp()
{ {
i_SqlTyp[1] = SQL_C_BINARY; s_SqlTyp[1] = "SQL_C_BINARY"; i_SqlTyp[1] = SQL_C_BINARY; s_SqlTyp[1] = "SQL_C_BINARY";
i_SqlTyp[2] = SQL_C_BIT; s_SqlTyp[2] = "SQL_C_BIT"; i_SqlTyp[2] = SQL_C_BIT; s_SqlTyp[2] = "SQL_C_BIT";
i_SqlTyp[3] = SQL_C_BOOKMARK; s_SqlTyp[3] = "SQL_C_BOOKMARK"; i_SqlTyp[3] = SQL_C_BOOKMARK; s_SqlTyp[3] = "SQL_C_BOOKMARK";
i_SqlTyp[4] = SQL_C_CHAR; s_SqlTyp[4] = "SQL_C_CHAR"; i_SqlTyp[4] = SQL_C_CHAR; s_SqlTyp[4] = "SQL_C_CHAR";
i_SqlTyp[5] = SQL_C_DATE; s_SqlTyp[5] = "SQL_C_DATE"; i_SqlTyp[5] = SQL_C_DATE; s_SqlTyp[5] = "SQL_C_DATE";
i_SqlTyp[6] = SQL_C_DEFAULT; s_SqlTyp[6] = "SQL_C_DEFAULT"; i_SqlTyp[6] = SQL_C_DEFAULT; s_SqlTyp[6] = "SQL_C_DEFAULT";
i_SqlTyp[7] = SQL_C_DOUBLE; s_SqlTyp[7] = "SQL_C_DOUBLE"; i_SqlTyp[7] = SQL_C_DOUBLE; s_SqlTyp[7] = "SQL_C_DOUBLE";
i_SqlTyp[8] = SQL_C_FLOAT; s_SqlTyp[8] = "SQL_C_FLOAT"; i_SqlTyp[8] = SQL_C_FLOAT; s_SqlTyp[8] = "SQL_C_FLOAT";
i_SqlTyp[9] = SQL_C_LONG; s_SqlTyp[9] = "SQL_C_LONG"; i_SqlTyp[9] = SQL_C_LONG; s_SqlTyp[9] = "SQL_C_LONG";
i_SqlTyp[10] = SQL_C_SHORT; s_SqlTyp[10] = "SQL_C_SHORT"; i_SqlTyp[10] = SQL_C_SHORT; s_SqlTyp[10] = "SQL_C_SHORT";
i_SqlTyp[11] = SQL_C_SLONG; s_SqlTyp[11] = "SQL_C_SLONG"; i_SqlTyp[11] = SQL_C_SLONG; s_SqlTyp[11] = "SQL_C_SLONG";
i_SqlTyp[12] = SQL_C_SSHORT; s_SqlTyp[12] = "SQL_C_SSHORT"; i_SqlTyp[12] = SQL_C_SSHORT; s_SqlTyp[12] = "SQL_C_SSHORT";
i_SqlTyp[13] = SQL_C_STINYINT; s_SqlTyp[13] = "SQL_C_STINYINT"; i_SqlTyp[13] = SQL_C_STINYINT; s_SqlTyp[13] = "SQL_C_STINYINT";
i_SqlTyp[14] = SQL_C_TIME; s_SqlTyp[14] = "SQL_C_TIME"; i_SqlTyp[14] = SQL_C_TIME; s_SqlTyp[14] = "SQL_C_TIME";
i_SqlTyp[15] = SQL_C_TIMESTAMP; s_SqlTyp[15] = "SQL_C_TIMESTAMP"; i_SqlTyp[15] = SQL_C_TIMESTAMP; s_SqlTyp[15] = "SQL_C_TIMESTAMP";
i_SqlTyp[16] = SQL_C_TINYINT; s_SqlTyp[16] = "SQL_C_TINYINT"; i_SqlTyp[16] = SQL_C_TINYINT; s_SqlTyp[16] = "SQL_C_TINYINT";
i_SqlTyp[17] = SQL_C_ULONG; s_SqlTyp[17] = "SQL_C_ULONG"; i_SqlTyp[17] = SQL_C_ULONG; s_SqlTyp[17] = "SQL_C_ULONG";
i_SqlTyp[18] = SQL_C_USHORT; s_SqlTyp[18] = "SQL_C_USHORT"; i_SqlTyp[18] = SQL_C_USHORT; s_SqlTyp[18] = "SQL_C_USHORT";
i_SqlTyp[19] = SQL_C_UTINYINT; s_SqlTyp[19] = "SQL_C_UTINYINT"; i_SqlTyp[19] = SQL_C_UTINYINT; s_SqlTyp[19] = "SQL_C_UTINYINT";
i_SqlTyp[20] = SQL_VARCHAR; s_SqlTyp[20] = "SQL_VARCHAR"; i_SqlTyp[20] = SQL_VARCHAR; s_SqlTyp[20] = "SQL_VARCHAR";
i_SqlTyp[21] = SQL_NUMERIC; s_SqlTyp[21] = "SQL_NUMERIC"; i_SqlTyp[21] = SQL_NUMERIC; s_SqlTyp[21] = "SQL_NUMERIC";
i_SqlTyp[22] = SQL_LONGVARCHAR; s_SqlTyp[22] = "SQL_LONGVARCHAR"; i_SqlTyp[22] = SQL_LONGVARCHAR; s_SqlTyp[22] = "SQL_LONGVARCHAR";
i_SqlTyp[23] = SQL_REAL; s_SqlTyp[23] = "SQL_REAL"; i_SqlTyp[23] = SQL_REAL; s_SqlTyp[23] = "SQL_REAL";
i_SqlTyp[0] = 23; s_SqlTyp[0] = ""; i_SqlTyp[0] = 23; s_SqlTyp[0] = "";
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void BrowserDB::OnFilldbTyp() void BrowserDB::OnFilldbTyp()
{ {
i_dbTyp[1] = DB_DATA_TYPE_VARCHAR; s_dbTyp[1] = "DB_DATA_TYPE_VARCHAR"; i_dbTyp[1] = DB_DATA_TYPE_VARCHAR; s_dbTyp[1] = "DB_DATA_TYPE_VARCHAR";
i_dbTyp[2] = DB_DATA_TYPE_INTEGER; s_dbTyp[2] = "DB_DATA_TYPE_INTEGER"; i_dbTyp[2] = DB_DATA_TYPE_INTEGER; s_dbTyp[2] = "DB_DATA_TYPE_INTEGER";
i_dbTyp[3] = DB_DATA_TYPE_FLOAT; s_dbTyp[3] = "DB_DATA_TYPE_FLOAT"; i_dbTyp[3] = DB_DATA_TYPE_FLOAT; s_dbTyp[3] = "DB_DATA_TYPE_FLOAT";
i_dbTyp[4] = DB_DATA_TYPE_DATE; s_dbTyp[4] = "DB_DATA_TYPE_DATE"; i_dbTyp[4] = DB_DATA_TYPE_DATE; s_dbTyp[4] = "DB_DATA_TYPE_DATE";
i_dbTyp[0] = 4; s_dbTyp[0] = ""; i_dbTyp[0] = 4; s_dbTyp[0] = "";
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -16,62 +16,63 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
extern wxDbConnectInf DbConnectInf; extern wxDbConnectInf DbConnectInf;
class MainDoc; class MainDoc;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class BrowserDB class BrowserDB
{ {
public: public:
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Pointer to the main database connection used in the program. This // Pointer to the main database connection used in the program. This
// pointer would normally be used for doing things as database lookups // pointer would normally be used for doing things as database lookups
// for user login names and passwords, getting workstation settings, etc. // for user login names and passwords, getting workstation settings, etc.
// ---> IMPORTANT <--- // ---> IMPORTANT <---
// //
// For each database object created which uses this wxDb pointer // For each database object created which uses this wxDb pointer
// connection to the database, when a CommitTrans() or RollBackTrans() // connection to the database, when a CommitTrans() or RollBackTrans()
// will commit or rollback EVERY object which uses this wxDb pointer. // will commit or rollback EVERY object which uses this wxDb pointer.
// //
// To allow each table object (those derived from wxDbTable) to be // To allow each table object (those derived from wxDbTable) to be
// individually committed or rolled back, you MUST use a different // individually committed or rolled back, you MUST use a different
// instance of wxDb in the constructor of the table. Doing so creates // instance of wxDb in the constructor of the table. Doing so creates
// more overhead, and will use more database connections (some DBs have // more overhead, and will use more database connections (some DBs have
// connection limits...), so use connections sparringly. // connection limits...), so use connections sparringly.
// //
// It is recommended that one "main" database connection be created for // It is recommended that one "main" database connection be created for
// the entire program to use for READ-ONLY database accesses, but for each // the entire program to use for READ-ONLY database accesses, but for each
// table object which will do a CommitTrans() or RollbackTrans() that a // table object which will do a CommitTrans() or RollbackTrans() that a
// new wxDb object be created and used for it. // new wxDb object be created and used for it.
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxDb* db_BrowserDB; wxDb* db_BrowserDB;
wxDbInf* ct_BrowserDB; wxDbInf* ct_BrowserDB;
wxDbColInf* cl_BrowserDB; wxDbColInf* cl_BrowserDB;
wxString ODBCSource, UserName, Password; wxString ODBCSource, UserName, Password;
MainDoc *pDoc; MainDoc *pDoc;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5;
wxString ODBCText; wxString ODBCText;
wxTextCtrl* p_LogWindow; wxTextCtrl* p_LogWindow;
wxString s_SqlTyp[25]; wxString s_SqlTyp[25];
int i_SqlTyp[25]; int i_SqlTyp[25];
wxString s_dbTyp[5]; wxString s_dbTyp[5];
int i_dbTyp[5]; int i_dbTyp[5];
int i_Which; int i_Which;
int i_Records; int i_Records;
int i_Cols; int i_Cols;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
BrowserDB(); BrowserDB();
~BrowserDB(); ~BrowserDB();
void Zeiger_auf_NULL(int Art); void Zeiger_auf_NULL(int Art);
bool Initialize(int Quiet); bool Initialize(int Quiet);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
bool OnStartDB(int Quiet); bool OnStartDB(int Quiet);
bool OnCloseDB(int Quiet); bool OnCloseDB(int Quiet);
bool OnSelect(wxString tb_Name,int Quiet); bool OnSelect(wxString tb_Name,int Quiet);
bool OnExecSql(wxString SQLStmt,int Quiet); bool OnExecSql(wxString SQLStmt,int Quiet);
bool OnGetNext(int Cols,int Quiet); bool OnGetNext(int Cols,int Quiet);
wxDbInf* OnGetCatalog(int Quiet); wxDbInf* OnGetCatalog(int Quiet);
wxDbColInf* OnGetColumns(char *tableName, int numCols,int Quiet); wxDbColInf* OnGetColumns(char *tableName, int numCols,int Quiet);
void OnFillSqlTyp(); void OnFillSqlTyp();
void OnFilldbTyp(); void OnFilldbTyp();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
}; // BrowserDB class definition }; // BrowserDB class definition
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -12,23 +12,23 @@
//-- all #ifdefs that the whole Project needs. ------------------------------------------- //-- all #ifdefs that the whole Project needs. -------------------------------------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#ifdef __GNUG__ #ifdef __GNUG__
#pragma implementation #pragma implementation
#pragma interface #pragma interface
#endif #endif
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h". // For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#pragma hdrstop #pragma hdrstop
#endif #endif
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/wx.h" #include "wx/wx.h"
#endif #endif
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#ifndef __WXMSW__ #ifndef __WXMSW__
#include "bitmaps/logo.xpm" #include "bitmaps/logo.xpm"
#endif #endif
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//-- all #includes that every .cpp needs --- 19990807.mj10777 ---------------- //-- all #includes that every .cpp needs --- 19990807.mj10777 ----------------
@@ -39,278 +39,285 @@
//-- Some Global Vars for this file ------------------------------------------------------ //-- Some Global Vars for this file ------------------------------------------------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(MainFrame, wxFrame) BEGIN_EVENT_TABLE(MainFrame, wxFrame)
EVT_MENU(QUIT, MainFrame::OnQuit) // Program End EVT_MENU(QUIT, MainFrame::OnQuit) // Program End
EVT_MENU(ABOUT, MainFrame::OnAbout) // Program Discription EVT_MENU(ABOUT, MainFrame::OnAbout) // Program Discription
EVT_MENU(HELP, MainFrame::OnHelp) // Program Help EVT_MENU(HELP, MainFrame::OnHelp) // Program Help
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
IMPLEMENT_APP(MainApp) // This declares wxApp::MainApp as "the" Application IMPLEMENT_APP(MainApp) // This declares wxApp::MainApp as "the" Application
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// 'Main program' equivalent, creating windows and returning main app frame // 'Main program' equivalent, creating windows and returning main app frame
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainApp::OnInit(void) // Does everything needed for a program start bool MainApp::OnInit(void) // Does everything needed for a program start
{ {
wxString Temp0; // Use as needed wxString Temp0; // Use as needed
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// set the language to use // Help.?? (.std = english, .de = german etc.) // set the language to use // Help.?? (.std = english, .de = german etc.)
const char *language = NULL; // czech, german, french, polish const char *language = NULL; // czech, german, french, polish
const char *langid = NULL; // std = english , cz, de = german, fr = french, pl = polish const char *langid = NULL; // std = english , cz, de = german, fr = french, pl = polish
wxString s_LangHelp; // Directory/Filename.hhp of the Help-Project file wxString s_LangHelp; // Directory/Filename.hhp of the Help-Project file
wxString s_LangId, s_Language; wxString s_LangId, s_Language;
s_Language.Empty(); s_LangId.Empty(); s_LangHelp.Empty(); s_Language.Empty(); s_LangId.Empty(); s_LangHelp.Empty();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
//-- Graphic File suport - use only when needed, otherwise big .exe's //-- Graphic File suport - use only when needed, otherwise big .exe's
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
#if wxUSE_LIBPNG #if wxUSE_LIBPNG
wxImage::AddHandler( new wxPNGHandler ); // needed for help System wxImage::AddHandler( new wxPNGHandler ); // needed for help System
#endif #endif
/* /*
#if wxUSE_LIBJPEG #if wxUSE_LIBJPEG
wxImage::AddHandler(new wxJPEGHandler ); // use only when needed, otherwise big .exe's wxImage::AddHandler(new wxJPEGHandler ); // use only when needed, otherwise big .exe's
#endif #endif
wxImage::AddHandler( new wxGIFHandler ); // use only when needed, otherwise big .exe's wxImage::AddHandler( new wxGIFHandler ); // use only when needed, otherwise big .exe's
wxImage::AddHandler( new wxPCXHandler ); // use only when needed, otherwise big .exe's wxImage::AddHandler( new wxPCXHandler ); // use only when needed, otherwise big .exe's
wxImage::AddHandler( new wxPNMHandler ); // use only when needed, otherwise big .exe's wxImage::AddHandler( new wxPNMHandler ); // use only when needed, otherwise big .exe's
*/ */
#ifdef __WXMSW__ #ifdef __WXMSW__
// wxBitmap::AddHandler( new wxXPMFileHandler ); // Attempt to use XPS instead of ico // wxBitmap::AddHandler( new wxXPMFileHandler ); // Attempt to use XPS instead of ico
// wxBitmap::AddHandler( new wxXPMDataHandler ); // - Attempt failed // wxBitmap::AddHandler( new wxXPMDataHandler ); // - Attempt failed
#endif #endif
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
switch ( argc ) switch ( argc )
{ {
default: default:
// ignore the other args, fall through // ignore the other args, fall through
case 3: case 3:
language = argv[2]; // czech, english, french, german , polish language = argv[2]; // czech, english, french, german , polish
langid = argv[1]; // cz, std, fr, de , pl langid = argv[1]; // cz, std, fr, de , pl
break; break;
case 2: case 2:
langid = argv[1]; // cz, std, fr, de , pl langid = argv[1]; // cz, std, fr, de , pl
break; break;
case 1: case 1:
break; break;
}; };
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Win-Registry : Workplace\HKEY_CURRENT_USERS\Software\%GetVendorName()\%GetAppName() // Win-Registry : Workplace\HKEY_CURRENT_USERS\Software\%GetVendorName()\%GetAppName()
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
SetVendorName("mj10777"); // Needed to get Configuration Information SetVendorName("mj10777"); // Needed to get Configuration Information
SetAppName("DBBrowse"); // "" , also needed for s_LangHelp SetAppName("DBBrowse"); // "" , also needed for s_LangHelp
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// we're using wxConfig's "create-on-demand" feature: it will create the // we're using wxConfig's "create-on-demand" feature: it will create the
// config object when it's used for the first time. It has a number of // config object when it's used for the first time. It has a number of
// advantages compared with explicitly creating our wxConfig: // advantages compared with explicitly creating our wxConfig:
// 1) we don't pay for it if we don't use it // 1) we don't pay for it if we don't use it
// 2) there is no danger to create it twice // 2) there is no danger to create it twice
// application and vendor name are used by wxConfig to construct the name // application and vendor name are used by wxConfig to construct the name
// of the config file/registry key and must be set before the first call // of the config file/registry key and must be set before the first call
// to Get() if you want to override the default values (the application // to Get() if you want to override the default values (the application
// name is the name of the executable and the vendor name is the same) // name is the name of the executable and the vendor name is the same)
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_ProgramCfg = wxConfigBase::Get(); // Get Program Configuration from Registry p_ProgramCfg = wxConfigBase::Get(); // Get Program Configuration from Registry
// p_ProgramCfg->DeleteAll(); // This is how the Config can be erased // p_ProgramCfg->DeleteAll(); // This is how the Config can be erased
p_ProgramCfg->SetPath("/"); // Start at root p_ProgramCfg->SetPath("/"); // Start at root
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
//-- Set the Language and remember it for the next time. -------------------------------- //-- Set the Language and remember it for the next time. --------------------------------
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (langid == NULL) // No Parameter was given if (langid == NULL) // No Parameter was given
{ {
Temp0.Empty(); Temp0.Empty();
p_ProgramCfg->Read("/Local/langid",&Temp0); // >const char *langid< can't be used here p_ProgramCfg->Read("/Local/langid",&Temp0); // >const char *langid< can't be used here
if (Temp0 == "") if (Temp0 == "")
langid = "std"; // Standard language is "std" = english langid = "std"; // Standard language is "std" = english
else else
langid = Temp0; langid = Temp0;
} }
Temp0.Printf("%s",langid); Temp0.Printf("%s",langid);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Support the following languages (std = english) // Support the following languages (std = english)
if ((Temp0 == "a") || (Temp0 == "cz") || (Temp0 == "de") || if ((Temp0 == "a") || (Temp0 == "cz") || (Temp0 == "de") ||
(Temp0 == "fr") || (Temp0 == "pl")) (Temp0 == "fr") || (Temp0 == "pl"))
{ // The three-letter language-string codes are only valid in Windows NT and Windows 95. { // The three-letter language-string codes are only valid in Windows NT and Windows 95.
if (Temp0 == "cz") if (Temp0 == "cz")
language = "czech"; // csy or czech language = "czech"; // csy or czech
if ((Temp0 == "de") || (Temp0 == "a")) if ((Temp0 == "de") || (Temp0 == "a"))
{ {
language = "german"; // deu or german language = "german"; // deu or german
if (Temp0 == "a") if (Temp0 == "a")
{ langid = Temp0 = "de"; } // Austrian = german { langid = Temp0 = "de"; } // Austrian = german
} // german / austrian } // german / austrian
if (Temp0 == "fr") if (Temp0 == "fr")
language = "french"; // fra or french language = "french"; // fra or french
if (Temp0 == "pl") if (Temp0 == "pl")
language = "polish"; // plk or polish language = "polish"; // plk or polish
if (!m_locale.Init(language, langid, language)) // Don't do this for english (std) if (!m_locale.Init(language, langid, language)) // Don't do this for english (std)
{ // You should recieve errors here for cz and pl since there is no cz/ and pl/ directory { // You should recieve errors here for cz and pl since there is no cz/ and pl/ directory
wxLogMessage("-E-> %s : SetLocale error : langid(%s) ; language(%s)",GetAppName().c_str(),langid,language); wxLogMessage("-E-> %s : SetLocale error : langid(%s) ; language(%s)",GetAppName().c_str(),langid,language);
langid = "std"; langid = "std";
language = "C"; // english, english-aus , -can , -nz , -uk , -usa language = "C"; // english, english-aus , -can , -nz , -uk , -usa
} }
else else
{ // Read in Foreign language's text for GetAppName() and Help { // Read in Foreign language's text for GetAppName() and Help
Temp0 = GetAppName(); Temp0 = GetAppName();
Temp0 = Temp0.Lower(); Temp0 = Temp0.Lower();
m_locale.AddCatalog(Temp0.c_str()); m_locale.AddCatalog(Temp0.c_str());
m_locale.AddCatalog("help"); m_locale.AddCatalog("help");
} }
} // Support the following languages (std = english) } // Support the following languages (std = english)
else else
{ {
langid = "std"; langid = "std";
language = "C"; // english, english-aus , -can , -nz , -uk , -usa language = "C"; // english, english-aus , -can , -nz , -uk , -usa
} }
s_Language.Printf("%s",language); // language is a pointer s_Language.Printf("%s",language); // language is a pointer
s_LangId.Printf("%s",langid); // langid is a pointer s_LangId.Printf("%s",langid); // langid is a pointer
p_ProgramCfg->Write("/Local/language",s_Language); p_ProgramCfg->Write("/Local/language",s_Language);
p_ProgramCfg->Write("/Local/langid",s_LangId); p_ProgramCfg->Write("/Local/langid",s_LangId);
s_LangHelp.Printf("help.%s/%s.hhp",s_LangId.c_str(),GetAppName().c_str()); // "help.std/Garantie.hhp"; s_LangHelp.Printf("help.%s/%s.hhp",s_LangId.c_str(),GetAppName().c_str()); // "help.std/Garantie.hhp";
s_LangHelp = s_LangHelp.Lower(); // A must for Linux s_LangHelp = s_LangHelp.Lower(); // A must for Linux
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
Temp0 = "NONE"; // I don't remember why I did this Temp0 = "NONE"; // I don't remember why I did this
p_ProgramCfg->Write("/NONE",Temp0); // I don't remember why I did this p_ProgramCfg->Write("/NONE",Temp0); // I don't remember why I did this
p_ProgramCfg->Write("/Paths/NONE",Temp0); // I don't remember why I did this p_ProgramCfg->Write("/Paths/NONE",Temp0); // I don't remember why I did this
p_ProgramCfg->Write("/MainFrame/NONE",Temp0); // I don't remember why I did this p_ProgramCfg->Write("/MainFrame/NONE",Temp0); // I don't remember why I did this
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_ProgramCfg->Write("/Paths/Work",wxGetCwd()); // Get current Working Path p_ProgramCfg->Write("/Paths/Work",wxGetCwd()); // Get current Working Path
p_ProgramCfg->SetPath("/"); p_ProgramCfg->SetPath("/");
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// restore frame position and size, if empty start Values (1,1) and (750,600) // restore frame position and size, if empty start Values (1,1) and (750,600)
int x = p_ProgramCfg->Read("/MainFrame/x", 1), y = p_ProgramCfg->Read("/MainFrame/y", 1), int x = p_ProgramCfg->Read("/MainFrame/x", 1), y = p_ProgramCfg->Read("/MainFrame/y", 1),
w = p_ProgramCfg->Read("/MainFrame/w", 750), h = p_ProgramCfg->Read("/MainFrame/h", 600); w = p_ProgramCfg->Read("/MainFrame/w", 750), h = p_ProgramCfg->Read("/MainFrame/h", 600);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Create the main frame window // Create the main frame window
Temp0.Printf("%s - %s",GetAppName().c_str(),GetVendorName().c_str()); Temp0.Printf("%s - %s",GetAppName().c_str(),GetVendorName().c_str());
frame = new MainFrame((wxFrame *) NULL,(char *) Temp0.c_str(),wxPoint(x,y),wxSize(w,h)); frame = new MainFrame((wxFrame *) NULL,(char *) Temp0.c_str(),wxPoint(x,y),wxSize(w,h));
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Set the Backgroundcolour (only need if your are NOT using wxSYS_COLOUR_BACKGROUND) // Set the Backgroundcolour (only need if your are NOT using wxSYS_COLOUR_BACKGROUND)
frame->SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BACKGROUND)); frame->SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BACKGROUND));
// frame->SetBackgroundColour(wxColour(255, 255, 255)); // frame->SetBackgroundColour(wxColour(255, 255, 255));
// frame->SetBackgroundColour(* wxWHITE); // frame->SetBackgroundColour(* wxWHITE);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Give it an icon // Give it an icon
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// 12.02.2000 - Guillermo Rodriguez Garcia : // 12.02.2000 - Guillermo Rodriguez Garcia :
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// This is different for Win9x and WinNT; one of them takes the first ico // This is different for Win9x and WinNT; one of them takes the first ico
// in the .rc file, while the other takes the icon with the lowest name, // in the .rc file, while the other takes the icon with the lowest name,
// so to be sure that it always work, put your icon the first *and* give // so to be sure that it always work, put your icon the first *and* give
// it a name such a 'appicon' or something. // it a name such a 'appicon' or something.
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// mj10777 : any special rule in Linux ? // mj10777 : any special rule in Linux ?
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
frame->SetIcon(wxICON(aLogo)); // lowest name and first entry in RC File frame->SetIcon(wxICON(aLogo)); // lowest name and first entry in RC File
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Make a menubar // Make a menubar
wxMenu *file_menu = new wxMenu; wxMenu *file_menu = new wxMenu;
wxMenu *help_menu = new wxMenu; wxMenu *help_menu = new wxMenu;
help_menu->Append(HELP, _("&Help")); help_menu->Append(HELP, _("&Help"));
help_menu->AppendSeparator(); help_menu->AppendSeparator();
help_menu->Append(ABOUT, _("&About")); help_menu->Append(ABOUT, _("&About"));
file_menu->Append(QUIT, _("E&xit")); file_menu->Append(QUIT, _("E&xit"));
wxMenuBar *menu_bar = new wxMenuBar; wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, _("&File")); menu_bar->Append(file_menu, _("&File"));
menu_bar->Append(help_menu, _("&Help")); menu_bar->Append(help_menu, _("&Help"));
frame->SetMenuBar(menu_bar); frame->SetMenuBar(menu_bar);
frame->CreateStatusBar(1); frame->CreateStatusBar(1);
Temp0.Printf(_("%s has started !"),p_ProgramCfg->GetAppName().c_str()); Temp0.Printf(_("%s has started !"),p_ProgramCfg->GetAppName().c_str());
frame->SetStatusText(Temp0, 0); frame->SetStatusText(Temp0, 0);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
int width, height; int width, height;
frame->GetClientSize(&width, &height); frame->GetClientSize(&width, &height);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
frame->p_Splitter = new DocSplitterWindow(frame,-1); frame->p_Splitter = new DocSplitterWindow(frame,-1);
// p_Splitter->SetCursor(wxCursor(wxCURSOR_PENCIL)); // p_Splitter->SetCursor(wxCursor(wxCURSOR_PENCIL));
frame->pDoc = new MainDoc(); frame->pDoc = new MainDoc();
frame->pDoc->p_MainFrame = frame; frame->pDoc->p_MainFrame = frame;
frame->pDoc->p_Splitter = frame->p_Splitter; frame->pDoc->p_Splitter = frame->p_Splitter;
frame->pDoc->p_Splitter->pDoc = frame->pDoc; // ControlBase: saving the Sash frame->pDoc->p_Splitter->pDoc = frame->pDoc; // ControlBase: saving the Sash
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
//-- Problem : GetClientSize(Width,Hight) are not the same as the values given in the --- //-- Problem : GetClientSize(Width,Hight) are not the same as the values given in the ---
//-- construction of the Frame. --- //-- construction of the Frame. ---
//-- Solved : GetClientSize is called here and the difference is noted. When the --- //-- Solved : GetClientSize is called here and the difference is noted. When the ---
//-- Window is closed the diff. is added to the result of GetClientSize. --- //-- Window is closed the diff. is added to the result of GetClientSize. ---
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
frame->GetClientSize(&frame->DiffW, &frame->DiffH); frame->DiffW-=w; frame->DiffH-=h; frame->GetClientSize(&frame->DiffW, &frame->DiffH); frame->DiffW-=w; frame->DiffH-=h;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
//-- Help : Load the help.%langid/%GetAppName().hhp (help.std/dbbrowse.hhp) file --- //-- Help : Load the help.%langid/%GetAppName().hhp (help.std/dbbrowse.hhp) file ---
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
frame->p_Help = new wxHtmlHelpController(); // construct the Help System frame->p_Help = new wxHtmlHelpController(); // construct the Help System
frame->p_Help->UseConfig(p_ProgramCfg); // Don't rember what this was for frame->p_Help->UseConfig(p_ProgramCfg); // Don't rember what this was for
// You should recieve errors here for fr since there is no help.fr/ directory // You should recieve errors here for fr since there is no help.fr/ directory
if (!frame->p_Help->AddBook(s_LangHelp)) // Use the language set if (!frame->p_Help->AddBook(s_LangHelp)) // Use the language set
{ // You should recieve errors here for fr since there is no help.fr/ but a fr/ directory { // You should recieve errors here for fr since there is no help.fr/ but a fr/ directory
wxLogMessage("-E-> %s : AddBook error : s_LangHelp(%s)",GetAppName().c_str(),s_LangHelp.c_str()); wxLogMessage("-E-> %s : AddBook error : s_LangHelp(%s)",GetAppName().c_str(),s_LangHelp.c_str());
} }
frame->pDoc->p_Help = frame->p_Help; // Save the information to the document frame->pDoc->p_Help = frame->p_Help; // Save the information to the document
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
frame->Show(TRUE); // Show the frame frame->Show(TRUE); // Show the frame
SetTopWindow(frame); // At this point the frame can be seen SetTopWindow(frame); // At this point the frame can be seen
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// If you need a "Splash Screen" because of a long OnNewDocument, do it here // If you need a "Splash Screen" because of a long OnNewDocument, do it here
if (!frame->pDoc->OnNewDocument()) if (!frame->pDoc->OnNewDocument())
frame->Close(TRUE); frame->Close(TRUE);
// Kill a "Splash Screen" because OnNewDocument, if you have one // Kill a "Splash Screen" because OnNewDocument, if you have one
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_ProgramCfg->Flush(TRUE); // save the configuration p_ProgramCfg->Flush(TRUE); // save the configuration
return TRUE; return TRUE;
} // bool MainApp::OnInit(void) } // bool MainApp::OnInit(void)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// My frame constructor // My frame constructor
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
MainFrame::MainFrame(wxFrame *frame, char *title, const wxPoint& pos, const wxSize& size): MainFrame::MainFrame(wxFrame *frame, char *title, const wxPoint& pos, const wxSize& size):
wxFrame(frame, -1, title, pos, size) wxFrame(frame, -1, title, pos, size)
{ {
p_Splitter = NULL; pDoc = NULL; p_Help = NULL; // Keep the Pointers clean ! p_Splitter = NULL; pDoc = NULL; p_Help = NULL; // Keep the Pointers clean !
//--- Everything else is done in MainApp::OnInit() -------------------------------------- //--- Everything else is done in MainApp::OnInit() --------------------------------------
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
MainFrame::~MainFrame(void) MainFrame::~MainFrame(void)
{ {
// Close the help frame; this will cause the config data to get written. // Close the help frame; this will cause the config data to get written.
if (p_Help->GetFrame()) // returns NULL if no help frame active if (p_Help->GetFrame()) // returns NULL if no help frame active
p_Help->GetFrame()->Close(TRUE); p_Help->GetFrame()->Close(TRUE);
delete p_Help; // Memory Leak delete p_Help; // Memory Leak
p_Help = NULL; p_Help = NULL;
// save the control's values to the config // save the control's values to the config
if (p_ProgramCfg == NULL) if (p_ProgramCfg == NULL)
return; return;
// save the frame position before it is destroyed // save the frame position before it is destroyed
int x, y, w, h; int x, y, w, h;
GetPosition(&x, &y); GetPosition(&x, &y);
GetClientSize(&w, &h); w -= DiffW; h -= DiffH; GetClientSize(&w, &h); w -= DiffW; h -= DiffH;
p_ProgramCfg->Write("/MainFrame/x", (long) x); p_ProgramCfg->Write("/MainFrame/x", (long) x);
p_ProgramCfg->Write("/MainFrame/y", (long) y); p_ProgramCfg->Write("/MainFrame/y", (long) y);
p_ProgramCfg->Write("/MainFrame/w", (long) w); p_ProgramCfg->Write("/MainFrame/w", (long) w);
p_ProgramCfg->Write("/MainFrame/h", (long) h); p_ProgramCfg->Write("/MainFrame/h", (long) h);
p_ProgramCfg->Write("/MainFrame/Sash", (long) pDoc->Sash); p_ProgramCfg->Write("/MainFrame/Sash", (long) pDoc->Sash);
// clean up: Set() returns the active config object as Get() does, but unlike // clean up: Set() returns the active config object as Get() does, but unlike
// Get() it doesn't try to create one if there is none (definitely not what // Get() it doesn't try to create one if there is none (definitely not what
// we want here!) // we want here!)
// delete wxConfigBase::Set((wxConfigBase *) NULL); // delete wxConfigBase::Set((wxConfigBase *) NULL);
p_ProgramCfg->Flush(TRUE); // saves Objekt p_ProgramCfg->Flush(TRUE); // saves Objekt
if (pDoc) // If we have a Valid Document if (pDoc) // If we have a Valid Document
delete pDoc; // Cleanup (MainDoc::~MainDoc) delete pDoc; // Cleanup (MainDoc::~MainDoc)
} // MainFrame::~MainFrame(void) } // MainFrame::~MainFrame(void)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void MainFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void MainFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{ {
Close(TRUE); Close(TRUE);
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{ {
wxString Temp0, Temp1; wxString Temp0, Temp1;
Temp0.Printf(_("%s\nMark Johnson\nBerlin, Germany\nmj10777@gmx.net\n (c) 2000"),p_ProgramCfg->GetAppName().c_str()); Temp0.Printf(_("%s\nMark Johnson\nBerlin, Germany\nmj10777@gmx.net\n (c) 2000"),p_ProgramCfg->GetAppName().c_str());
Temp1.Printf(_("About %s"),p_ProgramCfg->GetAppName().c_str()); Temp1.Printf(_("About %s"),p_ProgramCfg->GetAppName().c_str());
wxMessageDialog dialog(this, Temp0,Temp1,wxOK|wxCANCEL); wxMessageDialog dialog(this, Temp0,Temp1,wxOK|wxCANCEL);
dialog.ShowModal(); dialog.ShowModal();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void MainFrame::OnHelp(wxCommandEvent& WXUNUSED(event)) void MainFrame::OnHelp(wxCommandEvent& WXUNUSED(event))
{ {
p_Help->Display("Main page"); p_Help->Display("Main page");
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -12,34 +12,37 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainFrame: public wxFrame class MainFrame: public wxFrame
{ {
public: public:
MainFrame(wxFrame *frame, char *title, const wxPoint& pos, const wxSize& size); MainFrame(wxFrame *frame, char *title, const wxPoint& pos, const wxSize& size);
~MainFrame(void); ~MainFrame(void);
public:
// menu callbacks
void OnAbout(wxCommandEvent& event);
void OnHelp(wxCommandEvent& event);
void OnQuit(wxCommandEvent& event);
//--------------------------------------------------------------------------------------
int DiffW, DiffH; // Needed the saving of Frame size
//--------------------------------------------------------------------------------------
DocSplitterWindow *p_Splitter; // for Document Views
MainDoc *pDoc; // Self made Document
wxHtmlHelpController *p_Help; // Help System
public: //--------------------------------------------------------------------------------------
// menu callbacks DECLARE_EVENT_TABLE()
void OnAbout(wxCommandEvent& event);
void OnHelp(wxCommandEvent& event);
void OnQuit(wxCommandEvent& event);
//--------------------------------------------------------------------------------------
int DiffW, DiffH; // Needed the saving of Frame size
//--------------------------------------------------------------------------------------
DocSplitterWindow *p_Splitter; // for Document Views
MainDoc *pDoc; // Self made Document
wxHtmlHelpController *p_Help; // Help System
//--------------------------------------------------------------------------------------
DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Define a new application type // Define a new application type
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainApp: public wxApp class MainApp: public wxApp
{ {
public: public:
MainFrame *frame; // The one and only MainFrame MainFrame *frame; // The one and only MainFrame
bool OnInit(void); // Programmstart bool OnInit(void); // Programmstart
wxLocale m_locale; // locale we'll be using and language support - MUST be here ! wxLocale m_locale; // locale we'll be using and language support - MUST be here !
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// ID for the menu quit command // ID for the menu quit command
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -31,28 +31,29 @@
#include "std.h" // sorgsam Pflegen ! #include "std.h" // sorgsam Pflegen !
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(DBGrid, wxGrid) BEGIN_EVENT_TABLE(DBGrid, wxGrid)
EVT_MOTION (DBGrid::OnMouseMove) EVT_MOTION (DBGrid::OnMouseMove)
// DBGrid // DBGrid
// ------------ // ------------
EVT_GRID_CELL_CHANGE( DBGrid::OnCellChange ) EVT_GRID_CELL_CHANGE( DBGrid::OnCellChange )
EVT_GRID_CELL_LEFT_CLICK( DBGrid::OnCellLeftClick ) EVT_GRID_CELL_LEFT_CLICK( DBGrid::OnCellLeftClick )
EVT_GRID_CELL_LEFT_DCLICK( DBGrid::OnCellLeftDClick ) EVT_GRID_CELL_LEFT_DCLICK( DBGrid::OnCellLeftDClick )
EVT_GRID_CELL_RIGHT_CLICK( DBGrid::OnCellRightClick ) EVT_GRID_CELL_RIGHT_CLICK( DBGrid::OnCellRightClick )
EVT_GRID_CELL_RIGHT_DCLICK( DBGrid::OnCellRightDClick ) EVT_GRID_CELL_RIGHT_DCLICK( DBGrid::OnCellRightDClick )
// EVT_GRID_COL_SIZE( DBGrid::OnColSize ) // EVT_GRID_COL_SIZE( DBGrid::OnColSize )
// EVT_GRID_ROW_SIZE( DBGrid::OnRowSize ) // EVT_GRID_ROW_SIZE( DBGrid::OnRowSize )
EVT_GRID_EDITOR_SHOWN( DBGrid::OnEditorShown ) EVT_GRID_EDITOR_SHOWN( DBGrid::OnEditorShown )
EVT_GRID_EDITOR_HIDDEN( DBGrid::OnEditorHidden ) EVT_GRID_EDITOR_HIDDEN( DBGrid::OnEditorHidden )
EVT_GRID_LABEL_LEFT_CLICK( DBGrid::OnLabelLeftClick ) EVT_GRID_LABEL_LEFT_CLICK( DBGrid::OnLabelLeftClick )
EVT_GRID_LABEL_LEFT_DCLICK( DBGrid::OnLabelLeftDClick ) EVT_GRID_LABEL_LEFT_DCLICK( DBGrid::OnLabelLeftDClick )
EVT_GRID_LABEL_RIGHT_CLICK( DBGrid::OnLabelRightClick ) EVT_GRID_LABEL_RIGHT_CLICK( DBGrid::OnLabelRightClick )
EVT_GRID_LABEL_RIGHT_DCLICK( DBGrid::OnLabelRightDClick ) EVT_GRID_LABEL_RIGHT_DCLICK( DBGrid::OnLabelRightDClick )
EVT_GRID_RANGE_SELECT( DBGrid::OnRangeSelected ) EVT_GRID_RANGE_SELECT( DBGrid::OnRangeSelected )
EVT_GRID_ROW_SIZE( DBGrid::OnRowSize ) EVT_GRID_ROW_SIZE( DBGrid::OnRowSize )
EVT_GRID_SELECT_CELL( DBGrid::OnSelectCell ) EVT_GRID_SELECT_CELL( DBGrid::OnSelectCell )
EVT_MENU(GRID_EDIT,DBGrid::OnModusEdit) EVT_MENU(GRID_EDIT,DBGrid::OnModusEdit)
EVT_MENU(GRID_BROWSE,DBGrid::OnModusBrowse) EVT_MENU(GRID_BROWSE,DBGrid::OnModusBrowse)
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// wxListCtrl(parent, id, pos, size, style) // wxListCtrl(parent, id, pos, size, style)
// wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) ); // wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) );
@@ -62,340 +63,364 @@ END_EVENT_TABLE()
// DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size): // DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size):
// wxGrid(parent, id, pos, size) // wxGrid(parent, id, pos, size)
DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style): DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style):
wxGrid(parent, id, pos, size, style) wxGrid(parent, id, pos, size, style)
{ {
b_EditModus = FALSE; b_EditModus = FALSE;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
popupMenu1 = new wxMenu(""); popupMenu1 = new wxMenu("");
popupMenu1->Append(GRID_EDIT, _("Edit Modus")); popupMenu1->Append(GRID_EDIT, _("Edit Modus"));
popupMenu2 = new wxMenu(""); popupMenu2 = new wxMenu("");
popupMenu2->Append(GRID_BROWSE, _("Browse Modus")); popupMenu2->Append(GRID_BROWSE, _("Browse Modus"));
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DBGrid::~DBGrid() DBGrid::~DBGrid()
{ {
delete popupMenu1; delete popupMenu1;
delete popupMenu2; delete popupMenu2;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
int DBGrid::OnTableView(wxString Table) int DBGrid::OnTableView(wxString Table)
{ {
wxStopWatch sw; wxStopWatch sw;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
int i=0,x,y,z, ValidTable=0; int i=0,x,y,z, ValidTable=0;
wxString Temp0; wxString Temp0;
wxBeginBusyCursor(); wxBeginBusyCursor();
SetDefaultCellFont(* pDoc->ft_Doc); SetDefaultCellFont(* pDoc->ft_Doc);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
ct_BrowserDB = (db_Br+i_Which)->ct_BrowserDB; // Get the DSN Pointer ct_BrowserDB = (db_Br+i_Which)->ct_BrowserDB; // Get the DSN Pointer
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (ct_BrowserDB) // Valid pointer (!= NULL) ? if (ct_BrowserDB) // Valid pointer (!= NULL) ?
{ // Pointer is Valid, use the wxDatabase Information { // Pointer is Valid, use the wxDatabase Information
for (x=0;x<ct_BrowserDB->numTables;x++) // go through the Tables for (x=0;x<ct_BrowserDB->numTables;x++) // go through the Tables
{ {
if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableName,Table)) // is this our Table ? if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableName,Table)) // is this our Table ?
{ // Yes, the Data of this Table shall be put into the Grid { // Yes, the Data of this Table shall be put into the Grid
ValidTable = x; // Save the Tablenumber ValidTable = x; // Save the Tablenumber
(db_Br+i_Which)->OnSelect(Table,FALSE); // Select * from "table" (db_Br+i_Which)->OnSelect(Table,FALSE); // Select * from "table"
// Set the local Pointer to the Column Information we are going to use // Set the local Pointer to the Column Information we are going to use
(db_Br+i_Which)->cl_BrowserDB = (ct_BrowserDB->pTableInf+x)->pColInf; (db_Br+i_Which)->cl_BrowserDB = (ct_BrowserDB->pTableInf+x)->pColInf;
if ((ct_BrowserDB->pTableInf+x)->pColInf) // Valid pointer (!= NULL) ? if ((ct_BrowserDB->pTableInf+x)->pColInf) // Valid pointer (!= NULL) ?
{ // Pointer is Valid, Column Informationen sind Vorhanden { // Pointer is Valid, Column Informationen sind Vorhanden
i = (db_Br+i_Which)->i_Records; // How many Records are there i = (db_Br+i_Which)->i_Records; // How many Records are there
(db_Br+i_Which)->i_Which = ValidTable; // Still used ???? mj10777 (db_Br+i_Which)->i_Which = ValidTable; // Still used ???? mj10777
if (i == 0) // If the Table is empty, then show one empty row if (i == 0) // If the Table is empty, then show one empty row
i++; i++;
// wxLogMessage(_("\n-I-> DBGrid::OnTableView() : Vor CreateGrid")); // wxLogMessage(_("\n-I-> DBGrid::OnTableView() : Vor CreateGrid"));
CreateGrid(i,(ct_BrowserDB->pTableInf+x)->numCols); // Records , Columns CreateGrid(i,(ct_BrowserDB->pTableInf+x)->numCols); // Records , Columns
for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) // Loop through the Fields for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) // Loop through the Fields
{ // The Field / Column name is used here as Row Titel { // The Field / Column name is used here as Row Titel
SetColLabelValue(y,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); SetColLabelValue(y,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
SetColSize(y,95); SetColSize(y,95);
} // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
SetColSize(((ct_BrowserDB->pTableInf+x)->numCols-1),120); // Make the last Column Wider SetColSize(((ct_BrowserDB->pTableInf+x)->numCols-1),120); // Make the last Column Wider
// The Grid has been created, now fill it // The Grid has been created, now fill it
for (z=0;z<(db_Br+i_Which)->i_Records;z++) // Loop through the Records for (z=0;z<(db_Br+i_Which)->i_Records;z++) // Loop through the Records
{ {
Temp0.Printf("%06d",z+1); SetRowLabelValue(z,Temp0); // Set Row Lable Value Temp0.Printf("%06d",z+1); SetRowLabelValue(z,Temp0); // Set Row Lable Value
(db_Br+i_Which)->OnGetNext((ct_BrowserDB->pTableInf+ValidTable)->numCols,FALSE); (db_Br+i_Which)->OnGetNext((ct_BrowserDB->pTableInf+ValidTable)->numCols,FALSE);
for (y=0;y<(ct_BrowserDB->pTableInf+ValidTable)->numCols;y++) // Loop through the Fields for (y=0;y<(ct_BrowserDB->pTableInf+ValidTable)->numCols;y++) // Loop through the Fields
{ // BrowserDB::OnGetNext Formats the field Value into tablename { // BrowserDB::OnGetNext Formats the field Value into tablename
SetCellValue(z, y,((db_Br+i_Which)->cl_BrowserDB+y)->tableName); SetCellValue(z, y,((db_Br+i_Which)->cl_BrowserDB+y)->tableName);
} }
if (z % 50 == 0) if (z % 50 == 0)
{ {
Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d (from %d) has been read."),Table.c_str(),z,(db_Br+i_Which)->i_Records); Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d (from %d) has been read."),Table.c_str(),z,(db_Br+i_Which)->i_Records);
pDoc->p_MainFrame->SetStatusText(Temp0, 0); pDoc->p_MainFrame->SetStatusText(Temp0, 0);
} }
} // for (z=0;z<(db_Br+i_Which)->i_Records;z++) } // for (z=0;z<(db_Br+i_Which)->i_Records;z++)
Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read. - Time needed : %ld ms"),Table.c_str(),z,sw.Time()); Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read. - Time needed : %ld ms"),Table.c_str(),z,sw.Time());
wxLogMessage(Temp0); wxLogMessage(Temp0);
pDoc->p_MainFrame->SetStatusText(Temp0, 0); pDoc->p_MainFrame->SetStatusText(Temp0, 0);
// The Grid has been filled, now leave // The Grid has been filled, now leave
goto Weiter; goto Weiter;
} // if ((ct_BrowserDB->pTableInf+x)->pColInf) } // if ((ct_BrowserDB->pTableInf+x)->pColInf)
else
wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid Column Pointer : Failed"));
} // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE")
} // for (x=0;x<ct_BrowserDB->numTables;x++)
} // if (ct_BrowserDB)
else else
wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid Column Pointer : Failed")); wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid DSN Pointer : Failed"));
} // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE") //---------------------------------------------------------------------------------------
} // for (x=0;x<ct_BrowserDB->numTables;x++) Weiter:
} // if (ct_BrowserDB) EnableEditing(b_EditModus); // Deactivate in-place Editing
else wxEndBusyCursor();
wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid DSN Pointer : Failed")); //---------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------- wxLogMessage(_("-I-> DBGrid::OnTableView() - End"));
Weiter: return 0;
EnableEditing(b_EditModus); // Deactivate in-place Editing
wxEndBusyCursor();
//---------------------------------------------------------------------------------------
wxLogMessage(_("-I-> DBGrid::OnTableView() - End"));
return 0;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnModusEdit(wxCommandEvent& event) void DBGrid::OnModusEdit(wxCommandEvent& event)
{ {
b_EditModus = TRUE; // Needed by PopupMenu b_EditModus = TRUE; // Needed by PopupMenu
EnableEditing(b_EditModus); // Activate in-place Editing EnableEditing(b_EditModus); // Activate in-place Editing
UpdateDimensions(); // Redraw the Grid UpdateDimensions(); // Redraw the Grid
// wxLogMessage(_("-I-> DBGrid::OnModusEdit() - End")); // wxLogMessage(_("-I-> DBGrid::OnModusEdit() - End"));
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnModusBrowse(wxCommandEvent& event) void DBGrid::OnModusBrowse(wxCommandEvent& event)
{ {
b_EditModus = FALSE; // Needed by PopupMenu b_EditModus = FALSE; // Needed by PopupMenu
EnableEditing(b_EditModus); // Deactivate in-place Editing EnableEditing(b_EditModus); // Deactivate in-place Editing
UpdateDimensions(); // Redraw the Grid UpdateDimensions(); // Redraw the Grid
// wxLogMessage(_("-I-> DBGrid::OnModusBrowse() - End")); // wxLogMessage(_("-I-> DBGrid::OnModusBrowse() - End"));
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnEditorShown( wxGridEvent& ev ) void DBGrid::OnEditorShown( wxGridEvent& ev )
{ {
// wxLogMessage(_("-I-> DBGrid::OnEditorShown() - End")); // wxLogMessage(_("-I-> DBGrid::OnEditorShown() - End"));
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnEditorHidden( wxGridEvent& ev ) void DBGrid::OnEditorHidden( wxGridEvent& ev )
{ {
// wxLogMessage(_("-I-> DBGrid::OnEditorHidden() - End")); // wxLogMessage(_("-I-> DBGrid::OnEditorHidden() - End"));
ev.Skip(); ev.Skip();
} }
//----------------------------------------------------------------------------------------
void DBGrid::OnSelectCell( wxGridEvent& ev ) void DBGrid::OnSelectCell( wxGridEvent& ev )
{ {
logBuf = ""; logBuf = "";
logBuf << "Selected cell at row " << ev.GetRow() logBuf << "Selected cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
wxLogMessage( "%s", logBuf.c_str() ); wxLogMessage( "%s", logBuf.c_str() );
// you must call Skip() if you want the default processing // you must call Skip() if you want the default processing
// to occur in wxGrid // to occur in wxGrid
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnMouseMove(wxMouseEvent &event) void DBGrid::OnMouseMove(wxMouseEvent &event)
{ {
MousePos = event.GetPosition(); MousePos = event.GetPosition();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnLabelLeftClick( wxGridEvent& ev ) void DBGrid::OnLabelLeftClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnLabelLeftClick : "; logBuf = "DBGrid::OnLabelLeftClick : ";
if ( ev.GetRow() != -1 ) if ( ev.GetRow() != -1 )
{ {
logBuf << "row label " << ev.GetRow(); logBuf << "row label " << ev.GetRow();
} }
else if ( ev.GetCol() != -1 ) else if ( ev.GetCol() != -1 )
{ {
logBuf << "col label " << ev.GetCol(); logBuf << "col label " << ev.GetCol();
} }
else else
{ {
logBuf << "corner label"; logBuf << "corner label";
} }
if ( ev.ShiftDown() ) if ( ev.ShiftDown() )
logBuf << " (shift down)"; logBuf << " (shift down)";
// wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; // wxLogMessage( "%s", logBuf.c_str() );
wxLogMessage(logBuf.c_str()); logBuf += "\n";
ev.Skip(); wxLogMessage(logBuf.c_str());
ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnLabelRightClick( wxGridEvent& ev ) void DBGrid::OnLabelRightClick( wxGridEvent& ev )
{ {
//------------------------------------------------------- //-------------------------------------------------------
if (b_EditModus) if (b_EditModus)
PopupMenu(popupMenu2,MousePos.x,MousePos.y); PopupMenu(popupMenu2,MousePos.x,MousePos.y);
else else
PopupMenu(popupMenu1,MousePos.x,MousePos.y); PopupMenu(popupMenu1,MousePos.x,MousePos.y);
//------------------- //-------------------
logBuf = "DBGrid::OnLabelRightClick : "; logBuf = "DBGrid::OnLabelRightClick : ";
if ( ev.GetRow() != -1 ) if ( ev.GetRow() != -1 )
{ {
logBuf << "row label " << ev.GetRow(); logBuf << "row label " << ev.GetRow();
} }
else if ( ev.GetCol() != -1 ) else if ( ev.GetCol() != -1 )
{ {
logBuf << "col label " << ev.GetCol(); logBuf << "col label " << ev.GetCol();
} }
else else
{ {
logBuf << "corner label"; logBuf << "corner label";
} }
if ( ev.ShiftDown() ) if ( ev.ShiftDown() )
logBuf << " (shift down)"; logBuf << " (shift down)";
// wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; // wxLogMessage( "%s", logBuf.c_str() );
wxLogMessage(logBuf.c_str()); logBuf += "\n";
ev.Skip(); wxLogMessage(logBuf.c_str());
ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnLabelLeftDClick( wxGridEvent& ev ) void DBGrid::OnLabelLeftDClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnLabelLeftDClick : "; logBuf = "DBGrid::OnLabelLeftDClick : ";
if ( ev.GetRow() != -1 ) if ( ev.GetRow() != -1 )
{ {
logBuf << "row label " << ev.GetRow(); logBuf << "row label " << ev.GetRow();
} }
else if ( ev.GetCol() != -1 ) else if ( ev.GetCol() != -1 )
{ {
logBuf << "col label " << ev.GetCol(); logBuf << "col label " << ev.GetCol();
} }
else else
{ {
logBuf << "corner label"; logBuf << "corner label";
} }
if ( ev.ShiftDown() ) if ( ev.ShiftDown() )
logBuf << " (shift down)"; logBuf << " (shift down)";
// wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; // wxLogMessage( "%s", logBuf.c_str() );
wxLogMessage(logBuf.c_str()); logBuf += "\n";
ev.Skip(); wxLogMessage(logBuf.c_str());
ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnLabelRightDClick( wxGridEvent& ev ) void DBGrid::OnLabelRightDClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnLabelRightDClick : "; logBuf = "DBGrid::OnLabelRightDClick : ";
if ( ev.GetRow() != -1 ) if ( ev.GetRow() != -1 )
{ {
logBuf << "row label " << ev.GetRow(); logBuf << "row label " << ev.GetRow();
} }
else if ( ev.GetCol() != -1 ) else if ( ev.GetCol() != -1 )
{ {
logBuf << "col label " << ev.GetCol(); logBuf << "col label " << ev.GetCol();
} }
else else
{ {
logBuf << "corner label"; logBuf << "corner label";
} }
if ( ev.ShiftDown() ) if ( ev.ShiftDown() )
logBuf << " (shift down)"; logBuf << " (shift down)";
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnCellLeftClick( wxGridEvent& ev ) void DBGrid::OnCellLeftClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnCellLeftClick : "; logBuf = "DBGrid::OnCellLeftClick : ";
logBuf << "Cell at row " << ev.GetRow() logBuf << "Cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
// wxMessageBox(logBuf); // wxMessageBox(logBuf);
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
// you must call event skip if you want default grid processing // you must call event skip if you want default grid processing
// (cell highlighting etc.) // (cell highlighting etc.)
// //
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnCellRightClick( wxGridEvent& ev ) void DBGrid::OnCellRightClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnCellRightClick : "; logBuf = "DBGrid::OnCellRightClick : ";
logBuf << "Cell at row " << ev.GetRow() logBuf << "Cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
// wxMessageBox(logBuf); // wxMessageBox(logBuf);
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
// you must call event skip if you want default grid processing // you must call event skip if you want default grid processing
// (cell highlighting etc.) // (cell highlighting etc.)
// //
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnCellLeftDClick( wxGridEvent& ev ) void DBGrid::OnCellLeftDClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnCellLeftDClick : "; logBuf = "DBGrid::OnCellLeftDClick : ";
logBuf << "Cell at row " << ev.GetRow() logBuf << "Cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
// wxMessageBox(logBuf); // wxMessageBox(logBuf);
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
// you must call event skip if you want default grid processing // you must call event skip if you want default grid processing
// (cell highlighting etc.) // (cell highlighting etc.)
// //
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnCellRightDClick( wxGridEvent& ev ) void DBGrid::OnCellRightDClick( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnCellRightDClick : "; logBuf = "DBGrid::OnCellRightDClick : ";
logBuf << "Cell at row " << ev.GetRow() logBuf << "Cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
// wxMessageBox(logBuf); // wxMessageBox(logBuf);
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
// you must call event skip if you want default grid processing // you must call event skip if you want default grid processing
// (cell highlighting etc.) // (cell highlighting etc.)
// //
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnCellChange( wxGridEvent& ev ) void DBGrid::OnCellChange( wxGridEvent& ev )
{ {
logBuf = "DBGrid::OnCellChange : "; logBuf = "DBGrid::OnCellChange : ";
logBuf << "Cell at row " << ev.GetRow() logBuf << "Cell at row " << ev.GetRow()
<< " col " << ev.GetCol(); << " col " << ev.GetCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
// wxMessageBox(logBuf); // wxMessageBox(logBuf);
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
// you must call event skip if you want default grid processing // you must call event skip if you want default grid processing
// (cell highlighting etc.) // (cell highlighting etc.)
// //
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnRowSize( wxGridSizeEvent& ev ) void DBGrid::OnRowSize( wxGridSizeEvent& ev )
{ {
logBuf = "DBGrid::OnRowSize : "; logBuf = "DBGrid::OnRowSize : ";
logBuf << "Resized row " << ev.GetRowOrCol(); logBuf << "Resized row " << ev.GetRowOrCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnColSize( wxGridSizeEvent& ev ) void DBGrid::OnColSize( wxGridSizeEvent& ev )
{ {
logBuf = "DBGrid::OnColSize : "; logBuf = "DBGrid::OnColSize : ";
logBuf << "Resized col " << ev.GetRowOrCol(); logBuf << "Resized col " << ev.GetRowOrCol();
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
logBuf += "\n"; logBuf += "\n";
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBGrid::OnRangeSelected( wxGridRangeSelectEvent& ev ) void DBGrid::OnRangeSelected( wxGridRangeSelectEvent& ev )
{ {
logBuf = "DBGrid::OnRangeSelected : "; logBuf = "DBGrid::OnRangeSelected : ";
logBuf << "Selected cells from row " << ev.GetTopRow() logBuf << "Selected cells from row " << ev.GetTopRow()
<< " col " << ev.GetLeftCol() << " col " << ev.GetLeftCol()
<< " to row " << ev.GetBottomRow() << " to row " << ev.GetBottomRow()
<< " col " << ev.GetRightCol(); << " col " << ev.GetRightCol();
logBuf += "\n"; logBuf += "\n";
// wxLogMessage( "%s", logBuf.c_str() ); // wxLogMessage( "%s", logBuf.c_str() );
wxLogMessage(logBuf.c_str()); wxLogMessage(logBuf.c_str());
ev.Skip(); ev.Skip();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -9,57 +9,61 @@
// RCS-ID: $Id$ // RCS-ID: $Id$
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#if !defined(wxUSE_NEW_GRID) || !(wxUSE_NEW_GRID) #if !defined(wxUSE_NEW_GRID) || !(wxUSE_NEW_GRID)
#error "DBGrid requires the new wxGrid class" #error "DBGrid requires the new wxGrid class"
#endif #endif
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainDoc; class MainDoc;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class DBGrid: public wxGrid class DBGrid: public wxGrid
{ {
public: public:
DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style); DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style);
virtual ~DBGrid(); virtual ~DBGrid();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
int i_TabArt; // Tab = 0 ; Page = 1; int i_TabArt; // Tab = 0 ; Page = 1;
int i_ViewNr; // View Nummer in Tab / Page int i_ViewNr; // View Nummer in Tab / Page
int i_Which; // Which View, Database is this/using int i_Which; // Which View, Database is this/using
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
MainDoc* pDoc; MainDoc* pDoc;
wxDbInf* ct_BrowserDB; wxDbInf* ct_BrowserDB;
BrowserDB* db_Br; BrowserDB* db_Br;
wxMenu *popupMenu1; // OnDBClass wxMenu *popupMenu1; // OnDBClass
wxMenu *popupMenu2; // OnDBGrid & OnTableclass wxMenu *popupMenu2; // OnDBGrid & OnTableclass
bool b_EditModus; bool b_EditModus;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxString logBuf,Temp0; wxString logBuf,Temp0;
wxPoint MousePos; wxPoint MousePos;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
void OnModusEdit(wxCommandEvent& event); void OnModusEdit(wxCommandEvent& event);
void OnModusBrowse(wxCommandEvent& event); void OnModusBrowse(wxCommandEvent& event);
void OnMouseMove(wxMouseEvent& event); void OnMouseMove(wxMouseEvent& event);
int OnTableView(wxString Table); int OnTableView(wxString Table);
//----- //-----
void OnCellChange( wxGridEvent& ); void OnCellChange( wxGridEvent& );
void OnCellLeftClick( wxGridEvent& ); void OnCellLeftClick( wxGridEvent& );
void OnCellLeftDClick( wxGridEvent& ); void OnCellLeftDClick( wxGridEvent& );
void OnCellRightClick( wxGridEvent& ); void OnCellRightClick( wxGridEvent& );
void OnCellRightDClick( wxGridEvent& ); void OnCellRightDClick( wxGridEvent& );
void OnColSize( wxGridSizeEvent& ); void OnColSize( wxGridSizeEvent& );
void OnEditorShown( wxGridEvent& ); void OnEditorShown( wxGridEvent& );
void OnEditorHidden( wxGridEvent& ); void OnEditorHidden( wxGridEvent& );
void OnLabelLeftClick( wxGridEvent& ); void OnLabelLeftClick( wxGridEvent& );
void OnLabelLeftDClick( wxGridEvent& ); void OnLabelLeftDClick( wxGridEvent& );
void OnLabelRightClick( wxGridEvent& ); void OnLabelRightClick( wxGridEvent& );
void OnLabelRightDClick( wxGridEvent& ); void OnLabelRightDClick( wxGridEvent& );
void OnRangeSelected( wxGridRangeSelectEvent& ); void OnRangeSelected( wxGridRangeSelectEvent& );
void OnRowSize( wxGridSizeEvent& ); void OnRowSize( wxGridSizeEvent& );
void OnSelectCell( wxGridEvent& ); void OnSelectCell( wxGridEvent& );
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#define GRID_01_BEGIN 1200 #define GRID_01_BEGIN 1200
#define GRID_BROWSE 1201 #define GRID_BROWSE 1201
#define GRID_EDIT 1202 #define GRID_EDIT 1202
#define GRID_01_END 1203 #define GRID_01_END 1203
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -32,385 +32,403 @@
//-- all #includes that every .cpp needs --- 19990807.mj10777 ---------------- //-- all #includes that every .cpp needs --- 19990807.mj10777 ----------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#include "std.h" // sorgsam Pflegen ! #include "std.h" // sorgsam Pflegen !
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//-- Global functions -------------------------------------------------------------------- //-- Global functions --------------------------------------------------------------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
static inline const char *bool2String(bool b) static inline const char *bool2String(bool b)
{ {
return b ? "" : "not "; return b ? "" : "not ";
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(DBTree, wxTreeCtrl) BEGIN_EVENT_TABLE(DBTree, wxTreeCtrl)
EVT_MOTION (DBTree::OnMouseMove) EVT_MOTION (DBTree::OnMouseMove)
EVT_TREE_SEL_CHANGED(TREE_CTRL_DB, DBTree::OnSelChanged) EVT_TREE_SEL_CHANGED(TREE_CTRL_DB, DBTree::OnSelChanged)
EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_DB,DBTree::OnRightSelect) EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_DB,DBTree::OnRightSelect)
EVT_MENU(DATA_SHOW,DBTree::OnDBGrid) EVT_MENU(DATA_SHOW,DBTree::OnDBGrid)
EVT_MENU(DATA_DB,DBTree::OnDBClass) EVT_MENU(DATA_DB,DBTree::OnDBClass)
EVT_MENU(DATA_TABLE,DBTree::OnTableClass) EVT_MENU(DATA_TABLE,DBTree::OnTableClass)
EVT_MENU(DATA_TABLE_ALL,DBTree::OnTableClassAll) EVT_MENU(DATA_TABLE_ALL,DBTree::OnTableClassAll)
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// DBTree implementation // DBTree implementation
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(DBTree, wxTreeCtrl) IMPLEMENT_DYNAMIC_CLASS(DBTree, wxTreeCtrl)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DBTree::DBTree(wxWindow *parent) : wxTreeCtrl(parent) DBTree::DBTree(wxWindow *parent) : wxTreeCtrl(parent)
{ {
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DBTree::DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style) DBTree::DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style)
: wxTreeCtrl(parent, id, pos, size, style) : wxTreeCtrl(parent, id, pos, size, style)
{ {
// Make an image list containing small icons // Make an image list containing small icons
p_imageListNormal = new wxImageList(16, 16, TRUE); p_imageListNormal = new wxImageList(16, 16, TRUE);
// should correspond to TreeIc_xxx enum // should correspond to TreeIc_xxx enum
#if !defined(__WXMSW__) #if !defined(__WXMSW__)
#include "bitmaps/logo.xpm" #include "bitmaps/logo.xpm"
#include "bitmaps/dsnclose.xpm" #include "bitmaps/dsnclose.xpm"
#include "bitmaps/dsnopen.xpm" #include "bitmaps/dsnopen.xpm"
#include "bitmaps/tab.xpm" #include "bitmaps/tab.xpm"
#include "bitmaps/view.xpm" #include "bitmaps/view.xpm"
#include "bitmaps/col.xpm" #include "bitmaps/col.xpm"
#include "bitmaps/key.xpm" #include "bitmaps/key.xpm"
#include "bitmaps/keyf.xpm" #include "bitmaps/keyf.xpm"
#include "bitmaps/d_open.xpm" #include "bitmaps/d_open.xpm"
#include "bitmaps/d_closed.xpm" #include "bitmaps/d_closed.xpm"
#endif #endif
p_imageListNormal->Add(wxICON(aLogo)); p_imageListNormal->Add(wxICON(aLogo));
p_imageListNormal->Add(wxICON(DsnClosed)); p_imageListNormal->Add(wxICON(DsnClosed));
p_imageListNormal->Add(wxICON(DsnOpen)); p_imageListNormal->Add(wxICON(DsnOpen));
p_imageListNormal->Add(wxICON(TAB)); p_imageListNormal->Add(wxICON(TAB));
p_imageListNormal->Add(wxICON(VIEW)); p_imageListNormal->Add(wxICON(VIEW));
p_imageListNormal->Add(wxICON(COL)); p_imageListNormal->Add(wxICON(COL));
p_imageListNormal->Add(wxICON(KEY)); p_imageListNormal->Add(wxICON(KEY));
p_imageListNormal->Add(wxICON(KEYF)); p_imageListNormal->Add(wxICON(KEYF));
p_imageListNormal->Add(wxICON(DocOpen)); p_imageListNormal->Add(wxICON(DocOpen));
p_imageListNormal->Add(wxICON(DocOpen)); p_imageListNormal->Add(wxICON(DocOpen));
SetImageList(p_imageListNormal); SetImageList(p_imageListNormal);
ct_BrowserDB = NULL; ct_BrowserDB = NULL;
popupMenu1 = NULL; popupMenu1 = NULL;
popupMenu2 = NULL; popupMenu2 = NULL;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DBTree::~DBTree() DBTree::~DBTree()
{ {
// delete (pDoc->db_Br+i_Which); delete ct_BrowserDB;
// wxLogMessage("DBTree::~DBTree() - Vor OnCloseDB()");
(pDoc->db_Br+i_Which)->OnCloseDB(FALSE);
// wxLogMessage("DBTree::~DBTree() - Nach OnCloseDB()");
(pDoc->db_Br+i_Which)->db_BrowserDB = NULL;
(pDoc->db_Br+i_Which)->ct_BrowserDB = NULL;
(pDoc->db_Br+i_Which)->cl_BrowserDB = NULL;
delete ct_BrowserDB; // delete (pDoc->db_Br+i_Which);
delete p_imageListNormal; // wxLogMessage("DBTree::~DBTree() - Vor OnCloseDB()");
if (popupMenu1) // If the DSN has no Tables, then no delete should be done ! (pDoc->db_Br+i_Which)->OnCloseDB(FALSE);
delete popupMenu1; // wxLogMessage("DBTree::~DBTree() - Nach OnCloseDB()");
if (popupMenu1) // If the DSN has no Tables, then no delete should be done ! (pDoc->db_Br+i_Which)->db_BrowserDB = NULL;
delete popupMenu2; (pDoc->db_Br+i_Which)->ct_BrowserDB = NULL;
(pDoc->db_Br+i_Which)->cl_BrowserDB = NULL;
delete p_imageListNormal;
if (popupMenu1) // If the DSN has no Tables, then no delete should be done !
delete popupMenu1;
if (popupMenu1) // If the DSN has no Tables, then no delete should be done !
delete popupMenu2;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#undef TREE_EVENT_HANDLER #undef TREE_EVENT_HANDLER
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
int DBTree::OnPopulate() int DBTree::OnPopulate()
{ {
wxTreeItemId Root, Folder, Docu, Funkt; wxTreeItemId Root, Folder, Docu, Funkt;
int i,x,y,z=0, TableType; int i,x,y,z=0, TableType;
wxString SQL_TYPE, DB_TYPE; wxString SQL_TYPE, DB_TYPE;
SetFont(* pDoc->ft_Doc); SetFont(* pDoc->ft_Doc);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if ((pDoc->db_Br+i_Which)->Initialize(FALSE)) if ((pDoc->db_Br+i_Which)->Initialize(FALSE))
{
wxStopWatch sw;
wxBeginBusyCursor();
ct_BrowserDB = (pDoc->db_Br+i_Which)->OnGetCatalog(FALSE);
if (ct_BrowserDB)
{ // Use the wxDatabase Information
Temp0.Printf("%s - (%s) (%s)", s_DSN.c_str(),ct_BrowserDB->catalog, ct_BrowserDB->schema);
Root = AddRoot(Temp0,TreeIc_DsnOpen,TreeIc_DsnOpen,new DBTreeData("Root"));
for (x=0;x<ct_BrowserDB->numTables;x++)
{
wxYield();
TableType = 0; // TABLE = 1 ; VIEW = 2 ; 0 We are not interested in
if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableType,"TABLE")) // only TABLES
TableType = 1;
if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableType,"VIEW")) // and VIEWS
TableType = 2;
if (TableType) // only TABLES or Views
{ {
Temp1.Printf("TN(%s",(ct_BrowserDB->pTableInf+x)->tableName); wxStopWatch sw;
//---- wxBeginBusyCursor();
(ct_BrowserDB->pTableInf+x)->pColInf = (pDoc->db_Br+i_Which)->OnGetColumns((ct_BrowserDB->pTableInf+x)->tableName,(ct_BrowserDB->pTableInf+x)->numCols,FALSE); ct_BrowserDB = (pDoc->db_Br+i_Which)->OnGetCatalog(FALSE);
//---- if (ct_BrowserDB)
if ((ct_BrowserDB->pTableInf+x)->pColInf) { // Use the wxDatabase Information
{ Temp0.Printf("%s - (%s) (%s)", s_DSN.c_str(),ct_BrowserDB->catalog, ct_BrowserDB->schema);
if (TableType == 1) // Table Root = AddRoot(Temp0,TreeIc_DsnOpen,TreeIc_DsnOpen,new DBTreeData("Root"));
{ for (x=0;x<ct_BrowserDB->numTables;x++)
Temp0.Printf(_("Table-Name(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName, {
(ct_BrowserDB->pTableInf+x)->numCols,(ct_BrowserDB->pTableInf+x)->tableRemarks); wxYield();
Folder = AppendItem(Root,Temp0,TreeIc_TAB,TreeIc_TAB, new DBTreeData(Temp1)); TableType = 0; // TABLE = 1 ; VIEW = 2 ; 0 We are not interested in
} if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableType,"TABLE")) // only TABLES
if (TableType == 2) // View TableType = 1;
{ if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableType,"VIEW")) // and VIEWS
Temp0.Printf(_("View-Name(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName, TableType = 2;
(ct_BrowserDB->pTableInf+x)->numCols,(ct_BrowserDB->pTableInf+x)->tableRemarks); if (TableType) // only TABLES or Views
Folder = AppendItem(Root,Temp0,TreeIc_VIEW,TreeIc_VIEW, new DBTreeData(Temp1)); {
} Temp1.Printf("TN(%s",(ct_BrowserDB->pTableInf+x)->tableName);
for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) //----
{ (ct_BrowserDB->pTableInf+x)->pColInf = (pDoc->db_Br+i_Which)->OnGetColumns((ct_BrowserDB->pTableInf+x)->tableName,(ct_BrowserDB->pTableInf+x)->numCols,FALSE);
Temp1.Printf("FN(%s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); //----
// Here is where we find out if the Column is a Primary / Foreign Key if ((ct_BrowserDB->pTableInf+x)->pColInf)
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkCol != 0) // Primary Key {
{ if (TableType == 1) // Table
Temp2.Printf("(%d) - %s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkCol,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); {
Docu = AppendItem(Folder,Temp2,TreeIc_KEY,TreeIc_KEY,new DBTreeData(Temp1)); Temp0.Printf(_("Table-Name(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName,
Temp2 = ((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkTableName; (ct_BrowserDB->pTableInf+x)->numCols,(ct_BrowserDB->pTableInf+x)->tableRemarks);
if (Temp2 == "") Folder = AppendItem(Root,Temp0,TreeIc_TAB,TreeIc_TAB, new DBTreeData(Temp1));
Temp2 = _("None"); }
Temp2.Printf(_("This Primary Key is used in the following Tables : %s"),Temp2.c_str()); if (TableType == 2) // View
Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEY")); {
} Temp0.Printf(_("View-Name(%s) with (%d)Columns ; Remarks(%s)"), (ct_BrowserDB->pTableInf+x)->tableName,
else (ct_BrowserDB->pTableInf+x)->numCols,(ct_BrowserDB->pTableInf+x)->tableRemarks);
{ Folder = AppendItem(Root,Temp0,TreeIc_VIEW,TreeIc_VIEW, new DBTreeData(Temp1));
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkCol != 0) // Foreign Key }
{ for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
Temp2.Printf("(%d) - %s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkCol,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName); {
Docu = AppendItem(Folder,Temp2,TreeIc_KEYF,TreeIc_KEYF,new DBTreeData(Temp1)); Temp1.Printf("FN(%s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
Temp2.Printf(_("This Foreign Key comes from the following Table : %s"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkTableName); // Here is where we find out if the Column is a Primary / Foreign Key
Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEYF")); if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkCol != 0) // Primary Key
} {
Temp2.Printf("(%d) - %s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkCol,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
Docu = AppendItem(Folder,Temp2,TreeIc_KEY,TreeIc_KEY,new DBTreeData(Temp1));
Temp2 = ((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkTableName;
if (Temp2 == "")
Temp2 = _("None");
Temp2.Printf(_("This Primary Key is used in the following Tables : %s"),Temp2.c_str());
Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEY"));
}
else
{
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkCol != 0) // Foreign Key
{
Temp2.Printf("(%d) - %s",((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkCol,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
Docu = AppendItem(Folder,Temp2,TreeIc_KEYF,TreeIc_KEYF,new DBTreeData(Temp1));
Temp2.Printf(_("This Foreign Key comes from the following Table : %s"),((ct_BrowserDB->pTableInf+x)->pColInf+y)->FkTableName);
Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEYF"));
}
else
Docu = AppendItem(Folder,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName,TreeIc_COL,TreeIc_COL,new DBTreeData(Temp1));
}
SQL_TYPE.Printf("SQL_C_???? (%d)",((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType);
DB_TYPE.Printf("DB_DATA_TYPE_???? (%d)",((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType);
for (i=1;i<=(pDoc->db_Br+i_Which)->i_SqlTyp[0];i++)
{
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType == (pDoc->db_Br+i_Which)->i_SqlTyp[i])
{
SQL_TYPE.Printf("%s(%d) ; ",(pDoc->db_Br+i_Which)->s_SqlTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_SqlTyp[i]);
}
} // for (i=1;i<=i_SqlTyp[0];i++)
wxYield();
for (i=1;i<=(pDoc->db_Br+i_Which)->i_dbTyp[0];i++)
{
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType == (pDoc->db_Br+i_Which)->i_dbTyp[i])
{
DB_TYPE.Printf("%s(%d)",(pDoc->db_Br+i_Which)->s_dbTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_dbTyp[i]);
}
} // for (i=1;i<=i_dbTyp[0];i++)
wxYield();
SQL_TYPE += DB_TYPE;
Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE));
SQL_TYPE.Printf("%10s %d,%d",((ct_BrowserDB->pTableInf+x)->pColInf+y)->typeName,
((ct_BrowserDB->pTableInf+x)->pColInf+y)->columnSize,((ct_BrowserDB->pTableInf+x)->pColInf+y)->decimalDigits);
Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE));
} // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
} // if ((ct_BrowserDB->pTableInf+x)->pColInf)
else
Folder = AppendItem(Root,Temp0,TreeIc_FolderClosed,TreeIc_FolderOpen, new DBTreeData(Temp1));
z++;
// if (z % 10 == 0)
{
Temp0.Printf(_("-I-> DBTree::OnPopulate(%s) - Table %6d (from %d) has been read."),(ct_BrowserDB->pTableInf+x)->tableName,z,ct_BrowserDB->numTables);
pDoc->p_MainFrame->SetStatusText(Temp0, 0);
}
wxYield();
} // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE" or VIEW)
// else
// wxLogMessage(_("\n-I-> if ! TABLE or VIEW >%s<"),(ct_BrowserDB->pTableInf+x)->tableType);
} // for (x=0;x<ct_BrowserDB->numTables;x++)
} // if (ct_BrowserDB)
else else
Docu = AppendItem(Folder,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName,TreeIc_COL,TreeIc_COL,new DBTreeData(Temp1)); wxLogMessage(_("\n-E-> DBTree::OnPopulate() : Invalid Catalog Pointer : Failed"));
} wxEndBusyCursor();
SQL_TYPE.Printf("SQL_C_???? (%d)",((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType); Temp0.Printf(_("-I-> DBTree::OnPopulate() - %6d Tables have been read. - Time needed : %ld ms"),z,sw.Time());
DB_TYPE.Printf("DB_DATA_TYPE_???? (%d)",((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType); wxLogMessage(Temp0);
for (i=1;i<=(pDoc->db_Br+i_Which)->i_SqlTyp[0];i++) pDoc->p_MainFrame->SetStatusText(Temp0, 0);
{ } // if((pDoc->db_Br+i_Which)->Initialize(FALSE))
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->sqlDataType == (pDoc->db_Br+i_Which)->i_SqlTyp[i]) else
{ {
SQL_TYPE.Printf("%s(%d) ; ",(pDoc->db_Br+i_Which)->s_SqlTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_SqlTyp[i]); wxLogMessage(_("\n-E-> DBTree::OnPopulate() : A valid Pointer could not be created : Failed"));
} return 0;
} // for (i=1;i<=i_SqlTyp[0];i++) }
for (i=1;i<=(pDoc->db_Br+i_Which)->i_dbTyp[0];i++) //---------------------------------------------------------------------------------------
{ Expand(Root);
if (((ct_BrowserDB->pTableInf+x)->pColInf+y)->dbDataType == (pDoc->db_Br+i_Which)->i_dbTyp[i]) //---------------------------------------------------------------------------------------
{ popupMenu1 = NULL;
DB_TYPE.Printf("%s(%d)",(pDoc->db_Br+i_Which)->s_dbTyp[i].c_str(),(pDoc->db_Br+i_Which)->i_dbTyp[i]); popupMenu1 = new wxMenu("");
} popupMenu1->Append(DATA_DB, _("Make wxDB.cpp/h "));
} // for (i=1;i<=i_dbTyp[0];i++) popupMenu1->AppendSeparator();
SQL_TYPE += DB_TYPE; popupMenu1->Append(DATA_TABLE_ALL, _("Make all wxTable.cpp/h classes"));
Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE)); popupMenu2 = NULL;
SQL_TYPE.Printf("%10s %d,%d",((ct_BrowserDB->pTableInf+x)->pColInf+y)->typeName, popupMenu2 = new wxMenu("");
((ct_BrowserDB->pTableInf+x)->pColInf+y)->columnSize,((ct_BrowserDB->pTableInf+x)->pColInf+y)->decimalDigits); popupMenu2->Append(DATA_SHOW, _("Show Data"));
Funkt = AppendItem(Docu,SQL_TYPE,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData(SQL_TYPE)); popupMenu2->AppendSeparator();
} // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) popupMenu2->Append(DATA_TABLE, _("Make wxTable.cpp/h "));
} // if ((ct_BrowserDB->pTableInf+x)->pColInf) //---------------------------------------------------------------------------------------
else return 0;
Folder = AppendItem(Root,Temp0,TreeIc_FolderClosed,TreeIc_FolderOpen, new DBTreeData(Temp1)); } // DBTree::OnPopulate()
z++;
if (z % 10 == 0)
{
Temp0.Printf(_("-I-> DBTree::OnPopulate(%s) - Table %6d (from %d) has been read."),(ct_BrowserDB->pTableInf+x)->tableName,z,ct_BrowserDB->numTables);
pDoc->p_MainFrame->SetStatusText(Temp0, 0);
}
} // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE" or VIEW)
// else
// wxLogMessage(_("\n-I-> if ! TABLE or VIEW >%s<"),(ct_BrowserDB->pTableInf+x)->tableType);
} // for (x=0;x<ct_BrowserDB->numTables;x++)
} // if (ct_BrowserDB)
else
wxLogMessage(_("\n-E-> DBTree::OnPopulate() : Invalid Catalog Pointer : Failed"));
wxEndBusyCursor();
Temp0.Printf(_("-I-> DBTree::OnPopulate() - %6d Tables have been read. - Time needed : %ld ms"),z,sw.Time());
wxLogMessage(Temp0);
pDoc->p_MainFrame->SetStatusText(Temp0, 0);
} // if((pDoc->db_Br+i_Which)->Initialize(FALSE))
else
{
wxLogMessage(_("\n-E-> DBTree::OnPopulate() : A valid Pointer could not be created : Failed"));
return 0;
}
//---------------------------------------------------------------------------------------
Expand(Root);
//---------------------------------------------------------------------------------------
popupMenu1 = NULL;
popupMenu1 = new wxMenu("");
popupMenu1->Append(DATA_DB, _("Make wxDB.cpp/h "));
popupMenu1->AppendSeparator();
popupMenu1->Append(DATA_TABLE_ALL, _("Make all wxTable.cpp/h classes"));
popupMenu2 = NULL;
popupMenu2 = new wxMenu("");
popupMenu2->Append(DATA_SHOW, _("Show Data"));
popupMenu2->AppendSeparator();
popupMenu2->Append(DATA_TABLE, _("Make wxTable.cpp/h "));
//---------------------------------------------------------------------------------------
return 0;
}
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnSelChanged(wxTreeEvent& WXUNUSED(event)) void DBTree::OnSelChanged(wxTreeEvent& WXUNUSED(event))
{ {
int i; int i;
Temp0.Empty(); Temp0.Empty();
pDoc->p_MainFrame->SetStatusText(Temp0,0); pDoc->p_MainFrame->SetStatusText(Temp0,0);
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{
int Treffer = 0;
Temp1.Printf("%s",item->m_desc.c_str());
//-------------------------------------------------------------------------------------
if (Temp1.Contains("ODBC-"))
{
Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN);
for (i=0;i<pDoc->i_DSN;i++)
{ {
if (Temp1 == (pDoc->p_DSN+i)->Dsn) int Treffer = 0;
{ Temp1.Printf("%s",item->m_desc.c_str());
// pDoc->OnChosenDSN(i); //-------------------------------------------------------------------------------------
if (Temp1.Contains("ODBC-"))
{
Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN);
for (i=0;i<pDoc->i_DSN;i++)
{
if (Temp1 == (pDoc->p_DSN+i)->Dsn)
{
// pDoc->OnChosenDSN(i);
}
}
Treffer++;
}
//--------------------------------------------------------------------------------------
if (Treffer == 0)
{
//-------------------------------------------------------------------------------------
/*
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
"%u children (%u immediately under this item)."),
item->m_desc.c_str(),
bool2String(IsSelected(itemId)),
bool2String(IsExpanded(itemId)),
bool2String(IsBold(itemId)),
GetChildrenCount(itemId),
GetChildrenCount(itemId));
LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str());
wxLogMessage( "%s", LogBuf.c_str() );
*/
//-------------------------------------------------------------------------------------
}
} }
}
Treffer++;
}
//--------------------------------------------------------------------------------------
if (Treffer == 0)
{
//-------------------------------------------------------------------------------------
/*
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
"%u children (%u immediately under this item)."),
item->m_desc.c_str(),
bool2String(IsSelected(itemId)),
bool2String(IsExpanded(itemId)),
bool2String(IsBold(itemId)),
GetChildrenCount(itemId),
GetChildrenCount(itemId));
LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str());
wxLogMessage( "%s", LogBuf.c_str() );
*/
//-------------------------------------------------------------------------------------
}
}
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnRightSelect(wxTreeEvent& WXUNUSED(event)) void DBTree::OnRightSelect(wxTreeEvent& WXUNUSED(event))
{ {
int i; int i;
Temp0.Empty(); Temp0.Empty();
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{ {
int Treffer = 0; int Treffer = 0;
Temp1.Printf("%s",item->m_desc.c_str()); Temp1.Printf("%s",item->m_desc.c_str());
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
if (!wxStrcmp("Root",Temp1)) if (!wxStrcmp("Root",Temp1))
{ {
PopupMenu(popupMenu1,TreePos.x,TreePos.y); PopupMenu(popupMenu1,TreePos.x,TreePos.y);
Treffer++; Treffer++;
} }
for (i=0;i<ct_BrowserDB->numTables;i++) for (i=0;i<ct_BrowserDB->numTables;i++)
{ {
Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName);
if (!wxStrcmp(Temp2,Temp1)) if (!wxStrcmp(Temp2,Temp1))
{ {
PopupMenu(popupMenu2,TreePos.x,TreePos.y); PopupMenu(popupMenu2,TreePos.x,TreePos.y);
Treffer++; Treffer++;
} }
} }
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
if (Treffer == 0) if (Treffer == 0)
{ {
//------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------
/* /*
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
"%u children (%u immediately under this item)."), "%u children (%u immediately under this item)."),
item->m_desc.c_str(), item->m_desc.c_str(),
bool2String(IsSelected(itemId)), bool2String(IsSelected(itemId)),
bool2String(IsExpanded(itemId)), bool2String(IsExpanded(itemId)),
bool2String(IsBold(itemId)), bool2String(IsBold(itemId)),
GetChildrenCount(itemId), GetChildrenCount(itemId),
GetChildrenCount(itemId)); GetChildrenCount(itemId));
LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str()); LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str());
wxLogMessage( "%s", LogBuf.c_str() ); wxLogMessage( "%s", LogBuf.c_str() );
*/ */
//------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------
} }
} }
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnDBGrid(wxCommandEvent& event) void DBTree::OnDBGrid(wxCommandEvent& event)
{ {
int i; int i;
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{ {
Temp1.Printf("%s",item->m_desc.c_str()); Temp1.Printf("%s",item->m_desc.c_str());
for (i=0;i<ct_BrowserDB->numTables;i++) for (i=0;i<ct_BrowserDB->numTables;i++)
{ {
Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName);
if (!wxStrcmp(Temp2,Temp1)) if (!wxStrcmp(Temp2,Temp1))
{ {
// Temp0.Printf("(%d) Here is where a GridCtrl for >%s< will be called! ",i,(ct_BrowserDB->pTableInf+i)->tableName); // Temp0.Printf("(%d) Here is where a GridCtrl for >%s< will be called! ",i,(ct_BrowserDB->pTableInf+i)->tableName);
pDoc->OnChosenTbl(1,(ct_BrowserDB->pTableInf+i)->tableName); pDoc->OnChosenTbl(1,(ct_BrowserDB->pTableInf+i)->tableName);
// wxMessageBox(Temp0); // wxMessageBox(Temp0);
} }
} }
} }
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnDBClass(wxCommandEvent& event) void DBTree::OnDBClass(wxCommandEvent& event)
{ {
// int i; // int i;
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{ {
Temp0.Printf(_("Here is where a wxDB Class for >%s< will be made! "),s_DSN.c_str()); Temp0.Printf(_("Here is where a wxDB Class for >%s< will be made! "),s_DSN.c_str());
wxMessageBox(Temp0); wxMessageBox(Temp0);
} }
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnTableClass(wxCommandEvent& event) void DBTree::OnTableClass(wxCommandEvent& event)
{ {
int i; int i;
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{ {
Temp1.Printf("%s",item->m_desc.c_str()); Temp1.Printf("%s",item->m_desc.c_str());
for (i=0;i<ct_BrowserDB->numTables;i++) for (i=0;i<ct_BrowserDB->numTables;i++)
{ {
Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName); Temp2.Printf("TN(%s",(ct_BrowserDB->pTableInf+i)->tableName);
if (!wxStrcmp(Temp2,Temp1)) if (!wxStrcmp(Temp2,Temp1))
{ {
Temp0.Printf(_("(%d) Here is where a wxTable Class for >%s< will be made! "),i,(ct_BrowserDB->pTableInf+i)->tableName); Temp0.Printf(_("(%d) Here is where a wxTable Class for >%s< will be made! "),i,(ct_BrowserDB->pTableInf+i)->tableName);
wxMessageBox(Temp0); wxMessageBox(Temp0);
} }
} }
} }
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnTableClassAll(wxCommandEvent& event) void DBTree::OnTableClassAll(wxCommandEvent& event)
{ {
// int i; // int i;
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId); DBTreeData *item = (DBTreeData *)GetItemData(itemId);
if ( item != NULL ) if ( item != NULL )
{ {
Temp0.Printf(_("Here is where all wxTable Classes in >%s< will be made! "),s_DSN.c_str()); Temp0.Printf(_("Here is where all wxTable Classes in >%s< will be made! "),s_DSN.c_str());
wxMessageBox(Temp0); wxMessageBox(Temp0);
} }
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DBTree::OnMouseMove(wxMouseEvent &event) void DBTree::OnMouseMove(wxMouseEvent &event)
{ {
TreePos = event.GetPosition(); TreePos = event.GetPosition();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Name: DBTree.cpp/.h // Name: dbtree.cpp/.h
// Purpose: Tree with Table and Views, branches show Field information // Purpose: Tree with Table and Views, branches show Field information
// Author: Mark Johnson // Author: Mark Johnson
// Modified by: 19991129.mj10777 // Modified by: 19991129.mj10777
@@ -7,73 +7,77 @@
// Copyright: (c) Mark Johnson // Copyright: (c) Mark Johnson
// Licence: wxWindows license // Licence: wxWindows license
// RCS-ID: $Id$ // RCS-ID: $Id$
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainDoc; // Declared in Doc.h file class MainDoc; // Declared in doc.h file
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class DBTreeData : public wxTreeItemData class DBTreeData : public wxTreeItemData
{ {
public: public:
DBTreeData(const wxString& desc) : m_desc(desc) { } DBTreeData(const wxString& desc) : m_desc(desc) { }
void ShowInfo(wxTreeCtrl *tree); void ShowInfo(wxTreeCtrl *tree);
wxString m_desc; wxString m_desc;
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class DBTree : public wxTreeCtrl class DBTree : public wxTreeCtrl
{ {
public: public:
enum enum
{ // The order here must be the same as in m_imageListNormal ! { // The order here must be the same as in m_imageListNormal !
TreeIc_Logo, // logo.ico TreeIc_Logo, // logo.ico
TreeIc_DsnClosed, // dsnclose.ico TreeIc_DsnClosed, // dsnclose.ico
TreeIc_DsnOpen, // dsnopen.ico TreeIc_DsnOpen, // dsnopen.ico
TreeIc_TAB, // tab.ico TreeIc_TAB, // tab.ico
TreeIc_VIEW, // view.ico TreeIc_VIEW, // view.ico
TreeIc_COL, // col.ico TreeIc_COL, // col.ico
TreeIc_KEY, // key.ico TreeIc_KEY, // key.ico
TreeIc_KEYF, // keyf.ico TreeIc_KEYF, // keyf.ico
TreeIc_DocOpen, // d_open.ico TreeIc_DocOpen, // d_open.ico
TreeIc_DocClosed, // d_closed.ico TreeIc_DocClosed, // d_closed.ico
TreeIc_FolderClosed, // f_closed.ico TreeIc_FolderClosed, // f_closed.ico
TreeIc_FolderOpen // f_open.ico TreeIc_FolderOpen // f_open.ico
}; };
wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DBTree() { } DBTree() { }
DBTree(wxWindow *parent); DBTree(wxWindow *parent);
DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style); DBTree(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style);
virtual ~DBTree(); virtual ~DBTree();
MainDoc *pDoc; MainDoc *pDoc;
wxDbInf *ct_BrowserDB; wxDbInf *ct_BrowserDB;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
int i_TabArt; // Tab = 0 ; Page = 1; int i_TabArt; // Tab = 0 ; Page = 1;
int i_ViewNr; // View Nummer in Tab / Page int i_ViewNr; // View Nummer in Tab / Page
int i_Which; // Which View, Database is this/using int i_Which; // Which View, Database is this/using
wxString s_DSN; // Name of the Dataset wxString s_DSN; // Name of the Dataset
wxMenu *popupMenu1; // OnDBClass wxMenu *popupMenu1; // OnDBClass
wxMenu *popupMenu2; // OnDBGrid & OnTableclass wxMenu *popupMenu2; // OnDBGrid & OnTableclass
wxPoint TreePos; wxPoint TreePos;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
wxImageList *p_imageListNormal; wxImageList *p_imageListNormal;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
public: public:
int OnPopulate(); int OnPopulate();
void OnSelChanged(wxTreeEvent& event); void OnSelChanged(wxTreeEvent& event);
void OnRightSelect(wxTreeEvent& event); void OnRightSelect(wxTreeEvent& event);
void OnDBGrid(wxCommandEvent& event); void OnDBGrid(wxCommandEvent& event);
void OnDBClass(wxCommandEvent& event); void OnDBClass(wxCommandEvent& event);
void OnTableClass(wxCommandEvent& event); void OnTableClass(wxCommandEvent& event);
void OnTableClassAll(wxCommandEvent& event); void OnTableClassAll(wxCommandEvent& event);
void OnMouseEvent(wxMouseEvent& event); void OnMouseEvent(wxMouseEvent& event);
void OnMouseMove(wxMouseEvent& event); void OnMouseMove(wxMouseEvent& event);
public: public:
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
// if you want your overloaded OnCompareItems() to be called. // if you want your overloaded OnCompareItems() to be called.
// OTOH, if you don't want it you may omit the next line - this will // OTOH, if you don't want it you may omit the next line - this will
// make default (alphabetical) sorting much faster under wxMSW. // make default (alphabetical) sorting much faster under wxMSW.
DECLARE_DYNAMIC_CLASS(DBTree) DECLARE_DYNAMIC_CLASS(DBTree)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#define POPUP_01_BEGIN 1100 #define POPUP_01_BEGIN 1100
#define DATA_SHOW 1101 #define DATA_SHOW 1101

View File

@@ -31,112 +31,117 @@
//-- all #includes that every .cpp needs ----19990807.mj10777 ---------------- //-- all #includes that every .cpp needs ----19990807.mj10777 ----------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#include "std.h" #include "std.h"
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DlgUser::DlgUser(wxWindow *parent, MainDoc *p_Doc, const wxString& title) : DlgUser::DlgUser(wxWindow *parent, MainDoc *p_Doc, const wxString& title) :
wxDialog(parent, ID_DIALOG_DSN, title) wxDialog(parent, ID_DIALOG_DSN, title)
{ {
int chSize; // Height of Font * 1.4 = Height of wxTextCtrl int chSize; // Height of Font * 1.4 = Height of wxTextCtrl
float ratio = 1.4; float ratio = (float)1.4;
#ifdef __WXMOTIF__ #ifdef __WXMOTIF__
ratio = 2.1; ratio = (float)2.1;
#endif #endif
SetBackgroundColour("wheat"); SetBackgroundColour("wheat");
pDoc = p_Doc; pDoc = p_Doc;
wxLayoutConstraints* layout; wxLayoutConstraints* layout;
SetAutoLayout(TRUE); SetAutoLayout(TRUE);
m_Label1 = new wxStaticText(this, -1, _("User ID:")); m_Label1 = new wxStaticText(this, -1, _("User ID:"));
m_Label1->SetFont(* pDoc->ft_Doc); m_Label1->SetFont(* pDoc->ft_Doc);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(this, wxLeft, 10); layout->left.SameAs(this, wxLeft, 10);
layout->top.SameAs(this, wxTop, 10); layout->top.SameAs(this, wxTop, 10);
layout->height.AsIs(); layout->height.AsIs();
layout->width.Absolute(75); layout->width.Absolute(75);
m_Label1->SetConstraints(layout); m_Label1->SetConstraints(layout);
int w; int w;
m_Label1->GetSize(&w, &chSize); m_Label1->GetSize(&w, &chSize);
m_UserName = new wxTextCtrl(this, -1, ""); m_UserName = new wxTextCtrl(this, -1, "");
m_UserName->SetFont(* pDoc->ft_Doc); m_UserName->SetFont(* pDoc->ft_Doc);
chSize = (int) (m_UserName->GetCharHeight()*ratio); chSize = (int) (m_UserName->GetCharHeight()*ratio);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(m_Label1, wxRight, 10); layout->left.SameAs(m_Label1, wxRight, 10);
layout->centreY.SameAs(m_Label1,wxCentreY); layout->centreY.SameAs(m_Label1,wxCentreY);
layout->width.Absolute(200); layout->width.Absolute(200);
layout->height.Absolute(chSize); layout->height.Absolute(chSize);
// layout->height.AsIs(); // layout->height.AsIs();
m_UserName->SetConstraints(layout); m_UserName->SetConstraints(layout);
m_Label2 = new wxStaticText(this, -1, _("Password:")); m_Label2 = new wxStaticText(this, -1, _("Password:"));
m_Label2->SetFont(* pDoc->ft_Doc); m_Label2->SetFont(* pDoc->ft_Doc);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(m_Label1, wxLeft); layout->left.SameAs(m_Label1, wxLeft);
layout->top.SameAs(m_Label1, wxBottom, 10); layout->top.SameAs(m_Label1, wxBottom, 10);
layout->height.AsIs(); layout->height.AsIs();
layout->width.SameAs(m_Label1, wxWidth); layout->width.SameAs(m_Label1, wxWidth);
m_Label2->SetConstraints(layout); m_Label2->SetConstraints(layout);
m_Password = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD); m_Password = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
m_Password->SetFont(* pDoc->ft_Doc); m_Password->SetFont(* pDoc->ft_Doc);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(m_UserName, wxLeft); layout->left.SameAs(m_UserName, wxLeft);
layout->width.SameAs(m_UserName, wxWidth); layout->width.SameAs(m_UserName, wxWidth);
layout->centreY.SameAs(m_Label2,wxCentreY); layout->centreY.SameAs(m_Label2,wxCentreY);
layout->height.Absolute(chSize); layout->height.Absolute(chSize);
//layout->height.AsIs(); //layout->height.AsIs();
m_Password->SetConstraints(layout); m_Password->SetConstraints(layout);
m_OK = new wxButton(this, wxID_OK, _("OK")); m_OK = new wxButton(this, wxID_OK, _("OK"));
m_OK->SetFont(* pDoc->ft_Doc); m_OK->SetFont(* pDoc->ft_Doc);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(this, wxLeft, 10); layout->left.SameAs(this, wxLeft, 10);
layout->top.SameAs(m_Label2, wxBottom,10); layout->top.SameAs(m_Label2, wxBottom,10);
layout->height.AsIs(); layout->height.AsIs();
layout->width.Absolute(75); layout->width.Absolute(75);
m_OK->SetConstraints(layout); m_OK->SetConstraints(layout);
m_Cancel = new wxButton(this, wxID_CANCEL, _("Cancel")); m_Cancel = new wxButton(this, wxID_CANCEL, _("Cancel"));
m_Cancel->SetFont(* pDoc->ft_Doc); m_Cancel->SetFont(* pDoc->ft_Doc);
layout = new wxLayoutConstraints; layout = new wxLayoutConstraints;
layout->left.SameAs(m_OK, wxRight, 10); layout->left.SameAs(m_OK, wxRight, 10);
layout->top.SameAs(m_OK, wxTop); layout->top.SameAs(m_OK, wxTop);
layout->height.AsIs(); layout->height.AsIs();
layout->width.SameAs(m_OK, wxWidth); layout->width.SameAs(m_OK, wxWidth);
m_Cancel->SetConstraints(layout); m_Cancel->SetConstraints(layout);
m_OK->SetDefault(); m_OK->SetDefault();
m_UserName->SetFocus(); m_UserName->SetFocus();
s_User = ""; s_User = "";
s_Password = ""; s_Password = "";
Layout(); Layout();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DlgUser::OnInit() void DlgUser::OnInit()
{ {
wxString Temp; Temp.Printf(">>> %s <<<",s_DSN.c_str()); wxString Temp; Temp.Printf(">>> %s <<<",s_DSN.c_str());
SetTitle(Temp); SetTitle(Temp);
m_UserName->SetLabel(s_User); m_UserName->SetLabel(s_User);
m_Password->SetLabel(s_Password); m_Password->SetLabel(s_Password);
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(DlgUser, wxDialog) BEGIN_EVENT_TABLE(DlgUser, wxDialog)
EVT_BUTTON(wxID_OK, DlgUser::OnOk) EVT_BUTTON(wxID_OK, DlgUser::OnOk)
EVT_BUTTON(wxID_CANCEL, DlgUser::OnCancel) EVT_BUTTON(wxID_CANCEL, DlgUser::OnCancel)
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void DlgUser::OnOk(wxCommandEvent& WXUNUSED(event) ) void DlgUser::OnOk(wxCommandEvent& WXUNUSED(event) )
{ {
//canceled = FALSE; //canceled = FALSE;
s_User = m_UserName->GetValue(); s_User = m_UserName->GetValue();
s_Password = m_Password->GetValue(); s_Password = m_Password->GetValue();
EndModal(wxID_OK); EndModal(wxID_OK);
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//void DlgUser::OnCancel(wxCommandEvent& WXUNUSED(event) ) //void DlgUser::OnCancel(wxCommandEvent& WXUNUSED(event) )
// { // {

View File

@@ -15,22 +15,25 @@
#define ID_USER 102 #define ID_USER 102
#define ID_PASSWORD 103 #define ID_PASSWORD 103
#define ID_TEXT 104 #define ID_TEXT 104
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainDoc; class MainDoc;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class DlgUser: public wxDialog class DlgUser: public wxDialog
{ {
public: public:
wxString s_DSN, s_User, s_Password; wxString s_DSN, s_User, s_Password;
wxStaticText *m_Label1, *m_Label2; wxStaticText *m_Label1, *m_Label2;
wxTextCtrl *m_UserName, *m_Password; wxTextCtrl *m_UserName, *m_Password;
wxButton *m_OK, *m_Cancel; wxButton *m_OK, *m_Cancel;
MainDoc *pDoc; MainDoc *pDoc;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
DlgUser(wxWindow *parent,MainDoc *pDoc, const wxString& title); DlgUser(wxWindow *parent,MainDoc *pDoc, const wxString& title);
void OnInit(); void OnInit();
void OnOk(wxCommandEvent& event); void OnOk(wxCommandEvent& event);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
DECLARE_EVENT_TABLE()
DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Name: Doc.cpp // Name: doc.cpp
// Purpose: Holds information for DBBrowser - (a do-it-yourself document) // Purpose: Holds information for DBBrowser - (a do-it-yourself document)
// Author: Mark Johnson, mj10777@gmx.net // Author: Mark Johnson, mj10777@gmx.net
// Modified by: 19990808.mj10777 // Modified by: 19990808.mj10777
@@ -34,293 +34,302 @@
//-- Some Global Vars for all Files (extern in ?.h needed) ------------------------------- //-- Some Global Vars for all Files (extern in ?.h needed) -------------------------------
// Global structure for holding ODBC connection information // Global structure for holding ODBC connection information
wxDbConnectInf DbConnectInf; wxDbConnectInf DbConnectInf;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
wxConfigBase *p_ProgramCfg; // All Config and Path information wxConfigBase *p_ProgramCfg; // All Config and Path information
wxLogTextCtrl *p_LogBook; // All Log messages wxLogTextCtrl *p_LogBook; // All Log messages
wxString LogBuf; // String for all Logs wxString LogBuf; // String for all Logs
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
MainDoc::MainDoc() MainDoc::MainDoc()
{ {
db_Br = NULL; db_Br = NULL;
p_DSN = NULL; p_DSN = NULL;
i_DSN = 0; i_DSN = 0;
p_Splitter = NULL; p_Splitter = NULL;
p_MainFrame = NULL; p_MainFrame = NULL;
p_PgmCtrl = NULL; // Is not active p_PgmCtrl = NULL; // Is not active
p_DBTree = NULL; p_DBTree = NULL;
p_DBGrid = NULL; p_DBGrid = NULL;
p_LogWin = NULL; p_LogWin = NULL;
p_TabArea = NULL; p_TabArea = NULL;
p_PageArea = NULL; p_PageArea = NULL;
i_TabNr = 0; i_TabNr = 0;
i_PageNr = 0; i_PageNr = 0;
s_BColour = "WHEAT"; s_BColour = "WHEAT";
ft_Doc = new wxFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT)); ft_Doc = new wxFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT));
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
MainDoc::~MainDoc() MainDoc::~MainDoc()
{ {
// ---------------------------------------------------------- p_TabArea->Show(FALSE); // Deactivate the Window
// -E-> The Tree Controls take to long to close : Why ?? p_PageArea->Show(FALSE); // Deactivate the Window
// ----------------------------------------------------------
delete ft_Doc; // ----------------------------------------------------------
ft_Doc = NULL; // -E-> The Tree Controls take to long to close : Why ??
p_TabArea->Show(FALSE); // Deactivate the Window // ----------------------------------------------------------
p_PageArea->Show(FALSE); // Deactivate the Window delete ft_Doc; ft_Doc = NULL;
p_PgmCtrl = NULL; delete p_PgmCtrl; p_PgmCtrl = NULL;
delete p_PgmCtrl; delete [] p_DSN;
delete [] p_DSN; delete p_DBTree;
delete p_DBTree; delete p_TabArea; p_TabArea = NULL;
p_TabArea = NULL; delete p_TabArea; delete p_PageArea; p_PageArea = NULL;
p_PageArea = NULL; delete p_PageArea; delete p_Splitter; p_Splitter = NULL;
p_Splitter = NULL; delete [] db_Br; db_Br = NULL;
delete p_Splitter; // wxMessageBox("~MainDoc");
delete [] db_Br;
// wxMessageBox("~MainDoc");
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainDoc::OnNewDocument() bool MainDoc::OnNewDocument()
{ {
wxStopWatch sw; wxStopWatch sw;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (!OnInitView()) if (!OnInitView())
return FALSE; return FALSE;
p_PgmCtrl->OnPopulate(); p_PgmCtrl->OnPopulate();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxLogMessage(_("-I-> MainDoc::OnNewDocument() - End - Time needed : %ld ms"),sw.Time()); wxLogMessage(_("-I-> MainDoc::OnNewDocument() - End - Time needed : %ld ms"),sw.Time());
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainDoc::OnInitView() bool MainDoc::OnInitView()
{ {
Sash = p_ProgramCfg->Read("/MainFrame/Sash", 200); Sash = p_ProgramCfg->Read("/MainFrame/Sash", 200);
// wxMessageBox("OnInitView() - Begin ","-I->MainDoc::OnInitView"); // wxMessageBox("OnInitView() - Begin ","-I->MainDoc::OnInitView");
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// create "workplace" window // create "workplace" window
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_TabArea = new wxTabbedWindow(); // Init the Pointer p_TabArea = new wxTabbedWindow(); // Init the Pointer
p_TabArea->Create(p_Splitter, -1); p_TabArea->Create(p_Splitter, -1);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_PgmCtrl = new PgmCtrl(p_TabArea, TREE_CTRL_PGM,wxDefaultPosition, wxDefaultSize, p_PgmCtrl = new PgmCtrl(p_TabArea, TREE_CTRL_PGM,wxDefaultPosition, wxDefaultSize,
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
p_PgmCtrl->i_TabArt = 0; // 0 = Tab ; 1 = Page p_PgmCtrl->i_TabArt = 0; // 0 = Tab ; 1 = Page
p_PgmCtrl->i_ViewNr = p_TabArea->GetTabCount()-1; p_PgmCtrl->i_ViewNr = p_TabArea->GetTabCount()-1;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxBitmap *p_FolderClose = new wxBitmap("PgmCtrl"); //, wxBITMAP_TYPE_BMP_RESOURCE); // BJO20000115 wxBitmap *p_FolderClose = new wxBitmap("PgmCtrl"); //, wxBITMAP_TYPE_BMP_RESOURCE); // BJO20000115
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_TabArea->AddTab(p_PgmCtrl,"PgmCtrl",p_FolderClose); p_TabArea->AddTab(p_PgmCtrl,"PgmCtrl",p_FolderClose);
delete p_FolderClose; // Memory leak delete p_FolderClose; // Memory leak
p_FolderClose = NULL; p_FolderClose = NULL;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// now create "output" window // now create "output" window
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_PageArea = new wxPaggedWindow(); // Init the Pointer p_PageArea = new wxPagedWindow(); // Init the Pointer
p_PageArea->Create(p_Splitter, -1); p_PageArea->Create(p_Splitter, -1);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_LogWin = new wxTextCtrl(p_PageArea,-1,wxEmptyString, p_LogWin = new wxTextCtrl(p_PageArea,-1,wxEmptyString,
wxDefaultPosition, wxDefaultSize,wxTE_MULTILINE ); wxDefaultPosition, wxDefaultSize,wxTE_MULTILINE );
p_LogWin->SetFont(* ft_Doc); p_LogWin->SetFont(* ft_Doc);
// Don't forget ! This is always : i_TabArt = 0 ; i_ViewNr = 1; // Don't forget ! This is always : i_TabArt = 0 ; i_ViewNr = 1;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_LogBook = new wxLogTextCtrl(p_LogWin); // make p_LogWin the LogBook p_LogBook = new wxLogTextCtrl(p_LogWin); // make p_LogWin the LogBook
p_LogBook->SetActiveTarget(p_LogBook); p_LogBook->SetActiveTarget(p_LogBook);
p_LogBook->SetTimestamp( NULL ); p_LogBook->SetTimestamp( NULL );
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_PageArea->AddTab(p_LogWin,_("LogBook"), "what is this?" ); p_PageArea->AddTab(p_LogWin,_("LogBook"), "what is this?" );
i_TabNr = p_TabArea->GetTabCount()-1; // Add one when a new AddTab is done; i_TabNr = p_TabArea->GetTabCount()-1; // Add one when a new AddTab is done;
i_PageNr = p_PageArea->GetTabCount()-1; // Add one when a new AddTab is done; i_PageNr = p_PageArea->GetTabCount()-1; // Add one when a new AddTab is done;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_PgmCtrl->pDoc = this; p_PgmCtrl->pDoc = this;
p_TabArea->SetActiveTab(i_PageNr); p_TabArea->SetActiveTab(i_PageNr);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
p_Splitter->Initialize(p_TabArea); p_Splitter->Initialize(p_TabArea);
p_Splitter->SplitHorizontally(p_TabArea,p_PageArea,Sash); p_Splitter->SplitHorizontally(p_TabArea,p_PageArea,Sash);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// if (!OnInitODBC()) // if (!OnInitODBC())
// return FALSE; // return FALSE;
OnInitODBC(); OnInitODBC();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
Temp0.Printf(_("-I-> MainDoc::OnInitView() - End - %d DSN's found"),i_DSN); Temp0.Printf(_("-I-> MainDoc::OnInitView() - End - %d DSN's found"),i_DSN);
p_MainFrame->SetStatusText(Temp0, 0); p_MainFrame->SetStatusText(Temp0, 0);
wxLogMessage(Temp0); wxLogMessage(Temp0);
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainDoc::OnInitODBC() bool MainDoc::OnInitODBC()
{ {
char Dsn[SQL_MAX_DSN_LENGTH + 1]; char Dsn[SQL_MAX_DSN_LENGTH + 1];
char DsDesc[255]; // BJO20002501 instead of 512 char DsDesc[255]; // BJO20002501 instead of 512
Temp0 = ""; Temp0 = "";
i_DSN = 0; // Counter i_DSN = 0; // Counter
int i = 0; int i = 0;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Initialize the ODBC Environment for Database Operations // Initialize the ODBC Environment for Database Operations
if (SQLAllocEnv(&DbConnectInf.Henv) != SQL_SUCCESS) if (SQLAllocEnv(&DbConnectInf.Henv) != SQL_SUCCESS)
{ {
return FALSE; return FALSE;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
const char sep = 3; // separator character used in string between DSN ans DsDesc const char sep = 3; // separator character used in string between DSN ans DsDesc
wxStringList s_SortDSNList, s_SortDsDescList; wxStringList s_SortDSNList, s_SortDsDescList;
// BJO-20000127 // BJO-20000127
// In order to have same sort result on both Dsn and DsDesc, create a 'keyed' string. // In order to have same sort result on both Dsn and DsDesc, create a 'keyed' string.
// The key will be removed after sorting // The key will be removed after sorting
wxString KeyString; wxString KeyString;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
while(wxDbGetDataSource(DbConnectInf.Henv, Dsn, sizeof(Dsn), DsDesc, sizeof(DsDesc))) while(wxDbGetDataSource(DbConnectInf.Henv, Dsn, sizeof(Dsn), DsDesc, sizeof(DsDesc)))
{ {
i_DSN++; // How many Dsn have we ? i_DSN++; // How many Dsn have we ?
KeyString.Printf("%s%c%s",Dsn, sep, DsDesc); KeyString.Printf("%s%c%s",Dsn, sep, DsDesc);
s_SortDSNList.Add(Dsn); s_SortDSNList.Add(Dsn);
s_SortDsDescList.Add(KeyString); s_SortDsDescList.Add(KeyString);
} }
s_SortDSNList.Sort(); //BJO s_SortDSNList.Sort(); //BJO
s_SortDsDescList.Sort(); //BJO s_SortDsDescList.Sort(); //BJO
char ** s_SortDSN = s_SortDSNList.ListToArray(); //BJO char ** s_SortDSN = s_SortDSNList.ListToArray(); //BJO
char ** s_SortDsDesc = s_SortDsDescList.ListToArray(); //BJO char ** s_SortDsDesc = s_SortDsDescList.ListToArray(); //BJO
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Allocate n ODBC-DSN objects to hold the information // Allocate n ODBC-DSN objects to hold the information
p_DSN = new DSN[i_DSN]; //BJO p_DSN = new DSN[i_DSN]; //BJO
for (i=0;i<i_DSN;i++) for (i=0;i<i_DSN;i++)
{ {
KeyString = s_SortDsDesc[i]; KeyString = s_SortDsDesc[i];
KeyString = KeyString.AfterFirst(sep); KeyString = KeyString.AfterFirst(sep);
strcpy(s_SortDsDesc[i],KeyString.c_str()); strcpy(s_SortDsDesc[i],KeyString.c_str());
(p_DSN+i)->Dsn = s_SortDSN[i]; (p_DSN+i)->Dsn = s_SortDSN[i];
(p_DSN+i)->Drv = s_SortDsDesc[i]; (p_DSN+i)->Drv = s_SortDsDesc[i];
(p_DSN+i)->Usr = ""; (p_DSN+i)->Usr = "";
(p_DSN+i)->Pas = ""; (p_DSN+i)->Pas = "";
Temp0.Printf("%02d) Dsn(%s) DsDesc(%s)",i,(p_DSN+i)->Dsn.c_str(),(p_DSN+i)->Drv.c_str()); Temp0.Printf("%02d) Dsn(%s) DsDesc(%s)",i,(p_DSN+i)->Dsn.c_str(),(p_DSN+i)->Drv.c_str());
wxLogMessage(Temp0); wxLogMessage(Temp0);
} }
i = 0; i = 0;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Allocate n wxDatabase objects to hold the column information // Allocate n wxDatabase objects to hold the column information
db_Br = new BrowserDB[i_DSN]; db_Br = new BrowserDB[i_DSN];
for (i=0;i<i_DSN;i++) for (i=0;i<i_DSN;i++)
{ {
(db_Br+i)->p_LogWindow = p_LogWin; (db_Br+i)->p_LogWindow = p_LogWin;
(db_Br+i)->ODBCSource = (p_DSN+i)->Dsn; (db_Br+i)->ODBCSource = (p_DSN+i)->Dsn;
(db_Br+i)->UserName = (p_DSN+i)->Usr; (db_Br+i)->UserName = (p_DSN+i)->Usr;
(db_Br+i)->Password = (p_DSN+i)->Pas; (db_Br+i)->Password = (p_DSN+i)->Pas;
(db_Br+i)->pDoc = this; (db_Br+i)->pDoc = this;
(db_Br+i)->i_Which = i; (db_Br+i)->i_Which = i;
} }
if (SQLFreeEnv(DbConnectInf.Henv) != SQL_SUCCESS) // BJO20000125 / MJ10777.20000309 : no & if (SQLFreeEnv(DbConnectInf.Henv) != SQL_SUCCESS) // BJO20000125 / MJ10777.20000309 : no &
{ {
// Error freeing environment handle // Error freeing environment handle
} }
delete [] s_SortDSN; delete [] s_SortDSN;
delete [] s_SortDsDesc; delete [] s_SortDsDesc;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (!i_DSN) if (!i_DSN)
{ {
wxMessageBox(_("No Dataset names found in ODBC!\n" \ wxMessageBox(_("No Dataset names found in ODBC!\n" \
" Program will exit!\n\n" \ " Program will exit!\n\n" \
" Ciao"),"-E-> Fatal situation"); " Ciao"),"-E-> Fatal situation");
return FALSE; return FALSE;
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainDoc::OnChosenDSN(int Which) bool MainDoc::OnChosenDSN(int Which)
{ {
// wxLogMessage("OnChosenDSN(%d) - Begin",Which); // wxLogMessage("OnChosenDSN(%d) - Begin",Which);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
if (p_DBTree != NULL) if (p_DBTree != NULL)
{ {
p_TabArea->Show(FALSE); // Deactivate the Window p_TabArea->Show(FALSE); // Deactivate the Window
p_TabArea->RemoveTab(p_DBTree->i_ViewNr); p_TabArea->RemoveTab(p_DBTree->i_ViewNr);
p_TabArea->Show(TRUE); // Activate the Window p_TabArea->Show(TRUE); // Activate the Window
OnChosenTbl(77,""); OnChosenTbl(77,"");
} }
//------------------------- //-------------------------
p_TabArea->Show(FALSE); // Deactivate the Window p_TabArea->Show(FALSE); // Deactivate the Window
p_DBTree = new DBTree(p_TabArea, TREE_CTRL_DB,wxDefaultPosition, wxDefaultSize, p_DBTree = new DBTree(p_TabArea, TREE_CTRL_DB,wxDefaultPosition, wxDefaultSize,
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
p_TabArea->AddTab(p_DBTree,(p_DSN+Which)->Dsn," ? "); p_TabArea->AddTab(p_DBTree,(p_DSN+Which)->Dsn," ? ");
p_DBTree->i_ViewNr = p_TabArea->GetTabCount()-1; p_DBTree->i_ViewNr = p_TabArea->GetTabCount()-1;
p_TabArea->Show(TRUE); // Deactivate the Window p_TabArea->Show(TRUE); // Deactivate the Window
p_DBTree->i_Which = Which; p_DBTree->i_Which = Which;
p_DBTree->s_DSN = (p_DSN+Which)->Dsn; p_DBTree->s_DSN = (p_DSN+Which)->Dsn;
p_DBTree->i_TabArt = 0; p_DBTree->i_TabArt = 0;
p_DBTree->pDoc = this; p_DBTree->pDoc = this;
p_DBTree->OnPopulate(); p_DBTree->OnPopulate();
p_TabArea->SetActiveTab(p_DBTree->i_ViewNr); p_TabArea->SetActiveTab(p_DBTree->i_ViewNr);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// wxLogMessage("OnChosenDSN(%d) - End",Which); // wxLogMessage("OnChosenDSN(%d) - End",Which);
return TRUE; return TRUE;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
bool MainDoc::OnChosenTbl(int Tab,wxString Table) bool MainDoc::OnChosenTbl(int Tab,wxString Table)
{ {
// wxLogMessage("OnChosenTbl(%d,%s)",Tab,Table.c_str()); // wxLogMessage("OnChosenTbl(%d,%s)",Tab,Table.c_str());
//------------------------- //-------------------------
if (p_DBGrid != NULL) if (p_DBGrid != NULL)
{ {
if (p_DBGrid->i_TabArt == 0) if (p_DBGrid->i_TabArt == 0)
{ {
p_TabArea->Show(FALSE); // Deactivate the Window p_TabArea->Show(FALSE); // Deactivate the Window
p_TabArea->RemoveTab(p_DBGrid->i_ViewNr); p_TabArea->RemoveTab(p_DBGrid->i_ViewNr);
p_TabArea->Show(TRUE); // Activate the Window p_TabArea->Show(TRUE); // Activate the Window
} }
if (p_DBGrid->i_TabArt == 1) if (p_DBGrid->i_TabArt == 1)
{ {
p_PageArea->Show(FALSE); // Deactivate the Window p_PageArea->Show(FALSE); // Deactivate the Window
p_PageArea->RemoveTab(p_DBGrid->i_ViewNr); p_PageArea->RemoveTab(p_DBGrid->i_ViewNr);
p_PageArea->Show(TRUE); // Activate the Window p_PageArea->Show(TRUE); // Activate the Window
} }
p_DBGrid = NULL; p_DBGrid = NULL;
delete p_DBGrid; delete p_DBGrid;
} }
if (Tab == 77) // Delete only if (Tab == 77) // Delete only
return TRUE; return TRUE;
//------------------------- //-------------------------
if (Tab == 0) // Tabview if (Tab == 0) // Tabview
{ {
p_TabArea->Show(FALSE); // Deactivate the Window p_TabArea->Show(FALSE); // Deactivate the Window
p_DBGrid = new DBGrid(p_TabArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize, p_DBGrid = new DBGrid(p_TabArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
wxSUNKEN_BORDER); wxSUNKEN_BORDER);
p_TabArea->AddTab(p_DBGrid, Table, ""); p_TabArea->AddTab(p_DBGrid, Table, "");
p_DBGrid->i_ViewNr = p_TabArea->GetTabCount()-1; p_DBGrid->i_ViewNr = p_TabArea->GetTabCount()-1;
p_DBGrid->pDoc = this; p_DBGrid->pDoc = this;
p_DBGrid->db_Br = db_Br; p_DBGrid->db_Br = db_Br;
p_DBGrid->OnTableView(Table); p_DBGrid->OnTableView(Table);
p_TabArea->SetActiveTab(p_DBGrid->i_ViewNr); p_TabArea->SetActiveTab(p_DBGrid->i_ViewNr);
p_TabArea->Show(TRUE); // Activate the Window p_TabArea->Show(TRUE); // Activate the Window
} }
if (Tab == 1) // Pageview if (Tab == 1) // Pageview
{ {
p_PageArea->Show(FALSE); // Deactivate the Window p_PageArea->Show(FALSE); // Deactivate the Window
p_DBGrid = new DBGrid(p_PageArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize, p_DBGrid = new DBGrid(p_PageArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
wxSUNKEN_BORDER); wxSUNKEN_BORDER);
p_PageArea->AddTab(p_DBGrid, Table, ""); p_PageArea->AddTab(p_DBGrid, Table, "");
p_DBGrid->i_ViewNr = p_PageArea->GetTabCount()-1; p_DBGrid->i_ViewNr = p_PageArea->GetTabCount()-1;
p_DBGrid->pDoc = this; p_DBGrid->pDoc = this;
p_DBGrid->db_Br = db_Br; p_DBGrid->db_Br = db_Br;
p_DBGrid->i_Which = p_DBTree->i_Which; p_DBGrid->i_Which = p_DBTree->i_Which;
p_PageArea->Show(TRUE); // Activate the Window p_PageArea->Show(TRUE); // Activate the Window
p_DBGrid->OnTableView(Table); p_DBGrid->OnTableView(Table);
p_PageArea->SetActiveTab(p_DBGrid->i_ViewNr); p_PageArea->SetActiveTab(p_DBGrid->i_ViewNr);
} }
p_DBGrid->i_TabArt = Tab; p_DBGrid->i_TabArt = Tab;
//-------------------------- //--------------------------
return TRUE;; return TRUE;;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void MainDoc::OnLeer(wxString Aufrufer) void MainDoc::OnLeer(wxString Aufrufer)
{ {
// Temp0.Printf(_("\nMainDoc::OnLeer(%s) : auch diese funktion steht eines Tages zur Verf<72>gung !"),Aufrufer.c_str()); // Temp0.Printf(_("\nMainDoc::OnLeer(%s) : auch diese funktion steht eines Tages zur Verf<72>gung !"),Aufrufer.c_str());
Temp0.Printf(_("\nMainDoc::OnLeer(%s) : even this function will one day be available !"),Aufrufer.c_str()); Temp0.Printf(_("\nMainDoc::OnLeer(%s) : even this function will one day be available !"),Aufrufer.c_str());
wxLogMessage(Temp0); Temp0.Empty(); wxLogMessage(Temp0); Temp0.Empty();
return; return;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(DocSplitterWindow, wxSplitterWindow) BEGIN_EVENT_TABLE(DocSplitterWindow, wxSplitterWindow)
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
DocSplitterWindow::DocSplitterWindow(wxWindow *parent, wxWindowID id) : wxSplitterWindow(parent, id) DocSplitterWindow::DocSplitterWindow(wxWindow *parent, wxWindowID id) : wxSplitterWindow(parent, id)
{ // Define a constructor for my p_Splitter { // Define a constructor for my p_Splitter

View File

@@ -1,5 +1,5 @@
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
// Name: Doc.h // Name: doc.h
// Purpose: a non-MFC Document (a do-it-yourself document) // Purpose: a non-MFC Document (a do-it-yourself document)
// Author: Mark Johnson, mj10777@gmx.net // Author: Mark Johnson, mj10777@gmx.net
// Modified by: 19990808.mj10777 // Modified by: 19990808.mj10777
@@ -7,80 +7,87 @@
// Copyright: (c) Mark Johnson // Copyright: (c) Mark Johnson
// Licence: wxWindows license // Licence: wxWindows license
// RCS-ID: $Id$ // RCS-ID: $Id$
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//-- Some Global Vars -------------------------------------------------------------------- //-- Some Global Vars --------------------------------------------------------------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class DSN class DSN
{ {
public: public:
wxString Dsn; wxString Dsn;
wxString Drv; wxString Drv;
wxString Pas; wxString Pas;
wxString Usr; wxString Usr;
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Global structure for holding ODBC connection information // Global structure for holding ODBC connection information
extern wxDbConnectInf DbConnectInf; extern wxDbConnectInf DbConnectInf;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
extern wxConfigBase *p_ProgramCfg; // All Config and Path information extern wxConfigBase *p_ProgramCfg; // All Config and Path information
extern wxLogTextCtrl *p_LogBook; // All Log messages extern wxLogTextCtrl *p_LogBook; // All Log messages
extern wxString LogBuf; // String for all Logs extern wxString LogBuf; // String for all Logs
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class PgmCtrl; // Declared in PgmCtrl.h file class PgmCtrl; // Declared in PgmCtrl.h file
class DocSplitterWindow; // Declared at the end of the file class DocSplitterWindow; // Declared at the end of the file
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainDoc class MainDoc
{ {
public: public:
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
MainDoc(); MainDoc();
virtual ~MainDoc(); virtual ~MainDoc();
int Sash; int Sash;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
//-- declare document Vars here --------------------------------------------------------- //-- declare document Vars here ---------------------------------------------------------
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5;
BrowserDB *db_Br; // Pointer to wxDB BrowserDB *db_Br; // Pointer to wxDB
DSN *p_DSN; DSN *p_DSN;
int i_DSN; // Counter int i_DSN; // Counter
wxString s_BColour; wxString s_BColour;
wxFont *ft_Doc; wxFont *ft_Doc;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
DocSplitterWindow *p_Splitter; DocSplitterWindow *p_Splitter;
wxHtmlHelpController *p_Help; wxHtmlHelpController *p_Help;
wxFrame *p_MainFrame; // SDI Version wxFrame *p_MainFrame; // SDI Version
PgmCtrl *p_PgmCtrl; PgmCtrl *p_PgmCtrl;
DBTree *p_DBTree; DBTree *p_DBTree;
DBGrid *p_DBGrid; DBGrid *p_DBGrid;
wxTextCtrl *p_LogWin; wxTextCtrl *p_LogWin;
wxTabbedWindow *p_TabArea; wxTabbedWindow *p_TabArea;
wxPaggedWindow *p_PageArea; wxPagedWindow *p_PageArea;
int i_TabNr; // Amount of active Views in Tab int i_TabNr; // Amount of active Views in Tab
int i_PageNr; // Amount of active Views in Page int i_PageNr; // Amount of active Views in Page
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
//-- declare document Functions here ---------------------------------------------------- //-- declare document Functions here ----------------------------------------------------
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
bool OnNewDocument(); bool OnNewDocument();
bool OnInitView(); bool OnInitView();
bool OnInitODBC(); bool OnInitODBC();
bool OnChosenDSN(int Which); bool OnChosenDSN(int Which);
bool OnChosenTbl(int Tab,wxString Table); bool OnChosenTbl(int Tab,wxString Table);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
void OnLeer(wxString Aufrufer); // Dummy Funktion void OnLeer(wxString Aufrufer); // Dummy Funktion
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
}; };
//----------------------------------------------------------------------------------------
class DocSplitterWindow: public wxSplitterWindow class DocSplitterWindow: public wxSplitterWindow
{ {
public: public:
MainDoc *pDoc; MainDoc *pDoc;
DocSplitterWindow(wxWindow *parent, wxWindowID id); DocSplitterWindow(wxWindow *parent, wxWindowID id);
virtual bool OnSashPositionChange(int newSashPosition) virtual bool OnSashPositionChange(int newSashPosition)
{ {
if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) ) if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) )
return FALSE; return FALSE;
pDoc->Sash = newSashPosition; pDoc->Sash = newSashPosition;
return TRUE; return TRUE;
} }
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// Name: pgmctrl.h // Name: pgmctrl.cpp
// Purpose: Programm Control with a Tree // Purpose: Programm Control with a Tree
// Author: Mark Johnson // Author: Mark Johnson
// Modified by: 19990806.mj10777 // Modified by: 19990806.mj10777
@@ -39,253 +39,267 @@
//-- all #includes that every .cpp needs --- 19990807.mj10777 ---------------- //-- all #includes that every .cpp needs --- 19990807.mj10777 ----------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#include "std.h" // sorgsam Pflegen ! #include "std.h" // sorgsam Pflegen !
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
//-- Global functions -------------------------------------------------------------------- //-- Global functions --------------------------------------------------------------------
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
static inline const char *bool2String(bool b) static inline const char *bool2String(bool b)
{ {
return b ? "" : "not "; return b ? "" : "not ";
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
BEGIN_EVENT_TABLE(PgmCtrl, wxTreeCtrl) BEGIN_EVENT_TABLE(PgmCtrl, wxTreeCtrl)
EVT_MOTION (PgmCtrl::OnMouseMove) EVT_MOTION (PgmCtrl::OnMouseMove)
EVT_LEFT_DCLICK(PgmCtrl::OnSelChanged) EVT_LEFT_DCLICK(PgmCtrl::OnSelChanged)
EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_PGM,PgmCtrl::OnRightSelect) EVT_TREE_ITEM_RIGHT_CLICK(TREE_CTRL_PGM,PgmCtrl::OnRightSelect)
EVT_MENU(PGMCTRL_ODBC_USER,PgmCtrl::OnUserPassword) EVT_MENU(PGMCTRL_ODBC_USER,PgmCtrl::OnUserPassword)
END_EVENT_TABLE() END_EVENT_TABLE()
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// PgmCtrl implementation // PgmCtrl implementation
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(PgmCtrl, wxTreeCtrl) IMPLEMENT_DYNAMIC_CLASS(PgmCtrl, wxTreeCtrl)
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
PgmCtrl::PgmCtrl(wxWindow *parent) : wxTreeCtrl(parent) PgmCtrl::PgmCtrl(wxWindow *parent) : wxTreeCtrl(parent)
{ {
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
PgmCtrl::PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style) PgmCtrl::PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size, long style)
: wxTreeCtrl(parent, id, pos, size, style) : wxTreeCtrl(parent, id, pos, size, style)
{ {
// Make an image list containing small icons // Make an image list containing small icons
p_imageListNormal = new wxImageList(16, 16, TRUE); p_imageListNormal = new wxImageList(16, 16, TRUE);
// should correspond to TreeIc_xxx enum // should correspond to TreeIc_xxx enum
#if defined(__WXMSW__) && defined(__WIN16__) #if defined(__WXMSW__) && defined(__WIN16__)
// This is required in 16-bit Windows mode only because we can't load a specific (16x16) // This is required in 16-bit Windows mode only because we can't load a specific (16x16)
// icon image, so it comes out stretched // icon image, so it comes out stretched
p_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE)); p_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
p_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE)); p_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
#else #else
p_imageListNormal->Add(wxICON(aLogo)); p_imageListNormal->Add(wxICON(aLogo));
p_imageListNormal->Add(wxICON(DsnClosed)); p_imageListNormal->Add(wxICON(DsnClosed));
p_imageListNormal->Add(wxICON(DsnOpen)); p_imageListNormal->Add(wxICON(DsnOpen));
p_imageListNormal->Add(wxICON(DocClosed)); p_imageListNormal->Add(wxICON(DocClosed));
p_imageListNormal->Add(wxICON(DocOpen)); p_imageListNormal->Add(wxICON(DocOpen));
p_imageListNormal->Add(wxICON(FolderClosed)); p_imageListNormal->Add(wxICON(FolderClosed));
p_imageListNormal->Add(wxICON(FolderOpen)); p_imageListNormal->Add(wxICON(FolderOpen));
#endif #endif
SetImageList(p_imageListNormal); SetImageList(p_imageListNormal);
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
PgmCtrl::~PgmCtrl() PgmCtrl::~PgmCtrl()
{ {
delete p_imageListNormal; delete p_imageListNormal;
delete popupMenu1; delete popupMenu1;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#undef TREE_EVENT_HANDLER #undef TREE_EVENT_HANDLER
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
int PgmCtrl::OnPopulate() int PgmCtrl::OnPopulate()
{ {
SetFont(* pDoc->ft_Doc); SetFont(* pDoc->ft_Doc);
wxTreeItemId Root, Folder, Docu; wxTreeItemId Root, Folder, Docu;
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
int i; int i;
double dTmp = 1234567.89; double dTmp = 1234567.89;
Temp0.Printf(_("%s Functions"),p_ProgramCfg->GetAppName().c_str()); Temp0.Printf(_("%s Functions"),p_ProgramCfg->GetAppName().c_str());
Root = AddRoot(Temp0,TreeIc_Logo,TreeIc_Logo, new TreeData("Root")); Root = AddRoot(Temp0,TreeIc_Logo,TreeIc_Logo, new TreeData("Root"));
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
Folder = AppendItem(Root, _("Program settings") ,TreeIc_FolderClosed, TreeIc_FolderOpen, new TreeData("Settings")); Folder = AppendItem(Root, _("Program settings") ,TreeIc_FolderClosed, TreeIc_FolderOpen, new TreeData("Settings"));
p_ProgramCfg->Read("/Local/langid",&Temp0); p_ProgramCfg->Read("/Local/language",&Temp2); p_ProgramCfg->Read("/Local/langid",&Temp0); p_ProgramCfg->Read("/Local/language",&Temp2);
Temp1.Printf(_("locale (%s) ; Language (%s) ; Number(%2.2f)"),Temp0.c_str(), Temp2.c_str(), dTmp); Temp0.Empty(); Temp2.Empty(); Temp1.Printf(_("locale (%s) ; Language (%s) ; Number(%2.2f)"),Temp0.c_str(), Temp2.c_str(), dTmp); Temp0.Empty(); Temp2.Empty();
Docu = AppendItem(Folder, Temp1,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Setting Language")); Docu = AppendItem(Folder, Temp1,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Setting Language"));
p_ProgramCfg->Read("/Paths/Work",&Temp0); Temp1.Printf(_("Work Path : %s"),Temp0.c_str()); Temp0.Empty(); p_ProgramCfg->Read("/Paths/Work",&Temp0); Temp1.Printf(_("Work Path : %s"),Temp0.c_str()); Temp0.Empty();
Docu = AppendItem(Folder,Temp1,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Path Work")); Docu = AppendItem(Folder,Temp1,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Path Work"));
Docu = AppendItem(Folder, _("Change the language to English") ,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Language English")); Docu = AppendItem(Folder, _("Change the language to English") ,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Language English"));
Docu = AppendItem(Folder, _("Change the language to German") ,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Language German")); Docu = AppendItem(Folder, _("Change the language to German") ,TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("Language German"));
Docu = AppendItem(Folder, _("Delete all wxConfigBase Entry's"),TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("wxConfigBase Delete")); Docu = AppendItem(Folder, _("Delete all wxConfigBase Entry's"),TreeIc_DocClosed,TreeIc_DocOpen,new TreeData("wxConfigBase Delete"));
Folder = AppendItem(Root, "ODBC DSN",TreeIc_FolderClosed,TreeIc_FolderOpen,new TreeData("ODBC-DSN")); Folder = AppendItem(Root, "ODBC DSN",TreeIc_FolderClosed,TreeIc_FolderOpen,new TreeData("ODBC-DSN"));
for (i=0;i<pDoc->i_DSN;i++) for (i=0;i<pDoc->i_DSN;i++)
{ {
Temp0.Printf("ODBC-%s",(pDoc->p_DSN+i)->Dsn.c_str()); Temp0.Printf("ODBC-%s",(pDoc->p_DSN+i)->Dsn.c_str());
Docu = AppendItem(Folder,(pDoc->p_DSN+i)->Dsn ,TreeIc_DsnClosed,TreeIc_DsnOpen, new TreeData(Temp0)); Docu = AppendItem(Folder,(pDoc->p_DSN+i)->Dsn ,TreeIc_DsnClosed,TreeIc_DsnOpen, new TreeData(Temp0));
} }
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
popupMenu1 = NULL; popupMenu1 = NULL;
popupMenu1 = new wxMenu(""); popupMenu1 = new wxMenu("");
popupMenu1->Append(PGMCTRL_ODBC_USER, _("Set Username and Password")); popupMenu1->Append(PGMCTRL_ODBC_USER, _("Set Username and Password"));
// popupMenu1->AppendSeparator(); // popupMenu1->AppendSeparator();
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
Expand(Root); Expand(Root);
Expand(Folder); Expand(Folder);
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
return 0; return 0;
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void PgmCtrl::OnSelChanged(wxMouseEvent& WXUNUSED(event)) void PgmCtrl::OnSelChanged(wxMouseEvent& WXUNUSED(event))
{ {
int i; int i;
Temp0.Empty(); Temp1.Empty(); Temp0.Empty(); Temp1.Empty();
pDoc->p_MainFrame->SetStatusText(Temp0,0); pDoc->p_MainFrame->SetStatusText(Temp0,0);
// Get the Information that we need // Get the Information that we need
wxTreeItemId itemId = GetSelection(); wxTreeItemId itemId = GetSelection();
TreeData *item = (TreeData *)GetItemData(itemId); TreeData *item = (TreeData *)GetItemData(itemId);
if (item != NULL ) if (item != NULL )
{
int Treffer = 0;
Temp1.Printf("%s",item->m_desc.c_str());
//--------------------------------------------------------------------------------------
if (Temp1 == "Language English")
{
Temp0 = "std";
p_ProgramCfg->Write("/Local/langid",Temp0);
Temp0 = _("-I-> After a programm restart, the language will be changed to English.");
wxMessageBox(Temp0);
}
if (Temp1 == "Language German")
{
Temp0 = "de";
p_ProgramCfg->Write("/Local/langid",Temp0);
Temp0 = _("-I-> After a programm restart, the language will be changed to German.");
wxMessageBox(Temp0);
}
//--------------------------------------------------------------------------------------
if (Temp1 == "wxConfigBase Delete")
{
if (p_ProgramCfg->DeleteAll()) // Default Diretory for wxFileSelector
Temp0 = _("-I-> wxConfigBase.p_ProgramCfg->DeleteAll() was succesfull.");
else
Temp0 = _("-E-> wxConfigBase.p_ProgramCfg->DeleteAll() was not succesfull !");
wxBell(); // Ding_a_Ling
Treffer++;
}
//--------------------------------------------------------------------------------------
if (Temp1.Contains("ODBC-"))
{
Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN);
for (i=0;i<pDoc->i_DSN;i++)
{
if (Temp1 == (pDoc->p_DSN+i)->Dsn)
{ {
pDoc->OnChosenDSN(i); int Treffer = 0;
} Temp1.Printf("%s",item->m_desc.c_str());
} //--------------------------------------------------------------------------------------
Treffer++; if (Temp1 == "Language English")
} {
//-------------------------------------------------------------------------------------- Temp0 = "std";
if (Treffer == 0) p_ProgramCfg->Write("/Local/langid",Temp0);
{ Temp0 = _("-I-> After a programm restart, the language will be changed to English.");
//------------------------------------------------------------------------------------- wxMessageBox(Temp0);
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold," }
"%u children (%u immediately under this item)."), if (Temp1 == "Language German")
item->m_desc.c_str(), {
bool2String(IsSelected(itemId)), Temp0 = "de";
bool2String(IsExpanded(itemId)), p_ProgramCfg->Write("/Local/langid",Temp0);
bool2String(IsBold(itemId)), Temp0 = _("-I-> After a programm restart, the language will be changed to German.");
GetChildrenCount(itemId), wxMessageBox(Temp0);
GetChildrenCount(itemId)); }
LogBuf.Printf("-I-> PgmCtrl::OnSelChanged - %s",Temp0.c_str()); //--------------------------------------------------------------------------------------
wxLogMessage( "%s", LogBuf.c_str() ); if (Temp1 == "wxConfigBase Delete")
//------------------------------------------------------------------------------------- {
} if (p_ProgramCfg->DeleteAll()) // Default Diretory for wxFileSelector
} Temp0 = _("-I-> wxConfigBase.p_ProgramCfg->DeleteAll() was succesfull.");
} else
//---------------------------------------------------------------------------------------- Temp0 = _("-E-> wxConfigBase.p_ProgramCfg->DeleteAll() was not succesfull !");
void PgmCtrl::OnRightSelect(wxTreeEvent& WXUNUSED(event)) wxBell(); // Ding_a_Ling
{ Treffer++;
int i; }
Temp0.Empty(); //--------------------------------------------------------------------------------------
// Get the Information that we need if (Temp1.Contains("ODBC-"))
wxTreeItemId itemId = GetSelection(); {
DBTreeData *item = (DBTreeData *)GetItemData(itemId); Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN);
SaveDSN.Empty(); for (i=0;i<pDoc->i_DSN;i++)
if ( item != NULL ) {
{ if (Temp1 == (pDoc->p_DSN+i)->Dsn)
int Treffer = 0; {
Temp1.Printf("%s",item->m_desc.c_str()); pDoc->OnChosenDSN(i);
//-------------------------------------------------------------------------------------- }
if (Temp1.Contains("ODBC-")) }
{ Treffer++;
Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN); }
for (i=0;i<pDoc->i_DSN;i++) //--------------------------------------------------------------------------------------
{ if (Treffer == 0)
if (Temp1 == (pDoc->p_DSN+i)->Dsn) {
{ //-------------------------------------------------------------------------------------
SaveDSN = Temp1; Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
PopupMenu(popupMenu1,TreePos.x,TreePos.y); "%u children (%u immediately under this item)."),
} item->m_desc.c_str(),
} bool2String(IsSelected(itemId)),
Treffer++; bool2String(IsExpanded(itemId)),
}
//--------------------------------------------------------------------------------------
if (Treffer == 0)
{
/*
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
"%u children (%u immediately under this item)."),
item->m_desc.c_str(),
bool2String(IsSelected(itemId)),
bool2String(IsExpanded(itemId)),
bool2String(IsBold(itemId)), bool2String(IsBold(itemId)),
GetChildrenCount(itemId), GetChildrenCount(itemId),
GetChildrenCount(itemId)); GetChildrenCount(itemId));
LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str()); LogBuf.Printf("-I-> PgmCtrl::OnSelChanged - %s",Temp0.c_str());
wxLogMessage( "%s", LogBuf.c_str() ); wxLogMessage( "%s", LogBuf.c_str() );
*/ //-------------------------------------------------------------------------------------
} }
//-------------------------------------------------------------------------------------- }
} }
//----------------------------------------------------------------------------------------
void PgmCtrl::OnRightSelect(wxTreeEvent& WXUNUSED(event))
{
int i;
Temp0.Empty();
// Get the Information that we need
wxTreeItemId itemId = GetSelection();
DBTreeData *item = (DBTreeData *)GetItemData(itemId);
SaveDSN.Empty();
if ( item != NULL )
{
int Treffer = 0;
Temp1.Printf("%s",item->m_desc.c_str());
//--------------------------------------------------------------------------------------
if (Temp1.Contains("ODBC-"))
{
Temp1 = Temp1.Mid(5,wxSTRING_MAXLEN);
for (i=0;i<pDoc->i_DSN;i++)
{
if (Temp1 == (pDoc->p_DSN+i)->Dsn)
{
SaveDSN = Temp1;
PopupMenu(popupMenu1,TreePos.x,TreePos.y);
}
}
Treffer++;
}
//--------------------------------------------------------------------------------------
if (Treffer == 0)
{
/*
Temp0.Printf(_("Item '%s': %sselected, %sexpanded, %sbold,"
"%u children (%u immediately under this item)."),
item->m_desc.c_str(),
bool2String(IsSelected(itemId)),
bool2String(IsExpanded(itemId)),
bool2String(IsBold(itemId)),
GetChildrenCount(itemId),
GetChildrenCount(itemId));
LogBuf.Printf("-I-> DBTree::OnSelChanged - %s",Temp0.c_str());
wxLogMessage( "%s", LogBuf.c_str() );
*/
}
//--------------------------------------------------------------------------------------
}
} // void PgmCtrl::OnRightSelect(wxTreeEvent& WXUNUSED(event)) } // void PgmCtrl::OnRightSelect(wxTreeEvent& WXUNUSED(event))
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void PgmCtrl::OnMouseMove(wxMouseEvent &event) void PgmCtrl::OnMouseMove(wxMouseEvent &event)
{ {
TreePos = event.GetPosition(); TreePos = event.GetPosition();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
void PgmCtrl::OnUserPassword(wxCommandEvent& WXUNUSED(event)) void PgmCtrl::OnUserPassword(wxCommandEvent& WXUNUSED(event))
{ {
// wxMessageBox(SaveDSN); // wxMessageBox(SaveDSN);
int i; int i;
//-------------------------------------------- //--------------------------------------------
DlgUser *p_Dlg = new DlgUser(this,pDoc,""); DlgUser *p_Dlg = new DlgUser(this,pDoc,"");
//------------------------------------------- //-------------------------------------------
for (i=0;i<pDoc->i_DSN;i++) for (i=0;i<pDoc->i_DSN;i++)
{ {
if (SaveDSN == (pDoc->p_DSN+i)->Dsn) wxYield();
{ if (SaveDSN == (pDoc->p_DSN+i)->Dsn)
p_Dlg->pDoc = pDoc; {
p_Dlg->s_DSN = (pDoc->p_DSN+i)->Dsn; p_Dlg->pDoc = pDoc;
p_Dlg->s_User = (pDoc->p_DSN+i)->Usr; p_Dlg->s_DSN = (pDoc->p_DSN+i)->Dsn;
p_Dlg->s_Password = (pDoc->p_DSN+i)->Pas; p_Dlg->s_User = (pDoc->p_DSN+i)->Usr;
p_Dlg->OnInit(); p_Dlg->s_Password = (pDoc->p_DSN+i)->Pas;
p_Dlg->Fit(); p_Dlg->OnInit();
//-------------------- p_Dlg->Fit();
// Temp0.Printf("i(%d) ; s_DSN(%s) ; s_User(%s) ; s_Password(%s)",i,p_Dlg.s_DSN,p_Dlg.s_User,p_Dlg.s_Password); //--------------------
// wxMessageBox(Temp0); // Temp0.Printf("i(%d) ; s_DSN(%s) ; s_User(%s) ; s_Password(%s)",i,p_Dlg.s_DSN,p_Dlg.s_User,p_Dlg.s_Password);
bool OK = FALSE; // wxMessageBox(Temp0);
if (p_Dlg->ShowModal() == wxID_OK) bool OK = FALSE;
{ if (p_Dlg->ShowModal() == wxID_OK)
(pDoc->p_DSN+i)->Usr = p_Dlg->s_User; {
(pDoc->p_DSN+i)->Pas = p_Dlg->s_Password; (pDoc->p_DSN+i)->Usr = p_Dlg->s_User;
(pDoc->db_Br+i)->UserName = (pDoc->p_DSN+i)->Usr; (pDoc->p_DSN+i)->Pas = p_Dlg->s_Password;
(pDoc->db_Br+i)->Password = (pDoc->p_DSN+i)->Pas; (pDoc->db_Br+i)->UserName = (pDoc->p_DSN+i)->Usr;
OK = TRUE; (pDoc->db_Br+i)->Password = (pDoc->p_DSN+i)->Pas;
} OK = TRUE;
delete p_Dlg; }
if (!OK) return; delete p_Dlg;
//-------------------- if (!OK)
break; // We have what we want, leave return;
} //--------------------
} break; // We have what we want, leave
//------------------------------------------- }
SaveDSN.Empty(); }
//-------------------------------------------
SaveDSN.Empty();
} }
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

View File

@@ -7,62 +7,66 @@
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) Mark Johnson, Berlin Germany, mj10777@gmx.net // Copyright: (c) Mark Johnson, Berlin Germany, mj10777@gmx.net
// Licence: wxWindows license // Licence: wxWindows license
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class MainDoc; // Declared in doc.h file class MainDoc; // Declared in doc.h file
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class TreeData : public wxTreeItemData class TreeData : public wxTreeItemData
{ {
public: public:
TreeData(const wxString& desc) : m_desc(desc) { } TreeData(const wxString& desc) : m_desc(desc) { }
void ShowInfo(wxTreeCtrl *tree); void ShowInfo(wxTreeCtrl *tree);
wxString m_desc; wxString m_desc;
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
class PgmCtrl : public wxTreeCtrl class PgmCtrl : public wxTreeCtrl
{ {
public: public:
enum enum
{ // The order here must be the same as in m_imageListNormal ! { // The order here must be the same as in m_imageListNormal !
TreeIc_Logo, // logo.ico TreeIc_Logo, // logo.ico
TreeIc_DsnClosed, // dsnclose.ico TreeIc_DsnClosed, // dsnclose.ico
TreeIc_DsnOpen, // dsnopen.ico TreeIc_DsnOpen, // dsnopen.ico
TreeIc_DocClosed, // d_closed.ico TreeIc_DocClosed, // d_closed.ico
TreeIc_DocOpen, // d_open.ico TreeIc_DocOpen, // d_open.ico
TreeIc_FolderClosed, // f_closed.ico TreeIc_FolderClosed, // f_closed.ico
TreeIc_FolderOpen // f_open.ico TreeIc_FolderOpen // f_open.ico
}; };
wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5; wxString Temp0, Temp1, Temp2, Temp3, Temp4, Temp5;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
PgmCtrl() { } PgmCtrl() { }
PgmCtrl(wxWindow *parent); PgmCtrl(wxWindow *parent);
PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style); PgmCtrl(wxWindow *parent, const wxWindowID id,const wxPoint& pos, const wxSize& size,long style);
virtual ~PgmCtrl(); virtual ~PgmCtrl();
MainDoc *pDoc; MainDoc *pDoc;
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
int i_TabArt; // Tab = 0 ; Page = 1; int i_TabArt; // Tab = 0 ; Page = 1;
int i_ViewNr; // View Nummer in Tab / Page int i_ViewNr; // View Nummer in Tab / Page
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
wxImageList *p_imageListNormal; wxImageList *p_imageListNormal;
wxMenu *popupMenu1; // OnDBClass wxMenu *popupMenu1; // OnDBClass
wxPoint TreePos; wxPoint TreePos;
wxString SaveDSN; // Needed for User and Password wxString SaveDSN; // Needed for User and Password
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
public: public:
int OnPopulate(); int OnPopulate();
void OnSelChanged(wxMouseEvent& event); void OnSelChanged(wxMouseEvent& event);
void OnRightSelect(wxTreeEvent& event); void OnRightSelect(wxTreeEvent& event);
void OnMouseMove(wxMouseEvent& event); void OnMouseMove(wxMouseEvent& event);
void OnUserPassword(wxCommandEvent& event); void OnUserPassword(wxCommandEvent& event);
public: public:
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
// NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS() // NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
// if you want your overloaded OnCompareItems() to be called. // if you want your overloaded OnCompareItems() to be called.
// OTOH, if you don't want it you may omit the next line - this will // OTOH, if you don't want it you may omit the next line - this will
// make default (alphabetical) sorting much faster under wxMSW. // make default (alphabetical) sorting much faster under wxMSW.
DECLARE_DYNAMIC_CLASS(PgmCtrl) DECLARE_DYNAMIC_CLASS(PgmCtrl)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
#define PGMCTRL_01_BEGIN 1000 #define PGMCTRL_01_BEGIN 1000
#define PGMCTRL_ODBC_USER 1001 #define PGMCTRL_ODBC_USER 1001

View File

@@ -22,7 +22,7 @@
#include <wx/toolbar.h> #include <wx/toolbar.h>
#include <wx/treectrl.h> #include <wx/treectrl.h>
#ifdef __WXMSW__ #ifdef __WXMSW__
#include <wx/xpmhand.h> #include <wx/xpmhand.h>
#endif #endif
//--------------------------- //---------------------------
#include "tabpgwin.h" // Original name : "controlarea.h" #include "tabpgwin.h" // Original name : "controlarea.h"

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
// - to prevent Warnings under MingGW32 // - to prevent Warnings under MingGW32
// Modified by: 19990909 : mj10777@gmx.net // Modified by: 19990909 : mj10777@gmx.net
// - mNoVertScroll TRUE = no / FALSE = Original Code // - mNoVertScroll TRUE = no / FALSE = Original Code
// the Original Code Paints a Vertical Scroll in wxPaggedWindow // the Original Code Paints a Vertical Scroll in wxPagedWindow
// which is not needed in this Version. Use TRUE for this. // which is not needed in this Version. Use TRUE for this.
// Created: 07/09/98 // Created: 07/09/98
// RCS-ID: $Id$ // RCS-ID: $Id$
@@ -60,7 +60,7 @@ public:
virtual wxFont GetLabelingFont(); virtual wxFont GetLabelingFont();
// FOR NOW:: scrollbars are actually related to wxPaggedWindow // FOR NOW:: scrollbars are actually related to wxPagedWindow
wxScrollBar* mpTabScroll; wxScrollBar* mpTabScroll;
wxScrollBar* mpHorizScroll; wxScrollBar* mpHorizScroll;
@@ -154,9 +154,9 @@ public:
* of Microsoft Developer Studio 4.xx * of Microsoft Developer Studio 4.xx
*/ */
class wxPaggedWindow : public wxTabbedWindow class wxPagedWindow : public wxTabbedWindow
{ {
DECLARE_DYNAMIC_CLASS( wxPaggedWindow ) DECLARE_DYNAMIC_CLASS( wxPagedWindow )
// the protected: public: changes prevents Warnings in gcc // the protected: public: changes prevents Warnings in gcc
protected: protected:
bool mScrollEventInProgress; bool mScrollEventInProgress;
@@ -199,8 +199,8 @@ public:
public: public:
wxPaggedWindow(); wxPagedWindow();
~wxPaggedWindow(); ~wxPagedWindow();
// NOTE:: use public methods of the base class // NOTE:: use public methods of the base class
// to add "pages" to this window // to add "pages" to this window