From a7a5e2a7b07b8bc0c9524cfe8e78cc8a5f06d6e2 Mon Sep 17 00:00:00 2001
From: anjoer <andyjoerg@gmail.com>
Date: Fri, 18 Nov 2016 17:01:28 +0100
Subject: [PATCH] Added Views for TextureObjects and TrackedComponents

---
 .../Controller/ControllerGraphicScene.cpp     | 21 +++++++++++++---
 .../Controller/ControllerGraphicScene.h       |  8 ++++++-
 .../ControllerStrategies/GuiContext.cpp       | 20 ++++++++--------
 .../Controller/ControllerTextureObject.cpp    | 21 ++++++++++++----
 .../Interfaces/IView/IGraphicsPixmapItem.cpp  | 24 +++++++++++++++++++
 .../Interfaces/IView/IGraphicsPixmapItem.h    | 22 +++++++++++++++++
 .../TrackedComponents/TrackedElement.cpp      |  7 ++++++
 7 files changed, 105 insertions(+), 18 deletions(-)
 create mode 100644 biotracker/Interfaces/IView/IGraphicsPixmapItem.cpp
 create mode 100644 biotracker/Interfaces/IView/IGraphicsPixmapItem.h

diff --git a/biotracker/Controller/ControllerGraphicScene.cpp b/biotracker/Controller/ControllerGraphicScene.cpp
index a20fcb56..e6a733d6 100644
--- a/biotracker/Controller/ControllerGraphicScene.cpp
+++ b/biotracker/Controller/ControllerGraphicScene.cpp
@@ -1,6 +1,5 @@
 #include "ControllerGraphicScene.h"
 #include "Model/TrackedComponents/TrackedElement.h"
-#include "../biotracker_gui/biotracker/View/TrackedElementView.h"
 #include "../biotracker_gui/biotracker/View/GraphicsView.h"
 #include "Model/null_Model.h"
 
@@ -10,9 +9,21 @@ ControllerGraphicScene::ControllerGraphicScene(QObject *parent, IBioTrackerConte
 
 }
 
+void ControllerGraphicScene::addGraphicsItem(QGraphicsItem *item)
+{
+    GraphicsView *gview = dynamic_cast<GraphicsView *> (m_View);
+    gview->addGraphicsItem(item);
+}
+
+void ControllerGraphicScene::addTextureObject(QGraphicsItem *item)
+{
+    GraphicsView *gview = dynamic_cast<GraphicsView *> (m_View);
+    gview->addPixmapItem(item);
+}
+
 void ControllerGraphicScene::createModel()
 {
-    m_Element = new TrackedElement(0, QString("myElement"));
+    m_Element = new TrackedElement(this, QString("myElement"));
     m_NullModel = new null_Model();
 }
 
@@ -20,6 +31,8 @@ void ControllerGraphicScene::createView()
 {
     m_View = new GraphicsView(0, this, m_NullModel);
     m_ElementView = new TrackedElementView(0, this, m_Element);
+
+    addGraphicsItem(m_ElementView);
 }
 
 void ControllerGraphicScene::connectModelController()
@@ -29,5 +42,7 @@ void ControllerGraphicScene::connectModelController()
 
 void ControllerGraphicScene::connectController()
 {
-
+        IController *ctrM = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::MAINWINDOW);
+        BioTracker3MainWindow *mainWin = dynamic_cast<BioTracker3MainWindow *>(ctrM->getView());
+        mainWin->addVideoView(m_View);
 }
diff --git a/biotracker/Controller/ControllerGraphicScene.h b/biotracker/Controller/ControllerGraphicScene.h
index 62405a09..94a972b3 100644
--- a/biotracker/Controller/ControllerGraphicScene.h
+++ b/biotracker/Controller/ControllerGraphicScene.h
@@ -2,12 +2,18 @@
 #define CONTROLLERGRAPHICSCENE_H
 
 #include "Interfaces/IController/icontroller.h"
+#include "QGraphicsObject"
+#include "../biotracker_gui/biotracker/View/TrackedElementView.h"
+
 
 class ControllerGraphicScene : public IController
 {
 public:
     ControllerGraphicScene(QObject *parent = 0, IBioTrackerContext *context = 0, ENUMS::CONTROLLERTYPE ctr = ENUMS::CONTROLLERTYPE::NO_CTR);
 
+    void addGraphicsItem(QGraphicsItem *item);
+    void addTextureObject(QGraphicsItem *item);
+
     // IController interface
 protected:
     void createModel() override;
@@ -16,7 +22,7 @@ protected:
     void connectController() override;
 
 private:
-    IView *m_ElementView;
+    TrackedElementView *m_ElementView;
     IView *m_GraphicsView;
 
     IModel *m_Element;
diff --git a/biotracker/Controller/ControllerStrategies/GuiContext.cpp b/biotracker/Controller/ControllerStrategies/GuiContext.cpp
index 9c3619e7..d47ea94e 100644
--- a/biotracker/Controller/ControllerStrategies/GuiContext.cpp
+++ b/biotracker/Controller/ControllerStrategies/GuiContext.cpp
@@ -27,18 +27,18 @@ GuiContext::GuiContext(QObject *parent) :
 
 void GuiContext::createAppController()
 {
-    m_ControllersMap.value(ENUMS::CONTROLLERTYPE::MAINWINDOW)->createComponents();
-    m_ControllersMap.value(ENUMS::CONTROLLERTYPE::PLAYER)->createComponents();
-    m_ControllersMap.value(ENUMS::CONTROLLERTYPE::TEXTUREOBJECT)->createComponents();
-    m_ControllersMap.value(ENUMS::CONTROLLERTYPE::TRACKING)->createComponents();
-    m_ControllersMap.value(ENUMS::CONTROLLERTYPE::GRAPHICSVIEW)->createComponents();
-
-
-
+    QMap<ENUMS::CONTROLLERTYPE, IController *>::iterator i;
+    for (i = m_ControllersMap.begin(); i != m_ControllersMap.end(); ++i)
+    {
+        i.value()->createComponents();
+    }
 }
 
 void GuiContext::connectController()
 {
-
-
+    QMap<ENUMS::CONTROLLERTYPE, IController *>::iterator i;
+    for (i = m_ControllersMap.begin(); i != m_ControllersMap.end(); ++i)
+    {
+        i.value()->connectComponents();
+    }
 }
diff --git a/biotracker/Controller/ControllerTextureObject.cpp b/biotracker/Controller/ControllerTextureObject.cpp
index fdd9388b..ed6205e3 100644
--- a/biotracker/Controller/ControllerTextureObject.cpp
+++ b/biotracker/Controller/ControllerTextureObject.cpp
@@ -1,8 +1,10 @@
 #include "ControllerTextureObject.h"
 #include "../biotracker_gui/biotracker/View/BioTracker3VideoView.h"
 #include "../biotracker_gui/biotracker/View/BioTracker3MainWindow.h"
+#include "Controller/ControllerGraphicScene.h"
 #include "Controller/ControllerPlayer.h"
 #include "Model/BioTracker3Player.h"
+#include "../biotracker_gui/biotracker/View/TextureObjectView.h"
 
 ControllerTextureObject::ControllerTextureObject(QObject *parent, IBioTrackerContext *context, ENUMS::CONTROLLERTYPE ctr) :
     IController(parent, context, ctr)
@@ -29,9 +31,9 @@ void ControllerTextureObject::addTextureElementView(IView *view)
 
 void ControllerTextureObject::connectController()
 {
-    IController *ctrM = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::MAINWINDOW);
-    BioTracker3MainWindow *mainWin = dynamic_cast<BioTracker3MainWindow *>(ctrM->getView());
-    mainWin->addVideoView(m_View);
+//    IController *ctrM = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::MAINWINDOW);
+//    BioTracker3MainWindow *mainWin = dynamic_cast<BioTracker3MainWindow *>(ctrM->getView());
+//    mainWin->addVideoView(m_View);
 
 
     IController *ctr = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::PLAYER);
@@ -43,6 +45,15 @@ void ControllerTextureObject::connectController()
 
     BioTracker3VideoControllWidget *videoView = dynamic_cast<BioTracker3VideoControllWidget *> (ctrPlayer->getView());
     videoView->setVideoViewComboboxModel(m_TextureViewNamesModel);
+
+
+    IController *ctrG = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::GRAPHICSVIEW);
+    ControllerGraphicScene *ctrGraphics = dynamic_cast<ControllerGraphicScene *>(ctrG);
+    QGraphicsPixmapItem *item = dynamic_cast<QGraphicsPixmapItem *>(m_View);
+
+    ctrGraphics->addTextureObject(item);
+
+
 }
 
 void ControllerTextureObject::receiveCvMat(cv::Mat mat, QString name)
@@ -62,7 +73,9 @@ void ControllerTextureObject::createModel()
 
 void ControllerTextureObject::createView()
 {
-    m_View = new BioTracker3VideoView(0, this, m_Model);
+    m_View = new TextureObjectView(this, this, m_Model);
+    // this is the gl widget
+  //  m_View = new BioTracker3VideoView(0, this, m_Model);
 }
 
 void ControllerTextureObject::connectModelController()
diff --git a/biotracker/Interfaces/IView/IGraphicsPixmapItem.cpp b/biotracker/Interfaces/IView/IGraphicsPixmapItem.cpp
new file mode 100644
index 00000000..acd55652
--- /dev/null
+++ b/biotracker/Interfaces/IView/IGraphicsPixmapItem.cpp
@@ -0,0 +1,24 @@
+#include "IGraphicsPixmapItem.h"
+
+IGraphicsPixmapItem::IGraphicsPixmapItem(QObject *parent, IController *controller, IModel *model) :
+    QObject(parent),
+    IView(controller, model)
+{
+
+}
+
+void IGraphicsPixmapItem::setNewModel(IModel *model)
+{
+    if (getModel() != nullptr) {
+        QObject::disconnect(getModel(), 0, this, 0);
+    }
+
+    setModel(model);
+
+    if (getModel() != nullptr) {
+        connectModelView();
+    }
+
+    update();
+}
+
diff --git a/biotracker/Interfaces/IView/IGraphicsPixmapItem.h b/biotracker/Interfaces/IView/IGraphicsPixmapItem.h
new file mode 100644
index 00000000..47eaa3ad
--- /dev/null
+++ b/biotracker/Interfaces/IView/IGraphicsPixmapItem.h
@@ -0,0 +1,22 @@
+#ifndef IGRAPHICSPIXMAPITEM_H
+#define IGRAPHICSPIXMAPITEM_H
+
+#include "IView.h"
+#include "QObject"
+#include "QGraphicsPixmapItem"
+
+class IGraphicsPixmapItem : public QObject, public QGraphicsPixmapItem, public IView
+{
+    Q_OBJECT
+public:
+    IGraphicsPixmapItem(QObject *parent = 0, IController *controller = 0, IModel *model = 0);
+
+    // IView interface
+public:
+    void setNewModel(IModel *model) override;
+
+public Q_SLOTS:
+  virtual void getNotified() = 0;
+};
+
+#endif // IGRAPHICSPIXMAPITEM_H
diff --git a/biotracker/Model/TrackedComponents/TrackedElement.cpp b/biotracker/Model/TrackedComponents/TrackedElement.cpp
index 97c02ccc..1a60ca6c 100644
--- a/biotracker/Model/TrackedComponents/TrackedElement.cpp
+++ b/biotracker/Model/TrackedComponents/TrackedElement.cpp
@@ -21,21 +21,28 @@ QString TrackedElement::getName()
 void TrackedElement::setX(int val)
 {
     x = val;
+    Q_EMIT notifyView();
+
 }
 
 void TrackedElement::setY(int val)
 {
     y = val;
+    Q_EMIT notifyView();
+
 }
 
 void TrackedElement::pressed()
 {
     mPressed = true;
+    Q_EMIT notifyView();
+
 }
 
 void TrackedElement::notPressed()
 {
     mPressed = false;
+    Q_EMIT notifyView();
 }
 
 int TrackedElement::getX()
-- 
GitLab