Exemplo n.º 1
0
	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);
	}
Exemplo n.º 2
0
	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);
	}
Exemplo n.º 3
0
	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);
	}
Exemplo n.º 4
0
	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);
	}