3 * \file GuiIdListModel.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Some of this code is based upon qstringlistmodel.{h,cpp}, which is
10 * part of the Qt toolkit, copyright (C) 1992-2007 Trolltech ASA, and
11 * released under the General Public License.
13 * Full author contact details are available in file CREDITS.
16 #ifndef GUIIDLISTMODEL_H
17 #define GUIIDLISTMODEL_H
19 #include "support/qstring_helpers.h"
21 #include <QAbstractListModel>
29 * A QAbstractListModel that associates an identifying string with
30 * each item, as well as a display string. The display string is set
31 * with setUIString; the identifying string, with setIDString.
33 * This is intended to be used, for example, with GuiSelectionManager.
34 * In that case, one needs to recover from selectedModel which items
35 * have been selected. One may not wish to do so using the string that
36 * is there *displayed*, since, among other things, that string may be
37 * translated. So the id can be used to identify the items in this case.
39 class GuiIdListModel : public QAbstractListModel {
43 //////////////////////////////////////////////////////////////////////
44 // Methods overridden from QAbstractListModel
45 //////////////////////////////////////////////////////////////////////
47 int rowCount(QModelIndex const & = QModelIndex()) const override
48 { return int(userData_.size()); }
51 QVariant data(QModelIndex const & index, int role = Qt::DisplayRole) const override;
53 bool insertRows(int row, int count, QModelIndex const & parent = QModelIndex()) override;
55 bool removeRows(int row, int count, QModelIndex const & parent = QModelIndex()) override;
57 void clear() { removeRows(0, rowCount()); }
59 bool setData (QModelIndex const & index,
60 const QVariant & value, int role = Qt::EditRole) override;
62 QMap<int, QVariant> itemData(QModelIndex const & index ) const override;
63 //////////////////////////////////////////////////////////////////////
65 //////////////////////////////////////////////////////////////////////
67 void insertRow(int const i, QString const & uiString,
68 std::string const & idString, QString const & ttString);
69 /// A convenience method, setting ttString to the same as uiString
70 void insertRow(int const i, QString const & uiString,
71 std::string const & idString);
72 /// \return the index of the (first) item with idString
73 /// \return -1 if not found
74 int findIDString(std::string const & idString);
76 virtual QString getIDString(QModelIndex const & index) const
77 { return data(index, Qt::UserRole).toString(); }
79 virtual std::string getIDString(int const i) const
80 { return fromqstr(getIDString(index(i))); }
84 GuiIdListModel(GuiIdListModel const &);
86 void operator=(GuiIdListModel const &);
88 void setUIString(QModelIndex const & index, QString const & value)
89 { setData(index, value); }
91 void setUIString(int const i, QString const & value)
92 { setUIString(index(i), value); }
94 void setIDString(QModelIndex const & index, QString const & value)
95 { setData(index, value, Qt::UserRole); }
97 void setIDString(int const i, std::string const & value)
98 { setIDString(index(i), toqstr(value)); }
100 void setTTString(QModelIndex const & index, QString const & value)
101 { setData(index, value, Qt::ToolTipRole); }
103 void setTTString(int const i, QString const & value)
104 { setTTString(index(i), value); }
106 /// Qt::DisplayRole and Qt::EditRole
114 std::vector<OurData> userData_;
116 bool rowIsValid(int const i) const
118 return i >= 0 && i <= int(userData_.size());
123 } // namespace frontend
125 #endif //GUIIDLISTMODEL_H