]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/newgrid/griddemo.cpp
Added tech note on adding class documentation.
[wxWidgets.git] / samples / newgrid / griddemo.cpp
index 7817e47a27ce3e06c03a7a8c455f3294a19ab70d..15b56fe752114658baaedb3a02874e86bf00b8a6 100644 (file)
@@ -83,6 +83,9 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame )
     EVT_MENU( ID_DELETEROW, GridFrame::DeleteSelectedRows )
     EVT_MENU( ID_DELETECOL, GridFrame::DeleteSelectedCols )
     EVT_MENU( ID_CLEARGRID, GridFrame::ClearGrid )
+    EVT_MENU( ID_SELCELLS,  GridFrame::SelectCells )
+    EVT_MENU( ID_SELROWS,  GridFrame::SelectRows )
+    EVT_MENU( ID_SELCOLS,  GridFrame::SelectCols )
 
     EVT_MENU( ID_SET_CELL_FG_COLOUR, GridFrame::SetCellFgColour )
     EVT_MENU( ID_SET_CELL_BG_COLOUR, GridFrame::SetCellBgColour )
@@ -159,6 +162,16 @@ GridFrame::GridFrame()
     editMenu->Append( ID_DELETECOL, "Delete selected co&ls" );
     editMenu->Append( ID_CLEARGRID, "Cl&ear grid cell contents" );
 
+    wxMenu *selectionMenu = new wxMenu;
+
+    editMenu->Append( ID_CHANGESEL, "Change &selection mode",
+                      selectionMenu,
+                      "Change selection mode" );
+
+    selectionMenu->Append( ID_SELCELLS, "Select &Cells" );
+    selectionMenu->Append( ID_SELROWS, "Select &Rows" );
+    selectionMenu->Append( ID_SELCOLS, "Select C&ols" );
+
     wxMenu *helpMenu = new wxMenu;
     helpMenu->Append( ID_ABOUT, "&About wxGrid demo" );
 
@@ -484,9 +497,9 @@ void GridFrame::DeleteSelectedRows( wxCommandEvent& WXUNUSED(ev) )
 {
     if ( grid->IsSelection() )
     {
-        int topRow, bottomRow, leftCol, rightCol;
-        grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol );
-        grid->DeleteRows( topRow, bottomRow - topRow + 1 );
+        for ( int n = 0; n < grid->GetNumberRows(); n++ )
+            if ( grid->IsInSelection( n , 0 ) )
+                grid->DeleteRows( n, 1 );
     }
 }
 
@@ -495,9 +508,9 @@ void GridFrame::DeleteSelectedCols( wxCommandEvent& WXUNUSED(ev) )
 {
     if ( grid->IsSelection() )
     {
-        int topRow, bottomRow, leftCol, rightCol;
-        grid->GetSelection( &topRow, &leftCol, &bottomRow, &rightCol );
-        grid->DeleteCols( leftCol, rightCol - leftCol + 1 );
+        for ( int n = 0; n < grid->GetNumberCols(); n++ )
+            if ( grid->IsInSelection( 0 , n ) )
+                grid->DeleteCols( n, 1 );
     }
 }
 
@@ -507,6 +520,21 @@ void GridFrame::ClearGrid( wxCommandEvent& WXUNUSED(ev) )
     grid->ClearGrid();
 }
 
+void GridFrame::SelectCells( wxCommandEvent& WXUNUSED(ev) )
+{
+    grid->SetSelectionMode( wxGrid::wxGridSelectCells );
+}
+
+void GridFrame::SelectRows( wxCommandEvent& WXUNUSED(ev) )
+{
+    grid->SetSelectionMode( wxGrid::wxGridSelectRows );
+}
+
+void GridFrame::SelectCols( wxCommandEvent& WXUNUSED(ev) )
+{
+    grid->SetSelectionMode( wxGrid::wxGridSelectColumns );
+}
+
 void GridFrame::SetCellFgColour( wxCommandEvent& WXUNUSED(ev) )
 {
     wxColour col = wxGetColourFromUser(this);
@@ -544,6 +572,7 @@ void GridFrame::OnLabelLeftClick( wxGridEvent& ev )
     }
 
     if ( ev.ShiftDown() ) logBuf << " (shift down)";
+    if ( ev.ControlDown() ) logBuf << " (control down)";
     wxLogMessage( "%s", logBuf.c_str() );
 
     // you must call event skip if you want default grid processing
@@ -589,8 +618,16 @@ void GridFrame::OnColSize( wxGridSizeEvent& ev )
 void GridFrame::OnSelectCell( wxGridEvent& ev )
 {
     logBuf = "";
-    logBuf << "Selected cell at row " << ev.GetRow()
-           << " col " << ev.GetCol();
+    if ( ev.Selecting() )
+        logBuf << "Selected ";
+    else
+        logBuf << "Deselected ";
+    logBuf << "cell at row " << ev.GetRow()
+           << " col " << ev.GetCol()
+           << " ( ControlDown: "<< (ev.ControlDown() ? 'T':'F')
+           << ", ShiftDown: "<< (ev.ShiftDown() ? 'T':'F')
+           << ", AltDown: "<< (ev.AltDown() ? 'T':'F')
+           << ", MetaDown: "<< (ev.MetaDown() ? 'T':'F') << " )";
     wxLogMessage( "%s", logBuf.c_str() );
 
     // you must call Skip() if you want the default processing
@@ -601,11 +638,18 @@ void GridFrame::OnSelectCell( wxGridEvent& ev )
 void GridFrame::OnRangeSelected( wxGridRangeSelectEvent& ev )
 {
     logBuf = "";
-    logBuf  << "Selected cells from row " << ev.GetTopRow()
-            << " col " << ev.GetLeftCol()
-            << " to row " << ev.GetBottomRow()
-            << " col " << ev.GetRightCol();
-
+    if ( ev.Selecting() )
+        logBuf << "Selected ";
+    else
+        logBuf << "Deselected ";
+    logBuf << "cells from row " << ev.GetTopRow()
+           << " col " << ev.GetLeftCol()
+           << " to row " << ev.GetBottomRow()
+           << " col " << ev.GetRightCol()
+           << " ( ControlDown: "<< (ev.ControlDown() ? 'T':'F')
+           << ", ShiftDown: "<< (ev.ShiftDown() ? 'T':'F')
+           << ", AltDown: "<< (ev.AltDown() ? 'T':'F')
+           << ", MetaDown: "<< (ev.MetaDown() ? 'T':'F') << " )";
     wxLogMessage( "%s", logBuf.c_str() );
 
     ev.Skip();
@@ -815,26 +859,10 @@ static const wxChar* severities[] =
 static struct BugsGridData
 {
     int id;
-
-    // Borland can't deal with global wxStrings and will generate a
-    // compile time error with the initializing the gs_dataGridBugs
-    // array (below)
-    //
-#ifndef __BORLANDC__
-    wxString summary;
-#else
-    wxChar *summary;
-#endif
-
+    wxChar summary[80];
     Severity severity;
     int prio;
-
-#ifndef __BORLANDC__
-    wxString platform;
-#else
-    wxChar *platform;
-#endif
-
+    wxChar platform[12];
     bool opened;
 } gs_dataBugsGrid [] =
 {
@@ -884,12 +912,12 @@ wxString BugsGridTable::GetTypeName(int WXUNUSED(row), int col)
     return wxEmptyString;
 }
 
-long BugsGridTable::GetNumberRows()
+int BugsGridTable::GetNumberRows()
 {
     return WXSIZEOF(gs_dataBugsGrid);
 }
 
-long BugsGridTable::GetNumberCols()
+int BugsGridTable::GetNumberCols()
 {
     return Col_Max;
 }
@@ -958,27 +986,11 @@ void BugsGridTable::SetValue( int row, int col, const wxString& value )
             break;
 
         case Col_Summary:
-#ifndef __BORLANDC__
-            gd.summary = value;
-#else
-            // this generates a warning message if you are using the
-            // memory tracing code but it should be ok :MB
-            //
-            delete gd.summary;
-            gd.summary = copystring( value.c_str() );
-#endif
+            wxStrncpy(gd.summary, value, WXSIZEOF(gd.summary));
             break;
 
         case Col_Platform:
-#ifndef __BORLANDC__
-            gd.platform = value;
-#else
-            // this generates a warning message if you are using the
-            // memory tracing code but it should be ok :MB
-            //
-            delete gd.platform;
-            gd.platform = copystring( value.c_str() );
-#endif
+            wxStrncpy(gd.platform, value, WXSIZEOF(gd.platform));
             break;
     }
 }