void ElementLabel::ProcessEvent(Core::Event& event) { // Detect click events if (event.GetTargetElement() == this && (event == "click")) { if (this->HasAttribute("for")) { Core::Element* forElement = this->GetOwnerDocument()->GetElementById(this->GetAttribute<Core::String>("for", "")); if (forElement != NULL) { forElement->ProcessEvent(event); } } else { //Note that we have to loop since the ElementFormControlInput class does not pass its OnChildAdded to the superclass. //We don't want to modify things too much, so we will just loop when clicked searching for the child input, not really //a big deal. int childCount = this->GetNumChildren(); Core::Element* child; for (int i = 0; i < childCount; ++i) { child = this->GetChild(i); if (child->GetTagName() == "input") { child->ProcessEvent(event); i = childCount; //break loop } } } } Element::ProcessEvent(event); }
void ElementInfo::UpdateSourceElement() { // Set the title: Core::Element* title_content = GetElementById("title-content"); if (title_content != NULL) { if (source_element != NULL) title_content->SetInnerRML(source_element->GetTagName()); else title_content->SetInnerRML("Element Information"); } // Set the attributes: Core::Element* attributes_content = GetElementById("attributes-content"); if (attributes_content) { int index = 0; Core::String name; Core::String value; Core::String attributes; if (source_element != NULL) { while (source_element->IterateAttributes(index, name, value)) attributes.Append(Core::String(name.Length() + value.Length() + 32, "%s: <em>%s</em><br />", name.CString(), value.CString())); } if (attributes.Empty()) { while (attributes_content->HasChildNodes()) attributes_content->RemoveChild(attributes_content->GetChild(0)); } else attributes_content->SetInnerRML(attributes); } // Set the properties: Core::Element* properties_content = GetElementById("properties-content"); if (properties_content) { Core::String properties; if (source_element != NULL) BuildElementPropertiesRML(properties, source_element, source_element); if (properties.Empty()) { while (properties_content->HasChildNodes()) properties_content->RemoveChild(properties_content->GetChild(0)); } else properties_content->SetInnerRML(properties); } // Set the position: Core::Element* position_content = GetElementById("position-content"); if (position_content) { // left, top, width, height. if (source_element != NULL) { Core::Vector2f element_offset = source_element->GetRelativeOffset(Core::Box::BORDER); Core::Vector2f element_size = source_element->GetBox().GetSize(Core::Box::BORDER); Core::String positions; positions.Append(Core::String(64, "left: <em>%.0fpx</em><br />", element_offset.x)); positions.Append(Core::String(64, "top: <em>%.0fpx</em><br />", element_offset.y)); positions.Append(Core::String(64, "width: <em>%.0fpx</em><br />", element_size.x)); positions.Append(Core::String(64, "height: <em>%.0fpx</em><br />", element_size.y)); position_content->SetInnerRML(positions); } else { while (position_content->HasChildNodes()) position_content->RemoveChild(position_content->GetFirstChild()); } } // Set the ancestors: Core::Element* ancestors_content = GetElementById("ancestors-content"); if (ancestors_content) { Core::String ancestors; Core::Element* element_ancestor = NULL; if (source_element != NULL) element_ancestor = source_element->GetParentNode(); int ancestor_depth = 1; while (element_ancestor) { Core::String ancestor_name = element_ancestor->GetTagName(); const Core::String ancestor_id = element_ancestor->GetId(); if (!ancestor_id.Empty()) { ancestor_name += "#"; ancestor_name += ancestor_id; } ancestors.Append(Core::String(ancestor_name.Length() + 32, "<p id=\"a %d\">%s</p>", ancestor_depth, ancestor_name.CString())); element_ancestor = element_ancestor->GetParentNode(); ancestor_depth++; } if (ancestors.Empty()) { while (ancestors_content->HasChildNodes()) ancestors_content->RemoveChild(ancestors_content->GetFirstChild()); } else ancestors_content->SetInnerRML(ancestors); } // Set the children: Core::Element* children_content = GetElementById("children-content"); if (children_content) { Core::String children; if (source_element != NULL) { for (int i = 0; i < source_element->GetNumChildren(); i++) { Core::Element* child = source_element->GetChild(i); // If this is a debugger document, do not show it. if (IsDebuggerElement(child)) continue; Core::String child_name = child->GetTagName(); const Core::String child_id = child->GetId(); if (!child_id.Empty()) { child_name += "#"; child_name += child_id; } children.Append(Core::String(child_name.Length() + 32, "<p id=\"c %d\">%s</p>", i, child_name.CString())); } } if (children.Empty()) { while (children_content->HasChildNodes()) children_content->RemoveChild(children_content->GetChild(0)); } else children_content->SetInnerRML(children); } }