From e59e670c9b5021304c4beb02ec726f3a879ad63f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Feb 2012 23:49:55 +0000 Subject: [PATCH] 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 --- include/wx/generic/grideditors.h | 2 ++ src/generic/grideditors.cpp | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/wx/generic/grideditors.h b/include/wx/generic/grideditors.h index e76e619576..4a7b9270dd 100644 --- a/include/wx/generic/grideditors.h +++ b/include/wx/generic/grideditors.h @@ -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); diff --git a/src/generic/grideditors.cpp b/src/generic/grideditors.cpp index 835ca10e71..6af6ad1462 100644 --- a/src/generic/grideditors.cpp +++ b/src/generic/grideditors.cpp @@ -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) { -- 2.47.2