示例#1
0
	void MultiList::notifyListChangePosition(MyGUI::WidgetPtr _widget, size_t _position)
	{
		for (VectorColumnInfo::iterator iter=mVectorColumnInfo.begin(); iter!=mVectorColumnInfo.end(); ++iter)
			if (_widget != (*iter).list) (*iter).list->setItemSelect(_position);

		// наш евент
		eventListChangePosition(this, _position);
	}
示例#2
0
    void ListBox::notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id)
    {
        if (MouseButton::Left != _id)
            return;

        if (_sender == mWidgetScroll)
            return;

        // если выделен клиент, то сбрасываем
        if (_sender == _getClientWidget())
        {
            if (mIndexSelect != ITEM_NONE)
            {
                _selectIndex(mIndexSelect, false);
                mIndexSelect = ITEM_NONE;
                eventListChangePosition(this, mIndexSelect);
            }
            eventListMouseItemActivate(this, mIndexSelect);

            // если не клиент, то просчитывам
        }
        // ячейка может быть скрыта
        else if (_sender->getVisible())
        {

#if MYGUI_DEBUG_MODE == 1
            _checkMapping("ListBox::notifyMousePressed");
            MYGUI_ASSERT_RANGE(*_sender->_getInternalData<size_t>(), mWidgetLines.size(), "ListBox::notifyMousePressed");
            MYGUI_ASSERT_RANGE(*_sender->_getInternalData<size_t>() + mTopIndex, mItemsInfo.size(), "ListBox::notifyMousePressed");
#endif

            size_t index = *_sender->_getInternalData<size_t>() + mTopIndex;

            if (mIndexSelect != index)
            {
                _selectIndex(mIndexSelect, false);
                _selectIndex(index, true);
                mIndexSelect = index;
                eventListChangePosition(this, mIndexSelect);
            }
            eventListMouseItemActivate(this, mIndexSelect);
        }

        _resetContainer(true);
    }
示例#3
0
    void MultiListBox::notifyListChangePosition(ListBox* _sender, size_t _position)
    {
        for (VectorColumnInfo::iterator iter = mVectorColumnInfo.begin(); iter != mVectorColumnInfo.end(); ++iter)
        {
            if (_sender != (*iter).list)
                (*iter).list->setIndexSelected(_position);
        }

        updateBackSelected(_position);

        mItemSelected = BiIndexBase::convertToFace(_position);

        // наш евент
        eventListChangePosition(this, mItemSelected);
    }
示例#4
0
    void ListBox::onKeyButtonPressed(KeyCode _key, Char _char)
    {
        if (getItemCount() == 0)
        {
            Base::onKeyButtonPressed(_key, _char);
            return;
        }

        // очень секретный метод, запатентованный механизм движения курсора
        size_t sel = mIndexSelect;

        if (_key == KeyCode::ArrowUp)
        {
            if (sel != 0)
            {
                if (sel == ITEM_NONE)
                    sel = 0;
                else
                    sel --;
            }
        }
        else if (_key == KeyCode::ArrowDown)
        {
            if (sel == ITEM_NONE)
                sel = 0;
            else
                sel ++;

            if (sel >= getItemCount())
            {
                // старое значение
                sel = mIndexSelect;
            }
        }
        else if (_key == KeyCode::Home)
        {
            if (sel != 0)
                sel = 0;
        }
        else if (_key == KeyCode::End)
        {
            if (sel != (getItemCount() - 1))
            {
                sel = getItemCount() - 1;
            }
        }
        else if (_key == KeyCode::PageUp)
        {
            if (sel != 0)
            {
                if (sel == ITEM_NONE)
                {
                    sel = 0;
                }
                else
                {
                    size_t page = _getClientWidget()->getHeight() / mHeightLine;
                    if (sel <= page)
                        sel = 0;
                    else
                        sel -= page;
                }
            }
        }
        else if (_key == KeyCode::PageDown)
        {
            if (sel != (getItemCount() - 1))
            {
                if (sel == ITEM_NONE)
                {
                    sel = 0;
                }
                else
                {
                    sel += _getClientWidget()->getHeight() / mHeightLine;
                    if (sel >= getItemCount())
                        sel = getItemCount() - 1;
                }
            }
        }
        else if ((_key == KeyCode::Return) || (_key == KeyCode::NumpadEnter))
        {
            if (sel != ITEM_NONE)
            {
                //FIXME нас могут удалить
                eventListSelectAccept(this, sel);

                Base::onKeyButtonPressed(_key, _char);
                // выходим, так как изменили колличество строк
                return;
            }
        }

        if (sel != mIndexSelect)
        {
            _resetContainer(true);

            if (!isItemVisibleAt(sel))
            {
                beginToItemAt(sel);
                if (mWidgetScroll != nullptr)
                    _sendEventChangeScroll(mWidgetScroll->getScrollPosition());
            }
            setIndexSelected(sel);

            // изменилась позиция
            // FIXME нас могут удалить
            eventListChangePosition(this, mIndexSelect);
        }

        Base::onKeyButtonPressed(_key, _char);
    }