From 33afc649c5602bc6967abb8de5295202869923d9 Mon Sep 17 00:00:00 2001 From: Daniel Evans Date: Sun, 21 Sep 2014 16:13:01 +0100 Subject: [PATCH] Implement "model" view in rwviewer --- rwviewer/ObjectViewer.cpp | 43 ++++++++++++++++++++++----------------- rwviewer/ObjectViewer.hpp | 7 ++++++- rwviewer/ViewerWindow.cpp | 22 ++++++++++++++++++-- rwviewer/ViewerWindow.hpp | 5 +++++ 4 files changed, 55 insertions(+), 22 deletions(-) diff --git a/rwviewer/ObjectViewer.cpp b/rwviewer/ObjectViewer.cpp index eeecd8e5..4b258615 100644 --- a/rwviewer/ObjectViewer.cpp +++ b/rwviewer/ObjectViewer.cpp @@ -1,42 +1,47 @@ #include "ObjectViewer.hpp" -#include -#include #include #include "ViewerWidget.hpp" +#include ObjectViewer::ObjectViewer(ViewerWidget* viewer, QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) { + mainLayout = new QHBoxLayout; + objectList = new QTableView; - QHBoxLayout* layout = new QHBoxLayout; - layout->addWidget(objectList); - - QVBoxLayout* infoLayout = new QVBoxLayout; - layout->addItem(infoLayout); + mainLayout->addWidget(objectList); previewWidget = viewer; previewWidget->setMinimumSize(250,250); - QGridLayout* dataGrid = new QGridLayout; - - dataGrid->addWidget(previewWidget, 0, 0, 1, 2); + infoLayout = new QGridLayout; previewID = new QLabel; previewModel = new QLabel; previewClass = new QLabel; - dataGrid->addWidget(new QLabel("ID"), 1, 0); - dataGrid->addWidget(previewID, 1, 1); - dataGrid->addWidget(new QLabel("Type"), 2, 0); - dataGrid->addWidget(previewClass, 2, 1); - dataGrid->addWidget(new QLabel("Model"), 3, 0); - dataGrid->addWidget(previewModel, 3, 1); + infoLayout->addWidget(new QLabel("ID"), 1, 0); + infoLayout->addWidget(previewID, 1, 1); + infoLayout->addWidget(new QLabel("Type"), 2, 0); + infoLayout->addWidget(previewClass, 2, 1); + infoLayout->addWidget(new QLabel("Model"), 3, 0); + infoLayout->addWidget(previewModel, 3, 1); - infoLayout->addItem(dataGrid); + //infoLayout->addStretch(100); - infoLayout->addStretch(100); + mainLayout->addLayout(infoLayout); - this->setLayout(layout); + this->setLayout(mainLayout); + + setViewerWidget(previewWidget); +} + +void ObjectViewer::setViewerWidget(ViewerWidget* widget) +{ + static size_t c = 0; + //widgetLayout->removeWidget(previewWidget); + previewWidget = widget; + infoLayout->addWidget(previewWidget, 0, 0, 1, 2); } static std::map gDataType = diff --git a/rwviewer/ObjectViewer.hpp b/rwviewer/ObjectViewer.hpp index bb542984..daf0888e 100644 --- a/rwviewer/ObjectViewer.hpp +++ b/rwviewer/ObjectViewer.hpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include class ViewerWidget; @@ -16,11 +18,12 @@ class ObjectViewer : public QWidget QTableView* objectList; GameWorld* _world; + QHBoxLayout* mainLayout; + QGridLayout* infoLayout; ViewerWidget* previewWidget; QLabel* previewID; QLabel* previewModel; QLabel* previewClass; - public: ObjectViewer(ViewerWidget *viewer = 0, QWidget* parent = 0, Qt::WindowFlags f = 0); @@ -30,6 +33,8 @@ public: return _world; } + void setViewerWidget( ViewerWidget* widget ); + public slots: void showItem(qint16 item); diff --git a/rwviewer/ViewerWindow.cpp b/rwviewer/ViewerWindow.cpp index d76736b5..8e87bbb5 100644 --- a/rwviewer/ViewerWindow.cpp +++ b/rwviewer/ViewerWindow.cpp @@ -49,7 +49,6 @@ ViewerWindow::ViewerWindow(QWidget* parent, Qt::WindowFlags flags) viewSwitcher = new QStackedWidget; viewSwitcher->addWidget(objectViewer); - viewSwitcher->addWidget(new QLabel("Model Viewer Not Implemented Yet")); QMenu* view = mb->addMenu("&View"); QAction* objectAction = view->addAction("&Object"); @@ -67,6 +66,13 @@ ViewerWindow::ViewerWindow(QWidget* parent, Qt::WindowFlags flags) QMenu* anim = mb->addMenu("&Animation"); anim->addAction("Load &Animations", this, SLOT(openAnimations())); + modelLayout = new QVBoxLayout; + + QWidget* span = new QWidget; + span->setLayout(modelLayout); + + viewSwitcher->addWidget(span); + this->setCentralWidget(viewSwitcher); updateRecentGames(); @@ -171,7 +177,19 @@ void ViewerWindow::switchWidget() { QAction* r = qobject_cast< QAction* >(sender()); if(r) { - viewSwitcher->setCurrentIndex(r->data().toInt() ); + int index = r->data().toInt(); + + if( index == 0 ) + { + modelLayout->removeWidget( viewerWidget ); + objectViewer->setViewerWidget( viewerWidget ); + } + else if( index == 1 ) + { + modelLayout->addWidget( viewerWidget ); + } + + viewSwitcher->setCurrentIndex( index ); } } diff --git a/rwviewer/ViewerWindow.hpp b/rwviewer/ViewerWindow.hpp index 78323695..51429bfe 100644 --- a/rwviewer/ViewerWindow.hpp +++ b/rwviewer/ViewerWindow.hpp @@ -5,6 +5,7 @@ #include #include #include +#include class ObjectViewer; class ViewerWidget; @@ -17,7 +18,11 @@ class ViewerWindow : public QMainWindow /** Contains the OGL context */ ViewerWidget* viewerWidget; + ObjectViewer* objectViewer; + + QVBoxLayout* modelLayout; + QStackedWidget* viewSwitcher; QGLContext* context;