~ubuntu-dev/wxwidgets2.6/upstream-debian

« back to all changes in this revision

Viewing changes to demos/dbbrowse/doc.cpp

  • Committer: Daniel T Chen
  • Date: 2006-06-26 10:15:11 UTC
  • Revision ID: crimsun@ubuntu.com-20060626101511-a4436cec4c6d9b35
Import Debian 2.6.3.2.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//----------------------------------------------------------------------------------------
 
2
// Name:        doc.cpp
 
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
 
7
// Created:     19990808
 
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
//----------------------------------------------------------------------------------------
 
14
#ifdef __GNUG__
 
15
#pragma implementation
 
16
#pragma interface
 
17
#endif
 
18
//----------------------------------------------------------------------------------------
 
19
// For compilers that support precompilation, includes "wx/wx.h".
 
20
#include "wx/wxprec.h"
 
21
//----------------------------------------------------------------------------------------
 
22
#ifdef __BORLANDC__
 
23
#pragma hdrstop
 
24
#endif
 
25
//----------------------------------------------------------------------------------------
 
26
#ifndef WX_PRECOMP
 
27
#include "wx/wx.h"
 
28
#endif
 
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;
 
37
 
 
38
//----------------------------------------------------------------------------------------
 
39
wxConfigBase   *p_ProgramCfg;       // All Config and Path information
 
40
wxLogTextCtrl  *p_LogBook;          // All Log messages
 
41
wxString        LogBuf;             // String for all Logs
 
42
 
 
43
//----------------------------------------------------------------------------------------
 
44
MainDoc::MainDoc()
 
45
{
 
46
    db_Br          = NULL;
 
47
    p_DSN          = NULL;
 
48
    i_DSN          = 0;
 
49
    p_Splitter     = NULL;
 
50
    p_MainFrame    = NULL;
 
51
    p_PgmCtrl      = NULL;               // Is not active
 
52
    p_DBTree       = NULL;
 
53
    p_DBGrid       = NULL;
 
54
    p_LogWin       = NULL;
 
55
    p_TabArea      = NULL;
 
56
    p_PageArea     = NULL;
 
57
    i_TabNr        = 0;
 
58
    i_PageNr       = 0;
 
59
    s_BColour      = _T("WHEAT");
 
60
    ft_Doc         = new wxFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
 
61
}
 
62
 
 
63
//----------------------------------------------------------------------------------------
 
64
MainDoc::~MainDoc()
 
65
{
 
66
    p_TabArea->Show(false);    // Deactivate the Window
 
67
    p_PageArea->Show(false);    // Deactivate the Window
 
68
 
 
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;
 
74
    delete [] p_DSN;
 
75
    delete p_DBTree;
 
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");
 
81
}
 
82
 
 
83
//----------------------------------------------------------------------------------------
 
84
bool MainDoc::OnNewDocument()
 
85
{
 
86
    wxStopWatch sw;
 
87
    //---------------------------------------------------------------------------------------
 
88
    if (!OnInitView())
 
89
        return false;
 
90
    p_PgmCtrl->OnPopulate();
 
91
    //---------------------------------------------------------------------------------------
 
92
    wxLogMessage(_("-I-> MainDoc::OnNewDocument() - End - Time needed : %ld ms"),sw.Time());
 
93
    return true;
 
94
}
 
95
 
 
96
//----------------------------------------------------------------------------------------
 
97
bool MainDoc::OnInitView()
 
98
{
 
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())
 
144
    //  return false;
 
145
    OnInitODBC();
 
146
    //---------------------------------------------------------------------------------------
 
147
#if wxUSE_STATUSBAR
 
148
    Temp0.Printf(_("-I-> MainDoc::OnInitView() - End - %d DSN's found"),i_DSN);
 
149
    p_MainFrame->SetStatusText(Temp0, 0);
 
150
    wxLogMessage(Temp0);
 
151
#endif // wxUSE_STATUSBAR
 
152
    return true;
 
153
}
 
154
 
 
155
//----------------------------------------------------------------------------------------
 
156
bool MainDoc::OnInitODBC()
 
157
{
 
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
 
162
    int i;
 
163
    //---------------------------------------------------------------------------------------
 
164
    // Initialize the ODBC Environment for Database Operations
 
165
 
 
166
    if (!DbConnectInf.AllocHenv())
 
167
    {
 
168
        return false;
 
169
    }
 
170
 
 
171
    //---------------------------------------------------------------------------------------
 
172
    const wxChar sep = 3; // separator character used in string between DSN and DsDesc
 
173
    wxSortedArrayString s_SortDSNList, s_SortDsDescList;
 
174
    // BJO-20000127
 
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
 
177
    wxString KeyString;
 
178
    //---------------------------------------------------------------------------------------
 
179
    while (wxDbGetDataSource(DbConnectInf.GetHenv(), Dsn, SQL_MAX_DSN_LENGTH, DsDesc, 254))
 
180
    {
 
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);
 
185
    }
 
186
 
 
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++)
 
193
    {
 
194
        KeyString = s_SortDsDescList[i];
 
195
        KeyString = KeyString.AfterFirst(sep);
 
196
 
 
197
        // ODBC-DSN object
 
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());
 
203
        wxLogMessage(Temp0);
 
204
 
 
205
        // wxDataBase object
 
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;
 
212
    }
 
213
 
 
214
    DbConnectInf.FreeHenv();
 
215
 
 
216
    //---------------------------------------------------------------------------------------
 
217
    if (!i_DSN)
 
218
    {
 
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"));
 
223
        return false;
 
224
    }
 
225
    //---------------------------------------------------------------------------------------
 
226
    return true;
 
227
}
 
228
 
 
229
//----------------------------------------------------------------------------------------
 
230
bool MainDoc::OnChosenDSN(int Which)
 
231
{
 
232
    // wxLogMessage("OnChosenDSN(%d) - Begin",Which);
 
233
    //---------------------------------------------------------------------------------------
 
234
    if (p_DBTree != NULL)
 
235
    {
 
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);
 
240
    }
 
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);
 
256
    return true;
 
257
}
 
258
 
 
259
//----------------------------------------------------------------------------------------
 
260
bool MainDoc::OnChosenTbl(int Tab,wxString Table)
 
261
{
 
262
    // wxLogMessage("OnChosenTbl(%d,%s)",Tab,Table.c_str());
 
263
    //-------------------------
 
264
    if (p_DBGrid != NULL)
 
265
    {
 
266
        if (p_DBGrid->i_TabArt == 0)
 
267
        {
 
268
            p_TabArea->Show(false);    // Deactivate the Window
 
269
            p_TabArea->RemoveTab(p_DBGrid->i_ViewNr);
 
270
            p_TabArea->Show(true);     // Activate the Window
 
271
        }
 
272
        if (p_DBGrid->i_TabArt == 1)
 
273
        {
 
274
            p_PageArea->Show(false);   // Deactivate the Window
 
275
            p_PageArea->RemoveTab(p_DBGrid->i_ViewNr);
 
276
            p_PageArea->Show(true);    // Activate the Window
 
277
        }
 
278
        p_DBGrid = NULL;
 
279
        delete p_DBGrid;
 
280
    }
 
281
    if (Tab == 77)               // Delete only
 
282
        return true;
 
283
    //-------------------------
 
284
    if (Tab == 0)  // Tabview
 
285
    {
 
286
        p_TabArea->Show(false);    // Deactivate the Window
 
287
        p_DBGrid = new DBGrid(p_TabArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
 
288
            wxSUNKEN_BORDER);
 
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
 
296
    }
 
297
    if (Tab == 1)  // Pageview
 
298
    {
 
299
        p_PageArea->Show(false);   // Deactivate the Window
 
300
        p_DBGrid = new DBGrid(p_PageArea,GRID_CTRL_DB,wxDefaultPosition, wxDefaultSize,
 
301
            wxSUNKEN_BORDER);
 
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);
 
310
    }
 
311
    p_DBGrid->i_TabArt = Tab;
 
312
    //--------------------------
 
313
    return true;
 
314
}
 
315
 
 
316
//----------------------------------------------------------------------------------------
 
317
void MainDoc::OnLeer(wxString Aufrufer)
 
318
{
 
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();
 
322
    return;
 
323
}
 
324
 
 
325
//----------------------------------------------------------------------------------------
 
326
BEGIN_EVENT_TABLE(DocSplitterWindow, wxSplitterWindow)
 
327
END_EVENT_TABLE()
 
328
 
 
329
//----------------------------------------------------------------------------------------
 
330
DocSplitterWindow::DocSplitterWindow(wxWindow *parent, wxWindowID id) : wxSplitterWindow(parent, id)
 
331
{ // Define a constructor for my p_Splitter
 
332
}
 
333
//----------------------------------------------------------------------------------------