void ItemBox::notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id) { mouseButtonPressed(_id); if ( MouseButton::Left == _id) { size_t old = mIndexSelect; if (_sender == _getClientWidget()) { // сбрасываем выделение setIndexSelected(ITEM_NONE); } else { // индекс отправителя mDropSenderIndex = getIndexByWidget(_sender); // выделенный елемент setIndexSelected(mDropSenderIndex); } // смещение внутри виджета, куда кликнули мышкой mClickInWidget = InputManager::getInstance().getLastPressedPosition(MouseButton::Left) - _sender->getAbsolutePosition(); // отсылаем событие eventMouseItemActivate(this, mIndexSelect); // смену позиции отсылаем только при реальном изменении if (old != mIndexSelect) eventChangeItemPosition(this, mIndexSelect); } eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MousePressed, _left, _top, _id)); }
void TabControl::setPropertyOverride(const std::string& _key, const std::string& _value) { if (_key == "ButtonWidth") setButtonDefaultWidth(utility::parseValue<int>(_value)); else if (_key == "ButtonAutoWidth") setButtonAutoWidth(utility::parseValue<bool>(_value)); else if (_key == "SmoothShow") setSmoothShow(utility::parseValue<bool>(_value)); else if (_key == "SelectItem") setIndexSelected(utility::parseValue<size_t>(_value)); else { Base::setPropertyOverride(_key, _value); return; } eventChangeProperty(this, _key, _value); }
void ItemBox::clearIndexSelected() { setIndexSelected(ITEM_NONE); }
//! Clear item selection void clearIndexSelected() { setIndexSelected(ITEM_NONE); }
//! Select item void setItemSelected(ItemType _item) { setIndexSelected(getItemIndex(_item)); }
void ComboBox::clearIndexSelected() { setIndexSelected(ITEM_NONE); }
void MultiListBox::clearIndexSelected() { setIndexSelected(ITEM_NONE); }
void TabControl::setItemSelected(TabItem* _item) { setIndexSelected(getItemIndex(_item)); }
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); }