ASPiK SDK
uieditcontroller.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 __uieditcontroller__
6 #define __uieditcontroller__
7 
8 #include "../uidescription.h"
9 
10 #if VSTGUI_LIVE_EDITING
11 
12 #include "../iviewcreator.h"
13 #include "../icontroller.h"
14 #include "../uidescriptionlistener.h"
15 #include "iaction.h"
16 #include "../../lib/csplitview.h"
17 #include "../../lib/cframe.h"
18 
19 #include <vector>
20 
21 namespace VSTGUI {
22 class UIEditView;
23 class UISelection;
24 class UIUndoManager;
25 class UITemplateController;
26 class UIEditMenuController;
27 class UIGridController;
28 class UIZoomSettingController;
29 class GenericStringListDataBrowserSource;
30 class CCommandMenuItem;
31 
32 //----------------------------------------------------------------------------------------------------
33 class UIEditController : public CBaseObject, public IController, public IContextMenuController, public ISplitViewController, public ISplitViewSeparatorDrawer, public IActionPerformer, public IKeyboardHook, public UIDescriptionListenerAdapter
34 {
35 public:
36  UIEditController (UIDescription* description);
37 
38  CView* createEditView ();
39  UIEditMenuController* getMenuController () const { return menuController; }
40  UIUndoManager* getUndoManager () const { return undoManager; }
41  const std::string& getEditTemplateName () const { return editTemplateName; }
42  UIAttributes* getSettings ();
43  int32_t getSaveOptions ();
44 
45  void onZoomChanged (double zoom);
46 
47  void addSelectionToCurrentView (UISelection* selection);
48 
49  static SharedPointer<UIDescription> getEditorDescription ();
50  static void setupDataSource (GenericStringListDataBrowserSource* source);
51  static bool std__stringCompare (const std::string* lhs, const std::string* rhs);
52  static const UTF8StringPtr kEncodeBitmapsSettingsKey;
53  static const UTF8StringPtr kWriteWindowsRCFileSettingsKey;
54 protected:
55  ~UIEditController () override;
56 
57  static void resetScrollViewOffsets (CViewContainer* view);
58 
59  int32_t getSplitViewIndex (CSplitView* splitView);
60  void setDirty (bool state);
61 
62  void valueChanged (CControl* pControl) override;
63  CView* createView (const UIAttributes& attributes, const IUIDescription* description) override;
64  CView* verifyView (CView* view, const UIAttributes& attributes, const IUIDescription* description) override;
65  IController* createSubController (UTF8StringPtr name, const IUIDescription* description) override;
66 
67  CMessageResult notify (CBaseObject* sender, IdStringPtr message) override;
68 
69  // IContextMenuController
70  void appendContextMenuItems (COptionMenu& contextMenu, const CPoint& where) override;
71 
72  // ISplitViewController
73  bool getSplitViewSizeConstraint (int32_t index, CCoord& minSize, CCoord& maxSize, CSplitView* splitView) override;
74  ISplitViewSeparatorDrawer* getSplitViewSeparatorDrawer (CSplitView* splitView) override;
75  bool storeViewSize (int32_t index, const CCoord& size, CSplitView* splitView) override;
76  bool restoreViewSize (int32_t index, CCoord& size, CSplitView* splitView) override;
77 
78  // ISplitViewSeparatorDrawer
79  void drawSplitViewSeparator (CDrawContext* context, const CRect& size, int32_t flags, int32_t index, CSplitView* splitView) override;
80 
81  // IActionPerformer
82  void performAction (IAction* action) override;
83  void performColorChange (UTF8StringPtr colorName, const CColor& newColor, bool remove = false) override;
84  void performTagChange (UTF8StringPtr tagName, UTF8StringPtr tagString, bool remove = false) override;
85  void performBitmapChange (UTF8StringPtr bitmapName, UTF8StringPtr bitmapPath, bool remove = false) override;
86  void performGradientChange (UTF8StringPtr gradientName, CGradient* newGradient, bool remove = false) override;
87  void performFontChange (UTF8StringPtr fontName, CFontRef newFont, bool remove = false) override;
88  void performColorNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
89  void performTagNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
90  void performFontNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
91  void performGradientNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
92  void performBitmapNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
93  void performBitmapNinePartTiledChange (UTF8StringPtr bitmapName, const CRect* offsets) override;
94  void performBitmapFiltersChange (UTF8StringPtr bitmapName, const std::list<SharedPointer<UIAttributes> >& filterDescription) override;
95  void performAlternativeFontChange (UTF8StringPtr fontName, UTF8StringPtr newAlternativeFonts) override;
96 
97  void beginLiveColorChange (UTF8StringPtr colorName) override;
98  void performLiveColorChange (UTF8StringPtr colorName, const CColor& newColor) override;
99  void endLiveColorChange (UTF8StringPtr colorName) override;
100 
101  void performTemplateNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
102  void performCreateNewTemplate (UTF8StringPtr name, UTF8StringPtr baseViewClassName) override;
103  void performDeleteTemplate (UTF8StringPtr name) override;
104  void performDuplicateTemplate (UTF8StringPtr name, UTF8StringPtr dupName) override;
105 
106  void onTemplateCreation (UTF8StringPtr name, CView* view) override;
107  void onTemplateNameChange (UTF8StringPtr oldName, UTF8StringPtr newName) override;
108 
109  void beginGroupAction (UTF8StringPtr name) override;
110  void finishGroupAction () override;
111 
112  // IKeyboardHook
113  int32_t onKeyDown (const VstKeyCode& code, CFrame* frame) override;
114  int32_t onKeyUp (const VstKeyCode& code, CFrame* frame) override;
115 
116  SharedPointer<UIDescription> editDescription;
117  SharedPointer<UIDescription> editorDesc;
118  SharedPointer<UISelection> selection;
119  SharedPointer<UIUndoManager> undoManager;
120  SharedPointer<UIGridController> gridController;
121  UIEditView* editView;
122  SharedPointer<UITemplateController> templateController;
123  SharedPointer<UIEditMenuController> menuController;
124  SharedPointer<UIZoomSettingController> zoomSettingController;
125  SharedPointer<CControl> enableEditingControl;
126  SharedPointer<CControl> notSavedControl;
127  SharedPointer<CControl> tabSwitchControl;
128 
129  std::string editTemplateName;
130  std::list<SharedPointer<CSplitView> > splitViews;
131 
132  bool dirty;
133 
134  struct Template {
135  std::string name;
136  SharedPointer<CView> view;
137 
138  Template (const std::string& n, CView* v) : name (n), view (v) {}
139  Template (const Template& c) : name (c.name), view (c.view) {}
140  bool operator==(const Template& t) { return name == t.name && view == t.view; }
141  bool operator==(const std::string& n) { return name == n; }
142  Template& operator=(const Template& t) { name = t.name; view = t.view; return *this; }
143  Template (Template&& t) noexcept { *this = std::move (t); }
144  Template& operator=(Template&& t) noexcept { name = std::move (t.name); view = std::move (t.view); return *this; }
145  };
146  void updateTemplate (UTF8StringPtr name);
147  void updateTemplate (const std::vector<Template>::const_iterator& it);
148  void onTemplatesChanged ();
149  void getTemplateViews (std::list<CView*>& views) const;
150 
151  std::vector<Template> templates;
152 private:
153  void beforeUIDescSave (UIDescription* desc) override;
154  void onUIDescTemplateChanged (UIDescription* desc) override;
155  bool doUIDescTemplateUpdate (UIDescription* desc, UTF8StringPtr name) override;
156 
157  void beforeSave ();
158  void onTemplateSelectionChanged ();
159  CMessageResult validateMenuItem (CCommandMenuItem* item);
160  CMessageResult onMenuItemSelection (CCommandMenuItem* item);
161  void doCopy (bool cut = false);
162  void doPaste ();
163  void showTemplateSettings ();
164  void showFocusSettings ();
165  bool doSelectionMove (const UTF8String& commandName, bool useGrid) const;
166  bool doSelectionSize (const UTF8String& commandName, bool useGrid) const;
167  bool doZOrderAction (bool lower);
168  void doSelectAllChildren ();
169 
170  void onUndoManagerChanged ();
171  template<typename NameChangeAction, IViewCreator::AttrType attrType> void performNameChange (UTF8StringPtr oldName, UTF8StringPtr newName, IdStringPtr groupActionName);
172 
173  std::string onlyTemplateToUpdateName;
174 };
175 
176 } // namespace
177 
178 #endif // VSTGUI_LIVE_EDITING
179 
180 #endif // __uieditcontroller__
Definition: vstkeycode.h:12
Definition: customcontrols.cpp:8