Skip to content

Commit 71fdc0c

Browse files
committed
Break out SubnetModule, make connections
1 parent 6606cec commit 71fdc0c

File tree

3 files changed

+108
-44
lines changed

3 files changed

+108
-44
lines changed

src/Interface/Application/NetworkEditor.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,6 @@ namespace Gui {
324324
void removeSubnetChild(const QString& name);
325325

326326
Q_SIGNALS:
327-
void addConnection(const SCIRun::Dataflow::Networks::ConnectionDescription&);
328327
void connectionDeleted(const SCIRun::Dataflow::Networks::ConnectionId& id);
329328
void modified();
330329
void networkExecuted();

src/Interface/Application/Subnetworks.cc

Lines changed: 66 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ void NetworkEditor::setupPortHolders(ModuleHandle mod)
311311
setupPortHolder(upcast_range<PortDescriptionInterface>(mod->inputPorts()), "Inputs", topSubnetPortHolderPositioner_);
312312
setupPortHolder(upcast_range<PortDescriptionInterface>(mod->outputPorts()), "Outputs", bottomSubnetPortHolderPositioner_);
313313
portRewiringMap_.clear();
314+
boost::dynamic_pointer_cast<SubnetModule>(mod)->setSubnet(this);
314315
}
315316

316317
void NetworkEditor::clearSiblingSelections()
@@ -369,52 +370,44 @@ void NetworkEditor::initializeSubnet(const QString& name, ModuleHandle mod, Netw
369370
childrenNetworks_[name] = dock;
370371
}
371372

372-
class SubnetModule : public Module
373+
SubnetModule::SubnetModule(const std::vector<ModuleHandle>& underlyingModules, const QList<QGraphicsItem*>& items,
374+
NetworkEditor* parent) : Module(ModuleLookupInfo()),
375+
underlyingModules_(underlyingModules), items_(items), connector_(parent)
373376
{
374-
public:
375-
SubnetModule(const std::vector<ModuleHandle>& underlyingModules, const QList<QGraphicsItem*>& items) : Module(ModuleLookupInfo()),
376-
underlyingModules_(underlyingModules), items_(items)
377-
{
378-
set_id("Subnet:" + boost::lexical_cast<std::string>(subnetCount_));
379-
subnetCount_++;
380-
}
381-
382-
void execute() override
383-
{
384-
}
377+
set_id("Subnet:" + boost::lexical_cast<std::string>(subnetCount_));
378+
subnetCount_++;
379+
connector_.setModule(this);
380+
}
385381

386-
static const AlgorithmParameterName ModuleInfo;
382+
void SubnetModule::execute()
383+
{
384+
}
387385

388-
void setStateDefaults() override
389-
{
390-
auto state = get_state();
386+
void SubnetModule::setStateDefaults()
387+
{
388+
auto state = get_state();
391389

392-
auto table = makeHomogeneousVariableList(
393-
[this](size_t i)
394-
{
395-
return makeAnonymousVariableList(underlyingModules_[i]->get_id().id_,
396-
std::string("Push me"),
397-
boost::lexical_cast<std::string>(underlyingModules_[i]->num_input_ports()),
398-
boost::lexical_cast<std::string>(underlyingModules_[i]->num_output_ports()));
399-
},
400-
underlyingModules_.size());
401-
402-
state->setValue(ModuleInfo, table);
403-
}
390+
auto table = makeHomogeneousVariableList(
391+
[this](size_t i)
392+
{
393+
return makeAnonymousVariableList(underlyingModules_[i]->get_id().id_,
394+
std::string("Push me"),
395+
boost::lexical_cast<std::string>(underlyingModules_[i]->num_input_ports()),
396+
boost::lexical_cast<std::string>(underlyingModules_[i]->num_output_ports()));
397+
},
398+
underlyingModules_.size());
399+
400+
state->setValue(ModuleInfo, table);
401+
}
404402

405-
std::string listComponentIds() const
406-
{
407-
std::ostringstream ostr;
408-
std::transform(underlyingModules_.begin(), underlyingModules_.end(),
409-
std::ostream_iterator<std::string>(ostr, ", "),
410-
[](const ModuleHandle& mod) { return mod->get_id(); });
411-
return ostr.str();
412-
}
413-
private:
414-
std::vector<ModuleHandle> underlyingModules_;
415-
QList<QGraphicsItem*> items_;
416-
static int subnetCount_;
417-
};
403+
std::string SubnetModule::listComponentIds() const
404+
{
405+
std::ostringstream ostr;
406+
std::transform(underlyingModules_.begin(), underlyingModules_.end(),
407+
std::ostream_iterator<std::string>(ostr, ", "),
408+
[](const ModuleHandle& mod) { return mod->get_id(); });
409+
return ostr.str();
410+
}
418411

419412
int SubnetModule::subnetCount_(0);
420413
const AlgorithmParameterName SubnetModule::ModuleInfo("ModuleInfo");
@@ -516,6 +509,7 @@ void NetworkEditor::makeSubnetwork()
516509
class SubnetModuleFactory : public Modules::Factory::HardCodedModuleFactory
517510
{
518511
public:
512+
explicit SubnetModuleFactory(NetworkEditor* parent) : parent_(parent) {}
519513
ModuleHandle makeSubnet(const QString& name, const std::vector<ModuleHandle>& modules, QList<QGraphicsItem*> items) const
520514
{
521515
ModuleDescription desc;
@@ -571,7 +565,7 @@ class SubnetModuleFactory : public Modules::Factory::HardCodedModuleFactory
571565
}
572566
}
573567

574-
desc.maker_ = [&modules, items]() { return new SubnetModule(modules, items); };
568+
desc.maker_ = [&modules, items, this]() { return new SubnetModule(modules, items, parent_); };
575569

576570
auto mod = create(desc);
577571

@@ -586,14 +580,15 @@ class SubnetModuleFactory : public Modules::Factory::HardCodedModuleFactory
586580
}
587581
private:
588582
mutable PortRewiringMap map_;
583+
NetworkEditor* parent_;
589584
};
590585

591586
void NetworkEditor::makeSubnetworkFromComponents(const QString& name, const std::vector<ModuleHandle>& modules,
592587
QList<QGraphicsItem*> items, const QRectF& rect)
593588
{
594589
currentSubnetNames_.insert(name);
595590

596-
SubnetModuleFactory factory;
591+
SubnetModuleFactory factory(this);
597592
auto subnetModule = factory.makeSubnet(name, modules, items);
598593
portRewiringMap_ = factory.getMap();
599594

@@ -776,3 +771,31 @@ void NetworkEditor::resizeEvent(QResizeEvent *event)
776771

777772
QGraphicsView::resizeEvent(event);
778773
}
774+
775+
SubnetModuleConnector::SubnetModuleConnector(NetworkEditor* parent) :
776+
parent_(parent), subnet_(nullptr)
777+
{
778+
connect(parent, SIGNAL(connectionDeleted(const SCIRun::Dataflow::Networks::ConnectionId&)),
779+
this, SLOT(connectionDeletedFromParent()));
780+
}
781+
782+
void SubnetModuleConnector::setSubnet(NetworkEditor* subnet)
783+
{
784+
subnet_ = subnet;
785+
786+
connect(subnet_->getNetworkEditorController().get(), SIGNAL(moduleAdded(const std::string&, SCIRun::Dataflow::Networks::ModuleHandle, const SCIRun::Dataflow::Engine::ModuleCounter&)),
787+
this, SLOT(moduleAddedToSubnet(const std::string&, SCIRun::Dataflow::Networks::ModuleHandle)));
788+
}
789+
790+
void SubnetModuleConnector::moduleAddedToSubnet(const std::string& s, ModuleHandle module)
791+
{
792+
qDebug() << __FUNCTION__;
793+
qDebug() << "was:" << module_->underlyingModules_.size();
794+
module_->underlyingModules_.push_back(module);
795+
qDebug() << "now:" << module_->underlyingModules_.size() << "added" << s.c_str();
796+
}
797+
798+
void SubnetModuleConnector::connectionDeletedFromParent()
799+
{
800+
qDebug() << __FUNCTION__;
801+
}

src/Interface/Application/Subnetworks.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030
#define INTERFACE_APPLICATION_SUBNETWORKS_H
3131

3232
#include "ui_SubnetEditor.h"
33+
#ifndef Q_MOC_RUN
3334
#include <Dataflow/Network/ModuleDescription.h>
35+
#include <Dataflow/Network/Module.h>
36+
#endif
3437
#include <QDockWidget>
3538

3639
namespace SCIRun
@@ -55,6 +58,45 @@ namespace SCIRun
5558
QString name_;
5659
SCIRun::Dataflow::Networks::ModuleId subnetModuleId_;
5760
};
61+
62+
class SubnetModule;
63+
64+
class SubnetModuleConnector : public QObject
65+
{
66+
Q_OBJECT
67+
public:
68+
explicit SubnetModuleConnector(NetworkEditor* parent);
69+
void setSubnet(NetworkEditor* subnet);
70+
void setModule(SubnetModule* module) { module_ = module; }
71+
public Q_SLOTS:
72+
void moduleAddedToSubnet(const std::string&, SCIRun::Dataflow::Networks::ModuleHandle module);
73+
void connectionDeletedFromParent();
74+
private:
75+
NetworkEditor* parent_;
76+
NetworkEditor* subnet_;
77+
SubnetModule* module_;
78+
};
79+
80+
class SubnetModule : public Dataflow::Networks::Module
81+
{
82+
public:
83+
SubnetModule(const std::vector<Dataflow::Networks::ModuleHandle>& underlyingModules, const QList<QGraphicsItem*>& items, NetworkEditor* parent);
84+
85+
void execute() override;
86+
87+
static const Core::Algorithms::AlgorithmParameterName ModuleInfo;
88+
89+
void setStateDefaults() override;
90+
91+
std::string listComponentIds() const;
92+
void setSubnet(NetworkEditor* subnet) { connector_.setSubnet(subnet); }
93+
private:
94+
friend class SubnetModuleConnector;
95+
std::vector<Dataflow::Networks::ModuleHandle> underlyingModules_;
96+
QList<QGraphicsItem*> items_;
97+
static int subnetCount_;
98+
SubnetModuleConnector connector_;
99+
};
58100
}
59101
}
60102

0 commit comments

Comments
 (0)