ASPiK SDK
icontroller.h
1 // This file is part of VSTGUI. It is subject to the license terms
2 // in the LICENSE file found in the top-level directory of this
3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
4 
5 #ifndef __icontroller__
6 #define __icontroller__
7 
8 #include "../lib/controls/icontrollistener.h"
9 #include "../lib/cviewcontainer.h"
10 
11 namespace VSTGUI {
12 
13 class UIAttributes;
14 class IUIDescription;
15 
16 //-----------------------------------------------------------------------------
19 //-----------------------------------------------------------------------------
21 {
22 public:
23  virtual int32_t getTagForName (UTF8StringPtr name, int32_t registeredTag) const { return registeredTag; }
24  virtual IControlListener* getControlListener (UTF8StringPtr controlTagName) { return this; }
25  virtual CView* createView (const UIAttributes& attributes, const IUIDescription* description) { return 0; }
26  virtual CView* verifyView (CView* view, const UIAttributes& attributes, const IUIDescription* description) { return view; }
27  virtual IController* createSubController (UTF8StringPtr name, const IUIDescription* description) { return 0; }
28 };
29 
30 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
37 {
38 public:
39  virtual ~IContextMenuController () noexcept = default;
40 
41  virtual void appendContextMenuItems (COptionMenu& contextMenu, const CPoint& where) = 0;
42 };
43 
44 //-----------------------------------------------------------------------------
46 {
47 public:
48  virtual ~IContextMenuController2 () noexcept = default;
49 
50  virtual void appendContextMenuItems (COptionMenu& contextMenu, CView* view, const CPoint& where) = 0;
51 };
52 
53 //-----------------------------------------------------------------------------
55 inline IController* getViewController (const CView* view, bool deep = false)
56 {
57  IController* controller = nullptr;
58  uint32_t size = sizeof (IController*);
59  if (view->getAttribute (kCViewControllerAttribute, sizeof (IController*), &controller, size) == false && deep)
60  {
61  if (view->getParentView () && view->getParentView () != view)
62  {
63  return getViewController (view->getParentView (), deep);
64  }
65  }
66  return controller;
67 }
68 
69 //-----------------------------------------------------------------------------
71 template<typename T>
72 inline T* findViewController (const CViewContainer* view)
73 {
74  if (auto ctrler = dynamic_cast<T*> (getViewController (view)))
75  return ctrler;
76  ViewIterator iterator (view);
77  while (*iterator)
78  {
79  if (auto ctrler = dynamic_cast<T*> (getViewController (*iterator)))
80  return ctrler;
81  if (auto container = (*iterator)->asViewContainer ())
82  {
83  if (auto ctrler = findViewController<T> (container))
84  return ctrler;
85  }
86  ++iterator;
87  }
88  return nullptr;
89 }
90 
91 //-----------------------------------------------------------------------------
92 } // namespace
93 
94 #endif // __icontroller__
bool getAttribute(const CViewAttributeID id, const uint32_t inSize, void *outData, uint32_t &outSize) const
get an attribute
Definition: cview.cpp:831
a popup menu control
Definition: coptionmenu.h:137
Definition: iuidescription.h:19
Definition: icontroller.h:45
extension to IController The VST3Editor checks all controllers of the views under the mouse on a righ...
Definition: icontroller.h:36
CView * getParentView() const
get parent view
Definition: cview.cpp:744
Definition: customcontrols.cpp:8
Definition: uiattributes.h:21
extension to IControlListener used by UIDescription
Definition: icontroller.h:20
Base Class of all view objects.
Definition: cview.h:44
Point structure.
Definition: cpoint.h:17
Definition: icontrollistener.h:14