feat: tab keybind for tab menu
This commit is contained in:
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user