git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12270
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- new wxCalendarCtrl styles added (Søren Erland Vestø)
- wxWizard changes: loading from WXR support, help button (Robert Cavanaugh)
- wxDirSelector() added (Paul A. Thiessen)
- new wxCalendarCtrl styles added (Søren Erland Vestø)
- wxWizard changes: loading from WXR support, help button (Robert Cavanaugh)
- wxDirSelector() added (Paul A. Thiessen)
+- wxGrid cell editing veto support (Roger Gammans)
bool Redimension( wxGridTableMessage& );
bool Redimension( wxGridTableMessage& );
- bool SendEvent( const wxEventType, int row, int col, wxMouseEvent& );
- bool SendEvent( const wxEventType, int row, int col );
- bool SendEvent( const wxEventType type)
+ int SendEvent( const wxEventType, int row, int col, wxMouseEvent& );
+ int SendEvent( const wxEventType, int row, int col );
+ int SendEvent( const wxEventType type)
{
return SendEvent(type,
m_currentCellCoords.GetRow(),
{
return SendEvent(type,
m_currentCellCoords.GetRow(),
grid->SetCellValue( 0, 2, "Blah" );
grid->SetCellValue( 0, 3, "Read only" );
grid->SetReadOnly( 0, 3 );
grid->SetCellValue( 0, 2, "Blah" );
grid->SetCellValue( 0, 3, "Read only" );
grid->SetReadOnly( 0, 3 );
+
+ grid->SetCellValue( 0, 4, "Can veto edit this cell" );
grid->SetCellValue( 0, 5, "Press\nCtrl+arrow\nto skip over\ncells" );
grid->SetCellValue( 0, 5, "Press\nCtrl+arrow\nto skip over\ncells" );
void GridFrame::OnEditorShown( wxGridEvent& ev )
{
void GridFrame::OnEditorShown( wxGridEvent& ev )
{
+
+ if ( (ev.GetCol() == 4) &&
+ (ev.GetRow() == 0) &&
+ (wxMessageBox(_T("Are you sure you wish to edit this cell"),
+ _T("Checking"),wxYES_NO) == wxNO ) ) {
+
+ ev.Veto();
+ return;
+ }
+
+
wxLogMessage( wxT("Cell editor shown.") );
ev.Skip();
wxLogMessage( wxT("Cell editor shown.") );
ev.Skip();
void GridFrame::OnEditorHidden( wxGridEvent& ev )
{
void GridFrame::OnEditorHidden( wxGridEvent& ev )
{
+
+ if ( (ev.GetCol() == 4) &&
+ (ev.GetRow() == 0) &&
+ (wxMessageBox(_T("Are you sure you wish to finish editing this cell"),
+ _T("Checking"),wxYES_NO) == wxNO ) ) {
+
+ ev.Veto();
+ return;
+ }
+
wxLogMessage( wxT("Cell editor hidden.") );
ev.Skip();
wxLogMessage( wxT("Cell editor hidden.") );
ev.Skip();
// Generate a grid event based on a mouse event and
// return the result of ProcessEvent()
//
// Generate a grid event based on a mouse event and
// return the result of ProcessEvent()
//
-bool wxGrid::SendEvent( const wxEventType type,
+int wxGrid::SendEvent( const wxEventType type,
int row, int col,
wxMouseEvent& mouseEv )
{
int row, int col,
wxMouseEvent& mouseEv )
{
- if ( type == wxEVT_GRID_ROW_SIZE || type == wxEVT_GRID_COL_SIZE )
+ bool claimed;
+ bool vetoed= false;
+
+ if ( type == wxEVT_GRID_ROW_SIZE || type == wxEVT_GRID_COL_SIZE )
{
int rowOrCol = (row == -1 ? col : row);
{
int rowOrCol = (row == -1 ? col : row);
mouseEv.ShiftDown(),
mouseEv.AltDown(),
mouseEv.MetaDown() );
mouseEv.ShiftDown(),
mouseEv.AltDown(),
mouseEv.MetaDown() );
- return GetEventHandler()->ProcessEvent(gridEvt);
+
+ claimed = GetEventHandler()->ProcessEvent(gridEvt);
+ vetoed = !gridEvt.IsAllowed();
+
- else if ( type == wxEVT_GRID_RANGE_SELECT )
+ else if ( type == wxEVT_GRID_RANGE_SELECT )
{
// Right now, it should _never_ end up here!
wxGridRangeSelectEvent gridEvt( GetId(),
{
// Right now, it should _never_ end up here!
wxGridRangeSelectEvent gridEvt( GetId(),
mouseEv.AltDown(),
mouseEv.MetaDown() );
mouseEv.AltDown(),
mouseEv.MetaDown() );
- return GetEventHandler()->ProcessEvent(gridEvt);
+ claimed = GetEventHandler()->ProcessEvent(gridEvt);
+ vetoed = !gridEvt.IsAllowed();
+
{
wxGridEvent gridEvt( GetId(),
type,
{
wxGridEvent gridEvt( GetId(),
type,
mouseEv.ShiftDown(),
mouseEv.AltDown(),
mouseEv.MetaDown() );
mouseEv.ShiftDown(),
mouseEv.AltDown(),
mouseEv.MetaDown() );
- return GetEventHandler()->ProcessEvent(gridEvt);
+ claimed = GetEventHandler()->ProcessEvent(gridEvt);
+ vetoed = !gridEvt.IsAllowed();
+
+ // A Veto'd event may not be `claimed' so test this first
+ if (vetoed) return -1;
+ return claimed ? 1 : 0;
+
+
}
// Generate a grid event of specified type and return the result
// of ProcessEvent().
//
}
// Generate a grid event of specified type and return the result
// of ProcessEvent().
//
-bool wxGrid::SendEvent( const wxEventType type,
+int wxGrid::SendEvent( const wxEventType type,
+ bool claimed;
+ bool vetoed= false;
+
if ( type == wxEVT_GRID_ROW_SIZE || type == wxEVT_GRID_COL_SIZE )
{
int rowOrCol = (row == -1 ? col : row);
if ( type == wxEVT_GRID_ROW_SIZE || type == wxEVT_GRID_COL_SIZE )
{
int rowOrCol = (row == -1 ? col : row);
- return GetEventHandler()->ProcessEvent(gridEvt);
+ claimed = GetEventHandler()->ProcessEvent(gridEvt);
+ vetoed = !gridEvt.IsAllowed();
- return GetEventHandler()->ProcessEvent(gridEvt);
- }
+ claimed = GetEventHandler()->ProcessEvent(gridEvt);
+ vetoed = !gridEvt.IsAllowed();
+ }
+
+ // A Veto'd event may not be `claimed' so test this first
+ if (vetoed) return -1;
+ return claimed ? 1 : 0;
+
if ( enable != m_cellEditCtrlEnabled )
{
if ( enable != m_cellEditCtrlEnabled )
{
- // TODO allow the app to Veto() this event?
- SendEvent(enable ? wxEVT_GRID_EDITOR_SHOWN : wxEVT_GRID_EDITOR_HIDDEN);
-
- // this should be checked by the caller!
+ if (SendEvent( wxEVT_GRID_EDITOR_SHOWN) <0)
+ return;
+
+ // this should be checked by the caller!
wxASSERT_MSG( CanEnableCellControl(),
_T("can't enable editing for this cell!") );
wxASSERT_MSG( CanEnableCellControl(),
_T("can't enable editing for this cell!") );
+ //FIXME:add veto support
+ SendEvent( wxEVT_GRID_EDITOR_HIDDEN);
+
+ HideCellEditControl();
SaveEditControlValue();
// do it after HideCellEditControl()
SaveEditControlValue();
// do it after HideCellEditControl()
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
+ wxString oldval = GetCellValue(row,col);
+
wxGridCellAttr* attr = GetCellAttr(row, col);
wxGridCellEditor* editor = attr->GetEditor(this, row, col);
bool changed = editor->EndEdit(row, col, this);
wxGridCellAttr* attr = GetCellAttr(row, col);
wxGridCellEditor* editor = attr->GetEditor(this, row, col);
bool changed = editor->EndEdit(row, col, this);
- SendEvent( wxEVT_GRID_CELL_CHANGE,
+ if ( SendEvent( wxEVT_GRID_CELL_CHANGE,
m_currentCellCoords.GetRow(),
m_currentCellCoords.GetRow(),
- m_currentCellCoords.GetCol() );
+ m_currentCellCoords.GetCol() ) < 0 ) {
+
+ //Event has been veto set the data back.
+ SetCellValue(row,col,oldval);
+ }