virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData) = 0;
virtual wxClientData* DoGetItemClientObject(unsigned int n) const = 0;
+
// the type of the client data for the items
wxClientDataType m_clientDataItemsType;
};
// ctors for this to work!
virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) { }
+ // fill in the client object or data field of the event as appropriate
+ //
+ // calls InitCommandEvent() and, if n != wxNOT_FOUND, also sets the per
+ // item client data
+ void InitCommandEventWithItems(wxCommandEvent& event, int n);
+
private:
DECLARE_ABSTRACT_CLASS(wxControlWithItems)
DECLARE_NO_COPY_CLASS(wxControlWithItems)
if ( n > -1 )
{
event.SetString(GetStringSelection());
- if ( HasClientObjectData() )
- event.SetClientObject( GetClientObject(n) );
- else if ( HasClientUntypedData() )
- event.SetClientData( GetClientData(n) );
+ InitCommandEventWithItems(event, n);
}
ProcessCommand(event);
if ( wParam == VK_RETURN )
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
- InitCommandEvent(event);
+
+ const int sel = GetSelection();
+ event.SetInt(sel);
event.SetString(GetValue());
- event.SetInt(GetSelection());
+ InitCommandEventWithItems(event, sel);
+
if ( ProcessCommand(event) )
{
// don't let the event through to the native control
value = GetStringSelection();
{
wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId());
- event.SetEventObject(this);
event.SetInt(sel);
event.SetString(value);
+ InitCommandEventWithItems(event, sel);
+
ProcessCommand(event);
}
case CBN_EDITCHANGE:
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId());
- event.SetEventObject(this);
// if sel != -1, value was already initialized above
if ( sel == -1 )
}
event.SetString(value);
+ InitCommandEventWithItems(event, sel);
+
ProcessCommand(event);
}
break;