1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-24 09:23:51 +00:00

Changes made to DialogueSubview pathgrid tables are now reflected on PagedWorldspaceWidget.

This commit is contained in:
cc9cii 2015-04-24 04:00:49 +10:00
parent b46086912c
commit 3102a17522
11 changed files with 55 additions and 71 deletions

View file

@ -12,7 +12,6 @@
#include <QModelIndex>
#include "universalid.hpp"
//#include "nestedtablewrapper.hpp"
class QModelIndex;
class QAbstractItemModel;

View file

@ -1,6 +1,7 @@
#include "pathgridcommands.hpp"
#include "../../view/render/cell.hpp"
#include "idtree.hpp"
#include "nestedtablewrapper.hpp"
@ -43,6 +44,5 @@ CSMWorld::SignalHandler::SignalHandler (CSVRender::Cell *parent) : mParent(paren
void CSMWorld::SignalHandler::connectToCommand(const CSMWorld::ModifyPathgridCommand *command)
{
connect (command, SIGNAL(undoActioned()),
this, SLOT(rebuildPathgrid()));
connect (command, SIGNAL(undoActioned()), this, SLOT(rebuildPathgrid()));
}

View file

@ -53,7 +53,7 @@ namespace CSMWorld
void connectToCommand(const ModifyPathgridCommand *command);
private slots:
public slots:
void rebuildPathgrid();

View file

@ -307,9 +307,34 @@ float CSVRender::Cell::getTerrainHeightAt(const Ogre::Vector3 &pos) const
return -std::numeric_limits<float>::max();
}
void CSVRender::Cell::pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
CSMWorld::IdTree *pathgrids = dynamic_cast<CSMWorld::IdTree *>(
mDocument.getData().getTableModel(CSMWorld::UniversalId::Type_Pathgrid));
int idColumn = pathgrids->findColumnIndex(CSMWorld::Columns::ColumnId_Id);
int colPaths = pathgrids->findColumnIndex(CSMWorld::Columns::ColumnId_PathgridPoints);
//int colEdges = pathgrids->findColumnIndex(CSMWorld::Columns::ColumnId_PathgridEdges);
// FIXME: how to detect adds/deletes/modifies?
for (int i=topLeft.row(); i<=bottomRight.row(); ++i)
{
std::string cell = Misc::StringUtils::lowerCase (pathgrids->data (
pathgrids->index (i, idColumn)).toString().toUtf8().constData());
if (cell==mId && colPaths >= topLeft.column() && colPaths <= bottomRight.column())
{
if (!mModel)
setupPathgrid();
mHandler->rebuildPathgrid();
}
}
}
// FIXME:
// - adding edges (need the ability to select a pathgrid and highlight)
// - save to document & signals
// - repainting edges while moving
void CSVRender::Cell::setupPathgrid()
{
@ -434,7 +459,7 @@ void CSVRender::Cell::pathgridPointAdded(const Ogre::Vector3 &pos, bool interior
pathgrid.mData.mS2 += 1; // increment the number of points
// FIXME: possible issue if this cell is deleted and undo() is actioned afterwards
// TODO: check for possible issue if this cell is deleted and undo() is actioned afterwards
CSMWorld::ModifyPathgridCommand *cmd = new CSMWorld::ModifyPathgridCommand(*mModel,
mProxyModel->getParentId(), mProxyModel->getParentColumn(),
new CSMWorld::PathgridPointsWrap(pathgrid));
@ -493,7 +518,7 @@ void CSVRender::Cell::pathgridPointRemoved(const std::string &name)
<< pathgridId + "_" + QString::number(index).toStdString() << std::endl;
}
// FIXME: possible issue if this cell is deleted and undo() is actioned afterwards
// TODO: check for possible issue if this cell is deleted and undo() is actioned afterwards
CSMWorld::ModifyPathgridCommand *cmd = new CSMWorld::ModifyPathgridCommand(*mModel,
mProxyModel->getParentId(), mProxyModel->getParentColumn(),
new CSMWorld::PathgridPointsWrap(pathgrid));
@ -536,7 +561,7 @@ void CSVRender::Cell::pathgridPointMoved(const std::string &name,
pathgrid.mPoints[index].mY = y;
pathgrid.mPoints[index].mZ = newPos.z;
// FIXME: possible issue if this cell is deleted and undo() is actioned afterwards
// TODO: check for possible issue if this cell is deleted and undo() is actioned afterwards
CSMWorld::ModifyPathgridCommand *cmd = new CSMWorld::ModifyPathgridCommand(*mModel,
mProxyModel->getParentId(), mProxyModel->getParentColumn(),
new CSMWorld::PathgridPointsWrap(pathgrid));

View file

@ -111,6 +111,8 @@ namespace CSVRender
const Ogre::Vector3 &newPos, bool interior = false);
void pathgridPointRemoved(const std::string &name);
void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
private:
// for drawing pathgrid points & lines

View file

@ -330,23 +330,13 @@ void CSVRender::PagedWorldspaceWidget::referenceAdded (const QModelIndex& parent
flagAsModified();
}
//void CSVRender::PagedWorldspaceWidget::pathgridAdded (const QModelIndex& parent,
// int start, int end)
//{
// // FIXME:
//}
//
//void CSVRender::PagedWorldspaceWidget::pathgridDataChanged (const QModelIndex& topLeft,
// const QModelIndex& bottomRight)
//{
// // FIXME:
//}
//
//void CSVRender::PagedWorldspaceWidget::pathgridAboutToBeRemoved (const QModelIndex& parent,
// int start, int end)
//{
// // FIXME:
//}
void CSVRender::PagedWorldspaceWidget::pathgridDataChanged (const QModelIndex& topLeft,
const QModelIndex& bottomRight)
{
for (std::map<CSMWorld::CellCoordinates, Cell *>::iterator iter (mCells.begin());
iter!=mCells.end(); ++iter)
iter->second->pathgridDataChanged (topLeft, bottomRight);
}
CSVRender::Cell *CSVRender::PagedWorldspaceWidget::findCell(const std::string &cellId)
{

View file

@ -53,12 +53,6 @@ namespace CSVRender
virtual void referenceAdded (const QModelIndex& index, int start, int end);
//virtual void pathgridAdded (const QModelIndex& parent, int start, int end);
//virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
//virtual void pathgridAboutToBeRemoved (const QModelIndex& parent, int start, int end);
virtual std::string getStartupInstruction();
Cell *findCell(const std::string &cellId);
@ -103,7 +97,6 @@ namespace CSVRender
virtual void mouseDoubleClickEvent (QMouseEvent *event);
// FIXME: temporary only until signals from the document is implemented
virtual void pathgridInserted (const std::string &referenceId, const Ogre::Vector3 &pos);
virtual void pathgridMoved (const std::string &pgName, const Ogre::Vector3 &pos);
virtual void pathgridAboutToBeRemoved (const std::string &pgName);
@ -121,6 +114,8 @@ namespace CSVRender
virtual void cellAdded (const QModelIndex& index, int start, int end);
virtual void flagAsModSlot();
virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
};
}

View file

@ -166,23 +166,11 @@ void CSVRender::UnpagedWorldspaceWidget::addVisibilitySelectorButtons (
tool->addButton (Element_Fog, "Fog");
}
//void CSVRender::UnpagedWorldspaceWidget::pathgridAdded (const QModelIndex& parent,
// int start, int end)
//{
// // FIXME:
//}
//
//void CSVRender::UnpagedWorldspaceWidget::pathgridDataChanged (const QModelIndex& topLeft,
// const QModelIndex& bottomRight)
//{
// // FIXME:
//}
//
//void CSVRender::UnpagedWorldspaceWidget::pathgridAboutToBeRemoved (const QModelIndex& parent,
// int start, int end)
//{
// // FIXME:
//}
void CSVRender::UnpagedWorldspaceWidget::pathgridDataChanged (const QModelIndex& topLeft,
const QModelIndex& bottomRight)
{
// FIXME:
}
std::string CSVRender::UnpagedWorldspaceWidget::getStartupInstruction()
{

View file

@ -58,12 +58,6 @@ namespace CSVRender
virtual void referenceAdded (const QModelIndex& index, int start, int end);
//virtual void pathgridAdded (const QModelIndex& index, int start, int end);
//virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
//virtual void pathgridAboutToBeRemoved (const QModelIndex& parent, int start, int end);
virtual std::string getStartupInstruction();
protected:
@ -78,6 +72,8 @@ namespace CSVRender
virtual void flagAsModSlot();
virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight);
signals:
void cellChanged(const CSMWorld::UniversalId& id);

View file

@ -56,15 +56,11 @@ CSVRender::WorldspaceWidget::WorldspaceWidget (CSMDoc::Document& document, QWidg
connect (debugProfiles, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
this, SLOT (debugProfileAboutToBeRemoved (const QModelIndex&, int, int)));
//QAbstractItemModel *pathgrids =
//document.getData().getTableModel (CSMWorld::UniversalId::Type_Pathgrid);
QAbstractItemModel *pathgrids =
document.getData().getTableModel (CSMWorld::UniversalId::Type_Pathgrid);
//connect (pathgrids, SIGNAL (rowsInserted (const QModelIndex&, int, int)),
//this, SLOT (pathgridAdded (const QModelIndex&, int, int)));
//connect (pathgrids, SIGNAL (dataChanged (const QModelIndex&, const QModelIndex&)),
//this, SLOT (pathgridDataChanged (const QModelIndex&, const QModelIndex&)));
//connect (pathgrids, SIGNAL (rowsAboutToBeRemoved (const QModelIndex&, int, int)),
//this, SLOT (pathgridAboutToBeRemoved (const QModelIndex&, int, int)));
connect (pathgrids, SIGNAL (dataChanged (const QModelIndex&, const QModelIndex&)),
this, SLOT (pathgridDataChanged (const QModelIndex&, const QModelIndex&)));
mPhysics = document.getPhysics(); // create physics if one doesn't exist
mPhysics->addSceneManager(getSceneManager(), this);
@ -460,17 +456,14 @@ void CSVRender::WorldspaceWidget::keyPressEvent (QKeyEvent *event)
SceneWidget::keyPressEvent(event);
}
// FIXME: temporary until signals from the document are implemented
void CSVRender::WorldspaceWidget::pathgridAboutToBeRemoved (const std::string &pgName)
{
}
// FIXME: temporary until signals from the document are implemented
void CSVRender::WorldspaceWidget::pathgridMoved (const std::string &pgName, const Ogre::Vector3 &newPos)
{
}
// FIXME: temporary until signals from the document are implemented
void CSVRender::WorldspaceWidget::pathgridInserted (const std::string &name, const Ogre::Vector3 &pos)
{
}

View file

@ -163,11 +163,7 @@ namespace CSVRender
void debugProfileAboutToBeRemoved (const QModelIndex& parent, int start, int end);
//virtual void pathgridAdded (const QModelIndex& index, int start, int end) = 0;
//virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) = 0;
//virtual void pathgridAboutToBeRemoved (const QModelIndex& parent, int start, int end) = 0;
virtual void pathgridDataChanged (const QModelIndex& topLeft, const QModelIndex& bottomRight) = 0;
protected slots: