icontroller.h
Go to the documentation of this file.
1 #ifndef DNAI_INTERFACES_ICONTROLLER_H
2 #define DNAI_INTERFACES_ICONTROLLER_H
3 
4 #include "dnai/app.h"
7 
8 namespace dnai
9 {
10  namespace interfaces
11  {
13  {
14  public:
15  virtual ~IController() = default;
16  virtual QList<QQuickItem*> views() const = 0;
17  virtual QQuickItem *createView() = 0;
18 
19  protected:
20  virtual interfaces::ICommand *createCommand() const = 0;
21  };
22  template <class T, class U = void>
23  class AController : public IController
24  {
25  using Fun = typename std::conditional<std::is_void<void>::value, void *, U>::type;
26  public:
27  explicit AController(const QString& view): m_model(nullptr), m_createCommand(nullptr)
28  {
29  m_viewPath = view;
30  }
31 
32  explicit AController(const AController& controller)
33  {
34  *this = controller;
35  }
36 
38  {
39  if (&other == this)
40  return *this;
41  this->m_model = other.model();
42  this->m_createCommand = other.createCommand();
43  this->m_viewPath = other.path();
44  this->m_views = other.views();
45  return *this;
46  }
47 
48  virtual ~AController() = default;
49 
50  public:
51  T *model() const
52  {
53  return m_model;
54  }
55 
56  void setModel(T *m)
57  {
58  if (m == m_model) return;
59  m_model = m;
60  }
61 
62  const QString &path() const { return m_viewPath; }
63 
64  QList<QQuickItem*> views() const override
65  {
66  return m_views;
67  }
68 
70  {
71  m_views.append(createView());
72  }
73 
74  virtual void asyncCreate(T* model)
75  {
76  if (model == nullptr)
77  return;
80  if (m_model)
81  delete m_model;
82  m_model = model;
83  }
84 
85  virtual bool create(Fun)
86  {
88  return false;
89  }
90 
91  protected:
92  T *m_model;
94  QList<QQuickItem *> m_views;
95  QString m_viewPath;
96  };
97  }
98 }
99 
100 #endif //DNAI_INTERFACES_ICONTROLLER_H
const QString & path() const
Definition: icontroller.h:62
static CommandManager * Instance()
Definition: commandmanager.cpp:15
AController & operator=(const AController &other)
Definition: icontroller.h:37
T * model() const
Definition: icontroller.h:51
QString m_viewPath
Definition: icontroller.h:95
virtual QQuickItem * createView()=0
QList< QQuickItem * > views() const override
Definition: icontroller.h:64
Definition: icontroller.h:12
virtual ~AController()=default
AController(const QString &view)
Definition: icontroller.h:27
QList< QQuickItem * > m_views
Definition: icontroller.h:94
void setModel(T *m)
Definition: icontroller.h:56
virtual ~IController()=default
void exec(interfaces::ICommand *command)
Execute immediatlty the command.
Definition: commandmanager.cpp:37
typename std::conditional< std::is_void< void >::value, void *, U >::type Fun
Definition: icontroller.h:25
Definition: icontroller.h:23
virtual void asyncCreate(T *model)
Definition: icontroller.h:74
Definition: api.h:13
void addViewToCurrentContext()
Definition: icontroller.h:69
T * m_model
Definition: icontroller.h:92
virtual bool create(Fun)
Definition: icontroller.h:85
interfaces::ICommand * m_createCommand
Definition: icontroller.h:93
virtual interfaces::ICommand * createCommand() const =0
Definition: icommand.h:15
virtual QList< QQuickItem * > views() const =0
AController(const AController &controller)
Definition: icontroller.h:32