From 8791832c865b01f1d32f6b49d76febdb99caf8e2 Mon Sep 17 00:00:00 2001
From: Marc Zinnschlag <marc@zpages.de>
Date: Sat, 20 Jun 2015 17:56:42 +0200
Subject: [PATCH] standarised on the use of the Message struct when passing
 operations messages around

---
 apps/opencs/main.cpp                      |  3 +++
 apps/opencs/model/doc/document.cpp        |  9 ++++-----
 apps/opencs/model/doc/document.hpp        |  3 +--
 apps/opencs/model/doc/loader.cpp          |  3 ++-
 apps/opencs/model/doc/messages.cpp        |  2 ++
 apps/opencs/model/doc/messages.hpp        |  6 ++++++
 apps/opencs/model/doc/operation.cpp       |  4 ++--
 apps/opencs/model/doc/operation.hpp       |  5 +++--
 apps/opencs/model/doc/operationholder.cpp |  4 ++--
 apps/opencs/model/doc/operationholder.hpp |  5 +++--
 apps/opencs/model/tools/reportmodel.cpp   |  5 ++---
 apps/opencs/model/tools/reportmodel.hpp   |  3 +--
 apps/opencs/model/tools/tools.cpp         | 15 ++++++---------
 apps/opencs/model/tools/tools.hpp         |  3 +--
 14 files changed, 38 insertions(+), 32 deletions(-)

diff --git a/apps/opencs/main.cpp b/apps/opencs/main.cpp
index b11561c135..ce434fc43b 100644
--- a/apps/opencs/main.cpp
+++ b/apps/opencs/main.cpp
@@ -13,6 +13,8 @@
 
 #include <components/ogreinit/ogreinit.hpp>
 
+#include "model/doc/messages.hpp"
+
 #include "model/world/universalid.hpp"
 
 #ifdef Q_OS_MAC
@@ -52,6 +54,7 @@ int main(int argc, char *argv[])
 
         qRegisterMetaType<std::string> ("std::string");
         qRegisterMetaType<CSMWorld::UniversalId> ("CSMWorld::UniversalId");
+        qRegisterMetaType<CSMDoc::Message> ("CSMDoc::Message");
 
         OgreInit::OgreInit ogreInit;
 
diff --git a/apps/opencs/model/doc/document.cpp b/apps/opencs/model/doc/document.cpp
index b833b527ff..1e6ae54550 100644
--- a/apps/opencs/model/doc/document.cpp
+++ b/apps/opencs/model/doc/document.cpp
@@ -2304,8 +2304,8 @@ CSMDoc::Document::Document (const Files::ConfigurationManager& configuration,
     connect (&mSaving, SIGNAL (done (int, bool)), this, SLOT (operationDone (int, bool)));
 
     connect (
-        &mSaving, SIGNAL (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)),
-        this, SLOT (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)));
+        &mSaving, SIGNAL (reportMessage (const CSMDoc::Message&, int)),
+        this, SLOT (reportMessage (const CSMDoc::Message&, int)));
 
     connect (&mRunner, SIGNAL (runStateChanged()), this, SLOT (runStateChanged()));
 }
@@ -2401,11 +2401,10 @@ void CSMDoc::Document::modificationStateChanged (bool clean)
     emit stateChanged (getState(), this);
 }
 
-void CSMDoc::Document::reportMessage (const CSMWorld::UniversalId& id, const std::string& message,
-    const std::string& hint, int type)
+void CSMDoc::Document::reportMessage (const CSMDoc::Message& message, int type)
 {
     /// \todo find a better way to get these messages to the user.
-    std::cout << message << std::endl;
+    std::cout << message.mMessage << std::endl;
 }
 
 void CSMDoc::Document::operationDone (int type, bool failed)
diff --git a/apps/opencs/model/doc/document.hpp b/apps/opencs/model/doc/document.hpp
index 14daeeb758..4aaaf40b03 100644
--- a/apps/opencs/model/doc/document.hpp
+++ b/apps/opencs/model/doc/document.hpp
@@ -158,8 +158,7 @@ namespace CSMDoc
 
             void modificationStateChanged (bool clean);
 
-            void reportMessage (const CSMWorld::UniversalId& id, const std::string& message,
-                const std::string& hint, int type);
+            void reportMessage (const CSMDoc::Message& message, int type);
 
             void operationDone (int type, bool failed);
 
diff --git a/apps/opencs/model/doc/loader.cpp b/apps/opencs/model/doc/loader.cpp
index 43f3b850ea..5cdade37e1 100644
--- a/apps/opencs/model/doc/loader.cpp
+++ b/apps/opencs/model/doc/loader.cpp
@@ -68,7 +68,8 @@ void CSMDoc::Loader::load()
             for (CSMDoc::Messages::Iterator iter (messages.begin());
                 iter!=messages.end(); ++iter)
             {
-                document->getReport (log)->add (iter->mId, iter->mMessage);
+                document->getReport (log)->add (
+                    CSMDoc::Message (iter->mId, iter->mMessage, ""));
                 emit loadMessage (document, iter->mMessage);
             }
             }
diff --git a/apps/opencs/model/doc/messages.cpp b/apps/opencs/model/doc/messages.cpp
index 3c709683e1..07604cd857 100644
--- a/apps/opencs/model/doc/messages.cpp
+++ b/apps/opencs/model/doc/messages.cpp
@@ -1,6 +1,8 @@
 
 #include "messages.hpp"
 
+CSMDoc::Message::Message() {}
+
 CSMDoc::Message::Message (const CSMWorld::UniversalId& id, const std::string& message,
     const std::string& hint)
 : mId (id), mMessage (message), mHint (hint)
diff --git a/apps/opencs/model/doc/messages.hpp b/apps/opencs/model/doc/messages.hpp
index 4e143d8698..ecdb7e2438 100644
--- a/apps/opencs/model/doc/messages.hpp
+++ b/apps/opencs/model/doc/messages.hpp
@@ -4,6 +4,8 @@
 #include <string>
 #include <vector>
 
+#include <QMetaType>
+
 #include "../world/universalid.hpp"
 
 namespace CSMDoc
@@ -14,6 +16,8 @@ namespace CSMDoc
         std::string mMessage;
         std::string mHint;
 
+        Message();
+        
         Message (const CSMWorld::UniversalId& id, const std::string& message,
             const std::string& hint);
     };
@@ -47,4 +51,6 @@ namespace CSMDoc
     };
 }
 
+Q_DECLARE_METATYPE (CSMDoc::Message)
+
 #endif
diff --git a/apps/opencs/model/doc/operation.cpp b/apps/opencs/model/doc/operation.cpp
index 4a39d29115..99d581a954 100644
--- a/apps/opencs/model/doc/operation.cpp
+++ b/apps/opencs/model/doc/operation.cpp
@@ -129,7 +129,7 @@ void CSMDoc::Operation::executeStage()
             }
             catch (const std::exception& e)
             {
-                emit reportMessage (CSMWorld::UniversalId(), e.what(), "", mType);
+                emit reportMessage (Message (CSMWorld::UniversalId(), e.what(), ""), mType);
                 abort();
             }
 
@@ -141,7 +141,7 @@ void CSMDoc::Operation::executeStage()
     emit progress (mCurrentStepTotal, mTotalSteps ? mTotalSteps : 1, mType);
 
     for (Messages::Iterator iter (messages.begin()); iter!=messages.end(); ++iter)
-        emit reportMessage (iter->mId, iter->mMessage, iter->mHint, mType);
+        emit reportMessage (*iter, mType);
 
     if (mCurrentStage==mStages.end())
         operationDone();
diff --git a/apps/opencs/model/doc/operation.hpp b/apps/opencs/model/doc/operation.hpp
index 6d6ed112b0..d90a1bf4f3 100644
--- a/apps/opencs/model/doc/operation.hpp
+++ b/apps/opencs/model/doc/operation.hpp
@@ -8,6 +8,8 @@
 #include <QTimer>
 #include <QStringList>
 
+#include "messages.hpp"
+
 namespace CSMWorld
 {
     class UniversalId;
@@ -61,8 +63,7 @@ namespace CSMDoc
 
             void progress (int current, int max, int type);
 
-            void reportMessage (const CSMWorld::UniversalId& id, const std::string& message,
-                const std::string& hint, int type);
+            void reportMessage (const CSMDoc::Message& message, int type);
 
             void done (int type, bool failed);
 
diff --git a/apps/opencs/model/doc/operationholder.cpp b/apps/opencs/model/doc/operationholder.cpp
index 5157fd80c9..25fc6fc263 100644
--- a/apps/opencs/model/doc/operationholder.cpp
+++ b/apps/opencs/model/doc/operationholder.cpp
@@ -21,8 +21,8 @@ void CSMDoc::OperationHolder::setOperation (Operation *operation)
         this, SIGNAL (progress (int, int, int)));
 
     connect (
-        mOperation, SIGNAL (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)),
-        this, SIGNAL (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)));
+        mOperation, SIGNAL (reportMessage (const CSMDoc::Message&, int)),
+        this, SIGNAL (reportMessage (const CSMDoc::Message&, int)));
 
     connect (
         mOperation, SIGNAL (done (int, bool)),
diff --git a/apps/opencs/model/doc/operationholder.hpp b/apps/opencs/model/doc/operationholder.hpp
index 6fe6df053c..b73d61dab1 100644
--- a/apps/opencs/model/doc/operationholder.hpp
+++ b/apps/opencs/model/doc/operationholder.hpp
@@ -4,6 +4,8 @@
 #include <QObject>
 #include <QThread>
 
+#include "messages.hpp"
+
 namespace CSMWorld
 {
     class UniversalId;
@@ -44,8 +46,7 @@ namespace CSMDoc
 
             void progress (int current, int max, int type);
 
-            void reportMessage (const CSMWorld::UniversalId& id, const std::string& message,
-                const std::string& hint, int type);
+            void reportMessage (const CSMDoc::Message& message, int type);
 
             void done (int type, bool failed);
 
diff --git a/apps/opencs/model/tools/reportmodel.cpp b/apps/opencs/model/tools/reportmodel.cpp
index e661e9eacf..b44ad7b605 100644
--- a/apps/opencs/model/tools/reportmodel.cpp
+++ b/apps/opencs/model/tools/reportmodel.cpp
@@ -127,12 +127,11 @@ bool CSMTools::ReportModel::removeRows (int row, int count, const QModelIndex& p
     return true;
 }
 
-void CSMTools::ReportModel::add (const CSMWorld::UniversalId& id, const std::string& message,
-    const std::string& hint)
+void CSMTools::ReportModel::add (const CSMDoc::Message& message)
 {
     beginInsertRows (QModelIndex(), mRows.size(), mRows.size());
     
-    mRows.push_back (CSMDoc::Message (id, message, hint));
+    mRows.push_back (message);
 
     endInsertRows();
 }
diff --git a/apps/opencs/model/tools/reportmodel.hpp b/apps/opencs/model/tools/reportmodel.hpp
index ff20f74a51..e9b6124b30 100644
--- a/apps/opencs/model/tools/reportmodel.hpp
+++ b/apps/opencs/model/tools/reportmodel.hpp
@@ -42,8 +42,7 @@ namespace CSMTools
 
             virtual bool removeRows (int row, int count, const QModelIndex& parent = QModelIndex());
             
-            void add (const CSMWorld::UniversalId& id, const std::string& message,
-                const std::string& hint = "");
+            void add (const CSMDoc::Message& message);
 
             void flagAsReplaced (int index);
                 
diff --git a/apps/opencs/model/tools/tools.cpp b/apps/opencs/model/tools/tools.cpp
index fda373bcf1..f46dbe6d3d 100644
--- a/apps/opencs/model/tools/tools.cpp
+++ b/apps/opencs/model/tools/tools.cpp
@@ -58,9 +58,8 @@ CSMDoc::OperationHolder *CSMTools::Tools::getVerifier()
 
         connect (&mVerifier, SIGNAL (progress (int, int, int)), this, SIGNAL (progress (int, int, int)));
         connect (&mVerifier, SIGNAL (done (int, bool)), this, SIGNAL (done (int, bool)));
-        connect (&mVerifier,
-            SIGNAL (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)),
-            this, SLOT (verifierMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)));
+        connect (&mVerifier, SIGNAL (reportMessage (const CSMDoc::Message&, int)),
+            this, SLOT (verifierMessage (const CSMDoc::Message&, int)));
 
         std::vector<std::string> mandatoryIds; //  I want C++11, damn it!
         mandatoryIds.push_back ("Day");
@@ -125,9 +124,8 @@ CSMTools::Tools::Tools (CSMDoc::Document& document)
 
     connect (&mSearch, SIGNAL (progress (int, int, int)), this, SIGNAL (progress (int, int, int)));
     connect (&mSearch, SIGNAL (done (int, bool)), this, SIGNAL (done (int, bool)));
-    connect (&mSearch,
-        SIGNAL (reportMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)),
-        this, SLOT (verifierMessage (const CSMWorld::UniversalId&, const std::string&, const std::string&, int)));
+    connect (&mSearch, SIGNAL (reportMessage (const CSMDoc::Message&, int)),
+        this, SLOT (verifierMessage (const CSMDoc::Message&, int)));
 }
 
 CSMTools::Tools::~Tools()
@@ -215,12 +213,11 @@ CSMTools::ReportModel *CSMTools::Tools::getReport (const CSMWorld::UniversalId&
     return mReports.at (id.getIndex());
 }
 
-void CSMTools::Tools::verifierMessage (const CSMWorld::UniversalId& id, const std::string& message,
-    const std::string& hint, int type)
+void CSMTools::Tools::verifierMessage (const CSMDoc::Message& message, int type)
 {
     std::map<int, int>::iterator iter = mActiveReports.find (type);
 
     if (iter!=mActiveReports.end())
-        mReports[iter->second]->add (id, message, hint);
+        mReports[iter->second]->add (message);
 }
 
diff --git a/apps/opencs/model/tools/tools.hpp b/apps/opencs/model/tools/tools.hpp
index 0f9e570445..2912fc4717 100644
--- a/apps/opencs/model/tools/tools.hpp
+++ b/apps/opencs/model/tools/tools.hpp
@@ -75,8 +75,7 @@ namespace CSMTools
 
         private slots:
 
-            void verifierMessage (const CSMWorld::UniversalId& id, const std::string& message,
-                const std::string& hint, int type);
+            void verifierMessage (const CSMDoc::Message& message, int type);
 
         signals: