X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdfb981a826d29e292738a27700543fa10d2bfb..0a4090e635a3765e62181ecf039914c2c27df63c:/src/msw/gauge95.cpp diff --git a/src/msw/gauge95.cpp b/src/msw/gauge95.cpp index 6e3a01a249..6f8d8724e4 100644 --- a/src/msw/gauge95.cpp +++ b/src/msw/gauge95.cpp @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "gauge95.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,19 +24,18 @@ #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/defs.h" -#endif - #if wxUSE_GAUGE #include "wx/gauge.h" -#include "wx/msw/private.h" -#if !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) - #include +#ifndef WX_PRECOMP + #include "wx/app.h" + + #include "wx/msw/wrapcctl.h" // include "properly" #endif +#include "wx/msw/private.h" + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -62,6 +57,14 @@ #define PBM_SETBKCOLOR 0x2001 #endif +#ifndef PBS_MARQUEE + #define PBS_MARQUEE 0x08 +#endif + +#ifndef PBM_SETMARQUEE + #define PBM_SETMARQUEE (WM_USER+10) +#endif + // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -78,7 +81,7 @@ wxBEGIN_FLAGS( wxGaugeStyle ) wxFLAGS_MEMBER(wxBORDER_RAISED) wxFLAGS_MEMBER(wxBORDER_STATIC) wxFLAGS_MEMBER(wxBORDER_NONE) - + // old style border flags wxFLAGS_MEMBER(wxSIMPLE_BORDER) wxFLAGS_MEMBER(wxSUNKEN_BORDER) @@ -99,7 +102,9 @@ wxBEGIN_FLAGS( wxGaugeStyle ) wxFLAGS_MEMBER(wxGA_HORIZONTAL) wxFLAGS_MEMBER(wxGA_VERTICAL) +#if WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxGA_PROGRESSBAR) +#endif // WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxGA_SMOOTH) wxEND_FLAGS( wxGaugeStyle ) @@ -117,7 +122,7 @@ wxEND_PROPERTIES_TABLE() wxBEGIN_HANDLERS_TABLE(wxGauge95) wxEND_HANDLERS_TABLE() -wxCONSTRUCTOR_6( wxGauge95 , wxWindow* , Parent , wxWindowID , Id , int , Range , wxPoint , Position , wxSize , Size , long , WindowStyle ) +wxCONSTRUCTOR_6( wxGauge95 , wxWindow* , Parent , wxWindowID , Id , int , Range , wxPoint , Position , wxSize , Size , long , WindowStyle ) #else IMPLEMENT_DYNAMIC_CLASS(wxGauge95, wxControl) #endif @@ -145,11 +150,11 @@ bool wxGauge95::Create(wxWindow *parent, if ( !MSWCreateControl(PROGRESS_CLASS, wxEmptyString, pos, size) ) return false; - SetBackgroundColour(parent->GetBackgroundColour()); - SetForegroundColour(parent->GetForegroundColour()); - SetRange(range); + // in case we need to emulate indeterminate mode... + m_nDirection = wxRIGHT; + return true; } @@ -174,10 +179,10 @@ wxSize wxGauge95::DoGetBestSize() const { // VZ: no idea where does 28 come from, it was there before my changes and // as nobody ever complained I guess we can leave it... - if (HasFlag(wxGA_HORIZONTAL)) - return wxSize(100, 28); + if (HasFlag(wxGA_VERTICAL)) + return wxSize(28, 100); else - return wxSize(28,100); + return wxSize(100, 28); } // ---------------------------------------------------------------------------- @@ -186,6 +191,9 @@ wxSize wxGauge95::DoGetBestSize() const void wxGauge95::SetRange(int r) { + // switch to determinate mode if required + SetDeterminateMode(); + m_rangeMax = r; #ifdef PBM_SETRANGE32 @@ -198,6 +206,9 @@ void wxGauge95::SetRange(int r) void wxGauge95::SetValue(int pos) { + // switch to determinate mode if required + SetDeterminateMode(); + m_gaugePos = pos; ::SendMessage(GetHwnd(), PBM_SETPOS, pos, 0); @@ -223,5 +234,43 @@ bool wxGauge95::SetBackgroundColour(const wxColour& col) return true; } -#endif // wxUSE_GAUGE +void wxGauge95::SetIndeterminateMode() +{ + // add the PBS_MARQUEE style to the progress bar + LONG style = ::GetWindowLong(GetHwnd(), GWL_STYLE); + if ((style & PBS_MARQUEE) == 0) + ::SetWindowLong(GetHwnd(), GWL_STYLE, style|PBS_MARQUEE); + + // now the control can only run in indeterminate mode +} +void wxGauge95::SetDeterminateMode() +{ + // remove the PBS_MARQUEE style to the progress bar + LONG style = ::GetWindowLong(GetHwnd(), GWL_STYLE); + if ((style & PBS_MARQUEE) != 0) + ::SetWindowLong(GetHwnd(), GWL_STYLE, style & ~PBS_MARQUEE); + + // now the control can only run in determinate mode +} + +void wxGauge95::Pulse() +{ + if (wxApp::GetComCtl32Version() >= 600) + { + // switch to indeterminate mode if required + SetIndeterminateMode(); + + // NOTE: when in indeterminate mode, the PBM_SETPOS message will just make + // the bar's blocks move a bit and the WPARAM value is just ignored + // so that we can safely use zero + SendMessage(GetHwnd(), (UINT) PBM_SETPOS, (WPARAM)0, (LPARAM)0); + } + else + { + // emulate indeterminate mode + wxGaugeBase::Pulse(); + } +} + +#endif // wxUSE_GAUGE