void RocketMenuPlugin::OnDocumentLoad(Rocket::Core::ElementDocument* document) { DocumentData *doc_data = new DocumentData(); doc_data->cursor_left = document->GetElementById("cursor-left"); doc_data->cursor_right = document->GetElementById("cursor-right"); doc_data->menu = document->GetElementById("menu"); if (doc_data->menu == NULL) { for (int i = 0, n = document->GetNumChildren(); i!=n; i++) { Rocket::Core::Element *element = document->GetChild(i); if (element->IsClassSet("game-menu")) { doc_data->menu = element; break; } } } if (doc_data->menu != NULL) { for (int i = 0, n = doc_data->menu->GetNumChildren(); i < n; i++) { Rocket::Core::Element *e = doc_data->menu->GetChild(i); SetupMenuItem(e); } SetDocumentData(document, doc_data); } else { delete doc_data; } }
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; }