Fixed: #1193 Correct deleting particle system from workspace

This commit is contained in:
dnk-88 2011-11-08 00:22:32 +02:00
parent 997f4ece03
commit 7bcf883aea
3 changed files with 8 additions and 2 deletions

View file

@ -78,6 +78,8 @@ void CParticleEditor::release()
void CParticleEditor::setActiveNode(CWorkspaceNode *node) void CParticleEditor::setActiveNode(CWorkspaceNode *node)
{ {
if (node == _ActiveNode) return; if (node == _ActiveNode) return;
if (node == 0)
_ActiveNode->getPSModel()->hide();
_ActiveNode = node; _ActiveNode = node;
bool wasRunning = _State == State::RunningSingle; bool wasRunning = _State == State::RunningSingle;

View file

@ -378,6 +378,7 @@ void CParticleWorkspace::removeNode(uint index)
{ {
nlassert(index < _Nodes.size()); nlassert(index < _Nodes.size());
_Nodes[index] = NULL; // delete the smart-ptr target _Nodes[index] = NULL; // delete the smart-ptr target
delete _Nodes[index];
_Nodes.erase(_Nodes.begin() + index); _Nodes.erase(_Nodes.begin() + index);
touch(); touch();
} }

View file

@ -305,6 +305,8 @@ void CParticleWorkspaceDialog::customContextMenu()
_instanciateAction->setEnabled(stopped); _instanciateAction->setEnabled(stopped);
_savePSAction->setEnabled(stopped); _savePSAction->setEnabled(stopped);
_saveAsPSAction->setEnabled(stopped); _saveAsPSAction->setEnabled(stopped);
_removeFromWSAction->setEnabled(stopped);
_clearContentAction->setEnabled(stopped);
popurMenu->exec(QCursor::pos()); popurMenu->exec(QCursor::pos());
delete popurMenu; delete popurMenu;
@ -369,13 +371,14 @@ void CParticleWorkspaceDialog::clearContent()
void CParticleWorkspaceDialog::removePS() void CParticleWorkspaceDialog::removePS()
{ {
if (_treeModel->getOwnerNode(_currentItem) == Modules::psEdit().getActiveNode()) CWorkspaceNode *node = _currentItem->getNode();
if (node == Modules::psEdit().getActiveNode())
Modules::psEdit().setActiveNode(NULL); Modules::psEdit().setActiveNode(NULL);
QModelIndex index = _ui.treeView->currentIndex(); QModelIndex index = _ui.treeView->currentIndex();
_ui.treeView->setCurrentIndex(index.parent()); _ui.treeView->setCurrentIndex(index.parent());
clickedItem(index.parent()); clickedItem(index.parent());
Modules::psEdit().getParticleWorkspace()->removeNode(static_cast<CParticleTreeItem *>(index.internalPointer())->getNode()); Modules::psEdit().getParticleWorkspace()->removeNode(node);
_treeModel->removeRows(index.row(), index.parent()); _treeModel->removeRows(index.row(), index.parent());
} }