5 #include "CachedGraph.hpp"
6 #include "CachedNode.hpp"
10 #include "GraphTypes.hpp"
12 #include <MultiWidgets/Widget.hpp>
20 class ComponentInstance;
23 typedef std::shared_ptr<ComponentInstance> ComponentInstancePtr;
24 typedef std::list<ComponentInstancePtr>::iterator ComponentInstanceKey;
28 class SHOWCASE_API
ComponentInstance :
public std::enable_shared_from_this<ComponentInstance>
46 virtual MultiWidgets::WidgetPtr widgetInstance();
52 virtual MultiWidgets::OperatorPtr operatorInstance(MultiWidgets::Widget & host,
53 bool immediate =
false);
62 std::shared_ptr<Component> creator()
const;
68 virtual void propertyReceived(
const PropertyKey& key,
69 const PropertyValue& value);
76 const PropertyValue& value);
82 virtual void removeInstance() = 0;
90 virtual void setCache(CachedNode::Cache& cache);
92 void setKey(ComponentInstanceKey key);
95 std::weak_ptr<Component> m_creator;
96 ComponentInstanceKey m_key;
104 typedef std::shared_ptr<ComponentPlaceholder> ComponentPlaceholderPtr;
112 class SHOWCASE_API
Component :
public std::enable_shared_from_this<Component>
117 Component(CachedGraphPtr uiGraph=
nullptr);
123 void setCachedGraph(CachedGraphPtr uiGraph);
132 const QString& name()
const;
136 void setComponentName(
const QString& name);
140 void setSchema(
const Schema& schema);
144 const Schema& schema()
const;
150 ComponentInstancePtr createInstance();
155 void instanceDestroyed(ComponentInstanceKey key);
159 size_t numInstances()
const;
163 CachedGraphPtr cachedGraph()
const;
167 CachedNodePtr cachedNode()
const;
171 const NodeId& nodeId()
const;
175 const std::list<ComponentInstancePtr>& instances()
const;
178 void childFound(
const NodeId&
id);
179 void childLost(
const NodeId&
id);
181 virtual void placeholderStatusChanged(
const NodeId&
id) = 0;
183 void setConfigurationNode(
const GraphNode& confNode);
184 void addInstance(ComponentInstancePtr instance);
185 virtual void propertyReceived(
const Property& property);
186 virtual void propertyLost(
const Property& property);
188 virtual ComponentInstancePtr instanceImpl() = 0;
190 ComponentPlaceholderPtr placeholder(
const NodeId&
id)
const;
191 virtual void initPlaceholder(ComponentPlaceholderPtr placeholder);
194 void applyForInstances(std::function<
void(ComponentInstancePtr)>&& f);
196 void removeInstances();
201 CachedGraphPtr m_cachedGraph;
204 CachedNodePtr m_cachedNode;
206 mutable std::mutex m_placeholderMutex;
207 std::unordered_map<NodeId, ComponentPlaceholderPtr> m_placeholders;
213 std::mutex m_instanceMutex;
214 std::list<ComponentInstancePtr> m_instances;
218 typedef std::shared_ptr<Component> ComponentPtr;
229 void init(CachedGraphPtr cgraph);
232 void addRequiredProperty(
const PropertyKey& propertyName);
233 PropertyValue propertyValue(
const PropertyKey& key)
const;
235 void setOnReady(std::function<
void(
void)> func);
240 bool checkReady()
const;
244 void onProperty(
const Property& prop);
246 StreamConsumerPtr<PropertyEvent> m_propertyConsumer;
249 std::weak_ptr<Component> m_parent;
251 PropertyMap m_properties;
254 std::set<PropertyKey> m_requiredProperties;
257 std::function<void(void)> m_onReady;