From a6ceaec122a3f64f7f64179f5f3452e677f424d7 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 15 Jul 2025 15:01:30 +0100 Subject: [PATCH] feat: tab menu search bar --- CMakeLists.txt | 1 + src/Gui/Network/TabMenu.cpp | 55 +++++++++++++++++++++++++++++++++++++ src/Gui/Network/TabMenu.h | 24 ++++++++++++++++ src/Gui/main.cpp | 14 ++++++++++ 4 files changed, 94 insertions(+) create mode 100644 src/Gui/Network/TabMenu.cpp create mode 100644 src/Gui/Network/TabMenu.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dc3e5f..0dfbe1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ set(GUI_SOURCES src/Gui/Network/FloatingEdgeGraphic.cpp src/Gui/Network/DisplayFlagButton.cpp src/Gui/Network/NodeIconGraphic.cpp + src/Gui/Network/TabMenu.cpp ) # qt diff --git a/src/Gui/Network/TabMenu.cpp b/src/Gui/Network/TabMenu.cpp new file mode 100644 index 0000000..98486c4 --- /dev/null +++ b/src/Gui/Network/TabMenu.cpp @@ -0,0 +1,55 @@ +#include "Gui/Network/TabMenu.h" +#include +#include +#include +#include +#include +#include +#include + +enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f) +: QWidget(parent, f) +{ + setFocusPolicy(Qt::StrongFocus); + searchBar_ = new QLineEdit("hello world"); + auto box = new QVBoxLayout(this); + box->addWidget(searchBar_); +} + +void enzo::ui::TabMenu::showOnMouse(float dx, float dy) +{ + QPoint cursorPos = mapFromGlobal(QCursor::pos()); + std::cout << "inside" << cursorPos.x() << " " << cursorPos.y() << "\n"; + move(cursorPos + QPoint(dx, dy)); + show(); + setFocus(); +} + +void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event) +{ + std::cout << "focus lost\n"; + QWidget::focusOutEvent(event); + close(); +} + +bool enzo::ui::TabMenu::event(QEvent *event) +{ + if( + event->type() == QEvent::KeyPress || + event->type() == QEvent::KeyRelease + ) + { + QApplication::postEvent(searchBar_, event->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 new file mode 100644 index 0000000..35f3158 --- /dev/null +++ b/src/Gui/Network/TabMenu.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include + +namespace enzo::ui +{ +class TabMenu +: public QWidget +{ +public: + TabMenu(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + void showOnMouse(float dx=0, float dy=0); + +private: + QLineEdit* searchBar_; +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 238df80..4c88653 100644 --- a/src/Gui/main.cpp +++ b/src/Gui/main.cpp @@ -5,6 +5,9 @@ #include #include "Interface.h" +#include "Gui/Network/TabMenu.h" +#include +#include int main(int argc, char **argv) { @@ -26,8 +29,19 @@ 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(); }