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/04/2010 Added this text. :-)
15 #include "actionmodifycut.h"
17 #include "rs_dialogfactory.h"
18 #include "graphicview.h"
19 #include "rs_modification.h"
21 ActionModifyCut::ActionModifyCut(RS_EntityContainer & container,
22 GraphicView & graphicView): ActionInterface("Cut Entity",
23 container, graphicView)
26 cutCoord = Vector(false);
29 ActionModifyCut::~ActionModifyCut()
33 void ActionModifyCut::init(int status)
35 ActionInterface::init(status);
38 void ActionModifyCut::trigger()
40 RS_DEBUG->print("ActionModifyCut::trigger()");
42 if (cutEntity != NULL && cutEntity->isAtomic() && cutCoord.valid
43 && cutEntity->isPointOnEntity(cutCoord))
45 cutEntity->setHighlighted(false);
46 graphicView->drawEntity(cutEntity);
48 RS_Modification m(*container, graphicView);
49 m.cut(cutCoord, (RS_AtomicEntity *)cutEntity);
52 cutCoord = Vector(false);
53 setStatus(ChooseCutEntity);
55 RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected());
59 void ActionModifyCut::mouseMoveEvent(QMouseEvent * e)
61 RS_DEBUG->print("ActionModifyCut::mouseMoveEvent begin");
76 RS_DEBUG->print("ActionModifyTrim::mouseMoveEvent end");
79 void ActionModifyCut::mouseReleaseEvent(QMouseEvent * e)
81 if (e->button() == Qt::LeftButton)
86 cutEntity = catchEntity(e);
88 if (cutEntity == NULL)
89 RS_DIALOGFACTORY->commandMessage(tr("No Entity found."));
90 else if (cutEntity->rtti() != RS2::EntityLine
91 && cutEntity->rtti() != RS2::EntityArc
92 && cutEntity->rtti() != RS2::EntityCircle
93 && cutEntity->rtti() != RS2::EntityEllipse)
95 RS_DIALOGFACTORY->commandMessage(
96 tr("Entity must be a line, arc, circle or ellipse."));
99 cutEntity->setHighlighted(true);
100 graphicView->drawEntity(cutEntity);
101 setStatus(SetCutCoord);
106 cutCoord = snapPoint(e);
108 if (cutEntity == NULL)
109 RS_DIALOGFACTORY->commandMessage(tr("No Entity found."));
110 else if (!cutCoord.valid)
111 RS_DIALOGFACTORY->commandMessage(tr("Cutting point is invalid."));
112 else if (!cutEntity->isPointOnEntity(cutCoord))
113 RS_DIALOGFACTORY->commandMessage(
114 tr("Cutting point is not on entity."));
126 else if (e->button() == Qt::RightButton)
130 if (cutEntity != NULL)
132 cutEntity->setHighlighted(false);
133 graphicView->drawEntity(cutEntity);
135 init(getStatus() - 1);
139 void ActionModifyCut::updateMouseButtonHints()
143 case ChooseCutEntity:
144 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify entity to cut"),
149 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify cutting point"),
154 RS_DIALOGFACTORY->updateMouseWidget("", "");
159 void ActionModifyCut::updateMouseCursor()
161 graphicView->setMouseCursor(RS2::CadCursor);
164 void ActionModifyCut::updateToolBar()
169 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
172 case ChooseCutEntity:
174 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarModify);