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/04/2010 Added this text. :-)
17 #include "actionmodifycut.h"
19 #include "rs_dialogfactory.h"
20 #include "graphicview.h"
21 #include "rs_modification.h"
23 ActionModifyCut::ActionModifyCut(RS_EntityContainer & container,
24 GraphicView & graphicView): ActionInterface("Cut Entity",
25 container, graphicView)
28 cutCoord = Vector(false);
31 ActionModifyCut::~ActionModifyCut()
35 void ActionModifyCut::init(int status)
37 ActionInterface::init(status);
40 void ActionModifyCut::trigger()
42 RS_DEBUG->print("ActionModifyCut::trigger()");
44 if (cutEntity != NULL && cutEntity->isAtomic() && cutCoord.valid
45 && cutEntity->isPointOnEntity(cutCoord))
47 cutEntity->setHighlighted(false);
48 graphicView->drawEntity(cutEntity);
50 RS_Modification m(*container, graphicView);
51 m.cut(cutCoord, (RS_AtomicEntity *)cutEntity);
54 cutCoord = Vector(false);
55 setStatus(ChooseCutEntity);
57 RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected());
61 void ActionModifyCut::mouseMoveEvent(QMouseEvent * e)
63 RS_DEBUG->print("ActionModifyCut::mouseMoveEvent begin");
78 RS_DEBUG->print("ActionModifyTrim::mouseMoveEvent end");
81 void ActionModifyCut::mouseReleaseEvent(QMouseEvent * e)
83 if (e->button() == Qt::LeftButton)
88 cutEntity = catchEntity(e);
90 if (cutEntity == NULL)
91 RS_DIALOGFACTORY->commandMessage(tr("No Entity found."));
92 else if (cutEntity->rtti() != RS2::EntityLine
93 && cutEntity->rtti() != RS2::EntityArc
94 && cutEntity->rtti() != RS2::EntityCircle
95 && cutEntity->rtti() != RS2::EntityEllipse)
97 RS_DIALOGFACTORY->commandMessage(
98 tr("Entity must be a line, arc, circle or ellipse."));
101 cutEntity->setHighlighted(true);
102 graphicView->drawEntity(cutEntity);
103 setStatus(SetCutCoord);
108 cutCoord = snapPoint(e);
110 if (cutEntity == NULL)
111 RS_DIALOGFACTORY->commandMessage(tr("No Entity found."));
112 else if (!cutCoord.valid)
113 RS_DIALOGFACTORY->commandMessage(tr("Cutting point is invalid."));
114 else if (!cutEntity->isPointOnEntity(cutCoord))
115 RS_DIALOGFACTORY->commandMessage(
116 tr("Cutting point is not on entity."));
128 else if (e->button() == Qt::RightButton)
132 if (cutEntity != NULL)
134 cutEntity->setHighlighted(false);
135 graphicView->drawEntity(cutEntity);
137 init(getStatus() - 1);
141 void ActionModifyCut::updateMouseButtonHints()
145 case ChooseCutEntity:
146 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify entity to cut"),
151 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify cutting point"),
156 RS_DIALOGFACTORY->updateMouseWidget("", "");
161 void ActionModifyCut::updateMouseCursor()
163 graphicView->setMouseCursor(RS2::CadCursor);
166 void ActionModifyCut::updateToolBar()
171 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
174 case ChooseCutEntity:
176 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarModify);