197 lines
No EOL
5.9 KiB
C++
197 lines
No EOL
5.9 KiB
C++
/*
|
|
Object Viewer Qt
|
|
Copyright (C) 2010 Dzmitry Kamiahin <dnk-88@tut.by>
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#include "stdpch.h"
|
|
#include "particle_workspace_page.h"
|
|
|
|
// Qt includes
|
|
#include <QtGui/QWidget>
|
|
#include <QtGui/QFileDialog>
|
|
#include <QtGui/QMessageBox>
|
|
|
|
// NeL includes
|
|
|
|
// Project includes
|
|
#include "modules.h"
|
|
|
|
namespace NLQT {
|
|
|
|
CWorkspacePage::CWorkspacePage(CParticleTreeModel *treeModel, QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
_ui.setupUi(this);
|
|
|
|
_treeModel = treeModel;
|
|
|
|
connect(_ui.newToolButton, SIGNAL(clicked()), this, SLOT(newWP()));
|
|
connect(_ui.loadToolButton, SIGNAL(clicked()), this, SLOT(loadWP()));
|
|
connect(_ui.saveToolButton, SIGNAL(clicked()), this, SLOT(saveWP()));
|
|
connect(_ui.saveAsToolButton, SIGNAL(clicked()), this, SLOT(saveAsWP()));
|
|
connect(_ui.insertToolButton, SIGNAL(clicked()), this, SLOT(insertPS()));
|
|
connect(_ui.createToolButton, SIGNAL(clicked()), this, SLOT(createPS()));
|
|
connect(_ui.resetToolButton, SIGNAL(clicked()), this, SLOT(removeAllPS()));
|
|
}
|
|
|
|
CWorkspacePage::~CWorkspacePage()
|
|
{
|
|
}
|
|
|
|
void CWorkspacePage::newWP()
|
|
{
|
|
//checkModifiedWorkSpace();
|
|
// ask name of the new workspace to create
|
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Create new pws file"),
|
|
".",
|
|
tr("pws files (*.pws)"));
|
|
if (!fileName.isEmpty())
|
|
{
|
|
Modules::psEdit().createNewWorkspace(fileName.toStdString());
|
|
_treeModel->setupModelFromWorkSpace();
|
|
_ui.saveToolButton->setEnabled(true);
|
|
_ui.saveAsToolButton->setEnabled(true);
|
|
_ui.insertToolButton->setEnabled(true);
|
|
_ui.resetToolButton->setEnabled(true);
|
|
_ui.createToolButton->setEnabled(true);
|
|
}
|
|
}
|
|
|
|
void CWorkspacePage::loadWP()
|
|
{
|
|
//checkModifiedWorkSpace();
|
|
QString fileName = QFileDialog::getOpenFileName(this,
|
|
tr("Open NeL data file"), ".",
|
|
tr("Particle Workspace file (*.pws);;"));
|
|
|
|
setCursor(Qt::WaitCursor);
|
|
if (!fileName.isEmpty())
|
|
{
|
|
Modules::psEdit().loadWorkspace(fileName.toStdString());
|
|
_treeModel->setupModelFromWorkSpace();
|
|
_ui.saveToolButton->setEnabled(true);
|
|
_ui.saveAsToolButton->setEnabled(true);
|
|
_ui.insertToolButton->setEnabled(true);
|
|
_ui.resetToolButton->setEnabled(true);
|
|
_ui.createToolButton->setEnabled(true);
|
|
}
|
|
setCursor(Qt::ArrowCursor);
|
|
}
|
|
|
|
void CWorkspacePage::saveWP()
|
|
{
|
|
//checkModifiedWorkSpace();
|
|
Modules::psEdit().saveWorkspaceStructure();
|
|
Modules::psEdit().saveWorkspaceContent();
|
|
}
|
|
|
|
void CWorkspacePage::saveAsWP()
|
|
{
|
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Save as pws file"),
|
|
".",
|
|
tr("pws files (*.pws)"));
|
|
if (!fileName.isEmpty())
|
|
{
|
|
Modules::psEdit().getParticleWorkspace()->setFileName(fileName.toStdString());
|
|
Modules::psEdit().saveWorkspaceStructure();
|
|
Modules::psEdit().saveWorkspaceContent();
|
|
_treeModel->setupModelFromWorkSpace();
|
|
}
|
|
}
|
|
|
|
void CWorkspacePage::insertPS()
|
|
{
|
|
QString fileName = QFileDialog::getOpenFileName(this,
|
|
tr("Open NeL data file"), ".",
|
|
tr("Particle System file (*.ps);;"));
|
|
|
|
if (!fileName.isEmpty())
|
|
{
|
|
// TODO: create method particle editor insertNewPS and multiple add
|
|
CWorkspaceNode *node = Modules::psEdit().getParticleWorkspace()->addNode(NLMISC::CFile::getFilename(fileName.toStdString()));
|
|
if (node != NULL)
|
|
{
|
|
try
|
|
{
|
|
node->loadPS();
|
|
}
|
|
catch(NLMISC::EStream &e)
|
|
{
|
|
QMessageBox::critical(this, tr("NeL particle system editor"),
|
|
QString(e.what()),
|
|
QMessageBox::Ok);
|
|
}
|
|
if (!node->isLoaded())
|
|
Modules::psEdit().getParticleWorkspace()->removeNode(Modules::psEdit().getParticleWorkspace()->getNumNode() - 1);
|
|
else
|
|
{
|
|
QModelIndex index = _treeModel->index(0, 0);
|
|
_treeModel->insertRows(node, static_cast<CParticleTreeItem*>(index.internalPointer())->childCount(), index);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWorkspacePage::createPS()
|
|
{
|
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Create new particle system file"),
|
|
".",
|
|
tr("ps files (*.ps)"));
|
|
if (!fileName.isEmpty())
|
|
{
|
|
|
|
// TODO: create method particle editor createNewPS
|
|
if (Modules::psEdit().getParticleWorkspace()->containsFile(NLMISC::CFile::getFilename(fileName.toStdString())))
|
|
{
|
|
QMessageBox::critical(this, tr("NeL particle system editor"),
|
|
tr("Failed to create new particle system"),
|
|
QMessageBox::Ok);
|
|
return;
|
|
}
|
|
CWorkspaceNode *node = Modules::psEdit().getParticleWorkspace()->addNode(NLMISC::CFile::getFilename(fileName.toStdString()));
|
|
// should always succeed because we tested if file already exists
|
|
nlassert(node);
|
|
node->createEmptyPS();
|
|
try
|
|
{
|
|
node->savePS();
|
|
node->setModified(false);
|
|
}
|
|
catch (NLMISC::Exception &e)
|
|
{
|
|
QMessageBox::critical(this, tr("NeL particle system editor"),
|
|
QString(e.what()),
|
|
QMessageBox::Ok);
|
|
return;
|
|
}
|
|
QModelIndex index = _treeModel->index(0, 0);
|
|
_treeModel->insertRows(node, static_cast<CParticleTreeItem*>(index.internalPointer())->childCount(), index);
|
|
}
|
|
}
|
|
|
|
void CWorkspacePage::removeAllPS()
|
|
{
|
|
Modules::psEdit().setActiveNode(NULL);
|
|
// TODO: create method particle editor clearParticleWorkspace
|
|
uint numNodes = Modules::psEdit().getParticleWorkspace()->getNumNode();
|
|
for(uint k = 0; k < numNodes; ++k)
|
|
Modules::psEdit().getParticleWorkspace()->removeNode((uint) 0);
|
|
|
|
_treeModel->setupModelFromWorkSpace();
|
|
}
|
|
|
|
} /* namespace NLQT */ |