X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83624f79609f0d5e240c1f7d77d044bfff9702fc..88932ec82d048d006cdc81bd309f5e59aee799ac:/src/gtk/gauge.cpp?ds=sidebyside diff --git a/src/gtk/gauge.cpp b/src/gtk/gauge.cpp index 051b70390b..108a96e67b 100644 --- a/src/gtk/gauge.cpp +++ b/src/gtk/gauge.cpp @@ -1,82 +1,135 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: gauge.cpp +// Name: src/gtk/gauge.cpp // Purpose: // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "gauge.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_GAUGE #include "wx/gauge.h" -#include "gdk/gdk.h" -#include "gtk/gtk.h" + +#include <gtk/gtk.h> //----------------------------------------------------------------------------- // wxGauge //----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxGauge,wxControl) +bool wxGauge::Create( wxWindow *parent, + wxWindowID id, + int range, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name ) +{ + if (!PreCreation( parent, pos, size ) || + !CreateBase( parent, id, pos, size, style, validator, name )) + { + wxFAIL_MSG( wxT("wxGauge creation failed") ); + return false; + } + + m_rangeMax = range; + + m_widget = gtk_progress_bar_new(); + g_object_ref(m_widget); + if ( style & wxGA_VERTICAL ) + { +#ifdef __WXGTK3__ + gtk_orientable_set_orientation(GTK_ORIENTABLE(m_widget), GTK_ORIENTATION_VERTICAL); + gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(m_widget), true); +#else + gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR(m_widget), + GTK_PROGRESS_BOTTOM_TO_TOP ); +#endif + } + + // when using the gauge in indeterminate mode, we need this: + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR (m_widget), 0.05); + + m_parent->DoAddChild( this ); + + PostCreation(size); + SetInitialSize(size); + + return true; +} + +void wxGauge::DoSetGauge() +{ + wxASSERT_MSG( 0 <= m_gaugePos && m_gaugePos <= m_rangeMax, + wxT("invalid gauge position in DoSetGauge()") ); + + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (m_widget), + m_rangeMax ? ((double)m_gaugePos)/m_rangeMax : 0.0); +} -bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range, - const wxPoint& pos, const wxSize& size, - long style, const wxValidator& validator, const wxString& name ) +wxSize wxGauge::DoGetBestSize() const { - m_needParent = TRUE; - - PreCreation( parent, id, pos, size, style, name ); - - SetValidator( validator ); - - m_rangeMax = range; - m_gaugePos = 0; - m_useProgressBar = TRUE; - - m_widget = gtk_progress_bar_new(); - - m_parent->AddChild( this ); - - (m_parent->m_insertCallback)( m_parent, this ); - - PostCreation(); - - Show( TRUE ); - - return TRUE; + wxSize best; + if (HasFlag(wxGA_VERTICAL)) + best = wxSize(28, 100); + else + best = wxSize(100, 28); + CacheBestSize(best); + return best; } -void wxGauge::SetRange( int r ) +void wxGauge::SetRange( int range ) { - m_rangeMax = r; - if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax; - - gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); + m_rangeMax = range; + if (m_gaugePos > m_rangeMax) + m_gaugePos = m_rangeMax; + + DoSetGauge(); } void wxGauge::SetValue( int pos ) { - m_gaugePos = pos; - if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax; - - gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); + wxCHECK_RET( pos <= m_rangeMax, wxT("invalid value in wxGauge::SetValue()") ); + + m_gaugePos = pos; + + DoSetGauge(); } -int wxGauge::GetRange(void) const +int wxGauge::GetRange() const { - return m_rangeMax; + return m_rangeMax; } -int wxGauge::GetValue(void) const +int wxGauge::GetValue() const { - return m_gaugePos; + return m_gaugePos; +} + +void wxGauge::Pulse() +{ + gtk_progress_bar_pulse(GTK_PROGRESS_BAR (m_widget)); +} + +wxVisualAttributes wxGauge::GetDefaultAttributes() const +{ + // Visible gauge colours use a different colour state + return GetDefaultAttributesFromGTKWidget(m_widget, + UseGTKStyleBase(), + GTK_STATE_ACTIVE); + } -void wxGauge::ApplyWidgetStyle() +// static +wxVisualAttributes +wxGauge::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - SetWidgetStyle(); - gtk_widget_set_style( m_widget, m_widgetStyle ); + return GetDefaultAttributesFromGTKWidget(gtk_progress_bar_new(), + false, GTK_STATE_ACTIVE); } +#endif // wxUSE_GAUGE