diff --git a/GUI/Model/Descriptor/PolyPtr.h b/GUI/Model/Descriptor/PolyPtr.h index 98bcd3c8405cdfb470559047d4e0cd29bb57a451..867922676a2bca62f2c17553eec64fe8ca54de0e 100644 --- a/GUI/Model/Descriptor/PolyPtr.h +++ b/GUI/Model/Descriptor/PolyPtr.h @@ -19,7 +19,16 @@ //! Holds a polymorphous item. Possible types of the item are specified by a Catalog. -template <typename Catalog> class PolyPtr { +class PolyBase { +public: + virtual QString piLabel() const = 0; + virtual QString piTooltip() const = 0; + virtual QStringList menuEntries() const = 0; + virtual void setCurrentIndex(int index) = 0; + virtual int currentIndex() const = 0; +}; + +template <typename Catalog> class PolyPtr : public PolyBase { public: using BaseItem = typename Catalog::BaseItem; @@ -43,12 +52,12 @@ public: m_item.reset(XML::readItemFrom<Catalog>(r, args...)); } - QString piLabel() const { return m_label; } - QString piTooltip() const { return m_tooltip; } - QStringList menuEntries() const { return m_menu_entries; } + QString piLabel() const override { return m_label; } + QString piTooltip() const override { return m_tooltip; } + QStringList menuEntries() const override { return m_menu_entries; } - void setCurrentIndex(int index) { m_item.reset(Catalog::create(m_types[index])); } - int currentIndex() const { return m_types.indexOf(Catalog::type(m_item.get())); } + void setCurrentIndex(int index) override { m_item.reset(Catalog::create(m_types[index])); } + int currentIndex() const override { return m_types.indexOf(Catalog::type(m_item.get())); } private: std::unique_ptr<BaseItem> m_item; //!< Current selection diff --git a/GUI/View/Sample/ISelectionForm.h b/GUI/View/Sample/ISelectionForm.h index fe6ff7db730bebdb1b61ab3742f05a5093dc2ed7..10d923ea7581dff2b7f99b4109beeaabf92f49e4 100644 --- a/GUI/View/Sample/ISelectionForm.h +++ b/GUI/View/Sample/ISelectionForm.h @@ -56,7 +56,7 @@ protected: m_grid_layout->addWidget(m_combo, 1, 0); createContent(); } - template <typename T> void initUI(PolyPtr<T>& d) + void initUI(PolyBase& d) { m_grid_layout = new QGridLayout(this); m_grid_layout->setContentsMargins(0, 0, 0, 0);