From 82324fdcb5e299b62f1331dd099de6c4dee5b03a Mon Sep 17 00:00:00 2001 From: Jeremy Bullock Date: Fri, 23 Oct 2020 23:18:38 -0600 Subject: [PATCH] Allow panning with space on function sheet (#409) --- .../include/toonzqt/spreadsheetviewer.h | 6 +++ toonz/sources/tnztools/edittool.cpp | 4 +- toonz/sources/toonzqt/spreadsheetviewer.cpp | 38 ++++++++++++++----- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/toonz/sources/include/toonzqt/spreadsheetviewer.h b/toonz/sources/include/toonzqt/spreadsheetviewer.h index 811517c3..1654e034 100644 --- a/toonz/sources/include/toonzqt/spreadsheetviewer.h +++ b/toonz/sources/include/toonzqt/spreadsheetviewer.h @@ -300,6 +300,7 @@ class DVAPI SpreadsheetViewer : public QDialog { // QRect m_selectedCells; // x=col, y=row bool m_isComputingSize; // const Orientation *m_orientation; + bool m_panningArmed = false; protected: Spreadsheet::FrameScroller m_frameScroller; @@ -386,6 +387,8 @@ public: bool isAutoPanning() const { return m_autoPanSpeed.x() != 0 || m_autoPanSpeed.y() != 0; } + void setPanningArmed(bool panningArmed) { m_panningArmed = panningArmed; } + bool getPanningArmed() { return m_panningArmed; } int xToColumn(int x) const; int yToRow(int y) const; @@ -433,8 +436,11 @@ protected: void hideEvent(QHideEvent *) override; void resizeEvent(QResizeEvent *event) override; void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; void wheelEvent(QWheelEvent *event) override; void timerEvent(QTimerEvent *) override; + void enterEvent(QEvent *) override; + void leaveEvent(QEvent *) override; public slots: void setRowCount(int rowCount); diff --git a/toonz/sources/tnztools/edittool.cpp b/toonz/sources/tnztools/edittool.cpp index 57ff92f9..a791bcff 100644 --- a/toonz/sources/tnztools/edittool.cpp +++ b/toonz/sources/tnztools/edittool.cpp @@ -615,7 +615,9 @@ public: bool hasVisibleChildColumn(const TStageObject *obj, const TXsheet *xsh) { if (!obj->getId().isColumn()) return false; // just in case - if (xsh->getColumn(obj->getId().getIndex())->isCamstandVisible()) return true; + if (xsh->getColumn(obj->getId().getIndex()) && + xsh->getColumn(obj->getId().getIndex())->isCamstandVisible()) + return true; for (const auto child : obj->getChildren()) { if (hasVisibleChildColumn(child, xsh)) return true; } diff --git a/toonz/sources/toonzqt/spreadsheetviewer.cpp b/toonz/sources/toonzqt/spreadsheetviewer.cpp index 82e06983..d6f28a24 100644 --- a/toonz/sources/toonzqt/spreadsheetviewer.cpp +++ b/toonz/sources/toonzqt/spreadsheetviewer.cpp @@ -247,7 +247,7 @@ void GenericPanel::paintEvent(QPaintEvent *e) { void GenericPanel::mousePressEvent(QMouseEvent *e) { assert(!m_dragTool); - if (e->button() == Qt::MidButton) + if (e->button() == Qt::MidButton || m_viewer->getPanningArmed()) m_dragTool = new PanTool(this); else m_dragTool = createDragTool(e); @@ -806,13 +806,13 @@ void SpreadsheetViewer::wheelEvent(QWheelEvent *event) { default: // Qt::MouseEventSynthesizedByQt, // Qt::MouseEventSynthesizedByApplication - { - std::cout << "not supported wheelEvent.source(): " - "Qt::MouseEventSynthesizedByQt, " - "Qt::MouseEventSynthesizedByApplication" - << std::endl; - break; - } + { + std::cout << "not supported wheelEvent.source(): " + "Qt::MouseEventSynthesizedByQt, " + "Qt::MouseEventSynthesizedByApplication" + << std::endl; + break; + } } // end switch } @@ -833,7 +833,10 @@ m_dragTool->onDrag(&mouseEvent); void SpreadsheetViewer::keyPressEvent(QKeyEvent *e) { int frameCount = m_rowCount; int row = m_frameHandle->getFrame(); - + if (e->key() == Qt::Key_Space) { + m_panningArmed = true; + return; + } if (e->key() == Qt::Key_Up && row > 0) { // Row = frame precedente a quello settato m_frameHandle->setFrame(row - 1); @@ -883,6 +886,23 @@ void SpreadsheetViewer::keyPressEvent(QKeyEvent *e) { scroll(QPoint(0, deltaY)); } +//----------------------------------------------------------------------------- + +void SpreadsheetViewer::keyReleaseEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Space && !event->isAutoRepeat()) + m_panningArmed = false; +} + +//----------------------------------------------------------------------------- + +void SpreadsheetViewer::enterEvent(QEvent *) { m_panningArmed = false; } + +//----------------------------------------------------------------------------- + +void SpreadsheetViewer::leaveEvent(QEvent *) { m_panningArmed = false; } + +//----------------------------------------------------------------------------- + void SpreadsheetViewer::frameSwitched() {} /*