don't divide by 0 in SetValue/Range(); minor code cleanup

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-10-15 13:25:41 +00:00
parent 349ac76e9a
commit a61aefe37f
4 changed files with 146 additions and 80 deletions

View File

@@ -42,25 +42,32 @@ extern const wxChar* wxGaugeNameStr;
class wxGauge: public wxControl class wxGauge: public wxControl
{ {
public: public:
inline wxGauge() { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; } wxGauge() { Init(); }
inline wxGauge( wxWindow *parent, wxWindowID id, int range, wxGauge( wxWindow *parent,
const wxPoint& pos = wxDefaultPosition, wxWindowID id,
const wxSize& size = wxDefaultSize, int range,
long style = wxGA_HORIZONTAL, const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator, const wxSize& size = wxDefaultSize,
const wxString& name = wxGaugeNameStr ) long style = wxGA_HORIZONTAL,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxGaugeNameStr )
{ {
Create(parent, id, range, pos, size, style, validator, name); Init();
Create(parent, id, range, pos, size, style, validator, name);
} }
bool Create( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition, bool Create( wxWindow *parent,
const wxSize& size = wxDefaultSize, wxWindowID id, int range,
long style = wxGA_HORIZONTAL, const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator, const wxSize& size = wxDefaultSize,
const wxString& name = wxGaugeNameStr ); long style = wxGA_HORIZONTAL,
void SetShadowWidth( int WXUNUSED(w) ) {}; const wxValidator& validator = wxDefaultValidator,
void SetBezelFace( int WXUNUSED(w) ) {}; const wxString& name = wxGaugeNameStr );
void SetShadowWidth( int WXUNUSED(w) ) { }
void SetBezelFace( int WXUNUSED(w) ) { }
void SetRange( int r ); void SetRange( int r );
void SetValue( int pos ); void SetValue( int pos );
int GetShadowWidth() const { return 0; }; int GetShadowWidth() const { return 0; };
@@ -68,17 +75,27 @@ public:
int GetRange() const; int GetRange() const;
int GetValue() const; int GetValue() const;
// Are we a Win95/GTK progress bar, or a normal gauge?
inline bool GetProgressBar() const { return m_useProgressBar; }
// implementation // implementation
// ------------- // -------------
void ApplyWidgetStyle(); void ApplyWidgetStyle();
int m_rangeMax;
int m_gaugePos; // the max and current gauge values
bool m_useProgressBar; int m_rangeMax,
m_gaugePos;
// obsolete functions, don't use
#ifdef WXWIN_COMPATIBILITY_2_2
bool GetProgressBar() const { return TRUE; }
#endif // WXWIN_COMPATIBILITY_2_2
protected:
// common part of all ctors
void Init() { m_rangeMax = m_gaugePos = 0; }
// set the gauge value to the value of m_gaugePos
void DoSetGauge();
private: private:
DECLARE_DYNAMIC_CLASS(wxGauge) DECLARE_DYNAMIC_CLASS(wxGauge)
}; };

View File

@@ -42,25 +42,32 @@ extern const wxChar* wxGaugeNameStr;
class wxGauge: public wxControl class wxGauge: public wxControl
{ {
public: public:
inline wxGauge() { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; } wxGauge() { Init(); }
inline wxGauge( wxWindow *parent, wxWindowID id, int range, wxGauge( wxWindow *parent,
const wxPoint& pos = wxDefaultPosition, wxWindowID id,
const wxSize& size = wxDefaultSize, int range,
long style = wxGA_HORIZONTAL, const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator, const wxSize& size = wxDefaultSize,
const wxString& name = wxGaugeNameStr ) long style = wxGA_HORIZONTAL,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxGaugeNameStr )
{ {
Create(parent, id, range, pos, size, style, validator, name); Init();
Create(parent, id, range, pos, size, style, validator, name);
} }
bool Create( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition, bool Create( wxWindow *parent,
const wxSize& size = wxDefaultSize, wxWindowID id, int range,
long style = wxGA_HORIZONTAL, const wxPoint& pos = wxDefaultPosition,
const wxValidator& validator = wxDefaultValidator, const wxSize& size = wxDefaultSize,
const wxString& name = wxGaugeNameStr ); long style = wxGA_HORIZONTAL,
void SetShadowWidth( int WXUNUSED(w) ) {}; const wxValidator& validator = wxDefaultValidator,
void SetBezelFace( int WXUNUSED(w) ) {}; const wxString& name = wxGaugeNameStr );
void SetShadowWidth( int WXUNUSED(w) ) { }
void SetBezelFace( int WXUNUSED(w) ) { }
void SetRange( int r ); void SetRange( int r );
void SetValue( int pos ); void SetValue( int pos );
int GetShadowWidth() const { return 0; }; int GetShadowWidth() const { return 0; };
@@ -68,17 +75,27 @@ public:
int GetRange() const; int GetRange() const;
int GetValue() const; int GetValue() const;
// Are we a Win95/GTK progress bar, or a normal gauge?
inline bool GetProgressBar() const { return m_useProgressBar; }
// implementation // implementation
// ------------- // -------------
void ApplyWidgetStyle(); void ApplyWidgetStyle();
int m_rangeMax;
int m_gaugePos; // the max and current gauge values
bool m_useProgressBar; int m_rangeMax,
m_gaugePos;
// obsolete functions, don't use
#ifdef WXWIN_COMPATIBILITY_2_2
bool GetProgressBar() const { return TRUE; }
#endif // WXWIN_COMPATIBILITY_2_2
protected:
// common part of all ctors
void Init() { m_rangeMax = m_gaugePos = 0; }
// set the gauge value to the value of m_gaugePos
void DoSetGauge();
private: private:
DECLARE_DYNAMIC_CLASS(wxGauge) DECLARE_DYNAMIC_CLASS(wxGauge)
}; };

View File

@@ -15,18 +15,22 @@
#if wxUSE_GAUGE #if wxUSE_GAUGE
#include <gdk/gdk.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxGauge // wxGauge
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxGauge,wxControl) IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl)
bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range, bool wxGauge::Create( wxWindow *parent,
const wxPoint& pos, const wxSize& size, wxWindowID id,
long style, const wxValidator& validator, const wxString& name ) int range,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name )
{ {
m_needParent = TRUE; m_needParent = TRUE;
@@ -38,12 +42,13 @@ bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range,
} }
m_rangeMax = range; m_rangeMax = range;
m_gaugePos = 0;
m_useProgressBar = TRUE;
m_widget = gtk_progress_bar_new(); m_widget = gtk_progress_bar_new();
if( style & wxGA_VERTICAL) if ( style & wxGA_VERTICAL )
gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR(m_widget) , GTK_PROGRESS_BOTTOM_TO_TOP ); {
gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR(m_widget),
GTK_PROGRESS_BOTTOM_TO_TOP );
}
m_parent->DoAddChild( this ); m_parent->DoAddChild( this );
@@ -54,20 +59,31 @@ bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range,
return TRUE; return TRUE;
} }
void wxGauge::SetRange( int r ) void wxGauge::DoSetGauge()
{ {
m_rangeMax = r; wxASSERT_MSG( 0 <= m_gaugePos && m_gaugePos <= m_rangeMax,
if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax; _T("invalid gauge position in DoSetGauge()") );
gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget),
m_rangeMax ? ((float)m_gaugePos)/m_rangeMax : 0.);
}
void wxGauge::SetRange( int range )
{
m_rangeMax = range;
if (m_gaugePos > m_rangeMax)
m_gaugePos = m_rangeMax;
DoSetGauge();
} }
void wxGauge::SetValue( int pos ) void wxGauge::SetValue( int pos )
{ {
m_gaugePos = pos; wxCHECK_RET( pos <= m_rangeMax, _T("invalid value in wxGauge::SetValue()") );
if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax;
gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); m_gaugePos = pos;
DoSetGauge();
} }
int wxGauge::GetRange() const int wxGauge::GetRange() const

View File

@@ -15,18 +15,22 @@
#if wxUSE_GAUGE #if wxUSE_GAUGE
#include <gdk/gdk.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxGauge // wxGauge
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxGauge,wxControl) IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl)
bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range, bool wxGauge::Create( wxWindow *parent,
const wxPoint& pos, const wxSize& size, wxWindowID id,
long style, const wxValidator& validator, const wxString& name ) int range,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name )
{ {
m_needParent = TRUE; m_needParent = TRUE;
@@ -38,12 +42,13 @@ bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range,
} }
m_rangeMax = range; m_rangeMax = range;
m_gaugePos = 0;
m_useProgressBar = TRUE;
m_widget = gtk_progress_bar_new(); m_widget = gtk_progress_bar_new();
if( style & wxGA_VERTICAL) if ( style & wxGA_VERTICAL )
gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR(m_widget) , GTK_PROGRESS_BOTTOM_TO_TOP ); {
gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR(m_widget),
GTK_PROGRESS_BOTTOM_TO_TOP );
}
m_parent->DoAddChild( this ); m_parent->DoAddChild( this );
@@ -54,20 +59,31 @@ bool wxGauge::Create( wxWindow *parent, wxWindowID id, int range,
return TRUE; return TRUE;
} }
void wxGauge::SetRange( int r ) void wxGauge::DoSetGauge()
{ {
m_rangeMax = r; wxASSERT_MSG( 0 <= m_gaugePos && m_gaugePos <= m_rangeMax,
if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax; _T("invalid gauge position in DoSetGauge()") );
gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget),
m_rangeMax ? ((float)m_gaugePos)/m_rangeMax : 0.);
}
void wxGauge::SetRange( int range )
{
m_rangeMax = range;
if (m_gaugePos > m_rangeMax)
m_gaugePos = m_rangeMax;
DoSetGauge();
} }
void wxGauge::SetValue( int pos ) void wxGauge::SetValue( int pos )
{ {
m_gaugePos = pos; wxCHECK_RET( pos <= m_rangeMax, _T("invalid value in wxGauge::SetValue()") );
if (m_gaugePos > m_rangeMax) m_gaugePos = m_rangeMax;
gtk_progress_bar_update( GTK_PROGRESS_BAR(m_widget), ((float)m_gaugePos)/m_rangeMax ); m_gaugePos = pos;
DoSetGauge();
} }
int wxGauge::GetRange() const int wxGauge::GetRange() const