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