1
//----------------------------------------------------------------------------------------
3
// Purpose: Holds information for DBBrowser - (a do-it-yourself document)
4
// Author: Mark Johnson
5
// Modified by: 19990808.mj10777
6
// BJO : Bart A.M. JOURQUIN
8
// Copyright: (c) Mark Johnson
9
// Licence: wxWindows license
10
// RCS-ID: $Id: doc.cpp,v 1.27 2005/03/07 22:17:01 JS Exp $
11
//----------------------------------------------------------------------------------------
12
//-- all #ifdefs that the whole Project needs. -------------------------------------------
13
//----------------------------------------------------------------------------------------
15
#pragma implementation
18
//----------------------------------------------------------------------------------------
19
// For compilers that support precompilation, includes "wx/wx.h".
20
#include "wx/wxprec.h"
21
//----------------------------------------------------------------------------------------
25
//----------------------------------------------------------------------------------------
29
//----------------------------------------------------------------------------------------
30
//-- all #includes that every .cpp needs ----19990807.mj10777 ----------------
31
//----------------------------------------------------------------------------------------
32
#include "std.h" // sorgsam Pflegen !
33
//----------------------------------------------------------------------------------------
34
//-- Some Global Vars for all Files (extern in ?.h needed) -------------------------------
35
// Global structure for holding ODBC connection information
36
extern wxDbConnectInf DbConnectInf;
38
//----------------------------------------------------------------------------------------
39
wxConfigBase *p_ProgramCfg; // All Config and Path information
40
wxLogTextCtrl *p_LogBook; // All Log messages
41
wxString LogBuf; // String for all Logs
43
//----------------------------------------------------------------------------------------
51
p_PgmCtrl = NULL; // Is not active
59
s_BColour = _T("WHEAT");
60
ft_Doc = new wxFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
63
//----------------------------------------------------------------------------------------
66
p_TabArea->Show(false); // Deactivate the Window
67
p_PageArea->Show(false); // Deactivate the Window
69
// ----------------------------------------------------------
70
// -E-> The Tree Controls take to long to close : Why ??
71
// ----------------------------------------------------------
72
delete ft_Doc; ft_Doc = NULL;
73
delete p_PgmCtrl; p_PgmCtrl = NULL;
76
delete p_TabArea; p_TabArea = NULL;
77
delete p_PageArea; p_PageArea = NULL;
78
delete p_Splitter; p_Splitter = NULL;
79
delete [] db_Br; db_Br = NULL;
80
// wxMessageBox("~MainDoc");
83
//----------------------------------------------------------------------------------------
84
bool MainDoc::OnNewDocument()
87
//---------------------------------------------------------------------------------------
90
p_PgmCtrl->OnPopulate();
91
//---------------------------------------------------------------------------------------
92
wxLogMessage(_("-I-> MainDoc::OnNewDocument() - End - Time needed : %ld ms"),sw.Time());
96
//----------------------------------------------------------------------------------------
97
bool MainDoc::OnInitView()
99
Sash = p_ProgramCfg->Read(_T("/MainFrame/Sash"), 200);
100
// wxMessageBox("OnInitView() - Begin ","-I->MainDoc::OnInitView");
101
//---------------------------------------------------------------------------------------
102
// create "workplace" window
103
//---------------------------------------------------------------------------------------
104
p_TabArea = new wxTabbedWindow(); // Init the Pointer
105
p_TabArea->Create(p_Splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE);
106
//---------------------------------------------------------------------------------------
107
p_PgmCtrl = new PgmCtrl(p_TabArea, TREE_CTRL_PGM,wxDefaultPosition, wxDefaultSize,
108
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
109
p_PgmCtrl->i_TabArt = 0; // 0 = Tab ; 1 = Page
110
p_PgmCtrl->i_ViewNr = p_TabArea->GetTabCount()-1;
111
//---------------------------------------------------------------------------------------
112
wxBitmap *p_FolderClose = new wxBitmap(_T("PgmCtrl")); //, wxBITMAP_TYPE_BMP_RESOURCE); // BJO20000115
113
//---------------------------------------------------------------------------------------
114
p_TabArea->AddTab(p_PgmCtrl,_T("PgmCtrl"),p_FolderClose);
115
delete p_FolderClose; // Memory leak
116
p_FolderClose = NULL;
117
wxUnusedVar(p_FolderClose);
118
//---------------------------------------------------------------------------------------
119
// now create "output" window
120
//---------------------------------------------------------------------------------------
121
p_PageArea = new wxPagedWindow(); // Init the Pointer
122
p_PageArea->Create(p_Splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE);
123
//---------------------------------------------------------------------------------------
124
p_LogWin = new wxTextCtrl(p_PageArea,wxID_ANY,wxEmptyString,
125
wxDefaultPosition, wxDefaultSize,wxTE_MULTILINE );
126
p_LogWin->SetFont(* ft_Doc);
127
// Don't forget ! This is always : i_TabArt = 0 ; i_ViewNr = 1;
128
//---------------------------------------------------------------------------------------
129
p_LogBook = new wxLogTextCtrl(p_LogWin); // make p_LogWin the LogBook
130
p_LogBook->SetActiveTarget(p_LogBook);
131
p_LogBook->SetTimestamp( NULL );
132
//---------------------------------------------------------------------------------------
133
p_PageArea->AddTab(p_LogWin,_("LogBook"), _T("what is this?") );
134
i_TabNr = p_TabArea->GetTabCount()-1; // Add one when a new AddTab is done;
135
i_PageNr = p_PageArea->GetTabCount()-1; // Add one when a new AddTab is done;
136
//---------------------------------------------------------------------------------------
137
p_PgmCtrl->pDoc = this;
138
p_TabArea->SetActiveTab(i_PageNr);
139
//---------------------------------------------------------------------------------------
140
p_Splitter->Initialize(p_TabArea);
141
p_Splitter->SplitHorizontally(p_TabArea,p_PageArea,Sash);
142
//---------------------------------------------------------------------------------------
143
// if (!OnInitODBC())
146
//---------------------------------------------------------------------------------------
148
Temp0.Printf(_("-I-> MainDoc::OnInitView() - End - %d DSN's found"),i_DSN);
149
p_MainFrame->SetStatusText(Temp0, 0);
151
#endif // wxUSE_STATUSBAR
155
//----------------------------------------------------------------------------------------
156
bool MainDoc::OnInitODBC()
158
wxChar Dsn[SQL_MAX_DSN_LENGTH+1];
159
wxChar DsDesc[254+1]; // BJO20002501 instead of 512
160
Temp0 = wxEmptyString;
161
i_DSN = 0; // Counter
163
//---------------------------------------------------------------------------------------
164
// Initialize the ODBC Environment for Database Operations
166
if (!DbConnectInf.AllocHenv())
171
//---------------------------------------------------------------------------------------
172
const wxChar sep = 3; // separator character used in string between DSN and DsDesc
173
wxSortedArrayString s_SortDSNList, s_SortDsDescList;
175
// In order to have same sort result on both Dsn and DsDesc, create a 'keyed' string.
176
// The key will be removed after sorting
178
//---------------------------------------------------------------------------------------
179
while (wxDbGetDataSource(DbConnectInf.GetHenv(), Dsn, SQL_MAX_DSN_LENGTH, DsDesc, 254))
181
i_DSN++; // How many Dsn have we ?
182
KeyString.Printf(_T("%s%c%s"),Dsn, sep, DsDesc);
183
s_SortDSNList.Add(Dsn);
184
s_SortDsDescList.Add(KeyString);
187
//---------------------------------------------------------------------------------------
188
// Allocate n ODBC-DSN objects to hold the information
189
// Allocate n wxDatabase objects to hold the column information
190
p_DSN = new DSN[i_DSN]; //BJO
191
db_Br = new BrowserDB[i_DSN];
192
for (i=0;i<i_DSN;i++)
194
KeyString = s_SortDsDescList[i];
195
KeyString = KeyString.AfterFirst(sep);
198
(p_DSN+i)->Dsn = s_SortDSNList[i];
199
(p_DSN+i)->Drv = KeyString;
200
(p_DSN+i)->Usr = wxEmptyString;
201
(p_DSN+i)->Pas = wxEmptyString;
202
Temp0.Printf(_T("%02d) Dsn(%s) DsDesc(%s)"),i,(p_DSN+i)->Dsn.c_str(),(p_DSN+i)->Drv.c_str());
206
(db_Br+i)->p_LogWindow = p_LogWin;
207
(db_Br+i)->ODBCSource = (p_DSN+i)->Dsn;
208
(db_Br+i)->UserName = (p_DSN+i)->Usr;
209
(db_Br+i)->Password = (p_DSN+i)->Pas;
210
(db_Br+i)->pDoc = this;
211
(db_Br+i)->i_Which = i;
214
DbConnectInf.FreeHenv();
216
//---------------------------------------------------------------------------------------
219
wxString message = _("No Dataset names found in ODBC!\n");
220
message += _(" Program will exit!\n\n");
221
message += _(" Ciao");
222
wxMessageBox( message,_("-E-> Fatal situation"));
225
//---------------------------------------------------------------------------------------
229
//----------------------------------------------------------------------------------------
230
bool MainDoc::OnChosenDSN(int Which)
232
// wxLogMessage("OnChosenDSN(%d) - Begin",Which);
233
//---------------------------------------------------------------------------------------
234
if (p_DBTree != NULL)
236
p_TabArea->Show(false); // Deactivate the Window
237
p_TabArea->RemoveTab(p_DBTree->i_ViewNr);
238
p_TabArea->Show(true); // Activate the Window
239
OnChosenTbl(77,wxEmptyString);
241
//-------------------------
242
p_TabArea->Show(false); // Deactivate the Window
243
p_DBTree = new DBTree(p_TabArea, TREE_CTRL_DB,wxDefaultPosition, wxDefaultSize,
244
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
245
p_TabArea->AddTab(p_DBTree,(p_DSN+Which)->Dsn,_T(" ? "));
246
p_DBTree->i_ViewNr = p_TabArea->GetTabCount()-1;
247
p_TabArea->Show(true); // Deactivate the Window
248
p_DBTree->i_Which = Which;
249
p_DBTree->s_DSN = (p_DSN+Which)->Dsn;
250
p_DBTree->i_TabArt = 0;
251
p_DBTree->pDoc = this;
252
p_DBTree->OnPopulate();
253
p_TabArea->SetActiveTab(p_DBTree->i_ViewNr);
254
//---------------------------------------------------------------------------------------
255
// wxLogMessage("OnChosenDSN(%d) - End",Which);
259
//----------------------------------------------------------------------------------------
260
bool MainDoc::OnChosenTbl(int Tab,wxString Table)
262
// wxLogMessage("OnChosenTbl(%d,%s)",Tab,Table.c_str());
263
//-------------------------
264
if (p_DBGrid != NULL)
266
if (p_DBGrid->i_TabArt == 0)
268
p_TabArea->Show(false); // Deactivate the Window
269
p_TabArea->RemoveTab(p_DBGrid->i_ViewNr);
270
p_TabArea->Show(true); // Activate the Window
272
if (p_DBGrid->i_TabArt == 1)
274
p_PageArea->Show(false); // Deactivate the Window
275
p_PageArea->RemoveTab(p_DBGrid->i_ViewNr);
276
p_PageArea->Show(true); // Activate the Window
281
if (Tab == 77) // Delete only
283
//-------------------------
284
if (Tab == 0) // Tabview
286
p_TabArea->Show(false); // Deactivate the Window
287
p_DBGrid = new DBGrid(p_TabArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
289
p_TabArea->AddTab(p_DBGrid, Table, wxEmptyString);
290
p_DBGrid->i_ViewNr = p_TabArea->GetTabCount()-1;
291
p_DBGrid->pDoc = this;
292
p_DBGrid->db_Br = db_Br;
293
p_DBGrid->OnTableView(Table);
294
p_TabArea->SetActiveTab(p_DBGrid->i_ViewNr);
295
p_TabArea->Show(true); // Activate the Window
297
if (Tab == 1) // Pageview
299
p_PageArea->Show(false); // Deactivate the Window
300
p_DBGrid = new DBGrid(p_PageArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
302
p_PageArea->AddTab(p_DBGrid, Table, wxEmptyString);
303
p_DBGrid->i_ViewNr = p_PageArea->GetTabCount()-1;
304
p_DBGrid->pDoc = this;
305
p_DBGrid->db_Br = db_Br;
306
p_DBGrid->i_Which = p_DBTree->i_Which;
307
p_PageArea->Show(true); // Activate the Window
308
p_DBGrid->OnTableView(Table);
309
p_PageArea->SetActiveTab(p_DBGrid->i_ViewNr);
311
p_DBGrid->i_TabArt = Tab;
312
//--------------------------
316
//----------------------------------------------------------------------------------------
317
void MainDoc::OnLeer(wxString Aufrufer)
319
// Temp0.Printf(_("\nMainDoc::OnLeer(%s) : auch diese funktion steht eines Tages zur Verf�gung !"),Aufrufer.c_str());
320
Temp0.Printf(_("\nMainDoc::OnLeer(%s) : even this function will one day be available !"),Aufrufer.c_str());
321
wxLogMessage(Temp0); Temp0.Empty();
325
//----------------------------------------------------------------------------------------
326
BEGIN_EVENT_TABLE(DocSplitterWindow, wxSplitterWindow)
329
//----------------------------------------------------------------------------------------
330
DocSplitterWindow::DocSplitterWindow(wxWindow *parent, wxWindowID id) : wxSplitterWindow(parent, id)
331
{ // Define a constructor for my p_Splitter
333
//----------------------------------------------------------------------------------------