Made move selection work in view.
This commit is contained in:
+20
-2
@@ -114,9 +114,9 @@ namespace glabels
|
||||
|
||||
|
||||
///
|
||||
/// Delete Object
|
||||
/// Object at x,y
|
||||
///
|
||||
LabelModelObject* LabelModel::objectAt( double scale, double x, double y )
|
||||
LabelModelObject* LabelModel::objectAt( double scale, double x, double y ) const
|
||||
{
|
||||
foreach( LabelModelObject* object, mObjectList )
|
||||
{
|
||||
@@ -130,6 +130,24 @@ namespace glabels
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Handle at x,y
|
||||
///
|
||||
Handle* LabelModel::handleAt( double scale, double x, double y ) const
|
||||
{
|
||||
foreach( LabelModelObject* object, mObjectList )
|
||||
{
|
||||
Handle* handle = object->handleAt( scale, x, y );
|
||||
if ( handle )
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Object Changed Slot
|
||||
///
|
||||
|
||||
@@ -33,6 +33,7 @@ namespace glabels
|
||||
{
|
||||
// Forward References
|
||||
class LabelModelObject;
|
||||
class Handle;
|
||||
class LabelRegion;
|
||||
class ColorNode;
|
||||
|
||||
@@ -100,7 +101,8 @@ namespace glabels
|
||||
void addObject( LabelModelObject* object );
|
||||
void deleteObject( LabelModelObject* object );
|
||||
|
||||
LabelModelObject* objectAt( double scale, double x, double y );
|
||||
LabelModelObject* objectAt( double scale, double x, double y ) const;
|
||||
Handle* handleAt( double scale, double x, double y ) const;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -920,6 +920,27 @@ namespace glabels
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Is one of this object's handles locate at x,y? If so, return it.
|
||||
///
|
||||
Handle* LabelModelObject::handleAt( double scale, double x, double y ) const
|
||||
{
|
||||
QPointF p( x, y );
|
||||
p -= QPointF( mX0, mY0 ); // Translate point to x0,y0
|
||||
|
||||
foreach ( Handle* handle, mHandles )
|
||||
{
|
||||
QPainterPath handlePath = mMatrix.map( handle->path( scale ) );
|
||||
if ( handlePath.contains( p ) )
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Draw object + shadow
|
||||
///
|
||||
|
||||
@@ -386,6 +386,7 @@ namespace glabels
|
||||
void flipHoriz();
|
||||
void flipVert();
|
||||
bool isLocatedAt( double scale, double x, double y ) const;
|
||||
Handle* handleAt( double scale, double x, double y ) const;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
+73
-6
@@ -367,6 +367,7 @@ glabels::View::mouseMoveEvent( QMouseEvent* event )
|
||||
(yWorld - mMoveLastY) );
|
||||
mMoveLastX = xWorld;
|
||||
mMoveLastY = yWorld;
|
||||
update();
|
||||
break;
|
||||
|
||||
case ArrowResize:
|
||||
@@ -436,7 +437,58 @@ glabels::View::mousePressEvent( QMouseEvent* event )
|
||||
|
||||
if ( event->button() & Qt::LeftButton )
|
||||
{
|
||||
// Select Region
|
||||
//
|
||||
// LEFT BUTTON
|
||||
//
|
||||
|
||||
if ( !mInObjectCreateMode )
|
||||
{
|
||||
LabelModelObject* object = 0;
|
||||
Handle* handle = 0;
|
||||
if ( mModel->isSelectionAtomic() &&
|
||||
(handle = mModel->handleAt( mZoom, xWorld, yWorld )) != 0 )
|
||||
{
|
||||
// TODO PREP RESIZE
|
||||
}
|
||||
else if ( (object = mModel->objectAt( mZoom, xWorld, yWorld )) != 0 )
|
||||
{
|
||||
//
|
||||
// Start a Move Selection (adjusting selection if necessary)
|
||||
//
|
||||
if ( event->modifiers() & Qt::ControlModifier )
|
||||
{
|
||||
if ( object->isSelected() )
|
||||
{
|
||||
// Un-selecting a selected item
|
||||
mModel->unselectObject( object );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add to current selection
|
||||
mModel->selectObject( object );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !object->isSelected() )
|
||||
{
|
||||
// Replace current selection with this object
|
||||
mModel->unselectAll();
|
||||
mModel->selectObject( object );
|
||||
}
|
||||
}
|
||||
|
||||
mMoveLastX = xWorld;
|
||||
mMoveLastY = yWorld;
|
||||
|
||||
mState = ArrowMove;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Start a Select Region
|
||||
//
|
||||
if ( !(event->modifiers() & Qt::ControlModifier) )
|
||||
{
|
||||
mModel->unselectAll();
|
||||
@@ -451,8 +503,15 @@ glabels::View::mousePressEvent( QMouseEvent* event )
|
||||
mState = ArrowSelectRegion;
|
||||
update();
|
||||
}
|
||||
else
|
||||
}
|
||||
|
||||
}
|
||||
else if ( event->button() & Qt::RightButton )
|
||||
{
|
||||
//
|
||||
// RIGHT BUTTON
|
||||
//
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -479,11 +538,15 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event )
|
||||
|
||||
if ( event->button() & Qt::LeftButton )
|
||||
{
|
||||
switch (mState)
|
||||
//
|
||||
// LEFT BUTTON Release
|
||||
//
|
||||
|
||||
if ( !mInObjectCreateMode )
|
||||
{
|
||||
|
||||
case IdleState:
|
||||
break;
|
||||
switch (mState)
|
||||
{
|
||||
|
||||
case ArrowSelectRegion:
|
||||
mSelectRegionVisible = false;
|
||||
@@ -497,13 +560,17 @@ glabels::View::mouseReleaseEvent( QMouseEvent* event )
|
||||
break;
|
||||
|
||||
default:
|
||||
// Should not happen!
|
||||
mState = IdleState;
|
||||
update();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user