]>
git.saurik.com Git - wxWidgets.git/blob - demos/dbbrowse/dbgrid.cpp
1 //---------------------------------------------------------------------------
3 // Purpose: wxGrid sample
4 // Author: Mark Johnson
5 // Modified by: 19990929.mj10777 a reuseable DBGrid
8 // Licence: wxWindows license
10 //---------------------------------------------------------------------------
11 //-- all #ifdefs that the whole Project needs. ------------------------------
12 //---------------------------------------------------------------------------
14 #pragma implementation
17 //---------------------------------------------------------------------------
18 // For compilers that support precompilation, includes "wx/wx.h".
19 #include "wx/wxprec.h"
20 //---------------------------------------------------------------------------
24 //---------------------------------------------------------------------------
28 //---------------------------------------------------------------------------
29 //-- all #includes that every .cpp needs --- 19990807.mj10777 ---
30 //---------------------------------------------------------------------------
31 #include "std.h" // sorgsam Pflegen !
32 //---------------------------------------------------------------------------
33 BEGIN_EVENT_TABLE(DBGrid
, wxGrid
)
34 EVT_MOTION (DBGrid::OnMouseMove
)
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
)
51 //---------------------------------------------------------------------------
52 // wxListCtrl(parent, id, pos, size, style)
53 // wxGrid(parent,-1,wxPoint( 0, 0 ), wxSize( 400, 300 ) );
54 //---------------------------------------------------------------------------
56 //---------------------------------------------------------------------------
57 // DBGrid::DBGrid(wxWindow *parent, const wxWindowID id,const wxPoint& pos,const wxSize& size):
58 // wxGrid(parent, id, pos, size)
59 DBGrid::DBGrid(wxWindow
*parent
, const wxWindowID id
,const wxPoint
& pos
,const wxSize
& size
, long style
):
60 wxGrid(parent
, id
, pos
, size
, style
)
62 //f_Temp = new wxFont(10,wxSWISS,wxNORMAL,wxBOLD,FALSE,"Comic Sans MS");
63 f_Temp
= new wxFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT
));
64 wxPanel::SetFont(* f_Temp
);
66 //----------------------------------------------------------------------------------------------------------------------------
67 popupMenu1
= new wxMenu("");
68 popupMenu1
->Append(GRID_EDIT
, _("Edit Modus"));
69 popupMenu2
= new wxMenu("");
70 popupMenu2
->Append(GRID_BROWSE
, _("Browse Modus"));
72 //---------------------------------------------------------------------------
76 //---------------------------------------------------------------------------
77 int DBGrid::OnTableView(wxString Table
)
79 //---------------------------------------------------------------------------
80 int i
=0,x
,y
,z
, ValidTable
=0;
82 //SetLabelFont(* f_Temp);
85 //---------------------------------------------------------------------------
86 ct_BrowserDB
= (db_Br
+i_Which
)->ct_BrowserDB
; // Get the DSN Pointer
87 //----------------------------------------------------------------------------
88 if (ct_BrowserDB
) // Valid pointer (!= NULL) ?
89 { // Pointer is Valid, use the wxDatabase Information
90 for (x
=0;x
<ct_BrowserDB
->numTables
;x
++) // go through the Tables
92 if (!wxStrcmp((ct_BrowserDB
->pTableInf
+x
)->tableName
,Table
)) // is this our Table ?
93 { // Yes, the Data of this Table shall be put into the Grid
94 ValidTable
= x
; // Save the Tablenumber
95 (db_Br
+i_Which
)->OnSelect(Table
,FALSE
); // Select * from "table"
96 // Set the local Pointer to the Column Information we are going to use
97 (db_Br
+i_Which
)->cl_BrowserDB
= (ct_BrowserDB
->pTableInf
+x
)->pColInf
;
98 if ((ct_BrowserDB
->pTableInf
+x
)->pColInf
) // Valid pointer (!= NULL) ?
99 { // Pointer is Valid, Column Informationen sind Vorhanden
100 i
= (db_Br
+i_Which
)->i_Records
; // How many Records are there
101 (db_Br
+i_Which
)->i_Which
= ValidTable
; // Still used ???? mj10777
102 if (i
== 0) // If the Table is empty, then show one empty row
104 CreateGrid(i
,(ct_BrowserDB
->pTableInf
+x
)->numCols
); // Records , Columns
105 for (y
=0;y
<(ct_BrowserDB
->pTableInf
+x
)->numCols
;y
++) // Loop through the Fields
106 { // The Field / Column name is used here as Row Titel
107 SetColLabelValue(y
,((ct_BrowserDB
->pTableInf
+x
)->pColInf
+y
)->colName
);
109 } // for (y=0;y<(ct_BrowserDB->pTableInf+x)->numCols;y++)
110 SetColSize(((ct_BrowserDB
->pTableInf
+x
)->numCols
-1),120); // Make the last Column Wider
111 // The Grid has been created, now fill it
112 for (z
=0;z
<(db_Br
+i_Which
)->i_Records
;z
++) // Loop through the Records
114 Temp0
.Printf("%06d",z
+1); SetRowLabelValue(z
,Temp0
); // Set Row Lable Value
115 (db_Br
+i_Which
)->OnGetNext((ct_BrowserDB
->pTableInf
+ValidTable
)->numCols
,FALSE
);
116 for (y
=0;y
<(ct_BrowserDB
->pTableInf
+ValidTable
)->numCols
;y
++) // Loop through the Fields
117 { // BrowserDB::OnGetNext Formats the field Value into tablename
118 SetCellValue(z
, y
,((db_Br
+i_Which
)->cl_BrowserDB
+y
)->tableName
);
122 Temp0
.Printf(_("-I-> DBGrid::OnTableView(%s) - Record %6d has been read."),Table
.c_str(),z
);
123 pDoc
->p_MainFrame
->SetStatusText(Temp0
, 0);
125 } // for (z=0;z<(db_Br+i_Which)->i_Records;z++)
126 Temp0
.Printf(_("-I-> DBGrid::OnTableView(%s) - %6d Records have been read."),Table
.c_str(),z
);
127 pDoc
->p_MainFrame
->SetStatusText(Temp0
, 0);
128 // The Grid has been filled, now leave
130 } // if ((ct_BrowserDB->pTableInf+x)->pColInf)
132 wxLogMessage(_("\n-E-> DBGrid::OnTableView():: Invalid Column Pointer : Failed"));
133 } // if ((ct_BrowserDB->pTableInf+x)->tableType == "TABLE")
134 } // for (x=0;x<ct_BrowserDB->numTables;x++)
135 } // if (ct_BrowserDB)
137 wxLogMessage(_("\n-E-> DBGrid::OnTableView():: Invalid DSN Pointer : Failed"));
138 //---------------------------------------------------------------------------
140 SetEditInPlace(b_EditModus
); // Activate in-place Editing (FALSE)
142 //---------------------------------------------------------------------------
143 wxLogMessage(_("-I-> DBGrid::OnTableView() - End"));
146 //---------------------------------------------------------------------------
147 void DBGrid::OnModusEdit(wxMenu
& menu
, wxCommandEvent
& event
)
149 b_EditModus
= TRUE
; // Needed by PopupMenu
150 SetEditable(FALSE
); // Do not Edit with Text Edit Control
151 SetEditInPlace(b_EditModus
); // Deactivate in-place Editing
152 UpdateDimensions(); // Redraw the Grid
154 //---------------------------------------------------------------------------
155 void DBGrid::OnModusBrowse(wxMenu
& menu
, wxCommandEvent
& event
)
157 b_EditModus
= FALSE
; // Needed by PopupMenu
158 SetEditInPlace(b_EditModus
); // Deactivate in-place Editing
159 UpdateDimensions(); // Redraw the Grid
161 //------------------------------------------------------------------------------
162 void DBGrid::OnMouseMove(wxMouseEvent
&event
)
164 MousePos
= event
.GetPosition();
166 //---------------------------------------------------------------------------
167 void DBGrid::OnLabelLeftClick( wxGridEvent
& ev
)
169 logBuf
= "DBGrid::OnLabelLeftClick : ";
170 if ( ev
.GetRow() != -1 )
172 logBuf
<< "row label " << ev
.GetRow();
174 else if ( ev
.GetCol() != -1 )
176 logBuf
<< "col label " << ev
.GetCol();
180 logBuf
<< "corner label";
182 if ( ev
.ShiftDown() )
183 logBuf
<< " (shift down)";
184 // wxLogMessage( "%s", logBuf.c_str() );
186 wxLogMessage(logBuf
.c_str());
189 //---------------------------------------------------------------------------
190 void DBGrid::OnLabelRightClick( wxGridEvent
& ev
)
192 //-------------------
194 PopupMenu(popupMenu2
,MousePos
.x
,MousePos
.y
);
196 PopupMenu(popupMenu1
,MousePos
.x
,MousePos
.y
);
197 //-------------------
198 logBuf
= "DBGrid::OnLabelRightClick : ";
199 if ( ev
.GetRow() != -1 )
201 logBuf
<< "row label " << ev
.GetRow();
203 else if ( ev
.GetCol() != -1 )
205 logBuf
<< "col label " << ev
.GetCol();
209 logBuf
<< "corner label";
211 if ( ev
.ShiftDown() )
212 logBuf
<< " (shift down)";
213 // wxLogMessage( "%s", logBuf.c_str() );
215 wxLogMessage(logBuf
.c_str());
218 //---------------------------------------------------------------------------
219 void DBGrid::OnLabelLeftDClick( wxGridEvent
& ev
)
221 logBuf
= "DBGrid::OnLabelLeftDClick : ";
222 if ( ev
.GetRow() != -1 )
224 logBuf
<< "row label " << ev
.GetRow();
226 else if ( ev
.GetCol() != -1 )
228 logBuf
<< "col label " << ev
.GetCol();
232 logBuf
<< "corner label";
234 if ( ev
.ShiftDown() )
235 logBuf
<< " (shift down)";
236 // wxLogMessage( "%s", logBuf.c_str() );
238 wxLogMessage(logBuf
.c_str());
241 //---------------------------------------------------------------------------
242 void DBGrid::OnLabelRightDClick( wxGridEvent
& ev
)
244 logBuf
= "DBGrid::OnLabelRightDClick : ";
245 if ( ev
.GetRow() != -1 )
247 logBuf
<< "row label " << ev
.GetRow();
249 else if ( ev
.GetCol() != -1 )
251 logBuf
<< "col label " << ev
.GetCol();
255 logBuf
<< "corner label";
257 if ( ev
.ShiftDown() )
258 logBuf
<< " (shift down)";
259 // wxLogMessage( "%s", logBuf.c_str() );
261 wxLogMessage(logBuf
.c_str());
264 //---------------------------------------------------------------------------
265 void DBGrid::OnCellLeftClick( wxGridEvent
& ev
)
267 logBuf
= "DBGrid::OnCellLeftClick : ";
268 logBuf
<< "Cell at row " << ev
.GetRow()
269 << " col " << ev
.GetCol();
270 // wxLogMessage( "%s", logBuf.c_str() );
271 // wxMessageBox(logBuf);
273 wxLogMessage(logBuf
.c_str());
274 // you must call event skip if you want default grid processing
275 // (cell highlighting etc.)
279 //---------------------------------------------------------------------------
280 void DBGrid::OnCellRightClick( wxGridEvent
& ev
)
282 logBuf
= "DBGrid::OnCellRightClick : ";
283 logBuf
<< "Cell at row " << ev
.GetRow()
284 << " col " << ev
.GetCol();
285 // wxLogMessage( "%s", logBuf.c_str() );
286 // wxMessageBox(logBuf);
288 wxLogMessage(logBuf
.c_str());
289 // you must call event skip if you want default grid processing
290 // (cell highlighting etc.)
294 //---------------------------------------------------------------------------
295 void DBGrid::OnCellLeftDClick( wxGridEvent
& ev
)
297 logBuf
= "DBGrid::OnCellLeftDClick : ";
298 logBuf
<< "Cell at row " << ev
.GetRow()
299 << " col " << ev
.GetCol();
300 // wxLogMessage( "%s", logBuf.c_str() );
301 // wxMessageBox(logBuf);
303 wxLogMessage(logBuf
.c_str());
304 // you must call event skip if you want default grid processing
305 // (cell highlighting etc.)
309 //---------------------------------------------------------------------------
310 void DBGrid::OnCellRightDClick( wxGridEvent
& ev
)
312 logBuf
= "DBGrid::OnCellRightDClick : ";
313 logBuf
<< "Cell at row " << ev
.GetRow()
314 << " col " << ev
.GetCol();
315 // wxLogMessage( "%s", logBuf.c_str() );
316 // wxMessageBox(logBuf);
318 wxLogMessage(logBuf
.c_str());
319 // you must call event skip if you want default grid processing
320 // (cell highlighting etc.)
324 //---------------------------------------------------------------------------
325 void DBGrid::OnCellChange( wxGridEvent
& ev
)
327 logBuf
= "DBGrid::OnCellChange : ";
328 logBuf
<< "Cell at row " << ev
.GetRow()
329 << " col " << ev
.GetCol();
330 // wxLogMessage( "%s", logBuf.c_str() );
331 // wxMessageBox(logBuf);
333 wxLogMessage(logBuf
.c_str());
334 // you must call event skip if you want default grid processing
335 // (cell highlighting etc.)
339 //---------------------------------------------------------------------------
340 void DBGrid::OnRowSize( wxGridSizeEvent
& ev
)
342 logBuf
= "DBGrid::OnRowSize : ";
343 logBuf
<< "Resized row " << ev
.GetRowOrCol();
344 // wxLogMessage( "%s", logBuf.c_str() );
346 wxLogMessage(logBuf
.c_str());
349 //---------------------------------------------------------------------------
350 void DBGrid::OnColSize( wxGridSizeEvent
& ev
)
352 logBuf
= "DBGrid::OnColSize : ";
353 logBuf
<< "Resized col " << ev
.GetRowOrCol();
354 // wxLogMessage( "%s", logBuf.c_str() );
356 wxLogMessage(logBuf
.c_str());
360 //---------------------------------------------------------------------------
361 void DBGrid::OnRangeSelected( wxGridRangeSelectEvent
& ev
)
363 logBuf
= "DBGrid::OnRangeSelected : ";
364 logBuf
<< "Selected cells from row " << ev
.GetTopRow()
365 << " col " << ev
.GetLeftCol()
366 << " to row " << ev
.GetBottomRow()
367 << " col " << ev
.GetRightCol();
370 // wxLogMessage( "%s", logBuf.c_str() );
371 wxLogMessage(logBuf
.c_str());
375 //---------------------------------------------------------------------------