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::FindNextItem(Rocket::Core::Element *menu_item) { Rocket::Core::Element *next = menu_item; do { next = next->GetNextSibling(); if (next == NULL) { next = menu_item->GetParentNode()->GetChild(0); } } while (next->IsClassSet("disabled") && next != menu_item); return next; }