OSDN Git Service

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