OSDN Git Service

Macでの動作修正
[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     m_Cancel(false)\r
11 {\r
12     ui->setupUi(this);\r
13 }\r
14 \r
15 OperationDialog::~OperationDialog()\r
16 {\r
17     delete ui;\r
18 }\r
19 \r
20 void OperationDialog::showEvent(QShowEvent *)\r
21 {\r
22     ui->textEdit->setVisible(false);\r
23 \r
24     QThread *thread = new QThread();\r
25     m_worker->moveToThread(thread);\r
26     m_worker->setProgressText(ui->label);\r
27     connect(thread, SIGNAL(started()), m_worker, SLOT(operate()));\r
28     connect(m_worker, SIGNAL(finished()), thread, SLOT(quit()));\r
29 \r
30     connect(thread, SIGNAL(finished()), this, SLOT(onFinished()));\r
31     connect(thread, SIGNAL(finished()), m_worker, SLOT(deleteLater()));\r
32     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));\r
33 \r
34     connect(m_worker, SIGNAL(operation(QString)), this, SLOT(onOperation(QString)));\r
35     connect(m_worker, SIGNAL(success(QString)), this, SLOT(onSuccess(QString)));\r
36     connect(m_worker, SIGNAL(error(QString)), this, SLOT(onError(QString)));\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     if (m_Cancel) {\r
65         ui->textEdit->append(tr("操作は途中でキャンセルされました。"));\r
66     }\r
67     else {\r
68         ui->textEdit->append(tr("完了"));\r
69         if (!m_Error && ui->chkAutoClose->checkState() == Qt::Checked) {\r
70             QDialog::accept();\r
71         }\r
72     }\r
73 }\r
74 \r
75 void OperationDialog::on_btnCloseCancel_clicked()\r
76 {\r
77     if (ui->btnCloseCancel->text() == tr("閉じる")) {\r
78         QDialog::accept();\r
79     }\r
80     else {\r
81         m_Cancel = true;\r
82         m_worker->requestStop();\r
83     }\r
84 }\r
85 \r
86 void OperationDialog::on_btnShowDetail_clicked()\r
87 {\r
88     if (ui->textEdit->isVisible()) {\r
89         ui->textEdit->setVisible(false);\r
90         ui->btnShowDetail->setText(tr("詳細を表示"));\r
91     }\r
92     else {\r
93         ui->textEdit->setVisible(true);\r
94         ui->btnShowDetail->setText(tr("詳細を隠す"));\r
95     }\r
96 }\r