示例#1
0
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();
}
示例#2
0
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;
}
示例#3
0
int model::DbContainerModel::rowCount(const QModelIndex& parent /*= QModelIndex()*/) const
{
	TreeNode* node = Index2Node(parent);
	// Check for root
	return (node == nullptr) ? m_rootNodes.size() : node->GetChildrenCount();
}