OSDN Git Service

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