if (!ret) throw QString("tbl config");
- ret = query.exec("CREATE TABLE IF NOT EXISTS file"
+ ret = query.exec(
+ "CREATE TABLE IF NOT EXISTS titlename "
+ "(id INTEGER PRIMARY KEY, "
+ " name TEXT)"
+ // TODO: more fields here...
+ );
+
+ if (!ret) throw QString("tbl titlename");
+
+ ret = query.exec("CREATE TABLE IF NOT EXISTS file "
"(id INTEGER PRIMARY KEY, "
"name TEXT, "
"type INTEGER, "
if (!ret) throw QString("tbl file");
+ ret = query.exec(
+ "CREATE TABLE IF NOT EXISTS file titlename_file "
+ "(titlenameid INTEGER REFERENCES titlename(id), "
+ "fileid INTEGER REFERENCES file(id))"
+ );
+
qDebug() << "Creating TABLE platform";
ret = query.exec("CREATE TABLE IF NOT EXISTS platform "
#include <QSqlTableModel>
#include <QItemSelectionModel>
#include "emulauncher.h"
-//#include "dbmediatype.h"
-//#include "mediatypemodel.h"
-//#include "dbplatform.h"
-//#include "platformmodel.h"
-//#include "dbexecutable.h"
#include "setupmodel.h"
#include "externalexecutablemodel.h"
#include "dbmediaimagecontainer.h"
#include "executable.h"
#include "emuhelper.h"
#include "emufrontinputdialog.h"
-//#include "mediatype.h"
-//#include "platform.h"
EmuLauncher::EmuLauncher(QErrorMessage *errorMessage, QWidget *parent, QString tmp) :
QWidget(parent), tmpDirPath(tmp), errorMessage(errorMessage)
{
- //dbPlatform = new DbPlatform(this);
- //dbMediaType = new DbMediaType(this);
- //dbExec = new DbExecutable(this);
dbMic = 0;
emuHelper = new EmuHelper(this);
initWidgets();
void EmuLauncher::updateData()
{
- //platformSelectBox->updateDataModel();
- //mediaTypeSelectBox->updateDataModel();
- //execSelectBox->updateDataModel();
}
void EmuLauncher::initWidgets()
micTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
micTable->setCornerButtonEnabled(false);
micTable->verticalHeader()->setVisible(false);
- //micTable->horizontalHeader()->setDisabled(true);
micTable->horizontalHeader()->setClickable(false);
- //mediaTypeSelectBox = new EFFileObjectComboBox(dbMediaType, this);
- //platformSelectBox = new EFFileObjectComboBox(dbPlatform, this);
- //execSelectBox = new ExecutableComboBox(dbExec, this);
-
- /*MediaTypeModel *mtModel = new MediaTypeModel(this);
- mediaTypeSelectBox = new QComboBox(this);
- mediaTypeSelectBox->setModel(mtModel);
- mediaTypeSelectBox->setModelColumn(MediaTypeModel::EmuFrontFileObject_Name);
-
- PlatformModel *plfModel = new PlatformModel(this);
- platformSelectBox = new QComboBox(this);
- platformSelectBox->setModel(plfModel);
- platformSelectBox->setModelColumn(PlatformModel::EmuFrontFileObject_Name);*/
SetupModel *supModel = new SetupModel(this);
setupSelectBox = new QComboBox(this);
void EmuLauncher::layout()
{
QGridLayout *grid = new QGridLayout;
- //grid->addWidget(platformSelectBox, 0, 0);
- //grid->addWidget(mediaTypeSelectBox, 0, 1);
grid->addWidget(setupSelectBox, 0, 0, 1, 2);
grid->addWidget(selectButton, 0, 2);
grid->setColumnStretch(3, 1);
void EmuLauncher::updateMediaImageContainers()
{
- /*if (platformSelectBox->currentIndex() == -1 ||
- mediaTypeSelectBox->currentIndex() == -1)
- return;
- */
-
if (setupSelectBox->currentIndex() == -1) return;
- //int mtid, plfid = -1;
-
- //MediaType *mt = 0;
- //Platform *plf = 0;
-
- // TODO: maybe rewrite EFFileObjectComboBox and put the following there:
- /*QAbstractItemModel *plfAbsModel = platformSelectBox->model();
- PlatformModel *plfModel = qobject_cast<PlatformModel *>(plfAbsModel);
- if (!plfModel) return;
+ // 1. get selected platform and media type id
+ QAbstractItemModel *setupAbsModel = setupSelectBox->model();
+ SetupModel *supModel = qobject_cast<SetupModel *>(setupAbsModel);
+ if (!supModel) return;
QModelIndex plfInd =
- plfModel->index(platformSelectBox->currentIndex(), PlatformModel::EmuFrontFileObject_Id);
- plfid = plfModel->data(plfInd).toInt();
-
- // TODO: maybe rewrite EFFileObjectComboBox and put the following there:
- QAbstractItemModel *mtAbsModel = mediaTypeSelectBox->model();
- MediaTypeModel *mtModel = qobject_cast<MediaTypeModel *>(mtAbsModel);
- if (!mtModel) return;
+ supModel->index(setupSelectBox->currentIndex(), SetupModel::Setup_PlatformId);
+ int plfid = supModel->data(plfInd).toInt();
QModelIndex mtInd =
- mtModel->index(mediaTypeSelectBox->currentIndex(), MediaTypeModel::EmuFrontFileObject_Id);
- mtid = mtModel->data(mtInd).toInt();*/
+ supModel->index(setupSelectBox->currentIndex(), SetupModel::Setup_MediaTypeId);
+ int mtid = supModel->data(mtInd).toInt();
- /*try {
- mt = dynamic_cast<MediaType*>(mediaTypeSelectBox->getSelected());
- plf = dynamic_cast<Platform*>(platformSelectBox->getSelected());
- }
- catch(EmuFrontException &e){
- errorMessage->showMessage(e.what());
- return;
- }*/
- /*mtid = mt ? mt->getId() : -1;
- plfid = plf ? plf->getId() : -1;
- if (mt) delete mt;
- if (plf) delete plf;*/
+ if (mtid < 0 || plfid < 0) return;
+ // 2. fetch available media image containers
if (!dbMic) dbMic = new DbMediaImageContainer(this);
- //dbMic->filter(mtid, plfid);
+ dbMic->filter(mtid, plfid);
micTable->setModel(dbMic->getDataModel());
micTable->hideColumn(DbMediaImageContainer::MIC_FileId);
micTable->hideColumn(DbMediaImageContainer::MIC_FileSize);
micTable->hideColumn(DbMediaImageContainer::MIC_MediaTypeName);
micTable->hideColumn(DbMediaImageContainer::MIC_MediaTypeId);
micTable->resizeColumnsToContents();
- //execSelectBox->updateToSetup(plfid, mtid);
+
+ // 3. filter available emulators
+ QModelIndex supInd =
+ supModel->index(setupSelectBox->currentIndex(), SetupModel::Setup_Id);
+ int supid = supModel->data(supInd).toInt();
+ QAbstractItemModel *execAbsModel = execSelectBox->model();
+ ExternalExecutableModel *execModel = qobject_cast<ExternalExecutableModel*>(execAbsModel);
+ if (!execModel) return;
+ execModel->filterBySetup(supid);
}
void EmuLauncher::launchEmu()
class QPushButton;
class QComboBox;
class QErrorMessage;
-//class DbMediaType;
-//class DbPlatform;
class DbMediaImageContainer;
-//class DbExecutable;
-//class EFFileObjectComboBox;
-//class ExecutableComboBox;
class Executable;
class MediaImageContainer;
class EmuHelper;
private:
QTableView *micTable;
- /*EFFileObjectComboBox *platformSelectBox;
- EFFileObjectComboBox *mediaTypeSelectBox;
- ExecutableComboBox *execSelectBox;*/
- //QComboBox *platformSelectBox;
- //QComboBox *mediaTypeSelectBox;
QComboBox *setupSelectBox;
QComboBox *execSelectBox;
-
QPushButton *selectButton;
QPushButton *launchButton;
- //DbPlatform *dbPlatform;
- //DbMediaType *dbMediaType;
DbMediaImageContainer *dbMic;
- //DbExecutable *dbExec;
EmuHelper *emuHelper;
void initWidgets();
void layout();
void connectSignals();
- //void populatePlatformSelectBox();
- //void populateMediaTypeSelectBox();
void launch(const Executable*, const MediaImageContainer*);
void cleanTmp();
QString tmpDirPath;
#include <QtSql>
#include "emufrontfileobjectmodel.h"
+#include "emufrontfile.h"
+#include "emufrontfileobject.h"
EmuFrontFileObjectModel::EmuFrontFileObjectModel(QObject *parent) :
EmuFrontQueryModel(parent)
refresh();
return true;
}
+
+// Implemented for EmuFrontQueryModel:
+EmuFrontObject* EmuFrontFileObjectModel::recordToDataObject(const QSqlRecord* record)
+{
+ int id = record->value(EmuFrontFileObject_Id).toInt();
+ QString name = record->value(EmuFrontFileObject_Name).toString();
+ int fileId = record->value(EmuFrontFileObject_FileId).toInt();
+ EmuFrontFile *f = 0;
+ /*if (fileId > 0)
+ {
+ // TODO: need fileModel
+ EmuFrontObject *o = fileModel.getDataObject(fileId);
+ f = dynamic_cast<EmuFrontFile*>(o);
+ }*/
+ EmuFrontObject *efo = createEmuFrontFileObject(id, name, f);
+ return efo;
+}
+
+QString EmuFrontFileObjectModel::constructFilterById(int id) const
+{
+ return QString("maintbl.id = %1").arg(id);
+}
#include "emufrontquerymodel.h"
+class EmuFrontFile;
+
class EmuFrontFileObjectModel : public EmuFrontQueryModel
{
Q_OBJECT
virtual void refresh();
virtual QString constructSelect(QString where = "") const;
virtual bool setName(int id, const QString &name);
+ // Implemented for EmuFrontQueryModel:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* );
+ virtual QString constructFilterById(int id) const;
+
+private:
+ virtual EmuFrontObject* createEmuFrontFileObject(int id, QString name, EmuFrontFile *f) = 0;
+
};
#endif // EMUFRONTFILEOBJECTMODEL_H
*/
#include "emufrontquerymodel.h"
#include "emufrontobject.h"
+#include "platform.h"
+#include "mediatype.h"
+#include <QtSql>
EmuFrontQueryModel::EmuFrontQueryModel(QObject *parent) :
QSqlQueryModel(parent)
{
}
-EmuFrontObject* EmuFrontQueryModel::getObject(int id) const
+EmuFrontObject* EmuFrontQueryModel::getObject(int row) const
{
// TODO
return 0;
}
+
+/*Platform* EmuFrontQueryModel::getPlatform(int id) const
+{
+}*/
+
+EmuFrontObject* EmuFrontQueryModel::getDataObject(int id)
+{
+ filterById(id);
+ return getFilteredDataObject();
+}
+
+EmuFrontObject* EmuFrontQueryModel::getDataObject(QString filter)
+{
+ QList<QString> filters;
+ filters.append(filter);
+ filterDataObjects(filters);
+ return getFilteredDataObject();
+}
+
+EmuFrontObject* EmuFrontQueryModel::getFilteredDataObject()
+{
+ EmuFrontObject *plf = 0;
+ // TODO: if record has more than one the first instance is returned
+ // ... check if this is ok in all cases!
+ if (rowCount() >= 1)
+ {
+ QSqlRecord rec = record(0);
+ if (rec.isEmpty()) {
+ return 0;
+ }
+ else plf = recordToDataObject(&rec);
+ }
+ return plf;
+}
+
+EmuFrontObject* EmuFrontQueryModel::getDataObject(const QModelIndex &index)
+{
+ QSqlRecord rec = record(index.row());
+ return recordToDataObject(&rec);
+}
+
+int EmuFrontQueryModel::getCurrentTimeStamp() {
+ return QDateTime::currentDateTime().toTime_t();
+}
+
+void EmuFrontQueryModel::filterById(int id)
+{
+ QList<QString> filters;
+ filters.append(constructFilterById(id));
+ filterDataObjects(filters);
+}
+
+/* filters is a list of SQL conditions e.g. setup.id=1 */
+void EmuFrontQueryModel::filterDataObjects(QList<QString> filters)
+{
+ QString where = constructWhereByFilters(filters);
+ QString query = constructSelect(where);
+ setQuery(query);
+}
+
+QString EmuFrontQueryModel::constructWhereByFilters(QList<QString>filters)
+{
+ if (filters.count() == 0) return "";
+ QString where = " WHERE ";
+ int c = 0;
+ foreach(QString filter, filters){
+ where.append(QString(" %1 ").arg(filter));
+ if (++c < filters.count())
+ where.append(" AND ");
+ }
+ return where;
+}
+
+void EmuFrontQueryModel::clearFilters()
+{
+ setQuery(constructSelect());
+}
+
#include <QSqlQueryModel>
class EmuFrontObject;
+class Platform;
+class MediaType;
class EmuFrontQueryModel : public QSqlQueryModel
{
Q_OBJECT
+
public:
EmuFrontQueryModel(QObject *parent = 0);
- EmuFrontObject* getObject(int id) const;
-
-signals:
-
-public slots:
+ EmuFrontObject* getDataObject(int id);
+ EmuFrontObject* getDataObject(const QModelIndex &index);
+ EmuFrontObject* getObject(int row) const;
+ static int getCurrentTimeStamp();
protected:
QString tableName;
QList<int> editableColumns;
+ void filterDataObjects(QList<QString> filter);
+ QString constructWhereByFilters(QList<QString> filters);
+ EmuFrontObject* getDataObject(QString filter);
+ virtual void filterById(int id);
+ void clearFilters();
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) = 0;
+ virtual QString constructFilterById(int id) const = 0;
+ virtual QString constructSelect(QString whereClause = "") const = 0;
+
+private:
+ EmuFrontObject* getFilteredDataObject();
};
#endif // EMUFRONTQUERYMODEL_H
#include "externalexecutablemodel.h"
#include "executable.h"
+#include "setup.h"
+#include "setupmodel.h"
#include "emufrontexception.h"
#include <QtSql>
"INNER JOIN setup ON executable.setupid = setup.id "
"INNER JOIN platform ON setup.platformid=platform.id "
"INNER JOIN mediatype ON setup.mediatypeid=mediatype.id "
- "%1 "
+ " %1 "
"ORDER BY executable.name").arg(where);
}
q.bindValue(":id", id);
return q.exec();
}
+
+void ExternalExecutableModel::filterBySetup(int setupid)
+{
+ QList<QString> filters;
+ filters.append(QString("executable.setupid=%1").arg(setupid));
+ filterDataObjects(filters);
+}
+
+// Implemented for EmuFrontQueryModel:
+EmuFrontObject* ExternalExecutableModel::recordToDataObject(const QSqlRecord* rec)
+{
+ Executable *ex = 0;
+ if (!rec) return ex;
+ int id = rec->value(Executable_Id).toInt();
+ int supid = rec->value(Executable_SetupId).toInt();
+ SetupModel supModel;
+ EmuFrontObject *ob = supModel.getDataObject(supid);
+ Setup *sup = dynamic_cast<Setup*>(ob);
+ QString name = rec->value(Executable_Name).toString();
+ QString exec = rec->value(Executable_Executable).toString();
+ QString opts = rec->value(Executable_Options).toString();
+ int type = rec->value(Executable_TypeId).toInt();
+ ex = new Executable(id, name, exec, opts, sup, type);
+ return ex;
+}
+
+QString ExternalExecutableModel::constructFilterById(int id) const
+{
+ return QString("executable.id=%1").arg(id);
+}
virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
virtual bool insertRows(int row, int count, const QModelIndex &parent);
virtual bool removeRows(int row, int count, const QModelIndex &parent);
+ void filterBySetup(int setupId);
enum {
Executable_Id = 0,
Executable_Name,
virtual bool setExecutableName(int id, QString name);
virtual bool setExecutable(int id, QString name);
virtual bool setOptions(int id, QString options);
+
+ // Implemented for EmuFrontQueryModel:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* );
+ virtual QString constructFilterById(int id) const;
+
};
#endif // EXTERNALEXECUTABLEMODEL_H
#include "filepathmodel.h"
#include "emufrontfile.h"
#include "emufrontexception.h"
+#include "filepathobject.h"
+#include "setup.h"
+#include "setupmodel.h"
#include <QtSql>
FilePathModel::FilePathModel(QObject *parent) :
q.bindValue(":id", id);
return q.exec();
}
+
+bool FilePathModel::setScanned(int id)
+{
+ QSqlQuery q;
+ q.prepare(QString("UPDATE filepath SET lastscanned = :timestamp WHERE id = :id"));
+ q.bindValue(":timestamp", getCurrentTimeStamp());
+ q.bindValue(":id", id);
+ return q.exec();
+}
+
+FilePathObject* FilePathModel::getFilePathObject(const QModelIndex &index)
+{
+ if (!index.isValid()) return 0;
+ EmuFrontObject *efo = getDataObject(index);
+ return dynamic_cast<FilePathObject *>(efo);
+}
+
+EmuFrontObject* FilePathModel::recordToDataObject(const QSqlRecord* rec)
+{
+ int id = rec->value(FilePath_Id).toInt();
+ QString fpath = rec->value(FilePath_Name).toString();
+ int setupId = rec->value(FilePath_SetupId).toInt();
+ int fileType = rec->value(FilePath_FileTypeId).toInt();
+ SetupModel supModel;
+ EmuFrontObject *efo = supModel.getDataObject(setupId);
+ Setup *sup = dynamic_cast<Setup*>(efo);
+ return new FilePathObject(id, fpath, fileType, sup);
+}
+
+QString FilePathModel::constructFilterById(int id) const
+{
+ return QString("filepath.id = %1").arg(id);
+}
#define FILEPATHMODEL_H
#include "emufrontquerymodel.h"
+class FilePathObject;
class FilePathModel : public EmuFrontQueryModel
{
FilePath_SetupName,
FilePath_FileTypeId
};
+ FilePathObject* getFilePathObject(const QModelIndex &index);
+ virtual bool setScanned(int id);
protected:
virtual void refresh();
virtual QString constructSelect(QString where = "") const;
virtual bool setFilePath(int id, QString filePath);
virtual bool setSetup(int isd, int setupId);
+
+ // Implemented for EmuFrontQueryModel:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* );
+ virtual QString constructFilterById(int id) const;
};
#endif // FILEPATHMODEL_H
** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "mediatype.h"
#include "mediatypemodel.h"
MediaTypeModel::MediaTypeModel(QObject *parent) :
tableName = "mediatype";
refresh();
}
+
+EmuFrontObject* MediaTypeModel::createEmuFrontFileObject(int id, QString name, EmuFrontFile *f)
+{ return new MediaType(id, name, f); }
+
**
** You should have received a copy of the GNU General Public License
** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
-*/#ifndef MEDIATYPEMODEL_H
+*/
+#ifndef MEDIATYPEMODEL_H
#define MEDIATYPEMODEL_H
#include "emufrontfileobjectmodel.h"
+class EmuFrontObject;
+class EmuFrontFile;
+
class MediaTypeModel : public EmuFrontFileObjectModel
{
Q_OBJECT
public:
MediaTypeModel(QObject *parent = 0);
+private:
+ EmuFrontObject* createEmuFrontFileObject(int id, QString name, EmuFrontFile *f);
};
#endif // MEDIATYPEMODEL_H
** You should have received a copy of the GNU General Public License
** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "platform.h"
#include "platformmodel.h"
PlatformModel::PlatformModel(QObject *parent) :
tableName = "platform";
refresh();
}
+
+EmuFrontObject* PlatformModel::createEmuFrontFileObject(int id, QString name, EmuFrontFile *f)
+{ return new Platform(id, name, f); }
+
#include "emufrontfileobjectmodel.h"
+class EmuFrontObject;
+class EmuFrontFile;
class PlatformModel : public EmuFrontFileObjectModel
{
Q_OBJECT
public:
PlatformModel(QObject *parent = 0);
+private:
+ EmuFrontObject* createEmuFrontFileObject(int id, QString name, EmuFrontFile *f);
};
#endif // PLATFORMMODEL_H
** You should have received a copy of the GNU General Public License
** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "setup.h"
#include "setupmodel.h"
+#include "platform.h"
+#include "mediatype.h"
+#include "platformmodel.h"
+#include "mediatypemodel.h"
#include "emufrontexception.h"
#include <QtSql>
return true;
}
+// Implemented for EmuFrontQueryModel:
+EmuFrontObject* SetupModel::recordToDataObject(const QSqlRecord *rec)
+{
+ Setup *s = 0;
+ if (!rec) return s;
+
+ int id = rec->value(Setup_Id).toInt();
+ QString extensions = rec->value(Setup_FileTypeExtensions).toString().trimmed();
+ QStringList list;
+ if (!extensions.isEmpty())
+ list = extensions.split(FILE_TYPE_EXTENSION_SEPARATOR);
+ int plfId = rec->value(Setup_PlatformId).toInt();
+ int mtId = rec->value(Setup_MediaTypeId).toInt();
+ PlatformModel plfModel;
+ EmuFrontObject *efo_plf = plfModel.getDataObject(plfId);
+ Platform *plf = dynamic_cast<Platform*>(efo_plf);
+
+ MediaTypeModel mdtModel;
+ EmuFrontObject *efo_mdt = mdtModel.getDataObject(mtId);
+ MediaType *mt = dynamic_cast<MediaType*>(efo_mdt);
+
+ s = new Setup(id, plf, mt, list);
+ return s;
+}
+
+QString SetupModel::constructFilterById(int id) const
+{
+ return QString("setup.id = %1").arg(id);
+}
+
#include "emufrontquerymodel.h"
+class SetupLt;
+
class SetupModel : public EmuFrontQueryModel
{
Q_OBJECT
virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
virtual bool insertRows(int row, int count, const QModelIndex &parent);
virtual bool removeRows(int row, int count, const QModelIndex &parent);
+ //virtual EmuFrontObject* getObject(int row) const;
enum { Setup_Id = 0,
Setup_PlatformId,
Setup_MediaTypeId,
Setup_FileTypeExtensions,
Setup_Name };
static const QString FILE_TYPE_EXTENSION_SEPARATOR;
+ SetupLt* getCurrentItem();
protected:
virtual void refresh();
virtual bool setPlatform(int id, int platformId);
virtual bool setMediaType(int id, int platformId);
virtual bool setSupportedExtensions(int id, QString);
+
+ // Implemented for EmuFrontQueryModel:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* );
+ virtual QString constructFilterById(int id) const;
};
#endif // SETUPMODEL_H
QDialogButtonBox *buttonBox;
QTableView *objectList;
void postInit();
+ virtual void connectSignals();
private:
QPushButton *editButton;
void layout();
virtual void setHiddenColumns();
void hideColumns();
- virtual void connectSignals();
void setButtonsEnabled(bool);
};
*/
#include "filepatheditview.h"
#include "filepathmodel.h"
+#include "fileutil.h"
#include "setupmodel.h"
#include "comboboxdelegate.h"
#include "filesystembrowsedelegate.h"
+#include "dbmediaimagecontainer.h"
#include <QtGui>
FilePathEditView::FilePathEditView(QWidget *parent) :
EmuFrontEditView(parent)
{
+ scanButton = new QPushButton(tr("&Scan"));
+ buttonBox->addButton(scanButton, QDialogButtonBox::ActionRole);
+ fileUtil = new FileUtil(this);
+ initProgressDialog();
+
+ dbMediaImageContainer = new DbMediaImageContainer(this);
+
model = new FilePathModel(this);
objectList->setModel(model);
SetupModel *stupMdl = new SetupModel(this);
objectList->setItemDelegateForColumn(FilePathModel::FilePath_Name, fsBrowseDelegate);
postInit();
}
+
+void FilePathEditView::initProgressDialog()
+{
+ progressDialog = new QProgressDialog(this);
+ progressDialog->setWindowTitle(tr("Scanning files"));
+ progressDialog->setCancelButtonText(tr("Abort"));
+ progressDialog->setWindowModality(Qt::WindowModal);
+}
+
+void FilePathEditView::connectSignals()
+{
+ EmuFrontEditView::connectSignals();
+ connect(scanButton, SIGNAL(clicked()), this, SLOT(beginScanFilePath()));
+}
+
+void FilePathEditView::beginScanFilePath()
+{
+ QModelIndex index = objectList->currentIndex();
+ if (!index.isValid()) return;
+
+ if (QMessageBox::question(this,
+ tr("Confirm"),
+ tr("Do you want to continue? "
+ "If you have tons of huge files this may take even hours! "
+ "If you are low on battery power, consider carefully!"),
+ QMessageBox::Yes, QMessageBox::No, QMessageBox::NoButton ) == QMessageBox::No)
+ { return; }
+
+ FilePathModel *fpModel = qobject_cast<FilePathModel*>(model);
+ FilePathObject *fpo = fpModel->getFilePathObject(index);
+ if (!fpo) {
+ errorMessage->showMessage(tr("Failed creating a file path object of selected file path."));
+ return;
+ }
+ try
+ {
+ QStringList l;
+ l << "*.zip"; // TODO set filters in a global constant class
+
+ // Remove old instances scanned from this file path
+ dbMediaImageContainer->removeFromFilePath(fpo->getId());
+
+ progressDialog->show();
+
+ //setUIEnabled(false);
+ int count = fileUtil->scanFilePath(fpo, l, dbMediaImageContainer, progressDialog);
+ progressDialog->hide();
+
+ QMessageBox msgBox;
+ msgBox.setText(tr("Scanned %1 files to database.").arg(count)); msgBox.exec();
+ fpModel->setScanned(fpo->getId());
+ //updateList();
+ }
+ catch (EmuFrontException s)
+ {
+ errorMessage->showMessage( s.what() );
+ }
+ //setUIEnabled(true);
+ delete fpo;
+ fpo = 0;
+}
+
#include "emufronteditview.h"
+class FileUtil;
+class QProgressDialog;
+class DbMediaImageContainer;
+
class FilePathEditView : public EmuFrontEditView
{
Q_OBJECT
public:
FilePathEditView(QWidget *parent = 0);
-signals:
+protected:
+ virtual void connectSignals();
-public slots:
+private slots:
+ void beginScanFilePath();
+private:
+ QPushButton* scanButton;
+ FileUtil *fileUtil;
+ DbMediaImageContainer *dbMediaImageContainer;
+ QProgressDialog *progressDialog;
+ void scanFilePath(const QString path, const QStringList filters);
+ void initProgressDialog();
};
#endif // FILEPATHEDITVIEW_H