mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-27 01:26:30 +00:00
Changed: New COperationDialog that manager progress bar in a dialog
This commit is contained in:
parent
debf070ec1
commit
2f46d107f4
7 changed files with 643 additions and 407 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "configfile.h"
|
#include "configfile.h"
|
||||||
#include "wizarddialog.h"
|
#include "wizarddialog.h"
|
||||||
|
#include "operationdialog.h"
|
||||||
|
|
||||||
#include "nel/misc/path.h"
|
#include "nel/misc/path.h"
|
||||||
#include "nel/misc/ucstring.h"
|
#include "nel/misc/ucstring.h"
|
||||||
|
@ -98,10 +99,27 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if (displayMainWindow)
|
if (displayMainWindow)
|
||||||
{
|
{
|
||||||
CMainWindow mainWindow;
|
step = config.getNextStep();
|
||||||
mainWindow.show();
|
|
||||||
|
|
||||||
return QApplication::exec();
|
if (step != CConfigFile::Done)
|
||||||
|
{
|
||||||
|
COperationDialog dialog;
|
||||||
|
|
||||||
|
if (!dialog.exec()) displayMainWindow = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (displayMainWindow)
|
||||||
|
{
|
||||||
|
step = config.getNextStep();
|
||||||
|
|
||||||
|
if (step == CConfigFile::Done)
|
||||||
|
{
|
||||||
|
CMainWindow mainWindow;
|
||||||
|
mainWindow.show();
|
||||||
|
|
||||||
|
return QApplication::exec();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -17,59 +17,25 @@
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "downloader.h"
|
#include "downloader.h"
|
||||||
#include "archive.h"
|
|
||||||
#include "wizarddialog.h"
|
#include "wizarddialog.h"
|
||||||
#include "profilesdialog.h"
|
#include "profilesdialog.h"
|
||||||
#include "configfile.h"
|
#include "configfile.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "profilesmodel.h"
|
#include "profilesmodel.h"
|
||||||
|
|
||||||
#include "seven_zip.h"
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
#include <QtWinExtras/QWinTaskbarProgress>
|
|
||||||
#include <QtWinExtras/QWinTaskbarButton>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG_NEW
|
#ifdef DEBUG_NEW
|
||||||
#define new DEBUG_NEW
|
#define new DEBUG_NEW
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CMainWindow::CMainWindow():QMainWindow(), m_archive(NULL), m_statusLabel(NULL)
|
CMainWindow::CMainWindow():QMainWindow(), m_statusLabel(NULL)
|
||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button = new QWinTaskbarButton(this);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
connect(resumeButton, SIGNAL(clicked()), SLOT(onResumeClicked()));
|
|
||||||
connect(stopButton, SIGNAL(clicked()), SLOT(onStopClicked()));
|
|
||||||
|
|
||||||
// downloader
|
// downloader
|
||||||
m_downloader = new CDownloader(this);
|
m_downloader = new CDownloader(this);
|
||||||
|
|
||||||
connect(m_downloader, SIGNAL(downloadPrepare()), SLOT(onDownloadPrepare()));
|
|
||||||
connect(m_downloader, SIGNAL(downloadInit(qint64, qint64)), SLOT(onDownloadInit(qint64, qint64)));
|
|
||||||
connect(m_downloader, SIGNAL(downloadStart()), SLOT(onDownloadStart()));
|
|
||||||
connect(m_downloader, SIGNAL(downloadStop()), SLOT(onDownloadStop()));
|
|
||||||
connect(m_downloader, SIGNAL(downloadProgress(qint64)), SLOT(onDownloadProgress(qint64)));
|
|
||||||
connect(m_downloader, SIGNAL(downloadSuccess(qint64)), SLOT(onDownloadSuccess(qint64)));
|
|
||||||
connect(m_downloader, SIGNAL(downloadFail(QString)), SLOT(onDownloadFail(QString)));
|
|
||||||
connect(m_downloader, SIGNAL(htmlPageContent(QString)), SLOT(onHtmlPageContent(QString)));
|
connect(m_downloader, SIGNAL(htmlPageContent(QString)), SLOT(onHtmlPageContent(QString)));
|
||||||
|
|
||||||
// archive
|
|
||||||
m_archive = new CArchive(this);
|
|
||||||
|
|
||||||
connect(m_archive, SIGNAL(extractPrepare()), SLOT(onExtractPrepare()));
|
|
||||||
connect(m_archive, SIGNAL(extractInit(qint64, qint64)), SLOT(onExtractInit(qint64, qint64)));
|
|
||||||
connect(m_archive, SIGNAL(extractStart()), SLOT(onExtractStart()));
|
|
||||||
connect(m_archive, SIGNAL(extractStop()), SLOT(onExtractStop()));
|
|
||||||
connect(m_archive, SIGNAL(extractProgress(qint64, QString)), SLOT(onExtractProgress(qint64, QString)));
|
|
||||||
connect(m_archive, SIGNAL(extractSuccess(qint64)), SLOT(onExtractSuccess(qint64)));
|
|
||||||
connect(m_archive, SIGNAL(extractFail(QString)), SLOT(onExtractFail(QString)));
|
|
||||||
connect(m_archive, SIGNAL(done()), SLOT(onDone()));
|
|
||||||
|
|
||||||
connect(actionProfiles, SIGNAL(triggered()), SLOT(onProfiles()));
|
connect(actionProfiles, SIGNAL(triggered()), SLOT(onProfiles()));
|
||||||
|
|
||||||
connect(playButton, SIGNAL(clicked()), SLOT(onPlayClicked()));
|
connect(playButton, SIGNAL(clicked()), SLOT(onPlayClicked()));
|
||||||
|
@ -78,10 +44,14 @@ CMainWindow::CMainWindow():QMainWindow(), m_archive(NULL), m_statusLabel(NULL)
|
||||||
connect(actionAboutQt, SIGNAL(triggered()), SLOT(onAboutQt()));
|
connect(actionAboutQt, SIGNAL(triggered()), SLOT(onAboutQt()));
|
||||||
connect(actionAbout, SIGNAL(triggered()), SLOT(onAbout()));
|
connect(actionAbout, SIGNAL(triggered()), SLOT(onAbout()));
|
||||||
|
|
||||||
|
connect(profilesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(onProfileChanged(int)));
|
||||||
|
|
||||||
m_statusLabel = new QLabel();
|
m_statusLabel = new QLabel();
|
||||||
|
|
||||||
statusBar()->addWidget(m_statusLabel);
|
statusBar()->addWidget(m_statusLabel);
|
||||||
|
|
||||||
|
updateProfiles();
|
||||||
|
|
||||||
// setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
|
// setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,119 +59,9 @@ CMainWindow::~CMainWindow()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::processNextStep()
|
|
||||||
{
|
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
|
||||||
|
|
||||||
// default server
|
|
||||||
const CServer &server = config->getServer();
|
|
||||||
|
|
||||||
// default profile
|
|
||||||
const CProfile &configuration = config->getProfile();
|
|
||||||
|
|
||||||
switch(CConfigFile::getInstance()->getNextStep())
|
|
||||||
{
|
|
||||||
case CConfigFile::DisplayNoServerError:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::ShowWizard:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::DownloadData:
|
|
||||||
displayProgressBar();
|
|
||||||
m_downloader->prepareFile(config->expandVariables(server.dataDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.dataDownloadFilename) + ".part");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::ExtractDownloadedData:
|
|
||||||
displayProgressBar();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::DownloadClient:
|
|
||||||
displayProgressBar();
|
|
||||||
m_downloader->prepareFile(config->expandVariables(server.clientDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename) + ".part");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::ExtractDownloadedClient:
|
|
||||||
displayProgressBar();
|
|
||||||
// TODO
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::CopyServerFiles:
|
|
||||||
displayProgressBar();
|
|
||||||
m_archive->copyServerFiles(config->getSrcServerDirectory(), config->getInstallationDirectory() + "/" + server.id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::CopyProfileFiles:
|
|
||||||
displayProgressBar();
|
|
||||||
m_archive->copyProfileFiles(config->getSrcProfileDirectory(), config->getProfileDirectory() + "/0");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::ExtractBnpClient:
|
|
||||||
displayProgressBar();
|
|
||||||
m_archive->extract(config->getSrcServerClientBNPFullPath(), config->getInstallationDirectory() + "/" + server.id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::CleanFiles:
|
|
||||||
hideProgressBar();
|
|
||||||
m_archive->cleanServerFiles(config->getInstallationDirectory() + "/" + server.id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::CreateProfile:
|
|
||||||
hideProgressBar();
|
|
||||||
config->createDefaultProfile();
|
|
||||||
onDone();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CConfigFile::CreateShortcuts:
|
|
||||||
hideProgressBar();
|
|
||||||
config->createDefaultShortcuts();
|
|
||||||
onDone();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// cases already managed in main.cpp
|
|
||||||
displayConfigurationsChoices();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_downloader->getHtmlPageContent(config->expandVariables(server.displayUrl));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::displayProgressBar()
|
|
||||||
{
|
|
||||||
downloadFrame->setVisible(true);
|
|
||||||
configurationFrame->setVisible(false);
|
|
||||||
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::hideProgressBar()
|
|
||||||
{
|
|
||||||
downloadFrame->setVisible(false);
|
|
||||||
configurationFrame->setVisible(false);
|
|
||||||
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::displayConfigurationsChoices()
|
|
||||||
{
|
|
||||||
downloadFrame->setVisible(false);
|
|
||||||
configurationFrame->setVisible(true);
|
|
||||||
|
|
||||||
profilesComboBox->setModel(new CProfilesModel(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::showEvent(QShowEvent *e)
|
void CMainWindow::showEvent(QShowEvent *e)
|
||||||
{
|
{
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->setWindow(windowHandle());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
e->accept();
|
e->accept();
|
||||||
|
|
||||||
processNextStep();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::closeEvent(QCloseEvent *e)
|
void CMainWindow::closeEvent(QCloseEvent *e)
|
||||||
|
@ -211,28 +71,9 @@ void CMainWindow::closeEvent(QCloseEvent *e)
|
||||||
e->accept();
|
e->accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onResumeClicked()
|
void CMainWindow::updateProfiles()
|
||||||
{
|
{
|
||||||
m_downloader->getFile();
|
profilesComboBox->setModel(new CProfilesModel(this));
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onStopClicked()
|
|
||||||
{
|
|
||||||
if (m_downloader->isDownloading())
|
|
||||||
{
|
|
||||||
if (!m_downloader->supportsResume())
|
|
||||||
{
|
|
||||||
QMessageBox::StandardButton res = QMessageBox::question(this, tr("Confirmation"), tr("Warning, this server doesn't support resume! If you stop download now, you won't be able to resume it later.\nAre you sure to abort download?"));
|
|
||||||
|
|
||||||
if (res != QMessageBox::Yes) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_downloader->stop();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_archive->stop();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onPlayClicked()
|
void CMainWindow::onPlayClicked()
|
||||||
|
@ -251,6 +92,8 @@ void CMainWindow::onPlayClicked()
|
||||||
arguments << profile.arguments;
|
arguments << profile.arguments;
|
||||||
|
|
||||||
bool started = QProcess::startDetached(profile.executable, arguments);
|
bool started = QProcess::startDetached(profile.executable, arguments);
|
||||||
|
|
||||||
|
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onConfigureClicked()
|
void CMainWindow::onConfigureClicked()
|
||||||
|
@ -261,7 +104,10 @@ void CMainWindow::onProfiles()
|
||||||
{
|
{
|
||||||
CProfilesDialog dialog;
|
CProfilesDialog dialog;
|
||||||
|
|
||||||
dialog.exec();
|
if (dialog.exec())
|
||||||
|
{
|
||||||
|
updateProfiles();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onAbout()
|
void CMainWindow::onAbout()
|
||||||
|
@ -270,7 +116,7 @@ void CMainWindow::onAbout()
|
||||||
|
|
||||||
QMessageBox::about(this,
|
QMessageBox::about(this,
|
||||||
tr("About %1").arg("Ryzom Installer"),
|
tr("About %1").arg("Ryzom Installer"),
|
||||||
QString("Ryzom Installer") + QApplication::applicationVersion() + br +
|
QString("Ryzom Installer %1").arg(QApplication::applicationVersion()) + br +
|
||||||
tr("Program to install, download and manage Ryzom configurations.") +
|
tr("Program to install, download and manage Ryzom configurations.") +
|
||||||
br+br+
|
br+br+
|
||||||
tr("Author: %1").arg("Cedric 'Kervala' OCHS") + br +
|
tr("Author: %1").arg("Cedric 'Kervala' OCHS") + br +
|
||||||
|
@ -283,166 +129,20 @@ void CMainWindow::onAboutQt()
|
||||||
QMessageBox::aboutQt(this);
|
QMessageBox::aboutQt(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onDownloadPrepare()
|
|
||||||
{
|
|
||||||
progressBar->setFormat(tr("%p% (%v/%m KiB)"));
|
|
||||||
|
|
||||||
progressBar->setMinimum(0);
|
|
||||||
progressBar->setMaximum(0);
|
|
||||||
progressBar->setValue(0);
|
|
||||||
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadInit(qint64 current, qint64 total)
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
|
|
||||||
progressBar->setMinimum(0);
|
|
||||||
progressBar->setMaximum(total / 1024);
|
|
||||||
progressBar->setValue(current / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->setMinimum(0);
|
|
||||||
m_button->progress()->setMaximum(total / 1024);
|
|
||||||
m_button->progress()->setValue(current / 1024);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadStart()
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(true);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->show();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadStop()
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->hide();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadProgress(qint64 current)
|
|
||||||
{
|
|
||||||
progressBar->setValue(current / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->setValue(current / 1024);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadSuccess(qint64 total)
|
|
||||||
{
|
|
||||||
progressBar->setValue(total / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->hide();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDownloadFail(const QString &error)
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onHtmlPageContent(const QString &html)
|
void CMainWindow::onHtmlPageContent(const QString &html)
|
||||||
{
|
{
|
||||||
htmlTextEdit->setHtml(html);
|
htmlTextEdit->setHtml(html);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::onExtractPrepare()
|
void CMainWindow::onProfileChanged(int profileIndex)
|
||||||
{
|
{
|
||||||
progressBar->setFormat("%p%");
|
if (profileIndex < 0) return;
|
||||||
|
|
||||||
progressBar->setMinimum(0);
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
progressBar->setMaximum(0);
|
|
||||||
progressBar->setValue(0);
|
|
||||||
|
|
||||||
resumeButton->setVisible(false);
|
CProfile profile = config->getProfile(profileIndex);
|
||||||
stopButton->setVisible(false);
|
CServer server = config->getServer(profile.server);
|
||||||
}
|
|
||||||
|
// load changelog
|
||||||
void CMainWindow::onExtractInit(qint64 current, qint64 total)
|
m_downloader->getHtmlPageContent(config->expandVariables(server.displayUrl));
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
|
|
||||||
progressBar->setMinimum(0);
|
|
||||||
progressBar->setMaximum(total / 1024);
|
|
||||||
progressBar->setValue(current / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->setMinimum(0);
|
|
||||||
m_button->progress()->setMaximum(total / 1024);
|
|
||||||
m_button->progress()->setValue(current / 1024);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onExtractStart()
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(true);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->show();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onExtractStop()
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->hide();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onExtractProgress(qint64 current, const QString &filename)
|
|
||||||
{
|
|
||||||
m_statusLabel->setText(tr("Extracting %1...").arg(filename));
|
|
||||||
|
|
||||||
progressBar->setValue(current / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->setValue(current / 1024);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onExtractSuccess(qint64 total)
|
|
||||||
{
|
|
||||||
m_statusLabel->setText(tr("Extraction done"));
|
|
||||||
|
|
||||||
progressBar->setValue(total / 1024);
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
|
||||||
m_button->progress()->hide();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
resumeButton->setVisible(false);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onDone()
|
|
||||||
{
|
|
||||||
processNextStep();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainWindow::onExtractFail(const QString &error)
|
|
||||||
{
|
|
||||||
resumeButton->setVisible(true);
|
|
||||||
stopButton->setVisible(false);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,9 +38,6 @@ public:
|
||||||
virtual ~CMainWindow();
|
virtual ~CMainWindow();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onResumeClicked();
|
|
||||||
void onStopClicked();
|
|
||||||
|
|
||||||
void onPlayClicked();
|
void onPlayClicked();
|
||||||
void onConfigureClicked();
|
void onConfigureClicked();
|
||||||
|
|
||||||
|
@ -48,40 +45,18 @@ public slots:
|
||||||
void onAbout();
|
void onAbout();
|
||||||
void onAboutQt();
|
void onAboutQt();
|
||||||
|
|
||||||
void onDownloadPrepare();
|
|
||||||
void onDownloadInit(qint64 current, qint64 total);
|
|
||||||
void onDownloadStart();
|
|
||||||
void onDownloadStop();
|
|
||||||
void onDownloadProgress(qint64 current);
|
|
||||||
void onDownloadSuccess(qint64 total);
|
|
||||||
void onDownloadFail(const QString &error);
|
|
||||||
|
|
||||||
void onHtmlPageContent(const QString &html);
|
void onHtmlPageContent(const QString &html);
|
||||||
|
|
||||||
void onExtractPrepare();
|
void onProfileChanged(int index);
|
||||||
void onExtractInit(qint64 current, qint64 total);
|
|
||||||
void onExtractStart();
|
|
||||||
void onExtractStop();
|
|
||||||
void onExtractProgress(qint64 current, const QString &filename);
|
|
||||||
void onExtractSuccess(qint64 total);
|
|
||||||
void onExtractFail(const QString &error);
|
|
||||||
|
|
||||||
void onDone();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *e);
|
void showEvent(QShowEvent *e);
|
||||||
void closeEvent(QCloseEvent *e);
|
void closeEvent(QCloseEvent *e);
|
||||||
|
|
||||||
void processNextStep();
|
void updateProfiles();
|
||||||
|
|
||||||
void displayProgressBar();
|
|
||||||
void hideProgressBar();
|
|
||||||
|
|
||||||
void displayConfigurationsChoices();
|
|
||||||
|
|
||||||
QWinTaskbarButton *m_button;
|
QWinTaskbarButton *m_button;
|
||||||
CDownloader *m_downloader;
|
CDownloader *m_downloader;
|
||||||
CArchive *m_archive;
|
|
||||||
|
|
||||||
QLabel *m_statusLabel;
|
QLabel *m_statusLabel;
|
||||||
};
|
};
|
||||||
|
|
431
code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp
Normal file
431
code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp
Normal file
|
@ -0,0 +1,431 @@
|
||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program 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 Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include "stdpch.h"
|
||||||
|
#include "operationdialog.h"
|
||||||
|
#include "downloader.h"
|
||||||
|
#include "wizarddialog.h"
|
||||||
|
#include "profilesdialog.h"
|
||||||
|
#include "configfile.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "profilesmodel.h"
|
||||||
|
|
||||||
|
#include "filescopier.h"
|
||||||
|
#include "filesextractor.h"
|
||||||
|
#include "filescleaner.h"
|
||||||
|
|
||||||
|
#include "seven_zip.h"
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
#include <QtWinExtras/QWinTaskbarProgress>
|
||||||
|
#include <QtWinExtras/QWinTaskbarButton>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_NEW
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COperationDialog::COperationDialog():QDialog(), m_aborting(false)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button = new QWinTaskbarButton(this);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// connect(resumeButton, SIGNAL(clicked()), SLOT(onResumeClicked()));
|
||||||
|
// connect(stopButton, SIGNAL(clicked()), SLOT(onStopClicked()));
|
||||||
|
|
||||||
|
// downloader
|
||||||
|
m_downloader = new CDownloader(this);
|
||||||
|
|
||||||
|
connect(m_downloader, SIGNAL(downloadPrepare()), SLOT(onProgressPrepare()));
|
||||||
|
connect(m_downloader, SIGNAL(downloadInit(qint64, qint64)), SLOT(onProgressInit(qint64, qint64)));
|
||||||
|
connect(m_downloader, SIGNAL(downloadStart()), SLOT(onProgressStart()));
|
||||||
|
connect(m_downloader, SIGNAL(downloadStop()), SLOT(onProgressStop()));
|
||||||
|
connect(m_downloader, SIGNAL(downloadProgress(qint64)), SLOT(onProgressProgress(qint64)));
|
||||||
|
connect(m_downloader, SIGNAL(downloadSuccess(qint64)), SLOT(onProgressSuccess(qint64)));
|
||||||
|
connect(m_downloader, SIGNAL(downloadFail(QString)), SLOT(onProgressFail(QString)));
|
||||||
|
|
||||||
|
connect(operationButtonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(onAbortClicked()));
|
||||||
|
|
||||||
|
// operations
|
||||||
|
connect(this, SIGNAL(prepare()), SLOT(onProgressPrepare()));
|
||||||
|
connect(this, SIGNAL(init(qint64, qint64)), SLOT(onProgressInit(qint64, qint64)));
|
||||||
|
connect(this, SIGNAL(start()), SLOT(onProgressStart()));
|
||||||
|
connect(this, SIGNAL(stop()), SLOT(onProgressStop()));
|
||||||
|
connect(this, SIGNAL(progress(qint64, QString)), SLOT(onProgressProgress(qint64, QString)));
|
||||||
|
connect(this, SIGNAL(success(qint64)), SLOT(onProgressSuccess(qint64)));
|
||||||
|
connect(this, SIGNAL(fail(QString)), SLOT(onProgressFail(QString)));
|
||||||
|
|
||||||
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
}
|
||||||
|
|
||||||
|
COperationDialog::~COperationDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::processNextStep()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
// default server
|
||||||
|
const CServer &server = config->getServer();
|
||||||
|
|
||||||
|
// default profile
|
||||||
|
const CProfile &configuration = config->getProfile();
|
||||||
|
|
||||||
|
switch(config->getNextStep())
|
||||||
|
{
|
||||||
|
case CConfigFile::DisplayNoServerError:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::ShowWizard:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::DownloadData:
|
||||||
|
m_downloader->prepareFile(config->expandVariables(server.dataDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.dataDownloadFilename) + ".part");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::ExtractDownloadedData:
|
||||||
|
// TODO
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::DownloadClient:
|
||||||
|
m_downloader->prepareFile(config->expandVariables(server.clientDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename) + ".part");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::ExtractDownloadedClient:
|
||||||
|
// TODO
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::CopyServerFiles:
|
||||||
|
QtConcurrent::run(this, &COperationDialog::copyServerFiles);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::CopyProfileFiles:
|
||||||
|
QtConcurrent::run(this, &COperationDialog::copyProfileFiles);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::ExtractBnpClient:
|
||||||
|
QtConcurrent::run(this, &COperationDialog::extractBnpClient);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::CleanFiles:
|
||||||
|
QtConcurrent::run(this, &COperationDialog::cleanFiles);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::CreateProfile:
|
||||||
|
createDefaultProfile();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CConfigFile::CreateShortcuts:
|
||||||
|
createDefaultShortcuts();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// cases already managed in main.cpp
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_downloader->getHtmlPageContent(config->expandVariables(server.displayUrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::showEvent(QShowEvent *e)
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->setWindow(windowHandle());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
e->accept();
|
||||||
|
|
||||||
|
processNextStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::closeEvent(QCloseEvent *e)
|
||||||
|
{
|
||||||
|
if (e->spontaneous())
|
||||||
|
{
|
||||||
|
e->ignore();
|
||||||
|
|
||||||
|
onAbortClicked();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onAbortClicked()
|
||||||
|
{
|
||||||
|
if (m_downloader->isDownloading())
|
||||||
|
{
|
||||||
|
if (!m_downloader->supportsResume())
|
||||||
|
{
|
||||||
|
QMessageBox::StandardButton res = QMessageBox::question(this, tr("Confirmation"), tr("Warning, this server doesn't support resume! If you stop download now, you won't be able to resume it later.\nAre you sure to abort download?"));
|
||||||
|
|
||||||
|
if (res != QMessageBox::Yes) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QMutexLocker locker(&m_abortingMutex);
|
||||||
|
m_aborting = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressPrepare()
|
||||||
|
{
|
||||||
|
operationProgressBar->setFormat(tr("%p% (%v/%m KiB)"));
|
||||||
|
|
||||||
|
operationProgressBar->setMinimum(0);
|
||||||
|
operationProgressBar->setMaximum(0);
|
||||||
|
operationProgressBar->setValue(0);
|
||||||
|
|
||||||
|
operationLabel->setText(m_currentOperation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressInit(qint64 current, qint64 total)
|
||||||
|
{
|
||||||
|
operationProgressBar->setMinimum(0);
|
||||||
|
operationProgressBar->setMaximum(total / 1024);
|
||||||
|
operationProgressBar->setValue(current / 1024);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->progress()->setMinimum(0);
|
||||||
|
m_button->progress()->setMaximum(total / 1024);
|
||||||
|
m_button->progress()->setValue(current / 1024);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressStart()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->progress()->show();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressStop()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->progress()->hide();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressProgress(qint64 current, const QString &filename)
|
||||||
|
{
|
||||||
|
operationProgressLabel->setText(m_currentOperationProgressFormat.arg(filename));
|
||||||
|
|
||||||
|
operationProgressBar->setValue(current / 1024);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->progress()->setValue(current / 1024);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressSuccess(qint64 total)
|
||||||
|
{
|
||||||
|
operationProgressBar->setValue(total / 1024);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32) && defined(QT_WINEXTRAS_LIB)
|
||||||
|
m_button->progress()->hide();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onProgressFail(const QString &error)
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Error"), error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::onDone()
|
||||||
|
{
|
||||||
|
processNextStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::copyServerFiles()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
// default server
|
||||||
|
const CServer &server = config->getServer();
|
||||||
|
|
||||||
|
// default profile
|
||||||
|
const CProfile &configuration = config->getProfile();
|
||||||
|
|
||||||
|
QStringList serverFiles;
|
||||||
|
serverFiles << "cfg";
|
||||||
|
serverFiles << "data";
|
||||||
|
serverFiles << "examples";
|
||||||
|
serverFiles << "patch";
|
||||||
|
serverFiles << "unpack";
|
||||||
|
serverFiles << "client_default.cfg";
|
||||||
|
|
||||||
|
m_currentOperation = QApplication::tr("Copying client files needed for server %1...").arg(server.name);
|
||||||
|
m_currentOperationProgressFormat = QApplication::tr("Copying %1...");
|
||||||
|
|
||||||
|
CFilesCopier copier(this);
|
||||||
|
copier.setSourceDirectory(config->getSrcServerDirectory());
|
||||||
|
copier.setDesinationDirectory(config->getInstallationDirectory() + "/" + server.id);
|
||||||
|
copier.setIncludeFilter(serverFiles);
|
||||||
|
|
||||||
|
if (copier.exec())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::copyProfileFiles()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
// default server
|
||||||
|
const CServer &server = config->getServer();
|
||||||
|
|
||||||
|
// default profile
|
||||||
|
const CProfile &profile = config->getProfile();
|
||||||
|
|
||||||
|
QStringList profileFiles;
|
||||||
|
profileFiles << "cache";
|
||||||
|
profileFiles << "save";
|
||||||
|
profileFiles << "user";
|
||||||
|
profileFiles << "screenshots";
|
||||||
|
profileFiles << "client.cfg";
|
||||||
|
profileFiles << "*.log";
|
||||||
|
|
||||||
|
CFilesCopier copier(this);
|
||||||
|
copier.setSourceDirectory(config->getSrcProfileDirectory());
|
||||||
|
copier.setDesinationDirectory(config->getProfileDirectory() + "/" + profile.id);
|
||||||
|
copier.setIncludeFilter(profileFiles);
|
||||||
|
|
||||||
|
if (copier.exec())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::extractBnpClient()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
// default server
|
||||||
|
const CServer &server = config->getServer();
|
||||||
|
|
||||||
|
// default profile
|
||||||
|
const CProfile &profile = config->getProfile();
|
||||||
|
|
||||||
|
CFilesExtractor extractor(this);
|
||||||
|
extractor.setSourceFile(config->getSrcServerClientBNPFullPath());
|
||||||
|
extractor.setDesinationDirectory(config->getInstallationDirectory() + "/" + server.id);
|
||||||
|
extractor.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::cleanFiles()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
// default server
|
||||||
|
const CServer &server = config->getServer();
|
||||||
|
|
||||||
|
// default profile
|
||||||
|
const CProfile &profile = config->getProfile();
|
||||||
|
|
||||||
|
CFilesCleaner cleaner(this);
|
||||||
|
cleaner.setDirectory(config->getInstallationDirectory() + "/" + server.id);
|
||||||
|
cleaner.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationPrepare()
|
||||||
|
{
|
||||||
|
emit prepare();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationInit(qint64 current, qint64 total)
|
||||||
|
{
|
||||||
|
emit init(current, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationStart()
|
||||||
|
{
|
||||||
|
emit start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationStop()
|
||||||
|
{
|
||||||
|
emit stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationProgress(qint64 current, const QString &filename)
|
||||||
|
{
|
||||||
|
emit progress(current, filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationSuccess(qint64 total)
|
||||||
|
{
|
||||||
|
emit success(total);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationFail(const QString &error)
|
||||||
|
{
|
||||||
|
emit fail(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COperationDialog::operationFinish()
|
||||||
|
{
|
||||||
|
emit done();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool COperationDialog::operationShouldStop()
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_abortingMutex);
|
||||||
|
|
||||||
|
return m_aborting;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool COperationDialog::createDefaultProfile()
|
||||||
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
|
CServer server = config->getServer(config->getDefaultServerIndex());
|
||||||
|
|
||||||
|
CProfile profile;
|
||||||
|
|
||||||
|
profile.id = 0;
|
||||||
|
profile.executable = config->getClientFullPath();
|
||||||
|
profile.name = QString("Ryzom (%1)").arg(server.name);
|
||||||
|
profile.server = server.id;
|
||||||
|
profile.comments = "Default profile created by Ryzom Installer";
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN32
|
||||||
|
profile.desktopShortcut = QFile::exists(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
// profile.menuShortcut
|
||||||
|
|
||||||
|
config->addProfile(profile);
|
||||||
|
config->save();
|
||||||
|
|
||||||
|
onDone();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool COperationDialog::createDefaultShortcuts()
|
||||||
|
{
|
||||||
|
onDone();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
114
code/ryzom/tools/client/ryzom_installer/src/operationdialog.h
Normal file
114
code/ryzom/tools/client/ryzom_installer/src/operationdialog.h
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program 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 Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef OPERATIONDIALOG_H
|
||||||
|
#define OPERATIONDIALOG_H
|
||||||
|
|
||||||
|
#include "ui_operationdialog.h"
|
||||||
|
#include "operation.h"
|
||||||
|
|
||||||
|
class QWinTaskbarButton;
|
||||||
|
class CDownloader;
|
||||||
|
class CArchive;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main window
|
||||||
|
*
|
||||||
|
* \author Cedric 'Kervala' OCHS
|
||||||
|
* \date 2016
|
||||||
|
*/
|
||||||
|
class COperationDialog : public QDialog, public Ui::OperationDialog, public IOperationProgressListener
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
COperationDialog();
|
||||||
|
virtual ~COperationDialog();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void onAbortClicked();
|
||||||
|
|
||||||
|
void onProgressPrepare();
|
||||||
|
void onProgressInit(qint64 current, qint64 total);
|
||||||
|
void onProgressStart();
|
||||||
|
void onProgressStop();
|
||||||
|
void onProgressProgress(qint64 current, const QString &filename);
|
||||||
|
void onProgressSuccess(qint64 total);
|
||||||
|
void onProgressFail(const QString &error);
|
||||||
|
void onDone();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
// emitted when requesting real URL
|
||||||
|
void prepare();
|
||||||
|
|
||||||
|
// emitted when we got the initial (local) and total (remote) size of file
|
||||||
|
void init(qint64 current, qint64 total);
|
||||||
|
|
||||||
|
// emitted when we begin to download
|
||||||
|
void start();
|
||||||
|
|
||||||
|
// emitted when the download stopped
|
||||||
|
void stop();
|
||||||
|
|
||||||
|
// emitted when extracting
|
||||||
|
void progress(qint64 current, const QString &filename);
|
||||||
|
|
||||||
|
// emitted when the whole file is downloaded
|
||||||
|
void success(qint64 total);
|
||||||
|
|
||||||
|
// emitted when an error occurs
|
||||||
|
void fail(const QString &error);
|
||||||
|
|
||||||
|
// emitted when done and should process next step
|
||||||
|
void done();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void showEvent(QShowEvent *e);
|
||||||
|
void closeEvent(QCloseEvent *e);
|
||||||
|
|
||||||
|
void processNextStep();
|
||||||
|
|
||||||
|
// operations
|
||||||
|
void copyServerFiles();
|
||||||
|
void copyProfileFiles();
|
||||||
|
void extractBnpClient();
|
||||||
|
void cleanFiles();
|
||||||
|
bool createDefaultProfile();
|
||||||
|
bool createDefaultShortcuts();
|
||||||
|
|
||||||
|
// from CFilesCopier
|
||||||
|
virtual void operationPrepare();
|
||||||
|
virtual void operationInit(qint64 current, qint64 total);
|
||||||
|
virtual void operationStart();
|
||||||
|
virtual void operationStop();
|
||||||
|
virtual void operationProgress(qint64 current, const QString &filename);
|
||||||
|
virtual void operationSuccess(qint64 total);
|
||||||
|
virtual void operationFail(const QString &error);
|
||||||
|
virtual void operationFinish();
|
||||||
|
|
||||||
|
virtual bool operationShouldStop();
|
||||||
|
|
||||||
|
QWinTaskbarButton *m_button;
|
||||||
|
CDownloader *m_downloader;
|
||||||
|
|
||||||
|
QString m_currentOperation;
|
||||||
|
QString m_currentOperationProgressFormat;
|
||||||
|
|
||||||
|
QMutex m_abortingMutex;
|
||||||
|
bool m_aborting;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>627</width>
|
<width>627</width>
|
||||||
<height>539</height>
|
<height>479</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -43,60 +43,6 @@ p, li { white-space: pre-wrap; }
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QFrame" name="downloadFrame">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::StyledPanel</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Raised</enum>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="downloadLayout" stretch="1,0,0">
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="QProgressBar" name="progressBar">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
<property name="format">
|
|
||||||
<string>%p%</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="resumeButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Resume</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="stopButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Stop</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QFrame" name="configurationFrame">
|
<widget class="QFrame" name="configurationFrame">
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>OperationDialog</class>
|
||||||
|
<widget class="QDialog" name="OperationDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>106</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="operationLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="operationProgressLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="operationProgressBar">
|
||||||
|
<property name="value">
|
||||||
|
<number>24</number>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="operationButtonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Abort</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in a new issue