1 // -*- C++ -*- 2 /** 3 * \file GuiIdListModel.h 4 * This file is part of LyX, the document processor. 5 * Licence details can be found in the file COPYING. 6 * 7 * \author Richard Heck 8 * 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. 12 * 13 * Full author contact details are available in file CREDITS. 14 */ 15 16 #ifndef GUIIDLISTMODEL_H 17 #define GUIIDLISTMODEL_H 18 19 #include "support/qstring_helpers.h" 20 21 #include <QAbstractListModel> 22 #include <vector> 23 #include <string> 24 25 namespace lyx { 26 namespace frontend { 27 28 /** 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. 32 * 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. 38 */ 39 class GuiIdListModel : public QAbstractListModel { 40 public: 41 /// GuiIdListModel()42 GuiIdListModel() {} 43 ////////////////////////////////////////////////////////////////////// 44 // Methods overridden from QAbstractListModel 45 ////////////////////////////////////////////////////////////////////// 46 /// 47 int rowCount(QModelIndex const & = QModelIndex()) const 48 { return userData_.size(); } 49 50 /// 51 virtual QVariant data(QModelIndex const & index, 52 int role = Qt::DisplayRole) const; 53 /// 54 bool insertRows(int row, int count, QModelIndex const & parent = QModelIndex()); 55 /// 56 bool removeRows(int row, int count, QModelIndex const & parent = QModelIndex()); 57 /// clear()58 void clear() { removeRows(0, rowCount()); } 59 /// 60 virtual bool setData (QModelIndex const & index, 61 const QVariant & value, int role = Qt::EditRole ); 62 /// 63 virtual QMap<int, QVariant> itemData(QModelIndex const & index ) const; 64 ////////////////////////////////////////////////////////////////////// 65 // New methods 66 ////////////////////////////////////////////////////////////////////// 67 /// 68 void insertRow(int const i, QString const & uiString, 69 std::string const & idString, QString const & ttString); 70 /// A convenience method, setting ttString to the same as uiString 71 void insertRow(int const i, QString const & uiString, 72 std::string const & idString); 73 /// \return the index of the (first) item with idString 74 /// \return -1 if not found 75 int findIDString(std::string const & idString); 76 /// getIDString(QModelIndex const & index)77 virtual QString getIDString(QModelIndex const & index) const 78 { return data(index, Qt::UserRole).toString(); } 79 /// getIDString(int const i)80 virtual std::string getIDString(int const i) const 81 { return fromqstr(getIDString(index(i))); } 82 83 private: 84 /// noncopyable 85 GuiIdListModel(GuiIdListModel const &); 86 /// 87 void operator=(GuiIdListModel const &); 88 /// setUIString(QModelIndex const & index,QString const & value)89 void setUIString(QModelIndex const & index, QString const & value) 90 { setData(index, value); } 91 /// setUIString(int const i,QString const & value)92 void setUIString(int const i, QString const & value) 93 { setUIString(index(i), value); } 94 /// setIDString(QModelIndex const & index,QString const & value)95 void setIDString(QModelIndex const & index, QString const & value) 96 { setData(index, value, Qt::UserRole); } 97 /// setIDString(int const i,std::string const & value)98 void setIDString(int const i, std::string const & value) 99 { setIDString(index(i), toqstr(value)); } 100 /// setTTString(QModelIndex const & index,QString const & value)101 void setTTString(QModelIndex const & index, QString const & value) 102 { setData(index, value, Qt::ToolTipRole); } 103 /// setTTString(int const i,QString const & value)104 void setTTString(int const i, QString const & value) 105 { setTTString(index(i), value); } 106 struct OurData { 107 /// Qt::DisplayRole and Qt::EditRole 108 QVariant uiString; 109 /// Qt::UserRole 110 QVariant idString; 111 /// Qt::ToolTipRole 112 QVariant ttString; 113 }; 114 /// 115 std::vector<OurData> userData_; 116 /// rowIsValid(int const i)117 bool rowIsValid(int const i) const 118 { 119 return i >= 0 && i <= int(userData_.size()); 120 } 121 }; 122 123 124 } // namespace frontend 125 } // namespace lyx 126 #endif //GUIIDLISTMODEL_H 127