diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index f1d50467b..e19242e09 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -44,7 +44,7 @@ opencs_units_noqt (model/tools opencs_units (view/doc viewmanager view operations operation subview startup filedialog newgame - filewidget adjusterwidget + filewidget adjusterwidget loader ) diff --git a/apps/opencs/model/doc/documentmanager.cpp b/apps/opencs/model/doc/documentmanager.cpp index b8372eb4c..4658667c3 100644 --- a/apps/opencs/model/doc/documentmanager.cpp +++ b/apps/opencs/model/doc/documentmanager.cpp @@ -27,8 +27,8 @@ CSMDoc::DocumentManager::DocumentManager (const Files::ConfigurationManager& con this, SLOT (documentLoaded (Document *))); connect (&mLoader, SIGNAL (documentNotLoaded (Document *, const std::string&)), this, SLOT (documentNotLoaded (Document *, const std::string&))); - connect (this, SIGNAL (loadRequest (Document *, bool)), - &mLoader, SLOT (loadDocument (Document *, bool))); + connect (this, SIGNAL (loadRequest (CSMDoc::Document *, bool)), + &mLoader, SLOT (loadDocument (CSMDoc::Document *, bool))); } CSMDoc::DocumentManager::~DocumentManager() @@ -75,10 +75,11 @@ void CSMDoc::DocumentManager::setResourceDir (const boost::filesystem::path& par void CSMDoc::DocumentManager::documentLoaded (Document *document) { emit documentAdded (document); + emit loadingStopped (document, true, ""); } void CSMDoc::DocumentManager::documentNotLoaded (Document *document, const std::string& error) { +// emit loadingStopped (document, false, error); removeDocument (document); - /// \todo report error } \ No newline at end of file diff --git a/apps/opencs/model/doc/documentmanager.hpp b/apps/opencs/model/doc/documentmanager.hpp index 1af18a148..63ee5eb68 100644 --- a/apps/opencs/model/doc/documentmanager.hpp +++ b/apps/opencs/model/doc/documentmanager.hpp @@ -65,9 +65,12 @@ namespace CSMDoc void documentAdded (CSMDoc::Document *document); - void loadRequest (Document *document, bool _new); + void loadRequest (CSMDoc::Document *document, bool _new); void lastDocumentDeleted(); + + void loadingStopped (CSMDoc::Document *document, bool completed, + const std::string& error); }; } diff --git a/apps/opencs/model/doc/loader.cpp b/apps/opencs/model/doc/loader.cpp index 722e90364..53827deb0 100644 --- a/apps/opencs/model/doc/loader.cpp +++ b/apps/opencs/model/doc/loader.cpp @@ -46,7 +46,7 @@ void CSMDoc::Loader::load() } } -void CSMDoc::Loader::loadDocument (Document *document, bool new_) +void CSMDoc::Loader::loadDocument (CSMDoc::Document *document, bool new_) { mDocuments.push_back (std::make_pair (document, new_)); } diff --git a/apps/opencs/model/doc/loader.hpp b/apps/opencs/model/doc/loader.hpp index eae0c8001..af266d52b 100644 --- a/apps/opencs/model/doc/loader.hpp +++ b/apps/opencs/model/doc/loader.hpp @@ -31,7 +31,7 @@ namespace CSMDoc public slots: - void loadDocument (Document *document, bool new_); + void loadDocument (CSMDoc::Document *document, bool new_); ///< The ownership of \a document is not transferred. /// \param new_ Do not load the last content file in the files list specified in /// \a document and instead create it in an appropriate way. diff --git a/apps/opencs/view/doc/loader.cpp b/apps/opencs/view/doc/loader.cpp new file mode 100644 index 000000000..f840ab717 --- /dev/null +++ b/apps/opencs/view/doc/loader.cpp @@ -0,0 +1,44 @@ + +#include "loader.hpp" + +#include "../../model/doc/document.hpp" + +CSVDoc::LoadingDocument::LoadingDocument (CSMDoc::Document *document) +{ + setWindowTitle (("Loading " + document->getSavePath().filename().string()).c_str()); + show(); +} + + +CSVDoc::Loader::Loader() +{ + +} + +CSVDoc::Loader::~Loader() +{ + for (std::map::iterator iter (mDocuments.begin()); + iter!=mDocuments.end(); ++iter) + delete iter->second; +} + +void CSVDoc::Loader::add (CSMDoc::Document *document, bool new_) +{ + mDocuments.insert (std::make_pair (document, new LoadingDocument (document))); +} + +void CSVDoc::Loader::loadingStopped (CSMDoc::Document *document, bool completed, + const std::string& error) +{ + if (completed || error.empty()) + { + for (std::map::iterator iter (mDocuments.begin()); + iter!=mDocuments.end(); ++iter) + if (iter->first==document) + { + delete iter->second; + mDocuments.erase (iter); + break; + } + } +} \ No newline at end of file diff --git a/apps/opencs/view/doc/loader.hpp b/apps/opencs/view/doc/loader.hpp new file mode 100644 index 000000000..4aa497482 --- /dev/null +++ b/apps/opencs/view/doc/loader.hpp @@ -0,0 +1,46 @@ +#ifndef CSV_DOC_LOADER_H +#define CSV_DOC_LOADER_H + +#include + +#include +#include + +namespace CSMDoc +{ + class Document; +} + +namespace CSVDoc +{ + class LoadingDocument : public QWidget + { + Q_OBJECT + + public: + + LoadingDocument (CSMDoc::Document *document); + }; + + class Loader : public QObject + { + Q_OBJECT + + std::map mDocuments; + + public: + + Loader(); + + virtual ~Loader(); + + public slots: + + void add (CSMDoc::Document *document, bool new_); + + void loadingStopped (CSMDoc::Document *document, bool completed, + const std::string& error); + }; +} + +#endif diff --git a/apps/opencs/view/doc/viewmanager.cpp b/apps/opencs/view/doc/viewmanager.cpp index 4a4dbc124..3ca52c452 100644 --- a/apps/opencs/view/doc/viewmanager.cpp +++ b/apps/opencs/view/doc/viewmanager.cpp @@ -86,6 +86,13 @@ CSVDoc::ViewManager::ViewManager (CSMDoc::DocumentManager& documentManager) connect (&CSMSettings::UserSettings::instance(), SIGNAL (signalUpdateEditorSetting (const QString &, const QString &)), this, SLOT (slotUpdateEditorSetting (const QString &, const QString &))); + + connect (&mDocumentManager, SIGNAL (loadRequest (CSMDoc::Document *, bool)), + &mLoader, SLOT (add (CSMDoc::Document *, bool))); + + connect ( + &mDocumentManager, SIGNAL (loadingStopped (CSMDoc::Document *, bool, const std::string&)), + &mLoader, SLOT (loadingStopped (CSMDoc::Document *, bool, const std::string&))); } CSVDoc::ViewManager::~ViewManager() diff --git a/apps/opencs/view/doc/viewmanager.hpp b/apps/opencs/view/doc/viewmanager.hpp index 01f495186..cddc1b235 100644 --- a/apps/opencs/view/doc/viewmanager.hpp +++ b/apps/opencs/view/doc/viewmanager.hpp @@ -5,6 +5,8 @@ #include +#include "loader.hpp" + namespace CSMDoc { class Document; @@ -29,6 +31,7 @@ namespace CSVDoc CSVWorld::CommandDelegateFactoryCollection *mDelegateFactories; bool mExitOnSaveStateChange; bool mUserWarned; + Loader mLoader; // not implemented ViewManager (const ViewManager&);