]> Shamusworld >> Repos - architektonas/blobdiff - src/actions/rs_actioninfoarea.cpp
Major refactoring of actions: Moved implementation from header files
[architektonas] / src / actions / rs_actioninfoarea.cpp
index 9d09a4b6ca045cdc9a5d9f2da08ba800a36eafde..34e16468e789d469313a396de1e672fb79472c65 100644 (file)
-/****************************************************************************
-** $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 <jlhamm@acm.org>
+//
+// Who  When        What
+// ---  ----------  -----------------------------------------------------------
+// JLH  06/04/2010  Added this text. :-)
+//
 
 #include "rs_actioninfoarea.h"
 
-#include "rs_snapper.h"
+#include "rs_dialogfactory.h"
+#include "rs_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, RS_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 (RS2::qtToRsButtonState(e->button()) == RS2::LeftButton)
+       {
+               Vector 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::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