From e44f5fdc9226907cd20f0688f31c7235baefcb77 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 15 Jul 2025 16:49:39 +0100 Subject: [PATCH] feat: tab keybind for tab menu --- src/Gui/Network/Network.cpp | 9 +++++++ src/Gui/Network/Network.h | 2 ++ src/Gui/Network/TabMenu.cpp | 49 ++++++++++++++++++++++++++----------- src/Gui/Network/TabMenu.h | 8 ++++-- src/Gui/main.cpp | 14 ----------- 5 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/Gui/Network/Network.cpp b/src/Gui/Network/Network.cpp index 980fa11..7370094 100644 --- a/src/Gui/Network/Network.cpp +++ b/src/Gui/Network/Network.cpp @@ -20,6 +20,7 @@ #include #include #include "Engine/Operator/GOP_test.h" +#include "Gui/Network/TabMenu.h" using namespace enzo; @@ -32,6 +33,7 @@ Network::Network(QWidget* parent) this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + tabMenu_ = new enzo::ui::TabMenu(this); this->setLayout(mainLayout_); @@ -305,6 +307,13 @@ void Network::keyPressEvent(QKeyEvent *event) break; } case(Qt::Key_Tab): + { + std::cout << "here\n"; + tabMenu_->showOnMouse(); + std::cout << "here\n"; + break; + } + case(Qt::Key_G): { if(auto newNode = createNode(&GOP_test::ctor)) { diff --git a/src/Gui/Network/Network.h b/src/Gui/Network/Network.h index 01e6376..70571a2 100644 --- a/src/Gui/Network/Network.h +++ b/src/Gui/Network/Network.h @@ -17,6 +17,7 @@ #include #include #include +#include "Gui/Network/TabMenu.h" class Network : public QWidget @@ -57,6 +58,7 @@ private: 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 98486c4..479e977 100644 --- a/src/Gui/Network/TabMenu.cpp +++ b/src/Gui/Network/TabMenu.cpp @@ -3,53 +3,74 @@ #include #include #include +#include #include +#include #include #include enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { - setFocusPolicy(Qt::StrongFocus); + std::cout << "ctor\n"; searchBar_ = new QLineEdit("hello world"); auto box = new QVBoxLayout(this); box->addWidget(searchBar_); + + // searchBar_->setFocusPolicy(Qt::NoFocus); + setDisabled(true); } void enzo::ui::TabMenu::showOnMouse(float dx, float dy) { - QPoint cursorPos = mapFromGlobal(QCursor::pos()); - std::cout << "inside" << cursorPos.x() << " " << cursorPos.y() << "\n"; + // searchBar_->setFocusPolicy(Qt::StrongFocus); + setDisabled(false); + std::cout << "showing\n"; + QPoint cursorPos = mapToParent(mapFromGlobal(QCursor::pos())); + std::cout << "tab menu pos: " << cursorPos.x() << " " << cursorPos.y() << "\n"; move(cursorPos + QPoint(dx, dy)); show(); setFocus(); + raise(); } void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event) { std::cout << "focus lost\n"; QWidget::focusOutEvent(event); - close(); + setDisabled(true); + // searchBar_->setFocusPolicy(Qt::NoFocus); + hide(); } bool enzo::ui::TabMenu::event(QEvent *event) { + std::cout << "event\n"; if( - event->type() == QEvent::KeyPress || - event->type() == QEvent::KeyRelease + (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) + && event->spontaneous() ) { - QApplication::postEvent(searchBar_, event->clone()); + auto *clone = static_cast(event)->clone(); + + if(event->type() == QEvent::KeyPress) + { + if(static_cast(event)->key()==Qt::Key_Tab) + { + + focusOutEvent(static_cast(event)); + return true; + } + std::cout << "key pressed: " << static_cast(event)->text().toStdString() << "\n"; + } + else if(event->type() == QEvent::KeyRelease) + { + std::cout << "key release: " << static_cast(event)->text().toStdString() << "\n"; + } + QApplication::sendEvent(searchBar_, clone); return true; } return QWidget::event(event); } -// void enzo::ui::TabMenu::keyPressEvent(QKeyEvent *event) -// { -// searchBar_->keyPressEvent(event); -// } -// void enzo::ui::TabMenu::keyReleaseEvent(QKeyEvent *event) -// { -// } diff --git a/src/Gui/Network/TabMenu.h b/src/Gui/Network/TabMenu.h index 35f3158..2a8deee 100644 --- a/src/Gui/Network/TabMenu.h +++ b/src/Gui/Network/TabMenu.h @@ -1,8 +1,10 @@ #pragma once #include +#include #include #include +#include namespace enzo::ui { @@ -11,6 +13,10 @@ class TabMenu { public: TabMenu(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + ~TabMenu() + { + std::cout << "dtor\n"; + } void showOnMouse(float dx=0, float dy=0); private: @@ -18,7 +24,5 @@ private: protected: void focusOutEvent(QFocusEvent *event) override; bool event(QEvent *event) override; - // void keyPressEvent(QKeyEvent *event) override; - // void keyReleaseEvent(QKeyEvent *event) override; }; } diff --git a/src/Gui/main.cpp b/src/Gui/main.cpp index 4c88653..238df80 100644 --- a/src/Gui/main.cpp +++ b/src/Gui/main.cpp @@ -5,9 +5,6 @@ #include #include "Interface.h" -#include "Gui/Network/TabMenu.h" -#include -#include int main(int argc, char **argv) { @@ -29,19 +26,8 @@ int main(int argc, char **argv) QApplication app (argc, argv); - QPoint cursorPos = QCursor::pos(); - EnzoUI interface; interface.show(); - enzo::ui::TabMenu tabMenu(&interface); - QTimer::singleShot(1000, [&]{ - QPoint cursorPos = QCursor::pos(); - std::cout << cursorPos.x() << " " << cursorPos.y() << "\n"; - tabMenu.showOnMouse(); - }); - - - return app.exec(); }