// Version: $Id: ba37e77ce583b2cddf9c7af6c002f7c7dd7c1bbd $ // // // Commentary: // // // Change Log: // // // Code: #include #include #include // /////////////////////////////////////////////////////////////////// // dtkComposerNodeObject implementation // /////////////////////////////////////////////////////////////////// template inline dtkComposerNodeObject::dtkComposerNodeObject(void) : dtkComposerNodeLeafObject(), m_implementation(QString()), m_object(nullptr), m_factory(nullptr) { } template inline dtkComposerNodeObject::~dtkComposerNodeObject(void) { for (T *t : m_objects.values()) { QWidget *w = dtkCorePluginWidgetManager::instance().take(t); if (w) { delete w; } delete t; } m_objects.clear(); } template inline void dtkComposerNodeObject::setFactory(const dtkCorePluginFactory& factory) { m_factory = &factory; } template inline QVariant dtkComposerNodeObject::variant(void) const { if (this->object()) { return dtkMetaType::variantFromValue(this->object()); } else { return QVariant(); } } template inline T *dtkComposerNodeObject::object(void) const { return m_object; } template inline bool dtkComposerNodeObject::createObject(const QString& implementation) { if (implementation.isEmpty() || implementation == "Choose implementation") { return false; } if (m_objects.contains(implementation)) { m_object = m_objects.value(implementation); } else { m_object = m_factory->create(implementation); if (m_object) { m_objects.insert(implementation, m_object); } } if (m_object) { m_implementation = implementation; } return (m_object != nullptr); } template inline QStringList dtkComposerNodeObject::implementations(void) const { if (m_factory) { return m_factory->keys(); } return QStringList(); } template inline QString dtkComposerNodeObject::currentImplementation(void) const { return m_implementation; } template inline bool dtkComposerNodeObject::implementationHasChanged(const QString& implementation) const { return (m_implementation != implementation); } template inline QWidget *dtkComposerNodeObject::editor(void) { if (!m_factory || !m_object) { return nullptr; } QWidget *w = dtkCorePluginWidgetManager::instance().widget(m_object); if (!w) { w = m_factory->createWidget(m_implementation); if (w) { QVariant v = dtkMetaType::variantFromValue(m_object); dtkCorePluginWidgetManager::instance().add(m_object, v, w); } } return w; } // // dtkComposerNodeObject.tpp ends here