Moved ObjectStatusLocker template class to Base/Tools.h
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user