NewKeyCommand::NewKeyCommand(TreeViewModel *model, int index, DataContainer *data, bool isBelow, QUndoCommand* parent) : QUndoCommand(parent) , m_parentNode(model->model().at(index)) , m_newNode(NULL) , m_value(data->newValue()) , m_metaData(data->newMetadata()) { TreeViewModel* parentModel = m_parentNode->getChildren(); kdb::Key newKey = parentModel->createNewKey(m_parentNode->getPath() + "/" + data->newName(), m_value, m_metaData); QStringList newNameSplit = parentModel->getSplittedKeyname(newKey); kdb::Key parentKey = m_parentNode->getKey(); if(!parentKey) parentKey = kdb::Key(m_parentNode->getPath().toStdString(), KEY_END); QStringList parentNameSplit = parentModel->getSplittedKeyname(parentKey); //check if the new key is directly below the parent QSet<QString> diff = newNameSplit.toSet().subtract(parentNameSplit.toSet()); if(diff.count() > 1 || isBelow) setText("newBranch"); else setText("newKey"); m_name = cutListAtIndex(newNameSplit, parentNameSplit.count()).first(); parentModel->sink(m_parentNode, newNameSplit, newKey.dup()); m_newNode = m_parentNode->getChildByName(m_name); parentModel->removeRow(m_parentNode->getChildIndexByName(m_name)); }