OSDN Git Service

パネル自体の背景色を変更
[gefu/Gefu.git] / copymoveworker.cpp
index 3f614b5..8031076 100644 (file)
@@ -6,9 +6,11 @@
 #include <QDateTime>\r
 #include <QThread>\r
 \r
-CopyMoveWorker::CopyMoveWorker(QObject *parent) :\r
-    AbstractWorker(parent),\r
-    m_CopyList(NULL),\r
+const int SLEEP_TIME = 1;\r
+\r
+CopyMoveWorker::CopyMoveWorker() :\r
+    OperationWorker(),\r
+    m_CopyList(),\r
     m_tgtDir(),\r
     m_CopyMap(),\r
     m_AskingMutex(),\r
@@ -17,21 +19,45 @@ CopyMoveWorker::CopyMoveWorker(QObject *parent) :
 {\r
 }\r
 \r
-void CopyMoveWorker::operate()\r
+void CopyMoveWorker::Listup(const QString &srcPath, const QString &tgtPath)\r
 {\r
-    if (m_Move) {\r
-        emit information(tr("移動準備中..."));\r
+    if (isAborted()) {\r
+        return;\r
     }\r
-    else {\r
-        emit information(tr("コピー準備中..."));\r
+    this->thread()->msleep(SLEEP_TIME);\r
+\r
+    QFileInfo info(srcPath);\r
+    QDir tgtDir(tgtPath);\r
+\r
+    m_CopyMap.insert(srcPath, tgtDir.absoluteFilePath(info.fileName()));\r
+    if (!info.isDir()) {\r
+        return;\r
+     }\r
+\r
+    QDir srcDir(srcPath);\r
+    QFileInfoList list = srcDir.entryInfoList(QDir::NoDotAndDotDot |\r
+                                              QDir::System |\r
+                                              QDir::Hidden |\r
+                                              QDir::AllDirs |\r
+                                              QDir::Files,\r
+                                              QDir::DirsFirst);\r
+    foreach (QFileInfo info2, list) {\r
+        Listup(info2.absoluteFilePath(),\r
+               tgtDir.absoluteFilePath(info.fileName()));\r
     }\r
+}\r
 \r
-    foreach (const QFileInfo &info, *m_CopyList) {\r
-        if (isStopRequested()) {\r
-            emit canceled();\r
+///////////////////////////////////////////////////////////////////////////////\r
+/// \brief CopyMoveWorker::run\r
+///\r
+void CopyMoveWorker::run()\r
+{\r
+    foreach (const QString &path, m_CopyList) {\r
+        if (isAborted()) {\r
+            emit finished(true);\r
             return;\r
         }\r
-        Listup(info.absoluteFilePath(), m_tgtDir);\r
+        Listup(path, m_tgtDir);\r
     }\r
 \r
     bool ret;\r
@@ -39,22 +65,24 @@ void CopyMoveWorker::operate()
     int skipCount = 0;\r
     int errorCount = 0;\r
     int errDelCount = 0;\r
+    const QString operation = (m_Move) ? tr("移動:%1 -> %2") :\r
+                                         tr("コピー:%1 -> %2");\r
     QString msg;\r
     QString copyMethod;\r
     QString alias;\r
     StringMap::iterator it;\r
     for (it = m_CopyMap.begin(); it != m_CopyMap.end(); it++) {\r
-        if (isStopRequested()) {\r
-            emit canceled();\r
+        this->thread()->msleep(SLEEP_TIME);\r
+        if (isAborted()) {\r
+            emit finished(true);\r
             return;\r
         }\r
         QFileInfo srcInfo(it.key());\r
         QFileInfo tgtInfo(it.value());\r
 \r
-        emit operation((m_Move ? tr("移動") : tr("コピー:"))\r
-                     + srcInfo.absoluteFilePath()\r
-                     + tr(" -> ")\r
-                     + tgtInfo.absoluteFilePath());\r
+        emit progress(operation\r
+                      .arg(srcInfo.absoluteFilePath())\r
+                      .arg(tgtInfo.absoluteFilePath()));\r
 \r
         if (srcInfo.isDir()) {\r
             if (tgtInfo.exists()) {\r
@@ -83,7 +111,7 @@ void CopyMoveWorker::operate()
                 }\r
 \r
                 // キャンセルされた?\r
-                if (isStopRequested()) {\r
+                if (isAborted()) {\r
                     msg = tr("%1個のファイルをコピーしました。").arg(successCount);\r
                     if (skipCount > 0) {\r
                         msg += tr("%1個のファイルをスキップしました。").arg(skipCount);\r
@@ -91,8 +119,8 @@ void CopyMoveWorker::operate()
                     if (errorCount > 0) {\r
                         msg += tr("%1個のファイルをコピーできませんでした。").arg(errorCount);\r
                     }\r
-                    emit information(msg);\r
-                    emit canceled();\r
+                    emit progress(msg);\r
+                    emit finished(true);\r
                     return;\r
                 }\r
 \r
@@ -127,7 +155,7 @@ void CopyMoveWorker::operate()
                             break;\r
                         }\r
                     }\r
-                    emit operation(tr("=>") + tgtInfo.fileName() + tr("にリネーム"));\r
+                    emit progress(tr("=> %1 にリネーム").arg(tgtInfo.fileName()));\r
                 }\r
                 else if (copyMethod == "rbSkip") {\r
                     emit success(tr("スキップ"));\r
@@ -136,7 +164,7 @@ void CopyMoveWorker::operate()
                 }\r
                 else if (copyMethod == "rbRename") {\r
                     tgtInfo.setFile(tgtInfo.absolutePath(), alias);\r
-                    emit operation(tr("=>") + tgtInfo.fileName() + tr("にリネーム"));\r
+                    emit progress(tr("=> %1 にリネーム").arg(tgtInfo.fileName()));\r
                 }\r
                 else {\r
                     qDebug() << "Unknown method : " << copyMethod;\r
@@ -187,22 +215,12 @@ void CopyMoveWorker::operate()
     emit finished();\r
 }\r
 \r
-void CopyMoveWorker::Listup(const QString &srcPath, const QString &tgtPath)\r
+QString CopyMoveWorker::initialText() const\r
 {\r
-    if (isStopRequested()) {\r
-        return;\r
+    if (m_Move) {\r
+        return tr("移動準備中...");\r
     }\r
-\r
-    QFileInfo info(srcPath);\r
-    QDir tgtDir(tgtPath);\r
-\r
-    m_CopyMap.insert(srcPath, tgtDir.absoluteFilePath(info.fileName()));\r
-    qDebug() << srcPath << " -> " << tgtDir.absoluteFilePath(info.fileName());\r
-    if (info.isDir()) {\r
-        QDir srcDir(srcPath);\r
-        foreach (QFileInfo info2, srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {\r
-            Listup(info2.absoluteFilePath(),\r
-                   tgtDir.absoluteFilePath(info.fileName()));\r
-        }\r
+    else {\r
+        return tr("コピー準備中...");\r
     }\r
 }\r