if ( m_value >= 0 )
{
- OnDrawItem(dc,rect,m_value,wxODCB_PAINTING_CONTROL);
+ OnDrawItem(dc,rect,m_value,flags);
return;
}
}
// TODO: Maybe this code could be moved to wxVListBox::OnPaint?
dc.SetFont(m_useFont);
+ int flags = 0;
+
// Set correct text colour for selected items
if ( wxVListBox::GetSelection() == (int) n )
+ {
dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) );
+ flags |= wxODCB_PAINTING_SELECTED;
+ }
else
+ {
dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT) );
+ }
- OnDrawItem(dc,rect,(int)n,0);
+ OnDrawItem(dc,rect,(int)n,flags);
}
wxCoord wxVListBoxComboPopup::OnMeasureItem(size_t n) const
const size_t lineMax = GetVisibleEnd();
for ( size_t line = GetVisibleBegin(); line < lineMax; line++ )
{
- y -= OnGetLineHeight(line);
+ y -= OnGetRowHeight(line);
if ( y < 0 )
{
// Only change selection if item is fully visible
}
m_strings.Insert(item,pos);
+ m_clientDatas.Insert(NULL, pos);
+
m_widths.Insert(-1,pos);
m_widthsDirty = true;
// It should be sufficient to update this variable only here
m_clientDataItemsType = clientDataItemsType;
- m_clientDatas.SetCount(n+1,NULL);
m_clientDatas[n] = clientData;
ItemWidthChanged(n);
{
int height = 250;
+ maxHeight -= 2; // Must take borders into account
+
if ( m_strings.GetCount() )
{
if ( prefHeight > 0 )
// NB: Calculations that take variable height into account
// are unnecessary.
int fih = GetLineHeight(0);
- int shown = height/fih;
- height = shown * fih;
+ height -= height % fih;
}
}
else
END_EVENT_TABLE()
+#if wxUSE_EXTENDED_RTTI
+IMPLEMENT_DYNAMIC_CLASS2_XTI(wxOwnerDrawnComboBox, wxComboCtrl, wxControlWithItems, "wx/odcombo.h")
+
+wxBEGIN_PROPERTIES_TABLE(wxOwnerDrawnComboBox)
+wxEND_PROPERTIES_TABLE()
+
+wxBEGIN_HANDLERS_TABLE(wxOwnerDrawnComboBox)
+wxEND_HANDLERS_TABLE()
+
+wxCONSTRUCTOR_5( wxOwnerDrawnComboBox , wxWindow* , Parent , wxWindowID , Id , wxString , Value , wxPoint , Position , wxSize , Size )
+#else
IMPLEMENT_DYNAMIC_CLASS2(wxOwnerDrawnComboBox, wxComboCtrl, wxControlWithItems)
+#endif
void wxOwnerDrawnComboBox::Init()
{
// wxOwnerDrawnComboBox item manipulation methods
// ----------------------------------------------------------------------------
-void wxOwnerDrawnComboBox::Clear()
+void wxOwnerDrawnComboBox::DoClear()
{
EnsurePopupControl();
SetValue(wxEmptyString);
}
-void wxOwnerDrawnComboBox::Delete(unsigned int n)
+void wxOwnerDrawnComboBox::DoDeleteOneItem(unsigned int n)
{
wxCHECK_RET( IsValid(n), _T("invalid index in wxOwnerDrawnComboBox::Delete") );
return GetVListBoxComboPopup()->GetSelection();
}
-int wxOwnerDrawnComboBox::DoAppend(const wxString& item)
-{
- EnsurePopupControl();
- wxASSERT(m_popupInterface);
-
- return GetVListBoxComboPopup()->Append(item);
-}
-
-int wxOwnerDrawnComboBox::DoInsert(const wxString& item, unsigned int pos)
+int wxOwnerDrawnComboBox::DoInsertItems(const wxArrayStringsAdapter& items,
+ unsigned int pos,
+ void **clientData,
+ wxClientDataType type)
{
EnsurePopupControl();
- wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
- wxCHECK_MSG(IsValidInsert(pos), -1, wxT("invalid index"));
-
- GetVListBoxComboPopup()->Insert(item,pos);
+ const unsigned int count = items.GetCount();
+ for( unsigned int i = 0; i < count; ++i, ++pos )
+ {
+ GetVListBoxComboPopup()->Insert(items[i], pos);
+ AssignNewItemClientData(pos, clientData, i, type);
+ }
- return pos;
+ return pos - 1;
}
void wxOwnerDrawnComboBox::DoSetItemClientData(unsigned int n, void* clientData)
return GetVListBoxComboPopup()->GetItemClientData(n);
}
-void wxOwnerDrawnComboBox::DoSetItemClientObject(unsigned int n, wxClientData* clientData)
-{
- DoSetItemClientData(n, (void*) clientData);
-}
-
-wxClientData* wxOwnerDrawnComboBox::DoGetItemClientObject(unsigned int n) const
-{
- return (wxClientData*) DoGetItemClientData(n);
-}
-
// ----------------------------------------------------------------------------
// wxOwnerDrawnComboBox item drawing and measuring default implementations
// ----------------------------------------------------------------------------