Add DoHideCellEditControl() for symmetry
This also allows to reset m_cellEditCtrlEnabled earlier, as we don't have to keep it true for the duration of HideCellEditControl() execution. No real changes, as with the previous commit, this one is best viewed ignoring whitespace changes.
This commit is contained in:
parent
c73634c520
commit
2d9112bd9b
@ -2908,11 +2908,12 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show the cell editor for the current cell unconditionally.
|
// Show/hide the cell editor for the current cell unconditionally.
|
||||||
void DoShowCellEditControl();
|
void DoShowCellEditControl();
|
||||||
|
void DoHideCellEditControl();
|
||||||
|
|
||||||
// Accept the changes in the edit control, i.e. save them to the table and
|
// Accept the changes in the edit control, i.e. save them to the table and
|
||||||
// dismiss the editor.
|
// dismiss the editor. Also reset m_cellEditCtrlEnabled.
|
||||||
void DoAcceptCellEditControl();
|
void DoAcceptCellEditControl();
|
||||||
|
|
||||||
// As above, but do nothing if the control is not currently shown.
|
// As above, but do nothing if the control is not currently shown.
|
||||||
|
@ -7344,49 +7344,54 @@ void wxGrid::HideCellEditControl()
|
|||||||
{
|
{
|
||||||
if ( IsCellEditControlEnabled() )
|
if ( IsCellEditControlEnabled() )
|
||||||
{
|
{
|
||||||
wxGridCellEditorPtr editor = GetCurrentCellEditorPtr();
|
DoHideCellEditControl();
|
||||||
const bool editorHadFocus = editor->GetWindow()->IsDescendant(FindFocus());
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( editor->GetWindow()->GetParent() != m_gridWin )
|
void wxGrid::DoHideCellEditControl()
|
||||||
editor->GetWindow()->Reparent(m_gridWin);
|
{
|
||||||
|
wxGridCellEditorPtr editor = GetCurrentCellEditorPtr();
|
||||||
|
const bool editorHadFocus = editor->GetWindow()->IsDescendant(FindFocus());
|
||||||
|
|
||||||
editor->Show( false );
|
if ( editor->GetWindow()->GetParent() != m_gridWin )
|
||||||
|
editor->GetWindow()->Reparent(m_gridWin);
|
||||||
|
|
||||||
wxGridWindow *gridWindow = CellToGridWindow(m_currentCellCoords);
|
editor->Show( false );
|
||||||
// return the focus to the grid itself if the editor had it
|
|
||||||
//
|
|
||||||
// note that we must not do this unconditionally to avoid stealing
|
|
||||||
// focus from the window which just received it if we are hiding the
|
|
||||||
// editor precisely because we lost focus
|
|
||||||
if ( editorHadFocus )
|
|
||||||
gridWindow->SetFocus();
|
|
||||||
|
|
||||||
// refresh whole row to the right
|
wxGridWindow *gridWindow = CellToGridWindow(m_currentCellCoords);
|
||||||
wxRect rect( CellToRect(m_currentCellCoords) );
|
// return the focus to the grid itself if the editor had it
|
||||||
rect.Offset( -GetGridWindowOffset(gridWindow) );
|
//
|
||||||
CalcGridWindowScrolledPosition(rect.x, rect.y, &rect.x, &rect.y, gridWindow);
|
// note that we must not do this unconditionally to avoid stealing
|
||||||
rect.width = gridWindow->GetClientSize().GetWidth() - rect.x;
|
// focus from the window which just received it if we are hiding the
|
||||||
|
// editor precisely because we lost focus
|
||||||
|
if ( editorHadFocus )
|
||||||
|
gridWindow->SetFocus();
|
||||||
|
|
||||||
|
// refresh whole row to the right
|
||||||
|
wxRect rect( CellToRect(m_currentCellCoords) );
|
||||||
|
rect.Offset( -GetGridWindowOffset(gridWindow) );
|
||||||
|
CalcGridWindowScrolledPosition(rect.x, rect.y, &rect.x, &rect.y, gridWindow);
|
||||||
|
rect.width = gridWindow->GetClientSize().GetWidth() - rect.x;
|
||||||
|
|
||||||
#ifdef __WXMAC__
|
#ifdef __WXMAC__
|
||||||
// ensure that the pixels under the focus ring get refreshed as well
|
// ensure that the pixels under the focus ring get refreshed as well
|
||||||
rect.Inflate(10, 10);
|
rect.Inflate(10, 10);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gridWindow->Refresh( false, &rect );
|
gridWindow->Refresh( false, &rect );
|
||||||
|
|
||||||
// refresh also the grid to the right
|
// refresh also the grid to the right
|
||||||
wxGridWindow *rightGridWindow = NULL;
|
wxGridWindow *rightGridWindow = NULL;
|
||||||
if ( gridWindow->GetType() == wxGridWindow::wxGridWindowFrozenCorner )
|
if ( gridWindow->GetType() == wxGridWindow::wxGridWindowFrozenCorner )
|
||||||
rightGridWindow = m_frozenRowGridWin;
|
rightGridWindow = m_frozenRowGridWin;
|
||||||
else if ( gridWindow->GetType() == wxGridWindow::wxGridWindowFrozenCol )
|
else if ( gridWindow->GetType() == wxGridWindow::wxGridWindowFrozenCol )
|
||||||
rightGridWindow = m_gridWin;
|
rightGridWindow = m_gridWin;
|
||||||
|
|
||||||
if ( rightGridWindow )
|
if ( rightGridWindow )
|
||||||
{
|
{
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.width = rightGridWindow->GetClientSize().GetWidth();
|
rect.width = rightGridWindow->GetClientSize().GetWidth();
|
||||||
rightGridWindow->Refresh( false, &rect );
|
rightGridWindow->Refresh( false, &rect );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7400,15 +7405,13 @@ void wxGrid::AcceptCellEditControlIfShown()
|
|||||||
|
|
||||||
void wxGrid::DoAcceptCellEditControl()
|
void wxGrid::DoAcceptCellEditControl()
|
||||||
{
|
{
|
||||||
HideCellEditControl();
|
// Reset it first to avoid any problems with recursion via
|
||||||
|
// DisableCellEditControl() if it's called from the user-defined event
|
||||||
// do it after HideCellEditControl() but before invoking
|
// handlers.
|
||||||
// user-defined handlers invoked by DoSaveEditControlValue() to
|
|
||||||
// ensure that we don't enter infinite loop if any of them try to
|
|
||||||
// disable the edit control again by calling DisableCellEditControl()
|
|
||||||
// from which we can be called
|
|
||||||
m_cellEditCtrlEnabled = false;
|
m_cellEditCtrlEnabled = false;
|
||||||
|
|
||||||
|
DoHideCellEditControl();
|
||||||
|
|
||||||
DoSaveEditControlValue();
|
DoSaveEditControlValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user