the in-place control uses the attr for colours/font info too

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6089 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2000-02-16 20:18:53 +00:00
parent 4ed0aceb92
commit 3da93aae50
2 changed files with 90 additions and 33 deletions

View File

@ -127,20 +127,19 @@ public:
// Size and position the edit control
virtual void SetSize(const wxRect& rect);
// Show or hide the edit control
virtual void Show(bool show);
// Show or hide the edit control, use the specified attributes to set
// colours/fonts for it
virtual void Show(bool show, wxGridCellAttr *attr = (wxGridCellAttr *)NULL);
// Fetch the value from the table and prepare the edit control
// to begin editing. Set the focus to the edit control.
virtual void BeginEdit(int row, int col, wxGrid* grid,
wxGridCellAttr* attr) = 0;
virtual void BeginEdit(int row, int col, wxGrid* grid) = 0;
// Complete the editing of the current cell. If saveValue is
// true then send the new value back to the table. Returns true
// if the value has changed. If necessary, the control may be
// destroyed.
virtual bool EndEdit(int row, int col, bool saveValue,
wxGrid* grid, wxGridCellAttr* attr) = 0;
virtual bool EndEdit(int row, int col, bool saveValue, wxGrid* grid) = 0;
// Reset the value in the control back to its starting value
virtual void Reset() = 0;
@ -158,7 +157,15 @@ public:
virtual void Destroy();
protected:
// the control we show on screen
wxControl* m_control;
// if we change the colours/font of the control from the default ones, we
// must restore the default later and we save them here between calls to
// Show(TRUE) and Show(FALSE)
wxColour m_colFgOld,
m_colBgOld;
wxFont m_fontOld;
};
@ -171,11 +178,8 @@ public:
wxWindowID id,
wxEvtHandler* evtHandler);
virtual void BeginEdit(int row, int col, wxGrid* grid,
wxGridCellAttr* attr);
virtual bool EndEdit(int row, int col, bool saveValue,
wxGrid* grid, wxGridCellAttr* attr);
virtual void BeginEdit(int row, int col, wxGrid* grid);
virtual bool EndEdit(int row, int col, bool saveValue, wxGrid* grid);
virtual void Reset();
virtual void StartingKey(wxKeyEvent& event);

View File

@ -297,11 +297,60 @@ void wxGridCellEditor::Destroy()
}
}
void wxGridCellEditor::Show(bool show)
void wxGridCellEditor::Show(bool show, wxGridCellAttr *attr)
{
wxASSERT_MSG(m_control,
wxT("The wxGridCellEditor must be Created first!"));
m_control->Show(show);
if ( show )
{
// set the colours/fonts if we have any
if ( attr )
{
if ( attr->HasTextColour() )
{
m_colFgOld = m_control->GetForegroundColour();
m_control->SetForegroundColour(attr->GetTextColour());
}
if ( attr->HasBackgroundColour() )
{
m_colBgOld = m_control->GetBackgroundColour();
m_control->SetBackgroundColour(attr->GetBackgroundColour());
}
if ( attr->HasFont() )
{
m_fontOld = m_control->GetFont();
m_control->SetFont(attr->GetFont());
}
// can't do anything more in the base class version, the other
// attributes may only be used by the derived classes
}
}
else
{
// restore the standard colours fonts
if ( m_colFgOld.Ok() )
{
m_control->SetForegroundColour(m_colFgOld);
m_colFgOld = wxNullColour;
}
if ( m_colBgOld.Ok() )
{
m_control->SetBackgroundColour(m_colBgOld);
m_colBgOld = wxNullColour;
}
if ( m_fontOld.Ok() )
{
m_control->SetFont(m_fontOld);
m_fontOld = wxNullFont;
}
}
}
void wxGridCellEditor::SetSize(const wxRect& rect)
@ -343,8 +392,7 @@ void wxGridCellTextEditor::Create(wxWindow* parent,
}
void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid,
wxGridCellAttr* attr)
void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid)
{
wxASSERT_MSG(m_control,
wxT("The wxGridCellEditor must be Created first!"));
@ -353,14 +401,12 @@ void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid,
((wxTextCtrl*)m_control)->SetValue(m_startValue);
((wxTextCtrl*)m_control)->SetInsertionPointEnd();
((wxTextCtrl*)m_control)->SetFocus();
// ??? Should we use attr and try to set colours and font?
}
bool wxGridCellTextEditor::EndEdit(int row, int col, bool saveValue,
wxGrid* grid, wxGridCellAttr* attr)
wxGrid* grid)
{
wxASSERT_MSG(m_control,
wxT("The wxGridCellEditor must be Created first!"));
@ -373,7 +419,7 @@ bool wxGridCellTextEditor::EndEdit(int row, int col, bool saveValue,
if (changed)
grid->GetTable()->SetValue(row, col, value);
m_startValue = "";
m_startValue = wxEmptyString;
((wxTextCtrl*)m_control)->SetValue(m_startValue);
return changed;
@ -2908,7 +2954,9 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
// the edit control
if (m_waitForSlowClick && coords == m_currentCellCoords) {
EnableCellEditControl(TRUE);
ShowCellEditControl();
// VZ: this is done by the call above, so why do it
// again? please remove this line if it's ok
//ShowCellEditControl();
m_waitForSlowClick = FALSE;
}
else {
@ -2950,10 +2998,9 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
SendEvent( EVT_GRID_RANGE_SELECT, -1, -1, event );
}
// Show the edit control, if it has
// been hidden for drag-shrinking.
if ( IsCellEditControlEnabled() )
ShowCellEditControl();
// Show the edit control, if it has been hidden for
// drag-shrinking.
ShowCellEditControl();
}
else if ( m_cursorMode == WXGRID_CURSOR_RESIZE_ROW )
{
@ -4205,8 +4252,11 @@ void wxGrid::ShowCellEditControl()
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
// Make the edit control large enough to allow for internal margins
// TODO: remove this if the text ctrl sizing is improved esp. for unix
// Make the edit control large enough to allow for internal
// margins
//
// TODO: remove this if the text ctrl sizing is improved esp. for
// unix
//
int extra;
#if defined(__WXMOTIF__)
@ -4247,14 +4297,15 @@ void wxGrid::ShowCellEditControl()
wxGridCellAttr* attr = GetCellAttr(row, col);
wxGridCellEditor* editor = attr->GetEditor();
if (! editor->IsCreated()) {
if ( !editor->IsCreated() )
{
editor->Create(m_gridWin, -1,
new wxGridCellEditorEvtHandler(this, editor));
}
editor->SetSize( rect );
editor->Show( TRUE );
editor->BeginEdit(row, col, this, attr);
editor->Show( TRUE, attr );
editor->BeginEdit(row, col, this);
attr->DecRef();
}
}
@ -4268,7 +4319,7 @@ void wxGrid::HideCellEditControl()
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
wxGridCellAttr* attr = GetCellAttr(row, col);
wxGridCellAttr* attr = GetCellAttr(row, col);
attr->GetEditor()->Show( FALSE );
attr->DecRef();
m_gridWin->SetFocus();
@ -4285,16 +4336,18 @@ void wxGrid::SetEditControlValue( const wxString& value )
void wxGrid::SaveEditControlValue()
{
if (IsCellEditControlEnabled()) {
if ( IsCellEditControlEnabled() )
{
int row = m_currentCellCoords.GetRow();
int col = m_currentCellCoords.GetCol();
wxGridCellAttr* attr = GetCellAttr(row, col);
bool changed = attr->GetEditor()->EndEdit(row, col, TRUE, this, attr);
wxGridCellAttr* attr = GetCellAttr(row, col);
bool changed = attr->GetEditor()->EndEdit(row, col, TRUE, this);
attr->DecRef();
if (changed) {
if (changed)
{
SendEvent( EVT_GRID_CELL_CHANGE,
m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() );