]> Shamusworld >> Repos - architektonas/blob - src/actions/rs_actionblocksinsert.h
433dc9f2ce7db9eaa44236b4d906ceaf4f73cb87
[architektonas] / src / actions / rs_actionblocksinsert.h
1 /****************************************************************************
2 ** $Id: rs_actionblocksinsert.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_ACTIONBLOCKSINSERT_H
28 #define RS_ACTIONBLOCKSINSERT_H
29
30 #include "rs_previewactioninterface.h"
31 #include "rs_insert.h"
32
33 /**
34  * This action class can handle user events for inserting blocks into the
35  * current drawing.
36  *
37  * @author Andrew Mustun
38  */
39 class RS_ActionBlocksInsert : public RS_PreviewActionInterface {
40         //Q_OBJECT
41 public:
42     /**
43      * Action States.
44      */
45     enum Status {
46         SetTargetPoint,    /**< Setting the reference point. */
47                 SetAngle,          /**< Setting angle in the command line. */
48                 SetFactor,         /**< Setting factor in the command line. */
49                 SetColumns,        /**< Setting columns in the command line. */
50                 SetRows,           /**< Setting rows in the command line. */
51                 SetColumnSpacing,  /**< Setting column spacing in the command line. */
52                 SetRowSpacing      /**< Setting row spacing in the command line. */
53     };
54
55 public:
56     RS_ActionBlocksInsert(RS_EntityContainer& container,
57                         RS_GraphicView& graphicView);
58     ~RS_ActionBlocksInsert();
59         
60         static QAction* createGUIAction(RS2::ActionType /*type*/, QObject* /*parent*/);
61         
62         virtual RS2::ActionType rtti() {
63                 return RS2::ActionBlocksInsert;
64         }
65
66     virtual void init(int status=0);
67
68         void reset();
69
70     virtual void trigger();
71
72     virtual void mouseMoveEvent(QMouseEvent* e);
73     virtual void mouseReleaseEvent(QMouseEvent* e);
74
75     virtual void coordinateEvent(RS_CoordinateEvent* e);
76     virtual void commandEvent(RS_CommandEvent* e);
77         virtual QStringList getAvailableCommands();
78
79         virtual void showOptions();
80         virtual void hideOptions();
81
82     virtual void updateMouseButtonHints();
83     virtual void updateMouseCursor();
84     virtual void updateToolBar();
85
86         double getAngle() {
87                 return data.angle;
88         }
89
90         void setAngle(double a) {
91                 data.angle = a;
92         }
93
94         double getFactor() {
95                 return data.scaleFactor.x;
96         }
97
98         void setFactor(double f) {
99                 data.scaleFactor = Vector(f, f);
100         }
101
102         int getColumns() {
103                 return data.cols;
104         }
105
106         void setColumns(int c) {
107                 data.cols = c;
108         }
109         
110         int getRows() {
111                 return data.rows;
112         }
113
114         void setRows(int r) {
115                 data.rows = r;
116         }
117
118         double getColumnSpacing() {
119                 return data.spacing.x;
120         }
121
122         void setColumnSpacing(double cs) {
123                 data.spacing.x = cs;
124         }
125         
126         double getRowSpacing() {
127                 return data.spacing.y;
128         }
129
130         void setRowSpacing(double rs) {
131                 data.spacing.y = rs;
132         }
133
134 protected:
135         RS_Block* block;
136         RS_InsertData data;
137         
138         /** Last status before entering option. */
139         Status lastStatus;
140 };
141
142 #endif