1 // actiondrawcirclecr.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 "actiondrawcirclecr.h"
17 #include "rs_commandevent.h"
18 #include "rs_dialogfactory.h"
19 #include "graphicview.h"
20 #include "rs_preview.h"
25 ActionDrawCircleCR::ActionDrawCircleCR(RS_EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles CR",
26 container, graphicView)
31 ActionDrawCircleCR::~ActionDrawCircleCR()
35 /*virtual*/ RS2::ActionType ActionDrawCircleCR::rtti()
37 return RS2::ActionDrawCircleCR;
40 void ActionDrawCircleCR::reset()
42 data = RS_CircleData(Vector(false), 0.0);
45 void ActionDrawCircleCR::init(int status)
47 ActionInterface::init(status);
50 void ActionDrawCircleCR::trigger()
52 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(circle->getCenter());
76 RS_DEBUG->print("ActionDrawCircleCR::trigger(): circle added: %d", circle->getId());
79 void ActionDrawCircleCR::mouseMoveEvent(QMouseEvent * e)
81 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent begin");
82 Vector mouse = snapPoint(e);
90 // preview->addEntity(new RS_Circle(preview, data));
95 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent end");
98 void ActionDrawCircleCR::mouseReleaseEvent(QMouseEvent * e)
100 if (e->button() == Qt::LeftButton)
102 Vector ce(snapPoint(e));
103 coordinateEvent(&ce);
105 else if (e->button() == Qt::RightButton)
109 init(getStatus() - 1);
113 void ActionDrawCircleCR::coordinateEvent(Vector * e)
132 void ActionDrawCircleCR::commandEvent(RS_CommandEvent * e)
134 QString c = e->getCommand().toLower();
136 if (checkCommand("help", c))
138 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
139 + getAvailableCommands().join(", "));
147 if (checkCommand("radius", c))
152 setStatus(SetRadius);
159 double r = RS_Math::eval(c, &ok);
164 RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
166 RS_DIALOGFACTORY->requestOptions(this, true, true);
167 setStatus(SetCenter);
176 QStringList ActionDrawCircleCR::getAvailableCommands()
183 cmd += command("radius");
193 void ActionDrawCircleCR::updateMouseButtonHints()
198 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle center"), tr("Cancel"));
202 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle radius"), tr("Back"));
206 RS_DIALOGFACTORY->updateMouseWidget("", "");
211 void ActionDrawCircleCR::showOptions()
213 ActionInterface::showOptions();
215 RS_DIALOGFACTORY->requestOptions(this, true);
218 void ActionDrawCircleCR::hideOptions()
220 ActionInterface::hideOptions();
222 RS_DIALOGFACTORY->requestOptions(this, false);
225 void ActionDrawCircleCR::updateMouseCursor()
227 graphicView->setMouseCursor(RS2::CadCursor);
230 void ActionDrawCircleCR::updateToolBar()
233 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
235 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);
238 double ActionDrawCircleCR::getRadius()
243 void ActionDrawCircleCR::setRadius(double r)