void ShortcutBar::shortcutClicked(Rocket::Core::Event& event) { Rocket::Core::Element* shortcutElement = event.GetTargetElement(); while(shortcutElement != nullptr && shortcutElement->GetParentNode() != m_shortcutContainer) { shortcutElement = shortcutElement->GetParentNode(); } // Only handle the click if it went to a shortcut // (direct child of the shortcut bar container) if (shortcutElement != nullptr) { // Find the index of the shortcut int shortcutIndex = 0; for(;;) { shortcutElement = shortcutElement->GetPreviousSibling(); if (shortcutElement == nullptr) break; ++shortcutIndex; } bool shortcutInvoked = invokeShortcut(shortcutIndex); if (shortcutInvoked) { refresh(); } } }
void SaveMenu::listKeyDown(Rocket::Core::Event& event) { Rocket::Core::Input::KeyIdentifier key = static_cast<Rocket::Core::Input::KeyIdentifier>(event.GetParameter<int>("key_identifier", Rocket::Core::Input::KI_UNKNOWN)); switch(key) { case Rocket::Core::Input::KI_UP: case Rocket::Core::Input::KI_DOWN: case Rocket::Core::Input::KI_RETURN: break; default: return; } Rocket::Core::Element* list = m_menuDocument->GetElementById("menu"); if(list == nullptr) { return; } Rocket::Core::Element* child = list->GetFirstChild(); while(child != nullptr) { if(child->IsClassSet("selected")) { break; } child = child->GetNextSibling(); } if(child == nullptr) { return; } if(key == Rocket::Core::Input::KI_RETURN) { child->Click(); } else if(key == Rocket::Core::Input::KI_UP) { Rocket::Core::Element* previousSibling = child->GetPreviousSibling(); if(previousSibling != nullptr) { child->SetClass("selected", false /*activate*/); previousSibling->SetClass("selected", true /*activate*/); } } else if(key == Rocket::Core::Input::KI_DOWN) { Rocket::Core::Element* nextSibling = child->GetNextSibling(); if(nextSibling != nullptr) { child->SetClass("selected", false /*activate*/); nextSibling->SetClass("selected", true /*activate*/); } } }
Rocket::Core::Element* RocketMenuPlugin::FindPreviousItem(Rocket::Core::Element *menu_item) { Rocket::Core::Element *next = menu_item; do { next = next->GetPreviousSibling(); if (next == NULL) { next = menu_item->GetParentNode()->GetChild(menu_item->GetParentNode()->GetNumChildren()-1); } } while (next->IsClassSet("disabled") && next != menu_item); return next; }
void ShortcutBar::usableDropped(Rocket::Core::Event& event) { Rocket::Core::Element* dragElement = static_cast<Rocket::Core::Element*>(event.GetParameter< void* >("drag_element", nullptr)); if (dragElement != nullptr) { const bool isItem = dragElement->HasAttribute("itemId"); const bool isSkill = dragElement->HasAttribute("skillId") && dragElement->HasAttribute("characterId"); UsableId usableId = 0; if(isItem) { usableId = static_cast<UsableId>(dragElement->GetAttribute<int>("itemId", 0)); } else if(isSkill) { usableId = static_cast<UsableId>(dragElement->GetAttribute<int>("skillId", 0)); } if(usableId > 0) { Rocket::Core::Element* dropElement = event.GetTargetElement(); // Only drops on direct children of the shortcut container count as // shortcut drops if(dropElement->GetParentNode() == m_shortcutContainer) { // Find the index of the shortcut int dropTargetIndex = 0; for(;;) { dropElement = dropElement->GetPreviousSibling(); if (dropElement == nullptr) break; ++dropTargetIndex; } bool isShortcutSet = false; if(isItem) { DEBUG("Dropping item %d on shortcut index %d.", usableId, dropTargetIndex); m_playerData.setShortcut(dropTargetIndex, usableId); isShortcutSet = true; } else if(isSkill) { const std::string characterId = dragElement->GetAttribute<Rocket::Core::String>("characterId", "").CString(); Character* character = m_playerData.getRoster()->getCharacter(characterId); if(character != nullptr) { DEBUG("Dropping skill %d on shortcut index %d.", usableId, dropTargetIndex); m_playerData.setShortcut(dropTargetIndex, usableId, characterId); isShortcutSet = true; } } if(isShortcutSet) { // If the drag was initiated from the shortcut bar, then // clear out the shortcut's original slot if (dragElement->GetParentNode() == m_shortcutContainer) { int dragTargetIndex = 0; for(;;) { dragElement = dragElement->GetPreviousSibling(); if (dragElement == nullptr) break; ++dragTargetIndex; } m_playerData.clearShortcut(dragTargetIndex); } } refresh(); } } } }