1 #ifndef __GRAPHICVIEW_H__
2 #define __GRAPHICVIEW_H__
7 #include "rs_preview.h"
8 #include "rs_snapper.h"
11 class ActionInterface;
12 class RS_CommandEvent;
16 class RS_EntityContainer;
17 class RS_EventHandler;
19 class RS_LineTypePattern;
30 Drawing * getGraphic();
31 void setDrawingMode(RS2::DrawingMode m);
32 RS2::DrawingMode getDrawingMode();
33 void setDeleteMode(bool m);
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
44 virtual void redraw() = 0;
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();
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);
67 void setOffset(int ox, int oy);
68 void setOffsetX(int ox);
69 void setOffsetY(int oy);
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);
81 int getBorderBottom();
84 bool isUpdateEnabled();
85 void freezeZoom(bool freeze);
88 void setDefaultAction(ActionInterface * action);
89 ActionInterface * getDefaultAction();
90 void setCurrentAction(ActionInterface * action);
91 ActionInterface * getCurrentAction();
93 void killSelectActions();
94 void killAllActions();
97 * Must be overwritten to emulate a mouse move event with
98 * the last known mouse position.
102 virtual void emulateMouseMoveEvent() = 0;
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();
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();
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);
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);
148 virtual RS_LineTypePattern * getPattern(RS2::LineType t);
150 virtual void drawAbsoluteZero();
151 virtual void drawRelativeZero();
152 virtual void drawPaper();
153 virtual void drawGrid();
154 virtual void drawMetaGrid();
155 virtual void updateGrid();
157 virtual void updateGridStatusWidget(const QString & /*text*/);
159 void setDefaultSnapMode(RS2::SnapMode sm);
160 RS2::SnapMode getDefaultSnapMode();
161 void setSnapRestriction(RS2::SnapRestriction sr);
162 RS2::SnapRestriction getSnapRestriction();
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!
173 The snapper as a separate class makes sense, since it has several functions
174 for finding various snapping points. But what about rendering???
176 Having this class derive from that one *might* make sense... *Maybe*. Not sure.
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);
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);
192 void lockRelativeZero(bool lock);
193 bool isRelativeZeroLocked();
194 Vector getRelativeZero();
195 void setRelativeZero(const Vector & pos);
196 void moveRelativeZero(const Vector & pos);
198 RS_EventHandler * getEventHandler();
199 void setPrintPreview(bool pv);
200 bool isPrintPreview();
201 void setPrinting(bool p);
204 void setSimulationSpeed(int s);
205 int getSimulationSpeed();
206 void setSimulationSmooth(bool s);
207 void setSimulationRapid(bool r);
208 bool getSimulationRapid();
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
224 * Current default snap mode for this graphic view. Used for new
227 RS2::SnapMode defaultSnapMode;
229 * Current default snap restriction for this graphic view. Used for new
232 RS2::SnapRestriction defaultSnapRes;
233 RS2::DrawingMode drawingMode;
236 * Delete mode. If true, all drawing actions will delete in background color
240 bool simulationRunning; //! If true, the simulation is currectly running
249 Vector previousFactor;
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)
266 // We use this here instead of deriving ActionInterface from it because
267 // this makes more sense.
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
284 //QC was merged with QG
287 #endif // __GRAPHICVIEW_H__
290 class QG_GraphicView: public QWidget, public RS_GraphicView
295 QG_GraphicView(QWidget * parent = 0, const char * name = 0, Qt::WindowFlags f = 0);
296 virtual ~QG_GraphicView();
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);
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);
321 void paintEvent(QPaintEvent *);
322 virtual void resizeEvent(QResizeEvent * e);
325 void slotHScrolled(int value);
326 void slotVScrolled(int value);