// This file is part of VSTGUI. It is subject to the license terms // in the LICENSE file found in the top-level directory of this // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE #pragma once #include "../uidescription.h" #if VSTGUI_LIVE_EDITING #include "uiselection.h" #include "../delegationcontroller.h" #include "../iviewcreator.h" #include "../iviewfactory.h" #include "../uidescriptionlistener.h" #include "uiundomanager.h" #include "../../lib/controls/ctextedit.h" #include "../../lib/iviewlistener.h" namespace VSTGUI { class CRowColumnView; namespace UIAttributeControllers { class Controller; } //---------------------------------------------------------------------------------------------------- class UIAttributesController : public NonAtomicReferenceCounted, public DelegationController, public UIDescriptionListenerAdapter, public UISelectionListenerAdapter, public IUIUndoManagerListener, public ViewListenerAdapter { public: UIAttributesController (IController* baseController, UISelection* selection, UIUndoManager* undoManager, UIDescription* description); ~UIAttributesController () override; void beginLiveAttributeChange (const std::string& name, const std::string& currentValue); void endLiveAttributeChange (); void performAttributeChange (const std::string& name, const std::string& value); protected: using StringList = std::list; CView* createViewForAttribute (const std::string& attrName); void rebuildAttributesView (); void validateAttributeViews (); CView* createValueViewForAttributeType (const IViewFactory* viewFactory, CView* view, const std::string& attrName, IViewCreator::AttrType attrType); void getConsolidatedAttributeNames (StringList& result, const std::string& filter); void valueChanged (CControl* pControl) override; CView* verifyView (CView* view, const UIAttributes& attributes, const IUIDescription* description) override; IController* createSubController (IdStringPtr name, const IUIDescription* description) override; IControlListener* getControlListener (UTF8StringPtr name) override; void onUIDescTagChanged (UIDescription* desc) override; void onUIDescColorChanged (UIDescription* desc) override; void onUIDescFontChanged (UIDescription* desc) override; void onUIDescBitmapChanged (UIDescription* desc) override; void onUIDescTemplateChanged (UIDescription* desc) override; void onUIDescGradientChanged (UIDescription* desc) override; void selectionDidChange (UISelection* selection) override; void selectionViewsDidChange (UISelection* selection) override; void onUndoManagerChange () override; void viewWillDelete (CView* view) override; SharedPointer selection; SharedPointer undoManager; SharedPointer editDescription; IAction* liveAction; using UIAttributeControllerList = std::list; UIAttributeControllerList attributeControllers; enum { kSearchFieldTag = 100, kViewNameTag = 101 }; SharedPointer searchField; CTextLabel* viewNameLabel; CRowColumnView* attributeView; CColor attributeNameColor {kBlackCColor}; std::string filterString; const std::string* currentAttributeName; bool rebuildRequested{false}; }; } // VSTGUI #endif // VSTGUI_LIVE_EDITING