diff options
author | Tomaz Canabrava <tcanabrava@kde.org> | 2013-05-20 17:02:17 -0300 |
---|---|---|
committer | Tomaz Canabrava <tcanabrava@kde.org> | 2013-05-20 17:02:17 -0300 |
commit | a542b25bde597b7bfe189f14a6868f711f879516 (patch) | |
tree | 5ec29dcafb9da0cc5470e5a5889aca29b54008ec /qt-ui/downloadfromdivecomputer.cpp | |
parent | c7a5d0490fa5f4e8579e6a8e0fbdc7baf7c34145 (diff) | |
download | subsurface-a542b25bde597b7bfe189f14a6868f711f879516.tar.gz |
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 <tcanabrava@kde.org>
Diffstat (limited to 'qt-ui/downloadfromdivecomputer.cpp')
-rw-r--r-- | qt-ui/downloadfromdivecomputer.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
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); } |