New files, anticipating a later commit.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22500 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2008-01-12 02:31:32 +00:00
parent 4adf77cf7d
commit 471cf26b11
2 changed files with 273 additions and 0 deletions

View File

@ -0,0 +1,146 @@
/**
* \file GuiIdListModel.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Richard Heck
*
* Some of this code is based upon qstringlistmodel.{h,cpp}, which is
* part of the Qt toolkit, copyright (C) 1992-2007 Trolltech ASA, and
* released under the General Public License.
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "GuiIdListModel.h"
using std::vector;
namespace lyx {
namespace frontend {
GuiIdListModel::GuiIdListModel() :
QAbstractListModel()
{}
QVariant GuiIdListModel::data(QModelIndex const & index, int role) const
{
int const row = index.row();
if (!rowIsValid(row))
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return userData_[row].uiString;
if (role == Qt::UserRole)
return userData_[row].idString;
return QVariant();
}
bool GuiIdListModel::setData (QModelIndex const & index,
const QVariant & value, int role)
{
int const row = index.row();
if (!rowIsValid(row))
return false;
if (role == Qt::DisplayRole || role == Qt::EditRole) {
userData_[row].uiString = value;
dataChanged(index, index);
return true;
}
if (role == Qt::UserRole) {
userData_[row].idString = value;
dataChanged(index, index);
return true;
}
return false;
}
bool GuiIdListModel::insertRows(int row, int count,
QModelIndex const & /*parent*/)
{
if (!rowIsValid(row))
return false;
vector<OurData>::iterator it = userData_.begin() + row;
OurData const v;
beginInsertRows(QModelIndex(), row, row + count - 1);
userData_.insert(it, count, v);
endInsertRows();
return true;
}
bool GuiIdListModel::removeRows(int row, int count,
QModelIndex const & /*parent*/)
{
if (!rowIsValid(row) || row + count > userData_.size() ||
count < 0)
return false;
if (count == 0)
return true;
vector<OurData>::iterator it = userData_.begin() + row;
beginRemoveRows(QModelIndex(), row, row + count - 1);
userData_.erase(it, it + count);
endRemoveRows();
return true;
}
void GuiIdListModel::insertRow(int const i, std::string const & uiString,
std::string const & idString)
{
insertRows(i, 1);
setUIString(i, uiString);
setIDString(i, idString);
}
QMap<int, QVariant>
GuiIdListModel::itemData(QModelIndex const & index ) const
{
int const row = index.row();
if (!rowIsValid(row))
return QMap<int, QVariant>();
QMap<int, QVariant> qm = QAbstractListModel::itemData(index);
qm[Qt::UserRole] = userData_[row].idString;
return qm;
}
/* The following functions are currently unused but are retained here in
case they should at some point be useful.
QStringList GuiIdListModel::getIDStringList() const {
QStringList qsl;
vector<OurData>::const_iterator it = userData_.begin();
vector<OurData>::const_iterator end = userData_.end();
for (; it != end; ++it)
qsl.append(it->idString.toString());
return qsl;
}
void GuiIdListModel::insertRow(int const i, QString const & uiString,
QString const & idString)
{
insertRows(i, 1);
setUIString(i, uiString);
setIDString(i, idString);
}
bool GuiIdListModel::containsID(QVariant const & q) const
{
vector<OurData>::const_iterator it = userData_.begin();
vector<OurData>::const_iterator end = userData_.end();
for (; it != end; ++it)
if (it->idString == q)
return true;
return false;
}
*/
}
}

View File

@ -0,0 +1,127 @@
// -*- C++ -*-
/**
* \file GuiIdListModel.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Richard Heck
*
* Some of this code is based upon qstringlistmodel.{h,cpp}, which is
* part of the Qt toolkit, copyright (C) 1992-2007 Trolltech ASA, and
* released under the General Public License.
*
* Full author contact details are available in file CREDITS.
*/
#ifndef GUIIDLISTMODEL_H
#define GUIIDLISTMODEL_H
#include <QAbstractListModel>
#include <vector>
#include <string>
#include "support/qstring_helpers.h"
namespace lyx {
namespace frontend {
/**
* A QAbstractListModel that associates an identifying string with
* each item, as well as a display string. The display string is set
* with setUIString; the identifying string, with setIDString.
*
* This is intended to be used, for example, with GuiSelectionManager.
* In that case, one needs to recover from selectedModel which items
* have been selected. One may not wish to do so using the string that
* is there *displayed*, since, among other things, that string may be
* translated. So the id can be used to identify the items in this case.
*/
class GuiIdListModel : public QAbstractListModel {
public:
///
explicit GuiIdListModel();
//////////////////////////////////////////////////////////////////////
// Methods overridden from QAbstractListModel
//////////////////////////////////////////////////////////////////////
///
inline int rowCount(QModelIndex const & parent = QModelIndex()) const;
///
virtual QVariant data(QModelIndex const & index,
int role = Qt::DisplayRole) const;
///
bool insertRows(int row, int count, QModelIndex const & parent = QModelIndex());
///
bool removeRows(int row, int count, QModelIndex const & parent = QModelIndex());
///
void clear() { removeRows(0, rowCount()); };
///
virtual bool setData (QModelIndex const & index,
const QVariant & value, int role = Qt::EditRole );
///
virtual QMap<int, QVariant> itemData(QModelIndex const & index ) const;
//////////////////////////////////////////////////////////////////////
// New methods
//////////////////////////////////////////////////////////////////////
///
inline void setUIString(QModelIndex const & index, QString const & value)
{ setData(index, value); };
///
inline void setUIString(int const i, std::string const & value)
{ setUIString(index(i), toqstr(value)); };
///
inline void setIDString(QModelIndex const & index, QString const & value)
{ setData(index, value, Qt::UserRole); };
///
inline void setIDString(int const i, std::string const & value)
{ setIDString(index(i), toqstr(value)); };
///
virtual QString getIDString(QModelIndex const & index) const
{ return data(index, Qt::UserRole).toString(); };
///
virtual std::string getIDString(int const i) const
{ return fromqstr(getIDString(index(i))); };
///
void insertRow(int const i, std::string const & uiString,
std::string const & idString);
/* The following functions are currently unused but are retained here in
case they should at some point be useful.
///
void setUIString(int const i, QString const & value)
{ setUIString(index(i), value); };
///
void setIDString(int const i, QString const & value)
{ setIDString(index(i), value); };
///
QStringList getIDStringList() const;
///
void insertRow(int const i, QString const & uiString,
QString const & idString);
/// Returns whether the model contains an item with the given ID
bool containsID(QVariant const &) const;
*/
private:
/// noncopyable
GuiIdListModel(GuiIdListModel const &);
///
struct OurData {
QVariant uiString;
QVariant idString;
};
///
std::vector<OurData> userData_;
///
inline bool rowIsValid(int const i) const
{
return (i >= 0 && (i <= userData_.size()));
}
;
};
//definition is here to silence a warning
inline int GuiIdListModel::rowCount(QModelIndex const &) const
{ return userData_.size(); }
}
}
#endif //GUIIDLISTMODEL_H