]> Shamusworld >> Repos - architektonas/blob - src/actions/rs_actiondimlinear.h
Initial import
[architektonas] / src / actions / rs_actiondimlinear.h
1 /****************************************************************************
2 ** $Id: rs_actiondimlinear.h 1062 2004-01-16 21:51:20Z andrew $
3 **
4 ** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
5 **
6 ** This file is part of the qcadlib Library project.
7 **
8 ** This file may be distributed and/or modified under the terms of the
9 ** GNU General Public License version 2 as published by the Free Software
10 ** Foundation and appearing in the file LICENSE.GPL included in the
11 ** packaging of this file.
12 **
13 ** Licensees holding valid qcadlib Professional Edition licenses may use 
14 ** this file in accordance with the qcadlib Commercial License
15 ** Agreement provided with the Software.
16 **
17 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 **
20 ** See http://www.ribbonsoft.com for further details.
21 **
22 ** Contact info@ribbonsoft.com if any conditions of this licensing are
23 ** not clear to you.
24 **
25 **********************************************************************/
26
27 #ifndef RS_ACTIONDIMLINEAR_H
28 #define RS_ACTIONDIMLINEAR_H
29
30 #include "rs_actiondimension.h"
31 #include "rs_dimlinear.h"
32
33 /**
34  * This action class can handle user events to draw 
35  * aligned dimensions.
36  *
37  * @author Andrew Mustun
38  */
39 class RS_ActionDimLinear : public RS_ActionDimension {
40         //Q_OBJECT
41 public:
42         /**
43          * Varitions of this action.
44          */
45         enum Variation {
46                 AnyAngle,
47                 Horizontal,
48                 Vertical
49         };
50          
51     /**
52      * Action States.
53      */
54     enum Status {
55         SetExtPoint1,    /**< Setting the 1st ext point.  */
56         SetExtPoint2,    /**< Setting the 2nd ext point. */
57         SetDefPoint,     /**< Setting the common def point. */
58                 SetText,         /**< Setting the text label in the command line. */
59                 SetAngle         /**< Setting the angle in the command line. */
60     };
61
62 public:
63     RS_ActionDimLinear(RS_EntityContainer& container,
64                        RS_GraphicView& graphicView,
65                        double angle=0.0, bool fixedAngle=false);
66     ~RS_ActionDimLinear();
67         
68         static QAction* createGUIAction(RS2::ActionType type, QObject* /*parent*/);
69         
70         virtual RS2::ActionType rtti() {
71                 return RS2::ActionDimLinear;
72         }
73
74     void reset();
75
76     virtual void trigger();
77         void preparePreview();
78         
79     virtual void mouseMoveEvent(QMouseEvent* e);
80     virtual void mouseReleaseEvent(QMouseEvent* e);
81
82         virtual void coordinateEvent(RS_CoordinateEvent* e);
83     virtual void commandEvent(RS_CommandEvent* e);
84         virtual QStringList getAvailableCommands();
85         
86     virtual void hideOptions();
87     virtual void showOptions();
88         
89     virtual void updateMouseButtonHints();
90
91         double getAngle() {
92                 return edata.angle;
93         }
94
95         void setAngle(double a) {
96                 edata.angle = a;
97         }
98
99         bool hasFixedAngle() {
100                 return fixedAngle;
101         }
102
103 protected:
104     /**
105      * Aligned dimension data.
106      */
107     RS_DimLinearData edata;
108     /**
109      * Is the angle fixed?
110      */
111     bool fixedAngle;
112
113         /** Last status before entering text or angle. */
114         Status lastStatus;
115 };
116
117 #endif