Ticket #9009: mythui_mythgame.diff

File mythui_mythgame.diff, 6.6 KB (added by stuartm, 11 years ago)

Mythgame progress dialog replacement

  • mythplugins/mythgame/mythgame/gamehandler.cpp

     
    1515
    1616#define LOC_ERR QString("MythGame:GAMEHANDLER Error: ")
    1717#define LOC QString("MythGame:GAMEHANDLER: ")
     18#include <mythprogressdialog.h>
    1819
    1920static QList<GameHandler*> *handlers = NULL;
    2021
     
    393394    int counter = 0;
    394395    MSqlQuery query(MSqlQuery::InitCon());
    395396
    396     MythProgressDialog *progressDlg =
    397         new MythProgressDialog(
    398             QObject::tr("Updating %1(%2) ROM database")
    399             .arg(handler->SystemName()).arg(handler->GameType()),
    400             m_GameMap.size());
     397    QString message = QObject::tr("Updating %1(%2) ROM database")
     398                                    .arg(handler->SystemName())
     399                                    .arg(handler->GameType());
    401400
     401    CreateProgress(message);
     402
     403    if (m_progressDlg)
     404        m_progressDlg->SetTotal(m_GameMap.size());
     405
    402406    GameScanMap::Iterator iter;
    403407
    404408    QString GameName, Genre, Country, CRC32, Year, Plot;
     
    490494            promptForRemoval( iter.value().Rom() , iter.value().RomPath() );
    491495        }
    492496
    493         progressDlg->setProgress(++counter);
     497        if (m_progressDlg)
     498            m_progressDlg->SetProgress(++counter);
    494499    }
    495500
    496     progressDlg->Close();
    497     progressDlg->deleteLater();
     501    if (m_progressDlg)
     502    {
     503        m_progressDlg->Close();
     504        m_progressDlg = NULL;
    498505}
     506}
    499507
    500508void GameHandler::VerifyGameDB(GameHandler *handler)
    501509{
     
    512520        MythDB::DBError("GameHandler::VerifyGameDB - "
    513521                        "select", query);
    514522
    515     MythProgressDialog *progressDlg = new MythProgressDialog(
    516         QObject::tr("Verifying %1 files").arg(handler->SystemName()),
    517         query.size());
     523    QString message = QObject::tr("Verifying %1 files")
     524                                    .arg(handler->SystemName());
    518525
     526    CreateProgress(message);
     527
     528    if (m_progressDlg)
     529        m_progressDlg->SetTotal(query.size());
     530
    519531    // For every file we know about, check to see if it still exists.
    520532    if (query.isActive() && query.size() > 0)
    521533    {
     
    539551                                         GameName,RomPath);
    540552                }
    541553            }
    542             progressDlg->setProgress(++counter);
     554            if (m_progressDlg)
     555                m_progressDlg->SetProgress(++counter);
    543556        }
    544557    }
    545     progressDlg->Close();
    546     progressDlg->deleteLater();
     558
     559    if (m_progressDlg)
     560    {
     561        m_progressDlg->Close();
     562        m_progressDlg = NULL;
    547563}
     564}
    548565
    549566// Recurse through the directory and gather a count on how many files there are to process.
    550567// This is used for the progressbar info.
     
    632649}
    633650
    634651void GameHandler::buildFileList(QString directory, GameHandler *handler,
    635                                 MythProgressDialog *pdial, int* filecount)
     652                                int* filecount)
    636653{
    637654    QDir RomDir(directory);
    638655
     
    657674
    658675        if (Info.isDir())
    659676        {
    660             buildFileList(Info.filePath(), handler, pdial, filecount);
     677            buildFileList(Info.filePath(), handler, filecount);
    661678            continue;
    662679        }
    663680        else
     
    688705                    .arg(handler->SystemName()).arg(RomName));
    689706
    690707            *filecount = *filecount + 1;
    691             pdial->setProgress(*filecount);
     708            if (m_progressDlg)
     709                m_progressDlg->SetProgress(*filecount);
    692710
    693711        }
    694712    }
     
    715733    else
    716734        maxcount = 100;
    717735
    718     MythProgressDialog *pdial = new MythProgressDialog(
    719         QObject::tr("Scanning for %1 game(s)...").arg(handler->SystemName()),
    720         maxcount);
    721     pdial->setProgress(0);
    722 
    723736    if (handler->GameType() == "PC")
    724737    {
     738        // Busy Dialog here?
    725739        m_GameMap[handler->SystemCmdLine()] =
    726740                GameScan(handler->SystemCmdLine(),
    727741                    handler->SystemCmdLine(),
     
    730744                    handler->SystemCmdLine().left(handler->SystemCmdLine().lastIndexOf(QRegExp("/"))));
    731745
    732746
    733         pdial->setProgress(maxcount);
     747        m_progressDlg->SetProgress(maxcount);
    734748        VERBOSE(VB_GENERAL, LOC + QString("PC Game %1").arg(handler->SystemName()));
    735 
    736749    }
    737750    else
    738751    {   
     752        QString message = QObject::tr("Scanning for %1 game(s)...")
     753                                                .arg(handler->SystemName());
     754        CreateProgress(message);
     755
     756        if (m_progressDlg)
     757            m_progressDlg->SetTotal(maxcount);
     758
    739759        int filecount = 0;
    740         buildFileList(handler->SystemRomPath(), handler, pdial, &filecount);
     760        buildFileList(handler->SystemRomPath(), handler, &filecount);
     761
     762        if (m_progressDlg)
     763        {
     764            m_progressDlg->Close();
     765            m_progressDlg = NULL;
    741766    }
     767    }
    742768
    743769    VerifyGameDB(handler);
    744770
     
    754780    }
    755781    else
    756782        handler->setRebuild(false);
    757 
    758 
    759     pdial->Close();
    760     pdial->deleteLater();
    761783}
    762784
    763785void GameHandler::processAllGames(void)
     
    935957    handlers->append(handler);
    936958}
    937959
     960void GameHandler::CreateProgress(QString message)
     961{
     962    if (m_progressDlg)
     963        return;
     964
     965    MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
     966
     967    m_progressDlg = new MythUIProgressDialog(message, popupStack,
     968                                             "gameprogress");
     969
     970    if (m_progressDlg->Create())
     971    {
     972        popupStack->AddScreen(m_progressDlg, false);
     973    }
     974    else
     975    {
     976        delete m_progressDlg;
     977        m_progressDlg = NULL;
     978    }
     979}
  • mythplugins/mythgame/mythgame/gamehandler.h

     
    1010#include "rom_metadata.h"
    1111#include "rominfo.h"
    1212
     13class MythUIProgressDialog;
    1314class MythMainWindow;
    1415class GameHandler;
    1516class QObject;
     
    7980
    8081    static int buildFileCount(QString directory, GameHandler *handler);
    8182    void buildFileList(QString directory, GameHandler *handler,
    82                               MythProgressDialog *pdial, int* filecount);
     83                       int* filecount);
    8384
    8485    void processGames(GameHandler *);
    8586    static void processAllGames(void);
     
    124125    bool m_KeepAll;
    125126
    126127  private:
     128    void CreateProgress(QString message);
     129
    127130    static GameHandler *newInstance;
     131    MythUIProgressDialog *m_progressDlg;
    128132};
    129133
    130134#endif