/* dtkComposerTransmitterEmitter.tpp --- * * Author: Thibaud Kloczko, Inria. * Created: Tue Feb 14 10:37:37 2012 (+0100) */ /* Commentary: * */ /* Change log: * */ #ifndef DTKCOMPOSERTRANSMITTEREMITTER_TPP #define DTKCOMPOSERTRANSMITTEREMITTER_TPP #include "dtkComposerTransmitter_p.h" #include "dtkComposerTransmitterVariant.h" #include #include #include #if defined(DTK_BUILD_PLOT_SUPPORT) #include #endif // ///////////////////////////////////////////////////////////////// // Forward declaration of specialized method // ///////////////////////////////////////////////////////////////// template <> DTKCOMPOSERSUPPORT_EXPORT QString dtkComposerTransmitterEmitter::dataDescription(void); template <> DTKCOMPOSERSUPPORT_EXPORT QString dtkComposerTransmitterEmitter::dataDescription(void); template <> DTKCOMPOSERSUPPORT_EXPORT QString dtkComposerTransmitterEmitter::dataDescription(void); template <> DTKCOMPOSERSUPPORT_EXPORT QString dtkComposerTransmitterEmitter::dataDescription(void); template <> DTKCOMPOSERSUPPORT_EXPORT QString dtkComposerTransmitterEmitter::dataDescription(void); // ///////////////////////////////////////////////////////////////// // dtkComposerTransmitterEmitter implementation // ///////////////////////////////////////////////////////////////// //! Constructs an empty emitter. /*! * */ template inline dtkComposerTransmitterEmitter::dtkComposerTransmitterEmitter(dtkComposerNode *parent) : dtkComposerTransmitterAbstractEmitter(parent) { m_data = NULL; d->data_type = qMetaTypeId(m_data); d->variant.setValue(m_data); }; //! Destroys the emitter. /*! * */ template inline dtkComposerTransmitterEmitter::~dtkComposerTransmitterEmitter(void) { }; template void dtkComposerTransmitterEmitter::clearData(void) { m_data = NULL; d->object = NULL; d->variant.clear(); d->container = NULL; d->matrix = NULL; }; //! Sets the data with \a data. /*! * */ template inline void dtkComposerTransmitterEmitter::setData(T *data) { m_data = data; d->variant.setValue(m_data); }; //! Sets the data with \a data. /*! * */ template inline void dtkComposerTransmitterEmitter::setData(const T *data) { this->setData(const_cast(data)); }; //! Returns the data as a modifiable reference. /*! * */ template inline T *dtkComposerTransmitterEmitter::data(void) { return m_data; }; template dtkAbstractObject *dtkComposerTransmitterEmitter::object(void) { if (dtkTypeInfo::dtkAbstractObjectPointer) return reinterpret_cast(m_data); return NULL; }; template dtkMatrixReal *dtkComposerTransmitterEmitter::matrix(void) { if (dtkTypeInfo::dtkMatrixRealPointer) return reinterpret_cast(m_data); return NULL; }; template int dtkComposerTransmitterEmitter::dataType(void) { return d->data_type; }; template QString dtkComposerTransmitterEmitter::dataIdentifier(void) { if (dtkTypeInfo::dtkAbstractObjectPointer) return reinterpret_cast(m_data)->identifier(); if (dtkTypeInfo::dtkMatrixRealPointer) return reinterpret_cast(m_data)->identifier(); return QString(QMetaType::typeName(d->data_type)); }; template QString dtkComposerTransmitterEmitter::dataDescription(void) { if (dtkTypeInfo::dtkAbstractObjectPointer) return reinterpret_cast(m_data)->description(); if (dtkTypeInfo::dtkMatrixRealPointer) return reinterpret_cast(m_data)->description(); // #if defined(DTK_BUILD_PLOT_SUPPORT) // if (dtkPlotCurve *curve = dynamic_cast(m_data)) // return curve->description(); // #endif QString address; QTextStream addressStream (&address); addressStream << (static_cast(m_data)); return address; }; //! Returns. /*! * */ template inline dtkComposerTransmitter::Kind dtkComposerTransmitterEmitter::kind(void) const { return dtkComposerTransmitter::Emitter; }; template inline QString dtkComposerTransmitterEmitter::kindName(void) const { return "Emitter"; }; // ///////////////////////////////////////////////////////////////// // dtkComposerTransmitterEmitterVector implementation // ///////////////////////////////////////////////////////////////// template inline dtkComposerTransmitterEmitterVector::dtkComposerTransmitterEmitterVector(dtkComposerNode *parent) : dtkComposerTransmitterAbstractEmitter(parent) { m_vector = NULL; d->data_type = qMetaTypeId(reinterpret_cast(0)); d->variant.setValue(d->container); }; template inline dtkComposerTransmitterEmitterVector::~dtkComposerTransmitterEmitterVector(void) { }; template void dtkComposerTransmitterEmitterVector::clearData(void) { m_vector = NULL; d->object = NULL; d->variant.clear(); if (d->container) delete d->container; d->container = NULL; d->matrix = NULL; }; template inline dtkComposerTransmitter::Kind dtkComposerTransmitterEmitterVector::kind(void) const { return dtkComposerTransmitter::EmitterVector; }; template inline QString dtkComposerTransmitterEmitterVector::kindName(void) const { return "EmitterContainer"; }; template inline void dtkComposerTransmitterEmitterVector::setData(dtkContainerVector *vector) { m_vector = vector; if (!d->container) d->container = new dtkContainerVectorWrapper(m_vector); else d->container->setVector(m_vector); d->variant.setValue(d->container); d->object = d->container; }; template inline void dtkComposerTransmitterEmitterVector::setData(const dtkContainerVector *vector) { this->setData(const_cast*>(vector)); }; template inline dtkContainerVector *dtkComposerTransmitterEmitterVector::data(void) { return m_vector; }; template dtkAbstractObject *dtkComposerTransmitterEmitterVector::object(void) { return d->container; }; template int dtkComposerTransmitterEmitterVector::dataType(void) { return d->data_type; }; template QString dtkComposerTransmitterEmitterVector::dataIdentifier(void) { return m_vector->identifier(); }; template QString dtkComposerTransmitterEmitterVector::dataDescription(void) { return m_vector->description(); }; #endif