don't draw cell highlight over the cell editor (improves wxGCBoolEditor appearance

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6208 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-02-22 11:08:17 +00:00
parent 89fcf04c8c
commit 99306db210
2 changed files with 62 additions and 68 deletions

View File

@@ -201,6 +201,7 @@ public:
virtual void Create(wxWindow* parent, virtual void Create(wxWindow* parent,
wxWindowID id, wxWindowID id,
wxEvtHandler* evtHandler); wxEvtHandler* evtHandler);
virtual void SetSize(const wxRect& rect);
virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr);
@@ -1004,10 +1005,12 @@ public:
void RegisterDataType(const wxString& typeName, void RegisterDataType(const wxString& typeName,
wxGridCellRenderer* renderer, wxGridCellRenderer* renderer,
wxGridCellEditor* editor); wxGridCellEditor* editor);
wxGridCellEditor* GetDefaultEditorForCell(int row, int col); wxGridCellEditor* GetDefaultEditorForCell(int row, int col) const;
wxGridCellRenderer* GetDefaultRendererForCell(int row, int col); wxGridCellEditor* GetDefaultEditorForCell(const wxGridCellCoords& c) const
wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName); { return GetDefaultEditorForCell(c.GetRow(), c.GetCol()); }
wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName); wxGridCellRenderer* GetDefaultRendererForCell(int row, int col) const;
wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName) const;
wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName) const;
@@ -1171,9 +1174,6 @@ public:
wxGRID_CHOICE, wxGRID_CHOICE,
wxGRID_COMBOBOX }; wxGRID_COMBOBOX };
// for wxGridCellBoolEditor
wxWindow *GetGridWindow() const;
protected: protected:
bool m_created; bool m_created;
bool m_displayed; bool m_displayed;

View File

@@ -468,6 +468,32 @@ void wxGridCellTextEditor::PaintBackground(const wxRect& WXUNUSED(rectCell),
// flicker // flicker
} }
void wxGridCellTextEditor::SetSize(const wxRect& rectOrig)
{
wxRect rect(rectOrig);
// Make the edit control large enough to allow for internal
// margins
//
// TODO: remove this if the text ctrl sizing is improved esp. for
// unix
//
#if defined(__WXGTK__)
rect.Inflate(rect.x ? 1 : 0, rect.y ? 1 : 0);
#else // !GTK
int extra = row && col ? 2 : 1;
#if defined(__WXMOTIF__)
extra *= 2;
#endif
rect.SetLeft( wxMax(0, rect.x - extra) );
rect.SetTop( wxMax(0, rect.y - extra) );
rect.SetRight( rect.GetRight() + 2*extra );
rect.SetBottom( rect.GetBottom() + 2*extra );
#endif // GTK/!GTK
wxGridCellEditor::SetSize(rect);
}
void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid) void wxGridCellTextEditor::BeginEdit(int row, int col, wxGrid* grid)
{ {
wxASSERT_MSG(m_control, wxASSERT_MSG(m_control,
@@ -582,10 +608,10 @@ void wxGridCellBoolEditor::SetSize(const wxRect& r)
void wxGridCellBoolEditor::Show(bool show, wxGridCellAttr *attr) void wxGridCellBoolEditor::Show(bool show, wxGridCellAttr *attr)
{ {
wxGridCellEditor::Show(show, attr); m_control->Show(show);
if ( show ) if ( show )
{ {
// VZ: normally base class already does it, but it doesn't work (FIXME)
wxColour colBg = attr ? attr->GetBackgroundColour() : *wxLIGHT_GREY; wxColour colBg = attr ? attr->GetBackgroundColour() : *wxLIGHT_GREY;
CBox()->SetBackgroundColour(colBg); CBox()->SetBackgroundColour(colBg);
} }
@@ -4470,6 +4496,12 @@ void wxGrid::DrawCellBorder( wxDC& dc, const wxGridCellCoords& coords )
void wxGrid::DrawHighlight(wxDC& dc) void wxGrid::DrawHighlight(wxDC& dc)
{ {
if ( IsCellEditControlEnabled() )
{
// don't show highlight when the edit control is shown
return;
}
// if the active cell was repainted, repaint its highlight too because it // if the active cell was repainted, repaint its highlight too because it
// might have been damaged by the grid lines // might have been damaged by the grid lines
size_t count = m_cellsExposed.GetCount(); size_t count = m_cellsExposed.GetCount();
@@ -4856,11 +4888,6 @@ bool wxGrid::IsCellEditControlEnabled() const
return m_cellEditCtrlEnabled ? !IsCurrentCellReadOnly() : FALSE; return m_cellEditCtrlEnabled ? !IsCurrentCellReadOnly() : FALSE;
} }
wxWindow *wxGrid::GetGridWindow() const
{
return m_gridWin;
}
void wxGrid::ShowCellEditControl() void wxGrid::ShowCellEditControl()
{ {
if ( IsCellEditControlEnabled() ) if ( IsCellEditControlEnabled() )
@@ -4877,58 +4904,22 @@ void wxGrid::ShowCellEditControl()
// convert to scrolled coords // convert to scrolled coords
// //
int left, top, right, bottom; CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom ); // done in PaintBackground()
#if 0
// erase the highlight and the cell contents because the editor
// might not cover the entire cell
wxClientDC dc( m_gridWin );
PrepareDC( dc );
dc.SetBrush(*wxLIGHT_GREY_BRUSH); //wxBrush(attr->GetBackgroundColour(), wxSOLID));
dc.SetPen(*wxTRANSPARENT_PEN);
dc.DrawRectangle(rect);
#endif // 0
// cell is shifted by one pixel // cell is shifted by one pixel
left--; rect.x--;
top--; rect.y--;
right--;
bottom--;
// 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__)
if ( row == 0 || col == 0 )
{
extra = 2;
}
else
{
extra = 4;
}
#else
if ( row == 0 || col == 0 )
{
extra = 1;
}
else
{
extra = 2;
}
#endif
#if defined(__WXGTK__)
int top_diff = 0;
int left_diff = 0;
if (left != 0) left_diff++;
if (top != 0) top_diff++;
rect.SetLeft( left + left_diff );
rect.SetTop( top + top_diff );
rect.SetRight( rect.GetRight() - left_diff );
rect.SetBottom( rect.GetBottom() - top_diff );
#else
rect.SetLeft( wxMax(0, left - extra) );
rect.SetTop( wxMax(0, top - extra) );
rect.SetRight( rect.GetRight() + 2*extra );
rect.SetBottom( rect.GetBottom() + 2*extra );
#endif
wxGridCellAttr* attr = GetCellAttr(row, col); wxGridCellAttr* attr = GetCellAttr(row, col);
wxGridCellEditor* editor = attr->GetEditor(GetDefaultEditorForCell(row, col)); wxGridCellEditor* editor = attr->GetEditor(GetDefaultEditorForCell(row, col));
@@ -4939,6 +4930,7 @@ void wxGrid::ShowCellEditControl()
} }
editor->SetSize( rect ); editor->SetSize( rect );
editor->Show( TRUE, attr ); editor->Show( TRUE, attr );
editor->BeginEdit(row, col, this); editor->BeginEdit(row, col, this);
attr->DecRef(); attr->DecRef();
@@ -6190,19 +6182,20 @@ void wxGrid::RegisterDataType(const wxString& typeName,
} }
wxGridCellEditor* wxGrid::GetDefaultEditorForCell(int row, int col) wxGridCellEditor* wxGrid::GetDefaultEditorForCell(int row, int col) const
{ {
wxString typeName = m_table->GetTypeName(row, col); wxString typeName = m_table->GetTypeName(row, col);
return GetDefaultEditorForType(typeName); return GetDefaultEditorForType(typeName);
} }
wxGridCellRenderer* wxGrid::GetDefaultRendererForCell(int row, int col) wxGridCellRenderer* wxGrid::GetDefaultRendererForCell(int row, int col) const
{ {
wxString typeName = m_table->GetTypeName(row, col); wxString typeName = m_table->GetTypeName(row, col);
return GetDefaultRendererForType(typeName); return GetDefaultRendererForType(typeName);
} }
wxGridCellEditor* wxGrid::GetDefaultEditorForType(const wxString& typeName) wxGridCellEditor*
wxGrid::GetDefaultEditorForType(const wxString& typeName) const
{ {
int index = m_typeRegistry->FindDataType(typeName); int index = m_typeRegistry->FindDataType(typeName);
if (index == -1) { if (index == -1) {
@@ -6213,7 +6206,8 @@ wxGridCellEditor* wxGrid::GetDefaultEditorForType(const wxString& typeName)
return m_typeRegistry->GetEditor(index); return m_typeRegistry->GetEditor(index);
} }
wxGridCellRenderer* wxGrid::GetDefaultRendererForType(const wxString& typeName) wxGridCellRenderer*
wxGrid::GetDefaultRendererForType(const wxString& typeName) const
{ {
int index = m_typeRegistry->FindDataType(typeName); int index = m_typeRegistry->FindDataType(typeName);
if (index == -1) { if (index == -1) {