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 "rs_commandevent.h"
20 #include "rs_dialogfactory.h"
21 #include "graphicview.h"
22 #include "rs_preview.h"
27 ActionDrawCircleCR::ActionDrawCircleCR(RS_EntityContainer & container, GraphicView & graphicView): ActionInterface("Draw circles CR",
28 container, graphicView)
33 ActionDrawCircleCR::~ActionDrawCircleCR()
37 /*virtual*/ RS2::ActionType ActionDrawCircleCR::rtti()
39 return RS2::ActionDrawCircleCR;
42 void ActionDrawCircleCR::reset()
44 data = RS_CircleData(Vector(false), 0.0);
47 void ActionDrawCircleCR::init(int status)
49 ActionInterface::init(status);
52 void ActionDrawCircleCR::trigger()
54 ActionInterface::trigger();
56 RS_Circle * circle = new RS_Circle(container, data);
57 circle->setLayerToActive();
58 circle->setPenToActive();
59 container->addEntity(circle);
64 document->startUndoCycle();
65 document->addUndoable(circle);
66 document->endUndoCycle();
70 Vector rz = graphicView->getRelativeZero();
71 graphicView->moveRelativeZero(Vector(0.0, 0.0));
72 graphicView->drawEntity(circle);
73 graphicView->moveRelativeZero(circle->getCenter());
78 RS_DEBUG->print("ActionDrawCircleCR::trigger(): circle added: %d", circle->getId());
81 void ActionDrawCircleCR::mouseMoveEvent(QMouseEvent * e)
83 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent begin");
84 Vector mouse = snapPoint(e);
92 // preview->addEntity(new RS_Circle(preview, data));
97 RS_DEBUG->print("ActionDrawCircleCR::mouseMoveEvent end");
100 void ActionDrawCircleCR::mouseReleaseEvent(QMouseEvent * e)
102 if (e->button() == Qt::LeftButton)
104 Vector ce(snapPoint(e));
105 coordinateEvent(&ce);
107 else if (e->button() == Qt::RightButton)
111 init(getStatus() - 1);
115 void ActionDrawCircleCR::coordinateEvent(Vector * e)
134 void ActionDrawCircleCR::commandEvent(RS_CommandEvent * e)
136 QString c = e->getCommand().toLower();
138 if (checkCommand("help", c))
140 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
141 + getAvailableCommands().join(", "));
149 if (checkCommand("radius", c))
154 setStatus(SetRadius);
161 double r = RS_Math::eval(c, &ok);
166 RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression"));
168 RS_DIALOGFACTORY->requestOptions(this, true, true);
169 setStatus(SetCenter);
178 QStringList ActionDrawCircleCR::getAvailableCommands()
185 cmd += command("radius");
195 void ActionDrawCircleCR::updateMouseButtonHints()
200 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle center"), tr("Cancel"));
204 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify circle radius"), tr("Back"));
208 RS_DIALOGFACTORY->updateMouseWidget("", "");
213 void ActionDrawCircleCR::showOptions()
215 ActionInterface::showOptions();
217 RS_DIALOGFACTORY->requestOptions(this, true);
220 void ActionDrawCircleCR::hideOptions()
222 ActionInterface::hideOptions();
224 RS_DIALOGFACTORY->requestOptions(this, false);
227 void ActionDrawCircleCR::updateMouseCursor()
229 graphicView->setMouseCursor(RS2::CadCursor);
232 void ActionDrawCircleCR::updateToolBar()
235 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
237 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);
240 double ActionDrawCircleCR::getRadius()
245 void ActionDrawCircleCR::setRadius(double r)