Consolidated create mode into states.
This commit is contained in:
+134
-155
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user