/* 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 #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()); }