예제 #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
파일: Decal.cpp 프로젝트: vexe/r5ge
void Decal::OnSerializeTo (TreeNode& root) const
{
    if (mShader	!= 0) root.AddChild("Shader", mShader->GetName());

    root.AddChild("Color", mColor);

    if (mTextures.IsValid())
    {
        TreeNode& node = root.AddChild("Textures");
        Array<String>& list = node.mValue.ToStringArray();

        for (uint i = 0; i < mTextures.GetSize(); ++i)
        {
            const ITexture* tex = mTextures[i];
            if (tex != 0) list.Expand() = tex->GetName();
        }
    }
}
예제 #3
0
void RamAi::GameMonteCarloTree::PerformExpansion(TreeNode &nodeToBeExpanded)
{
	std::vector<ButtonSet> allInputCombinations = std::move(ConsoleSettings::GetSpecs().GetAllInputCombinations());

	//Select and add one child at random.
	while (allInputCombinations.size() > 0)
	{
		const size_t chosenIndex = rand() % allInputCombinations.size();

		//Add the action to the tree if it is unique.
		if (!nodeToBeExpanded.ContainsAction(allInputCombinations[chosenIndex]))
		{
			nodeToBeExpanded.AddChild(allInputCombinations[chosenIndex]);
			break;
		}
		//Otherwise, discard it.
		else
		{
			allInputCombinations.erase(allInputCombinations.begin() + chosenIndex);
		}
	}
}
예제 #4
0
void model::DbContainerModel::LoadChildren(const QModelIndex& parent)
{
	TreeNode* node = Index2Node(parent);
	assert(node != nullptr);
	dbc::ElementGuard element = node->GetElement();
	if (!node->wasLoaded && element->Type() == dbc::ElementTypeFolder)
	{
		dbc::Folder* folder = element->AsFolder();
		assert(folder != nullptr);
		dbc::DbcElementsIterator iterator = folder->EnumFsEntries();
		if (iterator->HasNext())
		{
			beginInsertRows(parent, 0, iterator->Count() - 1);
			int row = 0;
			for (; iterator->HasNext(); ++row)
			{
				node->AddChild(iterator->Next());
			}
			endInsertRows();
		}
	}
	node->wasLoaded = true;
	emit dataChanged(parent, parent);
}
예제 #5
0
void OSAttachToBone::OnSerializeTo (TreeNode& node) const
{
	node.AddChild("Bone", mName);
}
예제 #6
0
파일: OSRotate.cpp 프로젝트: saggita/r5ge
void OSRotate::OnSerializeTo (TreeNode& node) const
{
	node.AddChild("Axis", mAxis);
	node.AddChild("Rate", mRate);
}