Skip to content

Commit ae56c0a

Browse files
committed
Working on py-undo
1 parent 598facb commit ae56c0a

File tree

7 files changed

+68
-34
lines changed

7 files changed

+68
-34
lines changed

src/Dataflow/Engine/Controller/ProvenanceItemImpl.cc

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@
3131
#include <string>
3232
#include <sstream>
3333
#include <Dataflow/Engine/Controller/ProvenanceItemImpl.h>
34+
#include <Dataflow/Engine/Python/NetworkEditorPythonInterface.h>
3435
#include <Core/Logging/Log.h>
3536
#include <spdlog/fmt/fmt.h>
3637

3738
using namespace SCIRun;
3839
using namespace SCIRun::Dataflow::Engine;
3940
using namespace SCIRun::Dataflow::Networks;
4041

41-
ProvenanceItemBase::ProvenanceItemBase(NetworkFileHandle state) : state_(state)
42+
ProvenanceItemBase::ProvenanceItemBase(NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy) : state_(state), nedPy_(nedPy)
4243
{
4344
}
4445

@@ -47,8 +48,8 @@ NetworkFileHandle ProvenanceItemBase::memento() const
4748
return state_;
4849
}
4950

50-
ModuleAddedProvenanceItem::ModuleAddedProvenanceItem(const std::string& moduleName, const std::string& modId, NetworkFileHandle state)
51-
: ProvenanceItemBase(state), moduleName_(moduleName), moduleId_(modId)
51+
ModuleAddedProvenanceItem::ModuleAddedProvenanceItem(const std::string& moduleName, const std::string& modId, NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy)
52+
: ProvenanceItemBase(state, nedPy), moduleName_(moduleName), moduleId_(modId)
5253
{
5354
}
5455

@@ -62,7 +63,7 @@ std::string ModuleAddedProvenanceItem::undoCode() const
6263
if (redone_)
6364
{
6465
logCritical("here is where i need to pull the most recently added id");
65-
moduleId_ = "TODO";
66+
moduleId_ = nedPy_->mostRecentAddModuleId();
6667
}
6768
return fmt::format("scirun_remove_module(\"{}\")", moduleId_);
6869
}
@@ -73,8 +74,8 @@ std::string ModuleAddedProvenanceItem::redoCode() const
7374
return fmt::format("scirun_add_module(\"{}\")", moduleName_);
7475
}
7576

76-
ModuleRemovedProvenanceItem::ModuleRemovedProvenanceItem(const ModuleId& moduleId, NetworkFileHandle state)
77-
: ProvenanceItemBase(state), moduleId_(moduleId)
77+
ModuleRemovedProvenanceItem::ModuleRemovedProvenanceItem(const ModuleId& moduleId, NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy)
78+
: ProvenanceItemBase(state, nedPy), moduleId_(moduleId)
7879
{
7980
}
8081

@@ -83,8 +84,24 @@ std::string ModuleRemovedProvenanceItem::name() const
8384
return "Module Removed: " + moduleId_.id_;
8485
}
8586

86-
ConnectionAddedProvenanceItem::ConnectionAddedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionDescription& cd, NetworkFileHandle state)
87-
: ProvenanceItemBase(state), desc_(cd)
87+
std::string ModuleRemovedProvenanceItem::undoCode() const
88+
{
89+
redone_ = true;
90+
return fmt::format("scirun_add_module(\"{}\")", moduleId_.name_);
91+
}
92+
93+
std::string ModuleRemovedProvenanceItem::redoCode() const
94+
{
95+
if (redone_)
96+
{
97+
//logCritical("here is where i need to pull the most recently added id");
98+
//moduleId_ = nedPy_->mostRecentAddModuleId();
99+
}
100+
return fmt::format("scirun_remove_module(\"{}\")", moduleId_.id_);
101+
}
102+
103+
ConnectionAddedProvenanceItem::ConnectionAddedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionDescription& cd, NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy)
104+
: ProvenanceItemBase(state, nedPy), desc_(cd)
88105
{
89106
}
90107

@@ -93,8 +110,8 @@ std::string ConnectionAddedProvenanceItem::name() const
93110
return "Connection added: " + ConnectionId::create(desc_).id_;
94111
}
95112

96-
ConnectionRemovedProvenanceItem::ConnectionRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionId& id, NetworkFileHandle state)
97-
: ProvenanceItemBase(state), id_(id)
113+
ConnectionRemovedProvenanceItem::ConnectionRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionId& id, NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy)
114+
: ProvenanceItemBase(state, nedPy), id_(id)
98115
{
99116
}
100117

@@ -103,8 +120,8 @@ std::string ConnectionRemovedProvenanceItem::name() const
103120
return "Connection Removed: " + id_.id_;
104121
}
105122

106-
ModuleMovedProvenanceItem::ModuleMovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, double newX, double newY, NetworkFileHandle state)
107-
: ProvenanceItemBase(state), moduleId_(moduleId), newX_(newX), newY_(newY)
123+
ModuleMovedProvenanceItem::ModuleMovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, double newX, double newY, NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy)
124+
: ProvenanceItemBase(state, nedPy), moduleId_(moduleId), newX_(newX), newY_(newY)
108125
{
109126
}
110127

src/Dataflow/Engine/Controller/ProvenanceItemImpl.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,24 @@
3737
#include <Dataflow/Engine/Controller/share.h>
3838

3939
namespace SCIRun {
40+
class NetworkEditorPythonInterface;
4041
namespace Dataflow {
4142
namespace Engine {
4243

4344
class SCISHARE ProvenanceItemBase : public ProvenanceItem<Networks::NetworkFileHandle>
4445
{
4546
public:
46-
explicit ProvenanceItemBase(Networks::NetworkFileHandle state);
47+
explicit ProvenanceItemBase(Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
4748
Networks::NetworkFileHandle memento() const override;
48-
std::string undoCode() const override { throw "not implemented"; }
49-
std::string redoCode() const override { throw "not implemented"; }
5049
protected:
5150
Networks::NetworkFileHandle state_;
51+
SharedPointer<NetworkEditorPythonInterface> nedPy_;
5252
};
5353

5454
class SCISHARE ModuleAddedProvenanceItem : public ProvenanceItemBase
5555
{
5656
public:
57-
ModuleAddedProvenanceItem(const std::string& moduleName, const std::string& modId, Networks::NetworkFileHandle state);
57+
ModuleAddedProvenanceItem(const std::string& moduleName, const std::string& modId, Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
5858
std::string name() const override;
5959
std::string undoCode() const override;
6060
std::string redoCode() const override;
@@ -67,35 +67,44 @@ namespace Engine {
6767
class SCISHARE ModuleRemovedProvenanceItem : public ProvenanceItemBase
6868
{
6969
public:
70-
ModuleRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, Networks::NetworkFileHandle state);
70+
ModuleRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
7171
std::string name() const override;
72+
std::string undoCode() const override;
73+
std::string redoCode() const override;
7274
private:
7375
SCIRun::Dataflow::Networks::ModuleId moduleId_;
76+
mutable bool redone_ {false};
7477
};
7578

7679
class SCISHARE ConnectionAddedProvenanceItem : public ProvenanceItemBase
7780
{
7881
public:
79-
ConnectionAddedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionDescription& cd, Networks::NetworkFileHandle state);
82+
ConnectionAddedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionDescription& cd, Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
8083
std::string name() const override;
84+
std::string undoCode() const override { throw "not implemented"; }
85+
std::string redoCode() const override { throw "not implemented"; }
8186
private:
8287
SCIRun::Dataflow::Networks::ConnectionDescription desc_;
8388
};
8489

8590
class SCISHARE ConnectionRemovedProvenanceItem : public ProvenanceItemBase
8691
{
8792
public:
88-
ConnectionRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionId& id, Networks::NetworkFileHandle state);
93+
ConnectionRemovedProvenanceItem(const SCIRun::Dataflow::Networks::ConnectionId& id, Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
8994
std::string name() const override;
95+
std::string undoCode() const override { throw "not implemented"; }
96+
std::string redoCode() const override { throw "not implemented"; }
9097
private:
9198
SCIRun::Dataflow::Networks::ConnectionId id_;
9299
};
93100

94101
class SCISHARE ModuleMovedProvenanceItem : public ProvenanceItemBase
95102
{
96103
public:
97-
ModuleMovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, double newX, double newY, Networks::NetworkFileHandle state);
104+
ModuleMovedProvenanceItem(const SCIRun::Dataflow::Networks::ModuleId& moduleId, double newX, double newY, Networks::NetworkFileHandle state, SharedPointer<NetworkEditorPythonInterface> nedPy);
98105
std::string name() const override;
106+
std::string undoCode() const override { throw "not implemented"; }
107+
std::string redoCode() const override { throw "not implemented"; }
99108
private:
100109
SCIRun::Dataflow::Networks::ModuleId moduleId_;
101110
double newX_, newY_;

src/Dataflow/Engine/Controller/PythonImpl.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,10 +533,10 @@ SharedPointer<PyModule> PythonImpl::addModule(const std::string& name)
533533
else
534534
logWarning("Module add failed, no such module type ({})", name);
535535

536-
logCritical("here i have the most recent added id: {}", m->id().id_);
537-
mostRecentAddModuleId_ = m->id().id_;
536+
mostRecentAddModuleId_ = m->id().id_;
537+
logCritical("here i have the most recent added id: {}", mostRecentAddModuleId_);
538538

539-
return modules_[m->id().id_];
539+
return modules_[mostRecentAddModuleId_];
540540
}
541541

542542
void PythonImpl::pythonModuleAddedSlot(const std::string&, ModuleHandle m, ModuleCounter)

src/Dataflow/Engine/Python/NetworkEditorPythonAPI.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ void NetworkEditorPythonAPI::setImpl(SharedPointer<NetworkEditorPythonInterface>
8080
}
8181
}
8282

83+
SharedPointer<NetworkEditorPythonInterface> NetworkEditorPythonAPI::getImpl()
84+
{
85+
return impl_;
86+
}
87+
8388
void NetworkEditorPythonAPI::clearImpl()
8489
{
8590
impl_.reset();

src/Dataflow/Engine/Python/NetworkEditorPythonAPI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ namespace SCIRun {
8585
static std::string quit(bool force);
8686

8787
static void setImpl(SharedPointer<NetworkEditorPythonInterface> impl);
88+
static SharedPointer<NetworkEditorPythonInterface> getImpl();
8889
static void clearImpl();
8990
/// @todo: smelly!
9091
static void setExecutionContext(Dataflow::Networks::ExecutableLookup* lookup);

src/Interface/Application/NetworkEditor.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,8 @@ ModuleProxyWidget* NetworkEditor::setupModuleWidget(ModuleWidget* module)
474474
auto modId = module->getModule()->id().id_;
475475
module->getModule()->get_state()->connectProvenanceStateChanged([modId](const Name& n, const AlgorithmParameter::Value& oldV, const AlgorithmParameter::Value& newV)
476476
{
477-
logCritical("UNDO CODE: scirun_set_module_state(\"{}\", \"{}\", {})", modId, n.name(), to_string(oldV));
478-
logCritical("REDO CODE: scirun_set_module_state(\"{}\", \"{}\", {})", modId, n.name(), to_string(newV));
477+
LOG_TRACE("UNDO CODE: scirun_set_module_state(\"{}\", \"{}\", {})", modId, n.name(), to_string(oldV));
478+
LOG_TRACE("REDO CODE: scirun_set_module_state(\"{}\", \"{}\", {})", modId, n.name(), to_string(newV));
479479
});
480480

481481
connect(this, &NetworkEditor::networkExecuted, module, &ModuleWidget::resetLogButtonColor);

src/Interface/Application/ProvenanceWindow.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
//TODO: factory
3838
#include <Dataflow/Engine/Controller/ProvenanceItemImpl.h>
3939

40+
#ifdef BUILD_WITH_PYTHON
41+
#include <Dataflow/Engine/Python/NetworkEditorPythonAPI.h>
42+
#endif
43+
4044
using namespace SCIRun::Gui;
4145
using namespace SCIRun::Dataflow::Networks;
4246
using namespace SCIRun::Dataflow::Engine;
@@ -305,7 +309,7 @@ void GuiActionProvenanceConverter::moduleAdded(const std::string& name, SCIRun::
305309
{
306310
if (!provenanceManagerModifyingNetwork_)
307311
{
308-
ProvenanceItemHandle item(makeShared<ModuleAddedProvenanceItem>(name, mod->id().id_, editor_->saveNetwork()));
312+
ProvenanceItemHandle item(makeShared<ModuleAddedProvenanceItem>(name, mod->id().id_, editor_->saveNetwork(), NetworkEditorPythonAPI::getImpl()));
309313
Q_EMIT provenanceItemCreated(item);
310314
}
311315
}
@@ -314,9 +318,7 @@ void GuiActionProvenanceConverter::moduleRemoved(const ModuleId& id)
314318
{
315319
if (!provenanceManagerModifyingNetwork_)
316320
{
317-
ProvenanceItemHandle item(makeShared<ModuleRemovedProvenanceItem>(id, editor_->saveNetwork()));
318-
logCritical("REDO CODE: scirun_remove_module(\"{}\")", id.id_);
319-
logCritical("UNDO CODE: scirun_add_module(\"{}\")", id.name_);
321+
ProvenanceItemHandle item(makeShared<ModuleRemovedProvenanceItem>(id, editor_->saveNetwork(), NetworkEditorPythonAPI::getImpl()));
320322
Q_EMIT provenanceItemCreated(item);
321323
}
322324
}
@@ -325,9 +327,9 @@ void GuiActionProvenanceConverter::connectionAdded(const SCIRun::Dataflow::Netwo
325327
{
326328
if (!provenanceManagerModifyingNetwork_)
327329
{
328-
ProvenanceItemHandle item(makeShared<ConnectionAddedProvenanceItem>(cd, editor_->saveNetwork()));
329-
logCritical("REDO CODE: scirun_add_connection(\"{}\")", ConnectionId::create(cd).id_);
330-
logCritical("UNDO CODE: scirun_remove_connection(\"{}\")", ConnectionId::create(cd).id_);
330+
ProvenanceItemHandle item(makeShared<ConnectionAddedProvenanceItem>(cd, editor_->saveNetwork(), NetworkEditorPythonAPI::getImpl()));
331+
LOG_TRACE("REDO CODE: scirun_add_connection(\"{}\")", ConnectionId::create(cd).id_);
332+
LOG_TRACE("UNDO CODE: scirun_remove_connection(\"{}\")", ConnectionId::create(cd).id_);
331333
Q_EMIT provenanceItemCreated(item);
332334
}
333335
}
@@ -336,7 +338,7 @@ void GuiActionProvenanceConverter::connectionRemoved(const SCIRun::Dataflow::Net
336338
{
337339
if (!provenanceManagerModifyingNetwork_)
338340
{
339-
ProvenanceItemHandle item(makeShared<ConnectionRemovedProvenanceItem>(id, editor_->saveNetwork()));
341+
ProvenanceItemHandle item(makeShared<ConnectionRemovedProvenanceItem>(id, editor_->saveNetwork(), NetworkEditorPythonAPI::getImpl()));
340342
logCritical("REDO CODE: scirun_remove_connection(\"{}\")", id.id_);
341343
logCritical("UNDO CODE: scirun_add_connection(\"{}\")", id.id_);
342344
Q_EMIT provenanceItemCreated(item);
@@ -347,7 +349,7 @@ void GuiActionProvenanceConverter::moduleMoved(const SCIRun::Dataflow::Networks:
347349
{
348350
if (!provenanceManagerModifyingNetwork_)
349351
{
350-
ProvenanceItemHandle item(makeShared<ModuleMovedProvenanceItem>(id, newX, newY, editor_->saveNetwork()));
352+
ProvenanceItemHandle item(makeShared<ModuleMovedProvenanceItem>(id, newX, newY, editor_->saveNetwork(), NetworkEditorPythonAPI::getImpl()));
351353
logCritical("REDO CODE: scirun_move_module(\"{}\", {}, {})", id.id_, newX, newY);
352354
logCritical("UNDO CODE: scirun_move_module(\"{}\", {}, {})", id.id_, oldPos.x(), oldPos.y());
353355
Q_EMIT provenanceItemCreated(item);

0 commit comments

Comments
 (0)