wxListBox mouse events now report coords relative

to the whole list box.
  wxRadioButton doesn't emit any event when unpressed.
  Similar correction to wxRadioBox and wxToggleButton.
  Upported change to wxMenuEvent so that the id is
     set in the constructor. Otherwise the EVT_MENU
     macro is pretty useless. Already in 2.2.8.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2001-11-08 23:24:16 +00:00
parent 6433f6d316
commit e2762ff06a
13 changed files with 101 additions and 73 deletions

View File

@@ -1027,7 +1027,7 @@ class WXDLLEXPORT wxMenuEvent : public wxEvent
public: public:
wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0) wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0)
{ m_eventType = type; m_menuId = id; } { m_eventType = type; m_menuId = id; m_id = id; }
int GetMenuId() const { return m_menuId; } int GetMenuId() const { return m_menuId; }

View File

@@ -193,6 +193,7 @@ public:
bool m_resizing:1; bool m_resizing:1;
bool m_isStaticBox:1; // faster than IS_KIND_OF bool m_isStaticBox:1; // faster than IS_KIND_OF
bool m_isRadioButton:1; // faster than IS_KIND_OF bool m_isRadioButton:1; // faster than IS_KIND_OF
bool m_isListBox:1; // faster than IS_KIND_OF
bool m_isFrame:1; // faster than IS_KIND_OF bool m_isFrame:1; // faster than IS_KIND_OF
bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc. bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
bool m_isScrolling; bool m_isScrolling;

View File

@@ -193,6 +193,7 @@ public:
bool m_resizing:1; bool m_resizing:1;
bool m_isStaticBox:1; // faster than IS_KIND_OF bool m_isStaticBox:1; // faster than IS_KIND_OF
bool m_isRadioButton:1; // faster than IS_KIND_OF bool m_isRadioButton:1; // faster than IS_KIND_OF
bool m_isListBox:1; // faster than IS_KIND_OF
bool m_isFrame:1; // faster than IS_KIND_OF bool m_isFrame:1; // faster than IS_KIND_OF
bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc. bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
bool m_isScrolling; bool m_isScrolling;

View File

@@ -333,6 +333,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
{ {
m_needParent = TRUE; m_needParent = TRUE;
m_acceptsFocus = TRUE; m_acceptsFocus = TRUE;
m_isListBox = TRUE;
m_prevSelection = 0; // or -1 ?? m_prevSelection = 0; // or -1 ??
if (!PreCreation( parent, pos, size ) || if (!PreCreation( parent, pos, size ) ||

View File

@@ -44,20 +44,14 @@ extern bool g_blockEventsOnDrag;
// "clicked" // "clicked"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioBox *rb ) static void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioBox *rb )
{ {
if (g_isIdle) wxapp_install_idle_handler(); if (g_isIdle) wxapp_install_idle_handler();
if (!rb->m_hasVMT) return; if (!rb->m_hasVMT) return;
if (g_blockEventsOnDrag) return; if (g_blockEventsOnDrag) return;
if (rb->m_alreadySent) if (!button->active) return;
{
rb->m_alreadySent = FALSE;
return;
}
rb->m_alreadySent = TRUE;
wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() ); wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() );
event.SetInt( rb->GetSelection() ); event.SetInt( rb->GetSelection() );
@@ -166,7 +160,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox,wxControl)
void wxRadioBox::Init() void wxRadioBox::Init()
{ {
m_alreadySent = FALSE;
m_needParent = TRUE; m_needParent = TRUE;
m_acceptsFocus = TRUE; m_acceptsFocus = TRUE;
@@ -478,7 +471,7 @@ void wxRadioBox::SetSelection( int n )
GtkDisableEvents(); GtkDisableEvents();
gtk_toggle_button_set_state( button, 1 ); gtk_toggle_button_set_active( button, 1 );
GtkEnableEvents(); GtkEnableEvents();
} }

View File

@@ -40,7 +40,7 @@ extern wxCursor g_globalCursor;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static static
void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb ) void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioButton *rb )
{ {
if (g_isIdle) wxapp_install_idle_handler(); if (g_isIdle) wxapp_install_idle_handler();
@@ -48,6 +48,8 @@ void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButto
if (g_blockEventsOnDrag) return; if (g_blockEventsOnDrag) return;
if (!button->active) return;
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() ); event.SetInt( rb->GetValue() );
event.SetEventObject( rb ); event.SetEventObject( rb );
@@ -159,7 +161,7 @@ void wxRadioButton::SetValue( bool val )
if (val) if (val)
{ {
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(m_widget), TRUE );
} }
else else
{ {

View File

@@ -106,7 +106,7 @@ void wxToggleButton::SetValue(bool state)
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback), GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
(gpointer *)this); (gpointer *)this);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(m_widget), state); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
gtk_signal_connect(GTK_OBJECT(m_widget), "clicked", gtk_signal_connect(GTK_OBJECT(m_widget), "clicked",
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback), GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),

View File

@@ -1334,6 +1334,14 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton
AdjustEventButtonState(event); AdjustEventButtonState(event);
// wxListBox actually get mouse events from the item
if (win->m_isListBox)
{
event.m_x += widget->allocation.x;
event.m_y += widget->allocation.y;
}
// Some control don't have their own X window and thus cannot get // Some control don't have their own X window and thus cannot get
// any events. // any events.
@@ -1466,6 +1474,14 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
AdjustEventButtonState(event); AdjustEventButtonState(event);
// wxListBox actually get mouse events from the item
if (win->m_isListBox)
{
event.m_x += widget->allocation.x;
event.m_y += widget->allocation.y;
}
// Some control don't have their own X window and thus cannot get // Some control don't have their own X window and thus cannot get
// any events. // any events.
@@ -2366,6 +2382,7 @@ void wxWindowGTK::Init()
m_isStaticBox = FALSE; m_isStaticBox = FALSE;
m_isRadioButton = FALSE; m_isRadioButton = FALSE;
m_isListBox = FALSE;
m_isFrame = FALSE; m_isFrame = FALSE;
m_acceptsFocus = FALSE; m_acceptsFocus = FALSE;

View File

@@ -333,6 +333,7 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
{ {
m_needParent = TRUE; m_needParent = TRUE;
m_acceptsFocus = TRUE; m_acceptsFocus = TRUE;
m_isListBox = TRUE;
m_prevSelection = 0; // or -1 ?? m_prevSelection = 0; // or -1 ??
if (!PreCreation( parent, pos, size ) || if (!PreCreation( parent, pos, size ) ||

View File

@@ -44,20 +44,14 @@ extern bool g_blockEventsOnDrag;
// "clicked" // "clicked"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioBox *rb ) static void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioBox *rb )
{ {
if (g_isIdle) wxapp_install_idle_handler(); if (g_isIdle) wxapp_install_idle_handler();
if (!rb->m_hasVMT) return; if (!rb->m_hasVMT) return;
if (g_blockEventsOnDrag) return; if (g_blockEventsOnDrag) return;
if (rb->m_alreadySent) if (!button->active) return;
{
rb->m_alreadySent = FALSE;
return;
}
rb->m_alreadySent = TRUE;
wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() ); wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() );
event.SetInt( rb->GetSelection() ); event.SetInt( rb->GetSelection() );
@@ -166,7 +160,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox,wxControl)
void wxRadioBox::Init() void wxRadioBox::Init()
{ {
m_alreadySent = FALSE;
m_needParent = TRUE; m_needParent = TRUE;
m_acceptsFocus = TRUE; m_acceptsFocus = TRUE;
@@ -478,7 +471,7 @@ void wxRadioBox::SetSelection( int n )
GtkDisableEvents(); GtkDisableEvents();
gtk_toggle_button_set_state( button, 1 ); gtk_toggle_button_set_active( button, 1 );
GtkEnableEvents(); GtkEnableEvents();
} }

View File

@@ -40,7 +40,7 @@ extern wxCursor g_globalCursor;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static static
void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb ) void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioButton *rb )
{ {
if (g_isIdle) wxapp_install_idle_handler(); if (g_isIdle) wxapp_install_idle_handler();
@@ -48,6 +48,8 @@ void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButto
if (g_blockEventsOnDrag) return; if (g_blockEventsOnDrag) return;
if (!button->active) return;
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId()); wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() ); event.SetInt( rb->GetValue() );
event.SetEventObject( rb ); event.SetEventObject( rb );
@@ -159,7 +161,7 @@ void wxRadioButton::SetValue( bool val )
if (val) if (val)
{ {
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(m_widget), TRUE );
} }
else else
{ {

View File

@@ -106,7 +106,7 @@ void wxToggleButton::SetValue(bool state)
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback), GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
(gpointer *)this); (gpointer *)this);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(m_widget), state); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
gtk_signal_connect(GTK_OBJECT(m_widget), "clicked", gtk_signal_connect(GTK_OBJECT(m_widget), "clicked",
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback), GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),

View File

@@ -1334,6 +1334,14 @@ static gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton
AdjustEventButtonState(event); AdjustEventButtonState(event);
// wxListBox actually get mouse events from the item
if (win->m_isListBox)
{
event.m_x += widget->allocation.x;
event.m_y += widget->allocation.y;
}
// Some control don't have their own X window and thus cannot get // Some control don't have their own X window and thus cannot get
// any events. // any events.
@@ -1466,6 +1474,14 @@ static gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButto
AdjustEventButtonState(event); AdjustEventButtonState(event);
// wxListBox actually get mouse events from the item
if (win->m_isListBox)
{
event.m_x += widget->allocation.x;
event.m_y += widget->allocation.y;
}
// Some control don't have their own X window and thus cannot get // Some control don't have their own X window and thus cannot get
// any events. // any events.
@@ -2366,6 +2382,7 @@ void wxWindowGTK::Init()
m_isStaticBox = FALSE; m_isStaticBox = FALSE;
m_isRadioButton = FALSE; m_isRadioButton = FALSE;
m_isListBox = FALSE;
m_isFrame = FALSE; m_isFrame = FALSE;
m_acceptsFocus = FALSE; m_acceptsFocus = FALSE;