From 267830e9022ce85c973018e232e9c0359d600f31 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sun, 20 Sep 2015 12:59:31 -0400 Subject: [PATCH] Consolidated create mode into states. --- glabels/View.cpp | 303 ++++++++++++++++++++++------------------------- glabels/View.h | 2 +- 2 files changed, 142 insertions(+), 163 deletions(-) diff --git a/glabels/View.cpp b/glabels/View.cpp index a6fb78e..cea5e97 100644 --- a/glabels/View.cpp +++ b/glabels/View.cpp @@ -83,7 +83,6 @@ glabels::View::View( QScrollArea* scrollArea, QWidget* parent ) mMarkupVisible = true; mGridVisible = true; mGridSpacing = 18; - mInObjectCreateMode = false; setMouseTracking( true ); } @@ -300,7 +299,6 @@ glabels::View::arrowMode() { setCursor( Qt::ArrowCursor ); - mInObjectCreateMode = false; mState = IdleState; } @@ -313,9 +311,8 @@ glabels::View::createBoxMode() { setCursor( Cursors::Box() ); - mInObjectCreateMode = true; mCreateObjectType = Box; - mState = IdleState; + mState = CreateIdle; } @@ -369,13 +366,11 @@ glabels::View::mousePressEvent( QMouseEvent* event ) // // LEFT BUTTON // - - if ( !mInObjectCreateMode ) + switch (mState) + { + + case IdleState: { - // - // NORMAL MODE - // - LabelModelObject* object = 0; Handle* handle = 0; if ( mModel->isSelectionAtomic() && @@ -443,52 +438,57 @@ glabels::View::mousePressEvent( QMouseEvent* event ) update(); } } - else + break; + + + case CreateIdle: { - // - // OBJECT CREATION MODE - // - - if ( mState == IdleState ) + switch ( mCreateObjectType ) { - switch ( mCreateObjectType ) - { - case Box: - mCreateObject = new LabelModelBoxObject(); - break; - case Ellipse: - // mCreateObject = new LabelModelEllipseObject(); - break; - case Line: - // mCreateObject = new LabelModelLineObject(); - break; - case Image: - // mCreateObject = new LabelModelImageObject(); - break; - case Text: - // mCreateObject = new LabelModelTextObject(); - break; - case Barcode: - // mCreateObject = new LabelModelBarcodeObject(); - break; - default: - Q_ASSERT_X( false, "View::::mousePressEvent", "Invalid creation type" ); - break; - } - - mCreateObject->setPosition( xWorld, yWorld ); - mCreateObject->setSize( 0, 0 ); - mModel->addObject( mCreateObject ); - - mModel->unselectAll(); - mModel->selectObject( mCreateObject ); - - mCreateX0 = xWorld; - mCreateY0 = yWorld; - - mState = CreateDrag; + case Box: + mCreateObject = new LabelModelBoxObject(); + break; + case Ellipse: + // mCreateObject = new LabelModelEllipseObject(); + break; + case Line: + // mCreateObject = new LabelModelLineObject(); + break; + case Image: + // mCreateObject = new LabelModelImageObject(); + break; + case Text: + // mCreateObject = new LabelModelTextObject(); + break; + case Barcode: + // mCreateObject = new LabelModelBarcodeObject(); + break; + default: + qDebug() << "View::mousePressEvent: Invalid creation type. Should not happen!"; + break; } - + + mCreateObject->setPosition( xWorld, yWorld ); + mCreateObject->setSize( 0, 0 ); + mModel->addObject( mCreateObject ); + + mModel->unselectAll(); + mModel->selectObject( mCreateObject ); + + mCreateX0 = xWorld; + mCreateY0 = yWorld; + + mState = CreateDrag; + } + break; + + + default: + { + qDebug() << "View::mousePressEvent: Invalid state. Should not happen!"; + } + break; + } } @@ -497,7 +497,10 @@ glabels::View::mousePressEvent( QMouseEvent* event ) // // RIGHT BUTTON // - emit contextMenuActivate(); + if ( mState == IdleState ) + { + emit contextMenuActivate(); + } } } } @@ -534,87 +537,74 @@ glabels::View::mouseMoveEvent( QMouseEvent* event ) /* - * Handle event as appropriate for mode + * Handle event as appropriate for state */ - if ( !mInObjectCreateMode ) + switch (mState) { - /// - /// NORMAL MODE - /// - switch (mState) + case IdleState: + if ( mModel->isSelectionAtomic() && + mModel->handleAt( mScale, xWorld, yWorld ) ) { - - case IdleState: - if ( mModel->isSelectionAtomic() && - mModel->handleAt( mScale, xWorld, yWorld ) ) - { - setCursor( Qt::CrossCursor ); - } - else if ( mModel->objectAt( mScale, xWorld, yWorld ) ) - { - setCursor( Qt::SizeAllCursor ); - } - else - { - setCursor( Qt::ArrowCursor ); - } - break; - - case ArrowSelectRegion: - mSelectRegion.setX2( xWorld ); - mSelectRegion.setY2( yWorld ); - update(); - break; - - case ArrowMove: - mModel->moveSelection( (xWorld - mMoveLastX), - (yWorld - mMoveLastY) ); - mMoveLastX = xWorld; - mMoveLastY = yWorld; - break; - - case ArrowResize: - handleResizeMotion( xWorld, yWorld ); - break; - - default: - // Should not happen! - Q_ASSERT_X( false, "View::::mouseMoveEvent", "Invalid state" ); - break; - + setCursor( Qt::CrossCursor ); } - } - else - { - // - // OBJECT CREATION MODE - // - - if ( mState != IdleState ) + else if ( mModel->objectAt( mScale, xWorld, yWorld ) ) { - switch (mCreateObjectType) - { - case Box: - case Ellipse: - case Image: - case Text: - case Barcode: - mCreateObject->setPosition( min( xWorld, mCreateX0 ), - min( yWorld, mCreateY0 ) ); - mCreateObject->setSize( max(xWorld,mCreateX0) - min(xWorld,mCreateX0), - max(yWorld,mCreateY0) - min(yWorld,mCreateY0) ); + setCursor( Qt::SizeAllCursor ); + } + else + { + setCursor( Qt::ArrowCursor ); + } + break; + + case ArrowSelectRegion: + mSelectRegion.setX2( xWorld ); + mSelectRegion.setY2( yWorld ); + update(); + break; + + case ArrowMove: + mModel->moveSelection( (xWorld - mMoveLastX), + (yWorld - mMoveLastY) ); + mMoveLastX = xWorld; + mMoveLastY = yWorld; + break; + + case ArrowResize: + handleResizeMotion( xWorld, yWorld ); + break; + + case CreateIdle: + break; + + case CreateDrag: + switch (mCreateObjectType) + { + case Box: + case Ellipse: + case Image: + case Text: + case Barcode: + mCreateObject->setPosition( min( xWorld, mCreateX0 ), + min( yWorld, mCreateY0 ) ); + mCreateObject->setSize( max(xWorld,mCreateX0) - min(xWorld,mCreateX0), + max(yWorld,mCreateY0) - min(yWorld,mCreateY0) ); - break; - case Line: - mCreateObject->setSize( xWorld - mCreateX0, yWorld - mCreateY0 ); - break; - default: - // Should not happen! - Q_ASSERT_X( false, "View::::mouseMoveEvent", "Invalid creation mode" ); - break; - } + break; + case Line: + mCreateObject->setSize( xWorld - mCreateX0, yWorld - mCreateY0 ); + break; + default: + qDebug() << "View::mouseMoveEvent: Invalid creation mode. Should not happen!"; + break; } + break; + + default: + qDebug() << "View::mouseMoveEvent: Invalid state. Should not happen!"; + break; + } } } @@ -646,44 +636,25 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event ) // // LEFT BUTTON Release // - - if ( !mInObjectCreateMode ) + switch (mState) { - /// - /// NORMAL MODE - /// - - switch (mState) - { - case ArrowResize: - mState = IdleState; - break; + case ArrowResize: + mState = IdleState; + break; - case ArrowSelectRegion: - mSelectRegionVisible = false; - mSelectRegion.setX2( xWorld ); - mSelectRegion.setY2( yWorld ); + case ArrowSelectRegion: + mSelectRegionVisible = false; + mSelectRegion.setX2( xWorld ); + mSelectRegion.setY2( yWorld ); - mModel->selectRegion( mSelectRegion ); + mModel->selectRegion( mSelectRegion ); - mState = IdleState; - update(); - break; - - default: - mState = IdleState; - break; - - } - - } - else - { - // - // OBJECT CREATION MODE - // + mState = IdleState; + update(); + break; + case CreateDrag: if ( (fabs(mCreateObject->w()) < 4) && (fabs(mCreateObject->h()) < 4) ) { switch (mCreateObjectType) @@ -699,9 +670,17 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event ) break; } } - - arrowMode(); + + setCursor( Qt::ArrowCursor ); + mState = IdleState; + break; + + default: + mState = IdleState; + break; + } + } } } @@ -800,7 +779,7 @@ glabels::View::handleResizeMotion( double xWorld, double yWorld ) y0 = y0 + y1; break; default: - Q_ASSERT_X( false, "View::handleResizeMotion", "Invalid Handle Location" ); + qDebug() << "View::handleResizeMotion: Invalid Handle Location. Should not happen!"; } /* diff --git a/glabels/View.h b/glabels/View.h index 26ccd21..c85a150 100644 --- a/glabels/View.h +++ b/glabels/View.h @@ -156,6 +156,7 @@ namespace glabels ArrowSelectRegion, ArrowMove, ArrowResize, + CreateIdle, CreateDrag }; @@ -199,7 +200,6 @@ namespace glabels bool mResizeHonorAspect; /* CreateDrag state */ - bool mInObjectCreateMode; CreateType mCreateObjectType; LabelModelObject* mCreateObject; double mCreateX0;