1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-30 04:45:33 +00:00

moved load code from Document to Loader class

This commit is contained in:
Marc Zinnschlag 2014-05-03 12:07:05 +02:00
parent ab94e70724
commit e09218f164
4 changed files with 50 additions and 45 deletions

View file

@ -8,23 +8,6 @@
#include <components/files/configurationmanager.hpp>
#endif
void CSMDoc::Document::load (const std::vector<boost::filesystem::path>::const_iterator& begin,
const std::vector<boost::filesystem::path>::const_iterator& end, bool lastAsModified)
{
assert (begin!=end);
std::vector<boost::filesystem::path>::const_iterator end2 (end);
if (lastAsModified)
--end2;
for (std::vector<boost::filesystem::path>::const_iterator iter (begin); iter!=end2; ++iter)
getData().loadFile (*iter, true, false);
if (lastAsModified)
getData().loadFile (*end2, false, false);
}
void CSMDoc::Document::addGmsts()
{
static const char *gmstFloats[] =
@ -2272,21 +2255,6 @@ CSMDoc::Document::~Document()
{
}
void CSMDoc::Document::setupData()
{
if (!mNew || mContentFiles.size()>1)
{
std::vector<boost::filesystem::path>::const_iterator end = mContentFiles.end();
if (mNew)
--end;
load (mContentFiles.begin(), end, !mNew);
}
getData().loadFile (mProjectPath, false, true);
}
QUndoStack& CSMDoc::Document::getUndoStack()
{
return mUndoStack;
@ -2313,6 +2281,11 @@ const boost::filesystem::path& CSMDoc::Document::getSavePath() const
return mSavePath;
}
const boost::filesystem::path& CSMDoc::Document::getProjectPath() const
{
return mProjectPath;
}
const std::vector<boost::filesystem::path>& CSMDoc::Document::getContentFiles() const
{
return mContentFiles;

View file

@ -54,10 +54,6 @@ namespace CSMDoc
Document (const Document&);
Document& operator= (const Document&);
void load (const std::vector<boost::filesystem::path>::const_iterator& begin,
const std::vector<boost::filesystem::path>::const_iterator& end, bool lastAsModified);
///< \param lastAsModified Store the last file in Modified instead of merging it into Base.
void createBase();
void addGmsts();
@ -78,14 +74,14 @@ namespace CSMDoc
~Document();
void setupData();
QUndoStack& getUndoStack();
int getState() const;
const boost::filesystem::path& getSavePath() const;
const boost::filesystem::path& getProjectPath() const;
const std::vector<boost::filesystem::path>& getContentFiles() const;
///< \attention The last element in this collection is the file that is being edited,
/// but with its original path instead of the save path.

View file

@ -5,6 +5,9 @@
#include "document.hpp"
CSMDoc::Loader::Stage::Stage() : mFile (0) {}
CSMDoc::Loader::Loader()
{
QTimer *timer = new QTimer (this);
@ -28,31 +31,57 @@ void CSMDoc::Loader::load()
return;
}
std::vector<std::pair<Document *, bool> >::iterator iter = mDocuments.begin();
std::vector<std::pair<Document *, Stage> >::iterator iter = mDocuments.begin();
Document *document = iter->first;
mDocuments.erase (iter);
int size = static_cast<int> (document->getContentFiles().size());
if (document->isNew())
--size;
bool done = false;
try
{
document->setupData();
emit documentLoaded (document);
if (iter->second.mFile<size)
{
document->getData().loadFile (document->getContentFiles()[iter->second.mFile],
iter->second.mFile<size-1, false);
}
else if (iter->second.mFile==size)
{
document->getData().loadFile (document->getProjectPath(), false, true);
}
else
{
done = true;
}
++(iter->second.mFile);
}
catch (const std::exception& e)
{
mDocuments.erase (iter);
emit documentNotLoaded (document, e.what());
return;
}
if (done)
{
mDocuments.erase (iter);
emit documentLoaded (document);
}
}
void CSMDoc::Loader::loadDocument (CSMDoc::Document *document)
{
mDocuments.push_back (std::make_pair (document, false));
mDocuments.push_back (std::make_pair (document, Stage()));
}
void CSMDoc::Loader::abortLoading (Document *document)
{
for (std::vector<std::pair<Document *, bool> >::iterator iter = mDocuments.begin();
for (std::vector<std::pair<Document *, Stage> >::iterator iter = mDocuments.begin();
iter!=mDocuments.end(); ++iter)
{
if (iter->first==document)

View file

@ -15,9 +15,16 @@ namespace CSMDoc
{
Q_OBJECT
struct Stage
{
int mFile;
Stage();
};
QMutex mMutex;
QWaitCondition mThingsToDo;
std::vector<std::pair<Document *, bool> > mDocuments;
std::vector<std::pair<Document *, Stage> > mDocuments;
public: