X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Factions%2Factiondimlinear.cpp;h=3191f1c1c3768951bb59c0e55ac88c62cf97c977;hb=e1d1cacbb43055988d0d9db632fdf05c0bea9543;hp=fd3583534466fed3e950aea874cecc54ed6e2f49;hpb=d774c2655ba2c3657a565f325411144452392277;p=architektonas diff --git a/src/actions/actiondimlinear.cpp b/src/actions/actiondimlinear.cpp index fd35835..3191f1c 100644 --- a/src/actions/actiondimlinear.cpp +++ b/src/actions/actiondimlinear.cpp @@ -3,7 +3,9 @@ // 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 +// Portions copyright (C) 2001-2003 RibbonSoft +// Copyright (C) 2010 Underground Software +// See the README and GPLv2 files for licensing and warranty information // // JLH = James L. Hammons // @@ -14,11 +16,12 @@ #include "actiondimlinear.h" -#include "rs_commandevent.h" -#include "rs_constructionline.h" -#include "rs_dialogfactory.h" +#include "commandevent.h" +#include "constructionline.h" +#include "debug.h" +#include "dialogfactory.h" #include "graphicview.h" -#include "rs_preview.h" +#include "preview.h" /** * Constructor. @@ -27,12 +30,15 @@ * @param fixedAngle true: The user can't change the angle. * false: The user can change the angle in a option widget. */ -ActionDimLinear::ActionDimLinear(RS_EntityContainer & container, GraphicView & graphicView, double angle, bool fixedAngle): +ActionDimLinear::ActionDimLinear(EntityContainer & container, + GraphicView & graphicView, double angle, bool fixedAngle): ActionDimension("Draw linear dimensions", container, graphicView) { edata.angle = angle; this->fixedAngle = fixedAngle; lastStatus = SetExtPoint1; + //hm. doesn't work. + graphicView.snapper.SetVisible(); reset(); } @@ -48,38 +54,40 @@ ActionDimLinear::~ActionDimLinear() void ActionDimLinear::reset() { ActionDimension::reset(); - edata = RS_DimLinearData(Vector(false), Vector(false), (fixedAngle ? edata.angle : 0.0), 0.0); + edata = DimLinearData(Vector(false), Vector(false), (fixedAngle ? edata.angle : 0.0), 0.0); - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->requestOptions(this, true, true); + if (DIALOGFACTORY) + DIALOGFACTORY->requestOptions(this, true, true); } void ActionDimLinear::trigger() { ActionDimension::trigger(); preparePreview(); - RS_DimLinear * dim = new RS_DimLinear(container, data, edata); + DimLinear * dim = new DimLinear(container, data, edata); dim->setLayerToActive(); dim->setPenToActive(); dim->update(); container->addEntity(dim); // upd. undo list: - if (document != NULL) + if (document) { document->startUndoCycle(); document->addUndoable(dim); document->endUndoCycle(); } - deleteSnapper(); - Vector rz = graphicView->getRelativeZero(); - graphicView->moveRelativeZero(Vector(0.0, 0.0)); - graphicView->drawEntity(dim); - graphicView->moveRelativeZero(rz); - drawSnapper(); +// deleteSnapper(); +// Vector rz = graphicView->getRelativeZero(); +// graphicView->moveRelativeZero(Vector(0.0, 0.0)); +// graphicView->drawEntity(dim); +// graphicView->moveRelativeZero(rz); +// drawSnapper(); + graphicView->snapper.SetVisible(false); + graphicView->redraw(); - RS_DEBUG->print("ActionDimLinear::trigger(): dim added: %d", dim->getId()); + DEBUG->print("ActionDimLinear::trigger(): dim added: %d", dim->getId()); } void ActionDimLinear::preparePreview() @@ -87,57 +95,68 @@ void ActionDimLinear::preparePreview() Vector dirV; dirV.setPolar(100.0, edata.angle + M_PI / 2.0); - RS_ConstructionLine cl( - NULL, RS_ConstructionLineData( - edata.extensionPoint2, - edata.extensionPoint2 + dirV)); + ConstructionLine cl(NULL, ConstructionLineData(edata.extensionPoint2, + edata.extensionPoint2 + dirV)); - data.definitionPoint = - cl.getNearestPointOnEntity(data.definitionPoint); + data.definitionPoint = cl.getNearestPointOnEntity(data.definitionPoint); } void ActionDimLinear::mouseMoveEvent(QMouseEvent * e) { - RS_DEBUG->print("ActionDimLinear::mouseMoveEvent begin"); + DEBUG->print("ActionDimLinear::mouseMoveEvent begin"); Vector mouse = snapPoint(e); switch (getStatus()) { case SetExtPoint1: +// graphicView->snapper.SetVisible(); +// graphicView->redraw(); break; case SetExtPoint2: if (edata.extensionPoint1.valid) { - deletePreview(); - clearPreview(); -// preview->addEntity(new RS_Line(preview, -// RS_LineData(edata.extensionPoint1, mouse))); - drawPreview(); +// deletePreview(); +// clearPreview(); +// preview->addEntity(new Line(preview, +// LineData(edata.extensionPoint1, mouse))); +// drawPreview(); + graphicView->preview.clear(); + graphicView->preview.addEntity(new Line(&(graphicView->preview), + LineData(edata.extensionPoint1, mouse))); + graphicView->preview.SetVisible(); + graphicView->redraw(); } + break; case SetDefPoint: if (edata.extensionPoint1.valid && edata.extensionPoint2.valid) { - deletePreview(); - clearPreview(); +// deletePreview(); +// clearPreview(); data.definitionPoint = mouse; - - preparePreview(); - -// RS_DimLinear * dim = new RS_DimLinear(preview, data, edata); +// preparePreview(); +// DimLinear * dim = new DimLinear(preview, data, edata); // dim->update(); // preview->addEntity(dim); - drawPreview(); +// drawPreview(); + graphicView->preview.clear(); + preparePreview(); + DimLinear * dim = new DimLinear(&(graphicView->preview), data, edata); + dim->update(); + graphicView->preview.addEntity(dim); + graphicView->preview.SetVisible(); + graphicView->redraw(); } + break; } - RS_DEBUG->print("ActionDimLinear::mouseMoveEvent end"); + DEBUG->print("ActionDimLinear::mouseMoveEvent end"); } void ActionDimLinear::mouseReleaseEvent(QMouseEvent * e) @@ -146,18 +165,25 @@ void ActionDimLinear::mouseReleaseEvent(QMouseEvent * e) { Vector ce(snapPoint(e)); coordinateEvent(&ce); + graphicView->snapper.SetVisible(); } else if (e->button() == Qt::RightButton) { - deletePreview(); - deleteSnapper(); + if (getStatus() == 0) + { + graphicView->preview.SetVisible(false); + graphicView->snapper.SetVisible(false); + } + +// deletePreview(); +// deleteSnapper(); init(getStatus() - 1); } } void ActionDimLinear::coordinateEvent(Vector * e) { - if (e == NULL) + if (!e) return; Vector pos = *e; @@ -188,14 +214,14 @@ void ActionDimLinear::coordinateEvent(Vector * e) } } -void ActionDimLinear::commandEvent(RS_CommandEvent * e) +void ActionDimLinear::commandEvent(CommandEvent * e) { QString c = e->getCommand().toLower(); if (checkCommand("help", c)) { - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + if (DIALOGFACTORY) + DIALOGFACTORY->commandMessage(msgAvailableCommands() + getAvailableCommands().join(", ")); return; } @@ -205,32 +231,35 @@ void ActionDimLinear::commandEvent(RS_CommandEvent * e) case SetText: setText(c); - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->requestOptions(this, true, true); + if (DIALOGFACTORY) + DIALOGFACTORY->requestOptions(this, true, true); + graphicView->enableCoordinateInput(); setStatus(lastStatus); break; - case SetAngle: { + case SetAngle: + { bool ok; - double a = RS_Math::eval(c, &ok); + double a = Math::eval(c, &ok); + + if (ok) + setAngle(Math::deg2rad(a)); + else if (DIALOGFACTORY) + DIALOGFACTORY->commandMessage(tr("Not a valid expression")); - if (ok == true) - setAngle(RS_Math::deg2rad(a)); - else if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression")); + if (DIALOGFACTORY) + DIALOGFACTORY->requestOptions(this, true, true); - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->requestOptions(this, true, true); setStatus(lastStatus); } - break; + break; default: lastStatus = (Status)getStatus(); - deleteSnapper(); - deletePreview(); - clearPreview(); +// deleteSnapper(); +// deletePreview(); +// clearPreview(); if (checkCommand("text", c)) { @@ -240,6 +269,7 @@ void ActionDimLinear::commandEvent(RS_CommandEvent * e) } else if (!fixedAngle && (checkCommand("angle", c))) setStatus(SetAngle); + break; } } @@ -257,6 +287,7 @@ QStringList ActionDimLinear::getAvailableCommands() if (!fixedAngle) cmd += command("angle"); + break; default: @@ -268,35 +299,35 @@ QStringList ActionDimLinear::getAvailableCommands() void ActionDimLinear::updateMouseButtonHints() { - if (RS_DIALOGFACTORY != NULL) + if (DIALOGFACTORY) { switch (getStatus()) { case SetExtPoint1: - RS_DIALOGFACTORY->updateMouseWidget( + DIALOGFACTORY->updateMouseWidget( tr("Specify first extension line origin"), tr("Cancel")); break; case SetExtPoint2: - RS_DIALOGFACTORY->updateMouseWidget( + DIALOGFACTORY->updateMouseWidget( tr("Specify second extension line origin"), tr("Back")); break; case SetDefPoint: - RS_DIALOGFACTORY->updateMouseWidget( + DIALOGFACTORY->updateMouseWidget( tr("Specify dimension line location"), tr("Back")); break; case SetText: - RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), ""); + DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), ""); break; case SetAngle: - RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension line angle:"), ""); + DIALOGFACTORY->updateMouseWidget(tr("Enter dimension line angle:"), ""); break; default: - RS_DIALOGFACTORY->updateMouseWidget("", ""); + DIALOGFACTORY->updateMouseWidget("", ""); break; } } @@ -306,16 +337,16 @@ void ActionDimLinear::showOptions() { ActionInterface::showOptions(); - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->requestOptions(this, true, true); + if (DIALOGFACTORY) + DIALOGFACTORY->requestOptions(this, true, true); } void ActionDimLinear::hideOptions() { ActionInterface::hideOptions(); - if (RS_DIALOGFACTORY != NULL) - RS_DIALOGFACTORY->requestOptions(this, false); + if (DIALOGFACTORY) + DIALOGFACTORY->requestOptions(this, false); } double ActionDimLinear::getAngle()