From 8f73cc9268cee9bcf4fabb85ea0ef9656bc20b8c Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 25 Feb 2014 14:59:46 +0100 Subject: [PATCH] added navigation mode selection --- apps/opencs/view/render/scenewidget.cpp | 11 ++++++++- apps/opencs/view/render/scenewidget.hpp | 8 ++++-- apps/opencs/view/world/scenesubview.cpp | 33 ++++++++++++++++--------- apps/opencs/view/world/scenesubview.hpp | 10 ++++++++ 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/apps/opencs/view/render/scenewidget.cpp b/apps/opencs/view/render/scenewidget.cpp index c608df3765..07fe56f8fa 100644 --- a/apps/opencs/view/render/scenewidget.cpp +++ b/apps/opencs/view/render/scenewidget.cpp @@ -15,7 +15,7 @@ namespace CSVRender : QWidget(parent) , mWindow(NULL) , mCamera(NULL) - , mSceneMgr(NULL), mNavigationMode (NavigationMode_Free), mUpdate (false) + , mSceneMgr(NULL), mNavigationMode (NavigationMode_1stPerson), mUpdate (false) , mKeyForward (false), mKeyBackward (false), mKeyLeft (false), mKeyRight (false) , mFast (false), mDragging (false), mMod1 (false) , mMouseSensitivity (2), mFastFactor (4) /// \todo make these configurable @@ -94,6 +94,15 @@ namespace CSVRender Ogre::Root::getSingleton().destroyRenderTarget(mWindow); } + void SceneWidget::setNavigationMode (NavigationMode mode) + { + if (mode!=mNavigationMode) + { + mNavigationMode = mode; + + } + } + void SceneWidget::paintEvent(QPaintEvent* e) { if (!mWindow) diff --git a/apps/opencs/view/render/scenewidget.hpp b/apps/opencs/view/render/scenewidget.hpp index 58b122deea..55f62d6619 100644 --- a/apps/opencs/view/render/scenewidget.hpp +++ b/apps/opencs/view/render/scenewidget.hpp @@ -20,14 +20,18 @@ namespace CSVRender enum NavigationMode { - NavigationMode_Free + NavigationMode_1stPerson, + NavigationMode_Free, + NavigationMode_Orbit }; SceneWidget(QWidget *parent); - virtual ~SceneWidget(void); + virtual ~SceneWidget(); QPaintEngine* paintEngine() const; + void setNavigationMode (NavigationMode mode); + private: void paintEvent(QPaintEvent* e); void resizeEvent(QResizeEvent* e); diff --git a/apps/opencs/view/world/scenesubview.cpp b/apps/opencs/view/world/scenesubview.cpp index 705adf2ad0..339a885191 100644 --- a/apps/opencs/view/world/scenesubview.cpp +++ b/apps/opencs/view/world/scenesubview.cpp @@ -32,20 +32,21 @@ CSVWorld::SceneSubView::SceneSubView (const CSMWorld::UniversalId& id, CSMDoc::D layout2->setContentsMargins (QMargins (0, 0, 0, 0)); SceneToolbar *toolbar = new SceneToolbar (48, this); -// test -SceneToolMode *tool = new SceneToolMode (toolbar); -tool->addButton (":door.png", "a"); -tool->addButton (":GMST.png", "b"); -tool->addButton (":Info.png", "c"); -toolbar->addTool (tool); -toolbar->addTool (new SceneToolMode (toolbar)); -toolbar->addTool (new SceneToolMode (toolbar)); -toolbar->addTool (new SceneToolMode (toolbar)); + + // navigation mode + SceneToolMode *tool = new SceneToolMode (toolbar); + tool->addButton (":door.png", "1st"); /// \todo replace icons + tool->addButton (":GMST.png", "free"); + tool->addButton (":Info.png", "orbit"); + toolbar->addTool (tool); + connect (tool, SIGNAL (modeChanged (const std::string&)), + this, SLOT (selectNavigationMode (const std::string&))); + layout2->addWidget (toolbar, 0); - CSVRender::SceneWidget* sceneWidget = new CSVRender::SceneWidget(this); + mScene = new CSVRender::SceneWidget(this); - layout2->addWidget (sceneWidget, 1); + layout2->addWidget (mScene, 1); layout->insertLayout (0, layout2, 1); @@ -76,3 +77,13 @@ void CSVWorld::SceneSubView::setStatusBar (bool show) { mBottom->setStatusBar (show); } + +void CSVWorld::SceneSubView::selectNavigationMode (const std::string& mode) +{ + if (mode=="1st") + mScene->setNavigationMode (CSVRender::SceneWidget::NavigationMode_1stPerson); + else if (mode=="free") + mScene->setNavigationMode (CSVRender::SceneWidget::NavigationMode_Free); + else if (mode=="orbit") + mScene->setNavigationMode (CSVRender::SceneWidget::NavigationMode_Orbit); +} diff --git a/apps/opencs/view/world/scenesubview.hpp b/apps/opencs/view/world/scenesubview.hpp index a0fed908df..65e1614c11 100644 --- a/apps/opencs/view/world/scenesubview.hpp +++ b/apps/opencs/view/world/scenesubview.hpp @@ -10,6 +10,11 @@ namespace CSMDoc class Document; } +namespace CSVRender +{ + class SceneWidget; +} + namespace CSVWorld { class Table; @@ -21,6 +26,7 @@ namespace CSVWorld Q_OBJECT TableBottomBox *mBottom; + CSVRender::SceneWidget *mScene; public: @@ -31,6 +37,10 @@ namespace CSVWorld virtual void updateEditorSetting (const QString& key, const QString& value); virtual void setStatusBar (bool show); + + private slots: + + void selectNavigationMode (const std::string& mode); }; }