X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4a11cca24d9781e45bfffc402e1b26d1e69f169f..233387bdcbb1c4f31c54b0fe6b3f03e8d261cab1:/src/gtk/spinctrl.cpp diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index 44d10c8a73..fc1227c39a 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -8,10 +8,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "spinctrl.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -22,9 +18,7 @@ #include "wx/utils.h" #include "wx/textctrl.h" // for wxEVT_COMMAND_TEXT_UPDATED - -#include - +#include "wx/math.h" #include "wx/gtk/private.h" //----------------------------------------------------------------------------- @@ -46,6 +40,7 @@ extern bool g_blockEventsOnDrag; // "value_changed" //----------------------------------------------------------------------------- +extern "C" { static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -65,11 +60,13 @@ static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win event.SetInt( (int)ceil(win->m_adjust->value) ); win->GetEventHandler()->ProcessEvent( event ); } +} //----------------------------------------------------------------------------- // "changed" //----------------------------------------------------------------------------- +extern "C" { static void gtk_spinctrl_text_changed_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win ) { @@ -80,11 +77,12 @@ gtk_spinctrl_text_changed_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->GetId() ); event.SetEventObject( win ); - + // see above event.SetInt( (int)ceil(win->m_adjust->value) ); win->GetEventHandler()->ProcessEvent( event ); } +} //----------------------------------------------------------------------------- // wxSpinCtrl @@ -118,57 +116,39 @@ bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, m_adjust = (GtkAdjustment*) gtk_adjustment_new( initial, min, max, 1.0, 5.0, 0.0); m_widget = gtk_spin_button_new( m_adjust, 1, 0 ); - + gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget), (int)(m_windowStyle & wxSP_WRAP) ); GtkEnableEvents(); - - m_parent->DoAddChild( this ); - PostCreation(); - InheritAttributes(); + m_parent->DoAddChild( this ); - wxSize size_best( DoGetBestSize() ); - wxSize new_size( size ); - if (new_size.x == -1) - new_size.x = size_best.x; - if (new_size.y == -1) - new_size.y = size_best.y; - if (new_size.y > size_best.y) - new_size.y = size_best.y; - if ((new_size.x != size.x) || (new_size.y != size.y)) - SetSize( new_size.x, new_size.y ); + PostCreation(size); SetValue( value ); - Show( TRUE ); - return TRUE; } void wxSpinCtrl::GtkDisableEvents() { - gtk_signal_disconnect_by_func( GTK_OBJECT(m_adjust), - GTK_SIGNAL_FUNC(gtk_spinctrl_callback), - (gpointer) this ); - - gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget), - GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback), - (gpointer) this ); + g_signal_handlers_disconnect_by_func (m_adjust, + (gpointer) gtk_spinctrl_callback, + this); + g_signal_handlers_disconnect_by_func (m_widget, + (gpointer) gtk_spinctrl_text_changed_callback, + this); } void wxSpinCtrl::GtkEnableEvents() { - gtk_signal_connect( GTK_OBJECT (m_adjust), - "value_changed", - GTK_SIGNAL_FUNC(gtk_spinctrl_callback), - (gpointer) this ); - - gtk_signal_connect( GTK_OBJECT(m_widget), - "changed", - GTK_SIGNAL_FUNC(gtk_spinctrl_text_changed_callback), - (gpointer)this); + g_signal_connect (m_adjust, "value_changed", + G_CALLBACK (gtk_spinctrl_callback), + this); + g_signal_connect (m_widget, "changed", + G_CALLBACK (gtk_spinctrl_text_changed_callback), + this); } int wxSpinCtrl::GetMin() const @@ -224,13 +204,13 @@ void wxSpinCtrl::SetValue( int value ) m_adjust->value = fpos; GtkDisableEvents(); - gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); + g_signal_emit_by_name (m_adjust, "value_changed"); GtkEnableEvents(); } void wxSpinCtrl::SetSelection(long from, long to) { - // translate from wxWindows conventions to GTK+ ones: (-1, -1) means the + // translate from wxWidgets conventions to GTK+ ones: (-1, -1) means the // entire range if ( from == -1 && to == -1 ) { @@ -257,7 +237,7 @@ void wxSpinCtrl::SetRange(int minVal, int maxVal) m_adjust->lower = fmin; m_adjust->upper = fmax; - gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + g_signal_emit_by_name (m_adjust, "changed"); // these two calls are required due to some bug in GTK Refresh(); @@ -290,7 +270,7 @@ void wxSpinCtrl::OnChar( wxKeyEvent &event ) } } - if ((event.GetKeyCode() == WXK_RETURN)) + if ((event.GetKeyCode() == WXK_RETURN) && (m_windowStyle & wxPROCESS_ENTER)) { wxCommandEvent evt( wxEVT_COMMAND_TEXT_ENTER, m_windowId ); evt.SetEventObject(this); @@ -306,22 +286,27 @@ void wxSpinCtrl::OnChar( wxKeyEvent &event ) bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window ) { if (GTK_SPIN_BUTTON(m_widget)->entry.text_area == window) return TRUE; - + if (GTK_SPIN_BUTTON(m_widget)->panel == window) return TRUE; return FALSE; } -void wxSpinCtrl::ApplyWidgetStyle() +wxSize wxSpinCtrl::DoGetBestSize() const { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); + wxSize ret( wxControl::DoGetBestSize() ); + wxSize best(95, ret.y); + CacheBestSize(best); + return best; } -wxSize wxSpinCtrl::DoGetBestSize() const +// static +wxVisualAttributes +wxSpinCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - wxSize ret( wxControl::DoGetBestSize() ); - return wxSize(95, ret.y); + // TODO: overload to accept functions like gtk_spin_button_new? + // Until then use a similar type + return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true); } #endif