Skip to content

Commit 3a4988e

Browse files
committed
Working on play mode
1 parent 36227b5 commit 3a4988e

File tree

8 files changed

+35
-24
lines changed

8 files changed

+35
-24
lines changed

src/Dataflow/Engine/Controller/NetworkEditorController.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ void NetworkEditorController::executeGeneric(const ExecutableLookup* lookup, Mod
372372
executionManager_.enqueueContext(context);
373373
}
374374

375-
ExecutionQueueManager::ExecutionQueueManager(ExecutionStrategyHandle& currentExecutor) : contexts_(1), currentExecutor_(currentExecutor),
375+
ExecutionQueueManager::ExecutionQueueManager(ExecutionStrategyHandle& currentExecutor) : contexts_(2), currentExecutor_(currentExecutor),
376376
executionLaunchThread_([this]() {executeTopContext(); } ),
377377
executionMutex_("executionQueue"),
378378
somethingToExecute_("executionQueue")

src/Dataflow/Network/Module.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,5 +700,11 @@ bool SCIRun::Dataflow::Networks::canReplaceWith(ModuleHandle module, const Modul
700700

701701
void Module::enqueueExecuteAgain()
702702
{
703-
std::cout << "TODO: Module needs to execute again" << std::endl;
703+
std::cout << "Module " << get_id() << " needs to execute again, signalling now" << std::endl;
704+
executionSelfRequested_();
705+
}
706+
707+
boost::signals2::connection Module::connectExecuteSelfRequest(const ExecutionSelfRequestSignalType::slot_type& subscriber)
708+
{
709+
return executionSelfRequested_.connect(subscriber);
704710
}

src/Dataflow/Network/Module.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ namespace Networks {
9797
virtual void setExecutionState(ExecutionState state);
9898
virtual boost::signals2::connection connectExecutionStateChanged(const ExecutionStateChangedSignalType::slot_type& subscriber);
9999

100+
virtual boost::signals2::connection connectExecuteSelfRequest(const ExecutionSelfRequestSignalType::slot_type& subscriber);
101+
100102
virtual void enqueueExecuteAgain();
101103

102104
private:
@@ -281,6 +283,7 @@ namespace Networks {
281283
boost::atomic<ExecutionState> executionState_;
282284
ExecutionStateChangedSignalType executionStateChanged_;
283285
std::vector<boost::shared_ptr<boost::signals2::scoped_connection>> portConnections_;
286+
ExecutionSelfRequestSignalType executionSelfRequested_;
284287

285288
ModuleReexecutionStrategyHandle reexecute_;
286289

src/Dataflow/Network/ModuleInterface.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ namespace Networks {
125125
virtual void setExecutionState(ExecutionState state) = 0;
126126
virtual boost::signals2::connection connectExecutionStateChanged(const ExecutionStateChangedSignalType::slot_type& subscriber) = 0;
127127

128+
typedef boost::signals2::signal<void()> ExecutionSelfRequestSignalType;
129+
virtual boost::signals2::connection connectExecuteSelfRequest(const ExecutionSelfRequestSignalType::slot_type& subscriber) = 0;
130+
128131
/// @todo for deserialization
129132
virtual void set_id(const std::string& id) = 0;
130133
virtual void set_state(ModuleStateHandle state) = 0;

src/Dataflow/Network/Tests/MockModule.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ namespace SCIRun {
8686
MOCK_CONST_METHOD0(getReexecutionStrategy, ModuleReexecutionStrategyHandle());
8787
MOCK_METHOD1(setReexecutionStrategy, void(ModuleReexecutionStrategyHandle));
8888
MOCK_METHOD0(enqueueExecuteAgain, void());
89+
MOCK_METHOD1(connectExecuteSelfRequest, boost::signals2::connection(const ExecutionSelfRequestSignalType::slot_type&));
8990
};
9091

9192
typedef boost::shared_ptr<MockModule> MockModulePtr;

src/ExampleNets/regression/playThroughMatrixSlices.srn5

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
<name>SliceIndex</name>
8080
<value>
8181
<which>0</which>
82-
<value>2</value>
82+
<value>0</value>
8383
</value>
8484
</second>
8585
</item>

src/Interface/Modules/Math/GetMatrixSliceDialog.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ GetMatrixSliceDialog::GetMatrixSliceDialog(const std::string& name, ModuleStateH
6262
pauseButton_->setIcon(QApplication::style()->standardIcon(QStyle::SP_MediaPause));
6363
connect(pauseButton_, SIGNAL(clicked()), this, SLOT(stopPlay()));
6464

65-
playButton_->setDisabled(true);
66-
pauseButton_->setDisabled(true);
65+
//playButton_->setDisabled(true);
66+
//pauseButton_->setDisabled(true);
6767
}
6868

6969
void GetMatrixSliceDialog::pull()
@@ -99,14 +99,13 @@ void GetMatrixSliceDialog::selectLastIndex()
9999

100100
void GetMatrixSliceDialog::startPlay()
101101
{
102-
std::cout << "play--needs requirements" << std::endl;
103-
state_->setValue(Parameters::PlayMode, true);
102+
//std::cout << "play--needs requirements" << std::endl;
103+
state_->setTransientValue(Parameters::PlayMode, 1);
104104
Q_EMIT executeActionTriggered();
105105
}
106106

107107
void GetMatrixSliceDialog::stopPlay()
108108
{
109109
std::cout << "pause--needs requirements" << std::endl;
110-
state_->setValue(Parameters::PlayMode, false);
111-
Q_EMIT executeActionTriggered();
110+
state_->setTransientValue(Parameters::PlayMode, 2);
112111
}

src/Modules/Math/GetMatrixSlice.cc

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,24 +60,23 @@ void GetMatrixSlice::execute()
6060
setAlgoIntFromState(Parameters::SliceIndex);
6161
auto output = algo().run(withInputData((InputMatrix, input)));
6262
sendOutputFromAlgorithm(OutputMatrix, output);
63-
get_state()->setValue(Parameters::MaxIndex, output.additionalAlgoOutput()->toInt());
63+
auto maxIndex = output.additionalAlgoOutput()->toInt();
64+
get_state()->setValue(Parameters::MaxIndex, maxIndex);
6465

65-
/*
66-
auto playMode = get_state()->getValue(Parameters::PlayMode).toBool();
67-
if (playMode)
66+
std::cout << "checking play mode" << std::endl;
67+
auto playMode = optional_any_cast_or_default<int>(get_state()->getTransientValue(Parameters::PlayMode));
68+
if (playMode == 1)
6869
{
70+
std::cout << "checking play mode: " << playMode << std::endl;
6971
auto nextIndex = algo().get(Parameters::SliceIndex).toInt() + 1;
70-
auto maxIndex = algo().get(Parameters::IsSliceColumn).toBool() && input ? input->ncols() : input->nrows();
71-
if (nextIndex >= maxIndex)
72-
{
73-
get_state()->setValue(Parameters::PlayMode, false);
74-
}
75-
else
76-
{
77-
get_state()->setValue(Parameters::SliceIndex, nextIndex);
78-
enqueueExecuteAgain();
79-
}
72+
std::cout << "setting index to " << nextIndex % (maxIndex + 1) << std::endl;
73+
get_state()->setValue(Parameters::SliceIndex, nextIndex % (maxIndex + 1));
74+
enqueueExecuteAgain();
75+
std::cout << "execute enqueued " << std::endl;
76+
}
77+
else if (playMode == 2)
78+
{
79+
std::cout << "execute paused" << std::endl;
8080
}
81-
*/
8281
}
8382
}

0 commit comments

Comments
 (0)