28 if (
nullptr == mTrackPlace)
33 if (
nullptr == mTrackPlace)
48 mTrackMin = mTrackWidth;
57 mTrackStep = mTrackWidth;
65 mTrackPlace =
nullptr;
75 if (mEndPosition > mRange)
76 mEndPosition = mRange;
77 if (mStartPosition > mRange)
78 mStartPosition = mRange;
87 if (mEndPosition > mRange)
88 mEndPosition = mRange;
94 if (mAutoTrack == _auto)
102 mEndPosition = mStartPosition = 0;
103 mAutoPosition = 0.0f;
108 mRange = mEndPosition = mStartPosition = 0;
113 void ProgressBar::frameEntered(
float _time)
118 size_t pos = (size_t)mAutoPosition;
121 mAutoPosition = 0.0f;
124 mEndPosition = mRange;
126 mEndPosition = size_t(mAutoPosition);
155 void ProgressBar::updateTrack()
158 if ((0 == mRange) || (0 == mEndPosition))
160 for (
auto& iter : mVectorTrack)
162 iter->setVisible(
false);
170 if (mVectorTrack.empty())
174 mVectorTrack.push_back(widget);
179 VectorWidgetPtr::iterator iter = mVectorTrack.begin();
180 (*iter)->setVisible(
true);
185 for (; iter != mVectorTrack.end(); ++iter)
187 (*iter)->setVisible(
false);
191 Widget* wid = mVectorTrack.front();
194 if ((0 == mStartPosition) && (mRange == mEndPosition))
196 setTrackPosition(wid, 0, 0, getClientWidth(), getClientHeight());
201 int pos = (int)mStartPosition * (getClientWidth() - mTrackMin) / (int)mRange;
206 ((
int)mEndPosition * (getClientWidth() - mTrackMin) / (
int)mRange) - pos + mTrackMin,
214 int width = getClientWidth() - mTrackWidth + mTrackStep;
215 int count = width / mTrackStep;
216 int ost = (width % mTrackStep);
219 width += mTrackStep - ost;
223 while ((
int)mVectorTrack.size() < count)
225 Widget* widget = mTrackPlace->createWidget<Widget>(
229 widget->setVisible(
false);
230 mVectorTrack.push_back(widget);
234 if ((0 == mStartPosition) && (mRange == mEndPosition))
237 for (
auto& iter : mVectorTrack)
240 iter->setVisible(
true);
241 setTrackPosition(iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
249 int hide_pix = (width * (int)mStartPosition / (int)mRange);
250 int hide_count = hide_pix / mTrackStep;
252 int show_pix = (width * (int)mEndPosition / (int)mRange);
253 int show_count = show_pix / mTrackStep;
256 for (
auto& iter : mVectorTrack)
260 iter->setVisible(
false);
262 else if (0 == show_count)
264 iter->setAlpha((
float)(show_pix % mTrackStep) / (
float)mTrackStep);
265 iter->setVisible(
true);
266 setTrackPosition(iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
272 iter->setVisible(
false);
274 else if (0 == hide_count)
276 iter->setAlpha(1.0f - ((
float)(hide_pix % mTrackStep) / (
float)mTrackStep));
277 iter->setVisible(
true);
278 setTrackPosition(iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
283 iter->setVisible(
true);
284 setTrackPosition(iter, pos * mTrackStep, 0, mTrackWidth, getClientHeight());
294 void ProgressBar::setTrackPosition(
Widget* _widget,
int _left,
int _top,
int _width,
int _height)
297 _widget->setCoord(_left, _top, _width, _height);
299 _widget->setCoord(mTrackPlace->getWidth() - _left - _width, _top, _width, _height);
301 _widget->setCoord(_top, _left, _height, _width);
303 _widget->setCoord(_top, mTrackPlace->getHeight() - _left - _width, _height, _width);
306 int ProgressBar::getClientWidth()
const
308 return mFlowDirection.isHorizontal() ? mTrackPlace->getWidth() : mTrackPlace->getHeight();
311 int ProgressBar::getClientHeight()
const
313 return mFlowDirection.isHorizontal() ? mTrackPlace->getHeight() : mTrackPlace->getWidth();
318 mFlowDirection = _value;
329 else if (_key ==
"RangePosition")
333 else if (_key ==
"AutoTrack")
337 else if (_key ==
"FlowDirection")
366 return mFlowDirection;
static Gui & getInstance()
EventHandle_FrameEventDelegate eventFrameStart
void shutdownOverride() override
void setSize(const IntSize &_size) override
size_t getProgressRange() const
FlowDirection getFlowDirection() const
void setFlowDirection(FlowDirection _value)
void setCoord(const IntCoord &_coord) override
void setProgressRange(size_t _range)
void initialiseOverride() override
bool getProgressAutoTrack() const
void setPropertyOverride(std::string_view _key, std::string_view _value) override
void setPosition(const IntPoint &_point) override
void setProgressPosition(size_t _pos)
void setProgressAutoTrack(bool _auto)
size_t getProgressPosition() const
bool isUserString(std::string_view _key) const
std::string_view getUserString(std::string_view _key) const
T parseValue(std::string_view _value)
constexpr float ALPHA_MAX
types::TPoint< int > IntPoint
const size_t PROGRESS_AUTO_WIDTH
const float PROGRESS_AUTO_COEF
types::TCoord< int > IntCoord
types::TSize< int > IntSize
const size_t PROGRESS_AUTO_RANGE
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))