21 mActivateOnClick(
false),
29 mNeedVisibleScroll(
true)
60 if (mWidgetScroll !=
nullptr)
72 mWidgetScroll =
nullptr;
94 size_t sel = mIndexSelect;
176 if (
sel != mIndexSelect)
183 if (mWidgetScroll !=
nullptr)
199 if (mRangeIndex <= 0)
202 if (mWidgetScroll ==
nullptr)
207 offset += mHeightLine;
209 offset -= mHeightLine;
211 if (offset >= mRangeIndex)
212 offset = mRangeIndex;
242 if (mActivateOnClick)
277 if (mWidgetScroll ==
nullptr)
299 if (!mItemsInfo.empty())
314 int position = mTopIndex * mHeightLine + mOffsetTop;
319 int height = (
int)mWidgetLines.size() * mHeightLine - mOffsetTop;
337 line->_setContainer(
this);
339 line->_setInternalData((
size_t)mWidgetLines.size());
341 mWidgetLines.push_back(
line);
342 height += mHeightLine;
346 if (position >= mRangeIndex)
349 if (mRangeIndex <= 0)
352 if (position || mOffsetTop || mTopIndex)
361 for (
size_t pos = 0;
pos < mWidgetLines.size();
pos++)
363 mWidgetLines[
pos]->setPosition(0, offset);
364 offset += mHeightLine;
374 if (mOffsetTop == mHeightLine)
380 int top = (
int)mItemsInfo.size() - count - 1;
383 int offset = 0 - mOffsetTop;
384 for (
size_t pos = 0;
pos < mWidgetLines.size();
pos++)
386 mWidgetLines[
pos]->setPosition(0, offset);
387 offset += mHeightLine;
391 position = top * mHeightLine + mOffsetTop;
394 if (top != mTopIndex)
408 if (mWidgetScroll !=
nullptr)
419 for (;
pos < mWidgetLines.size();
pos++)
425 if (index >= mItemsInfo.size())
428 mLastRedrawLine =
pos;
434 mLastRedrawLine =
pos;
439 mWidgetLines[
pos]->setVisible(
true);
441 mWidgetLines[
pos]->setCaption(mItemsInfo[index].
first);
444 static_cast<Button*
>(mWidgetLines[
pos])->setStateSelected(index == mIndexSelect);
448 if (
pos >= mWidgetLines.size())
450 mLastRedrawLine =
pos;
455 for (;
pos < mWidgetLines.size();
pos++)
457 static_cast<Button*
>(mWidgetLines[
pos])->setStateSelected(
false);
468 if (
_index < (
size_t)mTopIndex)
472 if (
_index >= mLastRedrawLine)
484 _index = mItemsInfo.size();
494 if ((
_index <= (
size_t)mTopIndex) && (mRangeIndex > 0))
498 if (mWidgetScroll !=
nullptr)
501 if (!mItemsInfo.empty())
505 mRangeIndex += mHeightLine;
510 int offset = ((
int)
_index - mTopIndex) * mHeightLine - mOffsetTop;
516 if (mWidgetScroll !=
nullptr)
519 if (!mItemsInfo.empty())
523 mRangeIndex += mHeightLine;
543 mItemsInfo.erase(mItemsInfo.begin() +
_index);
546 if (mItemsInfo.empty()) mIndexSelect =
ITEM_NONE;
549 if (
_index < mIndexSelect)
551 else if ((
_index == mIndexSelect) && (mIndexSelect == (mItemsInfo.size())))
556 if (mWidgetLines.size() > mItemsInfo.size())
558 mWidgetLines[mItemsInfo.size()]->setVisible(
false);
562 if (
_index < (
size_t)mTopIndex)
566 if (mWidgetScroll !=
nullptr)
569 if (!mItemsInfo.empty())
573 mRangeIndex -= mHeightLine;
578 int offset = ((
int)
_index - mTopIndex) * mHeightLine - mOffsetTop;
584 if (mWidgetScroll !=
nullptr)
587 if (!mItemsInfo.empty())
591 mRangeIndex -= mHeightLine;
609 if (mIndexSelect !=
_index)
622 if (
_index < (
size_t)mTopIndex)
625 int offset = ((
int)
_index - mTopIndex) * mHeightLine - mOffsetTop;
630 size_t index =
_index - mTopIndex;
631 if (index < mWidgetLines.size())
638 if (mRangeIndex <= 0)
642 if (offset >= mRangeIndex) offset = mRangeIndex;
644 if (mWidgetScroll !=
nullptr)
657 if (
_index >= mItemsInfo.size())
660 if (mRangeIndex <= 0)
664 if (
_index < (
size_t)mTopIndex)
668 if (
_index == (
size_t)mTopIndex)
670 if ((mOffsetTop != 0) && (
_fill))
676 int offset = ((
int)
_index - mTopIndex) * mHeightLine - mOffsetTop;
698 for (
size_t pos = 0;
pos < mWidgetLines.size();
pos++)
700 mWidgetLines[
pos]->setVisible(
false);
701 mWidgetLines[
pos]->setPosition(0, offset);
702 offset += mHeightLine;
727 return mItemsInfo[
_index].first;
733#if MYGUI_DEBUG_MODE == 1
737 mLineActive = *
_sender->_getInternalData<
size_t>();
766 if (mWidgetScroll !=
nullptr)
781 int offset = 0 - mOffsetTop;
783 for (
size_t pos = 0;
pos < mWidgetLines.size();
pos++)
785 mWidgetLines[
pos]->setPosition(
IntPoint(0, offset));
786 offset += mHeightLine;
791 if (top != mTopIndex)
825 int max_height = mItemsInfo.size() * mHeightLine;
835 for (
size_t pos = 0;
pos < mWidgetLines.size();
pos++)
837 if (
pos >= mItemsInfo.size())
840 height += mWidgetLines[
pos]->getHeight();
847 for (
size_t pos = 0;
pos < mItemsInfo.size();
pos++)
862 return mItemsInfo.size();
910 for (
const auto&
line : mWidgetLines)
913 return *
line->_getInternalData<
size_t>() + mTopIndex;
926 for (
const auto&
line : mWidgetLines)
934 if (
_key ==
"AddItem")
936 else if (
_key ==
"ActivateOnClick")
963 else if (
_sender->getVisible())
966#if MYGUI_DEBUG_MODE == 1
971 size_t index = *
_sender->_getInternalData<
size_t>() + mTopIndex;
973 if (mIndexSelect != index)
977 mIndexSelect = index;
1015 return *
_widget->_getInternalData<
size_t>() + mTopIndex;
1053 if (index < mWidgetLines.size())
1054 return mWidgetLines[index];
#define MYGUI_ASSERT(exp, dest)
#define MYGUI_ASSERT_RANGE_INSERT(index, size, owner)
#define MYGUI_ASSERT_RANGE(index, size, owner)
#define MYGUI_ASSERT_RANGE_AND_NONE(index, size, owner)
static LanguageManager & getInstance()
void _setItemNameAt(size_t _index, const UString &_name) override
void addItem(const UString &_name, Any _data=Any::Null)
Add an item to the end of a array.
void notifyMouseWheel(Widget *_sender, int _rel)
void _removeItemAt(size_t _index) override
void updateLine(bool _reset=false)
EventHandle_ListBoxPtrCIBNotifyCellDataRef eventNotifyItem
void beginToItemAt(size_t _index)
Move all elements so specified becomes visible.
void _redrawItem(size_t _index)
size_t _getItemIndex(Widget *_item) const override
void _setScrollView(size_t _position)
void notifyKeyButtonReleased(Widget *_sender, KeyCode _key)
void notifyMousePressed(Widget *_sender, int _left, int _top, MouseButton _id)
void _sendEventChangeScroll(size_t _position)
void setPosition(const IntPoint &_value) override
void setScrollPosition(size_t _position)
Set scroll position.
void notifyMouseButtonReleased(Widget *_sender, int _left, int _top, MouseButton _id)
bool isItemSelectedVisible(bool _fill=true)
Same as ListBox::isItemVisibleAt for selected item.
void _resetContainer(bool _update) override
const UString & _getItemNameAt(size_t _index) const override
bool isItemVisibleAt(size_t _index, bool _fill=true)
const UString & getItemNameAt(size_t _index) const
Get item name from specified position.
void notifyMouseClick(Widget *_sender)
void setActivateOnClick(bool activateOnClick)
void setPropertyOverride(const std::string &_key, const std::string &_value) override
void clearIndexSelected()
void _addItem(const MyGUI::UString &_name) override
void setScrollVisible(bool _visible)
Set scroll visible when it needed.
void _activateItem(Widget *_sender)
void setSize(const IntSize &_value) override
void _redrawItemRange(size_t _start=0)
void notifyMouseLostFocus(Widget *_sender, Widget *_new)
void shutdownOverride() override
size_t getItemCount() const
Get number of items.
void notifyScrollChangePosition(ScrollBar *_sender, size_t _rel)
void initialiseOverride() override
void notifyMouseSetFocus(Widget *_sender, Widget *_old)
void swapItemsAt(size_t _index1, size_t _index2)
Swap items at a specified positions.
int getOptimalHeight() const
Return optimal height to fit all items in ListBox.
void onKeyButtonReleased(KeyCode _key) override
void insertItemAt(size_t _index, const UString &_name, Any _data=Any::Null)
Insert an item into a array at a specified position.
void removeAllItems()
Remove all items.
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListChangePosition
void onMouseWheel(int _rel) override
void clearItemDataAt(size_t _index)
Clear an item data at a specified position.
size_t getIndexSelected() const
void _selectIndex(size_t _index, bool _select)
size_t _getItemCount() const override
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListMouseItemFocus
size_t findItemIndexWith(const UString &_name)
Search item, returns the position of the first occurrence in array or ITEM_NONE if item not found.
void beginToItemFirst()
Move all elements so first becomes visible.
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListChangeScroll
void notifyKeyButtonPressed(Widget *_sender, KeyCode _key, Char _char)
void onKeyButtonPressed(KeyCode _key, Char _char) override
void setItemDataAt(size_t _index, Any _data)
Replace an item data at a specified position.
void notifyMouseDoubleClick(Widget *_sender)
Widget * getWidgetByIndex(size_t _index)
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListSelectAccept
void beginToItemSelected()
Move all elements so selected becomes visible.
void removeItemAt(size_t _index)
Remove item at a specified position.
void setItemNameAt(size_t _index, const UString &_name)
Replace an item name at a specified position.
void setIndexSelected(size_t _index)
void _setItemFocus(size_t _position, bool _focus)
void beginToItemLast()
Move all elements so last becomes visible.
void setCoord(const IntCoord &_value) override
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListMouseItemActivate
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
bool isUserString(const std::string &_key) const
const std::string & getUserString(const std::string &_key) const
int parseInt(const std::string &_value)
bool parseBool(const std::string &_value)
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
types::TPoint< int > IntPoint