Files
2026-08-16 18:24:52 +07:00

100 lines
3.3 KiB
C++

// 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<std::string>;
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<UISelection> selection;
SharedPointer<UIUndoManager> undoManager;
SharedPointer<UIDescription> editDescription;
IAction* liveAction;
using UIAttributeControllerList = std::list<UIAttributeControllers::Controller*>;
UIAttributeControllerList attributeControllers;
enum {
kSearchFieldTag = 100,
kViewNameTag = 101
};
SharedPointer<CTextEdit> searchField;
CTextLabel* viewNameLabel;
CRowColumnView* attributeView;
CColor attributeNameColor {kBlackCColor};
std::string filterString;
const std::string* currentAttributeName;
bool rebuildRequested{false};
};
} // VSTGUI
#endif // VSTGUI_LIVE_EDITING