diff --git a/app/panel/node/node.cpp b/app/panel/node/node.cpp index 10ec25ce7..4b7334378 100644 --- a/app/panel/node/node.cpp +++ b/app/panel/node/node.cpp @@ -41,6 +41,7 @@ NodePanel::NodePanel(QWidget *parent) : // Connect toolbar to NodeView connect(toolbar, &NodeViewToolBar::MiniMapEnabledToggled, node_view_, &NodeView::SetMiniMapEnabled); + connect(toolbar, &NodeViewToolBar::AddNodeClicked, node_view_, &NodeView::ShowAddMenu); // Set defaults toolbar->SetMiniMapEnabled(true); diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 500d04684..7168c4f23 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -1026,9 +1026,7 @@ void NodeView::ShowContextMenu(const QPoint &pos) m.addSeparator(); - Menu* add_menu = NodeFactory::CreateMenu(&m); - add_menu->setTitle(tr("Add")); - connect(add_menu, &Menu::triggered, this, &NodeView::CreateNodeSlot); + Menu* add_menu = CreateAddMenu(&m); m.addMenu(add_menu); } @@ -1495,6 +1493,14 @@ QPointF NodeView::GetEstimatedPositionForContext(NodeViewItem *item, Node *conte return item->GetNodePosition() - context_offsets_.value(context); } +Menu *NodeView::CreateAddMenu(Menu *parent) +{ + Menu* add_menu = NodeFactory::CreateMenu(parent); + add_menu->setTitle(tr("Add")); + connect(add_menu, &Menu::triggered, this, &NodeView::CreateNodeSlot); + return add_menu; +} + NodeView::NodeViewAttachNodesToCursor::NodeViewAttachNodesToCursor(NodeView *view, const QVector &nodes) : view_(view), nodes_(nodes) diff --git a/app/widget/nodeview/nodeview.h b/app/widget/nodeview/nodeview.h index 7cec30e85..5fccd9b54 100644 --- a/app/widget/nodeview/nodeview.h +++ b/app/widget/nodeview/nodeview.h @@ -30,6 +30,7 @@ #include "nodeviewminimap.h" #include "nodeviewscene.h" #include "widget/handmovableview/handmovableview.h" +#include "widget/menu/menu.h" namespace olive { @@ -84,6 +85,13 @@ public slots: minimap_->setVisible(e); } + void ShowAddMenu() + { + Menu *m = CreateAddMenu(nullptr); + m->exec(QCursor::pos()); + delete m; + } + signals: void NodesSelected(const QVector& nodes); @@ -126,6 +134,8 @@ private: QPointF GetEstimatedPositionForContext(NodeViewItem *item, Node *context) const; + Menu *CreateAddMenu(Menu *parent); + class NodeViewAttachNodesToCursor : public UndoCommand { public: diff --git a/app/widget/nodeview/nodeviewtoolbar.cpp b/app/widget/nodeview/nodeviewtoolbar.cpp index 29fc65847..c63be73db 100644 --- a/app/widget/nodeview/nodeviewtoolbar.cpp +++ b/app/widget/nodeview/nodeviewtoolbar.cpp @@ -3,6 +3,8 @@ #include #include +#include "ui/icons/icons.h" + namespace olive { #define super QWidget @@ -13,6 +15,10 @@ NodeViewToolBar::NodeViewToolBar(QWidget *parent) : QHBoxLayout *layout = new QHBoxLayout(this); layout->setMargin(0); + add_node_btn_ = new QPushButton(); + connect(add_node_btn_, &QPushButton::clicked, this, &NodeViewToolBar::AddNodeClicked); + layout->addWidget(add_node_btn_); + minimap_btn_ = new QPushButton(); minimap_btn_->setCheckable(true); connect(minimap_btn_, &QPushButton::clicked, this, &NodeViewToolBar::MiniMapEnabledToggled); @@ -36,12 +42,14 @@ void NodeViewToolBar::changeEvent(QEvent *e) void NodeViewToolBar::Retranslate() { + add_node_btn_->setToolTip(tr("Add Node")); minimap_btn_->setText(tr("Mini-Map")); minimap_btn_->setToolTip(tr("Toggle Mini-Map")); } void NodeViewToolBar::UpdateIcons() { + add_node_btn_->setIcon(icon::Add); } } diff --git a/app/widget/nodeview/nodeviewtoolbar.h b/app/widget/nodeview/nodeviewtoolbar.h index 60585fc5d..e48ed4882 100644 --- a/app/widget/nodeview/nodeviewtoolbar.h +++ b/app/widget/nodeview/nodeviewtoolbar.h @@ -19,6 +19,8 @@ public slots: } signals: + void AddNodeClicked(); + void MiniMapEnabledToggled(bool e); protected: @@ -29,6 +31,8 @@ private: void UpdateIcons(); + QPushButton *add_node_btn_; + QPushButton *minimap_btn_; };