void ItemBox::setViewOffset(const IntPoint& _value) { if (mAlignVert) { if (mContentSize.height <= 0) return; int offset = _value.top; if (mContentSize.height <= _getClientWidget()->getHeight()) offset = 0; else if (offset >= mContentSize.height - _getClientWidget()->getHeight()) offset = mContentSize.height - _getClientWidget()->getHeight(); else if (offset < 0) offset = 0; if (mContentPosition.top == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.top = offset; } else { if (mContentSize.width <= 0) return; int offset = _value.left; if (mContentSize.width <= _getClientWidget()->getWidth()) offset = 0; else if (offset >= mContentSize.width - _getClientWidget()->getWidth()) offset = mContentSize.width - _getClientWidget()->getWidth(); else if (offset < 0) offset = 0; if (mContentPosition.left == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.left = offset; } setContentPosition(mContentPosition); // заново ищем и подсвечиваем айтем if (!mNeedDrop) findCurrentActiveItem(); if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top); if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left); }
void ItemBox::insertItemAt(size_t _index, Any _data) { MYGUI_ASSERT_RANGE_INSERT(_index, mItemsInfo.size(), "ItemBox::insertItemAt"); if (_index == ITEM_NONE) _index = mItemsInfo.size(); _resetContainer(false); resetCurrentActiveItem(); mItemsInfo.insert(mItemsInfo.begin() + _index, ItemDataInfo(_data)); // расчитываем новый индекс выделения if (mIndexSelect != ITEM_NONE) { if (mIndexSelect >= _index) { mIndexSelect ++; } } updateScrollSize(); updateScrollPosition(); findCurrentActiveItem(); _updateAllVisible(true); }
void ItemBox::removeItemAt(size_t _index) { MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::removeItemAt"); _resetContainer(false); resetCurrentActiveItem(); mItemsInfo.erase(mItemsInfo.begin() + _index); // расчитываем новый индекс выделения if (mIndexSelect != ITEM_NONE) { if (mItemsInfo.empty()) { mIndexSelect = ITEM_NONE; } else if ((mIndexSelect > _index) || (mIndexSelect == mItemsInfo.size())) { mIndexSelect --; } } updateScrollSize(); updateScrollPosition(); findCurrentActiveItem(); _updateAllVisible(true); }
void ListCtrl::notifyMouseWheel(Widget* _sender, int _rel) { if (mContentSize.height <= 0) return; int offset = mContentPosition.top; if (_rel < 0) offset += mScrollViewPage; else offset -= mScrollViewPage; if (mContentSize.height <= _getClientWidget()->getHeight()) return; if (offset >= mContentSize.height - _getClientWidget()->getHeight()) offset = mContentSize.height - _getClientWidget()->getHeight(); else if (offset < 0) offset = 0; if (mContentPosition.top == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.top = offset; setContentPosition(mContentPosition); // заново ищем и подсвечиваем айтем if (!mNeedDrop) findCurrentActiveItem(); if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top); if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left); }