Moved ObjectStatusLocker template class to Base/Tools.h

This commit is contained in:
Eivind Kvedalen
2017-11-29 23:04:37 +01:00
committed by wmayer
parent b3db1deecb
commit 8b4adfa513
5 changed files with 20 additions and 17 deletions

View File

@@ -2189,7 +2189,7 @@ int Document::recompute()
if (skip)
return 0;
ObjectStatusLocker<Document::Status, Document> exe(Document::Recomputing, this);
Base::ObjectStatusLocker<Document::Status, Document> exe(Document::Recomputing, this);
// delete recompute log
for (auto LogEntry: _RecomputeLog)

View File

@@ -27,6 +27,7 @@
#endif
#include <Base/Writer.h>
#include <Base/Tools.h>
#include "Document.h"
#include "DocumentObject.h"
@@ -79,7 +80,7 @@ App::DocumentObjectExecReturn *DocumentObject::recompute(void)
return new App::DocumentObjectExecReturn("Links go out of the allowed scope", this);
// set/unset the execution bit
ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::Recompute, this);
Base::ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::Recompute, this);
return this->execute();
}

View File

@@ -300,19 +300,6 @@ private:
bool _isInOutListRecursive(const DocumentObject *act, const DocumentObject* test, const DocumentObject* checkObj, int depth) const;
};
template<typename Status, class Object>
class ObjectStatusLocker
{
public:
ObjectStatusLocker(Status s, Object* o) : status(s), obj(o)
{ obj->setStatus(status, true); }
~ObjectStatusLocker()
{ obj->setStatus(status, false); }
private:
Status status;
Object* obj;
};
} //namespace App
#endif // APP_DOCUMENTOBJECT_H

View File

@@ -30,6 +30,7 @@
#include <Base/Console.h>
#include <Base/Interpreter.h>
#include <Base/Reader.h>
#include <Base/Tools.h>
#include <App/DocumentObjectPy.h>
#include "FeaturePython.h"
@@ -63,7 +64,7 @@ bool FeaturePythonImp::execute()
Py::Object feature = static_cast<PropertyPythonObject*>(proxy)->getValue();
if (feature.hasAttr(std::string("execute"))) {
if (feature.hasAttr("__object__")) {
ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::PythonCall, object);
Base::ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::PythonCall, object);
Py::Callable method(feature.getAttr(std::string("execute")));
Py::Tuple args;
Py::Object res = method.apply(args);
@@ -72,7 +73,7 @@ bool FeaturePythonImp::execute()
return true;
}
else {
ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::PythonCall, object);
Base::ObjectStatusLocker<ObjectStatus, DocumentObject> exe(App::PythonCall, object);
Py::Callable method(feature.getAttr(std::string("execute")));
Py::Tuple args(1);
args.setItem(0, Py::Object(object->getPyObject(), true));

View File

@@ -146,6 +146,20 @@ private:
Private* d;
};
template<typename Status, class Object>
class BaseExport ObjectStatusLocker
{
public:
ObjectStatusLocker(Status s, Object* o, bool st = true) : status(s), obj(o), state(st)
{ obj->setStatus(status, state); }
~ObjectStatusLocker()
{ obj->setStatus(status, !state); }
private:
Status status;
Object* obj;
bool state;
};
// ----------------------------------------------------------------------------
struct BaseExport Tools