1 // rs_actionmodifymirror.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/04/2010 Added this text. :-)
15 #include "rs_actionmodifymirror.h"
17 #include "rs_dialogfactory.h"
18 #include "rs_preview.h"
20 RS_ActionModifyMirror::RS_ActionModifyMirror(RS_EntityContainer & container, GraphicView & graphicView):
21 RS_PreviewActionInterface("Mirror Entities", container, graphicView)
25 RS_ActionModifyMirror::~RS_ActionModifyMirror()
29 void RS_ActionModifyMirror::init(int status)
31 RS_ActionInterface::init(status);
34 void RS_ActionModifyMirror::trigger()
36 RS_DEBUG->print("RS_ActionModifyMirror::trigger()");
38 RS_Modification m(*container, graphicView);
41 if (RS_DIALOGFACTORY != NULL)
42 RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected());
45 void RS_ActionModifyMirror::mouseMoveEvent(QMouseEvent * e)
47 RS_DEBUG->print("RS_ActionModifyMirror::mouseMoveEvent begin");
49 if (getStatus() == SetAxisPoint1
50 || getStatus() == SetAxisPoint2)
52 Vector mouse = snapPoint(e);
68 preview->addSelectionFrom(*container);
69 preview->mirror(axisPoint1, axisPoint2);
71 preview->addEntity(new RS_Line(preview,
72 RS_LineData(axisPoint1,
84 RS_DEBUG->print("RS_ActionModifyMirror::mouseMoveEvent end");
87 void RS_ActionModifyMirror::mouseReleaseEvent(QMouseEvent * e)
89 if (e->button() == Qt::LeftButton)
91 Vector ce(snapPoint(e));
94 else if (e->button() == Qt::RightButton)
98 init(getStatus() - 1);
102 void RS_ActionModifyMirror::coordinateEvent(Vector * e)
113 setStatus(SetAxisPoint2);
114 graphicView->moveRelativeZero(mouse);
119 setStatus(ShowDialog);
120 graphicView->moveRelativeZero(mouse);
122 if (RS_DIALOGFACTORY != NULL)
124 if (RS_DIALOGFACTORY->requestMirrorDialog(data))
126 data.axisPoint1 = axisPoint1;
127 data.axisPoint2 = axisPoint2;
141 void RS_ActionModifyMirror::updateMouseButtonHints()
143 if (RS_DIALOGFACTORY != NULL)
148 RS_DIALOGFACTORY->updateMouseWidget(tr("Pick entities to move"),
152 RS_DIALOGFACTORY->updateMouseWidget(
153 tr("Specify first point of mirror line"),
158 RS_DIALOGFACTORY->updateMouseWidget(
159 tr("Specify second point of mirror line"),
164 RS_DIALOGFACTORY->updateMouseWidget("", "");
170 void RS_ActionModifyMirror::updateMouseCursor()
172 graphicView->setMouseCursor(RS2::CadCursor);
175 void RS_ActionModifyMirror::updateToolBar()
177 if (RS_DIALOGFACTORY != NULL)
183 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
187 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarModify);