#pragma hdrstop
#endif
-#if wxUSE_COMBOCTRL
-
+#if wxUSE_COMBOBOX
#include "wx/combobox.h"
+extern WXDLLEXPORT_DATA(const char) wxComboBoxNameStr[] = "comboBox";
+#endif
+
+#if wxUSE_COMBOCTRL
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/combo.h"
+// ----------------------------------------------------------------------------
+// XTI
+// ----------------------------------------------------------------------------
+
+wxDEFINE_FLAGS( wxComboBoxStyle )
+wxBEGIN_FLAGS( wxComboBoxStyle )
+// new style border flags, we put them first to
+// use them for streaming out
+wxFLAGS_MEMBER(wxBORDER_SIMPLE)
+wxFLAGS_MEMBER(wxBORDER_SUNKEN)
+wxFLAGS_MEMBER(wxBORDER_DOUBLE)
+wxFLAGS_MEMBER(wxBORDER_RAISED)
+wxFLAGS_MEMBER(wxBORDER_STATIC)
+wxFLAGS_MEMBER(wxBORDER_NONE)
+
+// old style border flags
+wxFLAGS_MEMBER(wxSIMPLE_BORDER)
+wxFLAGS_MEMBER(wxSUNKEN_BORDER)
+wxFLAGS_MEMBER(wxDOUBLE_BORDER)
+wxFLAGS_MEMBER(wxRAISED_BORDER)
+wxFLAGS_MEMBER(wxSTATIC_BORDER)
+wxFLAGS_MEMBER(wxBORDER)
+
+// standard window styles
+wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
+wxFLAGS_MEMBER(wxCLIP_CHILDREN)
+wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
+wxFLAGS_MEMBER(wxWANTS_CHARS)
+wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
+wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
+wxFLAGS_MEMBER(wxVSCROLL)
+wxFLAGS_MEMBER(wxHSCROLL)
+
+wxFLAGS_MEMBER(wxCB_SIMPLE)
+wxFLAGS_MEMBER(wxCB_SORT)
+wxFLAGS_MEMBER(wxCB_READONLY)
+wxFLAGS_MEMBER(wxCB_DROPDOWN)
+
+wxEND_FLAGS( wxComboBoxStyle )
+
+wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxComboBox, wxControl, "wx/combobox.h")
+
+wxBEGIN_PROPERTIES_TABLE(wxComboBox)
+wxEVENT_PROPERTY( Select, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEvent )
+wxEVENT_PROPERTY( TextEnter, wxEVT_COMMAND_TEXT_ENTER, wxCommandEvent )
+
+// TODO DELEGATES
+wxPROPERTY( Font, wxFont, SetFont, GetFont, wxEMPTY_PARAMETER_VALUE, \
+ 0 /*flags*/, wxT("Helpstring"), wxT("group"))
+wxPROPERTY_COLLECTION( Choices, wxArrayString, wxString, AppendString, \
+ GetStrings, 0 /*flags*/, wxT("Helpstring"), wxT("group"))
+wxPROPERTY( Value,wxString, SetValue, GetValue, wxEMPTY_PARAMETER_VALUE, \
+ 0 /*flags*/, wxT("Helpstring"), wxT("group"))
+wxPROPERTY( Selection,int, SetSelection, GetSelection, wxEMPTY_PARAMETER_VALUE, \
+ 0 /*flags*/, wxT("Helpstring"), wxT("group"))
+
+wxPROPERTY_FLAGS( WindowStyle, wxComboBoxStyle, long, SetWindowStyleFlag, \
+ GetWindowStyleFlag, wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, \
+ wxT("Helpstring"), wxT("group")) // style
+wxEND_PROPERTIES_TABLE()
+
+wxEMPTY_HANDLERS_TABLE(wxComboBox)
+
+wxCONSTRUCTOR_5( wxComboBox, wxWindow*, Parent, wxWindowID, Id, \
+ wxString, Value, wxPoint, Position, wxSize, Size )
// constants
// ----------------------------------------------------------------------------
{
}
+bool wxComboPopup::FindItem(const wxString& WXUNUSED(item),
+ wxString* WXUNUSED(trueItem))
+{
+ return true;
+}
+
bool wxComboPopup::LazyCreate()
{
return false;
}
// This must be done after creation
- if ( m_valueString.length() )
+ if ( !m_valueString.empty() )
{
iface->SetStringValue(m_valueString);
//Refresh();
// to set the string value here (as well as sometimes in ShowPopup).
if ( m_valueString != value )
{
- m_valueString = value;
+ bool found = true;
+ wxString trueValue = value;
- EnsurePopupControl();
+ // Conform to wxComboBox behavior: read-only control can only accept
+ // valid list items and empty string
+ if ( m_popupInterface && HasFlag(wxCB_READONLY) && value.length() )
+ {
+ found = m_popupInterface->FindItem(value,
+ &trueValue);
+ }
- if (m_popupInterface)
- m_popupInterface->SetStringValue(value);
+ if ( found )
+ {
+ m_valueString = trueValue;
+
+ EnsurePopupControl();
+
+ if ( m_popupInterface )
+ m_popupInterface->SetStringValue(trueValue);
+ }
}
Refresh();