add combobox drop down/close up events (closes #10587)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59603 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -403,6 +403,7 @@ All (GUI):
 | 
			
		||||
- Also added wxCANCEL_DEFAULT to wxMessageDialog.
 | 
			
		||||
- Allow copying text in the log dialogs.
 | 
			
		||||
- Added multisample (anti-aliasing) support to wxGLCanvas (Olivier Playez).
 | 
			
		||||
- Added wxEVT_COMMAND_COMBOBOX_DROPDOWN/CLOSEUP events (Igor Korot).
 | 
			
		||||
- Added wxCAL_SHOW_WEEK_NUMBERS wxCalendarCtrl style (S<>ren Meyer-Eppler).
 | 
			
		||||
- Initialize wx{Client,Paint,Window}DC with fonts/colours of its window.
 | 
			
		||||
- Added wxNativeContainerWindow to allow embedding wx into native windows.
 | 
			
		||||
 
 | 
			
		||||
@@ -596,6 +596,8 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_SELECTED, wxCo
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_TOOL_RCLICKED, wxCommandEvent);
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, wxCommandEvent);
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_TOOL_ENTER, wxCommandEvent);
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_DROPDOWN, wxCommandEvent);
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COMBOBOX_CLOSEUP, wxCommandEvent);
 | 
			
		||||
 | 
			
		||||
    // Thread events
 | 
			
		||||
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_COMMAND_THREAD, wxThreadEvent);
 | 
			
		||||
@@ -3749,6 +3751,8 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
 | 
			
		||||
#define EVT_TOOL_RCLICKED_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, wxCommandEventHandler(func))
 | 
			
		||||
#define EVT_TOOL_ENTER(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_ENTER, winid, wxCommandEventHandler(func))
 | 
			
		||||
#define EVT_CHECKLISTBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, winid, wxCommandEventHandler(func))
 | 
			
		||||
#define EVT_COMBOBOX_DROPDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_COMBOBOX_DROPDOWN, winid, wxCommandEventHandler(func))
 | 
			
		||||
#define EVT_COMBOBOX_CLOSEUP(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_COMBOBOX_CLOSEUP, winid, wxCommandEventHandler(func))
 | 
			
		||||
 | 
			
		||||
// Generic command events
 | 
			
		||||
#define EVT_COMMAND_LEFT_CLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_LEFT_CLICK, winid, wxCommandEventHandler(func))
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,16 @@
 | 
			
		||||
           Process a wxEVT_COMMAND_TEXT_ENTER event, when RETURN is pressed in
 | 
			
		||||
           the combobox (notice that the combobox must have been created with
 | 
			
		||||
           wxTE_PROCESS_ENTER style to receive this event).
 | 
			
		||||
    @event{EVT_COMBOX_DROPDOWN(id, func)}
 | 
			
		||||
           Process a wxEVT_COMMAND_COMBOBOX_DROPDOWN event, which is generated
 | 
			
		||||
           when the list box part of the combo box is shown (drops down).
 | 
			
		||||
           Notice that this event is currently only supported by wxMSW and
 | 
			
		||||
           wxGTK with GTK+ 2.10 or later.
 | 
			
		||||
    @event{EVT_COMBOX_CLOSEUP(id, func)}
 | 
			
		||||
           Process a wxEVT_COMMAND_COMBOBOX_CLOSEUP event, which is generated
 | 
			
		||||
           when the list box of the combo box disappears (closes up). This
 | 
			
		||||
           event is only generated for the same platforms as
 | 
			
		||||
           wxEVT_COMMAND_COMBOBOX_DROPDOWN above.
 | 
			
		||||
    @endEventTable
 | 
			
		||||
 | 
			
		||||
    @library{wxcore}
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,8 @@ protected:
 | 
			
		||||
    void OnButtonSetValue(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetCurrent(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnDropdown(wxCommandEvent& event);
 | 
			
		||||
    void OnCloseup(wxCommandEvent& event);
 | 
			
		||||
    void OnComboBox(wxCommandEvent& event);
 | 
			
		||||
    void OnComboText(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
@@ -199,6 +201,8 @@ BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_SetCurrent, ComboboxWidgetsPage::OnUpdateUISetCurrent)
 | 
			
		||||
 | 
			
		||||
    EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
 | 
			
		||||
    EVT_COMBOBOX_DROPDOWN(ComboPage_Combo, ComboboxWidgetsPage::OnDropdown)
 | 
			
		||||
    EVT_COMBOBOX_CLOSEUP(ComboPage_Combo, ComboboxWidgetsPage::OnCloseup)
 | 
			
		||||
    EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
 | 
			
		||||
    EVT_TEXT_ENTER(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
 | 
			
		||||
 | 
			
		||||
@@ -636,6 +640,16 @@ void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
    CreateCombo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnDropdown(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Combobox dropped down"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnCloseup(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Combobox closed up"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif //wxUSE_COMBOBOX
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -177,6 +177,8 @@ wxDEFINE_EVENT( wxEVT_COMMAND_TOOL_ENTER, wxCommandEvent );
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEvent );
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, wxCommandEvent );
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, wxCommandEvent );
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_COMMAND_COMBOBOX_DROPDOWN, wxCommandEvent);
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_COMMAND_COMBOBOX_CLOSEUP, wxCommandEvent);
 | 
			
		||||
 | 
			
		||||
// Mouse event types
 | 
			
		||||
wxDEFINE_EVENT( wxEVT_LEFT_DOWN, wxMouseEvent );
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,20 @@ gtkcombobox_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo )
 | 
			
		||||
{
 | 
			
		||||
    combo->SendSelectionChangedEvent(wxEVT_COMMAND_COMBOBOX_SELECTED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
gtkcombobox_popupshown_callback(GObject *WXUNUSED(gobject),
 | 
			
		||||
                                GParamSpec *WXUNUSED(param_spec),
 | 
			
		||||
                                wxComboBox *combo)
 | 
			
		||||
{
 | 
			
		||||
    gboolean isShown;
 | 
			
		||||
    g_object_get( combo->m_widget, "popup-shown", &isShown, NULL );
 | 
			
		||||
    wxCommandEvent event( isShown ? wxEVT_COMMAND_COMBOBOX_DROPDOWN
 | 
			
		||||
                                  : wxEVT_COMMAND_COMBOBOX_CLOSEUP,
 | 
			
		||||
                          combo->GetId() );
 | 
			
		||||
    event.SetEventObject( combo );
 | 
			
		||||
    combo->HandleWindowEvent( event );
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
@@ -158,6 +172,12 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
 | 
			
		||||
    g_signal_connect_after (m_widget, "changed",
 | 
			
		||||
                        G_CALLBACK (gtkcombobox_changed_callback), this);
 | 
			
		||||
 | 
			
		||||
    if ( gtk_check_version(2,10,0) )
 | 
			
		||||
    {
 | 
			
		||||
        g_signal_connect (m_widget, "notify::popup-shown",
 | 
			
		||||
                          G_CALLBACK (gtkcombobox_popupshown_callback), this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SetInitialSize(size); // need this too because this is a wxControlWithItems
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
@@ -210,6 +230,8 @@ void wxComboBox::DisableEvents()
 | 
			
		||||
 | 
			
		||||
    g_signal_handlers_block_by_func(m_widget,
 | 
			
		||||
        (gpointer)gtkcombobox_changed_callback, this);
 | 
			
		||||
    g_signal_handlers_block_by_func(m_widget,
 | 
			
		||||
        (gpointer)gtkcombobox_popupshown_callback, this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxComboBox::EnableEvents()
 | 
			
		||||
@@ -220,6 +242,8 @@ void wxComboBox::EnableEvents()
 | 
			
		||||
 | 
			
		||||
    g_signal_handlers_unblock_by_func(m_widget,
 | 
			
		||||
        (gpointer)gtkcombobox_changed_callback, this);
 | 
			
		||||
    g_signal_handlers_unblock_by_func(m_widget,
 | 
			
		||||
        (gpointer)gtkcombobox_popupshown_callback, this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GtkWidget* wxComboBox::GetConnectWidget()
 | 
			
		||||
 
 | 
			
		||||
@@ -342,8 +342,19 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id)
 | 
			
		||||
                // down is cancelled (see #8474)
 | 
			
		||||
                m_lastAcceptedSelection = wxID_NONE;
 | 
			
		||||
            }
 | 
			
		||||
            {
 | 
			
		||||
                wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_DROPDOWN, GetId());
 | 
			
		||||
                event.SetEventObject(this);
 | 
			
		||||
                ProcessCommand(event);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case CBN_CLOSEUP:
 | 
			
		||||
            {
 | 
			
		||||
                wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_CLOSEUP, GetId());
 | 
			
		||||
                event.SetEventObject(this);
 | 
			
		||||
                ProcessCommand(event);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case CBN_SELENDOK:
 | 
			
		||||
#ifndef __SMARTPHONE__
 | 
			
		||||
            // we need to reset this to prevent the selection from being undone
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user