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