void SGameplayTagWidget::OnTagUnchecked(TSharedPtr<FGameplayTagNode> NodeUnchecked) { FScopedTransaction Transaction( LOCTEXT("GameplayTagWidget_RemoveTags", "Remove Gameplay Tags")); if (NodeUnchecked.IsValid()) { UGameplayTagsManager& TagsManager = IGameplayTagsModule::Get().GetGameplayTagsManager(); for (int32 ContainerIdx = 0; ContainerIdx < TagContainers.Num(); ++ContainerIdx) { UObject* OwnerObj = TagContainers[ContainerIdx].TagContainerOwner.Get(); FGameplayTagContainer* Container = TagContainers[ContainerIdx].TagContainer; FGameplayTag Tag = TagsManager.RequestGameplayTag(NodeUnchecked->GetCompleteTag()); if (Container) { FGameplayTagContainer EditableContainer = *Container; EditableContainer.RemoveTag(Tag); TWeakPtr<FGameplayTagNode> ParentNode = NodeUnchecked->GetParentTagNode(); if (ParentNode.IsValid()) { // Check if there are other siblings before adding parent bool bOtherSiblings = false; for (auto It = ParentNode.Pin()->GetChildTagNodes().CreateConstIterator(); It; ++It) { Tag = TagsManager.RequestGameplayTag(It->Get()->GetCompleteTag()); if (EditableContainer.HasTag(Tag, EGameplayTagMatchType::Explicit, EGameplayTagMatchType::Explicit)) { bOtherSiblings = true; break; } } // Add Parent if (!bOtherSiblings) { Tag = TagsManager.RequestGameplayTag(ParentNode.Pin()->GetCompleteTag()); EditableContainer.AddTag(Tag); } } // Uncheck Children for (const auto& ChildNode : NodeUnchecked->GetChildTagNodes()) { UncheckChildren(ChildNode, EditableContainer); } SetContainer(Container, &EditableContainer, OwnerObj); } } } }
void SGameplayTagWidget::UncheckChildren(TSharedPtr<FGameplayTagNode> NodeUnchecked, FGameplayTagContainer& EditableContainer) { UGameplayTagsManager& TagsManager = IGameplayTagsModule::Get().GetGameplayTagsManager(); FGameplayTag Tag = TagsManager.RequestGameplayTag(NodeUnchecked->GetCompleteTag()); EditableContainer.RemoveTag(Tag); // Uncheck Children for (const auto& ChildNode : NodeUnchecked->GetChildTagNodes()) { UncheckChildren(ChildNode, EditableContainer); } }
void wxSRHierarchicalConteiner::ShowChildren(wxSRComponent* choice) { if (Find(choice)) { wxSizer* sizer = m_sizer_associations[choice]; bool is_checked = choice->IsChecked(); if (!is_checked) UncheckChildren(choice); sizer->Show(is_checked); m_sizer->Layout(); } }
void wxSRCheckBox::OnClick(wxCommandEvent& event) { if (m_children_sizer) m_children_sizer->Show(IsChecked()); if (IsChecked()) { std::vector<wxSRComponent*>::iterator iter; for (iter = m_children.begin(); iter != m_children.end(); iter++) { wxSRComponent* tmp = *iter; tmp->RefreshState(event, true); } } else { UncheckChildren(event); } RefreshSizers(); }
void wxSRHierarchicalConteiner::UncheckChildren(wxSRComponent* choice) { if (Find(choice)) { std::vector<wxSRComponent*> children = m_checkbox_tree[choice]; for (unsigned int i = 0; i < children.size(); i++) { wxSRComponent* child = children.at(i); child->SetCheckValue(false); wxSizer* child_sizer = m_sizer_associations[child]; if (child_sizer != NULL) child_sizer->Show(false); UncheckChildren(child); } } }