Spreadsheet: Refactor code and reuse visitors from ExpressionVisitors.h
This commit is contained in:
parent
1802d94a1a
commit
b74b3f3358
|
@ -49,32 +49,12 @@ using namespace Spreadsheet;
|
||||||
|
|
||||||
namespace Spreadsheet {
|
namespace Spreadsheet {
|
||||||
|
|
||||||
class RelabelDocumentObjectExpressionVisitor : public ExpressionVisitor {
|
class BuildDocDepsExpressionVisitor : public ExpressionModifier<PropertySheet> {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RelabelDocumentObjectExpressionVisitor(const std::string & _oldName, const std::string & _newName)
|
BuildDocDepsExpressionVisitor(PropertySheet & prop, std::set<App::DocumentObject*> & _docDeps)
|
||||||
: oldName(_oldName)
|
: ExpressionModifier(prop)
|
||||||
, newName(_newName)
|
, docDeps(_docDeps)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void visit(Expression * node) {
|
|
||||||
VariableExpression *expr = freecad_dynamic_cast<VariableExpression>(node);
|
|
||||||
|
|
||||||
if (expr)
|
|
||||||
expr->renameDocumentObject(oldName, newName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string oldName;
|
|
||||||
std::string newName;
|
|
||||||
};
|
|
||||||
|
|
||||||
class BuildDocDepsExpressionVisitor : public ExpressionVisitor {
|
|
||||||
public:
|
|
||||||
|
|
||||||
BuildDocDepsExpressionVisitor(std::set<App::DocumentObject*> & _docDeps)
|
|
||||||
: docDeps(_docDeps)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -87,8 +67,10 @@ public:
|
||||||
const App::Property * prop = expr->getProperty();
|
const App::Property * prop = expr->getProperty();
|
||||||
App::DocumentObject * docObj = freecad_dynamic_cast<App::DocumentObject>(prop->getContainer());
|
App::DocumentObject * docObj = freecad_dynamic_cast<App::DocumentObject>(prop->getContainer());
|
||||||
|
|
||||||
if (docObj)
|
if (docObj) {
|
||||||
|
setExpressionChanged();
|
||||||
docDeps.insert(docObj);
|
docDeps.insert(docObj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const Base::Exception &) {
|
catch (const Base::Exception &) {
|
||||||
// Ignore this type of exception; it means that the property was not found, which is ok here
|
// Ignore this type of exception; it means that the property was not found, which is ok here
|
||||||
|
@ -100,27 +82,6 @@ private:
|
||||||
std::set<App::DocumentObject*> & docDeps;
|
std::set<App::DocumentObject*> & docDeps;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RelabelDocumentExpressionVisitor : public ExpressionVisitor {
|
|
||||||
public:
|
|
||||||
|
|
||||||
RelabelDocumentExpressionVisitor(const std::string & _oldName, const std::string & _newName)
|
|
||||||
: oldName(_oldName)
|
|
||||||
, newName(_newName)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void visit(Expression * node) {
|
|
||||||
VariableExpression *expr = freecad_dynamic_cast<VariableExpression>(node);
|
|
||||||
|
|
||||||
if (expr)
|
|
||||||
expr->renameDocument(oldName, newName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string oldName;
|
|
||||||
std::string newName;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TYPESYSTEM_SOURCE(Spreadsheet::PropertySheet , App::Property);
|
TYPESYSTEM_SOURCE(Spreadsheet::PropertySheet , App::Property);
|
||||||
|
@ -1130,7 +1091,7 @@ void PropertySheet::renamedDocumentObject(const App::DocumentObject * docObj)
|
||||||
std::map<CellAddress, Cell* >::iterator i = data.begin();
|
std::map<CellAddress, Cell* >::iterator i = data.begin();
|
||||||
|
|
||||||
AtomicPropertyChange signaller(*this);
|
AtomicPropertyChange signaller(*this);
|
||||||
RelabelDocumentObjectExpressionVisitor v(documentObjectName[docObj], docObj->Label.getValue());
|
RelabelDocumentObjectExpressionVisitor<PropertySheet> v(*this, documentObjectName[docObj], docObj->Label.getValue());
|
||||||
|
|
||||||
while (i != data.end()) {
|
while (i != data.end()) {
|
||||||
i->second->visit(v);
|
i->second->visit(v);
|
||||||
|
@ -1151,7 +1112,7 @@ void PropertySheet::renamedDocument(const App::Document * doc)
|
||||||
|
|
||||||
/* Resolve all cells */
|
/* Resolve all cells */
|
||||||
AtomicPropertyChange signaller(*this);
|
AtomicPropertyChange signaller(*this);
|
||||||
RelabelDocumentExpressionVisitor v(documentName[doc], doc->Label.getValue());
|
RelabelDocumentExpressionVisitor<PropertySheet> v(*this, documentName[doc], doc->Label.getValue());
|
||||||
|
|
||||||
while (i != data.end()) {
|
while (i != data.end()) {
|
||||||
i->second->visit(v);
|
i->second->visit(v);
|
||||||
|
@ -1240,7 +1201,7 @@ void PropertySheet::rebuildDocDepList()
|
||||||
AtomicPropertyChange signaller(*this);
|
AtomicPropertyChange signaller(*this);
|
||||||
|
|
||||||
docDeps.clear();
|
docDeps.clear();
|
||||||
BuildDocDepsExpressionVisitor v(docDeps);
|
BuildDocDepsExpressionVisitor v(*this, docDeps);
|
||||||
|
|
||||||
std::map<CellAddress, Cell* >::iterator i = data.begin();
|
std::map<CellAddress, Cell* >::iterator i = data.begin();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user