OSDN Git Service

fede99bb7f7b15cd25f5277f8ebf22ab9dc3e7b8
[gefu/Gefu.git] / operationdialog.cpp
1 #include "operationdialog.h"\r
2 #include "ui_operationdialog.h"\r
3 #include <QThread>\r
4 \r
5 OperationDialog::OperationDialog(QWidget *parent) :\r
6     QDialog(parent),\r
7     ui(new Ui::OperationDialog),\r
8     m_worker(NULL),\r
9     m_Error(false)\r
10 {\r
11     ui->setupUi(this);\r
12 }\r
13 \r
14 OperationDialog::~OperationDialog()\r
15 {\r
16     delete ui;\r
17 }\r
18 \r
19 void OperationDialog::showEvent(QShowEvent *)\r
20 {\r
21     ui->textEdit->setVisible(false);\r
22 \r
23     QThread *thread = new QThread();\r
24     m_worker->moveToThread(thread);\r
25     m_worker->setProgressText(ui->label);\r
26     connect(thread, SIGNAL(started()), m_worker, SLOT(operate()));\r
27     connect(m_worker, SIGNAL(finished()), thread, SLOT(quit()));\r
28 \r
29     connect(thread, SIGNAL(finished()), m_worker, SLOT(deleteLater()));\r
30     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));\r
31 \r
32     connect(m_worker, SIGNAL(operation(QString)), this, SLOT(onOperation(QString)));\r
33     connect(m_worker, SIGNAL(success(QString)), this, SLOT(onSuccess(QString)));\r
34     connect(m_worker, SIGNAL(error(QString)), this, SLOT(onError(QString)));\r
35     connect(m_worker, SIGNAL(finished()), this, SLOT(onFinished()));\r
36     connect(m_worker, SIGNAL(canceled()), this, SLOT(onCanceled()));\r
37 \r
38     thread->start();\r
39 }\r
40 \r
41 void OperationDialog::onOperation(const QString &msg)\r
42 {\r
43     ui->textEdit->append(msg + " ... ");\r
44 }\r
45 \r
46 void OperationDialog::onSuccess(const QString &msg)\r
47 {\r
48     ui->textEdit->append("<font color='green'>" + msg + "</font>");\r
49 }\r
50 \r
51 void OperationDialog::onError(const QString &msg)\r
52 {\r
53     m_Error = true;\r
54     ui->textEdit->append("<font color='red'><strong>" + msg + "</strong></font>");\r
55 }\r
56 \r
57 void OperationDialog::onFinished()\r
58 {\r
59     ui->progressBar->setMaximum(1);\r
60     ui->progressBar->setValue(1);\r
61     ui->btnCloseCancel->setText(tr("閉じる"));\r
62 \r
63     ui->textEdit->append("");\r
64     ui->textEdit->append(tr("完了"));\r
65     if (!m_Error && ui->chkAutoClose->checkState() == Qt::Checked) {\r
66         QDialog::accept();\r
67     }\r
68 }\r
69 \r
70 void OperationDialog::onCanceled()\r
71 {\r
72     ui->progressBar->setMaximum(1);\r
73     ui->progressBar->setValue(1);\r
74     ui->btnCloseCancel->setText(tr("閉じる"));\r
75 \r
76     ui->textEdit->append("");\r
77     ui->textEdit->append(tr("操作は途中でキャンセルされました。"));\r
78 }\r
79 \r
80 void OperationDialog::on_btnCloseCancel_clicked()\r
81 {\r
82     if (ui->btnCloseCancel->text() == tr("閉じる")) {\r
83         QDialog::accept();\r
84     }\r
85     else {\r
86         m_worker->requestStop();\r
87     }\r
88 }\r
89 \r
90 void OperationDialog::on_btnShowDetail_clicked()\r
91 {\r
92     if (ui->textEdit->isVisible()) {\r
93         ui->textEdit->setVisible(false);\r
94         ui->btnShowDetail->setText(tr("詳細を表示"));\r
95     }\r
96     else {\r
97         ui->textEdit->setVisible(true);\r
98         ui->btnShowDetail->setText(tr("詳細を隠す"));\r
99     }\r
100 }\r