// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef NL_PROGRESS_BAR_H #define NL_PROGRESS_BAR_H ///////////// // Include // ///////////// // misc #include "nel/misc/types_nl.h" #include "nel/misc/time_nl.h" #include "nel/misc/rgba.h" // Client #include "control.h" #include "pen.h" /** class for progress bar controls * \author David Fleury * \author Nevrax France * \date 2001 */ class CProgressBar : public CControl, public CPen { public: /// Constructor CProgressBar(uint id, float x, float y, float x_pixel, float y_pixel, float w, float h, float w_pixel, float h_pixel, uint range); /** * set the range for the control * \param uint32 range the new range * \return uint32 the old range value */ uint32 setRange( uint32 range); /** * get the range value of the progress control * \return uint32 the range value */ inline uint32 getRange() const { return _Range; } /** * set the step value * \param uint32 step the new step value * \return uint32 the old step value */ uint32 setStep( uint32 step); /** * set the step value * \param uint32 step the new step value * \return uint32 the old step value */ inline uint32 getStep() const { return _StepInc; } /** * set the position of the progress bar (from 0 to range) * \param uint32 pos the new position * \return uint32 the previous position of the progress bar control */ uint32 setPos( uint32 pos); /** * get the position of the progress bar (from 0 to range) * \return uint32 the position of the progress bar control */ inline uint32 getPos() const { return _CurrentPos; } /** * Advances the current position for the progress bar control by the specified value * \param uint32 offset the value added to current position * \return uint32 the old position of the progress bar */ inline uint32 offsetPos( uint32 offset) { uint32 old = _CurrentPos; _CurrentPos += offset; if (_CurrentPos > _Range) _CurrentPos = _Range; return old; } /** * Advances the current position for the progress bar control by the step increment * \return uint32 the previous position of the progress bar control */ inline uint32 stepIt() { uint32 old = _CurrentPos; _CurrentPos += _StepInc; if (_CurrentPos > _Range) _CurrentPos = _Range; return old; } /** * set the texture of the background * \param uint texture the new texture for the background */ void setBackgroundTexture(uint texture) { _BackgroundTexture = texture; } /** * set the color of the background * \param CRGBA& color the new color for the background */ void setBackgroundColor(NLMISC::CRGBA &color) { _BackgroundColor = color; } /** * set the texture of the progress bar * \param uint texture the new texture for the progress bar */ void setProgressBarTexture(uint texture) { _ProgressBarTexture = texture; } /** * set the color of the progress bar * \param CRGBA& color the new color for the progress bar */ void setProgressBarColor(NLMISC::CRGBA &color) { _ProgressBarColor = color; } /// display the control virtual void display(); /** * set the smooth mode of the control * \param bool smooth the smooth mode (true = smooth mode on) */ void smooth(bool smooth) { _Smooth = smooth; } /** * get the smooth mode of the control * \return bool the smooth mode (true = smooth mode on) */ bool smooth() const { return _Smooth; } /** * set the smooth fill rate in milliseconds * \param uint32 the smooth fill rate in milliseconds */ void smoothFillRate( uint32 rate) { _SmoothFillRate = rate; } /** * get the smooth fill rate in milliseconds * \return the smooth fill rate in milliseconds */ uint32 smoothFillRate() const { return _SmoothFillRate; } /** * set the text displayed in the control * \param std::string &text the new text */ inline void setText( const std::string &text) { _Text = text; } private: /// the init method void init(uint32 range); protected: /// the current 'position' uint32 _CurrentPos; /// the range of the bar (always start at 0) uint32 _Range; /// the step increment uint32 _StepInc; /// temporary position, used when smooth filling the control, only for internal use uint32 _TempPos; // textures and colors /// background texture uint _BackgroundTexture; /// background color NLMISC::CRGBA _BackgroundColor; /// progress bar texture uint _ProgressBarTexture; /// progress bar color NLMISC::CRGBA _ProgressBarColor; /// text to display in the control std::string _Text; /// the smooth mode (smooth transition beetween two positions true = ON) (default = false) bool _Smooth; /// if in smooth mode, set the interval in ms (milliseconds) beetween the addition/soustraction of two units to the bar (defualt = 200ms = 5units/second) uint32 _SmoothFillRate; /// last update time for smooth fill mutable NLMISC::TTime _LastUpdateSmooth; }; #endif // NL_PROGRESS_BAR_H /* End of progress_bar.h */