31 mDragLayer =
"DragAndDrop";
93 void ItemBox::requestItemSize()
100 mSizeItem = coord.size();
103 "(mSizeItem.width > 0 && mSizeItem.height > 0) at requestCoordWidgetItem");
129 size_t start = (mFirstVisibleIndex * mCountItemInLine);
133 for (
size_t pos = start;
pos < count; ++
pos, ++index)
136 if (
pos >= mItemsInfo.size())
143 ((
int)index % mCountItemInLine) * mSizeItem.
width - mContentPosition.
left,
144 (((
int)index / mCountItemInLine) * mSizeItem.
height) - mFirstOffsetIndex);
149 (((
int)index / mCountItemInLine) * mSizeItem.
width) - mFirstOffsetIndex,
150 ((
int)index % mCountItemInLine) * mSizeItem.
height - mContentPosition.
top);
158 IBDrawItemInfo data(
pos, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
true,
false);
164 while (index < mVectorItems.size())
166 mVectorItems[index]->setVisible(
false);
174 if (
_index == mVectorItems.size())
198 mVectorItems.push_back(item);
204 return mVectorItems[
_index];
233 size_t start = (
size_t)(mFirstVisibleIndex * mCountItemInLine);
234 size_t index = mIndexActive;
238 if ((mIndexActive >= start) && (mIndexActive < (start + mVectorItems.size())))
240 IBDrawItemInfo data(index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
261 for (
const auto& item : mVectorItems)
267 size_t index = calcIndexByWidget(item);
269 if (index < mItemsInfo.size())
271 mIndexActive = index;
272 IBDrawItemInfo data(index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
286 size_t index = calcIndexByWidget(
_item);
287 if (index < mItemsInfo.size())
301 size_t start = (
size_t)(mFirstVisibleIndex * mCountItemInLine);
302 if ((
_index >= start) && (
_index < (start + mVectorItems.size())))
304 IBDrawItemInfo data(
_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
314 size_t start = (
size_t)(mFirstVisibleIndex * mCountItemInLine);
315 if ((
_index >= start) && (
_index < (start + mVectorItems.size())))
317 IBDrawItemInfo data(
_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
true,
false);
328 _index = mItemsInfo.size();
338 if (mIndexSelect >=
_index)
362 mItemsInfo.erase(mItemsInfo.begin() +
_index);
367 if (mItemsInfo.empty())
371 else if ((mIndexSelect >
_index) || (mIndexSelect == mItemsInfo.size()))
390 if (mItemsInfo.empty())
409 size_t start = (
size_t)(mFirstVisibleIndex * mCountItemInLine);
410 if ((
_index >= start) && (
_index < (start + mVectorItems.size())))
412 IBDrawItemInfo data(
_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
true,
false);
420 if (
_index == mIndexSelect)
423 size_t start = (
size_t)(mFirstVisibleIndex * mCountItemInLine);
428 size_t index = mIndexSelect;
431 if ((index >= start) && (index < (start + mVectorItems.size())))
433 IBDrawItemInfo data(index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
441 if ((
_index >= start) && (
_index < (start + mVectorItems.size())))
443 IBDrawItemInfo data(
_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
458 if (mAlignVert ==
_vert)
462 mCountItemInLine = -1;
483 size_t index = calcIndexByWidget(
_widget);
491 for (
const auto& item : mVectorItems)
493 if (item->getVisible())
495 if (item->getAbsoluteRect().inside(
_point))
557 if (
nullptr == mItemDrag)
564 mPointDragOffset = coord.
point();
610 size_t old = mIndexSelect;
633 if (
old != mIndexSelect)
655 size_t index = calcIndexByWidget(
_sender);
669 mIndexActive = index;
670 IBDrawItemInfo data(index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
677 if (index < mItemsInfo.size() && mIndexActive == index)
680 IBDrawItemInfo data(index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse,
false,
false);
699 if (1 > mCountItemInLine)
700 mCountItemInLine = 1;
703 mCountLines =
int(mItemsInfo.size() / mCountItemInLine);
704 if (0 != (mItemsInfo.size() % mCountItemInLine))
709 mContentSize.
width = (mSizeItem.
width * mCountItemInLine);
714 mContentSize.
width = (mSizeItem.
width * mCountLines);
715 mContentSize.
height = (mSizeItem.
height * mCountItemInLine);
730 setContentPosition(mContentPosition);
737 if (mContentSize.
height <= 0)
740 int offset = mContentPosition.
top;
742 offset += mSizeItem.
height;
744 offset -= mSizeItem.
height;
753 if (mContentPosition.
top == offset)
760 mContentPosition.
top = offset;
764 if (mContentSize.
width <= 0)
767 int offset = mContentPosition.
left;
769 offset += mSizeItem.
width;
771 offset -= mSizeItem.
width;
780 if (mContentPosition.
left == offset)
787 mContentPosition.
left = offset;
790 setContentPosition(mContentPosition);
804 mContentPosition =
_point;
806 int old = mFirstVisibleIndex;
810 mFirstVisibleIndex = mContentPosition.
top / mSizeItem.
height;
811 mFirstOffsetIndex = mContentPosition.
top % mSizeItem.
height;
815 mFirstVisibleIndex = mContentPosition.
left / mSizeItem.
width;
816 mFirstOffsetIndex = mContentPosition.
left % mSizeItem.
width;
835 return *
_widget->_getInternalData<
size_t>() + (mFirstVisibleIndex * mCountItemInLine);
838 IntSize ItemBox::getContentSize()
const
843 IntPoint ItemBox::getContentPosition()
const
845 return mContentPosition;
853 void ItemBox::eraseContent()
858 size_t ItemBox::getHScrollPage()
const
860 return mSizeItem.
width;
863 size_t ItemBox::getVScrollPage()
const
868 Align ItemBox::getContentAlign()
const
875 return mItemsInfo.size();
933 if (
_key ==
"VerticalAlignment")
937 else if (
_key ==
"VisibleVScroll")
941 else if (
_key ==
"VisibleHScroll")
957 if (mContentSize.
height <= 0)
969 if (mContentPosition.
top == offset)
976 mContentPosition.
top = offset;
980 if (mContentSize.
width <= 0)
992 if (mContentPosition.
left == offset)
999 mContentPosition.
left = offset;
1002 setContentPosition(mContentPosition);
1016 return getContentPosition();
#define MYGUI_ASSERT(exp, dest)
#define MYGUI_DEBUG_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)
void mouseButtonPressed(MouseButton _id)
void mouseButtonReleased(MouseButton _id)
void mouseDrag(MouseButton _id)
void endDrop(bool _reset)
static Gui & getInstance()
IntRect getAbsoluteRect() const
void onMouseButtonPressed(int _left, int _top, MouseButton _id) override
void onKeyButtonPressed(KeyCode _key, Char _char) override
void clearItemDataAt(size_t _index)
Clear an item data at a specified position.
void notifyMouseDrag(Widget *_sender, int _left, int _top, MouseButton _id)
void setVisibleHScroll(bool _value)
size_t getIndexByWidget(Widget *_widget) const
void notifyMouseButtonReleased(Widget *_sender, int _left, int _top, MouseButton _id)
size_t getItemCount() const
Get number of items.
EventHandle_ItemBoxPtrWidgetPtrCIBCellDrawInfoRef requestDrawItem
IntPoint getViewOffset() const
void notifyMouseWheel(Widget *_sender, int _rel)
void shutdownOverride() override
void setVisibleVScroll(bool _value)
void removeItemAt(size_t _index, bool update=true)
Remove item at a specified position.
void notifyMouseButtonDoubleClick(Widget *_sender)
bool getVerticalAlignment() const
bool isVisibleHScroll() const
void onKeySetFocus(Widget *_old) override
void redrawItemAt(size_t _index)
Redraw at a specified position.
void setCoord(const IntCoord &_coord) override
void onMouseWheel(int _rel) override
void onKeyButtonReleased(KeyCode _key) override
Widget * getWidgetDrag() const
void notifyScrollChangePosition(ScrollBar *_sender, size_t _index)
void setViewOffset(const IntPoint &_value)
Widget * getItemWidget(size_t _index)
void setIndexSelected(size_t _index)
Select specified _index.
void setVerticalAlignment(bool _vert)
void redrawAllItems()
Redraw all items.
void initialiseOverride() override
void resetCurrentActiveItem()
void onMouseDrag(int _left, int _top, MouseButton _id) override
void onKeyLostFocus(Widget *_new) override
void insertItemAt(size_t _index, Any _data=Any::Null, bool update=true)
Insert an item into a array at a specified position.
size_t _getContainerIndex(const IntPoint &_point) const override
IntSize getViewSize() const override
void notifyMouseButtonPressed(Widget *_sender, int _left, int _top, MouseButton _id)
void setPropertyOverride(std::string_view _key, std::string_view _value) override
EventHandle_ItemBoxPtrSizeT eventMouseItemActivate
EventHandle_ItemBoxPtrWidgetPtr requestCreateWidgetItem
EventHandle_ItemBoxPtrSizeT eventSelectItemAccept
void notifyKeyButtonReleased(Widget *_sender, KeyCode _key)
void setItemDataAt(size_t _index, Any _data)
Replace an item data at a specified position.
Widget * getWidgetByIndex(size_t _index)
void updateDropItems() override
size_t _getItemIndex(Widget *_item) const override
void _updateAllVisible(bool _redraw)
void updateDropItemsState(const DDWidgetState &_state) override
size_t getIndexSelected() const
Get index of selected item (ITEM_NONE if none selected)
void _resetContainer(bool _update) override
void notifyRootMouseChangeFocus(Widget *_sender, bool _focus)
void findCurrentActiveItem()
void setSize(const IntSize &_size) override
void onMouseButtonReleased(int _left, int _top, MouseButton _id) override
void removeAllItems()
Remove all items.
void notifyKeyButtonPressed(Widget *_sender, KeyCode _key, Char _char)
void removeDropItems() override
void _setContainerItemInfo(size_t _index, bool _set, bool _accept) override
void setPosition(const IntPoint &_point) override
bool isVisibleVScroll() const
void clearIndexSelected()
Clear item selection.
void addItem(Any _data=Any::Null, bool update=true)
Add an item to the end of a array.
EventHandle_ItemBoxPtrIntCoordRefBool requestCoordItem
EventHandle_ItemBoxPtrCIBNotifyCellDataRef eventNotifyItem
EventHandle_ItemBoxPtrSizeT eventChangeItemPosition
bool isUserString(std::string_view _key) const
std::string_view getUserString(std::string_view _key) const
void _setInternalData(Any _data)
types::TPoint< int > IntPoint
constexpr size_t ITEM_NONE
types::TCoord< int > IntCoord
types::TSize< int > IntSize
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
TPoint< T > point() const