Skip to content

Commit cee054e

Browse files
committed
Improved replace-with menu
1 parent c7a23bb commit cee054e

File tree

6 files changed

+29
-70
lines changed

6 files changed

+29
-70
lines changed

src/Interface/Application/ModuleProxyWidget.cc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,11 +369,6 @@ bool ModuleProxyWidget::isSubwidget(QWidget* alienWidget) const
369369
qobject_cast<QProgressBar*>(alienWidget);
370370
}
371371

372-
void ModuleProxyWidget::menuFunction()
373-
{
374-
module_->menuFunction();
375-
}
376-
377372
void ModuleProxyWidget::highlightIfSelected()
378373
{
379374
if (!isSelected_ && isSelected())

src/Interface/Application/ModuleProxyWidget.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ namespace SCIRun
5252
void createStartupNote();
5353
void adjustHeight(int delta);
5454
void adjustWidth(int delta);
55-
void menuFunction();
5655

5756
//TODO: move to utility
5857
static void ensureItemVisible(QGraphicsItem* item);

src/Interface/Application/ModuleWidget.cc

Lines changed: 20 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ ModuleWidget::ModuleWidget(NetworkEditor* ed, const QString& name, ModuleHandle
335335
theModule_(theModule),
336336
previousModuleState_(UNSET),
337337
moduleId_(id(theModule)),
338+
name_(name),
338339
dialog_(nullptr),
339340
dockable_(nullptr),
340341
dialogErrorControl_(dialogErrorControl),
@@ -536,35 +537,26 @@ void ModuleWidget::setupModuleActions()
536537
void ModuleWidget::postLoadAction()
537538
{
538539
auto replaceWith = actionsMenu_->getAction("Replace With...");
539-
connect(replaceWith, SIGNAL(triggered()), this, SLOT(showReplaceWithWidget()));
540-
replaceWithWidget_ = new QPushButton(this);
541-
auto menu = new QMenu(this);
542-
replaceWithWidget_->setMenu(menu);
543-
fillReplaceWithMenu();
544-
connect(this, SIGNAL(connectionAdded(const SCIRun::Dataflow::Networks::ConnectionDescription&)), this, SLOT(fillReplaceWithMenu()));
545-
connect(this, SIGNAL(connectionDeleted(const SCIRun::Dataflow::Networks::ConnectionId&)), this, SLOT(fillReplaceWithMenu()));
540+
if (replaceWith)
541+
connect(replaceWith, SIGNAL(triggered()), this, SLOT(showReplaceWithWidget()));
546542
}
547543

548544
void ModuleWidget::showReplaceWithWidget()
549545
{
550-
qDebug() << __FUNCTION__;
551-
/*QMessageBox msgBox;
552-
QPushButton *connectButton = msgBox.addButton("Replacement", QMessageBox::ActionRole);
553-
qDebug() << replaceWithWidget_->menu()->actions().size();
554-
connectButton->setMenu(replaceWithWidget_->menu());
555-
QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort);
556-
msgBox.setText("Press button to replace.");
557-
558-
QDialog dialog;
559-
auto l = new QHBoxLayout;
560-
auto b = new QPushButton("Replacement");
561-
auto menu = new QMenu(this);
562-
b->setMenu(menu);
563-
fillReplaceWithMenuImpl(menu);
564-
l->addWidget(b);
565-
dialog.setLayout(l);
566-
dialog.exec();
567-
*/
546+
replaceWithDialog_ = new QDialog;
547+
replaceWithDialog_->setWindowTitle("Replace a module");
548+
auto layout = new QHBoxLayout;
549+
layout->addWidget(new QLabel("Replace " + name_ + " with:"));
550+
auto button = new QPushButton("Choose a compatible module");
551+
auto menu = new QMenu;
552+
button->setMenu(menu);
553+
fillReplaceWithMenu(menu);
554+
layout->addWidget(button);
555+
auto cancel = new QPushButton("Cancel");
556+
connect(cancel, SIGNAL(clicked()), replaceWithDialog_, SLOT(reject()));
557+
layout->addWidget(cancel);
558+
replaceWithDialog_->setLayout(layout);
559+
replaceWithDialog_->exec();
568560
}
569561

570562
bool ModuleWidget::guiVisible() const
@@ -574,15 +566,7 @@ bool ModuleWidget::guiVisible() const
574566
return false;
575567
}
576568

577-
void ModuleWidget::fillReplaceWithMenu()
578-
{
579-
if (deleting_ || networkBeingCleared_)
580-
return;
581-
582-
fillReplaceWithMenuImpl(getReplaceWithMenu());
583-
}
584-
585-
void ModuleWidget::fillReplaceWithMenuImpl(QMenu* menu)
569+
void ModuleWidget::fillReplaceWithMenu(QMenu* menu)
586570
{
587571
if (deleting_ || networkBeingCleared_)
588572
return;
@@ -594,22 +578,12 @@ void ModuleWidget::fillReplaceWithMenuImpl(QMenu* menu)
594578
fillMenuWithFilteredModuleActions(menu, Application::Instance().controller()->getAllAvailableModuleDescriptions(),
595579
isReplacement,
596580
[=](QAction* action) { QObject::connect(action, SIGNAL(triggered()), this, SLOT(replaceModuleWith())); },
597-
fullWidgetDisplay_->getModuleActionButton());
598-
}
599-
600-
void ModuleWidget::menuFunction()
601-
{
602-
// fullWidgetDisplay_->getModuleActionButton()->setMenu(nullptr);
603-
// actionsMenu_.reset();
604-
}
605-
606-
QMenu* ModuleWidget::getReplaceWithMenu()
607-
{
608-
return replaceWithWidget_->menu();
581+
replaceWithDialog_);
609582
}
610583

611584
void ModuleWidget::replaceModuleWith()
612585
{
586+
delete replaceWithDialog_;
613587
auto action = qobject_cast<QAction*>(sender());
614588
auto moduleToReplace = action->text();
615589
Q_EMIT replaceModuleWith(theModule_, moduleToReplace.toStdString());
@@ -998,7 +972,6 @@ ModuleWidget::NetworkClearingScope::~NetworkClearingScope()
998972
ModuleWidget::~ModuleWidget()
999973
{
1000974
disconnect(this, SIGNAL(dynamicPortChanged(const std::string&, bool)), this, SLOT(updateDialogForDynamicPortChange(const std::string&, bool)));
1001-
disconnect(this, SIGNAL(connectionDeleted(const SCIRun::Dataflow::Networks::ConnectionId&)), this, SLOT(fillReplaceWithMenu()));
1002975

1003976
if (!theModule_->isStoppable())
1004977
{

src/Interface/Application/ModuleWidget.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ class ModuleWidget : public QStackedWidget,
151151
int portSpacing() const;
152152
void setPortSpacing(bool highlighted);
153153

154-
virtual boost::signals2::connection connectExecuteBegins(const SCIRun::Dataflow::Networks::ExecuteBeginsSignalType::slot_type& subscriber) override final;
155-
virtual boost::signals2::connection connectExecuteEnds(const SCIRun::Dataflow::Networks::ExecuteEndsSignalType::slot_type& subscriber) override final;
156-
virtual boost::signals2::connection connectErrorListener(const SCIRun::Dataflow::Networks::ErrorSignalType::slot_type& subscriber) override final;
154+
boost::signals2::connection connectExecuteBegins(const SCIRun::Dataflow::Networks::ExecuteBeginsSignalType::slot_type& subscriber) override final;
155+
boost::signals2::connection connectExecuteEnds(const SCIRun::Dataflow::Networks::ExecuteEndsSignalType::slot_type& subscriber) override final;
156+
boost::signals2::connection connectErrorListener(const SCIRun::Dataflow::Networks::ErrorSignalType::slot_type& subscriber) override final;
157157

158158
void updateNoteFromFile(const Note& note);
159159

@@ -174,7 +174,7 @@ class ModuleWidget : public QStackedWidget,
174174
void setupPortSceneCollaborator(QGraphicsProxyWidget* proxy);
175175

176176
public Q_SLOTS:
177-
virtual bool executeWithSignals() override;
177+
bool executeWithSignals() override;
178178
void toggleOptionsDialog();
179179
void setLogButtonColor(const QColor& color);
180180
void resetLogButtonColor();
@@ -194,7 +194,6 @@ public Q_SLOTS:
194194
void updateMetadata(bool active);
195195
void updatePortSpacing(bool highlighted);
196196
void replaceMe();
197-
void menuFunction();
198197
Q_SIGNALS:
199198
void removeModule(const SCIRun::Dataflow::Networks::ModuleId& moduleId);
200199
void interrupt(const SCIRun::Dataflow::Networks::ModuleId& moduleId);
@@ -234,7 +233,6 @@ private Q_SLOTS:
234233
void executeTriggeredProgrammatically(bool upstream);
235234
void stopButtonPushed();
236235
void colorOptionsButton(bool visible);
237-
void fillReplaceWithMenu();
238236
void replaceModuleWith();
239237
void updateDialogForDynamicPortChange(const std::string& portName, bool adding);
240238
void handleDialogFatalError(const QString& message);
@@ -254,7 +252,7 @@ private Q_SLOTS:
254252
bool executedOnce_, skipExecuteDueToFatalError_, disabled_;
255253
std::atomic<bool> errored_;
256254
int previousPageIndex_ {0};
257-
QPushButton* replaceWithWidget_{nullptr};
255+
QDialog* replaceWithDialog_{ nullptr };
258256

259257
SCIRun::Dataflow::Networks::ModuleHandle theModule_;
260258
std::atomic<int> previousModuleState_;
@@ -266,6 +264,7 @@ private Q_SLOTS:
266264
void setupDisplayConnections(ModuleWidgetDisplayBase* display);
267265
void resizeBasedOnModuleName(ModuleWidgetDisplayBase* display, int index);
268266
std::string moduleId_;
267+
QString name_;
269268
class ModuleDialogGeneric* dialog_;
270269
QDockWidget* dockable_;
271270
void makeOptionsDialog();
@@ -276,10 +275,9 @@ private Q_SLOTS:
276275
void adjustDockState(bool dockEnabled);
277276
Qt::DockWidgetArea allowedDockArea() const;
278277
void printInputPorts(const SCIRun::Dataflow::Networks::ModuleInfoProvider& moduleInfoProvider) const;
279-
QMenu* getReplaceWithMenu();
280278
void setInputPortSpacing(bool highlighted);
281279
void setOutputPortSpacing(bool highlighted);
282-
void fillReplaceWithMenuImpl(QMenu* menu);
280+
void fillReplaceWithMenu(QMenu* menu);
283281

284282
class ModuleLogWindow* logWindow_;
285283
boost::scoped_ptr<class ModuleActionsMenu> actionsMenu_;

src/Interface/Application/NetworkEditor.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ void NetworkEditor::replaceModuleWith(const ModuleHandle& moduleToReplace, const
276276
InEditingContext iec(this);
277277

278278
auto oldModule = findById(scene_->items(), moduleToReplace->get_id());
279-
lastModulePosition_ = oldModule->scenePos();
279+
lastModulePosition_ = oldModule->scenePos() - QPointF(15, 15);;
280280
controller_->addModule(newModuleName);
281281

282282
// connect up same ports

src/Interface/Application/Subnetworks.cc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,7 @@ void NetworkEditor::sendItemsToParent()
125125
{
126126
conn->deleteCompanion();
127127
}
128-
129-
auto module = getModule(item);
130-
if (module)
131-
{
132-
module->menuFunction();
133-
}
134-
128+
135129
auto proxy = dynamic_cast<ModuleProxyWidget*>(item);
136130
if (proxy)
137131
{

0 commit comments

Comments
 (0)