143 lines
5.6 KiB
C++
143 lines
5.6 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 "../lib/vstguifwd.h"
|
|
#include "iviewcreator.h"
|
|
#include <string>
|
|
|
|
namespace VSTGUI {
|
|
class UIAttributes;
|
|
class IUIDescription;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
class IViewFactory
|
|
{
|
|
public:
|
|
virtual ~IViewFactory () noexcept = default;
|
|
|
|
virtual CView* createView (const UIAttributes& attributes, const IUIDescription* description) const = 0;
|
|
virtual bool applyAttributeValues (CView* view, const UIAttributes& attributes, const IUIDescription* desc) const = 0;
|
|
virtual bool applyCustomViewAttributeValues (CView* customView, IdStringPtr baseViewName, const UIAttributes& attributes, const IUIDescription* desc) const = 0;
|
|
virtual bool getAttributeValue (CView* view, const std::string& attributeName,
|
|
std::string& stringValue, const IUIDescription* desc) const = 0;
|
|
virtual bool viewIsTypeOf (CView* view, const std::string& typeName) const = 0;
|
|
|
|
static IdStringPtr getViewName (CView* view);
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
class IViewFactoryEditingSupport
|
|
{
|
|
public:
|
|
using StringPtrList = std::list<const std::string*>;
|
|
using StringList = std::list<std::string>;
|
|
using ViewAndDisplayNameList = std::list<std::pair<const std::string*, const std::string>>;
|
|
|
|
virtual ~IViewFactoryEditingSupport () noexcept = default;
|
|
|
|
virtual bool getAttributeNamesForView (CView* view, StringList& attributeNames) const = 0;
|
|
virtual IViewCreator::AttrType getAttributeType (CView* view, const std::string& attributeName) const = 0;
|
|
virtual void collectRegisteredViewNames (StringPtrList& viewNames, IdStringPtr baseClassNameFilter = nullptr) const = 0;
|
|
virtual bool getAttributesForView (CView* view, const IUIDescription* desc, UIAttributes& attr) const = 0;
|
|
// list type support
|
|
virtual bool getPossibleAttributeListValues (CView* view, const std::string& attributeName, StringPtrList& values) const = 0;
|
|
virtual bool getAttributeValueRange (CView* view, const std::string& attributeName, double& minValue, double& maxValue) const = 0;
|
|
|
|
virtual ViewAndDisplayNameList collectRegisteredViewAndDisplayNames (IdStringPtr baseClassNameFilter = nullptr) const = 0;
|
|
virtual UTF8StringPtr getViewDisplayName (CView* view) const = 0;
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
class ViewFactoryDelegate : public IViewFactory,
|
|
public IViewFactoryEditingSupport
|
|
{
|
|
public:
|
|
ViewFactoryDelegate (IViewFactory* orig)
|
|
{
|
|
of = orig;
|
|
ofes = dynamic_cast<IViewFactoryEditingSupport*> (orig);
|
|
}
|
|
|
|
CView* createView (const UIAttributes& attributes,
|
|
const IUIDescription* description) const override
|
|
{
|
|
return of->createView (attributes, description);
|
|
}
|
|
bool applyAttributeValues (CView* view, const UIAttributes& attributes,
|
|
const IUIDescription* desc) const override
|
|
{
|
|
return of->applyAttributeValues (view, attributes, desc);
|
|
}
|
|
bool applyCustomViewAttributeValues (CView* customView, IdStringPtr baseViewName,
|
|
const UIAttributes& attributes,
|
|
const IUIDescription* desc) const override
|
|
{
|
|
return of->applyCustomViewAttributeValues (customView, baseViewName, attributes, desc);
|
|
}
|
|
bool getAttributeValue (CView* view, const std::string& attributeName, std::string& stringValue,
|
|
const IUIDescription* desc) const override
|
|
{
|
|
return of->getAttributeValue (view, attributeName, stringValue, desc);
|
|
}
|
|
bool viewIsTypeOf (CView* view, const std::string& typeName) const override
|
|
{
|
|
return of->viewIsTypeOf (view, typeName);
|
|
}
|
|
bool getAttributeNamesForView (CView* view, StringList& attributeNames) const override
|
|
{
|
|
return ofes ? ofes->getAttributeNamesForView (view, attributeNames) : false;
|
|
}
|
|
IViewCreator::AttrType getAttributeType (CView* view,
|
|
const std::string& attributeName) const override
|
|
{
|
|
return ofes ? ofes->getAttributeType (view, attributeName)
|
|
: IViewCreator::AttrType::kUnknownType;
|
|
}
|
|
void collectRegisteredViewNames (StringPtrList& viewNames,
|
|
IdStringPtr baseClassNameFilter) const override
|
|
{
|
|
if (ofes)
|
|
ofes->collectRegisteredViewNames (viewNames, baseClassNameFilter);
|
|
}
|
|
bool getAttributesForView (CView* view, const IUIDescription* desc,
|
|
UIAttributes& attr) const override
|
|
{
|
|
return ofes ? ofes->getAttributesForView (view, desc, attr) : false;
|
|
}
|
|
bool getPossibleAttributeListValues (CView* view, const std::string& attributeName,
|
|
StringPtrList& values) const override
|
|
{
|
|
return ofes ? ofes->getPossibleAttributeListValues (view, attributeName, values) : false;
|
|
}
|
|
bool getAttributeValueRange (CView* view, const std::string& attributeName, double& minValue,
|
|
double& maxValue) const override
|
|
{
|
|
return ofes ? ofes->getAttributeValueRange (view, attributeName, minValue, maxValue)
|
|
: false;
|
|
}
|
|
ViewAndDisplayNameList
|
|
collectRegisteredViewAndDisplayNames (IdStringPtr baseClassNameFilter) const override
|
|
{
|
|
return ofes ? ofes->collectRegisteredViewAndDisplayNames (baseClassNameFilter)
|
|
: ViewAndDisplayNameList {};
|
|
}
|
|
UTF8StringPtr getViewDisplayName (CView* view) const override
|
|
{
|
|
return ofes ? ofes->getViewDisplayName (view) : "";
|
|
}
|
|
|
|
protected:
|
|
IViewFactory* getViewFactory () const { return of; }
|
|
IViewFactoryEditingSupport* getViewFactoryEditingSupport () const { return ofes; }
|
|
|
|
private:
|
|
IViewFactory* of {nullptr};
|
|
IViewFactoryEditingSupport* ofes {nullptr};
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
} // VSTGUI VSTGUI
|