void ListView::Expand(unsigned index, bool enable, bool recursive) { if (!hierarchyMode_) return; unsigned numItems = GetNumItems(); if (index >= numItems) return; UIElement* item = GetItem(index++); SetItemExpanded(item, enable); int baseIndent = item->GetIndent(); PODVector<bool> expanded((unsigned)(baseIndent + 1)); expanded[baseIndent] = enable; contentElement_->DisableLayoutUpdate(); while (index < numItems) { item = GetItem(index++); int indent = item->GetIndent(); if (indent <= baseIndent) break; // Propagate the state to children when it is recursive if (recursive) SetItemExpanded(item, enable); // Use the parent expanded flag to influence the visibility of its children bool visible = enable && expanded[indent - 1]; item->SetVisible(visible); if (indent >= (int)expanded.Size()) expanded.Resize((unsigned)(indent + 1)); expanded[indent] = visible && GetItemExpanded(item); } contentElement_->EnableLayoutUpdate(); contentElement_->UpdateLayout(); }
void UIDrag::HandleUpdate(StringHash eventType, VariantMap& eventData) { auto* ui = GetSubsystem<UI>(); UIElement* root = ui->GetRoot(); auto* input = GetSubsystem<Input>(); unsigned n = input->GetNumTouches(); for (unsigned i = 0; i < n; i++) { Text* t = (Text*)root->GetChild("Touch " + String(i)); TouchState* ts = input->GetTouch(i); t->SetText("Touch " + String(ts->touchID_)); IntVector2 pos = ts->position_; pos.y_ -= 30; t->SetPosition(pos); t->SetVisible(true); } for (unsigned i = n; i < 10; i++) { Text* t = (Text*)root->GetChild("Touch " + String(i)); t->SetVisible(false); } if (input->GetKeyPress(KEY_SPACE)) { PODVector<UIElement*> elements; root->GetChildrenWithTag(elements, "SomeTag"); for (PODVector<UIElement*>::ConstIterator i = elements.Begin(); i != elements.End(); ++i) { UIElement* element = *i; element->SetVisible(!element->IsVisible()); } } }