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 // Portions copyright (C) 2001-2003 RibbonSoft
7 // Copyright (C) 2010 Underground Software
8 // See the README and GPLv2 files for licensing and warranty information
10 // JLH = James L. Hammons <jlhamm@acm.org>
13 // --- ---------- -----------------------------------------------------------
14 // JLH 06/03/2010 Added this text. :-)
17 #include "actiondrawcirclecr.h"
19 #include "commandevent.h"
21 #include "dialogfactory.h"
22 #include "graphicview.h"
28 ActionDrawCircleCR::ActionDrawCircleCR(RS_EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles CR",
29 container, graphicView)
34 ActionDrawCircleCR::~ActionDrawCircleCR()
38 /*virtual*/ RS2::ActionType ActionDrawCircleCR::rtti()
40 return RS2::ActionDrawCircleCR;
43 void ActionDrawCircleCR::reset()
45 data = RS_CircleData(Vector(false), 0.0);
48 void ActionDrawCircleCR::init(int status)
50 ActionInterface::init(status);
53 void ActionDrawCircleCR::trigger()
55 ActionInterface::trigger();
57 RS_Circle * circle = new RS_Circle(container, data);
58 circle->setLayerToActive();
59 circle->setPenToActive();
60 container->addEntity(circle);
65 document->startUndoCycle();
66 document->addUndoable(circle);
67 document->endUndoCycle();
71 Vector rz = graphicView->getRelativeZero();
72 graphicView->moveRelativeZero(Vector(0.0, 0.0));
73 graphicView->drawEntity(circle);
74 graphicView->moveRelativeZero(circle->getCenter());
79 RS_DEBUG->print("ActionDrawCircleCR::trigger(): circle added: %d", circle->getId());
82 void ActionDrawCircleCR::mouseMoveEvent(QMouseEvent * e)
84 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent begin");
85 Vector mouse = snapPoint(e);
93 // preview->addEntity(new RS_Circle(preview, data));
98 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent end");
101 void ActionDrawCircleCR::mouseReleaseEvent(QMouseEvent * e)
103 if (e->button() == Qt::LeftButton)
105 Vector ce(snapPoint(e));
106 coordinateEvent(&ce);
108 else if (e->button() == Qt::RightButton)
112 init(getStatus() - 1);
116 void ActionDrawCircleCR::coordinateEvent(Vector * e)
135 void ActionDrawCircleCR::commandEvent(RS_CommandEvent * e)
137 QString c = e->getCommand().toLower();
139 if (checkCommand("help", c))
141 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
142 + getAvailableCommands().join(", "));
150 if (checkCommand("radius", c))
155 setStatus(SetRadius);
162 double r = RS_Math::eval(c, &ok);
167 RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
169 RS_DIALOGFACTORY->requestOptions(this, true, true);
170 setStatus(SetCenter);
179 QStringList ActionDrawCircleCR::getAvailableCommands()
186 cmd += command("radius");
196 void ActionDrawCircleCR::updateMouseButtonHints()
201 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle center"), tr("Cancel"));
205 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle radius"), tr("Back"));
209 RS_DIALOGFACTORY->updateMouseWidget("", "");
214 void ActionDrawCircleCR::showOptions()
216 ActionInterface::showOptions();
218 RS_DIALOGFACTORY->requestOptions(this, true);
221 void ActionDrawCircleCR::hideOptions()
223 ActionInterface::hideOptions();
225 RS_DIALOGFACTORY->requestOptions(this, false);
228 void ActionDrawCircleCR::updateMouseCursor()
230 graphicView->setMouseCursor(RS2::CadCursor);
233 void ActionDrawCircleCR::updateToolBar()
236 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
238 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);
241 double ActionDrawCircleCR::getRadius()
246 void ActionDrawCircleCR::setRadius(double r)