diff --git a/Base/Types/VectorWC.h b/Base/Types/VectorWC.h index 980b4eb1128c2acf3eb47d769c95a81a0b0becfb..e7abb6409decaff9f93dc2163c8610c5f496d0f7 100644 --- a/Base/Types/VectorWC.h +++ b/Base/Types/VectorWC.h @@ -30,16 +30,19 @@ public: { super::push_back(e); m_current_index = super::size() - 1; + onCurrentChanged(); } void insert_at(size_t i, T* e) { super::insert_at(i, e); m_current_index = i; + onCurrentChanged(); } void replace_at(size_t i, T* e) { super::replace_at(i, e); m_current_index = i; + onCurrentChanged(); } void delete_element(const T* e) { @@ -80,7 +83,10 @@ public: void setCurrentIndex(size_t i) { ASSERT(i < super::size() || i == size_t(-1)); - m_current_index = i; + if (i != m_current_index) { + m_current_index = i; + onCurrentChanged(); + } } size_t currentIndex() const { return m_current_index; } const T* currentItem() const @@ -95,11 +101,15 @@ public: private: void update_current() { - if (m_current_index == super::size()) + if (m_current_index == super::size()) { m_current_index = super::size() - 1; + onCurrentChanged(); + } } size_t m_current_index = -1; + + virtual void onCurrentChanged() const {} }; #endif // BORNAGAIN_BASE_TYPES_VECTORWC_H diff --git a/GUI/Model/Device/InstrumentsSet.h b/GUI/Model/Device/InstrumentsSet.h index 8d4ddca38af4830ede8d5acfb0585294f01c0182..1c84da9b6ddb58f72bed074477328f058cbb786f 100644 --- a/GUI/Model/Device/InstrumentsSet.h +++ b/GUI/Model/Device/InstrumentsSet.h @@ -61,6 +61,11 @@ signals: //! Signals name change of the given instrument. //! In addition to this, instrumentChanged() will be emitted as well. void instrumentNameChanged(const InstrumentItem* instrument) const; + + void instrumentSelected() const; + +private: + void onCurrentChanged() const override { emit instrumentSelected(); } }; #endif // BORNAGAIN_GUI_MODEL_DEVICE_INSTRUMENTSSET_H diff --git a/GUI/View/List/InstrumentsQListView.h b/GUI/View/List/InstrumentsQListView.h index 53b6400266ae2e10245ee4fb1d5c8790e413f9a1..3ab58956ad71123270aff19c1cabe714fd0a9bc5 100644 --- a/GUI/View/List/InstrumentsQListView.h +++ b/GUI/View/List/InstrumentsQListView.h @@ -30,9 +30,6 @@ public: QSize sizeHint() const override; QSize minimumSizeHint() const override; -signals: - void instrumentSelected(InstrumentItem* instrument); - private slots: void onStoreInLibrary() const; void onLoadFromLibrary(); diff --git a/GUI/View/Views/InstrumentView.cpp b/GUI/View/Views/InstrumentView.cpp index ae27639812d2cd405cd6df34eaa50c046f934031..8fbd499015ebf7d48a82cc7896889d894709d926 100644 --- a/GUI/View/Views/InstrumentView.cpp +++ b/GUI/View/Views/InstrumentView.cpp @@ -68,7 +68,7 @@ InstrumentView::InstrumentView() //... Finalize - connect(m_listing, &InstrumentsQListView::instrumentSelected, this, + connect(gDoc->instruments(), &InstrumentsSet::instrumentSelected, this, &InstrumentView::createWidgetsForCurrentInstrument); // Initial state