From eece4226c0427ac2cd7ca5e7b621e6bc8799e8e7 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sat, 24 Nov 2012 13:17:21 +0100 Subject: [PATCH] basic sub view system (very incomplete) --- apps/opencs/CMakeLists.txt | 4 ++++ apps/opencs/view/doc/view.cpp | 32 ++++++++++++++++++++++++++++-- apps/opencs/view/doc/view.hpp | 9 +++++++++ apps/opencs/view/world/subview.cpp | 18 +++++++++++++++++ apps/opencs/view/world/subview.hpp | 28 ++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 apps/opencs/view/world/subview.cpp create mode 100644 apps/opencs/view/world/subview.hpp diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index cb721ac54c..a56e77d089 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -7,6 +7,8 @@ set (OPENCS_SRC model/world/universalid.cpp view/doc/viewmanager.cpp view/doc/view.cpp view/doc/operations.cpp view/doc/operation.cpp + + view/world/subview.cpp ) set (OPENCS_HDR @@ -17,6 +19,8 @@ set (OPENCS_HDR model/world/universalid.hpp view/doc/viewmanager.hpp view/doc/view.hpp view/doc/operations.hpp view/doc/operation.hpp + + view/world/subview.hpp ) set (OPENCS_US diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp index 5c7199aa4b..9bcb8fc5ab 100644 --- a/apps/opencs/view/doc/view.cpp +++ b/apps/opencs/view/doc/view.cpp @@ -5,9 +5,12 @@ #include #include +#include #include "../../model/doc/document.hpp" +#include "../world/subview.hpp" + #include "viewmanager.hpp" #include "operations.hpp" @@ -56,6 +59,10 @@ void CSVDoc::View::setupViewMenu() QAction *newWindow = new QAction (tr ("&New View"), this); connect (newWindow, SIGNAL (triggered()), this, SLOT (newView())); view->addAction (newWindow); + + QAction *test = new QAction (tr ("Add test Subview"), this); + connect (test, SIGNAL (triggered()), this, SLOT (addTestSubView())); + view->addAction (test); } void CSVDoc::View::setupWorldMenu() @@ -107,8 +114,9 @@ void CSVDoc::View::updateActions() CSVDoc::View::View (ViewManager& viewManager, CSMDoc::Document *document, int totalViews) : mViewManager (viewManager), mDocument (document), mViewIndex (totalViews-1), mViewTotal (totalViews) { - setCentralWidget (new QWidget); - resize (200, 200); /// \todo get default size from settings and set reasonable minimal size + setDockOptions (QMainWindow::AllowNestedDocks); + + resize (300, 300); /// \todo get default size from settings and set reasonable minimal size mOperations = new Operations; addDockWidget (Qt::BottomDockWidgetArea, mOperations); @@ -158,6 +166,21 @@ void CSVDoc::View::updateProgress (int current, int max, int type, int threads) mOperations->setProgress (current, max, type, threads); } +void CSVDoc::View::addSubView (const CSMWorld::UniversalId& id) +{ + /// \todo add an user setting for limiting the number of sub views per top level view. Automatically open a new top level view if this + /// number is exceeded + + /// \todo if the sub view limit setting is one, the sub view title bar should be hidden and the text in the main title bar adjusted + /// accordingly + + /// \todo add an user setting to reuse sub views (on a per document basis or on a per top level view basis) + + CSVWorld::SubView *view = new CSVWorld::SubView (id); + addDockWidget (Qt::RightDockWidgetArea, view); + view->show(); +} + void CSVDoc::View::newView() { mViewManager.addView (mDocument); @@ -176,4 +199,9 @@ void CSVDoc::View::save() void CSVDoc::View::verify() { mDocument->verify(); +} + +void CSVDoc::View::addTestSubView() +{ + addSubView (CSMWorld::UniversalId::Type_None); } \ No newline at end of file diff --git a/apps/opencs/view/doc/view.hpp b/apps/opencs/view/doc/view.hpp index d15d942fc0..7a9164e12f 100644 --- a/apps/opencs/view/doc/view.hpp +++ b/apps/opencs/view/doc/view.hpp @@ -12,6 +12,11 @@ namespace CSMDoc class Document; } +namespace CSMWorld +{ + class UniversalId; +} + namespace CSVDoc { class ViewManager; @@ -69,6 +74,8 @@ namespace CSVDoc void updateProgress (int current, int max, int type, int threads); + void addSubView (const CSMWorld::UniversalId& id); + signals: void newDocumentRequest(); @@ -82,6 +89,8 @@ namespace CSVDoc void save(); void verify(); + + void addTestSubView(); ///< \todo remove }; } diff --git a/apps/opencs/view/world/subview.cpp b/apps/opencs/view/world/subview.cpp new file mode 100644 index 0000000000..23f075980a --- /dev/null +++ b/apps/opencs/view/world/subview.cpp @@ -0,0 +1,18 @@ + +#include "subview.hpp" + +CSVWorld::SubView::SubView (const CSMWorld::UniversalId& id) : mUniversalId (id) +{ + /// \todo add a button to the title bar that clones this sub view + + setWindowTitle (mUniversalId.toString().c_str()); + + /// \todo remove (for testing only) + setMinimumWidth (100); + setMinimumHeight (60); +} + +CSMWorld::UniversalId CSVWorld::SubView::getUniversalId() const +{ + return mUniversalId; +} diff --git a/apps/opencs/view/world/subview.hpp b/apps/opencs/view/world/subview.hpp new file mode 100644 index 0000000000..8488690c88 --- /dev/null +++ b/apps/opencs/view/world/subview.hpp @@ -0,0 +1,28 @@ +#ifndef CSV_WORLD_SUBVIEW_H +#define CSV_WORLD_SUBVIEW_H + +#include "../../model/world/universalid.hpp" + +#include + +namespace CSVWorld +{ + class SubView : public QDockWidget + { + Q_OBJECT + + CSMWorld::UniversalId mUniversalId; + + // not implemented + SubView (const SubView&); + SubView& operator= (SubView&); + + public: + + SubView (const CSMWorld::UniversalId& id); + + CSMWorld::UniversalId getUniversalId() const; + }; +} + +#endif \ No newline at end of file