diff options
Diffstat (limited to 'actormodel.cpp')
-rw-r--r-- | actormodel.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/actormodel.cpp b/actormodel.cpp new file mode 100644 index 0000000..3f07f3d --- /dev/null +++ b/actormodel.cpp @@ -0,0 +1,110 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QIcon> + +#include "actormodel.h" + +ActorModel::ActorModel() {}; + +QModelIndex ActorModel::index(int row, int column, const QModelIndex &) const { + if((column != 0) || (row >= mItems.size()) || row < 0){ + return QModelIndex(); + } + return createIndex(row, 0, 0); +} + +QModelIndex ActorModel::index(const QVariant &item) const { + if(item == QVariant()){ + return QModelIndex(); + } + QString sItem = item.toString(); + for(int i = 0; i < mItems.size(); ++i){ + if(mItems.at(i) == sItem){ + return createIndex(i, 0, 0); + } + } + return QModelIndex(); +} + +int ActorModel::rowCount(const QModelIndex &) const { + return mItems.size(); +} + +QVariant ActorModel::data(const QModelIndex &index, int role) const { + if(!index.isValid() || (index.column() > 0) || (index.row() > mItems.size())){ + return QVariant(); + } + switch (role) { + case Qt::DisplayRole: + return mItems.at(index.row()); + break; + case Qt::DecorationRole: + return QIcon(":/dildo.png"); + break; + } + return QVariant(); +} + +bool ActorModel::insertRows(int row, int count, const QModelIndex &){ + beginInsertRows(QModelIndex(), row, row + count - 1); + for(int i = row; i < (row + count); ++i){ + mItems.insert(i, QString()); + } + endInsertRows(); + return true; +} + +bool ActorModel::removeRows(int row, int count, const QModelIndex &){ + if((row > mItems.size()) || ((row + count) > mItems.size())){ + return false; + } + beginRemoveRows(QModelIndex(), row, row + (count - 1)); + for(int i = row; i < (row + count); ++i){ + mItems.removeAt(i); + } + endRemoveRows(); + return true; +} + +bool ActorModel::setData(const QModelIndex &idx, const QVariant &data, int role){ + if(!idx.isValid() || (idx.column() != 0) || (role != Qt::EditRole)){ + return false; + } + mItems[idx.row()] = data.toString(); + qSort(mItems); + dataChanged(index(0, 0), index((mItems.size() - 1), 0)); + return true; +} + +bool ActorModel::addItem(const QVariant &data){ + if(mItems.contains(data.toString())){ + return false; + } + bool success = false; + if(insertRows(0, 1, QModelIndex())){ + QModelIndex idx = index(0, 0); + if(idx.isValid()){ + success = setData(idx, data, Qt::EditRole); + } + } + return success; +} + +bool ActorModel::removeItem(const QVariant &data){ + QModelIndex idx = index(data); + if(!idx.isValid()){ + return false; + } + bool retval = removeRows(idx.row(), 1, QModelIndex()); + return retval; +} + +void ActorModel::clear() { + removeRows(0, mItems.size(), QModelIndex()); +} + |