feat: tab keybind for tab menu

This commit is contained in:
parker
2025-07-15 16:49:39 +01:00
parent a6ceaec122
commit e44f5fdc92
5 changed files with 52 additions and 30 deletions

View File

@@ -20,6 +20,7 @@
#include <qnamespace.h> #include <qnamespace.h>
#include <QLine> #include <QLine>
#include "Engine/Operator/GOP_test.h" #include "Engine/Operator/GOP_test.h"
#include "Gui/Network/TabMenu.h"
using namespace enzo; using namespace enzo;
@@ -32,6 +33,7 @@ Network::Network(QWidget* parent)
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
tabMenu_ = new enzo::ui::TabMenu(this);
this->setLayout(mainLayout_); this->setLayout(mainLayout_);
@@ -305,6 +307,13 @@ void Network::keyPressEvent(QKeyEvent *event)
break; break;
} }
case(Qt::Key_Tab): 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)) if(auto newNode = createNode(&GOP_test::ctor))
{ {

View File

@@ -17,6 +17,7 @@
#include <QPointer> #include <QPointer>
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include "Gui/Network/TabMenu.h"
class Network class Network
: public QWidget : public QWidget
@@ -57,6 +58,7 @@ private:
void deleteEdge(QGraphicsItem* edge); void deleteEdge(QGraphicsItem* edge);
NodeGraphic* createNode(enzo::nt::opConstructor ctorFunc); NodeGraphic* createNode(enzo::nt::opConstructor ctorFunc);
enzo::ui::TabMenu* tabMenu_;
void leftMousePressed(QMouseEvent* event); void leftMousePressed(QMouseEvent* event);

View File

@@ -3,53 +3,74 @@
#include <QLineEdit> #include <QLineEdit>
#include <iostream> #include <iostream>
#include <qapplication.h> #include <qapplication.h>
#include <qevent.h>
#include <qlineedit.h> #include <qlineedit.h>
#include <qnamespace.h>
#include <qwidget.h> #include <qwidget.h>
#include <QEvent> #include <QEvent>
enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f) enzo::ui::TabMenu::TabMenu(QWidget *parent, Qt::WindowFlags f)
: QWidget(parent, f) : QWidget(parent, f)
{ {
setFocusPolicy(Qt::StrongFocus); std::cout << "ctor\n";
searchBar_ = new QLineEdit("hello world"); searchBar_ = new QLineEdit("hello world");
auto box = new QVBoxLayout(this); auto box = new QVBoxLayout(this);
box->addWidget(searchBar_); box->addWidget(searchBar_);
// searchBar_->setFocusPolicy(Qt::NoFocus);
setDisabled(true);
} }
void enzo::ui::TabMenu::showOnMouse(float dx, float dy) void enzo::ui::TabMenu::showOnMouse(float dx, float dy)
{ {
QPoint cursorPos = mapFromGlobal(QCursor::pos()); // searchBar_->setFocusPolicy(Qt::StrongFocus);
std::cout << "inside" << cursorPos.x() << " " << cursorPos.y() << "\n"; 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)); move(cursorPos + QPoint(dx, dy));
show(); show();
setFocus(); setFocus();
raise();
} }
void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event) void enzo::ui::TabMenu::focusOutEvent(QFocusEvent *event)
{ {
std::cout << "focus lost\n"; std::cout << "focus lost\n";
QWidget::focusOutEvent(event); QWidget::focusOutEvent(event);
close(); setDisabled(true);
// searchBar_->setFocusPolicy(Qt::NoFocus);
hide();
} }
bool enzo::ui::TabMenu::event(QEvent *event) bool enzo::ui::TabMenu::event(QEvent *event)
{ {
std::cout << "event\n";
if( if(
event->type() == QEvent::KeyPress || (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease)
event->type() == QEvent::KeyRelease && event->spontaneous()
) )
{ {
QApplication::postEvent(searchBar_, event->clone()); auto *clone = static_cast<QKeyEvent *>(event)->clone();
if(event->type() == QEvent::KeyPress)
{
if(static_cast<QKeyEvent*>(event)->key()==Qt::Key_Tab)
{
focusOutEvent(static_cast<QFocusEvent*>(event));
return true;
}
std::cout << "key pressed: " << static_cast<QKeyEvent*>(event)->text().toStdString() << "\n";
}
else if(event->type() == QEvent::KeyRelease)
{
std::cout << "key release: " << static_cast<QKeyEvent*>(event)->text().toStdString() << "\n";
}
QApplication::sendEvent(searchBar_, clone);
return true; return true;
} }
return QWidget::event(event); return QWidget::event(event);
} }
// void enzo::ui::TabMenu::keyPressEvent(QKeyEvent *event)
// {
// searchBar_->keyPressEvent(event);
// }
// void enzo::ui::TabMenu::keyReleaseEvent(QKeyEvent *event)
// {
// }

View File

@@ -1,8 +1,10 @@
#pragma once #pragma once
#include <qlineedit.h> #include <qlineedit.h>
#include <QLabel>
#include <qwidget.h> #include <qwidget.h>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <iostream>
namespace enzo::ui namespace enzo::ui
{ {
@@ -11,6 +13,10 @@ class TabMenu
{ {
public: public:
TabMenu(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); TabMenu(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~TabMenu()
{
std::cout << "dtor\n";
}
void showOnMouse(float dx=0, float dy=0); void showOnMouse(float dx=0, float dy=0);
private: private:
@@ -18,7 +24,5 @@ private:
protected: protected:
void focusOutEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override;
bool event(QEvent *event) override; bool event(QEvent *event) override;
// void keyPressEvent(QKeyEvent *event) override;
// void keyReleaseEvent(QKeyEvent *event) override;
}; };
} }

View File

@@ -5,9 +5,6 @@
#include <boost/dll/import.hpp> #include <boost/dll/import.hpp>
#include "Interface.h" #include "Interface.h"
#include "Gui/Network/TabMenu.h"
#include <iostream>
#include <QTimer>
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
@@ -29,19 +26,8 @@ int main(int argc, char **argv)
QApplication app (argc, argv); QApplication app (argc, argv);
QPoint cursorPos = QCursor::pos();
EnzoUI interface; EnzoUI interface;
interface.show(); 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(); return app.exec();
} }