52 Base::initialiseOverride();
56 if (
nullptr == mClient)
61 if (
nullptr == mClient)
68 mTrackWidth = utility::parseValue<int>(
getUserString(
"TrackWidth"));
71 mTrackMin = utility::parseValue<int>(
getUserString(
"TrackMin"));
73 mTrackMin = mTrackWidth;
75 mTrackStep = utility::parseValue<int>(
getUserString(
"TrackStep"));
77 mFillTrack = utility::parseValue<bool>(
getUserString(
"TrackFill"));
80 mTrackStep = mTrackWidth;
90 Base::shutdownOverride();
95 if (mAutoTrack)
return;
97 if (mEndPosition > mRange) mEndPosition = mRange;
98 if (mStartPosition > mRange) mStartPosition = mRange;
104 if (mAutoTrack)
return;
106 if (mEndPosition > mRange) mEndPosition = mRange;
112 if (mAutoTrack == _auto)
return;
119 mEndPosition = mStartPosition = 0;
120 mAutoPosition = 0.0f;
125 mRange = mEndPosition = mStartPosition = 0;
130 void ProgressBar::frameEntered(
float _time)
132 if (!mAutoTrack)
return;
134 size_t pos = (size_t)mAutoPosition;
138 if (pos > mRange) mEndPosition = mRange;
139 else mEndPosition = size_t(mAutoPosition);
149 Base::setPosition(_point);
154 Base::setSize(_size);
161 Base::setCoord(_coord);
166 void ProgressBar::updateTrack()
169 if ((0 == mRange) || (0 == mEndPosition))
171 for (VectorWidgetPtr::iterator iter = mVectorTrack.begin(); iter != mVectorTrack.end(); ++iter)
173 (*iter)->setVisible(
false);
181 if (mVectorTrack.empty())
184 mVectorTrack.push_back(widget);
189 VectorWidgetPtr::iterator iter = mVectorTrack.begin();
190 (*iter)->setVisible(
true);
195 for (; iter != mVectorTrack.end(); ++iter)
197 (*iter)->setVisible(
false);
201 Widget* wid = mVectorTrack.front();
204 if ((0 == mStartPosition) && (mRange == mEndPosition))
206 setTrackPosition(wid, 0, 0, getClientWidth(), getClientHeight());
211 int pos = (int)mStartPosition * (getClientWidth() - mTrackMin) / (
int)mRange;
212 setTrackPosition(wid, pos, 0, ((
int)mEndPosition * (getClientWidth() - mTrackMin) / (
int)mRange) - pos + mTrackMin, getClientHeight());
219 int width = getClientWidth() - mTrackWidth + mTrackStep;
220 int count = width / mTrackStep;
221 int ost = (width % mTrackStep);
224 width += mTrackStep - ost;
228 while ((
int)mVectorTrack.size() < count)
231 widget->setVisible(
false);
232 mVectorTrack.push_back(widget);
236 if ((0 == mStartPosition) && (mRange == mEndPosition))
239 for (VectorWidgetPtr::iterator iter = mVectorTrack.begin(); iter != mVectorTrack.end(); ++iter)
242 (*iter)->setVisible(
true);
243 setTrackPosition(*iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
251 int hide_pix = (width * (int)mStartPosition / (
int)mRange);
252 int hide_count = hide_pix / mTrackStep;
254 int show_pix = (width * (
int)mEndPosition / (
int)mRange);
255 int show_count = show_pix / mTrackStep;
258 for (
VectorWidgetPtr::iterator iter = mVectorTrack.begin(); iter != mVectorTrack.end(); ++iter)
262 (*iter)->setVisible(
false);
264 else if (0 == show_count)
266 (*iter)->setAlpha((
float)(show_pix % mTrackStep) / (
float)mTrackStep);
267 (*iter)->setVisible(
true);
268 setTrackPosition(*iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
274 (*iter)->setVisible(
false);
276 else if (0 == hide_count)
278 (*iter)->setAlpha(1.0f - ((
float)(hide_pix % mTrackStep) / (
float)mTrackStep));
279 (*iter)->setVisible(
true);
280 setTrackPosition(*iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
285 (*iter)->setVisible(
true);
286 setTrackPosition(*iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
296 void ProgressBar::setTrackPosition(Widget* _widget,
int _left,
int _top,
int _width,
int _height)
304 int ProgressBar::getClientWidth()
309 int ProgressBar::getClientHeight()
316 mFlowDirection = _value;
324 else if (_key ==
"RangePosition")
326 else if (_key ==
"AutoTrack")
328 else if (_key ==
"FlowDirection")
332 Base::setPropertyOverride(_key, _value);
355 return mFlowDirection;
size_t getProgressRange() const
size_t getProgressPosition() const
virtual void initialiseOverride()
virtual void setPosition(const IntPoint &_value)
EventHandle_FrameEventDelegate eventFrameStart
types::TSize< int > IntSize
delegates::IDelegate0 * newDelegate(void(*_func)())
void setProgressRange(size_t _value)
static Gui & getInstance()
const size_t PROGRESS_AUTO_RANGE
virtual void setPropertyOverride(const std::string &_key, const std::string &_value)
types::TCoord< int > IntCoord
FlowDirection getFlowDirection() const
void setProgressAutoTrack(bool _value)
std::vector< Widget * > VectorWidgetPtr
virtual void shutdownOverride()
void setProgressPosition(size_t _value)
void setFlowDirection(FlowDirection _value)
bool isUserString(const std::string &_key) const
bool isHorizontal() const
const float PROGRESS_AUTO_COEF
virtual void setSize(const IntSize &_value)
bool getProgressAutoTrack() const
virtual void setCoord(const IntCoord &_value)
const std::string & getUserString(const std::string &_key) const
const size_t PROGRESS_AUTO_WIDTH
types::TPoint< int > IntPoint