Brief description of class still missing. More...
#include <DrawView.h>
Public Types | |
| enum | SnapOption { NoSnap = 0, SnapX = 1, SnapY = 2 } |
| enum | SnapType { SnapNodes, SnapGrid, SnapContours } |
Signals | |
| void | mouseMoved (const QPointF &p) |
| void | mouseReleased (const QPointF &p) |
Public Member Functions | |
| DrawView (DrawScene *scene) | |
| DrawScene * | scene () const |
| void | setMousePoint (const QPointF &p) |
| void | setSnapOption (SnapOptions ms) |
| void | setSnapType (SnapType ms) |
| SnapOptions | snapOption () const |
| SnapType | snapType () const |
| ~DrawView () | |
Protected Member Functions | |
| virtual void | drawBackground (QPainter *painter, const QRectF &rect) |
| virtual void | drawForeground (QPainter *painter, const QRectF &rect) |
| virtual void | mouseMoveEvent (QMouseEvent *e) |
| virtual void | mouseReleaseEvent (QMouseEvent *e) |
| virtual void | wheelEvent (QWheelEvent *e) |
Brief description of class still missing.
Full description of class still missing
| enum DrawView::SnapOption |
| enum DrawView::SnapType |
| DrawView::DrawView | ( | DrawScene * | scene | ) |
| void DrawView::drawBackground | ( | QPainter * | painter, |
| const QRectF & | rect | ||
| ) | [protected, virtual] |
{
painter->save();
QRectF r=mapToScene(viewport()->rect()).boundingRect();
qreal xMajor, xMinor, yMajor, yMinor;
autoTicks(r.width(), xMajor, xMinor);
autoTicks(r.height(), yMajor, yMinor);
qreal val, start;
// Minor grid lines
painter->setPen(QPen(QColor(240,240,240)));
start=ceil(rect.left()/xMinor)*xMinor;
for(val=start; val<=rect.right(); val+=xMinor) {
painter->drawLine(QLineF( val, r.top(), val, r.bottom()) );
}
start=ceil(rect.top()/yMinor)*yMinor;
for(val=start; val<=rect.bottom(); val+=yMinor) {
painter->drawLine(QLineF( r.left(), val, r.right(), val) );
}
// Major grid lines
painter->setPen(QPen(QColor(200,200,200)));
start=ceil(rect.left()/xMajor)*xMajor;
for(val=start; val<=rect.right(); val+=xMajor) {
painter->drawLine(QLineF( val, r.top(), val, r.bottom()) );
}
start=ceil(rect.top()/yMajor)*yMajor;
for(val=start; val<=rect.bottom(); val+=yMajor) {
painter->drawLine(QLineF( r.left(), val, r.right(), val) );
}
painter->restore();
}
| void DrawView::drawForeground | ( | QPainter * | painter, |
| const QRectF & | rect | ||
| ) | [protected, virtual] |
References DrawScene::currentPoint(), scene(), and w.
{
painter->save();
painter->setPen(QPen(QColor(220,0,0)));
// Draw current point
QPointF currentPointF=scene()->currentPoint();
QPoint currentPoint=mapFromScene(currentPointF);
QRect currentRect(currentPoint.x()-5, currentPoint.y()-5, 10, 10);
QRectF currentRectF=mapToScene(currentRect).boundingRect();
if(currentRectF.intersects(rect) ) {
QPointF c=currentRectF.center();
qreal dx=0.5 * currentRectF.width();
qreal dy=0.5 * currentRectF.height();
painter->drawLine(QLineF( c.x()-dx, c.y(), c.x()+dx, c.y()) );
painter->drawLine(QLineF( c.x(), c.y()-dy, c.x(), c.y()+dy) );
painter->drawEllipse(currentRectF);
}
// Draw mouse point
int w=viewport()->width();
int h=viewport()->height();
QPointF topLeftF=mapToScene(QPoint(0,0));
QPointF bottomRightF=mapToScene(QPoint(w,h));
painter->drawLine(QLineF( _mousePoint.x(), topLeftF.y(), _mousePoint.x(), bottomRightF.y()) );
painter->drawLine(QLineF( topLeftF.x(), _mousePoint.y(), bottomRightF.x(), _mousePoint.y()) );
painter->restore();
QGraphicsView::drawForeground(painter,rect);
}
| void DrawView::mouseMoved | ( | const QPointF & | p | ) | [signal] |
Referenced by mouseMoveEvent().
| void DrawView::mouseMoveEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
References mouseMoved(), scene(), and setMousePoint().
{
setMousePoint(mapToScene(e->pos()) );
emit mouseMoved(_mousePoint);
// Nothing better now, need a cache for items (like in GraphContent), see QGraphicsView::CacheMode
scene()->update();
//update();
QGraphicsView::mouseMoveEvent(e);
}
| void DrawView::mouseReleased | ( | const QPointF & | p | ) | [signal] |
Referenced by mouseReleaseEvent().
| void DrawView::mouseReleaseEvent | ( | QMouseEvent * | e | ) | [protected, virtual] |
References mouseReleased(), scene(), and setMousePoint().
{
setMousePoint(mapToScene( e->pos()) );
emit mouseReleased(_mousePoint);
QGraphicsView::mouseReleaseEvent(e);
scene()->update();
}
| DrawScene * DrawView::scene | ( | ) | const |
Referenced by drawForeground(), mouseMoveEvent(), mouseReleaseEvent(), and setMousePoint().
{
return static_cast<DrawScene *>(QGraphicsView::scene());
}
| void DrawView::setMousePoint | ( | const QPointF & | p | ) |
References QGpCoreTools::Rect::add(), DrawScene::nodes(), NoSnap, scene(), SnapContours, SnapGrid, SnapNodes, SnapX, and SnapY.
Referenced by mouseMoveEvent(), and mouseReleaseEvent().
{
if(_snapOption==NoSnap) {
_mousePoint=p;
return;
}
switch(_snapType) {
case SnapNodes: {
QRectF r=mapToScene(viewport()->rect()).boundingRect();
if(!r.contains(_mousePoint)) {
Rect rExt(r.left(), r.top(), r.right(), r.bottom());
rExt.add(_mousePoint.x(), _mousePoint.y());
r=QRectF(rExt.x1(), rExt.y1(), rExt.width(), rExt.height());
}
QList<QPointF> nodes=scene()->nodes(r);
nodes.append(scene()->currentPoint());
qreal d, dmin;
// Find closest node along X axis
if(_snapOption & SnapX) {
dmin=1e99;
for(QList<QPointF>::iterator it=nodes.begin();it!=nodes.end();it++) {
d=fabs(it->x()-p.x());
if(d<dmin) {
_mousePoint.setX(it->x());
dmin=d;
}
}
} else {
_mousePoint.setX(p.x());
}
// Find closest node along Y axis
if(_snapOption & SnapY) {
dmin=1e99;
for(QList<QPointF>::iterator it=nodes.begin();it!=nodes.end();it++) {
d=fabs(it->y()-p.y());
if(d<dmin) {
_mousePoint.setY(it->y());
dmin=d;
}
}
} else {
_mousePoint.setY(p.y());
}
}
break;
case SnapContours:
case SnapGrid:
// TODO
_mousePoint=p;
break;
}
}
| void DrawView::setSnapOption | ( | SnapOptions | ms | ) | [inline] |
Referenced by MapView::setSnapOption().
{_snapOption=ms;}
| void DrawView::setSnapType | ( | SnapType | ms | ) | [inline] |
Referenced by MapView::setSnapType().
{_snapType=ms;}
| SnapOptions DrawView::snapOption | ( | ) | const [inline] |
Referenced by MapView::snapOption().
{return _snapOption;}
| SnapType DrawView::snapType | ( | ) | const [inline] |
Referenced by MapView::snapType().
{return _snapType;}
| void DrawView::wheelEvent | ( | QWheelEvent * | e | ) | [protected, virtual] |
References contains(), and TRACE.
{
TRACE;
if(e->modifiers() & Qt::ControlModifier) {
int d=e->delta()/120;
QPointF mousePosReal=mapToScene(e->pos());
if(d>0) {
scale(1/1.5, 1/1.5);
} else {
scale(1.5, 1.5);
}
centerOn(mousePosReal);
QPoint mp=mapFromScene(mousePosReal);
if(rect().contains(mp)) {
QCursor::setPos(mapToGlobal( mp) );
}
e->accept();
} else {
QGraphicsView::wheelEvent(e);
}
}