1 // rs_actionmodifymove.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_actionmodifymove.h"
17 #include "rs_dialogfactory.h"
18 #include "rs_preview.h"
20 RS_ActionModifyMove::RS_ActionModifyMove(RS_EntityContainer & container,
21 GraphicView & graphicView):
22 RS_PreviewActionInterface("Move Entities", container, graphicView)
26 RS_ActionModifyMove::~RS_ActionModifyMove()
30 void RS_ActionModifyMove::init(int status)
32 RS_ActionInterface::init(status);
35 void RS_ActionModifyMove::trigger()
37 RS_DEBUG->print("RS_ActionModifyMove::trigger()");
39 RS_Modification m(*container, graphicView);
42 RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected());
45 void RS_ActionModifyMove::mouseMoveEvent(QMouseEvent * e)
47 RS_DEBUG->print("RS_ActionModifyMove::mouseMoveEvent begin");
49 if (getStatus() == SetReferencePoint
50 || getStatus() == SetTargetPoint)
52 Vector mouse = snapPoint(e);
56 case SetReferencePoint:
57 referencePoint = mouse;
62 if (referencePoint.valid)
68 preview->addSelectionFrom(*container);
69 preview->move(targetPoint - referencePoint);
79 RS_DEBUG->print("RS_ActionModifyMove::mouseMoveEvent end");
82 void RS_ActionModifyMove::mouseReleaseEvent(QMouseEvent * e)
84 if (e->button() == Qt::LeftButton)
86 Vector ce(snapPoint(e));
89 else if (e->button() == Qt::RightButton)
93 init(getStatus() - 1);
97 void RS_ActionModifyMove::coordinateEvent(Vector * e)
106 case SetReferencePoint:
107 referencePoint = pos;
108 graphicView->moveRelativeZero(referencePoint);
109 setStatus(SetTargetPoint);
114 graphicView->moveRelativeZero(targetPoint);
115 setStatus(ShowDialog);
117 if (RS_DIALOGFACTORY->requestMoveDialog(data))
119 data.offset = targetPoint - referencePoint;
130 void RS_ActionModifyMove::updateMouseButtonHints()
135 RS_DIALOGFACTORY->updateMouseWidget(tr("Pick entities to move"),
138 case SetReferencePoint:
139 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify reference point"),
144 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify target point"),
149 RS_DIALOGFACTORY->updateMouseWidget("", "");
154 void RS_ActionModifyMove::updateMouseCursor()
156 graphicView->setMouseCursor(RS2::CadCursor);
159 void RS_ActionModifyMove::updateToolBar()
164 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSelect);
166 case SetReferencePoint:
168 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
172 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarModify);