From a542b25bde597b7bfe189f14a6868f711f879516 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 20 May 2013 17:02:17 -0300 Subject: Added code to cancel the thread. I think it's self explanatory - When user clicks on 'Cancel', the interface will wait for the trhead to quit then will close itself. Signed-off-by: Tomaz Canabrava --- qt-ui/downloadfromdivecomputer.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'qt-ui/downloadfromdivecomputer.cpp') diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index 8be4e6cbb..385f39755 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -10,11 +10,8 @@ namespace DownloadFromDcGlobal{ const char *err_string; }; -extern const char *progress_bar_text; -extern double progress_bar_fraction; - DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) : - QDialog(parent, f), ui(new Ui::DownloadFromDiveComputer), thread(0) + QDialog(parent, f), ui(new Ui::DownloadFromDiveComputer), thread(0), downloading(false) { ui->setupUi(this); ui->progressBar->hide(); @@ -24,11 +21,19 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) : void DownloadFromDCWidget::on_cancel_clicked() { + import_thread_cancelled = true; + if(thread){ + thread->wait(); + thread->deleteLater(); + thread = 0; + } close(); } void DownloadFromDCWidget::on_ok_clicked() { + if (downloading) + return; ui->progressBar->setValue(0); ui->progressBar->show(); @@ -40,9 +45,13 @@ void DownloadFromDCWidget::on_ok_clicked() device_data_t data; // still need to fill the data info here. thread = new InterfaceThread(this, &data); - connect(thread, SIGNAL(updateInterface(int)), ui->progressBar, SLOT(setValue(int)), Qt::QueuedConnection); // Qt::QueuedConnection == threadsafe. - connect(thread, SIGNAL(updateInterface(int)), this, SLOT(setValue(int)), Qt::QueuedConnection); // Qt::QueuedConnection == threadsafe. + connect(thread, SIGNAL(updateInterface(int)), + ui->progressBar, SLOT(setValue(int)), Qt::QueuedConnection); // Qt::QueuedConnection == threadsafe. + + connect(thread, SIGNAL(finished()), this, SLOT(close())); + thread->start(); + downloading = true; } DownloadThread::DownloadThread(device_data_t* data): data(data) @@ -52,12 +61,10 @@ DownloadThread::DownloadThread(device_data_t* data): data(data) void DownloadThread::run() { do_libdivecomputer_import(data); - qDebug() << "Download thread started"; } InterfaceThread::InterfaceThread(QObject* parent, device_data_t* data): QThread(parent), data(data) { - } void InterfaceThread::run() @@ -65,9 +72,9 @@ void InterfaceThread::run() DownloadThread *download = new DownloadThread(data); download->start(); - while(download->isRunning()){ + while(download->isRunning()){ msleep(200); - updateInterface(progress_bar_fraction *100); - } + updateInterface(progress_bar_fraction *100); + } updateInterface(100); } -- cgit v1.2.3-70-g09d2