Changed: #1302 Added save/saveAs action for primitive item.
--HG-- branch : gsoc2011-worldeditorqt
This commit is contained in:
parent
054e5c521c
commit
782425f9df
7 changed files with 89 additions and 8 deletions
|
@ -235,6 +235,7 @@ Node::NodeType PrimitiveNode::type() const
|
||||||
|
|
||||||
RootPrimitiveNode::RootPrimitiveNode(const QString &name, NLLIGO::CPrimitives *primitives)
|
RootPrimitiveNode::RootPrimitiveNode(const QString &name, NLLIGO::CPrimitives *primitives)
|
||||||
: PrimitiveNode(primitives->RootNode),
|
: PrimitiveNode(primitives->RootNode),
|
||||||
|
m_fileName(name),
|
||||||
m_primitives(primitives)
|
m_primitives(primitives)
|
||||||
{
|
{
|
||||||
setData(Qt::DisplayRole, name);
|
setData(Qt::DisplayRole, name);
|
||||||
|
@ -249,6 +250,17 @@ NLLIGO::CPrimitives *RootPrimitiveNode::primitives() const
|
||||||
return m_primitives;
|
return m_primitives;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RootPrimitiveNode::setFileName(const QString &fileName)
|
||||||
|
{
|
||||||
|
setData(Qt::DisplayRole, fileName);
|
||||||
|
m_fileName = fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString RootPrimitiveNode::fileName() const
|
||||||
|
{
|
||||||
|
return m_fileName;
|
||||||
|
}
|
||||||
|
|
||||||
Node::NodeType RootPrimitiveNode::type() const
|
Node::NodeType RootPrimitiveNode::type() const
|
||||||
{
|
{
|
||||||
return RootPrimitiveNodeType;
|
return RootPrimitiveNodeType;
|
||||||
|
|
|
@ -167,9 +167,13 @@ public:
|
||||||
|
|
||||||
NLLIGO::CPrimitives *primitives() const;
|
NLLIGO::CPrimitives *primitives() const;
|
||||||
|
|
||||||
|
void setFileName(const QString &fileName);
|
||||||
|
QString fileName() const;
|
||||||
virtual NodeType type() const;
|
virtual NodeType type() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
QString m_fileName;
|
||||||
NLLIGO::CPrimitives *m_primitives;
|
NLLIGO::CPrimitives *m_primitives;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "primitive_item.h"
|
#include "primitive_item.h"
|
||||||
#include "primitives_model.h"
|
#include "primitives_model.h"
|
||||||
#include "world_editor_misc.h"
|
#include "world_editor_misc.h"
|
||||||
|
#include "world_editor_constants.h"
|
||||||
|
|
||||||
// NeL includes
|
// NeL includes
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
|
@ -218,6 +219,10 @@ Path PrimitivesTreeModel::createRootPrimitiveNode(const QString &fileName, NLLIG
|
||||||
if (m_worldEditNode == 0)
|
if (m_worldEditNode == 0)
|
||||||
createWorldEditNode("NewWorldEdit");
|
createWorldEditNode("NewWorldEdit");
|
||||||
|
|
||||||
|
QString name = "NewPrimitive";
|
||||||
|
if (!fileName.isEmpty())
|
||||||
|
name = fileName;
|
||||||
|
|
||||||
// Get position
|
// Get position
|
||||||
int pos = m_worldEditNode->childCount();
|
int pos = m_worldEditNode->childCount();
|
||||||
|
|
||||||
|
@ -225,10 +230,13 @@ Path PrimitivesTreeModel::createRootPrimitiveNode(const QString &fileName, NLLIG
|
||||||
|
|
||||||
// Add root node in tree model
|
// Add root node in tree model
|
||||||
beginInsertRows(parentIndex, pos, pos);
|
beginInsertRows(parentIndex, pos, pos);
|
||||||
RootPrimitiveNode *newNode = new RootPrimitiveNode(fileName, primitives);
|
RootPrimitiveNode *newNode = new RootPrimitiveNode(name, primitives);
|
||||||
m_worldEditNode->appendChildNode(newNode);
|
m_worldEditNode->appendChildNode(newNode);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
|
||||||
|
newNode->setData(Constants::PRIMITIVE_FILE_IS_CREATED, !fileName.isEmpty());
|
||||||
|
newNode->setData(Constants::PRIMITIVE_IS_MODIFIED, false);
|
||||||
|
|
||||||
QModelIndex rootPrimIndex = index(pos, 0, parentIndex);
|
QModelIndex rootPrimIndex = index(pos, 0, parentIndex);
|
||||||
|
|
||||||
// Scan childs items and add in the tree model
|
// Scan childs items and add in the tree model
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "primitives_view.h"
|
#include "primitives_view.h"
|
||||||
#include "primitives_model.h"
|
#include "primitives_model.h"
|
||||||
#include "world_editor_actions.h"
|
#include "world_editor_actions.h"
|
||||||
|
#include "world_editor_constants.h"
|
||||||
|
|
||||||
#include "../core/core_constants.h"
|
#include "../core/core_constants.h"
|
||||||
#include "../landscape_editor/landscape_editor_constants.h"
|
#include "../landscape_editor/landscape_editor_constants.h"
|
||||||
|
@ -27,9 +28,11 @@
|
||||||
#include <nel/ligo/primitive.h>
|
#include <nel/ligo/primitive.h>
|
||||||
#include <nel/ligo/ligo_config.h>
|
#include <nel/ligo/ligo_config.h>
|
||||||
#include <nel/ligo/primitive_class.h>
|
#include <nel/ligo/primitive_class.h>
|
||||||
|
#include <nel/ligo/primitive_utils.h>
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QContextMenuEvent>
|
#include <QContextMenuEvent>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QtGui/QMenu>
|
#include <QtGui/QMenu>
|
||||||
#include <QtGui/QFileDialog>
|
#include <QtGui/QFileDialog>
|
||||||
|
|
||||||
|
@ -49,12 +52,10 @@ PrimitivesView::PrimitivesView(QWidget *parent)
|
||||||
m_unloadAction->setEnabled(false);
|
m_unloadAction->setEnabled(false);
|
||||||
|
|
||||||
m_saveAction = new QAction("Save", this);
|
m_saveAction = new QAction("Save", this);
|
||||||
m_saveAction->setEnabled(false);
|
|
||||||
m_saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE));
|
m_saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE));
|
||||||
|
|
||||||
m_saveAsAction = new QAction("Save As...", this);
|
m_saveAsAction = new QAction("Save As...", this);
|
||||||
m_saveAsAction->setIcon(QIcon(Core::Constants::ICON_SAVE_AS));
|
m_saveAsAction->setIcon(QIcon(Core::Constants::ICON_SAVE_AS));
|
||||||
m_saveAsAction->setEnabled(false);
|
|
||||||
|
|
||||||
m_loadLandAction = new QAction("Load landscape file", this);
|
m_loadLandAction = new QAction("Load landscape file", this);
|
||||||
m_loadLandAction->setIcon(QIcon(LandscapeEditor::Constants::ICON_ZONE_ITEM));
|
m_loadLandAction->setIcon(QIcon(LandscapeEditor::Constants::ICON_ZONE_ITEM));
|
||||||
|
@ -83,6 +84,8 @@ PrimitivesView::PrimitivesView(QWidget *parent)
|
||||||
connect(m_newPrimitiveAction, SIGNAL(triggered()), this, SLOT(createRootPrimitive()));
|
connect(m_newPrimitiveAction, SIGNAL(triggered()), this, SLOT(createRootPrimitive()));
|
||||||
connect(m_selectChildrenAction, SIGNAL(triggered()), this, SLOT(selectChildren()));
|
connect(m_selectChildrenAction, SIGNAL(triggered()), this, SLOT(selectChildren()));
|
||||||
connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deletePrimitives()));
|
connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deletePrimitives()));
|
||||||
|
connect(m_saveAction, SIGNAL(triggered()), this, SLOT(save()));
|
||||||
|
connect(m_saveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()));
|
||||||
|
|
||||||
#ifdef Q_OS_DARWIN
|
#ifdef Q_OS_DARWIN
|
||||||
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||||
|
@ -186,6 +189,54 @@ void PrimitivesView::selectChildren()
|
||||||
selectChildren(parentIndex);
|
selectChildren(parentIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrimitivesView::save()
|
||||||
|
{
|
||||||
|
nlassert(m_primitivesTreeModel);
|
||||||
|
|
||||||
|
QModelIndexList indexList = selectionModel()->selectedRows();
|
||||||
|
QModelIndex index = indexList.first();
|
||||||
|
|
||||||
|
RootPrimitiveNode *node = static_cast<RootPrimitiveNode *>(index.internalPointer());
|
||||||
|
|
||||||
|
if (node->data(Constants::PRIMITIVE_FILE_IS_CREATED).toBool())
|
||||||
|
{
|
||||||
|
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), node->fileName().toStdString()))
|
||||||
|
QMessageBox::warning(this, "World Editor Qt", QString("Error writing output file: %1").arg(node->fileName()));
|
||||||
|
else
|
||||||
|
node->setData(Constants::PRIMITIVE_IS_MODIFIED, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
saveAs();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrimitivesView::saveAs()
|
||||||
|
{
|
||||||
|
nlassert(m_primitivesTreeModel);
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this,
|
||||||
|
tr("Save NeL Ligo primitive file"), m_lastDir,
|
||||||
|
tr("NeL Ligo primitive file (*.primitive)"));
|
||||||
|
|
||||||
|
setCursor(Qt::WaitCursor);
|
||||||
|
if (!fileName.isEmpty())
|
||||||
|
{
|
||||||
|
QModelIndexList indexList = selectionModel()->selectedRows();
|
||||||
|
QModelIndex index = indexList.first();
|
||||||
|
|
||||||
|
RootPrimitiveNode *node = static_cast<RootPrimitiveNode *>(index.internalPointer());
|
||||||
|
|
||||||
|
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), fileName.toStdString()))
|
||||||
|
QMessageBox::warning(this, "World Editor Qt", QString("Error writing output file: %1").arg(fileName));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node->setFileName(fileName);
|
||||||
|
node->setData(Constants::PRIMITIVE_FILE_IS_CREATED, true);
|
||||||
|
node->setData(Constants::PRIMITIVE_IS_MODIFIED, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setCursor(Qt::ArrowCursor);
|
||||||
|
}
|
||||||
|
|
||||||
void PrimitivesView::deletePrimitives()
|
void PrimitivesView::deletePrimitives()
|
||||||
{
|
{
|
||||||
nlassert(m_undoStack);
|
nlassert(m_undoStack);
|
||||||
|
@ -267,8 +318,8 @@ void PrimitivesView::selectChildren(const QModelIndex &parent)
|
||||||
void PrimitivesView::fillMenu_WorldEdit(QMenu *menu)
|
void PrimitivesView::fillMenu_WorldEdit(QMenu *menu)
|
||||||
{
|
{
|
||||||
menu->addAction(m_unloadAction);
|
menu->addAction(m_unloadAction);
|
||||||
menu->addAction(m_saveAction);
|
//menu->addAction(m_saveAction);
|
||||||
menu->addAction(m_saveAsAction);
|
//menu->addAction(m_saveAsAction);
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(m_loadLandAction);
|
menu->addAction(m_loadLandAction);
|
||||||
menu->addAction(m_loadPrimitiveAction);
|
menu->addAction(m_loadPrimitiveAction);
|
||||||
|
@ -279,7 +330,7 @@ void PrimitivesView::fillMenu_WorldEdit(QMenu *menu)
|
||||||
|
|
||||||
void PrimitivesView::fillMenu_Landscape(QMenu *menu)
|
void PrimitivesView::fillMenu_Landscape(QMenu *menu)
|
||||||
{
|
{
|
||||||
menu->addAction(m_deleteAction);
|
menu->addAction(m_unloadAction);
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(m_showAction);
|
menu->addAction(m_showAction);
|
||||||
menu->addAction(m_hideAction);
|
menu->addAction(m_hideAction);
|
||||||
|
@ -289,7 +340,9 @@ void PrimitivesView::fillMenu_RootPrimitive(QMenu *menu, const QModelIndex &inde
|
||||||
{
|
{
|
||||||
menu->addAction(m_saveAction);
|
menu->addAction(m_saveAction);
|
||||||
menu->addAction(m_saveAsAction);
|
menu->addAction(m_saveAsAction);
|
||||||
|
menu->addAction(m_unloadAction);
|
||||||
fillMenu_Primitive(menu, index);
|
fillMenu_Primitive(menu, index);
|
||||||
|
menu->removeAction(m_deleteAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrimitivesView::fillMenu_Primitive(QMenu *menu, const QModelIndex &index)
|
void PrimitivesView::fillMenu_Primitive(QMenu *menu, const QModelIndex &index)
|
||||||
|
|
|
@ -67,6 +67,8 @@ private Q_SLOTS:
|
||||||
void createRootPrimitive();
|
void createRootPrimitive();
|
||||||
void selectChildren();
|
void selectChildren();
|
||||||
|
|
||||||
|
void save();
|
||||||
|
void saveAs();
|
||||||
void deletePrimitives();
|
void deletePrimitives();
|
||||||
void addNewPrimitiveByClass(int value);
|
void addNewPrimitiveByClass(int value);
|
||||||
void generatePrimitives(int value);
|
void generatePrimitives(int value);
|
||||||
|
|
|
@ -295,7 +295,7 @@ void CreateRootPrimitiveCommand::undo()
|
||||||
void CreateRootPrimitiveCommand::redo()
|
void CreateRootPrimitiveCommand::redo()
|
||||||
{
|
{
|
||||||
NLLIGO::CPrimitives *newRootPrim = new NLLIGO::CPrimitives();
|
NLLIGO::CPrimitives *newRootPrim = new NLLIGO::CPrimitives();
|
||||||
m_rootPrimIndex = m_model->createRootPrimitiveNode(m_fileName, newRootPrim);
|
m_rootPrimIndex = m_model->createRootPrimitiveNode("", newRootPrim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ void LoadRootPrimitiveCommand::redo()
|
||||||
// set the primitive context
|
// set the primitive context
|
||||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = primitives;
|
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = primitives;
|
||||||
|
|
||||||
NLLIGO::loadXmlPrimitiveFile(*primitives, m_fileName.toStdString(), *NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig);
|
NLLIGO::loadXmlPrimitiveFile(*primitives, m_fileName.toStdString(), *Utils::ligoConfig());
|
||||||
|
|
||||||
// unset the context
|
// unset the context
|
||||||
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = NULL;
|
||||||
|
|
|
@ -28,6 +28,8 @@ const int NODE_PERISTENT_INDEX = USER_TYPE + 1;
|
||||||
const int WORLD_EDITOR_NODE = USER_TYPE + 2;
|
const int WORLD_EDITOR_NODE = USER_TYPE + 2;
|
||||||
const int GRAPHICS_DATA_QT4_2D = USER_TYPE + 3;
|
const int GRAPHICS_DATA_QT4_2D = USER_TYPE + 3;
|
||||||
const int GRAPHICS_DATA_NEL3D = USER_TYPE + 4;
|
const int GRAPHICS_DATA_NEL3D = USER_TYPE + 4;
|
||||||
|
const int PRIMITIVE_IS_MODIFIED = USER_TYPE + 5;
|
||||||
|
const int PRIMITIVE_FILE_IS_CREATED = USER_TYPE + 6;
|
||||||
|
|
||||||
//settings
|
//settings
|
||||||
const char *const WORLD_EDITOR_SECTION = "WorldEditor";
|
const char *const WORLD_EDITOR_SECTION = "WorldEditor";
|
||||||
|
|
Loading…
Reference in a new issue