//
//
// EmuFront 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 3 of the License, or
-// (at your option) any later version.
+// it under the terms of the GNU General Public License version 2 as published by
+// the Free Software Foundation and appearing in the file gpl.txt included in the
+// packaging of this file.
//
-// Foobar is distributed in the hope that it will be useful,
+// EmuFront is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
-// along with Foobar. If not, see <http://www.gnu.org/licenses/>.
+// along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
#include <QtGui>
+#include "../dataobjects/filepathobject.h"
+#include "../dataobjects/emufrontfileobject.h"
+#include "../db/dbfilepath.h"
+#include "../utils/fileutil.h"
#include "mediaimagepathmaindialog.h"
#include "mediaimagepathdialog.h"
-#include "../dataobjects/filepathobject.h"
-#include "../db/dbmediaimagepath.h"
-
MediaImagePathMainDialog::MediaImagePathMainDialog(QWidget *parent)
: DbObjectDialog(parent)
{
setWindowTitle(tr("Set media image paths"));
- nameDialog = new MediaImagePathDialog(this, dynamic_cast<FilePathObject*>(dbObject));
- dbManager = new DbMediaImagePath(this);
+ dbManager = new DbFilePath(this);
+ dbMediaImageContainer = new DbMediaImageContainer(this);
initDataTable();
+
+ scanButton = new QPushButton(tr("&Scan"));
+ buttonBox->addButton(scanButton, QDialogButtonBox::ActionRole);
+
+ initEditDialog();
+ hiddenColumns << DbFilePath::FilePath_Id;
+ hiddenColumns << DbFilePath::FilePath_SetupId;
+ hideColumns();
+
// do not move to parent class:
connectSignals();
}
-MediaImagePathMainDialog::~MediaImagePathMainDialog()
+void MediaImagePathMainDialog::connectSignals()
{
- deleteCurrentObject();
+ DbObjectDialog::connectSignals();
+ connect(scanButton, SIGNAL(clicked()), this, SLOT(beginScanFilePath()));
}
-int MediaImagePathMainDialog::deleteObject()
+void MediaImagePathMainDialog::initEditDialog()
{
- return 0;
+ nameDialog = new MediaImagePathDialog(this, dynamic_cast<FilePathObject*>(dbObject));
+ connectNameDialogSignals();
}
-void MediaImagePathMainDialog::addObject()
+void MediaImagePathMainDialog::beginScanFilePath()
{
- deleteCurrentObject();
- dbObject = new FilePathObject;
- nameDialog->setDataObject(dbObject);
- activateNameDialog();
+ 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;
+ }
+ FileUtil fileUtil(this);
+ FilePathObject *fpo = 0;
+ try
+ {
+ EmuFrontObject *ob = dbManager->getDataObjectFromModel(&index); // throws EmuFrontException
+ if (!ob) return;
+ fpo = dynamic_cast<FilePathObject*>(ob);
+ if (!fpo) return;
+ QStringList l;
+ l << "*.zip"; // TODO set filters in a global constant class
+
+ dbMediaImageContainer->removeFromFilePath(fpo->getId());
+
+ QProgressDialog progressDialog(this);
+ progressDialog.setWindowTitle("Scanning files...");
+ progressDialog.setCancelButtonText("Abort");
+ progressDialog.setWindowModality(Qt::WindowModal);
+ progressDialog.show();
+
+ int count = fileUtil.scanFilePath(fpo, l, dbMediaImageContainer, progressDialog);
+ progressDialog.hide();
+ QMessageBox msgBox;
+ msgBox.setText(tr("Scanned %1 files to database.").arg(count));
+ msgBox.exec();
+ }
+ catch (EmuFrontException s)
+ {
+ errorMessage->showMessage( s.what() );
+ }
+ delete fpo;
+ fpo = 0;
}
-void MediaImagePathMainDialog::deleteCurrentObject()
+EmuFrontObject* MediaImagePathMainDialog::createObject()
{
- delete dynamic_cast<FilePathObject*>(dbObject);
+ return new FilePathObject(FilePathObject::FilePathType_MediaImageDir);
}
-void MediaImagePathMainDialog::updateDb(const EmuFrontObject *) const
+MediaImagePathMainDialog::~MediaImagePathMainDialog()
{
-
+ deleteCurrentObject();
}
-void MediaImagePathMainDialog::insertDb(const EmuFrontObject *) const
+void MediaImagePathMainDialog::deleteCurrentObject()
{
-
+ if (dbObject) {
+ FilePathObject* fpo = dynamic_cast<FilePathObject*>(dbObject);
+ if (fpo) delete fpo;
+ else qDebug() << "Failed deleteing FilePathObject";
+ dbObject = 0;
+ }
}
-bool MediaImagePathMainDialog::deleteItem()
+void MediaImagePathMainDialog::cleanUp()
{
- return false;
+ deleteCurrentObject();
+ if (nameDialog) {
+ MediaImagePathDialog *pnd =
+ dynamic_cast<MediaImagePathDialog*>(nameDialog);
+ if (pnd) delete pnd;
+ else qDebug() << "Failed to delete MediaImagePathDialog";
+ nameDialog = 0;
+ }
}
-