]> git.saurik.com Git - wxWidgets.git/blame - demos/dbbrowse/dbgrid.cpp
A little black magic... When the C++ object (for a window or
[wxWidgets.git] / demos / dbbrowse / dbgrid.cpp
CommitLineData
c92b0f9a 1//----------------------------------------------------------------------------------------
b5ffecfc
GT
2// Name: DBGrid.cpp
3// Purpose: wxGrid sample
4// Author: Mark Johnson
5// Modified by: 19990929.mj10777 a reuseable DBGrid
6// Created: 19990929
b5ffecfc
GT
7// Copyright: (c)
8// Licence: wxWindows license
c09d434d 9// RCS-ID: $Id$
c92b0f9a
MJ
10//----------------------------------------------------------------------------------------
11//-- all #ifdefs that the whole Project needs. -------------------------------------------
12//----------------------------------------------------------------------------------------
b5ffecfc
GT
13#ifdef __GNUG__
14#pragma implementation
15#pragma interface
16#endif
c92b0f9a 17//----------------------------------------------------------------------------------------
b5ffecfc
GT
18// For compilers that support precompilation, includes "wx/wx.h".
19#include "wx/wxprec.h"
c92b0f9a 20//----------------------------------------------------------------------------------------
b5ffecfc
GT
21#ifdef __BORLANDC__
22#pragma hdrstop
23#endif
c92b0f9a 24//----------------------------------------------------------------------------------------
b5ffecfc
GT
25#ifndef WX_PRECOMP
26#include "wx/wx.h"
27#endif
c92b0f9a
MJ
28//----------------------------------------------------------------------------------------
29//-- all #includes that every .cpp needs --- 19990807.mj10777 ----------------
30//----------------------------------------------------------------------------------------
b5ffecfc 31#include "std.h" // sorgsam Pflegen !
c92b0f9a 32//----------------------------------------------------------------------------------------
b5ffecfc 33BEGIN_EVENT_TABLE(DBGrid, wxGrid)
645889ad
GT
34 EVT_MOTION (DBGrid::OnMouseMove)
35 // DBGrid
36 // ------------
37 EVT_GRID_CELL_CHANGE( DBGrid::OnCellChange )
38 EVT_GRID_CELL_LEFT_CLICK( DBGrid::OnCellLeftClick )
39 EVT_GRID_CELL_LEFT_DCLICK( DBGrid::OnCellLeftDClick )
40 EVT_GRID_CELL_RIGHT_CLICK( DBGrid::OnCellRightClick )
41 EVT_GRID_CELL_RIGHT_DCLICK( DBGrid::OnCellRightDClick )
42 // EVT_GRID_COL_SIZE( DBGrid::OnColSize )
43 // EVT_GRID_ROW_SIZE( DBGrid::OnRowSize )
44 EVT_GRID_EDITOR_SHOWN( DBGrid::OnEditorShown )
45 EVT_GRID_EDITOR_HIDDEN( DBGrid::OnEditorHidden )
46 EVT_GRID_LABEL_LEFT_CLICK( DBGrid::OnLabelLeftClick )
47 EVT_GRID_LABEL_LEFT_DCLICK( DBGrid::OnLabelLeftDClick )
48 EVT_GRID_LABEL_RIGHT_CLICK( DBGrid::OnLabelRightClick )
49 EVT_GRID_LABEL_RIGHT_DCLICK( DBGrid::OnLabelRightDClick )
50 EVT_GRID_RANGE_SELECT( DBGrid::OnRangeSelected )
51 EVT_GRID_ROW_SIZE( DBGrid::OnRowSize )
52 EVT_GRID_SELECT_CELL( DBGrid::OnSelectCell )
53 EVT_MENU(GRID_EDIT,DBGrid::OnModusEdit)
54 EVT_MENU(GRID_BROWSE,DBGrid::OnModusBrowse)
c92b0f9a 55END_EVENT_TABLE()
645889ad 56
c92b0f9a
MJ
57//----------------------------------------------------------------------------------------
58// wxListCtrl(parent, id, pos, size, style)
59// wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) );
60//----------------------------------------------------------------------------------------
61// DBGrid
62//----------------------------------------------------------------------------------------
63// DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size):
64// wxGrid(parent, id, pos, size)
65DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style):
645889ad 66wxGrid(parent, id, pos, size, style)
b5ffecfc 67{
645889ad
GT
68 b_EditModus = FALSE;
69 //---------------------------------------------------------------------------------------
70 popupMenu1 = new wxMenu("");
71 popupMenu1->Append(GRID_EDIT, _("Edit Modus"));
72 popupMenu2 = new wxMenu("");
73 popupMenu2->Append(GRID_BROWSE, _("Browse Modus"));
b5ffecfc 74}
645889ad 75
c92b0f9a 76//----------------------------------------------------------------------------------------
b5ffecfc
GT
77DBGrid::~DBGrid()
78{
645889ad
GT
79 delete popupMenu1;
80 delete popupMenu2;
b5ffecfc 81}
645889ad 82
c92b0f9a 83//----------------------------------------------------------------------------------------
b5ffecfc
GT
84int DBGrid::OnTableView(wxString Table)
85{
645889ad
GT
86 wxStopWatch sw;
87 //---------------------------------------------------------------------------------------
88 int i=0,x,y,z, ValidTable=0;
89 wxString Temp0;
90 wxBeginBusyCursor();
91 SetDefaultCellFont(* pDoc->ft_Doc);
92 //---------------------------------------------------------------------------------------
93 ct_BrowserDB = (db_Br+i_Which)->ct_BrowserDB; // Get the DSN Pointer
94 //---------------------------------------------------------------------------------------
95 if (ct_BrowserDB) // Valid pointer (!= NULL) ?
96 { // Pointer is Valid, use the wxDatabase Information
97 for (x=0;x<ct_BrowserDB->numTables;x++) // go through the Tables
98 {
99 if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableName,Table)) // is this our Table ?
100 { // Yes, the Data of this Table shall be put into the Grid
101 ValidTable = x; // Save the Tablenumber
102 (db_Br+i_Which)->OnSelect(Table,FALSE); // Select * from "table"
103 // Set the local Pointer to the Column Information we are going to use
104 (db_Br+i_Which)->cl_BrowserDB = (ct_BrowserDB->pTableInf+x)->pColInf;
105 if ((ct_BrowserDB->pTableInf+x)->pColInf) // Valid pointer (!= NULL) ?
106 { // Pointer is Valid, Column Informationen sind Vorhanden
107 i = (db_Br+i_Which)->i_Records; // How many Records are there
108 (db_Br+i_Which)->i_Which = ValidTable; // Still used ???? mj10777
109 if (i == 0) // If the Table is empty, then show one empty row
110 i++;
111 // wxLogMessage(_("\n-I-> DBGrid::OnTableView() : Vor CreateGrid"));
112 CreateGrid(i,(ct_BrowserDB->pTableInf+x)->numCols); // Records , Columns
113 for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) // Loop through the Fields
114 { // The Field / Column name is used here as Row Titel
115 SetColLabelValue(y,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
116 SetColSize(y,95);
117 } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
118 SetColSize(((ct_BrowserDB->pTableInf+x)->numCols-1),120); // Make the last Column Wider
119 // The Grid has been created, now fill it
120 for (z=0;z<(db_Br+i_Which)->i_Records;z++) // Loop through the Records
121 {
122 Temp0.Printf("%06d",z+1); SetRowLabelValue(z,Temp0); // Set Row Lable Value
123 (db_Br+i_Which)->OnGetNext((ct_BrowserDB->pTableInf+ValidTable)->numCols,FALSE);
124 for (y=0;y<(ct_BrowserDB->pTableInf+ValidTable)->numCols;y++) // Loop through the Fields
125 { // BrowserDB::OnGetNext Formats the field Value into tablename
126 SetCellValue(z, y,((db_Br+i_Which)->cl_BrowserDB+y)->tableName);
127 }
128 if (z % 50 == 0)
129 {
130 Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d (from %d) has been read."),Table.c_str(),z,(db_Br+i_Which)->i_Records);
131 pDoc->p_MainFrame->SetStatusText(Temp0, 0);
132 }
133 } // for (z=0;z<(db_Br+i_Which)->i_Records;z++)
134 Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read. - Time needed : %ld ms"),Table.c_str(),z,sw.Time());
135 wxLogMessage(Temp0);
136 pDoc->p_MainFrame->SetStatusText(Temp0, 0);
137 // The Grid has been filled, now leave
138 goto Weiter;
139 } // if ((ct_BrowserDB->pTableInf+x)->pColInf)
140 else
141 wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid Column Pointer : Failed"));
142 } // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE")
143 } // for (x=0;x<ct_BrowserDB->numTables;x++)
144 } // if (ct_BrowserDB)
e8c6aabe 145 else
645889ad
GT
146 wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid DSN Pointer : Failed"));
147 //---------------------------------------------------------------------------------------
148Weiter:
149 EnableEditing(b_EditModus); // Deactivate in-place Editing
150 wxEndBusyCursor();
151 //---------------------------------------------------------------------------------------
152 wxLogMessage(_("-I-> DBGrid::OnTableView() - End"));
153 return 0;
b5ffecfc 154}
645889ad 155
c92b0f9a 156//----------------------------------------------------------------------------------------
669f7a11 157void DBGrid::OnModusEdit(wxCommandEvent& event)
b5ffecfc 158{
645889ad
GT
159 b_EditModus = TRUE; // Needed by PopupMenu
160 EnableEditing(b_EditModus); // Activate in-place Editing
161 UpdateDimensions(); // Redraw the Grid
162 // wxLogMessage(_("-I-> DBGrid::OnModusEdit() - End"));
b5ffecfc 163}
645889ad 164
c92b0f9a 165//----------------------------------------------------------------------------------------
669f7a11 166void DBGrid::OnModusBrowse(wxCommandEvent& event)
b5ffecfc 167{
645889ad
GT
168 b_EditModus = FALSE; // Needed by PopupMenu
169 EnableEditing(b_EditModus); // Deactivate in-place Editing
170 UpdateDimensions(); // Redraw the Grid
171 // wxLogMessage(_("-I-> DBGrid::OnModusBrowse() - End"));
47677e9b 172}
645889ad 173
47677e9b
MJ
174//----------------------------------------------------------------------------------------
175void DBGrid::OnEditorShown( wxGridEvent& ev )
176{
645889ad
GT
177 // wxLogMessage(_("-I-> DBGrid::OnEditorShown() - End"));
178 ev.Skip();
47677e9b 179}
645889ad 180
47677e9b
MJ
181//----------------------------------------------------------------------------------------
182void DBGrid::OnEditorHidden( wxGridEvent& ev )
183{
645889ad
GT
184 // wxLogMessage(_("-I-> DBGrid::OnEditorHidden() - End"));
185 ev.Skip();
47677e9b 186}
645889ad
GT
187
188//----------------------------------------------------------------------------------------
47677e9b
MJ
189void DBGrid::OnSelectCell( wxGridEvent& ev )
190{
645889ad
GT
191 logBuf = "";
192 logBuf << "Selected cell at row " << ev.GetRow()
47677e9b 193 << " col " << ev.GetCol();
645889ad
GT
194 wxLogMessage( "%s", logBuf.c_str() );
195 // you must call Skip() if you want the default processing
196 // to occur in wxGrid
197 ev.Skip();
b5ffecfc 198}
645889ad 199
c92b0f9a 200//----------------------------------------------------------------------------------------
b5ffecfc
GT
201void DBGrid::OnMouseMove(wxMouseEvent &event)
202{
645889ad 203 MousePos = event.GetPosition();
b5ffecfc 204}
645889ad 205
c92b0f9a 206//----------------------------------------------------------------------------------------
b5ffecfc
GT
207void DBGrid::OnLabelLeftClick( wxGridEvent& ev )
208{
645889ad
GT
209 logBuf = "DBGrid::OnLabelLeftClick : ";
210 if ( ev.GetRow() != -1 )
211 {
212 logBuf << "row label " << ev.GetRow();
213 }
214 else if ( ev.GetCol() != -1 )
215 {
216 logBuf << "col label " << ev.GetCol();
217 }
218 else
219 {
220 logBuf << "corner label";
221 }
222 if ( ev.ShiftDown() )
223 logBuf << " (shift down)";
224
225 // wxLogMessage( "%s", logBuf.c_str() );
226 logBuf += "\n";
227 wxLogMessage(logBuf.c_str());
228 ev.Skip();
b5ffecfc 229}
645889ad 230
c92b0f9a 231//----------------------------------------------------------------------------------------
b5ffecfc
GT
232void DBGrid::OnLabelRightClick( wxGridEvent& ev )
233{
645889ad
GT
234 //-------------------------------------------------------
235 if (b_EditModus)
236 PopupMenu(popupMenu2,MousePos.x,MousePos.y);
237 else
238 PopupMenu(popupMenu1,MousePos.x,MousePos.y);
239 //-------------------
240 logBuf = "DBGrid::OnLabelRightClick : ";
241 if ( ev.GetRow() != -1 )
242 {
243 logBuf << "row label " << ev.GetRow();
244 }
245 else if ( ev.GetCol() != -1 )
246 {
247 logBuf << "col label " << ev.GetCol();
248 }
249 else
250 {
251 logBuf << "corner label";
252 }
253 if ( ev.ShiftDown() )
254 logBuf << " (shift down)";
255
256 // wxLogMessage( "%s", logBuf.c_str() );
257 logBuf += "\n";
258 wxLogMessage(logBuf.c_str());
259 ev.Skip();
b5ffecfc 260}
645889ad 261
c92b0f9a 262//----------------------------------------------------------------------------------------
b5ffecfc
GT
263void DBGrid::OnLabelLeftDClick( wxGridEvent& ev )
264{
645889ad
GT
265 logBuf = "DBGrid::OnLabelLeftDClick : ";
266 if ( ev.GetRow() != -1 )
267 {
268 logBuf << "row label " << ev.GetRow();
269 }
270 else if ( ev.GetCol() != -1 )
271 {
272 logBuf << "col label " << ev.GetCol();
273 }
274 else
275 {
276 logBuf << "corner label";
277 }
278 if ( ev.ShiftDown() )
279 logBuf << " (shift down)";
280
281 // wxLogMessage( "%s", logBuf.c_str() );
282 logBuf += "\n";
283 wxLogMessage(logBuf.c_str());
284 ev.Skip();
b5ffecfc 285}
645889ad 286
c92b0f9a 287//----------------------------------------------------------------------------------------
b5ffecfc
GT
288void DBGrid::OnLabelRightDClick( wxGridEvent& ev )
289{
645889ad
GT
290 logBuf = "DBGrid::OnLabelRightDClick : ";
291 if ( ev.GetRow() != -1 )
292 {
293 logBuf << "row label " << ev.GetRow();
294 }
295 else if ( ev.GetCol() != -1 )
296 {
297 logBuf << "col label " << ev.GetCol();
298 }
299 else
300 {
301 logBuf << "corner label";
302 }
303 if ( ev.ShiftDown() )
304 logBuf << " (shift down)";
305 // wxLogMessage( "%s", logBuf.c_str() );
306 logBuf += "\n";
307 wxLogMessage(logBuf.c_str());
308 ev.Skip();
b5ffecfc 309}
645889ad 310
c92b0f9a 311//----------------------------------------------------------------------------------------
b5ffecfc
GT
312void DBGrid::OnCellLeftClick( wxGridEvent& ev )
313{
645889ad
GT
314 logBuf = "DBGrid::OnCellLeftClick : ";
315 logBuf << "Cell at row " << ev.GetRow()
316 << " col " << ev.GetCol();
317 // wxLogMessage( "%s", logBuf.c_str() );
318 // wxMessageBox(logBuf);
319 logBuf += "\n";
320 wxLogMessage(logBuf.c_str());
321 // you must call event skip if you want default grid processing
322 // (cell highlighting etc.)
323 //
324 ev.Skip();
b5ffecfc 325}
645889ad 326
c92b0f9a 327//----------------------------------------------------------------------------------------
b5ffecfc
GT
328void DBGrid::OnCellRightClick( wxGridEvent& ev )
329{
645889ad
GT
330 logBuf = "DBGrid::OnCellRightClick : ";
331 logBuf << "Cell at row " << ev.GetRow()
332 << " col " << ev.GetCol();
333 // wxLogMessage( "%s", logBuf.c_str() );
334 // wxMessageBox(logBuf);
335 logBuf += "\n";
336 wxLogMessage(logBuf.c_str());
337 // you must call event skip if you want default grid processing
338 // (cell highlighting etc.)
339 //
340 ev.Skip();
b5ffecfc 341}
645889ad 342
c92b0f9a 343//----------------------------------------------------------------------------------------
b5ffecfc
GT
344void DBGrid::OnCellLeftDClick( wxGridEvent& ev )
345{
645889ad
GT
346 logBuf = "DBGrid::OnCellLeftDClick : ";
347 logBuf << "Cell at row " << ev.GetRow()
348 << " col " << ev.GetCol();
349 // wxLogMessage( "%s", logBuf.c_str() );
350 // wxMessageBox(logBuf);
351 logBuf += "\n";
352 wxLogMessage(logBuf.c_str());
353 // you must call event skip if you want default grid processing
354 // (cell highlighting etc.)
355 //
356 ev.Skip();
b5ffecfc 357}
645889ad 358
c92b0f9a 359//----------------------------------------------------------------------------------------
b5ffecfc
GT
360void DBGrid::OnCellRightDClick( wxGridEvent& ev )
361{
645889ad
GT
362 logBuf = "DBGrid::OnCellRightDClick : ";
363 logBuf << "Cell at row " << ev.GetRow()
364 << " col " << ev.GetCol();
365 // wxLogMessage( "%s", logBuf.c_str() );
366 // wxMessageBox(logBuf);
367 logBuf += "\n";
368 wxLogMessage(logBuf.c_str());
369 // you must call event skip if you want default grid processing
370 // (cell highlighting etc.)
371 //
372 ev.Skip();
b5ffecfc 373}
645889ad 374
c92b0f9a 375//----------------------------------------------------------------------------------------
b5ffecfc
GT
376void DBGrid::OnCellChange( wxGridEvent& ev )
377{
645889ad
GT
378 logBuf = "DBGrid::OnCellChange : ";
379 logBuf << "Cell at row " << ev.GetRow()
380 << " col " << ev.GetCol();
381 // wxLogMessage( "%s", logBuf.c_str() );
382 // wxMessageBox(logBuf);
383 logBuf += "\n";
384 wxLogMessage(logBuf.c_str());
385 // you must call event skip if you want default grid processing
386 // (cell highlighting etc.)
387 //
388 ev.Skip();
b5ffecfc 389}
645889ad 390
c92b0f9a 391//----------------------------------------------------------------------------------------
b5ffecfc
GT
392void DBGrid::OnRowSize( wxGridSizeEvent& ev )
393{
645889ad
GT
394 logBuf = "DBGrid::OnRowSize : ";
395 logBuf << "Resized row " << ev.GetRowOrCol();
396 // wxLogMessage( "%s", logBuf.c_str() );
397 logBuf += "\n";
398 wxLogMessage(logBuf.c_str());
399 ev.Skip();
b5ffecfc 400}
645889ad 401
c92b0f9a 402//----------------------------------------------------------------------------------------
b5ffecfc
GT
403void DBGrid::OnColSize( wxGridSizeEvent& ev )
404{
645889ad
GT
405 logBuf = "DBGrid::OnColSize : ";
406 logBuf << "Resized col " << ev.GetRowOrCol();
407 // wxLogMessage( "%s", logBuf.c_str() );
408 logBuf += "\n";
409 wxLogMessage(logBuf.c_str());
410 ev.Skip();
b5ffecfc 411}
645889ad 412
c92b0f9a 413//----------------------------------------------------------------------------------------
b5ffecfc
GT
414void DBGrid::OnRangeSelected( wxGridRangeSelectEvent& ev )
415{
645889ad
GT
416 logBuf = "DBGrid::OnRangeSelected : ";
417 logBuf << "Selected cells from row " << ev.GetTopRow()
418 << " col " << ev.GetLeftCol()
419 << " to row " << ev.GetBottomRow()
420 << " col " << ev.GetRightCol();
421 logBuf += "\n";
422 // wxLogMessage( "%s", logBuf.c_str() );
423 wxLogMessage(logBuf.c_str());
424 ev.Skip();
b5ffecfc 425}
c92b0f9a 426//----------------------------------------------------------------------------------------