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 ItemBox::notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id) { bool needEvent = !mStartDrop; mouseButtonReleased(_id); if (needEvent) eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MouseReleased, _left, _top, _id)); }
Widget* ItemBox::getWidgetByIndex(size_t _index) { for (VectorWidgetPtr::iterator iter = mVectorItems.begin(); iter != mVectorItems.end(); ++iter) { if ((*iter)->getVisible()) { size_t index = getIndexByWidget(*iter); if (index == _index) return (*iter); } } return nullptr; }
size_t ItemBox::_getContainerIndex(const IntPoint& _point) { for (VectorWidgetPtr::iterator iter = mVectorItems.begin(); iter != mVectorItems.end(); ++iter) { if ((*iter)->getVisible()) { if ((*iter)->getAbsoluteRect().inside(_point)) { return getIndexByWidget(*iter); } } } return ITEM_NONE; }
void ItemBox::notifyKeyButtonReleased(Widget* _sender, KeyCode _key) { eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::KeyReleased, _key)); }
void ItemBox::notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char) { eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::KeyPressed, _key, _char)); }
void ItemBox::notifyMouseButtonDoubleClick(Widget* _sender) { size_t index = getIndexByWidget(_sender); eventSelectItemAccept(this, index); }
void ListCtrl::notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id) { mouseButtonReleased(_id); eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MouseReleased, _left, _top, _id)); }