]> git.saurik.com Git - wxWidgets.git/blame - demos/dbbrowse/dbgrid.cpp
Major changes in wxVidXANIM (support for output filtering)
[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)
c92b0f9a
MJ
34 EVT_MOTION (DBGrid::OnMouseMove)
35 // DBGrid
36 EVT_GRID_LABEL_LEFT_CLICK( DBGrid::OnLabelLeftClick )
37 EVT_GRID_LABEL_RIGHT_CLICK( DBGrid::OnLabelRightClick )
38 EVT_GRID_LABEL_LEFT_DCLICK( DBGrid::OnLabelLeftDClick )
39 EVT_GRID_LABEL_RIGHT_DCLICK( DBGrid::OnLabelRightDClick )
40 EVT_GRID_CELL_LEFT_CLICK( DBGrid::OnCellLeftClick )
41 EVT_GRID_CELL_RIGHT_CLICK( DBGrid::OnCellRightClick )
42 EVT_GRID_CELL_LEFT_DCLICK( DBGrid::OnCellLeftDClick )
43 EVT_GRID_CELL_RIGHT_DCLICK( DBGrid::OnCellRightDClick )
44 EVT_GRID_ROW_SIZE( DBGrid::OnRowSize )
45 // EVT_GRID_COL_SIZE( DBGrid::OnColSize )
46 EVT_GRID_RANGE_SELECT( DBGrid::OnRangeSelected )
47 EVT_GRID_CELL_CHANGE( DBGrid::OnCellChange )
48 EVT_MENU(GRID_EDIT,DBGrid::OnModusEdit)
49 EVT_MENU(GRID_BROWSE,DBGrid::OnModusBrowse)
50END_EVENT_TABLE()
51//----------------------------------------------------------------------------------------
52// wxListCtrl(parent, id, pos, size, style)
53// wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) );
54//----------------------------------------------------------------------------------------
55// DBGrid
56//----------------------------------------------------------------------------------------
57// DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size):
58// wxGrid(parent, id, pos, size)
59DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size, long style):
60 wxGrid(parent, id, pos, size, style)
b5ffecfc 61{
c92b0f9a
MJ
62 b_EditModus = TRUE;
63 //---------------------------------------------------------------------------------------
64 popupMenu1 = new wxMenu("");
65 popupMenu1->Append(GRID_EDIT, _("Edit Modus"));
66 popupMenu2 = new wxMenu("");
67 popupMenu2->Append(GRID_BROWSE, _("Browse Modus"));
b5ffecfc 68}
c92b0f9a 69//----------------------------------------------------------------------------------------
b5ffecfc
GT
70DBGrid::~DBGrid()
71{
72}
c92b0f9a 73//----------------------------------------------------------------------------------------
b5ffecfc
GT
74int DBGrid::OnTableView(wxString Table)
75{
897d36c2 76 wxStopWatch sw;
c92b0f9a 77 //---------------------------------------------------------------------------------------
e8c6aabe
MJ
78 int i=0,x,y,z, ValidTable=0;
79 wxString Temp0;
e8c6aabe 80 wxBeginBusyCursor();
c92b0f9a
MJ
81 SetFont(* pDoc->ft_Doc);
82 //---------------------------------------------------------------------------------------
e8c6aabe 83 ct_BrowserDB = (db_Br+i_Which)->ct_BrowserDB; // Get the DSN Pointer
c92b0f9a 84 //---------------------------------------------------------------------------------------
e8c6aabe
MJ
85 if (ct_BrowserDB) // Valid pointer (!= NULL) ?
86 { // Pointer is Valid, use the wxDatabase Information
87 for (x=0;x<ct_BrowserDB->numTables;x++) // go through the Tables
88 {
89 if (!wxStrcmp((ct_BrowserDB->pTableInf+x)->tableName,Table)) // is this our Table ?
90 { // Yes, the Data of this Table shall be put into the Grid
91 ValidTable = x; // Save the Tablenumber
92 (db_Br+i_Which)->OnSelect(Table,FALSE); // Select * from "table"
93 // Set the local Pointer to the Column Information we are going to use
94 (db_Br+i_Which)->cl_BrowserDB = (ct_BrowserDB->pTableInf+x)->pColInf;
95 if ((ct_BrowserDB->pTableInf+x)->pColInf) // Valid pointer (!= NULL) ?
96 { // Pointer is Valid, Column Informationen sind Vorhanden
97 i = (db_Br+i_Which)->i_Records; // How many Records are there
98 (db_Br+i_Which)->i_Which = ValidTable; // Still used ???? mj10777
99 if (i == 0) // If the Table is empty, then show one empty row
100 i++;
0068587b 101 // wxLogMessage(_("\n-I-> DBGrid::OnTableView() : Vor CreateGrid"));
e8c6aabe
MJ
102 CreateGrid(i,(ct_BrowserDB->pTableInf+x)->numCols); // Records , Columns
103 for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++) // Loop through the Fields
104 { // The Field / Column name is used here as Row Titel
105 SetColLabelValue(y,((ct_BrowserDB->pTableInf+x)->pColInf+y)->colName);
106 SetColSize(y,95);
107 } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
108 SetColSize(((ct_BrowserDB->pTableInf+x)->numCols-1),120); // Make the last Column Wider
109 // The Grid has been created, now fill it
110 for (z=0;z<(db_Br+i_Which)->i_Records;z++) // Loop through the Records
111 {
112 Temp0.Printf("%06d",z+1); SetRowLabelValue(z,Temp0); // Set Row Lable Value
113 (db_Br+i_Which)->OnGetNext((ct_BrowserDB->pTableInf+ValidTable)->numCols,FALSE);
114 for (y=0;y<(ct_BrowserDB->pTableInf+ValidTable)->numCols;y++) // Loop through the Fields
115 { // BrowserDB::OnGetNext Formats the field Value into tablename
116 SetCellValue(z, y,((db_Br+i_Which)->cl_BrowserDB+y)->tableName);
117 }
118 if (z % 50 == 0)
119 {
120 Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d has been read."),Table.c_str(),z);
121 pDoc->p_MainFrame->SetStatusText(Temp0, 0);
122 }
123 } // for (z=0;z<(db_Br+i_Which)->i_Records;z++)
897d36c2
MJ
124 Temp0.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read. - Time needed : %ld ms"),Table.c_str(),z,sw.Time());
125 wxLogMessage(Temp0);
e8c6aabe
MJ
126 pDoc->p_MainFrame->SetStatusText(Temp0, 0);
127 // The Grid has been filled, now leave
128 goto Weiter;
129 } // if ((ct_BrowserDB->pTableInf+x)->pColInf)
130 else
0068587b 131 wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid Column Pointer : Failed"));
e8c6aabe
MJ
132 } // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE")
133 } // for (x=0;x<ct_BrowserDB->numTables;x++)
134 } // if (ct_BrowserDB)
135 else
0068587b 136 wxLogMessage(_("\n-E-> DBGrid::OnTableView() : Invalid DSN Pointer : Failed"));
c92b0f9a 137 //---------------------------------------------------------------------------------------
b5ffecfc 138 Weiter:
c92b0f9a
MJ
139 SetEditInPlace(b_EditModus); // Activate in-place Editing (FALSE)
140 wxEndBusyCursor();
141 //---------------------------------------------------------------------------------------
142 wxLogMessage(_("-I-> DBGrid::OnTableView() - End"));
143 return 0;
b5ffecfc 144}
c92b0f9a 145//----------------------------------------------------------------------------------------
b5ffecfc
GT
146void DBGrid::OnModusEdit(wxMenu& menu, wxCommandEvent& event)
147{
c92b0f9a
MJ
148 b_EditModus = TRUE; // Needed by PopupMenu
149 SetEditable(FALSE); // Do not Edit with Text Edit Control
150 SetEditInPlace(b_EditModus); // Deactivate in-place Editing
151 UpdateDimensions(); // Redraw the Grid
b5ffecfc 152}
c92b0f9a 153//----------------------------------------------------------------------------------------
b5ffecfc
GT
154void DBGrid::OnModusBrowse(wxMenu& menu, wxCommandEvent& event)
155{
c92b0f9a
MJ
156 b_EditModus = FALSE; // Needed by PopupMenu
157 SetEditInPlace(b_EditModus); // Deactivate in-place Editing
158 UpdateDimensions(); // Redraw the Grid
b5ffecfc 159}
c92b0f9a 160//----------------------------------------------------------------------------------------
b5ffecfc
GT
161void DBGrid::OnMouseMove(wxMouseEvent &event)
162{
c92b0f9a 163 MousePos = event.GetPosition();
b5ffecfc 164}
c92b0f9a 165//----------------------------------------------------------------------------------------
b5ffecfc
GT
166void DBGrid::OnLabelLeftClick( wxGridEvent& ev )
167{
c92b0f9a
MJ
168 logBuf = "DBGrid::OnLabelLeftClick : ";
169 if ( ev.GetRow() != -1 )
170 {
171 logBuf << "row label " << ev.GetRow();
172 }
173 else if ( ev.GetCol() != -1 )
174 {
175 logBuf << "col label " << ev.GetCol();
176 }
177 else
178 {
179 logBuf << "corner label";
180 }
181 if ( ev.ShiftDown() )
182 logBuf << " (shift down)";
183 // wxLogMessage( "%s", logBuf.c_str() );
184 logBuf += "\n";
185 wxLogMessage(logBuf.c_str());
186 ev.Skip();
b5ffecfc 187}
c92b0f9a 188//----------------------------------------------------------------------------------------
b5ffecfc
GT
189void DBGrid::OnLabelRightClick( wxGridEvent& ev )
190{
191 //-------------------
c92b0f9a
MJ
192 if (b_EditModus)
193 PopupMenu(popupMenu2,MousePos.x,MousePos.y);
194 else
195 PopupMenu(popupMenu1,MousePos.x,MousePos.y);
196 //-------------------
197 logBuf = "DBGrid::OnLabelRightClick : ";
198 if ( ev.GetRow() != -1 )
199 {
200 logBuf << "row label " << ev.GetRow();
201 }
202 else if ( ev.GetCol() != -1 )
203 {
204 logBuf << "col label " << ev.GetCol();
205 }
206 else
207 {
208 logBuf << "corner label";
209 }
210 if ( ev.ShiftDown() )
211 logBuf << " (shift down)";
212 // wxLogMessage( "%s", logBuf.c_str() );
213 logBuf += "\n";
214 wxLogMessage(logBuf.c_str());
215 ev.Skip();
b5ffecfc 216}
c92b0f9a 217//----------------------------------------------------------------------------------------
b5ffecfc
GT
218void DBGrid::OnLabelLeftDClick( wxGridEvent& ev )
219{
c92b0f9a
MJ
220 logBuf = "DBGrid::OnLabelLeftDClick : ";
221 if ( ev.GetRow() != -1 )
222 {
223 logBuf << "row label " << ev.GetRow();
224 }
225 else if ( ev.GetCol() != -1 )
226 {
227 logBuf << "col label " << ev.GetCol();
228 }
229 else
230 {
231 logBuf << "corner label";
232 }
233 if ( ev.ShiftDown() )
234 logBuf << " (shift down)";
235 // wxLogMessage( "%s", logBuf.c_str() );
236 logBuf += "\n";
237 wxLogMessage(logBuf.c_str());
238 ev.Skip();
b5ffecfc 239}
c92b0f9a 240//----------------------------------------------------------------------------------------
b5ffecfc
GT
241void DBGrid::OnLabelRightDClick( wxGridEvent& ev )
242{
c92b0f9a
MJ
243 logBuf = "DBGrid::OnLabelRightDClick : ";
244 if ( ev.GetRow() != -1 )
245 {
246 logBuf << "row label " << ev.GetRow();
247 }
248 else if ( ev.GetCol() != -1 )
249 {
250 logBuf << "col label " << ev.GetCol();
251 }
252 else
253 {
254 logBuf << "corner label";
255 }
256 if ( ev.ShiftDown() )
257 logBuf << " (shift down)";
258 // wxLogMessage( "%s", logBuf.c_str() );
259 logBuf += "\n";
260 wxLogMessage(logBuf.c_str());
261 ev.Skip();
b5ffecfc 262}
c92b0f9a 263//----------------------------------------------------------------------------------------
b5ffecfc
GT
264void DBGrid::OnCellLeftClick( wxGridEvent& ev )
265{
c92b0f9a
MJ
266 logBuf = "DBGrid::OnCellLeftClick : ";
267 logBuf << "Cell at row " << ev.GetRow()
268 << " col " << ev.GetCol();
269 // wxLogMessage( "%s", logBuf.c_str() );
270 // wxMessageBox(logBuf);
271 logBuf += "\n";
272 wxLogMessage(logBuf.c_str());
273 // you must call event skip if you want default grid processing
274 // (cell highlighting etc.)
275 //
276 ev.Skip();
b5ffecfc 277}
c92b0f9a 278//----------------------------------------------------------------------------------------
b5ffecfc
GT
279void DBGrid::OnCellRightClick( wxGridEvent& ev )
280{
c92b0f9a
MJ
281 logBuf = "DBGrid::OnCellRightClick : ";
282 logBuf << "Cell at row " << ev.GetRow()
283 << " col " << ev.GetCol();
284 // wxLogMessage( "%s", logBuf.c_str() );
285 // wxMessageBox(logBuf);
286 logBuf += "\n";
287 wxLogMessage(logBuf.c_str());
288 // you must call event skip if you want default grid processing
289 // (cell highlighting etc.)
290 //
291 ev.Skip();
b5ffecfc 292}
c92b0f9a 293//----------------------------------------------------------------------------------------
b5ffecfc
GT
294void DBGrid::OnCellLeftDClick( wxGridEvent& ev )
295{
c92b0f9a
MJ
296 logBuf = "DBGrid::OnCellLeftDClick : ";
297 logBuf << "Cell at row " << ev.GetRow()
298 << " col " << ev.GetCol();
299 // wxLogMessage( "%s", logBuf.c_str() );
300 // wxMessageBox(logBuf);
301 logBuf += "\n";
302 wxLogMessage(logBuf.c_str());
303 // you must call event skip if you want default grid processing
304 // (cell highlighting etc.)
305 //
306 ev.Skip();
b5ffecfc 307}
c92b0f9a 308//----------------------------------------------------------------------------------------
b5ffecfc
GT
309void DBGrid::OnCellRightDClick( wxGridEvent& ev )
310{
c92b0f9a
MJ
311 logBuf = "DBGrid::OnCellRightDClick : ";
312 logBuf << "Cell at row " << ev.GetRow()
313 << " col " << ev.GetCol();
314 // wxLogMessage( "%s", logBuf.c_str() );
315 // wxMessageBox(logBuf);
316 logBuf += "\n";
317 wxLogMessage(logBuf.c_str());
318 // you must call event skip if you want default grid processing
319 // (cell highlighting etc.)
320 //
321 ev.Skip();
b5ffecfc 322}
c92b0f9a 323//----------------------------------------------------------------------------------------
b5ffecfc
GT
324void DBGrid::OnCellChange( wxGridEvent& ev )
325{
c92b0f9a
MJ
326 logBuf = "DBGrid::OnCellChange : ";
327 logBuf << "Cell at row " << ev.GetRow()
328 << " col " << ev.GetCol();
329 // wxLogMessage( "%s", logBuf.c_str() );
330 // wxMessageBox(logBuf);
331 logBuf += "\n";
332 wxLogMessage(logBuf.c_str());
333 // you must call event skip if you want default grid processing
334 // (cell highlighting etc.)
335 //
336 ev.Skip();
b5ffecfc 337}
c92b0f9a 338//----------------------------------------------------------------------------------------
b5ffecfc
GT
339void DBGrid::OnRowSize( wxGridSizeEvent& ev )
340{
c92b0f9a
MJ
341 logBuf = "DBGrid::OnRowSize : ";
342 logBuf << "Resized row " << ev.GetRowOrCol();
343 // wxLogMessage( "%s", logBuf.c_str() );
344 logBuf += "\n";
345 wxLogMessage(logBuf.c_str());
346 ev.Skip();
b5ffecfc 347}
c92b0f9a 348//----------------------------------------------------------------------------------------
b5ffecfc
GT
349void DBGrid::OnColSize( wxGridSizeEvent& ev )
350{
c92b0f9a
MJ
351 logBuf = "DBGrid::OnColSize : ";
352 logBuf << "Resized col " << ev.GetRowOrCol();
353 // wxLogMessage( "%s", logBuf.c_str() );
354 logBuf += "\n";
355 wxLogMessage(logBuf.c_str());
356 ev.Skip();
b5ffecfc 357}
c92b0f9a 358//----------------------------------------------------------------------------------------
b5ffecfc
GT
359void DBGrid::OnRangeSelected( wxGridRangeSelectEvent& ev )
360{
c92b0f9a
MJ
361 logBuf = "DBGrid::OnRangeSelected : ";
362 logBuf << "Selected cells from row " << ev.GetTopRow()
363 << " col " << ev.GetLeftCol()
364 << " to row " << ev.GetBottomRow()
365 << " col " << ev.GetRightCol();
366 logBuf += "\n";
367 // wxLogMessage( "%s", logBuf.c_str() );
368 wxLogMessage(logBuf.c_str());
369 ev.Skip();
b5ffecfc 370}
c92b0f9a 371//----------------------------------------------------------------------------------------