1 #pragma once 2 3 #include "common/common_pch.h" 4 5 #include <QComboBox> 6 7 #include "common/qt.h" 8 9 namespace mtx::gui::Util { 10 11 class ComboBoxBasePrivate; 12 class ComboBoxBase: public QComboBox { 13 Q_OBJECT 14 15 protected: 16 MTX_DECLARE_PRIVATE(ComboBoxBasePrivate) 17 18 std::unique_ptr<ComboBoxBasePrivate> const p_ptr; 19 20 explicit ComboBoxBase(ComboBoxBasePrivate &p, QWidget *parent); 21 22 using StringPairVector = std::vector<std::pair<QString, QString>>; 23 24 public: 25 explicit ComboBoxBase(QWidget *parent = nullptr); 26 virtual ~ComboBoxBase(); 27 28 virtual ComboBoxBase &setup(bool withEmpty = false, QString const &emptyTitle = QString{}) = 0; 29 30 virtual ComboBoxBase &setCurrentByData(QString const &value); 31 virtual ComboBoxBase &setCurrentByData(QStringList const &values); 32 33 virtual ComboBoxBase &setAdditionalItems(QString const &item); 34 virtual ComboBoxBase &setAdditionalItems(QStringList const &items); 35 virtual QStringList const &additionalItems() const; 36 37 virtual ComboBoxBase &reInitializeIfNecessary(); 38 virtual bool onlyShowOftenUsed() const; 39 40 public Q_SLOTS: 41 virtual void reInitialize(); 42 43 protected: 44 static StringPairVector mergeCommonAndAdditionalItems(StringPairVector const &commonItems, StringPairVector const &allItems, QStringList const &additionalItems); 45 }; 46 47 } 48