Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/vstgui4/vstgui/standalone/include/iuidescwindow.h
T
2026-08-16 18:24:52 +07:00

128 lines
3.9 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/uidescriptionfwd.h"
#include "fwd.h"
#include "icommand.h"
#include "ivalue.h"
#include "iwindow.h"
#include <vector>
//------------------------------------------------------------------------
namespace VSTGUI {
namespace Standalone {
namespace UIDesc {
//------------------------------------------------------------------------
/** Model binding interface
*
* Make values available in the UIDescription window to be able to bind to controls.
*
* @ingroup standalone
*/
class IModelBinding : public Interface
{
public:
using ValueList = std::vector<ValuePtr>;
virtual const ValueList& getValues () const = 0;
};
//------------------------------------------------------------------------
/** UIDesc window customization interface
*
* @ingroup standalone
*/
class ICustomization : public Interface
{
public:
/** Create a sub controller
*
* A sub controller can be defined in the UI editor for a view and will be responsible
* as a controller for the view and its children.
*
* The controller will be automatically destroyed when the view is destroyed. You should
* always create a new controller instance here and do not cache it.
*
* @param name name of the sub controller
* @param parent the parent controller
* @param uiDesc the UIDescription instance
*/
virtual IController* createController (const UTF8StringView& name, IController* parent,
const IUIDescription* uiDesc) = 0;
/** Notification that the UIDescription was sucessfully parsed
*
* This can be used to get some resources from the UIDescription instance.
* @param uiDesc the UIDescription instance
*/
virtual void onUIDescriptionParsed (const IUIDescription* uiDesc) = 0;
};
//------------------------------------------------------------------------
/** Configuration for an UIDescription window
*
* @ingroup standalone
*/
struct Config
{
/** Filename of the UIDescription xml file */
UTF8String uiDescFileName;
/** Template name of the view in the uidesc file to show in the window */
UTF8String viewName;
/** Window configuration */
WindowConfiguration windowConfig;
/** Model binding
*
* Additioanlly to the IModelBinding features, if this object implements the ICommandHandler
* interface all commands send to the window will be dispatched to this object.
*
*/
ModelBindingPtr modelBinding;
/** %Optional UI customization
*
* Additionally to the ICustomization features, if this object implements the IWindowController
* interface, all window controller functions will be dispatched to this object.
*
*/
CustomizationPtr customization;
};
//------------------------------------------------------------------------
/** Create a window with an UIDescription
*
* @param config window configuration
* @see Config
*
* @ingroup standalone
*/
WindowPtr makeWindow (const Config& config);
//------------------------------------------------------------------------
} // UIDesc
//------------------------------------------------------------------------
/** Accessor interface for the window controller of an UIDescription window
*
* When creating a window using UIDesc::makeWindow, the window controller of the window conforms to
* this interface. You can utilize the dynamicPtrCast function to cast to this interface.
*/
class IUIDescWindowController : public Interface
{
public:
/** get the model binding object of the window controller */
virtual UIDesc::ModelBindingPtr getModelBinding () const = 0;
/** get the customization object of the window controller */
virtual UIDesc::CustomizationPtr getCustomization () const = 0;
};
//------------------------------------------------------------------------
} // Standalone
} // VSTGUI