From 67ee78ac9ac76a1d5f3545c7ad417f53916c330e Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 16 Jun 2020 17:48:10 +1000 Subject: [PATCH] nodeparamview: allow disconnecting nodes by right clicking the "connected to" label --- app/widget/clickablelabel/clickablelabel.cpp | 12 ++++++++---- .../nodeparamviewconnectedlabel.cpp | 17 +++++++++++++++++ .../nodeparamview/nodeparamviewconnectedlabel.h | 2 ++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/widget/clickablelabel/clickablelabel.cpp b/app/widget/clickablelabel/clickablelabel.cpp index 0ab4dd631..a267a1019 100644 --- a/app/widget/clickablelabel/clickablelabel.cpp +++ b/app/widget/clickablelabel/clickablelabel.cpp @@ -20,6 +20,8 @@ #include "clickablelabel.h" +#include + OLIVE_NAMESPACE_ENTER ClickableLabel::ClickableLabel(const QString &text, QWidget *parent) : @@ -32,16 +34,18 @@ ClickableLabel::ClickableLabel(QWidget *parent) : { } -void ClickableLabel::mouseReleaseEvent(QMouseEvent *) +void ClickableLabel::mouseReleaseEvent(QMouseEvent *event) { - if (underMouse()) { + if (event->button() == Qt::LeftButton && underMouse()) { emit MouseClicked(); } } -void ClickableLabel::mouseDoubleClickEvent(QMouseEvent *) +void ClickableLabel::mouseDoubleClickEvent(QMouseEvent *event) { - emit MouseDoubleClicked(); + if (event->button() == Qt::LeftButton) { + emit MouseDoubleClicked(); + } } OLIVE_NAMESPACE_EXIT diff --git a/app/widget/nodeparamview/nodeparamviewconnectedlabel.cpp b/app/widget/nodeparamview/nodeparamviewconnectedlabel.cpp index 612b14f81..43507cac6 100644 --- a/app/widget/nodeparamview/nodeparamviewconnectedlabel.cpp +++ b/app/widget/nodeparamview/nodeparamviewconnectedlabel.cpp @@ -23,7 +23,10 @@ #include #include "common/qtutils.h" +#include "core.h" #include "node/node.h" +#include "widget/menu/menu.h" +#include "widget/nodeview/nodeviewundo.h" OLIVE_NAMESPACE_ENTER @@ -39,7 +42,9 @@ NodeParamViewConnectedLabel::NodeParamViewConnectedLabel(NodeInput *input, QWidg connected_to_lbl_ = new ClickableLabel(); connected_to_lbl_->setCursor(Qt::PointingHandCursor); + connected_to_lbl_->setContextMenuPolicy(Qt::CustomContextMenu); connect(connected_to_lbl_, &ClickableLabel::MouseClicked, this, &NodeParamViewConnectedLabel::ConnectionClicked); + connect(connected_to_lbl_, &ClickableLabel::customContextMenuRequested, this, &NodeParamViewConnectedLabel::ShowLabelContextMenu); layout->addWidget(connected_to_lbl_); layout->addStretch(); @@ -69,4 +74,16 @@ void NodeParamViewConnectedLabel::UpdateConnected() connected_to_lbl_->setText(connection_str); } +void NodeParamViewConnectedLabel::ShowLabelContextMenu() +{ + Menu m(this); + + QAction* disconnect_action = m.addAction(tr("Disconnect")); + connect(disconnect_action, &QAction::triggered, this, [this](){ + Core::instance()->undo_stack()->push(new NodeEdgeRemoveCommand(input_->get_connected_output(), input_)); + }); + + m.exec(QCursor::pos()); +} + OLIVE_NAMESPACE_EXIT diff --git a/app/widget/nodeparamview/nodeparamviewconnectedlabel.h b/app/widget/nodeparamview/nodeparamviewconnectedlabel.h index 161bf2a0d..04103cae1 100644 --- a/app/widget/nodeparamview/nodeparamviewconnectedlabel.h +++ b/app/widget/nodeparamview/nodeparamviewconnectedlabel.h @@ -37,6 +37,8 @@ signals: private slots: void UpdateConnected(); + void ShowLabelContextMenu(); + private: ClickableLabel* connected_to_lbl_;