From 3fac754e2ee3b056f1000278168f043b683a4db0 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 22 Jun 2012 18:45:53 +0300 Subject: [PATCH] Long press implemented. PlayTool -> SelectTool SelectTool -> PlayTool EraiserTool -> shows EraserPalette. --- src/board/UBBoardPaletteManager.h | 3 +- src/board/UBBoardView.cpp | 72 ++++++++++++++++++++++++++++--- src/board/UBBoardView.h | 6 +++ 3 files changed, 74 insertions(+), 7 deletions(-) diff --git a/src/board/UBBoardPaletteManager.h b/src/board/UBBoardPaletteManager.h index cdb02870..eef04194 100644 --- a/src/board/UBBoardPaletteManager.h +++ b/src/board/UBBoardPaletteManager.h @@ -89,6 +89,8 @@ class UBBoardPaletteManager : public QObject void slot_changeMainMode(UBApplicationController::MainMode); void slot_changeDesktopMode(bool); + void toggleErasePalette(bool ckecked); + private: void setupPalettes(); @@ -168,7 +170,6 @@ class UBBoardPaletteManager : public QObject void erasePaletteButtonPressed(); void erasePaletteButtonReleased(); - void toggleErasePalette(bool ckecked); void erasePaletteClosed(); void togglePagePalette(bool ckecked); diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 9e4b985d..cbacf2b0 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -40,6 +40,7 @@ #include "gui/UBTeacherGuideWidgetsTools.h" #include "board/UBBoardController.h" +#include "board/UBBoardPaletteManager.h" #include "domain/UBGraphicsTextItem.h" #include "domain/UBGraphicsPixmapItem.h" @@ -68,23 +69,33 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent) , mIsCreatingSceneGrabZone (false) , mOkOnWidget(false) , suspendedMousePressEvent(NULL) +, mLongPressInterval(1000) +, mIsDragInProgress(false) { init (); mFilterZIndex = false; + + mLongPressTimer.setInterval(mLongPressInterval); + mLongPressTimer.setSingleShot(true); } UBBoardView::UBBoardView (UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent) : QGraphicsView (pParent) , mController (pController) , suspendedMousePressEvent(NULL) +, mLongPressInterval(1000) +, mIsDragInProgress(false) { init (); mStartLayer = pStartLayer; mEndLayer = pEndLayer; - mFilterZIndex = true; + mFilterZIndex = true; + + mLongPressTimer.setInterval(mLongPressInterval); + mLongPressTimer.setSingleShot(true); } UBBoardView::~UBBoardView () { @@ -621,10 +632,7 @@ void UBBoardView::rubberItems() void UBBoardView::moveRubberedItems(QPointF movingVector) { -// QRect bandRect = mUBRubberBand->geometry(); -// - QRectF invalidateRect = scene()->itemsBoundingRect(); -// QList rubberItems = items(bandRect); + QRectF invalidateRect = scene()->itemsBoundingRect(); foreach (QGraphicsItem *item, mRubberedItems) { @@ -644,8 +652,35 @@ void UBBoardView::moveRubberedItems(QPointF movingVector) scene()->invalidate(invalidateRect); } +void UBBoardView::longPressEvent() +{ + UBDrawingController *drawingController = UBDrawingController::drawingController(); + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); + + + disconnect(&mLongPressTimer, SIGNAL(timeout()), this, SLOT(longPressEvent())); + + if (UBStylusTool::Selector == currentTool) + { + drawingController->setStylusTool(UBStylusTool::Play); + } + else + if (currentTool == UBStylusTool::Play) + { + drawingController->setStylusTool(UBStylusTool::Selector); + } + else + if (UBStylusTool::Eraser == currentTool) + { + UBApplication::boardController->paletteManager()->toggleErasePalette(true); + } + +} + void UBBoardView::mousePressEvent (QMouseEvent *event) { + mIsDragInProgress = false; + if (isAbsurdPoint (event->pos ())) { event->accept (); @@ -680,10 +715,18 @@ void UBBoardView::mousePressEvent (QMouseEvent *event) mPreviousPoint = event->posF (); event->accept (); } + else if (currentTool == UBStylusTool::Eraser) + { + connect(&mLongPressTimer, SIGNAL(timeout()), this, SLOT(longPressEvent())); + mLongPressTimer.start(); + } else if (currentTool == UBStylusTool::Selector || currentTool == UBStylusTool::Play) { movingItem = scene()->itemAt(this->mapToScene(event->posF().toPoint())); - + + connect(&mLongPressTimer, SIGNAL(timeout()), this, SLOT(longPressEvent())); + mLongPressTimer.start(); + if (!movingItem) { // Rubberband selection implementation if (!mUBRubberBand) { @@ -692,6 +735,10 @@ void UBBoardView::mousePressEvent (QMouseEvent *event) mUBRubberBand->setGeometry (QRect (mMouseDownPos, QSize ())); mUBRubberBand->show(); } + else + { + mUBRubberBand->hide(); + } handleItemMousePress(event); event->accept(); @@ -760,6 +807,12 @@ void UBBoardView::mousePressEvent (QMouseEvent *event) void UBBoardView::mouseMoveEvent (QMouseEvent *event) { + if(!mIsDragInProgress && ((mapToScene(event->pos()) - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance())) + { + return; + } + + mIsDragInProgress = true; UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); if (isAbsurdPoint (event->pos ())) @@ -777,12 +830,18 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event) mPreviousPoint = eventPosition; event->accept (); } + else if (currentTool == UBStylusTool::Eraser) + { + mLongPressTimer.stop(); + } else if (currentTool == UBStylusTool::Selector || currentTool == UBStylusTool::Play) { if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()) { return; } + mLongPressTimer.stop(); + if (!movingItem && (mMouseButtonIsPressed || mTabletStylusIsPressed) && mUBRubberBand && mUBRubberBand->isVisible()) { QRect bandRect(mMouseDownPos, event->pos()); @@ -963,6 +1022,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) mPendingStylusReleaseEvent = false; mTabletStylusIsPressed = false; + mLongPressTimer.stop(); } void diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h index f473ac92..b8b6429f 100644 --- a/src/board/UBBoardView.h +++ b/src/board/UBBoardView.h @@ -142,6 +142,11 @@ class UBBoardView : public QGraphicsView QList mRubberedItems; QSet mJustSelectedItems; + int mLongPressInterval; + QTimer mLongPressTimer; + + bool mIsDragInProgress; + private slots: void settingChanged(QVariant newValue); @@ -149,6 +154,7 @@ class UBBoardView : public QGraphicsView public slots: void virtualKeyboardActivated(bool b); + void longPressEvent(); };