void HierarchyTreeWidget::on_treeWidget_itemSelectionChanged() { QTreeWidgetItem* selectedItem = ui->treeWidget->currentItem(); if (!selectedItem) { return; } if (internalSelectionChanged) { return; } QVariant data = selectedItem->data(ITEM_ID); HierarchyTreeNode::HIERARCHYTREENODEID id = data.toInt(); HierarchyTreeNode* baseNode = HierarchyTreeController::Instance()->GetTree().GetNode(id); HierarchyTreePlatformNode* selectedPlatform = dynamic_cast<HierarchyTreePlatformNode* >(baseNode); HierarchyTreeScreenNode* selectedScreen = dynamic_cast<HierarchyTreeScreenNode* >(baseNode); HierarchyTreeControlNode* selectedControl = dynamic_cast<HierarchyTreeControlNode* >(baseNode); if (!selectedPlatform && !selectedScreen && !selectedControl) return; internalSelectionChanged = true; //only platform or screen node can be seleted if (selectedPlatform || selectedScreen) { ResetSelection(); HierarchyTreeController::Instance()->ResetSelectedControl(); selectedItem->setSelected(true); } if (selectedControl) { selectedScreen = selectedControl->GetScreenNode(); selectedPlatform = selectedScreen->GetPlatform(); } else if (selectedScreen) { selectedPlatform = selectedScreen->GetPlatform(); } HierarchyTreeController::Instance()->UpdateSelection(selectedPlatform, selectedScreen); HierarchyTreeController::Instance()->UpdateSelection(baseNode); internalSelectionChanged = false; if (selectedControl) { if (ui->treeWidget->selectedItems().size() == 1) HierarchyTreeController::Instance()->ResetSelectedControl(); HierarchyTreeController::Instance()->SelectControl(selectedControl); } }
HierarchyTreeScreenNode* HierarchyTreeControlNode::GetScreenNode() const { if (!parent) return NULL; HierarchyTreeScreenNode* screenNode = dynamic_cast<HierarchyTreeScreenNode*>(parent); if (screenNode) return screenNode; HierarchyTreeControlNode* controlNode = dynamic_cast<HierarchyTreeControlNode*>(parent); if (controlNode) return controlNode->GetScreenNode(); return NULL; }