/** * @RDE_HEADER@ * * Widget to dynamically show dds::core::xtypes::DynamicData. * * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include #include "rw/rwwidgets.h" #include "logger.h" #include class DetailView : public QWidget { Q_OBJECT public: explicit DetailView(QWidget *parent = nullptr); ~DetailView(); static QWidget *createWidget(const RwMode &readOnly, const dds::core::xtypes::DynamicType &type, const QString &name, NGL::INGLLogger &logger); static bool generateUi(const RwMode &readOnly, const dds::core::xtypes::DynamicType &type, QWidget *parentWidget, const QString &name, NGL::INGLLogger &logger, QGridLayout *grid = nullptr); const QString getTopicName() const { return m_topicName; } static bool setWidgetData(const dds::core::xtypes::DynamicData &data, const dds::core::xtypes::TypeKind &typeKind, uint32_t index, const QString &name, const QWidget *useOn, NGL::INGLLogger &logger); static void getWidgetData(dds::core::xtypes::DynamicData &data, const dds::core::xtypes::TypeKind &typeKind, uint32_t index, const QString &name, const QWidget *useOn, NGL::INGLLogger &logger); QSharedPointer getData() const; public slots: bool init(const dds::core::xtypes::DynamicData &data, const QString &topicName, RwMode rwMode = RwMode::ReadOnly); bool init(const dds::core::xtypes::DynamicType &type, const QString &topicName, RwMode rwMode = RwMode::ReadOnly); bool setData(const dds::core::xtypes::DynamicData &data) {return setData(data, QString());} void clear(); private slots: void onWritableRequested(); private: template static void getSpinBoxValue(const QString &name, dds::core::xtypes::DynamicData &data, uint32_t member_index, const QWidget *useOn, NGL::INGLLogger &logger); template static void setSpinBoxValue(S *b, const T &value); static void getComboBoxValue(const QString &name, dds::core::xtypes::DynamicData &data, uint32_t member_index, const QWidget *useOn, NGL::INGLLogger &logger); static void setComboBoxValue(RWComboBox *w, int ordinal); template static void getBitfieldValue(const QString &name, dds::core::xtypes::DynamicData &data, uint32_t member_index, const QWidget *useOn, NGL::INGLLogger &logger); template static void setBitfieldValue(B *b, const T &value); QWidget *getWidget(const dds::core::xtypes::DynamicType &type, const QString &name); bool setData(const dds::core::xtypes::DynamicData &data, const QString &name); dds::core::xtypes::DynamicType m_type; RwMode m_readonly; QString m_topicName; NGL::INGLLogger &m_logger; };