Changed: #1301 Polished code.

--HG--
branch : gsoc2011-worldeditorqt
This commit is contained in:
dnk-88 2011-10-03 00:40:25 +03:00
parent 4a13d9d848
commit cae892cda2
33 changed files with 109 additions and 348 deletions

View file

@ -75,7 +75,7 @@ PixmapDatabase contains the graphics for the zones
class LANDSCAPE_EDITOR_EXPORT ZoneBuilderBase
{
public:
ZoneBuilderBase(LandscapeSceneBase *landscapeScene);
explicit ZoneBuilderBase(LandscapeSceneBase *landscapeScene);
virtual ~ZoneBuilderBase();
/// Init zoneBank and init zone pixmap database

View file

@ -230,34 +230,18 @@ void BuilderZoneRegion::add(sint32 x, sint32 y, uint8 rot, uint8 flip, NLLIGO::C
}
// Delete all around all material that are not from the same as us
const std::string &curMat = zoneBankElement->getCategory ("material");
const std::string &curMat = zoneBankElement->getCategory("material");
if (curMat != STRING_NO_CAT_TYPE)
{
// This element is a valid material
// Place the piece
const std::string &eltName = zoneBankElement->getName ();
for (j = 0; j < sMask.h; ++j)
for (i = 0; i < sMask.w; ++i)
if (sMask.Tab[i + j * sMask.w])
{
set(x + i, y + j, sPosX.Tab[i + j * sPosX.w], sPosY.Tab[i + j * sPosY.w], eltName);
setRot(x + i, y + j, rot);
setFlip(x + i, y + j, flip);
}
const std::string &eltName = zoneBankElement->getName();
placePiece(x, y, rot, flip, sMask, sPosX, sPosY, eltName);
// Put all transitions between different materials
putTransitions (x, y, sMask, curMat, &tUpdate);
// Place the piece
for (j = 0; j < sMask.h; ++j)
for (i = 0; i < sMask.w; ++i)
if (sMask.Tab[i + j * sMask.w])
{
set(x + i, y + j, sPosX.Tab[i + j * sPosX.w], sPosY.Tab[i + j * sPosY.w], eltName);
setRot(x + i, y + j, rot);
setFlip(x + i, y + j, flip);
}
placePiece(x, y, rot, flip, sMask, sPosX, sPosY, eltName);
}
}
@ -449,21 +433,14 @@ bool BuilderZoneRegion::addNotPropagate (sint32 x, sint32 y, uint8 rot, uint8 fl
del(x + i, y + j, true, &tUpdate);
}
const std::string &curMat = zoneBankElement->getCategory ("material");
const std::string &curMat = zoneBankElement->getCategory("material");
if (curMat != STRING_NO_CAT_TYPE)
{
// This element is a valid material
// Place the piece
const std::string &EltName = zoneBankElement->getName ();
for (j = 0; j < sMask.h; ++j)
for (i = 0; i < sMask.w; ++i)
if (sMask.Tab[i + j * sMask.w])
{
set (x + i, y + j, sPosX.Tab[i + j * sPosX.w], sPosY.Tab[i + j * sPosY.w], EltName);
setRot (x + i, y + j, rot);
setFlip (x + i, y + j, flip);
}
const std::string &eltName = zoneBankElement->getName();
placePiece(x, y, rot, flip, sMask, sPosX, sPosY, eltName);
}
return true;
@ -803,11 +780,10 @@ void BuilderZoneRegion::addTransition (sint32 x, sint32 y, uint8 rot, uint8 flip
}
}
void BuilderZoneRegion::addToUpdateAndCreate(BuilderZoneRegion *builderZoneRegion, sint32 sharePos, sint32 x, sint32 y, const std::string &newMat, void *pInt1, void *pInt2)
void BuilderZoneRegion::addToUpdateAndCreate(BuilderZoneRegion *builderZoneRegion, sint32 sharePos, sint32 x, sint32 y,
const std::string &newMat, ToUpdate *ptCreate, ToUpdate *ptUpdate)
{
const NLLIGO::CZoneRegion &zoneRegion = m_zoneBuilder->zoneRegion(m_regionId)->ligoZoneRegion();
ToUpdate *ptCreate = reinterpret_cast<ToUpdate *>(pInt1);
ToUpdate *ptUpdate = reinterpret_cast<ToUpdate *>(pInt2);
sint32 stride = (1 + zoneRegion.getMaxX() - zoneRegion.getMinX());
ZonePosition zonePos;
@ -828,11 +804,10 @@ void BuilderZoneRegion::addToUpdateAndCreate(BuilderZoneRegion *builderZoneRegio
}
void BuilderZoneRegion::putTransitions (sint32 inX, sint32 inY, const NLLIGO::SPiece &mask, const std::string &matName,
void *pInternal)
ToUpdate *ptUpdate)
{
const NLLIGO::CZoneRegion &zoneRegion = m_zoneBuilder->zoneRegion(m_regionId)->ligoZoneRegion();
ToUpdate tCreate; // Transition to create
ToUpdate *ptUpdate = reinterpret_cast<ToUpdate *>(pInternal); // Transition to update
sint32 i, j, k, l, m;
sint32 x = inX, y = inY;
@ -883,10 +858,8 @@ void BuilderZoneRegion::putTransitions (sint32 inX, sint32 inY, const NLLIGO::SP
if ( (corner < 4) && (m != 0) )
{
// The material can't be paused
dataZoneTemp.sharingMatNames[0] = STRING_UNUSED;
dataZoneTemp.sharingMatNames[1] = STRING_UNUSED;
dataZoneTemp.sharingMatNames[2] = STRING_UNUSED;
dataZoneTemp.sharingMatNames[3] = STRING_UNUSED;
for (int t = 0; i < 4; ++t)
dataZoneTemp.sharingMatNames[t] = STRING_UNUSED;
// Don't propagate any more
}
@ -1659,16 +1632,13 @@ void BuilderZoneRegion::tryPath(uint32 posA, uint32 posB, std::vector<uint32> &p
}
}
void BuilderZoneRegion::del(sint32 x, sint32 y, bool transition, void *pInternal)
void BuilderZoneRegion::del(sint32 x, sint32 y, bool transition, ToUpdate *pUpdate)
{
const NLLIGO::CZoneRegion &zoneRegion = m_zoneBuilder->zoneRegion(m_regionId)->ligoZoneRegion();
if (!m_zoneBuilder->getZoneMask(x, y))
return;
const std::string &nameZone = zoneRegion.getName(x, y);
ToUpdate *pUpdate = reinterpret_cast<ToUpdate *>(pInternal);
NLLIGO::CZoneBankElement *zoneBankElement = m_zoneBuilder->getZoneBank().getElementByZoneName(nameZone);
if (zoneBankElement != NULL)
{
@ -2108,4 +2078,18 @@ void BuilderZoneRegion::resize (sint32 newMinX, sint32 newMaxX, sint32 newMinY,
}
}
void BuilderZoneRegion::placePiece(sint32 x, sint32 y, uint8 rot, uint8 flip,
NLLIGO::SPiece &sMask, NLLIGO::SPiece &sPosX, NLLIGO::SPiece &sPosY,
const std::string &eltName)
{
for (int j = 0; j < sMask.h; ++j)
for (int i = 0; i < sMask.w; ++i)
if (sMask.Tab[i + j * sMask.w])
{
set(x + i, y + j, sPosX.Tab[i + j * sPosX.w], sPosY.Tab[i + j * sPosY.w], eltName);
setRot(x + i, y + j, rot);
setFlip(x + i, y + j, flip);
}
}
} /* namespace LandscapeEditor */

View file

@ -33,13 +33,15 @@
namespace LandscapeEditor
{
class ZoneBuilder;
class ToUpdate;
// CZoneRegion contains informations about the zones painted
// CZoneRegion contains informations about the zones painted.
// (Legacy class from old world editor. It needs to refactoring!)
class BuilderZoneRegion
{
public:
BuilderZoneRegion(uint regionId);
explicit BuilderZoneRegion(uint regionId);
// New interface
bool init(ZoneBuilder *zoneBuilder);
@ -51,7 +53,7 @@ public:
/// Brutal adding a zone over empty space do not propagate in any way -> can result
/// in inconsistency when trying the propagation mode
void addForce (sint32 x, sint32 y, uint8 rot, uint8 flip, NLLIGO::CZoneBankElement *zoneBankElement);
void del(sint32 x, sint32 y, bool transition = false, void *pInternal = NULL);
void del(sint32 x, sint32 y, bool transition = false, ToUpdate *pUpdate = 0);
void move(sint32 x, sint32 y);
uint32 countZones();
void reduceMin();
@ -69,21 +71,26 @@ private:
void addTransition(sint32 x, sint32 y, uint8 rot, uint8 flip, NLLIGO::CZoneBankElement *zoneBankElement);
void addToUpdateAndCreate(BuilderZoneRegion *builderZoneRegion, sint32 sharePos, sint32 x, sint32 y, const std::string &newMat, void *pInt1, void *pInt2);
void addToUpdateAndCreate(BuilderZoneRegion *builderZoneRegion, sint32 sharePos, sint32 x, sint32 y,
const std::string &newMat, ToUpdate *ptCreate, ToUpdate *ptUpdate);
void putTransitions(sint32 x, sint32 y, const NLLIGO::SPiece &mask, const std::string &matName, void *pInternal);
void updateTrans(sint32 x, sint32 y, NLLIGO::CZoneBankElement *zoneBankElement = NULL);
void putTransitions(sint32 x, sint32 y, const NLLIGO::SPiece &mask, const std::string &matName, ToUpdate *ptUpdate);
void updateTrans(sint32 x, sint32 y, NLLIGO::CZoneBankElement *zoneBankElement = 0);
std::string getNextMatInTree(const std::string &matA, const std::string &matB);
/// Find the fastest way between posA and posB in the MatTree (Dijkstra)
void tryPath(uint32 posA, uint32 posB, std::vector<uint32> &path);
void set(sint32 x, sint32 y, sint32 posX, sint32 posY, const std::string &zoneName, bool transition=false);
void set(sint32 x, sint32 y, sint32 posX, sint32 posY, const std::string &zoneName, bool transition = false);
void setRot(sint32 x, sint32 y, uint8 rot);
void setFlip(sint32 x, sint32 y, uint8 flip);
void resize(sint32 newMinX, sint32 newMaxX, sint32 newMinY, sint32 newMaxY);
void placePiece(sint32 x, sint32 y, uint8 rot, uint8 flip,
NLLIGO::SPiece &sMask, NLLIGO::SPiece &sPosX, NLLIGO::SPiece &sPosY,
const std::string &eltName);
uint m_regionId;
// To use the global mask

View file

@ -27,41 +27,6 @@
namespace LandscapeEditor
{
OpenLandscapeCommand::OpenLandscapeCommand(const QString &fileName, QUndoCommand *parent)
: QUndoCommand(parent),
m_fileName(fileName)
{
}
OpenLandscapeCommand::~OpenLandscapeCommand()
{
}
void OpenLandscapeCommand::undo()
{
}
void OpenLandscapeCommand::redo()
{
}
NewLandscapeCommand::NewLandscapeCommand(QUndoCommand *parent)
: QUndoCommand(parent)
{
}
NewLandscapeCommand::~NewLandscapeCommand()
{
}
void NewLandscapeCommand::undo()
{
}
void NewLandscapeCommand::redo()
{
}
LigoTileCommand::LigoTileCommand(const LigoData &data, const ZonePosition &zonePos,
ZoneBuilder *zoneBuilder, LandscapeScene *scene,
QUndoCommand *parent)

View file

@ -32,40 +32,6 @@
namespace LandscapeEditor
{
/**
@class OpenLandscapeCommand
@brief
@details
*/
class OpenLandscapeCommand: public QUndoCommand
{
public:
OpenLandscapeCommand(const QString &fileName, QUndoCommand *parent = 0);
virtual ~OpenLandscapeCommand();
virtual void undo();
virtual void redo();
private:
QString m_fileName;
};
/**
@class NewLandscapeCommand
@brief
@details
*/
class NewLandscapeCommand: public QUndoCommand
{
public:
NewLandscapeCommand(QUndoCommand *parent = 0);
virtual ~NewLandscapeCommand();
virtual void undo();
virtual void redo();
private:
};
/**
@class LigoTileCommand
@brief

View file

@ -34,11 +34,6 @@ namespace NLMISC
class CLibraryContext;
}
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace LandscapeEditor
{
class LandscapeEditorWindow;
@ -70,7 +65,7 @@ class LandscapeEditorContext: public Core::IContext
{
Q_OBJECT
public:
LandscapeEditorContext(QObject *parent = 0);
explicit LandscapeEditorContext(QObject *parent = 0);
virtual ~LandscapeEditorContext() {}
virtual QString id() const

View file

@ -262,7 +262,7 @@ int LandscapeEditorWindow::createLandscape(const QString &fileName)
if (id == -1)
{
QMessageBox::critical(this, "Landscape Editor", "Cannot add this zone because it overlaps existing ones");
QMessageBox::critical(this, "Landscape Editor", tr("Cannot add this zone because it overlaps existing ones"));
return -1;
}
ZoneRegionObject *zoneRegion = m_zoneBuilder->zoneRegion(id);

View file

@ -37,7 +37,7 @@ class LandscapeEditorWindow: public QMainWindow
Q_OBJECT
public:
LandscapeEditorWindow(QWidget *parent = 0);
explicit LandscapeEditorWindow(QWidget *parent = 0);
~LandscapeEditorWindow();
QUndoStack *undoStack() const;

View file

@ -397,26 +397,6 @@ void LandscapeScene::drawForeground(QPainter *painter, const QRectF &rect)
QGraphicsScene::drawForeground(painter, rect);
if ((m_zoneBuilder->currentIdZoneRegion() != -1) && (m_transitionMode))
drawTransition(painter, rect);
/*
// Render debug text (slow!)
painter->setPen(QPen(Qt::white, 0.5, Qt::SolidLine));
int left = int(floor(rect.left() / m_cellSize));
int right = int(floor(rect.right() / m_cellSize));
int top = int(floor(rect.top() / m_cellSize));
int bottom = int(floor(rect.bottom() / m_cellSize));
for (int i = left; i < right; ++i)
{
for (int j = top; j < bottom; ++j)
{
LigoData data;
m_zoneBuilder->currentZoneRegion()->ligoData(data, i, -j);
painter->drawText(i * m_cellSize + 10, j * m_cellSize + 10, QString("%1 %2 %3 %4").arg(i).arg(j).arg(data.posX).arg(data.posY));
}
}
*/
}
void LandscapeScene::drawTransition(QPainter *painter, const QRectF &rect)

View file

@ -185,24 +185,15 @@ void LandscapeView::setCenter(const QPointF &centerPoint)
//We need to clamp the center. The centerPoint is too large
if (centerPoint.x() > bounds.x() + bounds.width())
{
m_currentCenterPoint.setX(bounds.x() + bounds.width());
}
else if(centerPoint.x() < bounds.x())
{
m_currentCenterPoint.setX(bounds.x());
}
if(centerPoint.y() > bounds.y() + bounds.height())
{
m_currentCenterPoint.setY(bounds.y() + bounds.height());
}
else if(centerPoint.y() < bounds.y())
{
m_currentCenterPoint.setY(bounds.y());
}
}
}
//Update the scrollbars
@ -230,7 +221,6 @@ void LandscapeView::drawForeground(QPainter *painter, const QRectF &rect)
if (transform().m11() > m_maxViewText)
{
painter->setPen(QPen(Qt::white, 0.5, Qt::SolidLine));
//painter->setFont(QFont("Helvetica [Cronyx]", 12));
drawZoneNames(painter, rect);
}
}

View file

@ -37,7 +37,7 @@ class LANDSCAPE_EDITOR_EXPORT LandscapeView: public QGraphicsView
Q_OBJECT
public:
LandscapeView(QWidget *parent = 0);
explicit LandscapeView(QWidget *parent = 0);
virtual ~LandscapeView();
//Set the current centerpoint in the

View file

@ -39,7 +39,7 @@ class ListZonesWidget: public QWidget
Q_OBJECT
public:
ListZonesWidget(QWidget *parent = 0);
explicit ListZonesWidget(QWidget *parent = 0);
~ListZonesWidget();
void updateUi();

View file

@ -64,7 +64,7 @@ bool PixmapDatabase::loadPixmaps(const QString &zonePath, NLLIGO::CZoneBank &zon
zoneBank.getCategoryValues ("zone", listNames);
if (displayProgress)
{
progressDialog = new QProgressDialog("Loading ligo zones.", "Cancel", 0, listNames.size());
progressDialog = new QProgressDialog(QObject::tr("Loading ligo zones."), QObject::tr("Cancel"), 0, listNames.size());
progressDialog->show();
}

View file

@ -39,7 +39,7 @@ namespace LandscapeEditor
class LANDSCAPE_EDITOR_EXPORT PixmapDatabase
{
public:
PixmapDatabase(int textureSize = 256);
explicit PixmapDatabase(int textureSize = 256);
~PixmapDatabase();
/// Load all images(png) from zonePath, list images gets from zoneBank

View file

@ -30,7 +30,7 @@ class SnapshotDialog: public QDialog
Q_OBJECT
public:
SnapshotDialog(QWidget *parent = 0);
explicit SnapshotDialog(QWidget *parent = 0);
~SnapshotDialog();
bool isCustomSize() const;

View file

@ -118,12 +118,6 @@ void ZoneRegionObject::setFileName(const std::string &fileName)
void ZoneRegionObject::ligoData(LigoData &data, const sint32 x, const sint32 y)
{
/*
nlassert((x >= m_zoneRegion.getMinX()) &&
(x <= m_zoneRegion.getMaxX()) &&
(y >= m_zoneRegion.getMinY()) &&
(y <= m_zoneRegion.getMaxY()));
*/
data.posX = m_zoneRegion.getPosX(x, y);
data.posY = m_zoneRegion.getPosY(x, y);
data.zoneName = m_zoneRegion.getName(x, y);
@ -141,12 +135,6 @@ void ZoneRegionObject::ligoData(LigoData &data, const sint32 x, const sint32 y)
void ZoneRegionObject::setLigoData(const LigoData &data, const sint32 x, const sint32 y)
{
/*
nlassert((x >= m_zoneRegion.getMinX()) &&
(x <= m_zoneRegion.getMaxX()) &&
(y >= m_zoneRegion.getMinY()) &&
(y <= m_zoneRegion.getMaxY()));
*/
m_zoneRegion.setPosX(x, y, data.posX);
m_zoneRegion.setPosY(x, y, data.posY);
m_zoneRegion.setName(x, y, data.zoneName);

View file

@ -215,20 +215,18 @@ PrimitiveNode::PrimitiveNode(NLLIGO::IPrimitive *primitive)
m_primitive->getPropertyByName("class", className);
// Set Icon
QString nameIcon = QString("./old_ico/%1.ico").arg(className.c_str());
QString nameIcon = QString("%1/%2.ico").arg(Constants::PATH_TO_OLD_ICONS).arg(className.c_str());
QIcon icon(nameIcon);
if (!QFile::exists(nameIcon))
{
if (primitive->getParent() == NULL)
icon = QIcon("./old_ico/root.ico");
icon = QIcon(Constants::ICON_ROOT_PRIMITIVE);
else if (primitive->getNumChildren() == 0)
icon = QIcon("./old_ico/property.ico");
icon = QIcon(Constants::ICON_PROPERTY);
else
icon = QIcon("./old_ico/folder_h.ico");
icon = QIcon(Constants::ICON_FOLDER);
}
setData(Qt::DecorationRole, icon);
//setData(3, QString(className.c_str()));
}
PrimitiveNode::~PrimitiveNode()
@ -242,7 +240,7 @@ NLLIGO::IPrimitive *PrimitiveNode::primitive() const
const NLLIGO::CPrimitiveClass *PrimitiveNode::primitiveClass() const
{
return NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig->getPrimitiveClass(*m_primitive);
return Utils::ligoConfig()->getPrimitiveClass(*m_primitive);
}
RootPrimitiveNode *PrimitiveNode::rootPrimitiveNode()
@ -250,7 +248,7 @@ RootPrimitiveNode *PrimitiveNode::rootPrimitiveNode()
Node *node = this;
while (node && (node->type() != Node::RootPrimitiveNodeType))
node = node->parent();
return (RootPrimitiveNode *)node;
return static_cast<RootPrimitiveNode *>(node);
}
Node::NodeType PrimitiveNode::type() const

View file

@ -30,10 +30,7 @@
namespace WorldEditor
{
class WorldEditNode;
class RootPrimitiveNode;
class LandscapeNode;
class PrimitiveNode;
/*
@class Node
@ -150,7 +147,7 @@ private:
class PrimitiveNode: public Node
{
public:
PrimitiveNode(NLLIGO::IPrimitive *primitive);
explicit PrimitiveNode(NLLIGO::IPrimitive *primitive);
virtual ~PrimitiveNode();
NLLIGO::IPrimitive *primitive() const;

View file

@ -183,6 +183,10 @@ Node *PrimitivesTreeModel::pathToNode(const Path &path)
void PrimitivesTreeModel::createWorldEditNode(const QString &fileName)
{
// World edit node already is created, if yes is showing error message box
if (m_worldEditNode != 0)
nlerror("World edit node already is created.");
beginResetModel();
m_worldEditNode = new WorldEditNode(fileName);
m_rootNode->appendChildNode(m_worldEditNode);

View file

@ -39,7 +39,8 @@ const int AtTheEnd = -1;
typedef QPair<int, int> PathItem;
/*
@typedef Path
@brief It store a list of row and column numbers which have to walk through from the root index of the model to reach the need item
@brief It store a list of row and column numbers which have to walk through from the root index of the model to reach the need item.
It is used for undo/redo commands.
*/
typedef QList<PathItem> Path;
@ -53,7 +54,7 @@ class PrimitivesTreeModel : public QAbstractItemModel
Q_OBJECT
public:
PrimitivesTreeModel(QObject *parent = 0);
explicit PrimitivesTreeModel(QObject *parent = 0);
~PrimitivesTreeModel();
QVariant data(const QModelIndex &index, int role) const;
@ -92,7 +93,6 @@ public:
private:
void createChildNodes(NLLIGO::IPrimitive *primitive, int pos, const QModelIndex &parent);
void removeChildNodes(Node *node, const QModelIndex &parent);
Node *m_rootNode;

View file

@ -61,7 +61,7 @@ PrimitivesView::PrimitivesView(QWidget *parent)
m_loadLandAction->setIcon(QIcon(LandscapeEditor::Constants::ICON_ZONE_ITEM));
m_loadPrimitiveAction = new QAction("Load primitive file", this);
m_loadPrimitiveAction->setIcon(QIcon("./old_ico/root.ico"));
m_loadPrimitiveAction->setIcon(QIcon(Constants::ICON_ROOT_PRIMITIVE));
m_newPrimitiveAction = new QAction("New primitive", this);
@ -132,7 +132,7 @@ void PrimitivesView::loadRootPrimitive()
if (!fileNames.isEmpty())
{
if (fileNames.count() > 1)
m_undoStack->beginMacro("Load primitive files");
m_undoStack->beginMacro(tr("Load primitive files"));
Q_FOREACH(QString fileName, fileNames)
{
@ -160,7 +160,7 @@ void PrimitivesView::loadLandscape()
if (!fileNames.isEmpty())
{
if (fileNames.count() > 1)
m_undoStack->beginMacro("Load land files");
m_undoStack->beginMacro(tr("Load land files"));
Q_FOREACH(QString fileName, fileNames)
{
@ -206,7 +206,7 @@ void PrimitivesView::save()
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()));
QMessageBox::warning(this, "World Editor Qt", tr("Error writing output file: %1").arg(node->fileName()));
else
node->setData(Constants::PRIMITIVE_IS_MODIFIED, false);
}
@ -231,7 +231,7 @@ void PrimitivesView::saveAs()
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));
QMessageBox::warning(this, "World Editor Qt", tr("Error writing output file: %1").arg(fileName));
else
{
node->setFileName(fileName);
@ -407,7 +407,7 @@ void PrimitivesView::fillMenu_Primitive(QMenu *menu, const QModelIndex &index)
QSignalMapper *addSignalMapper = new QSignalMapper(menu);
QSignalMapper *generateSignalMapper = new QSignalMapper(menu);
QSignalMapper *openSignalMapper = new QSignalMapper(menu);
//QSignalMapper *openSignalMapper = new QSignalMapper(menu);
connect(addSignalMapper, SIGNAL(mapped(int)), this, SLOT(addNewPrimitiveByClass(int)));
connect(generateSignalMapper, SIGNAL(mapped(int)), this, SLOT(generatePrimitives(int)));
//connect(openSignalMapper, SIGNAL(mapped(int)), this, SLOT(openItem(int)));
@ -427,10 +427,10 @@ void PrimitivesView::fillMenu_Primitive(QMenu *menu, const QModelIndex &index)
QString className = primClass->DynamicChildren[i].ClassName.c_str();
// Get icon
QIcon icon(QString("./old_ico/%1.ico").arg(className));
QIcon icon(QString("%1/%2.ico").arg(Constants::PATH_TO_OLD_ICONS).arg(className));
// Create and add action in popur menu
QAction *action = menu->addAction(icon, QString("Add %1").arg(className));
QAction *action = menu->addAction(icon, tr("Add %1").arg(className));
addSignalMapper->setMapping(action, i);
connect(action, SIGNAL(triggered()), addSignalMapper, SLOT(map()));
}
@ -448,35 +448,11 @@ void PrimitivesView::fillMenu_Primitive(QMenu *menu, const QModelIndex &index)
QString childName = primClass->GeneratedChildren[i].ClassName.c_str();
// Create and add action in popur menu
QAction *action = menu->addAction(QString("Generate %1").arg(childName));
QAction *action = menu->addAction(tr("Generate %1").arg(childName));
generateSignalMapper->setMapping(action, i);
connect(generateSignalMapper, SIGNAL(triggered()), addSignalMapper, SLOT(map()));
connect(action, SIGNAL(triggered()), generateSignalMapper, SLOT(map()));
}
}
/*
// What class is it ?
if (primClass)
{
// Look for files
std::vector<std::string> filenames;
// Filenames
buildFilenameVector (*Selection.front (), filenames);
// File names ?
if (!filenames.empty ())
{
// Add separator
popurMenu->addSeparator();
// Found ?
for (uint i = 0; i < filenames.size(); i++)
{
// Add a menu entry
pMenu->AppendMenu (MF_STRING, ID_EDIT_OPEN_FILE_BEGIN+i, ("Open "+NLMISC::CFile::getFilename (filenames[i])).c_str ());
}
}
*/
}
} /* namespace WorldEditor */

View file

@ -53,7 +53,7 @@ class PrimitivesView : public QTreeView
Q_OBJECT
public:
PrimitivesView(QWidget *parent = 0);
explicit PrimitivesView(QWidget *parent = 0);
~PrimitivesView();
void setUndoStack(QUndoStack *undoStack);

View file

@ -45,7 +45,7 @@ class PropertyEditorWidget: public QWidget
Q_OBJECT
public:
PropertyEditorWidget(QWidget *parent = 0);
explicit PropertyEditorWidget(QWidget *parent = 0);
~PropertyEditorWidget();
public Q_SLOTS:

View file

@ -103,13 +103,11 @@ void addNewGraphicsItems(const QModelIndex &primIndex, PrimitivesTreeModel *mode
QPolygonF polygon;
vec = primitive->getPrimVector();
int sizeVec = primitive->getNumVector();
for (int i = 0; i < sizeVec; ++i)
{
polygon << QPointF(vec->x, -vec->y + cellSize);
++vec;
}
item = scene->addWorldItemPath(polygon, showArrow);
break;
}
@ -118,7 +116,6 @@ void addNewGraphicsItems(const QModelIndex &primIndex, PrimitivesTreeModel *mode
QPolygonF polygon;
vec = primitive->getPrimVector();
int sizeVec = primitive->getNumVector();
for (int i = 0; i < sizeVec; ++i)
{
polygon << QPointF(vec->x, cellSize - vec->y);
@ -133,30 +130,7 @@ void addNewGraphicsItems(const QModelIndex &primIndex, PrimitivesTreeModel *mode
{
// Get color from world_editor_classes.xml
NLMISC::CRGBA color = Utils::ligoConfig()->getPrimitiveColor(*primitive);
/*
// Configurations (from world_editor_primitive_configuration.xml)
const std::vector<NLLIGO::CPrimitiveConfigurations> &configurations = Utils::ligoConfig()->getPrimitiveConfiguration();
// Look for the configuration
sint search = 0;
bool colorFound = false;
while ((search = theApp.getActiveConfiguration (*primitive, search)) != -1)
{
// Configuration activated ?
if (theApp.Configurations[search].Activated)
{
colorFound = true;
mainColor = configurations[search].Color;
break;
}
search++;
}
// try to get the primitive color ?
//if (!colorFound)*/
primitive->getPropertyByName ("Color", color);
item->setColor(QColor(color.R, color.G, color.B));
QVariant variantNode;

View file

@ -44,7 +44,10 @@ const char *const PRIMITIVE_CLASS_FILENAME = "WorldEditorPrimitiveClassFilename"
//resources
const char *const ICON_WORLD_EDITOR = ":/icons/ic_nel_world_editor.png";
const char *const ICON_ROOT_PRIMITIVE = "./old_ico/root.ico";
const char *const ICON_PROPERTY = "./old_ico/property.ico";
const char *const ICON_FOLDER = "./old_ico/folder_h.ico";
const char *const PATH_TO_OLD_ICONS = "./old_ico";
} // namespace Constants
} // namespace WorldEditor

View file

@ -1,6 +1,5 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 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 Affero General Public License as
@ -99,7 +98,6 @@ bool loadWorldEditFile(const std::string &fileName, WorldEditList &worldEditList
// Good header ?
if (strcmp((const char *)(rootNode->name), "NEL_WORLD_EDITOR_PROJECT") == 0)
{
// Read the version
int version = -1;
// Read the parameters
@ -112,10 +110,7 @@ bool loadWorldEditFile(const std::string &fileName, WorldEditList &worldEditList
}
if (version == -1)
{
// Error
syntaxError(fileName.c_str(), rootNode, "No version node");
}
else
{
// Old format,
@ -213,9 +208,7 @@ bool loadWorldEditFile(const std::string &fileName, WorldEditList &worldEditList
}
}
else
{
nlerror("Can't open the file %s for reading.", fileName.c_str());
}
return result;
}
@ -255,12 +248,10 @@ void initPrimitiveParameters(const NLLIGO::CPrimitiveClass &primClass, NLLIGO::I
if (cp < primClass.Parameters.size())
type = primClass.Parameters[cp].Type;
// Name ?
if (initParameters[p].Name == "name")
type = NLLIGO::CPrimitiveClass::CParameter::String;
// Continue ?
if (cp<primClass.Parameters.size () || (initParameters[p].Name == "name"))
if (cp < primClass.Parameters.size () || (initParameters[p].Name == "name"))
{
// Default value ?
if (!parameter.DefaultValue.empty())
@ -294,17 +285,13 @@ void initPrimitiveParameters(const NLLIGO::CPrimitiveClass &primClass, NLLIGO::I
{
bool Visible = false;
if (cp < primClass.Parameters.size() && !primClass.Parameters[cp].Visible)
{
Visible = true;
}
for (size_t i = 0; i < parameter.DefaultValue.size(); ++i)
{
// Generate a unique id ?
if (parameter.DefaultValue[i].GenID)
{
Visible = true;
}
}
if (Visible)
{
// Remove this property
@ -317,14 +304,10 @@ void initPrimitiveParameters(const NLLIGO::CPrimitiveClass &primClass, NLLIGO::I
{
// Generate a unique id ?
if (parameter.DefaultValue[i].GenID)
{
str->StringArray[i] = NLMISC::toString(getUniqueId());
}
else
{
str->StringArray[i] = "";
}
}
primitive.addPropertyByName(parameter.Name.c_str(), str);
}
break;
@ -347,7 +330,7 @@ NLLIGO::IPrimitive *createPrimitive(const char *className, const char *primName,
NLLIGO::IPrimitive *parent)
{
// Get the prim class
const NLLIGO::CPrimitiveClass *primClass = NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig->getPrimitiveClass(className);
const NLLIGO::CPrimitiveClass *primClass = ligoConfig()->getPrimitiveClass(className);
if (primClass)
{
// Create the base primitive
@ -438,41 +421,18 @@ NLLIGO::IPrimitive *createPrimitive(const char *className, const char *primName,
return NULL;
}
// Prim file ?
if (primClass->Type == NLLIGO::CPrimitiveClass::Bitmap)
{
// Create a dialog file
//CFileDialogEx dialog (BASE_REGISTRY_KEY, "image", TRUE, primClass->FileExtension.c_str (), NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
// (primClass->FileType+" (*."+primClass->FileExtension+")|*."+primClass->FileExtension+"|All Files (*.*)|*.*||").c_str (), getMainFrame ());
//if (dialog.DoModal() == IDOK)
//{
// Save filename
// static_cast<CPrimBitmap*>(primitive)->init(dialog.GetPathName ());
//}
}
// Continue ?
if (primitive)
{
// Auto init ?
if (!primClass->AutoInit)
{
// Make a vector of locator
//CDatabaseLocatorPointer locatorPtr;
//getLocator (locatorPtr, locator);
std::list<NLLIGO::IPrimitive *> locators;
//locators.push_back (const_cast<IPrimitive*> (locatorPtr.Primitive));
// Yes, go
//CDialogProperties dialogProperty (locators, getMainFrame ());
//dialogProperty.DoModal ();
// TODO
}
// Eval the default name property
std::string name;
if (!primitive->getPropertyByName ("name", name) || name.empty())
{
const NLLIGO::CPrimitiveClass *primClass = NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig->getPrimitiveClass(*primitive);
const NLLIGO::CPrimitiveClass *primClass = ligoConfig()->getPrimitiveClass(*primitive);
if (primClass)
{
for (size_t i = 0; i < primClass->Parameters.size(); ++i)
@ -491,17 +451,13 @@ NLLIGO::IPrimitive *createPrimitive(const char *className, const char *primName,
}
}
// Init primitive default values
primitive->initDefaultValues(*NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig);
primitive->initDefaultValues(*ligoConfig());
}
// Done
return primitive;
}
else
{
nlerror("Unknown primitive class name : %s", className);
}
return 0;
}
@ -521,11 +477,10 @@ void deletePrimitive(NLLIGO::IPrimitive *primitive)
bool updateDefaultValues(NLLIGO::IPrimitive *primitive)
{
// Modified
bool modified = false;
// Get the prim class
const NLLIGO::CPrimitiveClass *primClass = NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig->getPrimitiveClass(*primitive);
const NLLIGO::CPrimitiveClass *primClass = ligoConfig()->getPrimitiveClass(*primitive);
nlassert(primClass);
if (primClass)

View file

@ -1,6 +1,5 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 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 Affero General Public License as

View file

@ -36,11 +36,6 @@ namespace NLMISC
class CLibraryContext;
}
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace WorldEditor
{
class WorldEditorWindow;

View file

@ -45,17 +45,15 @@ WorldEditorScene::WorldEditorScene(int sizeCell, PrimitivesTreeModel *model, QUn
// TODO: get params from settings
setSceneRect(QRectF(-20 * 160, -20 * 160, 256 * 160, 256 * 160));
m_pen1.setColor(QColor(50, 255, 155));
m_pen1.setWidth(0);
m_greenPen.setColor(QColor(50, 255, 155));
m_greenPen.setWidth(0);
m_greenBrush.setColor(QColor(50, 255, 155, 80));
m_greenBrush.setStyle(Qt::SolidPattern);
m_brush1.setColor(QColor(50, 255, 155, 80));
m_brush1.setStyle(Qt::SolidPattern);
m_pen2.setColor(QColor(100, 0, 255));
m_pen2.setWidth(0);
m_brush2.setColor(QColor(100, 0, 255, 80));
m_brush2.setStyle(Qt::SolidPattern);
m_purplePen.setColor(QColor(100, 0, 255));
m_purplePen.setWidth(0);
m_purpleBrush.setColor(QColor(100, 0, 255, 80));
m_purpleBrush.setStyle(Qt::SolidPattern);
}
WorldEditorScene::~WorldEditorScene()
@ -67,8 +65,6 @@ AbstractWorldItem *WorldEditorScene::addWorldItemPoint(const QPointF &point, con
{
WorldItemPoint *item = new WorldItemPoint(point, angle, radius, showArrow);
addItem(item);
m_worldItems.push_back(item);
return item;
}
@ -76,8 +72,6 @@ AbstractWorldItem *WorldEditorScene::addWorldItemPath(const QPolygonF &polyline,
{
WorldItemPath *item = new WorldItemPath(polyline);
addItem(item);
m_worldItems.push_back(item);
return item;
}
@ -85,8 +79,6 @@ AbstractWorldItem *WorldEditorScene::addWorldItemZone(const QPolygonF &polygon)
{
WorldItemZone *item = new WorldItemZone(polygon);
addItem(item);
m_worldItems.push_back(item);
return item;
}
@ -96,10 +88,6 @@ void WorldEditorScene::removeWorldItem(QGraphicsItem *item)
m_selectedItems.clear();
m_editedSelectedItems = false;
m_firstSelection = false;
// TODO
AbstractWorldItem *worldItem = qgraphicsitem_cast<AbstractWorldItem *>(item);
m_worldItems.removeOne(worldItem);
delete item;
}
@ -174,18 +162,18 @@ void WorldEditorScene::drawForeground(QPainter *painter, const QRectF &rect)
if ((m_selectionArea.left() != 0) && (m_selectionArea.right() != 0))
{
// Draw selection area
if (m_selectionArea.left() < m_selectionArea.right())
{
painter->setPen(m_pen1);
painter->setBrush(m_brush1);
painter->setPen(m_greenPen);
painter->setBrush(m_greenBrush);
}
else
{
painter->setPen(m_pen2);
painter->setBrush(m_brush2);
painter->setPen(m_purplePen);
painter->setBrush(m_purpleBrush);
}
painter->drawRect(m_selectionArea);
}
}

View file

@ -110,15 +110,14 @@ private:
void checkUndo();
QPen m_pen1, m_pen2;
QBrush m_brush1, m_brush2;
QPen m_greenPen, m_purplePen;
QBrush m_greenBrush, m_purpleBrush;
QPointF m_firstPick, m_scaleFactor, m_pivot;
QRectF m_selectionArea;
qreal m_firstPickX, m_firstPickY, m_angle;
QList<QGraphicsItem *> m_selectedItems;
QList<QGraphicsItem *> m_selectedPoints;
QList<AbstractWorldItem *> m_worldItems;
QList<QPolygonF> m_polygons;
bool m_editedSelectedItems, m_firstSelection;
uint m_lastPickedPrimitive;

View file

@ -36,7 +36,7 @@ class WorldEditorSettingsPage : public Core::IOptionsPage
{
Q_OBJECT
public:
WorldEditorSettingsPage(QObject *parent = 0);
explicit WorldEditorSettingsPage(QObject *parent = 0);
virtual ~WorldEditorSettingsPage() {}
virtual QString id() const;

View file

@ -63,7 +63,6 @@ WorldEditorWindow::WorldEditorWindow(QWidget *parent)
m_ui.graphicsView->setVisibleText(false);
m_ui.treePrimitivesView->setModel(m_primitivesModel);
// TODO: ?
m_ui.treePrimitivesView->setUndoStack(m_undoStack);
m_ui.treePrimitivesView->setZoneBuilder(m_zoneBuilderBase);
m_ui.treePrimitivesView->setWorldScene(m_worldEditorScene);
@ -131,7 +130,7 @@ QUndoStack *WorldEditorWindow::undoStack() const
void WorldEditorWindow::maybeSave()
{
QMessageBox *messageBox = new QMessageBox(tr("SDI"),
QMessageBox *messageBox = new QMessageBox(tr("World Editor"),
tr("The data has been modified.\n"
"Do you want to save your changes?"),
QMessageBox::Warning,
@ -143,7 +142,7 @@ void WorldEditorWindow::maybeSave()
messageBox->setButtonText(QMessageBox::Yes,
tr("Save"));
messageBox->setButtonText(QMessageBox::No, tr("Dont Save"));
messageBox->setButtonText(QMessageBox::No, tr("Don't Save"));
messageBox->show();
}
@ -175,7 +174,7 @@ void WorldEditorWindow::loadWorldEditFile(const QString &fileName)
return;
}
m_undoStack->beginMacro(QString("Load %1").arg(fileName));
m_undoStack->beginMacro(tr("Load %1").arg(fileName));
checkCurrentWorld();
@ -208,7 +207,6 @@ void WorldEditorWindow::checkCurrentWorld()
void WorldEditorWindow::newWorldEditFile()
{
checkCurrentWorld();
m_undoStack->push(new CreateWorldCommand("NewWorldEdit", m_primitivesModel));
}
@ -347,7 +345,7 @@ void WorldEditorWindow::hideEvent(QHideEvent *hideEvent)
void WorldEditorWindow::createMenus()
{
Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
//Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
}
void WorldEditorWindow::createToolBars()

View file

@ -42,7 +42,7 @@ class WorldEditorWindow: public QMainWindow
Q_OBJECT
public:
WorldEditorWindow(QWidget *parent = 0);
explicit WorldEditorWindow(QWidget *parent = 0);
~WorldEditorWindow();
QUndoStack *undoStack() const;