1 // actiondrawlinefree.cpp
3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // (C) 2010 Underground Software
8 // JLH = James L. Hammons <jlhamm@acm.org>
11 // --- ---------- -----------------------------------------------------------
12 // JLH 06/04/2010 Added this text. :-)
15 #include "actiondrawlinefree.h"
17 #include "rs_dialogfactory.h"
18 #include "graphicview.h"
19 #include "rs_polyline.h"
21 ActionDrawLineFree::ActionDrawLineFree(RS_EntityContainer & container,
22 GraphicView & graphicView): ActionInterface("Draw freehand lines",
23 container, graphicView)
25 vertex = Vector(false);
29 ActionDrawLineFree::~ActionDrawLineFree()
35 void ActionDrawLineFree::trigger()
39 container->addEntity(polyline);
44 document->startUndoCycle();
45 document->addUndoable(polyline);
46 document->endUndoCycle();
49 RS_DEBUG->print("ActionDrawLineFree::trigger():"
50 " polyline added: %d", polyline->getId());
55 void ActionDrawLineFree::mouseMoveEvent(QMouseEvent * e)
57 if (vertex.valid && polyline)
59 Vector v = snapPoint(e);
60 RS_Entity * ent = polyline->addVertex(v);
61 ent->setLayerToActive();
62 ent->setPenToActive();
65 graphicView->drawEntity(ent);
70 RS_DEBUG->print("ActionDrawLineFree::mouseMoveEvent():"
71 " line added: %d", ent->getId());
75 void ActionDrawLineFree::mousePressEvent(QMouseEvent * e)
77 if (e->button() == Qt::LeftButton)
79 vertex = snapPoint(e);
80 polyline = new RS_Polyline(container, RS_PolylineData(vertex, vertex, 0));
81 polyline->setLayerToActive();
82 polyline->setPenToActive();
86 void ActionDrawLineFree::mouseReleaseEvent(QMouseEvent * e)
88 if (e->button() == Qt::LeftButton)
90 vertex = Vector(false);
93 else if (e->button() == Qt::RightButton)
102 init(getStatus() - 1);
106 void ActionDrawLineFree::updateMouseButtonHints()
111 RS_DIALOGFACTORY->updateMouseWidget(tr("Click and drag to draw a line"), tr("Cancel"));
115 RS_DIALOGFACTORY->updateMouseWidget("", "");
120 void ActionDrawLineFree::updateMouseCursor()
122 graphicView->setMouseCursor(RS2::CadCursor);
125 void ActionDrawLineFree::updateToolBar()
128 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
130 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarLines);