From d285ae5124803fce2de27673e35193f61f06a93e Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 6 Jul 2021 22:24:49 +0200
Subject: [PATCH] UI: Reduce the number of virtual methods of the DocumentView
 class

---
 CMakeLists.txt                    | 12 +++++++++++-
 src/UI/DocumentView.cc            | 17 ++++++++++++++++-
 src/UI/DocumentView.hh            | 13 +++++++++----
 src/UI/DocumentViews/TimingBar.hh |  1 -
 src/UI/ScriptDocumentView.cc      |  8 +-------
 src/UI/ScriptDocumentView.hh      |  3 ---
 src/UI/VivyDocumentView.cc        |  8 +-------
 src/UI/VivyDocumentView.hh        |  3 +--
 8 files changed, 39 insertions(+), 26 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1c0438c..161c798e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,7 +55,17 @@ target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
 
 # Headers related things
 target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
-target_precompile_headers(Vivy PRIVATE ${Vivy_INC})
+target_precompile_headers(Vivy PRIVATE
+    # Private Vivy headers
+    ${Vivy_INC}
+
+    # Qt headers
+    <QString>
+    <QList>
+    <QMap>
+    <QWidget>
+    <QIcon>
+)
 
 # More options and warnings
 target_compile_options(Vivy PRIVATE
diff --git a/src/UI/DocumentView.cc b/src/UI/DocumentView.cc
index 4fbabf42..dce1e4da 100644
--- a/src/UI/DocumentView.cc
+++ b/src/UI/DocumentView.cc
@@ -6,8 +6,9 @@
 
 using namespace Vivy;
 
-DocumentView::DocumentView(QWidget *parent) noexcept
+DocumentView::DocumentView(DocumentView::Type type, QWidget *parent) noexcept
     : QMainWindow(parent)
+    , documentType(type)
 {
     setStatusBar(nullptr);
     setMenuBar(nullptr);
@@ -31,3 +32,17 @@ DocumentView::deleteAllContent() noexcept
         delete layout();
     }
 }
+
+// Returns actions that must be placed in the view actions to show/hide some of
+// the document's widgets
+const QList<QAction *> &
+DocumentView::getViewsActions() const noexcept
+{
+    return viewsActions;
+}
+
+DocumentView::Type
+DocumentView::getType() const noexcept
+{
+    return documentType;
+}
diff --git a/src/UI/DocumentView.hh b/src/UI/DocumentView.hh
index a8c3eaaa..e4acccf4 100644
--- a/src/UI/DocumentView.hh
+++ b/src/UI/DocumentView.hh
@@ -8,8 +8,7 @@
 #include "../Lib/Utils.hh"
 #include <QMainWindow>
 #include <QDockWidget>
-#include <QString>
-#include <QIcon>
+#include <QAction>
 
 namespace Vivy
 {
@@ -26,7 +25,7 @@ public:
     };
 
 public:
-    explicit DocumentView(QWidget *parent = nullptr) noexcept;
+    explicit DocumentView(Type, QWidget *parent = nullptr) noexcept;
     virtual ~DocumentView() noexcept = default;
 
     virtual void closeDocument() noexcept  = 0;
@@ -34,11 +33,17 @@ public:
 
     virtual QString getDocumentTabName() const noexcept    = 0;
     virtual QString getDocumentTabToolTip() const noexcept = 0;
-    virtual Type getType() const noexcept                  = 0;
     virtual QIcon getDocumentTabIcon() const noexcept      = 0;
 
+    Type getType() const noexcept;
+    const QList<QAction *> &getViewsActions() const noexcept;
+
 protected:
     void deleteAllContent() noexcept;
+    QList<QAction *> viewsActions{};
+
+private:
+    const Type documentType;
 };
 }
 
diff --git a/src/UI/DocumentViews/TimingBar.hh b/src/UI/DocumentViews/TimingBar.hh
index 3dcd5fd0..6edf64ee 100644
--- a/src/UI/DocumentViews/TimingBar.hh
+++ b/src/UI/DocumentViews/TimingBar.hh
@@ -5,7 +5,6 @@
 #error "This is a C++ header"
 #endif
 
-#include <QWidget>
 #include <QGraphicsItem>
 #include <QGraphicsLineItem>
 
diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc
index fd4c6e3d..2107cc4b 100644
--- a/src/UI/ScriptDocumentView.cc
+++ b/src/UI/ScriptDocumentView.cc
@@ -3,7 +3,7 @@
 using namespace Vivy;
 
 ScriptDocumentView::ScriptDocumentView(QWidget *parent) noexcept
-    : DocumentView(parent)
+    : DocumentView(DocumentView::Type::Script, parent)
 {
 }
 
@@ -30,12 +30,6 @@ ScriptDocumentView::getDocumentTabIcon() const noexcept
     return QIcon::fromTheme("text-x-script");
 }
 
-DocumentView::Type
-ScriptDocumentView::getType() const noexcept
-{
-    return DocumentView::Type::Script;
-}
-
 void
 ScriptDocumentView::openProperties() noexcept
 {
diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh
index 9dfb89d1..d6e1c937 100644
--- a/src/UI/ScriptDocumentView.hh
+++ b/src/UI/ScriptDocumentView.hh
@@ -27,9 +27,6 @@ public:
     QString getDocumentTabName() const noexcept override;
     QString getDocumentTabToolTip() const noexcept override;
     QIcon getDocumentTabIcon() const noexcept override;
-    Type getType() const noexcept override;
-
-private:
 };
 }
 
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index bad8c3c6..2903b313 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -11,7 +11,7 @@
 using namespace Vivy;
 
 VivyDocumentView::VivyDocumentView(std::shared_ptr<VivyDocument> doc, QWidget *parent) noexcept
-    : DocumentView(parent)
+    : DocumentView(DocumentView::Type::Vivy, parent)
     , document(doc)
 {
     qDebug() << "Create view for document" << doc->getName() << "with capabilities"
@@ -84,12 +84,6 @@ VivyDocumentView::loadAudioView() noexcept
     }
 }
 
-DocumentView::Type
-VivyDocumentView::getType() const noexcept
-{
-    return DocumentView::Type::Vivy;
-}
-
 void
 VivyDocumentView::closeDocument() noexcept
 {
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index 28d991b8..3de381e6 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -31,13 +31,12 @@ public:
     QString getDocumentTabName() const noexcept override;
     QString getDocumentTabToolTip() const noexcept override;
     QIcon getDocumentTabIcon() const noexcept override;
-    Type getType() const noexcept override;
 
 private:
     std::shared_ptr<VivyDocument> document;
+    std::unique_ptr<PropertyModel> propertyModel;
     QDockWidget *visualizer{ nullptr };
     QDockWidget *property{ nullptr };
-    std::unique_ptr<PropertyModel> propertyModel;
 
     void loadAudioView() noexcept;
 };
-- 
GitLab