HierarchyTreeNode::HIERARCHYTREENODEID HierarchyTreeController::CreateNewControl(const QString& strType, const QPoint& position) { if (!activeScreen) { return HierarchyTreeNode::HIERARCHYTREENODEID_EMPTY; } // Create the control itself. String type = strType.toStdString(); String newName = activeScreen->GetNewControlName(type); HierarchyTreeNode* parentNode = activeScreen; Vector2 parentDelta(0, 0); if (activeControlNodes.size() == 1) { HierarchyTreeControlNode* parentControlNode = (*activeControlNodes.begin()); parentNode = parentControlNode; //parentDelta = parentControlNode->GetUIObject()->GetPosition(); parentDelta = parentControlNode->GetParentDelta(); } Vector2 point = Vector2(position.x(), position.y()); DefaultScreen* screen = ScreenWrapper::Instance()->GetActiveScreen(); if (screen) point = screen->LocalToInternal(point); point -= parentDelta; // Add the tree node - we need it before initializing control. HierarchyTreeControlNode* controlNode = LibraryController::Instance()->CreateNewControl(parentNode, strType, QString::fromStdString(newName), point); if (!controlNode) return HierarchyTreeNode::HIERARCHYTREENODEID_EMPTY; emit HierarchyTreeUpdated(); ResetSelectedControl(); SelectControl(controlNode); return controlNode->GetId(); }