Clear();
}
+void wxVListBoxComboPopup::SetFocus()
+{
+ // Suppress SetFocus() warning by simply not calling it. This combo popup
+ // has already been designed with the assumption that SetFocus() may not
+ // do anything useful, so it really doesn't need to be called.
+#ifdef __WXMSW__
+ //
+#else
+ wxVListBox::SetFocus();
+#endif
+}
+
bool wxVListBoxComboPopup::LazyCreate()
{
// NB: There is a bug with wxVListBox that can be avoided by creating
m_stringValue = wxEmptyString;
if ( m_stringValue != m_combo->GetValue() )
- m_combo->SetValueWithEvent(m_stringValue);
+ m_combo->SetValueByUser(m_stringValue);
m_value = selection;
// (good for consistency)
return true;
- m_value = value;
-
if ( value >= 0 )
- m_combo->SetValue(m_strings[value]);
+ m_combo->ChangeValue(m_strings[value]);
+
+ // The m_combo->SetValue() call above sets m_value to the index of this
+ // string. But if there are more identical string, the index is of the
+ // first occurence, which may be wrong, so set the index explicitly here,
+ // _after_ the SetValue() call.
+ m_value = value;
SendComboBoxEvent(m_value);
for ( i=0; i<strings.GetCount(); i++ )
{
- if ( item.CmpNoCase(strings.Item(i)) < 0 )
+ if ( item.CmpNoCase(strings.Item(i)) <= 0 )
{
pos = (int)i;
break;
return m_strings.Index(s, bCase);
}
+bool wxVListBoxComboPopup::FindItem(const wxString& item, wxString* trueItem)
+{
+ int idx = m_strings.Index(item, false);
+ if ( idx == wxNOT_FOUND )
+ return false;
+ if ( trueItem != NULL )
+ *trueItem = m_strings[idx];
+ return true;
+}
+
unsigned int wxVListBoxComboPopup::GetCount() const
{
return m_strings.GetCount();
// Find initial selection
wxString strValue = m_combo->GetValue();
- if ( strValue.length() )
+ if ( !strValue.empty() )
m_value = m_strings.Index(strValue);
}
BEGIN_EVENT_TABLE(wxOwnerDrawnComboBox, wxComboCtrl)
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()
{
}
long style,
const wxValidator& validator,
const wxString& name)
- : wxComboCtrl()
{
Init();
GetVListBoxComboPopup()->Clear();
+ // NB: This really needs to be SetValue() instead of ChangeValue(),
+ // as wxTextEntry API expects an event to be sent.
SetValue(wxEmptyString);
}
+void wxOwnerDrawnComboBox::Clear()
+{
+ DoClear();
+}
+
void wxOwnerDrawnComboBox::DoDeleteOneItem(unsigned int n)
{
wxCHECK_RET( IsValid(n), wxT("invalid index in wxOwnerDrawnComboBox::Delete") );
if ( GetSelection() == (int) n )
- SetValue(wxEmptyString);
+ ChangeValue(wxEmptyString);
GetVListBoxComboPopup()->Delete(n);
}
// Refresh text portion in control
if ( m_text )
- m_text->SetValue( str );
+ m_text->ChangeValue( str );
else
m_valueString = str;
return GetVListBoxComboPopup()->GetSelection();
}
+void wxOwnerDrawnComboBox::GetSelection(long *from, long *to) const
+{
+ wxComboCtrl::GetSelection(from, to);
+}
+
int wxOwnerDrawnComboBox::DoInsertItems(const wxArrayStringsAdapter& items,
unsigned int pos,
void **clientData,