improve DownloadDialog UI control

* Removes the InterfaceThread
  which is basically an unecessary proxy between the MainThread and
  the DownloadThread.

* Use a state machine to control the DownloadWidget UI logic.

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 19:02:30 -03:00
parent 923b4cd9b1
commit 59da382613
2 changed files with 113 additions and 67 deletions

View file

@ -15,24 +15,12 @@ struct device_data_t;
class DownloadThread : public QThread{
Q_OBJECT
public:
explicit DownloadThread(device_data_t* data);
explicit DownloadThread(QObject* parent, device_data_t* data);
virtual void run();
private:
device_data_t *data;
};
class InterfaceThread : public QThread{
Q_OBJECT
public:
InterfaceThread(QObject *parent, device_data_t *data);
virtual void run();
signals:
void updateInterface(int value);
private:
device_data_t *data;
};
class QStringListModel;
class DownloadFromDCWidget : public QDialog{
Q_OBJECT
@ -41,19 +29,29 @@ public:
static DownloadFromDCWidget *instance();
void reject();
enum states {
INITIAL,
DOWNLOADING,
CANCELLING,
CANCELLED,
DONE,
};
public slots:
void on_ok_clicked();
void on_cancel_clicked();
void runDialog();
void stoppedDownloading();
void on_vendor_currentIndexChanged(const QString& vendor);
void onDownloadThreadFinished();
void updateProgressBar();
void runDialog();
private:
void markChildrenAsDisabled();
void markChildrenAsEnabled();
void markChildrenAsDisabled();
void markChildrenAsEnabled();
Ui::DownloadFromDiveComputer *ui;
InterfaceThread *thread;
DownloadThread *thread;
bool downloading;
QStringList vendorList;
@ -65,8 +63,13 @@ private:
QStringListModel *productModel;
void fill_computer_list();
QTimer *timer;
public:
bool preferDownloaded();
void updateState(states state);
states currentState;
};
#endif