OSDN Git Service

Ver0.26
[gefu/Gefu.git] / operationdialog.cpp
1 #include "operationworker.h"\r
2 #include "operationdialog.h"\r
3 #include "ui_operationdialog.h"\r
4 \r
5 ///////////////////////////////////////////////////////////////////////////////\r
6 /// \brief OperationDialog::OperationDialog\r
7 /// \param parent   親ウィジェット\r
8 ///\r
9 /// コンストラクタ\r
10 ///\r
11 OperationDialog::OperationDialog(QWidget *parent) :\r
12     QDialog(parent),\r
13     ui(new Ui::OperationDialog),\r
14     m_worker(NULL),\r
15     m_Error(false)\r
16 {\r
17     ui->setupUi(this);\r
18     ui->textEdit->setVisible(false);\r
19     resize(parent->width() * 0.8, height());\r
20 }\r
21 \r
22 ///////////////////////////////////////////////////////////////////////////////\r
23 /// \brief OperationDialog::~OperationDialog\r
24 ///\r
25 /// デストラクタ\r
26 ///\r
27 OperationDialog::~OperationDialog()\r
28 {\r
29     delete ui;\r
30 }\r
31 \r
32 ///////////////////////////////////////////////////////////////////////////////\r
33 /// \brief OperationDialog::setAutoClose\r
34 /// \param yes  処理完了時に自動で閉じる場合はtrue\r
35 ///\r
36 void OperationDialog::setAutoClose(bool yes)\r
37 {\r
38     ui->chkAutoClose->setChecked(yes);\r
39 }\r
40 \r
41 ///////////////////////////////////////////////////////////////////////////////\r
42 /// \brief OperationDialog::autoClose\r
43 /// \return 処理完了時に自動で閉じる場合はtrue\r
44 ///\r
45 bool OperationDialog::autoClose() const\r
46 {\r
47     return ui->chkAutoClose->isChecked();\r
48 }\r
49 \r
50 ///////////////////////////////////////////////////////////////////////////////\r
51 /// \brief OperationDialog::onProgress\r
52 /// \param msg  表示するメッセージ\r
53 ///\r
54 /// 処理経過メッセージを表示します。\r
55 ///\r
56 void OperationDialog::onProgress(const QString &msg)\r
57 {\r
58     ui->textEdit->append(msg + " ... ");\r
59 }\r
60 \r
61 ///////////////////////////////////////////////////////////////////////////////\r
62 /// \brief OperationDialog::onSuccess\r
63 /// \param msg  表示するメッセージ\r
64 ///\r
65 /// 処理成功メッセージを表示します。\r
66 ///\r
67 void OperationDialog::onSuccess(const QString &msg)\r
68 {\r
69     ui->textEdit->append("<font color='green'>" + msg + "</font>");\r
70 }\r
71 \r
72 ///////////////////////////////////////////////////////////////////////////////\r
73 /// \brief OperationDialog::onError\r
74 /// \param msg  表示するメッセージ\r
75 ///\r
76 /// エラーメッセージを表示します。\r
77 ///\r
78 void OperationDialog::onError(const QString &msg)\r
79 {\r
80     m_Error = true;\r
81     ui->textEdit->append("<font color='red'><strong>" + msg + "</strong></font>");\r
82 }\r
83 \r
84 ///////////////////////////////////////////////////////////////////////////////\r
85 /// \brief OperationDialog::onFinished\r
86 /// \param abort    中断した場合はtrue\r
87 ///\r
88 /// 処理終了時の処理を行います。\r
89 ///\r
90 void OperationDialog::onFinished(bool abort)\r
91 {\r
92     ui->progressBar->setMaximum(1);\r
93     ui->progressBar->setValue(1);\r
94     ui->btnCloseCancel->setText(tr("閉じる"));\r
95 \r
96     ui->textEdit->append("");\r
97     if (abort) {\r
98         ui->textEdit->append(tr("操作は途中でキャンセルされました。"));\r
99     }\r
100     else {\r
101         ui->textEdit->append(tr("完了"));\r
102         if (!m_Error && ui->chkAutoClose->checkState() == Qt::Checked) {\r
103             QDialog::accept();\r
104         }\r
105     }\r
106 }\r
107 \r
108 ///////////////////////////////////////////////////////////////////////////////\r
109 /// \brief OperationDialog::on_btnCloseCancel_clicked\r
110 ///\r
111 /// 「閉じる」または「キャンセル」ボタンクリック時の処理を行います。\r
112 ///\r
113 void OperationDialog::on_btnCloseCancel_clicked()\r
114 {\r
115     if (ui->btnCloseCancel->text() == tr("閉じる")) {\r
116         QDialog::accept();\r
117     }\r
118     else {\r
119         m_worker->abort();\r
120     }\r
121 }\r
122 \r
123 ///////////////////////////////////////////////////////////////////////////////\r
124 /// \brief OperationDialog::on_btnShowDetail_clicked\r
125 ///\r
126 /// 詳細表示/非表示の処理を行います。\r
127 ///\r
128 void OperationDialog::on_btnShowDetail_clicked()\r
129 {\r
130     if (ui->textEdit->isVisible()) {\r
131         ui->textEdit->setVisible(false);\r
132         ui->btnShowDetail->setText(tr("詳細を表示"));\r
133     }\r
134     else {\r
135         ui->textEdit->setVisible(true);\r
136         ui->btnShowDetail->setText(tr("詳細を隠す"));\r
137     }\r
138 }\r
139 \r
140 ///////////////////////////////////////////////////////////////////////////////\r
141 /// \brief OperationDialog::exec\r
142 /// \return ダイアログ処理の結果を返します。\r
143 ///\r
144 /// ダイアログを表示します。\r
145 ///\r
146 int OperationDialog::exec()\r
147 {\r
148     connect(m_worker, SIGNAL(finished(bool)), this, SLOT(onFinished(bool)));\r
149     connect(m_worker, SIGNAL(error(QString)), this, SLOT(onError(QString)));\r
150     connect(m_worker, SIGNAL(progress(QString)), this, SLOT(onProgress(QString)));\r
151     connect(m_worker, SIGNAL(success(QString)), this, SLOT(onSuccess(QString)));\r
152     connect(m_worker, SIGNAL(information(QString)), ui->label, SLOT(setText(QString)));\r
153 \r
154     ui->label->setText(m_worker->initialText());\r
155     m_worker->start();\r
156     return QDialog::exec();\r
157 }\r