fix DownloadDialog behavior

The DownloadDialog behavior was broken in a way it allows the user
to make changes on the dialog while the download is happening.

Also, clicking on "Cancel" breaks/hangs the UI sometimes, as libdivingcomputer
doesn't always cancels the download right away. That's a bug that
still needs to be fixed.

Signed-off-by: Danilo Cesar Lemes de Paula <danilo.eu@gmail.com>
This commit is contained in:
Danilo Cesar Lemes de Paula 2013-08-25 10:01:59 -03:00 committed by Danilo Cesar Lemes de Paula
parent db44045cfe
commit ab649e21ba
2 changed files with 49 additions and 2 deletions

View file

@ -65,7 +65,11 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget* parent, Qt::WindowFlags f) :
void DownloadFromDCWidget::runDialog()
{
// Since the DownloadDialog is only
// created once, we need to do put some starting code here
ui->progressBar->hide();
markChildrenAsEnabled();
exec();
}
@ -138,7 +142,11 @@ void DownloadFromDCWidget::on_cancel_clicked()
thread->deleteLater();
thread = 0;
}
close();
// Confusing, but if the user press cancel during a download
// he probably want to cancel the download, not to close the window.
if (!downloading)
close();
}
void DownloadFromDCWidget::on_ok_clicked()
@ -146,6 +154,7 @@ void DownloadFromDCWidget::on_ok_clicked()
if (downloading)
return;
markChildrenAsDisabled();
ui->progressBar->setValue(0);
ui->progressBar->show();
@ -156,6 +165,7 @@ void DownloadFromDCWidget::on_ok_clicked()
data.devname = strdup(ui->device->text().toUtf8().data());
data.vendor = strdup(ui->vendor->currentText().toUtf8().data());
data.product = strdup(ui->product->currentText().toUtf8().data());
data.descriptor = descriptorLookup[ui->vendor->currentText() + ui->product->currentText()];
data.force_download = ui->forceDownload->isChecked();
data.deviceid = data.diveid = 0;
@ -177,6 +187,36 @@ bool DownloadFromDCWidget::preferDownloaded()
return ui->preferDownloaded->isChecked();
}
void DownloadFromDCWidget::reject()
{
// we don't want the download window being able to close
// while we're still downloading.
if (!downloading)
QDialog::reject();
}
void DownloadFromDCWidget::markChildrenAsDisabled()
{
ui->device->setDisabled(true);
ui->vendor->setDisabled(true);
ui->product->setDisabled(true);
ui->forceDownload->setDisabled(true);
ui->preferDownloaded->setDisabled(true);
ui->ok->setDisabled(true);
ui->search->setDisabled(true);
}
void DownloadFromDCWidget::markChildrenAsEnabled()
{
ui->device->setDisabled(false);
ui->vendor->setDisabled(false);
ui->product->setDisabled(false);
ui->forceDownload->setDisabled(false);
ui->preferDownloaded->setDisabled(false);
ui->ok->setDisabled(false);
ui->search->setDisabled(false);
}
DownloadThread::DownloadThread(device_data_t* data): data(data)
{
}

View file

@ -24,7 +24,7 @@ private:
class InterfaceThread : public QThread{
Q_OBJECT
public:
InterfaceThread(QObject *parent, device_data_t *data) ;
InterfaceThread(QObject *parent, device_data_t *data);
virtual void run();
signals:
@ -39,13 +39,19 @@ class DownloadFromDCWidget : public QDialog{
public:
explicit DownloadFromDCWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
static DownloadFromDCWidget *instance();
void reject();
public slots:
void on_ok_clicked();
void on_cancel_clicked();
void runDialog();
void stoppedDownloading();
void on_vendor_currentIndexChanged(const QString& vendor);
private:
void markChildrenAsDisabled();
void markChildrenAsEnabled();
Ui::DownloadFromDiveComputer *ui;
InterfaceThread *thread;
bool downloading;
@ -58,6 +64,7 @@ private:
QStringListModel *vendorModel;
QStringListModel *productModel;
void fill_computer_list();
public:
bool preferDownloaded();
};