X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Factions%2Frs_actioninfoarea.cpp;h=ae2c2c3fb26e7915c8596f72be132de17b67c031;hb=be33e866f2121c48db93e06d743c5ae3826c1948;hp=9d09a4b6ca045cdc9a5d9f2da08ba800a36eafde;hpb=16ce54abf01ca3032e42a5bb11a4afcf9014dcca;p=architektonas diff --git a/src/actions/rs_actioninfoarea.cpp b/src/actions/rs_actioninfoarea.cpp index 9d09a4b..ae2c2c3 100644 --- a/src/actions/rs_actioninfoarea.cpp +++ b/src/actions/rs_actioninfoarea.cpp @@ -1,272 +1,268 @@ -/**************************************************************************** -** $Id: rs_actioninfoarea.cpp 1134 2004-07-13 23:26:13Z andrew $ -** -** Copyright (C) 2001-2003 RibbonSoft. All rights reserved. -** -** This file is part of the qcadlib Library project. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** Licensees holding valid qcadlib Professional Edition licenses may use -** this file in accordance with the qcadlib Commercial License -** Agreement provided with the Software. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.ribbonsoft.com for further details. -** -** Contact info@ribbonsoft.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ +// rs_actioninfoarea.cpp +// +// Part of the Architektonas Project +// Originally part of QCad Community Edition by Andrew Mustun +// Extensively rewritten and refactored by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JLH 06/04/2010 Added this text. :-) +// #include "rs_actioninfoarea.h" -#include "rs_snapper.h" +#include "rs_dialogfactory.h" +#include "graphicview.h" +#include "rs_preview.h" - - -RS_ActionInfoArea::RS_ActionInfoArea(RS_EntityContainer& container, - RS_GraphicView& graphicView) - :RS_PreviewActionInterface("Info Area", - container, graphicView) {} - - -QAction* RS_ActionInfoArea::createGUIAction(RS2::ActionType /*type*/, QObject* /*parent*/) +RS_ActionInfoArea::RS_ActionInfoArea(RS_EntityContainer & container, GraphicView & graphicView): RS_PreviewActionInterface("Info Area", + container, graphicView) { - QAction * action = new QAction(tr("&Polygonal Area"), 0); -// QAction* action = new QAction(tr("Polygonal Area"), -// tr("&Polygonal Area"), -// QKeySequence(), NULL); - action->setStatusTip(tr("Measures the area of a polygon")); - return action; } - -void RS_ActionInfoArea::init(int status) { - RS_ActionInterface::init(status); - - currentLine = NULL; - closingLine = NULL; - - //std::cout << "RS_ActionInfoArea::init: " << status << "\n"; +RS_ActionInfoArea::~RS_ActionInfoArea() +{ } +void RS_ActionInfoArea::init(int status) +{ + RS_ActionInterface::init(status); + currentLine = NULL; + closingLine = NULL; -void RS_ActionInfoArea::trigger() { - - RS_DEBUG->print("RS_ActionInfoArea::trigger()"); - if (ia.isValid()) { - ia.close(); - ia.calculate(); - double area = ia.getArea(); - double circ = ia.getCircumference(); - - RS_DEBUG->print("RS_ActionInfoArea::trigger: area: %f", area); - RS_DIALOGFACTORY->commandMessage(tr("Area: %1").arg(area)); - RS_DIALOGFACTORY->commandMessage(tr("Circumference: %1").arg(circ)); - } - - ia.reset(); - - /* - if (point1.valid && point2.valid) { - double dist = point1.distanceTo(point2); - QString str; - str.sprintf("%.6f", dist); - RS_DIALOGFACTORY->commandMessage(tr("Distance: %1").arg(str)); + //std::cout << "RS_ActionInfoArea::init: " << status << "\n"; } - */ + +void RS_ActionInfoArea::trigger() +{ + RS_DEBUG->print("RS_ActionInfoArea::trigger()"); + + if (ia.isValid()) + { + ia.close(); + ia.calculate(); + double area = ia.getArea(); + double circ = ia.getCircumference(); + + RS_DEBUG->print("RS_ActionInfoArea::trigger: area: %f", area); + RS_DIALOGFACTORY->commandMessage(tr("Area: %1").arg(area)); + RS_DIALOGFACTORY->commandMessage(tr("Circumference: %1").arg(circ)); + } + + ia.reset(); + + /* + if (point1.valid && point2.valid) { + double dist = point1.distanceTo(point2); + QString str; + str.sprintf("%.6f", dist); + RS_DIALOGFACTORY->commandMessage(tr("Distance: %1").arg(str)); + } + */ } +void RS_ActionInfoArea::mouseMoveEvent(QMouseEvent * e) +{ + //RS_DEBUG->print("RS_ActionInfoArea::mouseMoveEvent begin"); + if (getStatus() == SetFirstPoint + || getStatus() == SetNextPoint) + { + Vector mouse = snapPoint(e); -void RS_ActionInfoArea::mouseMoveEvent(QMouseEvent* e) { - //RS_DEBUG->print("RS_ActionInfoArea::mouseMoveEvent begin"); + switch (getStatus()) + { + case SetFirstPoint: + break; - if (getStatus()==SetFirstPoint || - getStatus()==SetNextPoint) { + case SetNextPoint: - Vector mouse = snapPoint(e); + if (prev.valid) + { + deletePreview(); - switch (getStatus()) { - case SetFirstPoint: - break; + if (currentLine != NULL) + { + preview->removeEntity(currentLine); + currentLine = NULL; + } - case SetNextPoint: - if (prev.valid) { - deletePreview(); - if (currentLine!=NULL) { - preview->removeEntity(currentLine); - currentLine = NULL; - } - if (closingLine!=NULL) { - preview->removeEntity(closingLine); - closingLine = NULL; - } + if (closingLine != NULL) + { + preview->removeEntity(closingLine); + closingLine = NULL; + } - currentLine = new RS_Line(preview, - RS_LineData(prev, - mouse)); - preview->addEntity(currentLine); + currentLine = new RS_Line(preview, + RS_LineData(prev, + mouse)); + preview->addEntity(currentLine); - if (preview->count()>1) { - closingLine = new RS_Line(preview, - RS_LineData(mouse, - point1)); + if (preview->count() > 1) + { + closingLine = new RS_Line(preview, + RS_LineData(mouse, + point1)); - preview->addEntity(closingLine); + preview->addEntity(closingLine); } - drawPreview(); - } - break; + drawPreview(); + } + break; - default: - break; - } - } + default: + break; + } + } - //RS_DEBUG->print("RS_ActionInfoArea::mouseMoveEvent end"); + //RS_DEBUG->print("RS_ActionInfoArea::mouseMoveEvent end"); } - - -void RS_ActionInfoArea::mouseReleaseEvent(QMouseEvent* e) { - if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton) { - RS_CoordinateEvent ce(snapPoint(e)); - coordinateEvent(&ce); - } else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton) { - //deletePreview(); - //clearPreview(); - - // close the polygon (preview) - if (getStatus()==SetNextPoint && prev.valid) { - deletePreview(); - - if (currentLine!=NULL) { - preview->removeEntity(currentLine); - currentLine = NULL; - } - if (closingLine!=NULL) { - preview->removeEntity(closingLine); - closingLine = NULL; - } - - currentLine = new RS_Line(preview, - RS_LineData(prev, - point1)); - - preview->addEntity(currentLine); - - drawPreview(); - } - - deleteSnapper(); - trigger(); - init(getStatus()-1); - } +void RS_ActionInfoArea::mouseReleaseEvent(QMouseEvent * e) +{ + if (e->button() == Qt::LeftButton) + { + Vector ce(snapPoint(e)); + coordinateEvent(&ce); + } + else if (e->button() == Qt::RightButton) + { + //deletePreview(); + //clearPreview(); + + // close the polygon (preview) + if (getStatus() == SetNextPoint && prev.valid) + { + deletePreview(); + + if (currentLine != NULL) + { + preview->removeEntity(currentLine); + currentLine = NULL; + } + + if (closingLine != NULL) + { + preview->removeEntity(closingLine); + closingLine = NULL; + } + + currentLine = new RS_Line(preview, + RS_LineData(prev, + point1)); + + preview->addEntity(currentLine); + + drawPreview(); + } + + deleteSnapper(); + trigger(); + init(getStatus() - 1); + } } - - -void RS_ActionInfoArea::coordinateEvent(RS_CoordinateEvent* e) { - if (e==NULL) { - return; - } - - Vector mouse = e->getCoordinate(); - - switch (getStatus()) { - case SetFirstPoint: - point1 = mouse; - - deletePreview(); - clearPreview(); - - ia.addPoint(mouse); - RS_DIALOGFACTORY->commandMessage(tr("Point: %1/%2") - .arg(mouse.x).arg(mouse.y)); - - graphicView->moveRelativeZero(point1); - prev = mouse; - - setStatus(SetNextPoint); - break; - - case SetNextPoint: - if (point1.valid) { - //point2 = mouse; - /*deletePreview(); - clearPreview(); - */ - ia.addPoint(mouse); - RS_DIALOGFACTORY->commandMessage(tr("Point: %1/%2") - .arg(mouse.x).arg(mouse.y)); - - currentLine = NULL; - - graphicView->moveRelativeZero(mouse); - prev = mouse; - - // automatically detect that the polyline is now closed - if (ia.isClosed()) { - trigger(); - setStatus(SetFirstPoint); - } - //trigger(); - //setStatus(SetFirstPoint); - } - break; - - default: - break; - } +void RS_ActionInfoArea::coordinateEvent(Vector * e) +{ + if (e == NULL) + return; + + Vector mouse = *e; + + switch (getStatus()) + { + case SetFirstPoint: + point1 = mouse; + + deletePreview(); + clearPreview(); + + ia.addPoint(mouse); + RS_DIALOGFACTORY->commandMessage(tr("Point: %1/%2").arg(mouse.x).arg(mouse.y)); + + graphicView->moveRelativeZero(point1); + prev = mouse; + + setStatus(SetNextPoint); + break; + + case SetNextPoint: + + if (point1.valid) + { + //point2 = mouse; + /*deletePreview(); + clearPreview(); + */ + ia.addPoint(mouse); + RS_DIALOGFACTORY->commandMessage(tr("Point: %1/%2").arg(mouse.x).arg(mouse.y)); + + currentLine = NULL; + + graphicView->moveRelativeZero(mouse); + prev = mouse; + + // automatically detect that the polyline is now closed + if (ia.isClosed()) + { + trigger(); + setStatus(SetFirstPoint); + } + //trigger(); + //setStatus(SetFirstPoint); + } + break; + + default: + break; + } } - -void RS_ActionInfoArea::updateMouseButtonHints() { - switch (getStatus()) { - case SetFirstPoint: - RS_DIALOGFACTORY->updateMouseWidget( - tr("Specify first point of polygon"), - tr("Cancel")); - break; - case SetNextPoint: - RS_DIALOGFACTORY->updateMouseWidget( - tr("Specify next point of polygon"), - tr("Terminate")); - break; - default: - RS_DIALOGFACTORY->updateMouseWidget("", ""); - break; - } +void RS_ActionInfoArea::updateMouseButtonHints() +{ + switch (getStatus()) + { + case SetFirstPoint: + RS_DIALOGFACTORY->updateMouseWidget( + tr("Specify first point of polygon"), + tr("Cancel")); + break; + + case SetNextPoint: + RS_DIALOGFACTORY->updateMouseWidget( + tr("Specify next point of polygon"), + tr("Terminate")); + break; + + default: + RS_DIALOGFACTORY->updateMouseWidget("", ""); + break; + } } - - -void RS_ActionInfoArea::updateMouseCursor() { - graphicView->setMouseCursor(RS2::CadCursor); +void RS_ActionInfoArea::updateMouseCursor() +{ + graphicView->setMouseCursor(RS2::CadCursor); } - - -void RS_ActionInfoArea::updateToolBar() { - switch (getStatus()) { - case SetFirstPoint: - case SetNextPoint: - RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap); - break; - default: - RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarInfo); - break; - } +void RS_ActionInfoArea::updateToolBar() +{ + switch (getStatus()) + { + case SetFirstPoint: + case SetNextPoint: + RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap); + break; + + default: + RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarInfo); + break; + } } - // EOF