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"
24 #include "emufrontfile.h"
25 #include "emufrontfileobject.h"
27 EmuFrontFileObjectModel::EmuFrontFileObjectModel(QObject *parent) :
28 EmuFrontQueryModel(parent)
31 Qt::ItemFlags EmuFrontFileObjectModel::flags(const QModelIndex &index) const
33 Qt::ItemFlags flags = QSqlQueryModel::flags(index);
34 if (index.column() == EmuFrontFileObject_Name) {
35 flags |= Qt::ItemIsEditable;
40 bool EmuFrontFileObjectModel::setData(const QModelIndex &index, const QVariant &value, int /*role*/)
42 if(index.column() != EmuFrontFileObject_Name)
45 QModelIndex primaryKeyIndex
46 = QSqlQueryModel::index(index.row(), EmuFrontFileObject_Id);
48 int id = data(primaryKeyIndex).toInt();
52 if (index.column() == EmuFrontFileObject_Name) {
53 ok = setName(id, value.toString());
60 void EmuFrontFileObjectModel::refresh()
62 setQuery(constructSelect());
63 setHeaderData(EmuFrontFileObject_Id, Qt::Horizontal, tr("ID"));
64 setHeaderData(EmuFrontFileObject_Name, Qt::Horizontal, tr("Name"));
65 setHeaderData(EmuFrontFileObject_FileId, Qt::Horizontal, tr("FileID"));
66 setHeaderData(EmuFrontFileObject_FileName, Qt::Horizontal, tr("File Name"));
67 setHeaderData(EmuFrontFileObject_FileCheckSum, Qt::Horizontal, tr("File Checksum"));
68 setHeaderData(EmuFrontFileObject_FileSize, Qt::Horizontal, tr("File Size"));
69 setHeaderData(EmuFrontFileObject_FileType, Qt::Horizontal, tr("File Type"));
70 setHeaderData(EmuFrontFileObject_FileUpdateTime, Qt::Horizontal, tr("File Updated"));
73 QString EmuFrontFileObjectModel::constructSelect(QString where) const
75 return QString("SELECT maintbl.id AS FileObjectId, "
76 "maintbl.name AS Name, "
78 "file.name AS FileName, "
79 "file.type AS FileType, "
80 "file.checksum AS FileChecksum, "
81 "file.size AS FileSize, "
82 "file.updatetime AS FileUpdateTime "
84 "LEFT OUTER JOIN file ON maintbl.fileid=file.id "
86 "ORDER BY Name").arg(tableName).arg(where);
89 bool EmuFrontFileObjectModel::setName(int id, const QString &name)
92 query.prepare(QString("update %1 set name = :name where id = :id").arg(tableName));
93 query.bindValue(":name", name);
94 query.bindValue(":id", id);
98 bool EmuFrontFileObjectModel::insertRows(int row, int count, const QModelIndex &parent)
100 if (parent.isValid())
101 return false; // This is a flat model
102 if (rowCount() < row)
103 row = rowCount() + 1;
105 q.prepare(QString("INSERT INTO %1 (id, name, fileid) "
106 " VALUES (NULL, '', NULL) ").arg(tableName));
107 beginInsertRows(QModelIndex(), row, row + count - 1);
108 for (int i = 0; i < count; ++i) {
116 bool EmuFrontFileObjectModel::removeRows(int row, int count, const QModelIndex &parent)
118 if (parent.isValid()) {
119 return false; // This is a flat model
121 if (rowCount() < row + count - 1)
125 q.prepare(QString("DELETE FROM %1 WHERE id=:id").arg(tableName));
126 QModelIndex primaryIndex;
128 beginRemoveRows(QModelIndex(), row, row + count - 1);
129 for(int i = 0; i < count; ++i) {
130 primaryIndex = QSqlQueryModel::index(row + i, EmuFrontFileObject_Id);
131 id = data(primaryIndex).toInt();
132 qDebug() << "Removing data item with id " << id;
133 q.bindValue(":id", id);
141 // Implemented for EmuFrontQueryModel:
142 EmuFrontObject* EmuFrontFileObjectModel::recordToDataObject(const QSqlRecord* record)
144 int id = record->value(EmuFrontFileObject_Id).toInt();
145 QString name = record->value(EmuFrontFileObject_Name).toString();
146 int fileId = record->value(EmuFrontFileObject_FileId).toInt();
150 // TODO: need fileModel
151 EmuFrontObject *o = fileModel.getDataObject(fileId);
152 f = dynamic_cast<EmuFrontFile*>(o);
154 EmuFrontObject *efo = createEmuFrontFileObject(id, name, f);
158 QString EmuFrontFileObjectModel::constructFilterById(int id) const
160 return QString("maintbl.id = %1").arg(id);