1 // actiondrawcircle2p.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/03/2010 Added this text. :-)
15 #include "actiondrawcircle2p.h"
17 #include "rs_commandevent.h"
18 #include "rs_dialogfactory.h"
19 #include "graphicview.h"
20 #include "rs_preview.h"
22 ActionDrawCircle2P::ActionDrawCircle2P(RS_EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles",
23 container, graphicView)
28 ActionDrawCircle2P::~ActionDrawCircle2P()
32 void ActionDrawCircle2P::reset()
35 point1 = Vector(false);
36 point2 = Vector(false);
39 void ActionDrawCircle2P::init(int status)
41 ActionInterface::init(status);
46 void ActionDrawCircle2P::trigger()
48 ActionInterface::trigger();
54 RS_Circle * circle = new RS_Circle(container, data);
55 circle->setLayerToActive();
56 circle->setPenToActive();
57 container->addEntity(circle);
62 document->startUndoCycle();
63 document->addUndoable(circle);
64 document->endUndoCycle();
68 Vector rz = graphicView->getRelativeZero();
69 graphicView->moveRelativeZero(Vector(0.0, 0.0));
70 graphicView->drawEntity(circle);
71 graphicView->moveRelativeZero(rz);
77 else if (RS_DIALOGFACTORY != NULL)
78 RS_DIALOGFACTORY->requestWarningDialog(tr("Invalid Circle data."));
81 void ActionDrawCircle2P::preparePreview()
85 if (point1.valid && point2.valid)
87 RS_Circle circle(NULL, data);
88 bool suc = circle.createFrom2P(point1, point2);
91 data = circle.getData();
95 void ActionDrawCircle2P::mouseMoveEvent(QMouseEvent * e)
97 Vector mouse = snapPoint(e);
111 // RS_Circle * circle = new RS_Circle(preview, data);
114 // preview->addEntity(circle);
124 void ActionDrawCircle2P::mouseReleaseEvent(QMouseEvent * e)
126 if (e->button() == Qt::LeftButton)
128 Vector ce(snapPoint(e));
129 coordinateEvent(&ce);
131 else if (e->button() == Qt::RightButton)
135 init(getStatus() - 1);
139 void ActionDrawCircle2P::coordinateEvent(Vector * e)
150 graphicView->moveRelativeZero(mouse);
151 setStatus(SetPoint2);
156 graphicView->moveRelativeZero(mouse);
165 void ActionDrawCircle2P::commandEvent(RS_CommandEvent * e)
167 QString c = e->getCommand().toLower();
169 if (checkCommand("help", c))
171 if (RS_DIALOGFACTORY != NULL)
172 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
173 + getAvailableCommands().join(", "));
178 QStringList ActionDrawCircle2P::getAvailableCommands()
184 void ActionDrawCircle2P::updateMouseButtonHints()
186 if (RS_DIALOGFACTORY != NULL)
191 RS_DIALOGFACTORY->updateMouseWidget(
192 tr("Specify first point"), tr("Cancel"));
196 RS_DIALOGFACTORY->updateMouseWidget(
197 tr("Specify second point"), tr("Back"));
201 RS_DIALOGFACTORY->updateMouseWidget("", "");
207 void ActionDrawCircle2P::updateMouseCursor()
209 graphicView->setMouseCursor(RS2::CadCursor);
212 void ActionDrawCircle2P::updateToolBar()
214 if (RS_DIALOGFACTORY)
217 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
219 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);