// Process the incoming event. void ElementTabSet::ProcessEvent(Core::Event& event) { Core::Element::ProcessEvent(event); if (event.GetCurrentElement() == this && event == "click") { // Find the tab that this click occured on Core::Element* tabs = GetChildByTag("tabs"); Core::Element* tab = event.GetTargetElement(); while (tab && tab != this && tab->GetParentNode() != tabs) tab = tab->GetParentNode(); // Abort if we couldn't find the tab the click occured on if (!tab || tab == this) return; // Determine the new active tab index int new_active_tab = active_tab; for (int i = 0; i < tabs->GetNumChildren(); i++) { if (tabs->GetChild(i) == tab) { new_active_tab = i; break; } } SetActiveTab(new_active_tab); } }
v8::Handle<v8::Value> HTMLDocument::documentElement() { Core::Element* result = getRocket(); while ( result->GetParentNode() ) result = result->GetParentNode(); v8::HandleScope handle_scope; return handle_scope.Close(JS::juice::getV8HandleFromRocketWrapper(result, v8::Null())); }
void ElementDataGridExpandButton::ProcessEvent(Core::Event& event) { Core::Element::ProcessEvent(event); if (event == "click" && event.GetCurrentElement() == this) { // Look for the first data grid row above us, and toggle their on/off // state. Core::Element* parent = GetParentNode(); ElementDataGridRow* parent_row; do { parent_row = dynamic_cast< ElementDataGridRow* >(parent); parent = parent->GetParentNode(); } while (parent && !parent_row); if (parent_row) { parent_row->ToggleRow(); if (parent_row->IsRowExpanded()) { SetClass("collapsed", false); SetClass("expanded", true); } else { SetClass("collapsed", true); SetClass("expanded", false); } } } }
// Pops all other radio buttons in our form that share our name. void InputTypeRadio::PopRadioSet() { // Uncheck all other radio buttons with our name in the form. ElementForm* form = NULL; Core::Element* parent = element->GetParentNode(); while (parent != NULL && (form = dynamic_cast< ElementForm* >(parent)) == NULL) parent = parent->GetParentNode(); if (form != NULL) { Core::ElementList form_controls; Core::ElementUtilities::GetElementsByTagName(form_controls, form, "input"); for (size_t i = 0; i < form_controls.size(); ++i) { ElementFormControlInput* radio_control = dynamic_cast< ElementFormControlInput* >(form_controls[i]); if (radio_control != NULL && element != radio_control && radio_control->GetAttribute< Rocket::Core::String >("type", "text") == "radio" && radio_control->GetName() == element->GetName()) { radio_control->RemoveAttribute("checked"); } } } }
void WidgetDropDown::ProcessEvent(Core::Event& event) { // Process the button onclick if (event == "click" && !parent_element->IsDisabled()) { if (event.GetCurrentElement()->GetParentNode() == selection_element) { // Find the element in the options and fire the selection event for (size_t i = 0; i < options.size(); i++) { if (options[i].GetElement() == event.GetCurrentElement()) { if (options[i].IsSelectable()) { SetSelection(i); event.StopPropagation(); ShowSelectBox(false); parent_element->Focus(); } } } } else { // We have to check that this event isn't targeted to an element // inside the selection box as we'll get all events coming from our // root level select element as well as the ones coming from options (which // get caught in the above if) Core::Element* element = event.GetTargetElement(); while (element && element != parent_element) { if (element == selection_element) return; element = element->GetParentNode(); } if (selection_element->GetProperty< int >("visibility") == Core::VISIBILITY_HIDDEN) ShowSelectBox(true); else ShowSelectBox(false); } } else if (event == "blur" && event.GetTargetElement() == parent_element) ShowSelectBox(false); }
// Checks for necessary functional changes in the control as a result of the event. void InputTypeSubmit::ProcessEvent(Core::Event& event) { if (event == "click" && !element->IsDisabled()) { Core::Element* parent = element->GetParentNode(); while (parent) { ElementForm* form = dynamic_cast< ElementForm* >(parent); if (form != NULL) { form->Submit(element->GetAttribute< Rocket::Core::String >("name", ""), element->GetAttribute< Rocket::Core::String >("value", "")); return; } else { parent = parent->GetParentNode(); } } } }
void WidgetDropDown::ProcessEvent(Core::Event& event) { if (parent_element->IsDisabled()) return; // Process the button onclick if (event == "click") { if (event.GetCurrentElement()->GetParentNode() == selection_element) { // Find the element in the options and fire the selection event for (size_t i = 0; i < options.size(); i++) { if (options[i].GetElement() == event.GetCurrentElement()) { if (options[i].IsSelectable()) { SetSelection(i); event.StopPropagation(); ShowSelectBox(false); parent_element->Focus(); } } } } else { // We have to check that this event isn't targeted to an element // inside the selection box as we'll get all events coming from our // root level select element as well as the ones coming from options (which // get caught in the above if) Core::Element* element = event.GetTargetElement(); while (element && element != parent_element) { if (element == selection_element) return; element = element->GetParentNode(); } if (selection_element->GetProperty< int >("visibility") == Core::VISIBILITY_HIDDEN) ShowSelectBox(true); else ShowSelectBox(false); } } else if (event == "blur" && event.GetTargetElement() == parent_element) { ShowSelectBox(false); } else if (event == "keydown") { Core::Input::KeyIdentifier key_identifier = (Core::Input::KeyIdentifier) event.GetParameter< int >("key_identifier", 0); switch (key_identifier) { case Core::Input::KI_UP: SetSelection( (selected_option - 1 + options.size()) % options.size() ); break; case Core::Input::KI_DOWN: SetSelection( (selected_option + 1) % options.size() ); break; default: break; } } if (event.GetTargetElement() == parent_element) { if (event == "focus") { value_element->SetPseudoClass("focus", true); button_element->SetPseudoClass("focus", true); } else if (event == "blur") { value_element->SetPseudoClass("focus", false); button_element->SetPseudoClass("focus", false); } } }