Esempio n. 1
0
void QuickEdit::AddAttribute()
{
    QModelIndex current = ui->tvEditor->selectionModel()->currentIndex();
    if(!current.isValid())
        return;

    current = current.sibling(current.row(), 0);
    TreeItemInterface *itemAsInterface = static_cast<TreeItemInterface*>(current.internalPointer());
    BrowserNode* currentNode = static_cast<BrowserNode*>(itemAsInterface->InternalPointer());

    BrowserClass* classNode;

    int newItemPosition = 0;
    if(currentNode->TypeID()  == TypeIdentifier<BrowserClass>::id())
    {
        classNode = static_cast<BrowserClass*>(currentNode);
        if(!classNode)
            return;
        newItemPosition = itemAsInterface->childCount();
    }
    else if(currentNode->TypeID() *in(TypeIdentifier<BrowserOperation>::id() ,TypeIdentifier<BrowserAttribute>::id())
            && current.parent().isValid())
    {
        itemAsInterface = static_cast<TreeItemInterface*>(current.parent().internalPointer());
        classNode = static_cast<BrowserClass*>(itemAsInterface->InternalPointer());
        newItemPosition = current.row()+1;
        current = current.parent();
    }
    else
        return;

    //classNode->addOperation()
    BrowserAttribute* newAttribute;
    if(QString(classNode->get_stereotype()) == "enum")
        newAttribute = static_cast<BrowserAttribute*>(classNode->addEnumItem());
    else
        newAttribute = static_cast<BrowserAttribute*>(classNode->addAttribute());
    classNode->move(newAttribute, currentNode);
    classNode->select_in_browser();
    QModelIndex parentIndex;
    TreeItemInterface* parent;
    if(treeModel->parent(current).isValid())
    {
        parentIndex = treeModel->parent(current);
        parentIndex = parentIndex.sibling(parentIndex.row(), 0);
        parent =  static_cast<TreeItemInterface*>(parentIndex.internalPointer());
    }
    else
        parent = treeModel->RootItem();

    int insertIndex = parent->GetIndexOfChild(itemAsInterface);

    QSharedPointer<TreeItemInterface> sharedOfNode =  parent->GetChildren()[insertIndex];

    if(!treeModel->insertRows(newItemPosition, 1, current))
        return;

    if(!current.isValid())
        return;

    QModelIndex newItem = treeModel->index(newItemPosition,0,current);
    TreeItemInterface *newItemInterface = static_cast<TreeItemInterface*>(newItem.internalPointer());
    TreeItem<BrowserNode>* newItemAsNode = static_cast<TreeItem<BrowserNode>*>(newItemInterface);
    newItemAsNode->SetController(attributeController);
    newItemAsNode->SetParent(sharedOfNode);
    newItemAsNode->SetInternalData(newAttribute);
}