예제 #1
0
	void MultiList::notifyListSelectAccept(MyGUI::WidgetPtr _widget, size_t _position)
	{
		// наш евент
		eventListSelectAccept(this, _position);
	}
예제 #2
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);
    }
예제 #3
0
 void MultiListBox::notifyListSelectAccept(ListBox* _sender, size_t _position)
 {
     // наш евент
     eventListSelectAccept(this, BiIndexBase::convertToFace(_position));
 }
예제 #4
0
 void ListBox::notifyMouseDoubleClick(Widget* _sender)
 {
     if (mIndexSelect != ITEM_NONE)
         eventListSelectAccept(this, mIndexSelect);
 }