Skip to content

Commit 8a9f930

Browse files
committed
Clean up selection logic
1 parent 8b41a68 commit 8a9f930

File tree

3 files changed

+34
-17
lines changed

3 files changed

+34
-17
lines changed

src/Interface/Application/NetworkEditor.cc

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -430,11 +430,13 @@ ModuleProxyWidget* NetworkEditor::setupModuleWidget(ModuleWidget* module)
430430
void NetworkEditor::setMouseAsDragMode()
431431
{
432432
setDragMode(ScrollHandDrag);
433+
tailRecurse(boost::bind(&NetworkEditor::setMouseAsDragMode, _1));
433434
}
434435

435436
void NetworkEditor::setMouseAsSelectMode()
436437
{
437438
setDragMode(RubberBandDrag);
439+
tailRecurse(boost::bind(&NetworkEditor::setMouseAsSelectMode, _1));
438440
}
439441

440442
void NetworkEditor::bringToFront()
@@ -1724,15 +1726,6 @@ void NetworkEditor::adjustExecuteButtonsToDownstream(bool downOnly)
17241726
tailRecurse(boost::bind(&NetworkEditor::adjustExecuteButtonsToDownstream, _1, downOnly));
17251727
}
17261728

1727-
template <typename Func>
1728-
void NetworkEditor::tailRecurse(Func func)
1729-
{
1730-
for (auto& child : childrenNetworks_)
1731-
{
1732-
func(child.second->get());
1733-
}
1734-
}
1735-
17361729
QColor Gui::defaultTagColor(int tag)
17371730
{
17381731
switch (tag)

src/Interface/Application/NetworkEditor.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include <Dataflow/Serialization/Network/ModulePositionGetter.h>
4444
#include <Interface/Application/Note.h>
4545
#include <Interface/Application/Utility.h>
46+
#include <Interface/Application/Subnetworks.h>
4647
#endif
4748

4849
class QMenu;
@@ -60,7 +61,7 @@ namespace Gui {
6061

6162
class DialogErrorControl;
6263
class SubnetPortsBridgeProxyWidget;
63-
64+
6465
class CurrentModuleSelection
6566
{
6667
public:
@@ -308,7 +309,7 @@ namespace Gui {
308309
void highlightTaggedItem(int tagValue);
309310
void resetNetworkDueToCycle();
310311
void moduleWindowAction();
311-
void cleanUpNetwork();
312+
void cleanUpNetwork();
312313
void redrawTagGroups();
313314
void adjustModuleWidth(int delta);
314315
void adjustModuleHeight(int delta);
@@ -349,6 +350,7 @@ namespace Gui {
349350
void bringToFront();
350351
void sendToBack();
351352
void searchTextChanged(const QString& text);
353+
void clearSiblingSelections();
352354

353355
private:
354356
using ModulePair = QPair<ModuleWidget*, ModuleWidget*>;
@@ -362,7 +364,7 @@ namespace Gui {
362364
void fillModulePositionMap(SCIRun::Dataflow::Networks::ModulePositions& positions, SCIRun::Dataflow::Networks::ModuleFilter filter) const;
363365
void highlightTaggedItem(QGraphicsItem* item, int tagValue);
364366
void pasteImpl(const QString& xml);
365-
void connectNewModuleImpl(const Dataflow::Networks::ModuleHandle& moduleToConnectTo, const Dataflow::Networks::PortDescriptionInterface* portToConnect,
367+
void connectNewModuleImpl(const Dataflow::Networks::ModuleHandle& moduleToConnectTo, const Dataflow::Networks::PortDescriptionInterface* portToConnect,
366368
const std::string& newModuleName, QObject* sender);
367369
void drawTagGroups();
368370
void removeTagGroups();
@@ -424,7 +426,13 @@ namespace Gui {
424426
QSet<QString> currentSubnetNames_;
425427

426428
template <typename Func>
427-
void tailRecurse(Func func);
429+
void tailRecurse(Func func)
430+
{
431+
for (auto& child : childrenNetworks_)
432+
{
433+
func(child.second->get());
434+
}
435+
}
428436

429437
static NetworkEditor* inEditingContext_;
430438
struct InEditingContext

src/Interface/Application/Subnetworks.cc

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ void NetworkEditor::setupPortHolder(const std::vector<SharedPointer<PortDescript
276276
testPort->setPositionObject(boost::make_shared<LambdaPositionProvider>([proxy, offset]() { return proxy->pos() + QPointF(offset, 0); }));
277277
offset += testPort->properWidth() + 3;
278278
portsBridge->addPort(testPort);
279-
testPort->hide();
279+
//testPort->hide();
280280
}
281281

282282
portsBridge->setLayout(layout);
@@ -307,18 +307,36 @@ void NetworkEditor::setupPortHolders(ModuleHandle mod)
307307
portRewiringMap_.clear();
308308
}
309309

310+
void NetworkEditor::clearSiblingSelections()
311+
{
312+
auto active = sender();
313+
for (auto& child : childrenNetworks_)
314+
{
315+
auto scene = child.second->get()->scene_;
316+
if (scene != active)
317+
scene->clearSelection();
318+
}
319+
}
320+
310321
void NetworkEditor::initializeSubnet(const QString& name, ModuleHandle mod, NetworkEditor* subnet)
311322
{
312323
subnet->parentNetwork_ = this;
324+
subnet->setDragMode(dragMode());
313325
subnet->setNetworkEditorController(getNetworkEditorController()->withSubnet(subnet));
314326

315327
subnet->setSceneRect(QRectF(-500, -500, 1000, 1000));
328+
connect(subnet->scene_, SIGNAL(selectionChanged()), scene_, SLOT(clearSelection()));
329+
connect(subnet->scene_, SIGNAL(selectionChanged()), this, SLOT(clearSiblingSelections()));
330+
connect(scene_, SIGNAL(selectionChanged()), subnet->scene_, SLOT(clearSelection()));
316331

317332
for (auto& item : childrenNetworkItems_[name])
318333
{
319334
subnet->scene_->addItem(item);
320-
if (qgraphicsitem_cast<ModuleProxyWidget*>(item))
335+
if (auto proxy = qgraphicsitem_cast<ModuleProxyWidget*>(item))
336+
{
321337
item->setVisible(true);
338+
connect(subnet->scene_, SIGNAL(selectionChanged()), proxy, SLOT(highlightIfSelected()));
339+
}
322340
else
323341
{
324342
auto conn = qgraphicsitem_cast<ConnectionLine*>(item);
@@ -330,7 +348,6 @@ void NetworkEditor::initializeSubnet(const QString& name, ModuleHandle mod, Netw
330348
}
331349
}
332350
}
333-
334351
item->ensureVisible();
335352
}
336353

@@ -339,7 +356,6 @@ void NetworkEditor::initializeSubnet(const QString& name, ModuleHandle mod, Netw
339356

340357
auto dock = new SubnetworkEditor(subnet, mod->get_id(), name, nullptr);
341358
dock->setStyleSheet(SCIRunMainWindow::Instance()->styleSheet());
342-
//subnet->setSceneRect(QRectF());
343359

344360
dock->show();
345361
subnet->centerView();

0 commit comments

Comments
 (0)