summaryrefslogtreecommitdiffstats
path: root/qt-ui/downloadfromdivecomputer.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-05-20 17:02:17 -0300
committerGravatar Tomaz Canabrava <tcanabrava@kde.org>2013-05-20 17:02:17 -0300
commita542b25bde597b7bfe189f14a6868f711f879516 (patch)
tree5ec29dcafb9da0cc5470e5a5889aca29b54008ec /qt-ui/downloadfromdivecomputer.cpp
parentc7a5d0490fa5f4e8579e6a8e0fbdc7baf7c34145 (diff)
downloadsubsurface-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.cpp29
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);
}