X-Git-Url: http://git.maemo.org/git/?p=emufront;a=blobdiff_plain;f=src%2Femulauncher.cpp;h=077b5392b6e54a137115b7eaa321cbf2623b96a2;hp=79165aab84b76ed90820a93de08c7f2de80330b1;hb=HEAD;hpb=f98edf04500a58ce2935060e16c526ac0333fdbc diff --git a/src/emulauncher.cpp b/src/emulauncher.cpp index 79165aa..077b539 100644 --- a/src/emulauncher.cpp +++ b/src/emulauncher.cpp @@ -18,33 +18,27 @@ ** You should have received a copy of the GNU General Public License ** along with EmuFront. If not, see . */ + #include #include #include #include #include "emulauncher.h" -//#include "dbmediatype.h" -#include "mediatypemodel.h" -//#include "dbplatform.h" -#include "platformmodel.h" -//#include "dbexecutable.h" +#include "setup.h" +#include "setupmodel.h" #include "externalexecutablemodel.h" -#include "dbmediaimagecontainer.h" +#include "mediaimagecontainer.h" +#include "mediaimagecontainermodel.h" #include "effileobjectcombobox.h" #include "executablecombobox.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) +EmuLauncher::EmuLauncher(QErrorMessage *errorMessage, SetupModel *supModel, ExternalExecutableModel + *emuModel, QWidget *parent, QString tmp) : + QWidget(parent), supModel(supModel), emuModel(emuModel), tmpDirPath(tmp), errorMessage(errorMessage) { - //dbPlatform = new DbPlatform(this); - //dbMediaType = new DbMediaType(this); - //dbExec = new DbExecutable(this); - dbMic = 0; emuHelper = new EmuHelper(this); initWidgets(); layout(); @@ -63,9 +57,9 @@ EmuLauncher::~EmuLauncher() void EmuLauncher::updateData() { - //platformSelectBox->updateDataModel(); - //mediaTypeSelectBox->updateDataModel(); - //execSelectBox->updateDataModel(); + qDebug() << "EmuLauncher::updateData"; + micModel->refresh(); + emuModel->refresh(); } void EmuLauncher::initWidgets() @@ -74,23 +68,17 @@ 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); + micModel = new MediaImageContainerModel(this); + micTable->setModel(micModel); - PlatformModel *plfModel = new PlatformModel(this); - platformSelectBox = new QComboBox(this); - platformSelectBox->setModel(plfModel); - platformSelectBox->setModelColumn(PlatformModel::EmuFrontFileObject_Name); + //supModel = new SetupModel(this); + setupSelectBox = new QComboBox(this); + setupSelectBox->setModel(supModel); + setupSelectBox->setModelColumn(SetupModel::Setup_Name); - ExternalExecutableModel *emuModel = new ExternalExecutableModel(this); + //emuModel = new ExternalExecutableModel(this); execSelectBox = new QComboBox(this); execSelectBox->setModel(emuModel); execSelectBox->setModelColumn(ExternalExecutableModel::Executable_Name); @@ -102,8 +90,7 @@ void EmuLauncher::initWidgets() 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); @@ -124,59 +111,41 @@ void EmuLauncher::connectSignals() void EmuLauncher::updateMediaImageContainers() { - if (platformSelectBox->currentIndex() == -1 || - mediaTypeSelectBox->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(plfAbsModel); - if (!plfModel) 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(mtAbsModel); - if (!mtModel) return; - QModelIndex mtInd = - mtModel->index(mediaTypeSelectBox->currentIndex(), MediaTypeModel::EmuFrontFileObject_Id); - mtid = mtModel->data(mtInd).toInt(); - - /*try { - mt = dynamic_cast(mediaTypeSelectBox->getSelected()); - plf = dynamic_cast(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 (!dbMic) dbMic = new DbMediaImageContainer(this); - dbMic->filter(mtid, plfid); - micTable->setModel(dbMic->getDataModel()); - micTable->hideColumn(DbMediaImageContainer::MIC_FileId); - micTable->hideColumn(DbMediaImageContainer::MIC_FileSize); - micTable->hideColumn(DbMediaImageContainer::MIC_FileCheckSum); - micTable->hideColumn(DbMediaImageContainer::MIC_FilePathId); - micTable->hideColumn(DbMediaImageContainer::MIC_FilePathName); - micTable->hideColumn(DbMediaImageContainer::MIC_SetupId); - micTable->hideColumn(DbMediaImageContainer::MIC_PlatformName); - micTable->hideColumn(DbMediaImageContainer::MIC_PlatformId); - micTable->hideColumn(DbMediaImageContainer::MIC_MediaTypeName); - micTable->hideColumn(DbMediaImageContainer::MIC_MediaTypeId); + if (setupSelectBox->currentIndex() == -1) return; + + // 1. get selected platform and media type id + QAbstractItemModel *setupAbsModel = setupSelectBox->model(); + //SetupModel *supModel = qobject_cast(setupAbsModel); + //if (!supModel) return; + + QModelIndex supInd = + supModel->index(setupSelectBox->currentIndex(), SetupModel::Setup_Id); + int supId = supModel->data(supInd).toInt(); + if (supId < 0) return; + + // 2. fetch available media image containers + + QAbstractItemModel *absModel = micTable->model(); + MediaImageContainerModel *micModel = qobject_cast(absModel); + micModel->filterBySetup(supId); + + micTable->hideColumn(MediaImageContainerModel::MIC_FileId); + micTable->hideColumn(MediaImageContainerModel::MIC_FileSize); + micTable->hideColumn(MediaImageContainerModel::MIC_FileCheckSum); + micTable->hideColumn(MediaImageContainerModel::MIC_FilePathId); + micTable->hideColumn(MediaImageContainerModel::MIC_FilePathName); + micTable->hideColumn(MediaImageContainerModel::MIC_SetupId); + micTable->hideColumn(MediaImageContainerModel::MIC_PlatformName); + micTable->hideColumn(MediaImageContainerModel::MIC_PlatformId); + micTable->hideColumn(MediaImageContainerModel::MIC_MediaTypeName); + micTable->hideColumn(MediaImageContainerModel::MIC_MediaTypeId); micTable->resizeColumnsToContents(); - //execSelectBox->updateToSetup(plfid, mtid); + + // 3. filter available emulators + QAbstractItemModel *execAbsModel = execSelectBox->model(); + ExternalExecutableModel *execModel = qobject_cast(execAbsModel); + if (!execModel) return; + execModel->filterBySetup(supId); } void EmuLauncher::launchEmu() @@ -200,18 +169,13 @@ void EmuLauncher::launchEmu() } qDebug() << listMIndex.count() << " items selected."; - // TODO: write a method to ExternalExecutable to return an Executable object of a selected row. - // TODO2: rewrite ExecutableComboBox and reimplement getSelected? - /*EmuFrontObject *obExe = execSelectBox->getSelected(); - if (!obExe) { - throw EmuFrontException(tr("Failed fetching selected emulator!")); - } - exe = dynamic_cast(obExe); + QAbstractItemModel *absModel = execSelectBox->model(); + ExternalExecutableModel *extModel = qobject_cast(absModel); + exe = extModel->getExecutable(execSelectBox->currentIndex()); if (!exe) { - throw EmuFrontException(tr("Failed creating Emulator object!")); - }*/ - - qDebug() << "File types; " << exe->getSetup()->getSupportedFileTypeExtensions().count(); + errorMessage->showMessage(tr("Failed creating an executable object from selection.")); + return; + } bool mame = exe->getSetup()->getSupportedFileTypeExtensions().isEmpty(); @@ -225,9 +189,17 @@ void EmuLauncher::launchEmu() // Now we have one or more media image containers and an emulator selected, // let's fetch the media image container data. + QAbstractItemModel *micAbsModel = micTable->model(); + MediaImageContainerModel *micModel = qobject_cast(micAbsModel); + if (!micModel) { + throw new EmuFrontException(tr("Failed creating data model for media image containers.")); + } + foreach(QModelIndex mind, listMIndex) { if (!mind.isValid()) continue; - EmuFrontObject *obImg = dbMic->getDataObjectFromModel(&mind); // throws EmuFrontException + + EmuFrontObject *obImg = micModel->getDataObject(mind); + if (!obImg) { qDebug() << "Failed creating media image container at row " << mind.row(); continue;