wxSpinCtrl no longer emits event when changed programmatically.

Some GUI thread things and tests,
  Change for borders around cmposite controls.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5173 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2000-01-02 16:25:28 +00:00
parent 169267e61f
commit 07f5b19a15
11 changed files with 77 additions and 23 deletions

View File

@ -6,6 +6,11 @@ and/or 16 bit colour mode? I need this for testing purposes, i.e. this
person could help me by running a small testprogram and sending
me the output.
Added Calendar control.
Added classes for recoding text (e.g. from Windows encoding to ISO encoding
and for converting to and from Unicode).
Updated the 64-bit long class (a class that substitutes a 64-bit int
type on platforms which don't provide a native one).

View File

@ -65,6 +65,8 @@ public:
bool IsOwnGtkWindow( GdkWindow *window );
void ApplyWidgetStyle();
void GtkDisableEvents();
void GtkEnableEvents();
GtkAdjustment *m_adjust;
float m_oldPos;

View File

@ -65,6 +65,8 @@ public:
bool IsOwnGtkWindow( GdkWindow *window );
void ApplyWidgetStyle();
void GtkDisableEvents();
void GtkEnableEvents();
GtkAdjustment *m_adjust;
float m_oldPos;

View File

@ -530,7 +530,7 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
panel = new wxPanel(m_notebook);
(void)new wxStaticBox( panel, -1, "Box around combobox",
wxPoint(5, 5), wxSize(150, 100));
m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(20,20), wxSize(120,-1), 5, choices, wxCB_READONLY );
m_combo = new wxComboBox( panel, ID_COMBO, "This", wxPoint(20,25), wxSize(120,-1), 5, choices, wxCB_READONLY );
(void)new wxButton( panel, ID_COMBO_SEL_NUM, "Select #2", wxPoint(180,30), wxSize(140,30) );
(void)new wxButton( panel, ID_COMBO_SEL_STR, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
(void)new wxButton( panel, ID_COMBO_CLEAR, "Clear", wxPoint(180,80), wxSize(140,30) );

View File

@ -235,11 +235,21 @@ void *MyWorkerThread::Entry()
if ( TestDestroy() )
break;
wxString text;
text.Printf("[%u] Thread 0x%x here!!", m_count, GetId());
// create any type of command event here
wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, WORKER_EVENT );
event.SetInt( WORKER_EVENT );
event.SetString( text );
// send in a thread-safe way
wxPostEvent( m_frame, event );
// same as:
// m_frame->AddPendingEvent( event );
// wxSleep() can't be called from non-GUI thread!
// wxSleep() can't be called from non-main thread!
wxThread::Sleep(1000);
}
@ -495,7 +505,8 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
{
wxMessageDialog dialog(this, "wxWindows multithreaded application sample\n"
"(c) 1998 Julian Smart, Guilhem Lavaux\n"
"(c) 1999 Vadim Zeitlin",
"(c) 1999 Vadim Zeitlin\n"
"(c) 2000 Robert Roebling",
"About wxThread sample",
wxOK | wxICON_INFORMATION);
@ -519,8 +530,10 @@ void MyFrame::OnStartWorker(wxCommandEvent& WXUNUSED(event))
thread->Run();
}
void MyFrame::OnWorkerEvent(wxCommandEvent& WXUNUSED(event))
void MyFrame::OnWorkerEvent(wxCommandEvent& event)
{
WriteText( "Got message from worker thread\n" );
WriteText( "Got message from worker thread: " );
WriteText( event.GetString() );
WriteText( "\n" );
}

View File

@ -178,7 +178,7 @@ void wxapp_install_thread_wakeup()
{
if (wxTheApp->m_wakeUpTimerTag) return;
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 500, wxapp_wakeup_timerout_callback, (gpointer) NULL );
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 50, wxapp_wakeup_timerout_callback, (gpointer) NULL );
}
void wxapp_uninstall_thread_wakeup()

View File

@ -101,11 +101,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget),
(int)(m_windowStyle & wxSP_WRAP) );
gtk_signal_connect( GTK_OBJECT (m_adjust),
"value_changed",
(GtkSignalFunc) gtk_spinctrl_callback,
(gpointer) this );
GtkEnableEvents();
m_parent->DoAddChild( this );
PostCreation();
@ -119,6 +115,22 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
return TRUE;
}
void wxSpinCtrl::GtkDisableEvents()
{
gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust),
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
}
void wxSpinCtrl::GtkEnableEvents()
{
gtk_signal_connect( GTK_OBJECT (m_adjust),
"value_changed",
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
}
int wxSpinCtrl::GetMin() const
{
wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") );
@ -153,7 +165,9 @@ void wxSpinCtrl::SetValue( const wxString& value )
else
{
// invalid number - set text as is (wxMSW compatible)
GtkDisableEvents();
gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() );
GtkEnableEvents();
}
}
@ -167,7 +181,9 @@ void wxSpinCtrl::SetValue( int value )
m_adjust->value = fpos;
GtkDisableEvents();
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
GtkEnableEvents();
}
void wxSpinCtrl::SetRange(int minVal, int maxVal)

View File

@ -327,7 +327,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
GTK_STATE_NORMAL,
GTK_SHADOW_OUT,
dx, dy,
win->m_width-dw, win->m_height-dh );
widget->allocation.width-dw, widget->allocation.height-dh );
return;
}
@ -338,7 +338,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
GTK_STATE_NORMAL,
GTK_SHADOW_IN,
dx, dy,
win->m_width-dw, win->m_height-dh );
widget->allocation.width-dw, widget->allocation.height-dh );
return;
}
@ -349,7 +349,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
gdk_gc_set_foreground( gc, &widget->style->black );
gdk_draw_rectangle( widget->window, gc, FALSE,
dx, dy,
win->m_width-dw-1, win->m_height-dh-1 );
widget->allocation.width-dw-1, widget->allocation.height-dh-1 );
gdk_gc_unref( gc );
return;
}

View File

@ -178,7 +178,7 @@ void wxapp_install_thread_wakeup()
{
if (wxTheApp->m_wakeUpTimerTag) return;
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 500, wxapp_wakeup_timerout_callback, (gpointer) NULL );
wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 50, wxapp_wakeup_timerout_callback, (gpointer) NULL );
}
void wxapp_uninstall_thread_wakeup()

View File

@ -101,11 +101,7 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget),
(int)(m_windowStyle & wxSP_WRAP) );
gtk_signal_connect( GTK_OBJECT (m_adjust),
"value_changed",
(GtkSignalFunc) gtk_spinctrl_callback,
(gpointer) this );
GtkEnableEvents();
m_parent->DoAddChild( this );
PostCreation();
@ -119,6 +115,22 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id,
return TRUE;
}
void wxSpinCtrl::GtkDisableEvents()
{
gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust),
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
}
void wxSpinCtrl::GtkEnableEvents()
{
gtk_signal_connect( GTK_OBJECT (m_adjust),
"value_changed",
GTK_SIGNAL_FUNC(gtk_spinctrl_callback),
(gpointer) this );
}
int wxSpinCtrl::GetMin() const
{
wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") );
@ -153,7 +165,9 @@ void wxSpinCtrl::SetValue( const wxString& value )
else
{
// invalid number - set text as is (wxMSW compatible)
GtkDisableEvents();
gtk_entry_set_text( GTK_ENTRY(m_widget), value.mbc_str() );
GtkEnableEvents();
}
}
@ -167,7 +181,9 @@ void wxSpinCtrl::SetValue( int value )
m_adjust->value = fpos;
GtkDisableEvents();
gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" );
GtkEnableEvents();
}
void wxSpinCtrl::SetRange(int minVal, int maxVal)

View File

@ -327,7 +327,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
GTK_STATE_NORMAL,
GTK_SHADOW_OUT,
dx, dy,
win->m_width-dw, win->m_height-dh );
widget->allocation.width-dw, widget->allocation.height-dh );
return;
}
@ -338,7 +338,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
GTK_STATE_NORMAL,
GTK_SHADOW_IN,
dx, dy,
win->m_width-dw, win->m_height-dh );
widget->allocation.width-dw, widget->allocation.height-dh );
return;
}
@ -349,7 +349,7 @@ static void draw_frame( GtkWidget *widget, wxWindow *win )
gdk_gc_set_foreground( gc, &widget->style->black );
gdk_draw_rectangle( widget->window, gc, FALSE,
dx, dy,
win->m_width-dw-1, win->m_height-dh-1 );
widget->allocation.width-dw-1, widget->allocation.height-dh-1 );
gdk_gc_unref( gc );
return;
}