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;