diff --git a/src/Gui/Network/Network.h b/src/Gui/Network/Network.h index 0b4a71f..7e4277c 100644 --- a/src/Gui/Network/Network.h +++ b/src/Gui/Network/Network.h @@ -33,6 +33,7 @@ public: DEFAULT, MOVING_NODE }; + NodeGraphic* createNode(enzo::nt::opConstructor ctorFunc); private: QLayout* mainLayout_; @@ -57,7 +58,6 @@ private: void destroyFloatingEdge(); void deleteEdge(QGraphicsItem* edge); - NodeGraphic* createNode(enzo::nt::opConstructor ctorFunc); enzo::ui::TabMenu* tabMenu_; void leftMousePressed(QMouseEvent* event); diff --git a/src/Gui/Network/TabMenu.cpp b/src/Gui/Network/TabMenu.cpp index d537263..5df6096 100644 --- a/src/Gui/Network/TabMenu.cpp +++ b/src/Gui/Network/TabMenu.cpp @@ -1,5 +1,6 @@ #include "Gui/Network/TabMenu.h" #include "Engine/Operator/OperatorTable.h" +#include "Gui/Network/Network.h" #include #include #include @@ -7,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -41,8 +43,10 @@ enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f) nodeScrollArea_->setFocusPolicy(Qt::NoFocus); for(auto tableItem : tableItems) { - auto button = new QPushButton(tableItem.displayName.c_str()); + auto button = new TabMenuButton(tableItem.displayName.c_str()); + button->nodeName = tableItem.internalName; button->setFocusPolicy(Qt::NoFocus); + connect(button, &TabMenuButton::clicked, this, &enzo::ui::TabMenu::nodeClicked); button->setStyleSheet(R"( QPushButton { background-color: #181c1d; @@ -66,6 +70,14 @@ enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f) setDisabled(true); } +void enzo::ui::TabMenu::nodeClicked() +{ + TabMenuButton* buttonClicked = static_cast(sender()); + static_cast(parentWidget())->createNode(op::OperatorTable::getOpConstructor(buttonClicked->nodeName)); + doHide(); +} + + void enzo::ui::TabMenu::showOnMouse(float dx, float dy) { setDisabled(false); @@ -80,14 +92,19 @@ void enzo::ui::TabMenu::showOnMouse(float dx, float dy) raise(); } -void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event) +void enzo::ui::TabMenu::doHide() { - std::cout << "focus lost\n"; - QWidget::focusOutEvent(event); setDisabled(true); hide(); } + +void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event) +{ + QWidget::focusOutEvent(event); + doHide(); +} + bool enzo::ui::TabMenu::event(QEvent *event) { if( diff --git a/src/Gui/Network/TabMenu.h b/src/Gui/Network/TabMenu.h index dc6f77f..aa721ce 100644 --- a/src/Gui/Network/TabMenu.h +++ b/src/Gui/Network/TabMenu.h @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -22,9 +23,20 @@ private: QScrollArea* nodeScrollArea_; QWidget* nodeHolder_; QVBoxLayout* nodeHolderLayout_; + void doHide(); protected: void focusOutEvent(QFocusEvent *event) override; bool event(QEvent *event) override; // void resizeEvent(QResizeEvent *event) override; +protected slots: + void nodeClicked(); +}; + +class TabMenuButton +: public QPushButton +{ +public: + using QPushButton::QPushButton; + std::string nodeName; }; }