diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index c613a8e7db..23d883a09c 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -33,6 +33,7 @@ # include # include # include +#include # include #include #include @@ -104,7 +105,6 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene* s, QWidget *parent) setScene(s); - setViewportUpdateMode(QGraphicsView::SmartViewportUpdate); setCacheMode(QGraphicsView::CacheBackground); @@ -113,6 +113,11 @@ QGVPage::QGVPage(ViewProviderPage *vp, QGraphicsScene* s, QWidget *parent) m_atCursor = hGrp->GetBool("ZoomAtCursor", 1l); m_invertZoom = hGrp->GetBool("InvertZoom", 0l); m_zoomIncrement = hGrp->GetFloat("ZoomStep",0.02); + hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General"); + m_reversePan = hGrp->GetInt("KbPan",1); + m_reverseScroll = hGrp->GetInt("KbScroll",1); + if (m_atCursor) { setResizeAnchor(AnchorUnderMouse); @@ -730,9 +735,51 @@ void QGVPage::keyPressEvent(QKeyEvent *event) } } } + + if(event->modifiers().testFlag( Qt::NoModifier)) { + switch(event->key()) { + case Qt::Key_Left: { + kbPanScroll(1, 0); + break; + } + case Qt::Key_Up: { + kbPanScroll(0, 1); + break; + } + case Qt::Key_Right: { + kbPanScroll(-1, 0); + break; + } + case Qt::Key_Down: { + kbPanScroll(0, -1); + break; + } + default: { + break; + } + } + } event->accept(); } +void QGVPage::kbPanScroll(int xMove, int yMove) +{ + if (xMove != 0) { + QScrollBar* hsb = horizontalScrollBar(); +// int hRange = hsb->maximum() - hsb->minimum(); //default here is 100? +// int hDelta = xMove/hRange + int hStep = hsb->singleStep() * xMove * m_reversePan; + int hNow = hsb->value(); + hsb->setValue(hNow + hStep); + } + if (yMove != 0) { + QScrollBar* vsb = verticalScrollBar(); + int vStep = vsb->singleStep() * yMove * m_reverseScroll; + int vNow = vsb->value(); + vsb->setValue(vNow + vStep); + } +} + void QGVPage::enterEvent(QEvent *event) { QGraphicsView::enterEvent(event); diff --git a/src/Mod/TechDraw/Gui/QGVPage.h b/src/Mod/TechDraw/Gui/QGVPage.h index 5e26b0e9a5..98489e3d11 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.h +++ b/src/Mod/TechDraw/Gui/QGVPage.h @@ -114,6 +114,7 @@ protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void keyPressEvent(QKeyEvent *event) override; + void kbPanScroll(int xMove = 1, int yMove = 1); static QColor SelectColor; static QColor PreselectColor; @@ -134,6 +135,8 @@ private: bool m_atCursor; bool m_invertZoom; double m_zoomIncrement; + int m_reversePan; + int m_reverseScroll; }; } // namespace MDIViewPageGui