initial import
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
/************************************************************************
|
||||
* $Id: droppeditem.cpp 661 2011-04-05 13:16:53Z elzubeir $
|
||||
*
|
||||
* ------------
|
||||
* Description:
|
||||
* ------------
|
||||
*
|
||||
* (C) Copyright 2009-2011 ALLCONTENT. All rights reserved.
|
||||
*
|
||||
* -----------------
|
||||
* Revision Details: (Updated by Revision Control System)
|
||||
* -----------------
|
||||
* $Date: 2011-04-05 17:16:53 +0400 (Tue, 05 Apr 2011) $
|
||||
* $Author: elzubeir $
|
||||
* $Revision: 661 $
|
||||
* $HeadURL: file:///opt/svn/socialhose/trunk/app/ClippingStation/droppeditem.cpp $
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include "droppeditem.h"
|
||||
#include "pageitem.h"
|
||||
|
||||
#include <QKeyEvent>
|
||||
#include <QtDebug>
|
||||
#include <QTime>
|
||||
#include <QGraphicsScene>
|
||||
#include <QMessageBox>
|
||||
#include <QPainter>
|
||||
|
||||
DroppedItem::DroppedItem(const QPixmap & pixmap, const QPointF & scenePos, qreal perc, QGraphicsItem * parent /*=0*/) :
|
||||
QGraphicsPixmapItem(pixmap, parent),
|
||||
m_originalPixmap(pixmap),
|
||||
m_imageWidth(m_originalPixmap.width())
|
||||
{
|
||||
// set position with scene position.
|
||||
setPos(scenePos);
|
||||
setZValue(0.9);
|
||||
// make the item selectable, movable & focusable
|
||||
setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||
setFlag(QGraphicsItem::ItemIsMovable, true);
|
||||
setFlag(QGraphicsItem::ItemIsFocusable,true);
|
||||
|
||||
m_pageItem = static_cast<PageItem*> (parentItem());
|
||||
|
||||
//setPixmap(m_originalPixmap);
|
||||
|
||||
m_zoomDlg = new DroppedItemZoomDialog(this, 0);
|
||||
m_zoomDlg->setValue(static_cast<int>(perc*100));
|
||||
|
||||
setPixmap(m_originalPixmap);
|
||||
//qreal w = m_currentValue/100.0;
|
||||
//setTransformationMode(Qt::SmoothTransformation);
|
||||
//setTransform(QTransform().scale(w, w));
|
||||
m_originalImage = m_originalPixmap.toImage();
|
||||
}
|
||||
|
||||
|
||||
DroppedItem::~DroppedItem()
|
||||
{
|
||||
qDebug("~DroppedItem()");
|
||||
|
||||
//if (m_pageItem)
|
||||
//{
|
||||
// delete m_pageItem;
|
||||
// m_pageItem = 0;
|
||||
//}
|
||||
|
||||
if(m_zoomDlg)
|
||||
{
|
||||
delete m_zoomDlg;
|
||||
m_zoomDlg = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int DroppedItem::type() const
|
||||
{
|
||||
return Type;
|
||||
}
|
||||
|
||||
void DroppedItem::keyPressEvent(QKeyEvent * event)
|
||||
{
|
||||
if (event->key() == Qt::Key_Delete && isSelected())
|
||||
{
|
||||
// remove item when key press event is Suppr.
|
||||
scene()->removeItem(this);
|
||||
return;
|
||||
}
|
||||
|
||||
else if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Minus )
|
||||
{
|
||||
m_currentValue -= 5;
|
||||
zoom(m_currentValue);
|
||||
}
|
||||
else if(event->modifiers() == Qt::AltModifier && event->key() == Qt::Key_Minus )
|
||||
{
|
||||
m_currentValue -= 1;
|
||||
zoom(m_currentValue);
|
||||
}
|
||||
else if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_Equal )
|
||||
{
|
||||
m_currentValue += 5;
|
||||
zoom(m_currentValue);
|
||||
}
|
||||
else if(event->modifiers() == Qt::AltModifier && event->key() == Qt::Key_Equal )
|
||||
{
|
||||
m_currentValue += 1;
|
||||
zoom(m_currentValue);
|
||||
}
|
||||
else if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_0 )
|
||||
{
|
||||
zoom(100); //restore to 100%
|
||||
}
|
||||
else if(event->key() == Qt::Key_Left)
|
||||
{
|
||||
qreal x = this->pos().x();
|
||||
this->setPos(x-5, pos().y());
|
||||
//return;
|
||||
}
|
||||
else if(event->key() == Qt::Key_Right)
|
||||
{
|
||||
qreal x = this->pos().x();
|
||||
this->setPos(x+5, pos().y());
|
||||
//return;
|
||||
}
|
||||
else if(event->key() == Qt::Key_Up)
|
||||
{
|
||||
qreal y = this->pos().y();
|
||||
this->setPos(pos().x(), y-5);
|
||||
//return;
|
||||
}
|
||||
else if(event->key() == Qt::Key_Down)
|
||||
{
|
||||
qreal y = this->pos().y();
|
||||
this->setPos(pos().x(), y+5);
|
||||
//return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//check if the new position is within the boundary of the page
|
||||
QGraphicsPixmapItem::keyPressEvent(event);
|
||||
}
|
||||
|
||||
checkBoundary( pos().x(), pos().y() );
|
||||
}
|
||||
|
||||
void DroppedItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
m_zoomDlg->setValue(m_currentValue);
|
||||
m_zoomDlg->exec();
|
||||
|
||||
}
|
||||
|
||||
void DroppedItem::zoom(int value)
|
||||
{
|
||||
m_currentValue = value;
|
||||
//update(this->boundingRect().toRect());
|
||||
prepareGeometryChange();
|
||||
}
|
||||
|
||||
void DroppedItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if (event->button() != Qt::LeftButton)
|
||||
{
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
|
||||
checkBoundary(event->pos().toPoint(), true);
|
||||
if(m_tweakingpart != "")
|
||||
m_tweaking = true;
|
||||
|
||||
QGraphicsPixmapItem::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void DroppedItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
|
||||
if(m_tweaking)
|
||||
{
|
||||
QPoint pt = event->pos().toPoint();
|
||||
m_rectangle = this->boundingRect().toRect();
|
||||
qreal value = 1.0;
|
||||
|
||||
/*
|
||||
if ( m_tweakingpart == "topLeft" ) m_rectangle . setTopLeft ( pt ) ;
|
||||
else if ( m_tweakingpart == "topRight" ) m_rectangle . setTopRight ( pt ) ;
|
||||
else if ( m_tweakingpart == "bottomLeft" ) m_rectangle . setBottomLeft ( pt ) ;
|
||||
else if ( m_tweakingpart == "bottomRight" ) m_rectangle . setBottomRight ( pt ) ;
|
||||
else if ( m_tweakingpart == "top" ) m_rectangle . setTop ( pt . y () ) ;
|
||||
else
|
||||
*/
|
||||
/*else if ( m_tweakingpart == "left" ) m_rectangle . setLeft ( pt . x () ) ;*/
|
||||
|
||||
if ( m_tweakingpart == "bottomRight" ) { m_rectangle . setBottomRight ( pt ) ; value = static_cast<qreal> (m_rectangle.height() / (m_originalPixmap.height()*1.0) );}
|
||||
else if ( m_tweakingpart == "bottom" ) { m_rectangle . setBottom ( pt . y () ) ; value = static_cast<qreal> (m_rectangle.height() / (m_originalPixmap.height()*1.0) );}
|
||||
else if ( m_tweakingpart == "right" ) { m_rectangle . setRight ( pt . x () ) ; value = static_cast<qreal> (m_rectangle.width() / (m_originalPixmap.width() *1.0) );}
|
||||
|
||||
zoom(value*100);
|
||||
}
|
||||
else
|
||||
{
|
||||
QGraphicsPixmapItem::mouseMoveEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void DroppedItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
m_tweaking = false ;
|
||||
m_tweakingpart = "" ;
|
||||
|
||||
setCursor(QCursor(Qt::OpenHandCursor));
|
||||
|
||||
//QPointF pt = mapToScene(pos().x(), pos().y());
|
||||
//pt = mapToItem(m_pageItem, pt);
|
||||
|
||||
QPointF pt = pos();
|
||||
//pt.setX(pt.x() * m_currentValue/100.0);
|
||||
//pt.setX(pt.y() * m_currentValue/100.0);
|
||||
|
||||
checkBoundary(pt.x(), pt.y());
|
||||
|
||||
QGraphicsPixmapItem::mouseReleaseEvent(event);
|
||||
|
||||
//setPixmap(m_originalPixmap);
|
||||
|
||||
}
|
||||
|
||||
void DroppedItem::checkBoundary(qreal x, qreal y)
|
||||
{
|
||||
//*
|
||||
qreal w, h;
|
||||
QPolygonF rec = mapToItem(m_pageItem, boundingRect());
|
||||
|
||||
w = rec.boundingRect().width();
|
||||
h = rec.boundingRect().height();
|
||||
|
||||
if ( y < m_pageItem->margin().top())
|
||||
y = m_pageItem->margin().top();
|
||||
if ( x < m_pageItem->margin().left() )
|
||||
x = m_pageItem->margin().left();
|
||||
if ( x+w > (m_pageItem->width() - m_pageItem->margin().right()) )
|
||||
x = m_pageItem->width() - m_pageItem->margin().right() - w;
|
||||
if ( y+h > (m_pageItem->height() - m_pageItem->margin().bottom()) )
|
||||
y = m_pageItem->height() - m_pageItem->margin().bottom() - h;
|
||||
|
||||
setPos(x, y);
|
||||
}
|
||||
|
||||
void DroppedItem::checkBoundary(QPoint pt, bool t)
|
||||
{
|
||||
m_rectangle = this->boundingRect().toRect();
|
||||
|
||||
if ( m_rectangle.isValid() )
|
||||
{
|
||||
QPoint m_tl = m_rectangle.topLeft();
|
||||
QPoint m_tr = m_rectangle.topRight();
|
||||
QPoint m_bl = m_rectangle.bottomLeft();
|
||||
QPoint m_br = m_rectangle.bottomRight();
|
||||
|
||||
const QPoint off(20, 20), offx(20, -20), offy(-20, 20);
|
||||
|
||||
if( QRect( m_br-off, m_br+off).contains(pt) )
|
||||
{
|
||||
if (t)
|
||||
m_tweakingpart = "bottomRight" ;
|
||||
this->setCursor( Qt::SizeFDiagCursor );
|
||||
}
|
||||
else if( QRect( m_bl+offx, m_br-offx ).contains(pt) )
|
||||
{
|
||||
if (t)
|
||||
m_tweakingpart = "bottom";
|
||||
this->setCursor( Qt::SizeVerCursor ) ;
|
||||
}
|
||||
else if( QRect( m_tr+offy, m_br-offy ).contains(pt) )
|
||||
{
|
||||
if (t)
|
||||
m_tweakingpart = "right";
|
||||
this->setCursor( Qt::SizeHorCursor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DroppedItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
painter->drawImage(boundingRect().toRect(),getScaledImage());
|
||||
}
|
||||
|
||||
QRectF DroppedItem::boundingRect() const
|
||||
{
|
||||
qreal w = (m_currentValue/100.0) * m_originalPixmap.width();
|
||||
qreal h = (m_currentValue/100.0) * m_originalPixmap.height();
|
||||
|
||||
return QRectF(QPointF(0,0), QPointF(w, h));
|
||||
}
|
||||
|
||||
|
||||
QImage DroppedItem::getScaledImage()
|
||||
{
|
||||
//QImage originalImage = m_originalPixmap.toImage();
|
||||
|
||||
qreal w = (m_currentValue/100.0) * m_originalPixmap.width();
|
||||
qreal h = (m_currentValue/100.0) * m_originalPixmap.height();
|
||||
|
||||
QSizeF size(w, h);
|
||||
QImage image(size.toSize(), QImage::Format_RGB888);
|
||||
|
||||
image = m_originalImage.scaledToWidth(w, Qt::SmoothTransformation);
|
||||
return image;
|
||||
}
|
||||
Reference in New Issue
Block a user