Consolidated create mode into states.

This commit is contained in:
Jim Evins
2015-09-20 12:59:31 -04:00
parent 1f4330ff6e
commit 267830e902
2 changed files with 142 additions and 163 deletions
+134 -155
View File
@@ -83,7 +83,6 @@ glabels::View::View( QScrollArea* scrollArea, QWidget* parent )
mMarkupVisible = true; mMarkupVisible = true;
mGridVisible = true; mGridVisible = true;
mGridSpacing = 18; mGridSpacing = 18;
mInObjectCreateMode = false;
setMouseTracking( true ); setMouseTracking( true );
} }
@@ -300,7 +299,6 @@ glabels::View::arrowMode()
{ {
setCursor( Qt::ArrowCursor ); setCursor( Qt::ArrowCursor );
mInObjectCreateMode = false;
mState = IdleState; mState = IdleState;
} }
@@ -313,9 +311,8 @@ glabels::View::createBoxMode()
{ {
setCursor( Cursors::Box() ); setCursor( Cursors::Box() );
mInObjectCreateMode = true;
mCreateObjectType = Box; mCreateObjectType = Box;
mState = IdleState; mState = CreateIdle;
} }
@@ -369,13 +366,11 @@ glabels::View::mousePressEvent( QMouseEvent* event )
// //
// LEFT BUTTON // LEFT BUTTON
// //
switch (mState)
if ( !mInObjectCreateMode )
{ {
//
// NORMAL MODE
//
case IdleState:
{
LabelModelObject* object = 0; LabelModelObject* object = 0;
Handle* handle = 0; Handle* handle = 0;
if ( mModel->isSelectionAtomic() && if ( mModel->isSelectionAtomic() &&
@@ -443,52 +438,57 @@ glabels::View::mousePressEvent( QMouseEvent* event )
update(); update();
} }
} }
else break;
case CreateIdle:
{ {
// switch ( mCreateObjectType )
// OBJECT CREATION MODE
//
if ( mState == IdleState )
{ {
switch ( mCreateObjectType ) case Box:
{ mCreateObject = new LabelModelBoxObject();
case Box: break;
mCreateObject = new LabelModelBoxObject(); case Ellipse:
break; // mCreateObject = new LabelModelEllipseObject();
case Ellipse: break;
// mCreateObject = new LabelModelEllipseObject(); case Line:
break; // mCreateObject = new LabelModelLineObject();
case Line: break;
// mCreateObject = new LabelModelLineObject(); case Image:
break; // mCreateObject = new LabelModelImageObject();
case Image: break;
// mCreateObject = new LabelModelImageObject(); case Text:
break; // mCreateObject = new LabelModelTextObject();
case Text: break;
// mCreateObject = new LabelModelTextObject(); case Barcode:
break; // mCreateObject = new LabelModelBarcodeObject();
case Barcode: break;
// mCreateObject = new LabelModelBarcodeObject(); default:
break; qDebug() << "View::mousePressEvent: Invalid creation type. Should not happen!";
default: break;
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;
} }
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 // 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 ) )
{ {
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;
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) );
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; break;
case Line:
case ArrowSelectRegion: mCreateObject->setSize( xWorld - mCreateX0, yWorld - mCreateY0 );
mSelectRegion.setX2( xWorld );
mSelectRegion.setY2( yWorld );
update();
break; break;
case ArrowMove:
mModel->moveSelection( (xWorld - mMoveLastX),
(yWorld - mMoveLastY) );
mMoveLastX = xWorld;
mMoveLastY = yWorld;
break;
case ArrowResize:
handleResizeMotion( xWorld, yWorld );
break;
default: default:
// Should not happen! qDebug() << "View::mouseMoveEvent: Invalid creation mode. Should not happen!";
Q_ASSERT_X( false, "View::::mouseMoveEvent", "Invalid state" );
break; break;
} }
} break;
else
{
//
// OBJECT CREATION MODE
//
if ( mState != IdleState ) default:
{ qDebug() << "View::mouseMoveEvent: Invalid state. Should not happen!";
switch (mCreateObjectType) break;
{
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;
}
}
} }
} }
} }
@@ -646,44 +636,25 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event )
// //
// LEFT BUTTON Release // LEFT BUTTON Release
// //
switch (mState)
if ( !mInObjectCreateMode )
{ {
///
/// NORMAL MODE
///
switch (mState) case ArrowResize:
{ mState = IdleState;
break;
case ArrowResize: case ArrowSelectRegion:
mState = IdleState; mSelectRegionVisible = false;
break; mSelectRegion.setX2( xWorld );
mSelectRegion.setY2( yWorld );
case ArrowSelectRegion: mModel->selectRegion( mSelectRegion );
mSelectRegionVisible = false;
mSelectRegion.setX2( xWorld );
mSelectRegion.setY2( yWorld );
mModel->selectRegion( mSelectRegion ); mState = IdleState;
update();
mState = IdleState; break;
update();
break;
default:
mState = IdleState;
break;
}
}
else
{
//
// OBJECT CREATION MODE
//
case CreateDrag:
if ( (fabs(mCreateObject->w()) < 4) && (fabs(mCreateObject->h()) < 4) ) if ( (fabs(mCreateObject->w()) < 4) && (fabs(mCreateObject->h()) < 4) )
{ {
switch (mCreateObjectType) switch (mCreateObjectType)
@@ -700,8 +671,16 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event )
} }
} }
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; y0 = y0 + y1;
break; break;
default: default:
Q_ASSERT_X( false, "View::handleResizeMotion", "Invalid Handle Location" ); qDebug() << "View::handleResizeMotion: Invalid Handle Location. Should not happen!";
} }
/* /*
+1 -1
View File
@@ -156,6 +156,7 @@ namespace glabels
ArrowSelectRegion, ArrowSelectRegion,
ArrowMove, ArrowMove,
ArrowResize, ArrowResize,
CreateIdle,
CreateDrag CreateDrag
}; };
@@ -199,7 +200,6 @@ namespace glabels
bool mResizeHonorAspect; bool mResizeHonorAspect;
/* CreateDrag state */ /* CreateDrag state */
bool mInObjectCreateMode;
CreateType mCreateObjectType; CreateType mCreateObjectType;
LabelModelObject* mCreateObject; LabelModelObject* mCreateObject;
double mCreateX0; double mCreateX0;