1 // rs_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 "rs_actiondrawcirclecr.h"
17 #include "rs_dialogfactory.h"
18 #include "rs_graphicview.h"
19 #include "rs_preview.h"
24 RS_ActionDrawCircleCR::RS_ActionDrawCircleCR(RS_EntityContainer & container, RS_GraphicView & graphicView): RS_PreviewActionInterface("Draw circles CR",
25 container, graphicView)
30 RS_ActionDrawCircleCR::~RS_ActionDrawCircleCR()
34 /*virtual*/ RS2::ActionType RS_ActionDrawCircleCR::rtti()
36 return RS2::ActionDrawCircleCR;
39 void RS_ActionDrawCircleCR::reset()
41 data = RS_CircleData(Vector(false), 0.0);
44 void RS_ActionDrawCircleCR::init(int status)
46 RS_PreviewActionInterface::init(status);
49 void RS_ActionDrawCircleCR::trigger()
51 RS_PreviewActionInterface::trigger();
53 RS_Circle * circle = new RS_Circle(container, data);
54 circle->setLayerToActive();
55 circle->setPenToActive();
56 container->addEntity(circle);
61 document->startUndoCycle();
62 document->addUndoable(circle);
63 document->endUndoCycle();
67 Vector rz = graphicView->getRelativeZero();
68 graphicView->moveRelativeZero(Vector(0.0, 0.0));
69 graphicView->drawEntity(circle);
70 graphicView->moveRelativeZero(circle->getCenter());
75 RS_DEBUG->print("RS_ActionDrawCircleCR::trigger(): circle added: %d", circle->getId());
78 void RS_ActionDrawCircleCR::mouseMoveEvent(QMouseEvent * e)
80 RS_DEBUG->print("RS_ActionDrawCircleCR::mouseMoveEvent begin");
81 Vector mouse = snapPoint(e);
89 preview->addEntity(new RS_Circle(preview, data));
94 RS_DEBUG->print("RS_ActionDrawCircleCR::mouseMoveEvent end");
97 void RS_ActionDrawCircleCR::mouseReleaseEvent(QMouseEvent * e)
99 // if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton)
100 if (e->button() == Qt::LeftButton)
102 Vector ce(snapPoint(e));
103 coordinateEvent(&ce);
105 // else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton)
106 else if (e->button() == Qt::RightButton)
110 init(getStatus() - 1);
114 void RS_ActionDrawCircleCR::coordinateEvent(Vector * e)
133 void RS_ActionDrawCircleCR::commandEvent(RS_CommandEvent * e)
135 QString c = e->getCommand().toLower();
137 if (checkCommand("help", c))
139 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
140 + getAvailableCommands().join(", "));
148 if (checkCommand("radius", c))
153 setStatus(SetRadius);
160 double r = RS_Math::eval(c, &ok);
165 RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
167 RS_DIALOGFACTORY->requestOptions(this, true, true);
168 setStatus(SetCenter);
177 QStringList RS_ActionDrawCircleCR::getAvailableCommands()
184 cmd += command("radius");
194 void RS_ActionDrawCircleCR::updateMouseButtonHints()
199 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle center"), tr("Cancel"));
203 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle radius"), tr("Back"));
207 RS_DIALOGFACTORY->updateMouseWidget("", "");
212 void RS_ActionDrawCircleCR::showOptions()
214 RS_ActionInterface::showOptions();
216 RS_DIALOGFACTORY->requestOptions(this, true);
219 void RS_ActionDrawCircleCR::hideOptions()
221 RS_ActionInterface::hideOptions();
223 RS_DIALOGFACTORY->requestOptions(this, false);
226 void RS_ActionDrawCircleCR::updateMouseCursor()
228 graphicView->setMouseCursor(RS2::CadCursor);
231 void RS_ActionDrawCircleCR::updateToolBar()
234 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
236 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);
239 double RS_ActionDrawCircleCR::getRadius()
244 void RS_ActionDrawCircleCR::setRadius(double r)