OSDN Git Service

Ver0.26
[gefu/Gefu.git] / operationdialog.cpp
index fede99b..7a234dc 100644 (file)
@@ -1,7 +1,13 @@
+#include "operationworker.h"\r
 #include "operationdialog.h"\r
 #include "ui_operationdialog.h"\r
-#include <QThread>\r
 \r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::OperationDialog\r
+/// \param parent   親ウィジェット\r
+///\r
+/// コンストラクタ\r
+///\r
 OperationDialog::OperationDialog(QWidget *parent) :\r
     QDialog(parent),\r
     ui(new Ui::OperationDialog),\r
@@ -9,84 +15,116 @@ OperationDialog::OperationDialog(QWidget *parent) :
     m_Error(false)\r
 {\r
     ui->setupUi(this);\r
+    ui->textEdit->setVisible(false);\r
+    resize(parent->width() * 0.8, height());\r
 }\r
 \r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::~OperationDialog\r
+///\r
+/// デストラクタ\r
+///\r
 OperationDialog::~OperationDialog()\r
 {\r
     delete ui;\r
 }\r
 \r
-void OperationDialog::showEvent(QShowEvent *)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::setAutoClose\r
+/// \param yes  処理完了時に自動で閉じる場合はtrue\r
+///\r
+void OperationDialog::setAutoClose(bool yes)\r
 {\r
-    ui->textEdit->setVisible(false);\r
-\r
-    QThread *thread = new QThread();\r
-    m_worker->moveToThread(thread);\r
-    m_worker->setProgressText(ui->label);\r
-    connect(thread, SIGNAL(started()), m_worker, SLOT(operate()));\r
-    connect(m_worker, SIGNAL(finished()), thread, SLOT(quit()));\r
-\r
-    connect(thread, SIGNAL(finished()), m_worker, SLOT(deleteLater()));\r
-    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));\r
-\r
-    connect(m_worker, SIGNAL(operation(QString)), this, SLOT(onOperation(QString)));\r
-    connect(m_worker, SIGNAL(success(QString)), this, SLOT(onSuccess(QString)));\r
-    connect(m_worker, SIGNAL(error(QString)), this, SLOT(onError(QString)));\r
-    connect(m_worker, SIGNAL(finished()), this, SLOT(onFinished()));\r
-    connect(m_worker, SIGNAL(canceled()), this, SLOT(onCanceled()));\r
+    ui->chkAutoClose->setChecked(yes);\r
+}\r
 \r
-    thread->start();\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::autoClose\r
+/// \return 処理完了時に自動で閉じる場合はtrue\r
+///\r
+bool OperationDialog::autoClose() const\r
+{\r
+    return ui->chkAutoClose->isChecked();\r
 }\r
 \r
-void OperationDialog::onOperation(const QString &msg)\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::onProgress\r
+/// \param msg  表示するメッセージ\r
+///\r
+/// 処理経過メッセージを表示します。\r
+///\r
+void OperationDialog::onProgress(const QString &msg)\r
 {\r
     ui->textEdit->append(msg + " ... ");\r
 }\r
 \r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::onSuccess\r
+/// \param msg  表示するメッセージ\r
+///\r
+/// 処理成功メッセージを表示します。\r
+///\r
 void OperationDialog::onSuccess(const QString &msg)\r
 {\r
     ui->textEdit->append("<font color='green'>" + msg + "</font>");\r
 }\r
 \r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::onError\r
+/// \param msg  表示するメッセージ\r
+///\r
+/// エラーメッセージを表示します。\r
+///\r
 void OperationDialog::onError(const QString &msg)\r
 {\r
     m_Error = true;\r
     ui->textEdit->append("<font color='red'><strong>" + msg + "</strong></font>");\r
 }\r
 \r
-void OperationDialog::onFinished()\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::onFinished\r
+/// \param abort    中断した場合はtrue\r
+///\r
+/// 処理終了時の処理を行います。\r
+///\r
+void OperationDialog::onFinished(bool abort)\r
 {\r
     ui->progressBar->setMaximum(1);\r
     ui->progressBar->setValue(1);\r
     ui->btnCloseCancel->setText(tr("閉じる"));\r
 \r
     ui->textEdit->append("");\r
-    ui->textEdit->append(tr("完了"));\r
-    if (!m_Error && ui->chkAutoClose->checkState() == Qt::Checked) {\r
-        QDialog::accept();\r
+    if (abort) {\r
+        ui->textEdit->append(tr("操作は途中でキャンセルされました。"));\r
+    }\r
+    else {\r
+        ui->textEdit->append(tr("完了"));\r
+        if (!m_Error && ui->chkAutoClose->checkState() == Qt::Checked) {\r
+            QDialog::accept();\r
+        }\r
     }\r
 }\r
 \r
-void OperationDialog::onCanceled()\r
-{\r
-    ui->progressBar->setMaximum(1);\r
-    ui->progressBar->setValue(1);\r
-    ui->btnCloseCancel->setText(tr("閉じる"));\r
-\r
-    ui->textEdit->append("");\r
-    ui->textEdit->append(tr("操作は途中でキャンセルされました。"));\r
-}\r
-\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::on_btnCloseCancel_clicked\r
+///\r
+/// 「閉じる」または「キャンセル」ボタンクリック時の処理を行います。\r
+///\r
 void OperationDialog::on_btnCloseCancel_clicked()\r
 {\r
     if (ui->btnCloseCancel->text() == tr("閉じる")) {\r
         QDialog::accept();\r
     }\r
     else {\r
-        m_worker->requestStop();\r
+        m_worker->abort();\r
     }\r
 }\r
 \r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::on_btnShowDetail_clicked\r
+///\r
+/// 詳細表示/非表示の処理を行います。\r
+///\r
 void OperationDialog::on_btnShowDetail_clicked()\r
 {\r
     if (ui->textEdit->isVisible()) {\r
@@ -98,3 +136,22 @@ void OperationDialog::on_btnShowDetail_clicked()
         ui->btnShowDetail->setText(tr("詳細を隠す"));\r
     }\r
 }\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief OperationDialog::exec\r
+/// \return ダイアログ処理の結果を返します。\r
+///\r
+/// ダイアログを表示します。\r
+///\r
+int OperationDialog::exec()\r
+{\r
+    connect(m_worker, SIGNAL(finished(bool)), this, SLOT(onFinished(bool)));\r
+    connect(m_worker, SIGNAL(error(QString)), this, SLOT(onError(QString)));\r
+    connect(m_worker, SIGNAL(progress(QString)), this, SLOT(onProgress(QString)));\r
+    connect(m_worker, SIGNAL(success(QString)), this, SLOT(onSuccess(QString)));\r
+    connect(m_worker, SIGNAL(information(QString)), ui->label, SLOT(setText(QString)));\r
+\r
+    ui->label->setText(m_worker->initialText());\r
+    m_worker->start();\r
+    return QDialog::exec();\r
+}\r