3 ** Copyright 2010 Mikko Keinänen
5 ** This file is part of EmuFront.
8 ** EmuFront is free software: you can redistribute it and/or modify
9 ** it under the terms of the GNU General Public License version 2 as published by
10 ** the Free Software Foundation and appearing in the file gpl.txt included in the
11 ** packaging of this file.
13 ** EmuFront is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** GNU General Public License for more details.
18 ** You should have received a copy of the GNU General Public License
19 ** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
23 #include "emufrontfileobjectmodel.h"
25 EmuFrontFileObjectModel::EmuFrontFileObjectModel(QObject *parent) :
26 EmuFrontQueryModel(parent)
29 Qt::ItemFlags EmuFrontFileObjectModel::flags(const QModelIndex &index) const
31 Qt::ItemFlags flags = QSqlQueryModel::flags(index);
32 if (index.column() == EmuFrontFileObject_Name) {
33 flags |= Qt::ItemIsEditable;
38 bool EmuFrontFileObjectModel::setData(const QModelIndex &index, const QVariant &value, int /*role*/)
40 if(index.column() != EmuFrontFileObject_Name)
43 QModelIndex primaryKeyIndex
44 = QSqlQueryModel::index(index.row(), EmuFrontFileObject_Id);
46 int id = data(primaryKeyIndex).toInt();
50 if (index.column() == EmuFrontFileObject_Name) {
51 ok = setName(id, value.toString());
58 void EmuFrontFileObjectModel::refresh()
60 setQuery(constructSelect());
61 setHeaderData(EmuFrontFileObject_Id, Qt::Horizontal, tr("ID"));
62 setHeaderData(EmuFrontFileObject_Name, Qt::Horizontal, tr("Name"));
63 setHeaderData(EmuFrontFileObject_FileId, Qt::Horizontal, tr("FileID"));
64 setHeaderData(EmuFrontFileObject_FileName, Qt::Horizontal, tr("File Name"));
65 setHeaderData(EmuFrontFileObject_FileCheckSum, Qt::Horizontal, tr("File Checksum"));
66 setHeaderData(EmuFrontFileObject_FileSize, Qt::Horizontal, tr("File Size"));
67 setHeaderData(EmuFrontFileObject_FileType, Qt::Horizontal, tr("File Type"));
68 setHeaderData(EmuFrontFileObject_FileUpdateTime, Qt::Horizontal, tr("File Updated"));
71 QString EmuFrontFileObjectModel::constructSelect(QString where) const
73 return QString("SELECT maintbl.id AS FileObjectId, "
74 "maintbl.name AS Name, "
76 "file.name AS FileName, "
77 "file.type AS FileType, "
78 "file.checksum AS FileChecksum, "
79 "file.size AS FileSize, "
80 "file.updatetime AS FileUpdateTime "
82 "LEFT OUTER JOIN file ON maintbl.fileid=file.id "
84 "ORDER BY Name").arg(tableName).arg(where);
87 bool EmuFrontFileObjectModel::setName(int id, const QString &name)
90 query.prepare(QString("update %1 set name = :name where id = :id").arg(tableName));
91 query.bindValue(":name", name);
92 query.bindValue(":id", id);
96 bool EmuFrontFileObjectModel::insertRows(int row, int count, const QModelIndex &parent)
99 return false; // This is a flat model
100 if (rowCount() < row)
101 row = rowCount() + 1;
103 q.prepare(QString("INSERT INTO %1 (id, name, fileid) "
104 " VALUES (NULL, '', NULL) ").arg(tableName));
105 beginInsertRows(QModelIndex(), row, row + count - 1);
106 for (int i = 0; i < count; ++i) {
114 bool EmuFrontFileObjectModel::removeRows(int row, int count, const QModelIndex &parent)
116 if (parent.isValid()) {
117 return false; // This is a flat model
119 if (rowCount() < row + count - 1)
123 q.prepare(QString("DELETE FROM %1 WHERE id=:id").arg(tableName));
124 QModelIndex primaryIndex;
126 beginRemoveRows(QModelIndex(), row, row + count - 1);
127 for(int i = 0; i < count; ++i) {
128 primaryIndex = QSqlQueryModel::index(row + i, EmuFrontFileObject_Id);
129 id = data(primaryIndex).toInt();
130 qDebug() << "Removing data item with id " << id;
131 q.bindValue(":id", id);