]> Shamusworld >> Repos - architektonas/blob - src/mainapp/graphicview.h
90e30b21208b64b3eb30105e0e3ccbb17504c06b
[architektonas] / src / mainapp / graphicview.h
1 #ifndef __GRAPHICVIEW_H__
2 #define __GRAPHICVIEW_H__
3
4 #include <QtGui>
5 #include "rs.h"
6 #include "rs_color.h"
7 #include "rs_preview.h"
8 #include "rs_snapper.h"
9 #include "vector.h"
10
11 class ActionInterface;
12 class RS_CommandEvent;
13 class Drawing;
14 class PaintInterface;
15 class RS_Entity;
16 class RS_EntityContainer;
17 class RS_EventHandler;
18 class RS_Grid;
19 class RS_LineTypePattern;
20 class RS_Pen;
21
22 class GraphicView
23 {
24         public:
25                 GraphicView();
26                 ~GraphicView();
27
28                 void cleanUp();
29
30                 Drawing * getGraphic();
31                 void setDrawingMode(RS2::DrawingMode m);
32                 RS2::DrawingMode getDrawingMode();
33                 void setDeleteMode(bool m);
34                 bool getDeleteMode();
35
36                 /** This virtual method must be overwritten to return
37                 the width of the widget the graphic is shown in */
38                 virtual int getWidth() = 0;
39                 /** This virtual method must be overwritten to return
40                 the height of the widget the graphic is shown in */
41                 virtual int getHeight() = 0;
42                 /** This virtual method must be overwritten to redraw
43                 the widget. */
44                 virtual void redraw() = 0;
45
46                 /** This virtual method must be overwritten and is then
47                 called whenever the view changed */
48                 virtual void adjustOffsetControls();
49                 /** This virtual method must be overwritten and is then
50                 called whenever the view changed */
51                 virtual void adjustZoomControls();
52
53                 virtual void setBackground(const RS_Color & bg);
54                 RS_Color getBackground();
55                 RS_Color getForeground();
56                 void setGridColor(const RS_Color & c);
57                 void setMetaGridColor(const RS_Color & c);
58                 void setSelectedColor(const RS_Color & c);
59                 void setHighlightedColor(const RS_Color & c);
60                 virtual void setMouseCursor(RS2::CursorType /*c*/);
61                 void setContainer(RS_EntityContainer * container);
62                 RS_EntityContainer * getContainer();
63                 void setFactor(double f);
64                 void setFactorX(double f);
65                 void setFactorY(double f);
66                 Vector getFactor();
67                 void setOffset(int ox, int oy);
68                 void setOffsetX(int ox);
69                 void setOffsetY(int oy);
70                 int getOffsetX();
71                 int getOffsetY();
72                 void centerOffsetX();
73                 void centerOffsetY();
74                 void centerX(double x);
75                 void centerY(double y);
76                 virtual void updateView();
77                 void setBorders(int left, int top, int right, int bottom);
78                 int getBorderLeft();
79                 int getBorderTop();
80                 int getBorderRight();
81                 int getBorderBottom();
82                 void disableUpdate();
83                 void enableUpdate();
84                 bool isUpdateEnabled();
85                 void freezeZoom(bool freeze);
86                 bool isZoomFrozen();
87
88                 void setDefaultAction(ActionInterface * action);
89                 ActionInterface *  getDefaultAction();
90                 void setCurrentAction(ActionInterface * action);
91                 ActionInterface * getCurrentAction();
92
93                 void killSelectActions();
94                 void killAllActions();
95
96                 /**
97                  * Must be overwritten to emulate a mouse move event with
98                  * the last known mouse position.
99                  *
100                  * @see mx, my
101                  */
102                 virtual void emulateMouseMoveEvent() = 0;
103
104                 void back();
105                 void enter();
106
107                 void mousePressEvent(QMouseEvent * e);
108                 void mouseReleaseEvent(QMouseEvent * e);
109                 void mouseMoveEvent(QMouseEvent * e);
110                 void mouseLeaveEvent();
111                 void mouseEnterEvent();
112                 void keyPressEvent(QKeyEvent * e);
113                 void keyReleaseEvent(QKeyEvent * e);
114                 void commandEvent(RS_CommandEvent * e);
115                 void enableCoordinateInput();
116                 void disableCoordinateInput();
117
118                 virtual void zoomIn(double f = 1.5, const Vector & center = Vector(false));
119                 virtual void zoomInX(double f = 1.5);
120                 virtual void zoomInY(double f = 1.5);
121                 virtual void zoomOut(double f = 1.5, const Vector & center = Vector(false));
122                 virtual void zoomOutX(double f = 1.5);
123                 virtual void zoomOutY(double f = 1.5);
124                 virtual void zoomAuto(bool axis = true, bool keepAspectRatio = true);
125                 virtual void zoomAutoY(bool axis = true);
126                 virtual void zoomPrevious();
127                 virtual void saveView();
128                 virtual void restoreView();
129                 virtual void zoomWindow(Vector v1, Vector v2, bool keepAspectRatio = true);
130                 //virtual void zoomPan(Vector v1);
131                 virtual void zoomPan(int dx, int dy);
132                 virtual void zoomScroll(RS2::Direction direction);
133                 virtual void zoomPage();
134
135                 virtual void drawWindow(Vector v1, Vector v2);
136                 virtual void drawIt();
137                 virtual void drawEntity(RS_Entity * e, double patternOffset = 0.0, bool db = false);
138                 virtual void drawEntityPlain(RS_Entity * e, double patternOffset = 0.0);
139                 virtual void setPenForEntity(RS_Entity * e);
140
141                 void simulateIt();
142                 void simulateEntity(RS_Entity * e, const RS_Pen & pen);
143                 void drawLineSmooth(const Vector & p1, const Vector & p2, const RS_Pen & pen);
144                 void drawArcSmooth(const Vector & center, double radius,
145                         double a1, double a2, bool rev, const RS_Pen & pen);
146                 void simulationDelay(bool step = false);
147
148                 virtual RS_LineTypePattern * getPattern(RS2::LineType t);
149
150                 virtual void drawAbsoluteZero();
151                 virtual void drawRelativeZero();
152                 virtual void drawPaper();
153                 virtual void drawGrid();
154                 virtual void drawMetaGrid();
155                 virtual void updateGrid();
156                 RS_Grid * getGrid();
157                 virtual void updateGridStatusWidget(const QString & /*text*/);
158
159                 void setDefaultSnapMode(RS2::SnapMode sm);
160                 RS2::SnapMode getDefaultSnapMode();
161                 void setSnapRestriction(RS2::SnapRestriction sr);
162                 RS2::SnapRestriction getSnapRestriction();
163                 bool isGridOn();
164
165 /*
166 What to do about this shiatsu? This stuff is used in the snapper rendering
167 code... Maybe move all the snapper rendering back into this class???
168 Seems to make sense, though it kinda blows encapsulation. But it's already
169 blown by the snapper class having to use these functions in the first place!
170
171 How to fix???
172
173 The snapper as a separate class makes sense, since it has several functions
174 for finding various snapping points. But what about rendering???
175
176 Having this class derive from that one *might* make sense... *Maybe*. Not sure.
177
178 */
179                 Vector toGui(Vector v);
180                 double toGuiX(double x, bool * visible = NULL);
181                 double toGuiY(double y);
182                 double toGuiDX(double d);
183                 double toGuiDY(double d);
184
185                 Vector toGraph(Vector v);
186                 Vector toGraph(int x, int y);
187                 double toGraphX(int x);
188                 double toGraphY(int y);
189                 double toGraphDX(int d);
190                 double toGraphDY(int d);
191
192                 void lockRelativeZero(bool lock);
193                 bool isRelativeZeroLocked();
194                 Vector getRelativeZero();
195                 void setRelativeZero(const Vector & pos);
196                 void moveRelativeZero(const Vector & pos);
197
198                 RS_EventHandler * getEventHandler();
199                 void setPrintPreview(bool pv);
200                 bool isPrintPreview();
201                 void setPrinting(bool p);
202                 bool isPrinting();
203                 bool isDraftMode();
204                 void setSimulationSpeed(int s);
205                 int getSimulationSpeed();
206                 void setSimulationSmooth(bool s);
207                 void setSimulationRapid(bool r);
208                 bool getSimulationRapid();
209
210         protected:
211                 RS_EntityContainer * container;
212                 RS_EventHandler * eventHandler;
213                 int mx;                                                         //!< Last known mouse cursor position
214                 int my;                                                         //!< Last known mouse cursor position
215                 PaintInterface * painter;
216                 RS_Color background;                            //! background color (any color)
217                 RS_Color foreground;                            //! foreground color (black or white)
218                 RS_Color gridColor;                                     //! grid color
219                 RS_Color metaGridColor;                         //! meta grid color
220                 RS_Color selectedColor;                         //! selected color
221                 RS_Color highlightedColor;                      //! highlighted color
222                 RS_Grid * grid;                                         //! Grid
223                 /**
224                  * Current default snap mode for this graphic view. Used for new
225                  * actions.
226                  */
227                 RS2::SnapMode defaultSnapMode;
228                 /**
229                  * Current default snap restriction for this graphic view. Used for new
230                  * actions.
231                  */
232                 RS2::SnapRestriction defaultSnapRes;
233                 RS2::DrawingMode drawingMode;
234
235                 /**
236                  * Delete mode. If true, all drawing actions will delete in background color
237                  * instead.
238                  */
239                 bool deleteMode;
240                 bool simulationRunning;                         //! If true, the simulation is currectly running
241
242         private:
243                 int updateEnabled;
244                 bool zoomFrozen;
245                 bool draftMode;
246                 Vector factor;
247                 int offsetX;
248                 int offsetY;
249                 Vector previousFactor;
250                 int previousOffsetX;
251                 int previousOffsetY;
252                 int borderLeft;
253                 int borderTop;
254                 int borderRight;
255                 int borderBottom;
256                 Vector relativeZero;
257                 bool relativeZeroLocked;
258                 bool printPreview;                              //! Print preview flag
259                 bool printing;                                  //! Active when printing only:
260                 int simulationSpeed;                    //! Simulation speed in percentage
261                 bool simulationSmooth;                  //! If true, the entity is drawn slowly (pixel by pixel).
262                 bool simulationRapid;                   //! If true, the way between entities is also shown.
263                 Vector simulationLast;                  //! Last position (for rapid move)
264
265         public://for now
266                 // We use this here instead of deriving ActionInterface from it because
267                 // this makes more sense.
268                 RS_Snapper snapper;
269                 RS_Preview preview;
270
271 //QG
272         protected:
273                 int lastWidth;
274                 int lastHeight;
275                 QScrollBar * hScrollBar;                        //! Horizontal scrollbar.
276                 QScrollBar * vScrollBar;                        //! Vertical scrollbar.
277                 QLabel * gridStatus;                            //! Label for grid spacing.
278                 QCursor * curCad;                                       //! CAD mouse cursor
279                 QCursor * curDel;                                       //! Delete mouse cursor
280                 QCursor * curSelect;                            //! Select mouse cursor
281                 QCursor * curMagnifier;                         //! Magnifying glass mouse cursor
282                 QCursor * curHand;                                      //! Hand mouse cursor
283
284 //QC was merged with QG
285 };
286
287 #endif  // __GRAPHICVIEW_H__
288
289 #if 0
290 class QG_GraphicView: public QWidget, public RS_GraphicView
291 {
292         Q_OBJECT
293
294         public:
295                 QG_GraphicView(QWidget * parent = 0, const char * name = 0, Qt::WindowFlags f = 0);
296                 virtual ~QG_GraphicView();
297
298                 virtual int getWidth();
299                 virtual int getHeight();
300                 virtual void redraw();
301                 virtual void adjustOffsetControls();
302                 virtual void adjustZoomControls();
303                 virtual void setBackground(const RS_Color & bg);
304                 virtual void setMouseCursor(RS2::CursorType c);
305                 virtual void updateGridStatusWidget(const QString & text);
306
307         protected:
308                 virtual void emulateMouseMoveEvent();
309                 virtual void mousePressEvent(QMouseEvent * e);
310                 virtual void mouseReleaseEvent(QMouseEvent * e);
311                 virtual void mouseMoveEvent(QMouseEvent * e);
312                 virtual void tabletEvent(QTabletEvent * e);
313                 virtual void leaveEvent(QEvent *);
314                 virtual void enterEvent(QEvent *);
315                 virtual void focusInEvent(QFocusEvent *);
316                 virtual void focusOutEvent(QFocusEvent *);
317                 virtual void wheelEvent(QWheelEvent * e);
318                 virtual void keyPressEvent(QKeyEvent * e);
319                 virtual void keyReleaseEvent(QKeyEvent * e);
320
321                 void paintEvent(QPaintEvent *);
322                 virtual void resizeEvent(QResizeEvent * e);
323
324         private slots:
325                 void slotHScrolled(int value);
326                 void slotVScrolled(int value);
327 };
328 #endif