From 2feb6eb5b4594bf31d8e1a13999bb1c87c877424 Mon Sep 17 00:00:00 2001 From: parker Date: Thu, 19 Jun 2025 17:33:13 +0100 Subject: [PATCH] feat: zoom and pan in networkView --- CMakeLists.txt | 5 +- src/gui/Interface.cpp | 5 +- src/gui/NetworkView.cpp | 19 ------- src/gui/NetworkView.h | 12 ---- src/gui/network/NetworkGraphicsScene.cpp | 28 ++++++++++ src/gui/network/NetworkGraphicsScene.h | 15 +++++ src/gui/network/NetworkView.cpp | 71 ++++++++++++++++++++++++ src/gui/network/NetworkView.h | 18 ++++++ src/gui/{ => viewport}/Viewport.cpp | 0 src/gui/{ => viewport}/Viewport.h | 0 10 files changed, 138 insertions(+), 35 deletions(-) delete mode 100644 src/gui/NetworkView.cpp delete mode 100644 src/gui/NetworkView.h create mode 100644 src/gui/network/NetworkGraphicsScene.cpp create mode 100644 src/gui/network/NetworkGraphicsScene.h create mode 100644 src/gui/network/NetworkView.cpp create mode 100644 src/gui/network/NetworkView.h rename src/gui/{ => viewport}/Viewport.cpp (100%) rename src/gui/{ => viewport}/Viewport.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index dfdf83d..ce0dc18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,9 @@ qt_standard_project_setup() qt_add_executable(${AppExec} src/gui/main.cpp src/gui/Interface.cpp - src/gui/Viewport.cpp - src/gui/NetworkView.cpp + src/gui/viewport/Viewport.cpp + src/gui/network/NetworkView.cpp + src/gui/network/NetworkGraphicsScene.cpp ) target_link_libraries(${AppExec} PRIVATE Qt6::Core Qt6::Widgets) diff --git a/src/gui/Interface.cpp b/src/gui/Interface.cpp index 9b32ad9..0da6220 100644 --- a/src/gui/Interface.cpp +++ b/src/gui/Interface.cpp @@ -1,6 +1,6 @@ #include "gui/Interface.h" -#include "gui/Viewport.h" -#include "gui/NetworkView.h" +#include "gui/viewport/Viewport.h" +#include "gui/network/NetworkView.h" #include #include @@ -16,6 +16,7 @@ EnzoUI::EnzoUI() Viewport* viewport = new Viewport(); NetworkView* networkView = new NetworkView(this); + networkView->setMinimumWidth(400); viewportSplitter_ = new QSplitter(this); diff --git a/src/gui/NetworkView.cpp b/src/gui/NetworkView.cpp deleted file mode 100644 index 2fb64a7..0000000 --- a/src/gui/NetworkView.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "gui/NetworkView.h" -#include -#include - -NetworkView::NetworkView(QWidget *parent) -: QGraphicsView(parent) -{ - QGraphicsScene *scene = new QGraphicsScene(this); - setScene(scene); - - QPen greenPen = QPen(Qt::green); - greenPen.setWidth(6); - - - auto* rect1 = scene->addRect(50, 50, 100, 100, greenPen); - rect1->setFlag(QGraphicsItem::ItemIsMovable); - -} - diff --git a/src/gui/NetworkView.h b/src/gui/NetworkView.h deleted file mode 100644 index 3797027..0000000 --- a/src/gui/NetworkView.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include -#include - -class NetworkView -: public QGraphicsView -{ -public: - NetworkView(QWidget *parent = nullptr); -private: - -}; diff --git a/src/gui/network/NetworkGraphicsScene.cpp b/src/gui/network/NetworkGraphicsScene.cpp new file mode 100644 index 0000000..ad81d34 --- /dev/null +++ b/src/gui/network/NetworkGraphicsScene.cpp @@ -0,0 +1,28 @@ +#include "gui/network/NetworkGraphicsScene.h" +#include +#include +#include +#include + +NetworkGraphicsScene::NetworkGraphicsScene(QGraphicsView *parent) +: QGraphicsScene() +{ + parent_ = parent; +} + +void NetworkGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) +{ + std::cout << "delta: " << wheelEvent->delta() << "\n"; + int delta = wheelEvent->delta(); + if(delta > 0) + { + parent_->scale(1.1, 1.1); + } + else if(delta < 0) + { + parent_->scale(0.9, 0.9); + } + wheelEvent->accept(); +} + + diff --git a/src/gui/network/NetworkGraphicsScene.h b/src/gui/network/NetworkGraphicsScene.h new file mode 100644 index 0000000..dc8116c --- /dev/null +++ b/src/gui/network/NetworkGraphicsScene.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +class NetworkGraphicsScene +: public QGraphicsScene +{ +public: + NetworkGraphicsScene(QGraphicsView *parent = nullptr); +private: + QGraphicsView* parent_; +protected: + void wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) override; + +}; diff --git a/src/gui/network/NetworkView.cpp b/src/gui/network/NetworkView.cpp new file mode 100644 index 0000000..2b79a79 --- /dev/null +++ b/src/gui/network/NetworkView.cpp @@ -0,0 +1,71 @@ +#include "gui/network/NetworkView.h" +#include +#include "gui/network/NetworkGraphicsScene.h" +#include +#include +#include + +NetworkView::NetworkView(QWidget *parent) +: QGraphicsView(parent) +{ + QGraphicsScene *scene = new NetworkGraphicsScene(this); + setScene(scene); + + QPen greenPen = QPen(Qt::green); + greenPen.setWidth(6); + + + auto* rect1 = scene->addRect(50, 50, 100, 100, greenPen); + rect1->setFlag(QGraphicsItem::ItemIsMovable); + + auto* rect2 = scene->addRect(80, 120, 100, 100, greenPen); + rect2->setFlag(QGraphicsItem::ItemIsMovable); + +} + + +void NetworkView::mousePressEvent(QMouseEvent *event) +{ + if( + event->button() & Qt::MiddleButton + ) + { + panStartPos = event->pos(); + event->accept(); + return; + } + + QGraphicsView::mousePressEvent(event); +} + +// void NetworkView::mouseReleaseEvent(QMouseEvent *event) +// { +// if( +// event->button() & Qt::MiddleButton +// ) +// { +// panStartPos = QPointF(0,0); +// } +// } + +void NetworkView::mouseMoveEvent(QMouseEvent *mouseEvent) +{ + + if( mouseEvent->buttons() & Qt::MiddleButton) + { + QPointF pos = mouseEvent->pos(); + QPointF delta = pos-panStartPos; + std::cout << "pos: " << mouseEvent->pos().x() << " " << mouseEvent->pos().y() << "\n"; + std::cout << "delta: " << delta.x() << " " << delta.y() << "\n"; + + float speed = 1.0f; + setSceneRect(sceneRect().translated(-delta.x()*speed, -delta.y()*speed)); + panStartPos = mouseEvent->pos(); + mouseEvent->accept(); + return; + } + + QGraphicsView::mouseMoveEvent(mouseEvent); + +} + diff --git a/src/gui/network/NetworkView.h b/src/gui/network/NetworkView.h new file mode 100644 index 0000000..e8e1964 --- /dev/null +++ b/src/gui/network/NetworkView.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include + +class NetworkView +: public QGraphicsView +{ +public: + NetworkView(QWidget *parent = nullptr); +private: + QPointF panStartPos; + +protected: + void mouseMoveEvent(QMouseEvent *mouseEvent) override; + void mousePressEvent(QMouseEvent *event) override; + // void mouseReleaseEvent(QMouseEvent *event) override; + +}; diff --git a/src/gui/Viewport.cpp b/src/gui/viewport/Viewport.cpp similarity index 100% rename from src/gui/Viewport.cpp rename to src/gui/viewport/Viewport.cpp diff --git a/src/gui/Viewport.h b/src/gui/viewport/Viewport.h similarity index 100% rename from src/gui/Viewport.h rename to src/gui/viewport/Viewport.h