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