From 871804fcb3ca25da035a2c9fdcae222173bfb2d8 Mon Sep 17 00:00:00 2001 From: Daniel Evans Date: Tue, 10 Jun 2014 16:47:44 +0100 Subject: [PATCH] Fix Model frame widget display --- rwviewer/DFFFramesTreeModel.cpp | 4 ++-- rwviewer/DFFFramesTreeModel.hpp | 4 ++-- rwviewer/ModelFramesWidget.cpp | 2 +- rwviewer/ModelFramesWidget.hpp | 6 ++++-- rwviewer/ViewerWidget.cpp | 14 +++++++++++--- rwviewer/ViewerWidget.hpp | 6 ++++-- rwviewer/ViewerWindow.cpp | 1 + 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/rwviewer/DFFFramesTreeModel.cpp b/rwviewer/DFFFramesTreeModel.cpp index 91f63c2a..50146a09 100644 --- a/rwviewer/DFFFramesTreeModel.cpp +++ b/rwviewer/DFFFramesTreeModel.cpp @@ -1,7 +1,7 @@ #include "DFFFramesTreeModel.hpp" #include -DFFFramesTreeModel::DFFFramesTreeModel(ModelHandle *m, QObject* parent) +DFFFramesTreeModel::DFFFramesTreeModel(Model *m, QObject* parent) : QAbstractItemModel(parent), model(m) { @@ -29,7 +29,7 @@ int DFFFramesTreeModel::rowCount(const QModelIndex& parent) const QModelIndex DFFFramesTreeModel::index(int row, int column, const QModelIndex& parent) const { if(parent.row() == -1 && parent.column() == -1) { - return createIndex(row, column, model->model->frames[model->model->rootFrameIdx]); + return createIndex(row, column, model->frames[model->rootFrameIdx]); } ModelFrame* f = static_cast(parent.internalPointer()); ModelFrame* p = f->getChildren()[row]; diff --git a/rwviewer/DFFFramesTreeModel.hpp b/rwviewer/DFFFramesTreeModel.hpp index 38846703..3edfca5a 100644 --- a/rwviewer/DFFFramesTreeModel.hpp +++ b/rwviewer/DFFFramesTreeModel.hpp @@ -6,10 +6,10 @@ class DFFFramesTreeModel : public QAbstractItemModel { - ModelHandle* model; + Model* model; public: - explicit DFFFramesTreeModel(ModelHandle* m, QObject* parent = 0); + explicit DFFFramesTreeModel(Model* m, QObject* parent = 0); virtual int columnCount(const QModelIndex& parent = QModelIndex()) const; diff --git a/rwviewer/ModelFramesWidget.cpp b/rwviewer/ModelFramesWidget.cpp index d89fdde3..64bba1ed 100644 --- a/rwviewer/ModelFramesWidget.cpp +++ b/rwviewer/ModelFramesWidget.cpp @@ -8,7 +8,7 @@ ModelFramesWidget::ModelFramesWidget(QWidget* parent, Qt::WindowFlags flags) setWidget(tree); } -void ModelFramesWidget::setModel(ModelHandle *model) +void ModelFramesWidget::setModel(Model *model) { if(framemodel) { delete framemodel; diff --git a/rwviewer/ModelFramesWidget.hpp b/rwviewer/ModelFramesWidget.hpp index 775932a1..43bd8455 100644 --- a/rwviewer/ModelFramesWidget.hpp +++ b/rwviewer/ModelFramesWidget.hpp @@ -10,14 +10,16 @@ class ModelFramesWidget : public QDockWidget { Q_OBJECT - ModelHandle* gmodel; + Model* gmodel; DFFFramesTreeModel* framemodel; QTreeView* tree; public: ModelFramesWidget(QWidget* parent = 0, Qt::WindowFlags flags = 0); - void setModel(ModelHandle* model); +public slots: + + void setModel(Model *model); }; #endif diff --git a/rwviewer/ViewerWidget.cpp b/rwviewer/ViewerWidget.cpp index fe873f7b..f9c16a1b 100644 --- a/rwviewer/ViewerWidget.cpp +++ b/rwviewer/ViewerWidget.cpp @@ -10,7 +10,7 @@ ViewerWidget::ViewerWidget(QWidget* parent, const QGLWidget* shareWidget, Qt::WindowFlags f) : QGLWidget(parent, shareWidget, f), gworld(nullptr), dummyObject(nullptr), currentObjectID(0), - cmodel(nullptr), canimation(nullptr), viewDistance(1.f), dragging(false) + _lastModel(nullptr), canimation(nullptr), viewDistance(1.f), dragging(false) { } @@ -52,6 +52,14 @@ void ViewerWidget::paintGL() } if(dummyObject) { + gworld->_work->update(); + + if( dummyObject->model->model != _lastModel ) { + _lastModel = dummyObject->model->model; + emit modelChanged(_lastModel); + } + + glEnable(GL_DEPTH_TEST); glm::mat4 m; @@ -129,9 +137,9 @@ void ViewerWidget::exportModel() } } -ModelHandle* ViewerWidget::currentModel() const +Model* ViewerWidget::currentModel() const { - return cmodel; + return _lastModel; } void ViewerWidget::setGamePath(const std::string &path) diff --git a/rwviewer/ViewerWidget.hpp b/rwviewer/ViewerWidget.hpp index fad7a6f8..8942fa85 100644 --- a/rwviewer/ViewerWidget.hpp +++ b/rwviewer/ViewerWidget.hpp @@ -20,7 +20,7 @@ class ViewerWidget : public QGLWidget GameObject* dummyObject; quint16 currentObjectID; - ModelHandle* cmodel; + Model* _lastModel; Animation* canimation; float viewDistance; @@ -39,7 +39,7 @@ public: virtual void paintGL(); - ModelHandle *currentModel() const; + Model *currentModel() const; // TODO: Move this into the main window or elsewhere, doesn't really belong here. void setGamePath(const std::string& path); @@ -59,6 +59,8 @@ signals: void fileOpened(const QString& file); + void modelChanged(Model* model); + protected: virtual void mousePressEvent(QMouseEvent*); diff --git a/rwviewer/ViewerWindow.cpp b/rwviewer/ViewerWindow.cpp index b88a10a3..165f62db 100644 --- a/rwviewer/ViewerWindow.cpp +++ b/rwviewer/ViewerWindow.cpp @@ -56,6 +56,7 @@ ViewerWindow::ViewerWindow(QWidget* parent, Qt::WindowFlags flags): QMainWindow( connect(itemsWidget, SIGNAL(selectedItemChanged(qint16)), viewer, SLOT(showItem(qint16))); connect(viewer, SIGNAL(dataLoaded(GameWorld*)), itemsWidget, SLOT(worldLoaded(GameWorld*))); + connect(viewer, SIGNAL(modelChanged(Model*)), frameswidget, SLOT(setModel(Model*))); connect(animationswidget, SIGNAL(selectedAnimationChanged(Animation*)), viewer, SLOT(showAnimation(Animation*))); updateRecentGames();