QModelIndex model::DbContainerModel::AddElement(dbc::ElementType type, const QString& name, const QModelIndex& parent) { assert(!name.isEmpty() && type != dbc::ElementTypeUnknown && parent.isValid()); if (name.isEmpty() || type == dbc::ElementTypeUnknown || !parent.isValid()) { return QModelIndex(); } TreeNode* parentNode = Index2Node(parent); dbc::Folder* folder = parentNode->GetElement()->AsFolder(); assert(folder != nullptr); if (folder == nullptr) { return QModelIndex(); } LoadChildren(parent); dbc::ElementGuard element = folder->CreateChild(utils::QString2StdString(name), type); DBC_MODEL_TRY(tr("Element adding")); int insertedRow = parentNode->GetChildrenCount(); beginInsertRows(parent, insertedRow, insertedRow); TreeNode* insertedNode = parentNode->AddChild(element); assert(insertedRow + 1 == parentNode->GetChildrenCount()); endInsertRows(); return createIndex(insertedRow, 0, insertedNode); DBC_MODEL_CATCH; element->Remove(); return QModelIndex(); }
bool model::DbContainerModel::hasChildren(const QModelIndex& parent /*= QModelIndex()*/) const { TreeNode* node = Index2Node(parent); if (node == nullptr) // For the root { return !m_rootNodes.isEmpty(); } bool showExpand = node->GetElement()->Type() == dbc::ElementTypeFolder; if (node->wasLoaded && node->GetChildrenCount() == 0) { showExpand = false; } return showExpand; }
int model::DbContainerModel::rowCount(const QModelIndex& parent /*= QModelIndex()*/) const { TreeNode* node = Index2Node(parent); // Check for root return (node == nullptr) ? m_rootNodes.size() : node->GetChildrenCount(); }