]> Shamusworld >> Repos - architektonas/blob - src/actions/rs_actiondrawlineangle.h
537a635f45e5b12c7575fc6a3e63f61bf1579042
[architektonas] / src / actions / rs_actiondrawlineangle.h
1 /****************************************************************************
2 ** $Id: rs_actiondrawlineangle.h 1092 2004-03-16 18:01:08Z 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_ACTIONDRAWLINEANGLE_H
28 #define RS_ACTIONDRAWLINEANGLE_H
29
30 #include "rs_previewactioninterface.h"
31 #include "rs_line.h"
32
33 /**
34  * This action class can handle user events to draw 
35  * simple lines at a gien angle.
36  *
37  * @author Andrew Mustun
38  */
39 class RS_ActionDrawLineAngle : public RS_PreviewActionInterface {
40         //Q_OBJECT
41 public:
42     /**
43      * Action States.
44      */
45     enum Status {
46         SetPos,       /**< Setting the position.  */
47                 SetAngle,     /**< Setting angle in the command line. */
48                 SetLength     /**< Setting length in the command line. */
49     };
50         
51     RS_ActionDrawLineAngle(RS_EntityContainer& container,
52                            RS_GraphicView& graphicView,
53                            double angle=0.0,
54                            bool fixedAngle=false);
55     ~RS_ActionDrawLineAngle();
56
57         static QAction* createGUIAction(RS2::ActionType type, QObject* /*parent*/);
58         
59         virtual RS2::ActionType rtti() {
60                 return RS2::ActionDrawLineAngle;
61         }
62
63     void reset();
64
65     virtual void init(int status=0);
66         
67     virtual void trigger();
68
69     virtual void mouseMoveEvent(QMouseEvent* e);
70     virtual void mouseReleaseEvent(QMouseEvent* e);
71         void preparePreview();
72         
73         virtual void coordinateEvent(RS_CoordinateEvent* e);
74     virtual void commandEvent(RS_CommandEvent* e);
75         virtual QStringList getAvailableCommands();
76         
77     virtual void hideOptions();
78     virtual void showOptions();
79
80     virtual void updateMouseButtonHints();
81     virtual void updateMouseCursor();
82     virtual void updateToolBar();
83
84         void setSnapPoint(int sp) {
85                 snpPoint = sp;
86         }
87
88         int getSnapPoint() {
89                 return snpPoint;
90         }
91
92         void setAngle(double a) {
93                 angle = a;
94         }
95
96         double getAngle() {
97                 return angle;
98         }
99
100         void setLength(double l) {
101                 length = l;
102         }
103
104         double getLength() {
105                 return length;
106         }
107
108         bool hasFixedAngle() {
109                 return fixedAngle;
110         }
111
112 protected:
113     /**
114      * Line data defined so far.
115      */
116     RS_LineData data;
117         /**
118          * Position.
119          */
120         Vector pos;
121     /**
122      * Line angle.
123      */
124     double angle;
125         /**
126          * Line length.
127          */
128         double length;
129     /**
130      * Is the angle fixed?
131      */
132     bool fixedAngle;
133     /**
134      * Snap point (start, middle, end).
135      */
136     int snpPoint;
137 };
138
139 #endif
140