Ensure that combobox editor used by wxGrid is tall enough.

Set the rectangle of wxGridCellChoiceEditor to be at least as tall as the best
(i.e. minimal) wxComboBox size because otherwise the control can be unusable.

Closes #13818.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70693 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-02-25 23:49:55 +00:00
parent 4dfc0ca0c5
commit e59e670c9b
2 changed files with 25 additions and 0 deletions

View File

@ -295,6 +295,8 @@ public:
wxWindowID id,
wxEvtHandler* evtHandler);
virtual void SetSize(const wxRect& rect);
virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr);
virtual void BeginEdit(int row, int col, wxGrid* grid);

View File

@ -1414,6 +1414,29 @@ void wxGridCellChoiceEditor::Create(wxWindow* parent,
wxGridCellEditor::Create(parent, id, evtHandler);
}
void wxGridCellChoiceEditor::SetSize(const wxRect& rect)
{
wxASSERT_MSG(m_control,
wxT("The wxGridCellChoiceEditor must be created first!"));
// Check that the height is not too small to fit the combobox.
wxRect rectTallEnough = rect;
const wxSize bestSize = m_control->GetBestSize();
const wxCoord diffY = bestSize.GetHeight() - rectTallEnough.GetHeight();
if ( diffY > 0 )
{
// Do make it tall enough.
rectTallEnough.height += diffY;
// Also centre the effective rectangle vertically with respect to the
// original one.
rectTallEnough.y -= diffY/2;
}
//else: The rectangle provided is already tall enough.
wxGridCellEditor::SetSize(rectTallEnough);
}
void wxGridCellChoiceEditor::PaintBackground(const wxRect& rectCell,
wxGridCellAttr * attr)
{