Scribus
Open source desktop publishing at your fingertips
scribusview.h
1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 /***************************************************************************
8  scribusview.h - description
9  -------------------
10  begin : Fre Apr 6 21:47:55 CEST 2001
11  copyright : (C) 2001 by Franz Schmid
12  email : Franz.Schmid@altmuehlnet.de
13  ***************************************************************************/
14 
15 /***************************************************************************
16  * *
17  * This program is free software; you can redistribute it and/or modify *
18  * it under the terms of the GNU General Public License as published by *
19  * the Free Software Foundation; either version 2 of the License, or *
20  * (at your option) any later version. *
21  * *
22  ***************************************************************************/
23 
24 #ifndef SCRIBUSVIEW_H
25 #define SCRIBUSVIEW_H
26 
27 #include <vector>
28 // include files for QT
29 #include <QScrollArea>
30 #include <QLineEdit>
31 #include <QScrollBar>
32 #include <QMap>
33 #include <QMenu>
34 #include <QLabel>
35 #include <QComboBox>
36 #include <QProgressDialog>
37 #include <QPushButton>
38 #include <QSpinBox>
39 #include <QCursor>
40 #include <QDragLeaveEvent>
41 #include <QDragEnterEvent>
42 #include <QDragMoveEvent>
43 #include <QDropEvent>
44 #include <QMouseEvent>
45 #include <QPaintEvent>
46 #include <QPoint>
47 #include <QRect>
48 #include <QRectF>
49 #include <QTime>
50 #include <QTimer>
51 #include <QWheelEvent>
52 #include <QRubberBand>
53 #include <QList>
54 
55 class QEvent;
56 class QMimeData;
57 
58 // application specific includes
59 #include "observable.h"
60 #include "scribusapi.h"
61 #include "scribusdoc.h"
62 #include "ui/clockwidget.h"
63 #include "undotransaction.h"
64 
65 class Canvas;
66 class CanvasMode;
67 class CanvasGesture;
68 class Hruler;
69 class Vruler;
70 class ScPage;
71 class RulerMover;
72 class PageItem;
73 class PageSelector;
74 class ScribusDoc;
75 class ScribusWin;
76 class ScribusMainWindow;
77 class ScrSpinBox;
78 class Selection;
79 class UndoManager;
81 #include "selectionrubberband.h"
82 
87 class SCRIBUS_API ScribusView : public QScrollArea, public Observer<QRectF>
88 {
89  Q_OBJECT
90 
91 public:
92  ScribusView(QWidget* win=0, ScribusMainWindow* mw=0, ScribusDoc* doc=0);
93  ~ScribusView();
94 
95  friend class CanvasMode_CopyProperties;
96  friend class CanvasMode_Edit;
97  friend class CanvasMode_EditGradient;
98  friend class CanvasMode_EditMeshGradient;
99  friend class CanvasMode_EditMeshPatch;
100  friend class CanvasMode_EditTable;
101  friend class CanvasMode_EditWeldPoint;
102  friend class CanvasMode_EditPolygon;
103  friend class CanvasMode_EditArc;
104  friend class CanvasMode_EditSpiral;
105  friend class CanvasMode_FrameLinks;
106  friend class CanvasMode_ImageImport;
107  friend class CanvasMode_Magnifier;
108  friend class CanvasMode_NodeEdit;
109  friend class CanvasMode_Normal;
110  friend class CanvasMode_ObjImport;
111  friend class CanvasMode_Rotate;
112 
113  void requestMode(int appMode);
114  void setCursorBasedOnAppMode(int appMode);
115  void startGesture(CanvasGesture*);
116  void stopGesture();
117 
119  RulerMover *rulerMover; //Widget between the two rulers for dragging the ruler origin
120  Hruler *horizRuler;
121  Vruler *vertRuler;
122  ClockWidget *clockLabel;
123  QPushButton *endEditButton;
125  ScribusDoc * const Doc;
126  Canvas * const m_canvas;
127  CanvasMode* m_canvasMode; // might be a CanvasGesture FIXME make private
128  CanvasMode* canvasMode();
129  QMap<int,CanvasMode*> modeInstances;
130  ApplicationPrefs * const Prefs;
131  UndoManager * const undoManager;
132  ScribusMainWindow* m_ScMW;
133  double OldScale;
134  double dragX,dragY,dragW,dragH;
135  double oldW;
136  int RotMode;
137  int DrHY;
138  int DrVX;
139  bool HaveSelRect;
140  //bool GroupSel;
141  bool DraggedGroup;
142  bool DraggedGroupFirst;
143  bool MidButt;
144  bool updateOn;
145  bool FirstPoly;
146  bool Magnify;
147  bool storedFramesShown;
148  bool storedShowControls;
149  int editStrokeGradient;
150  int redrawMode;
151  int redrawCount;
152  bool m_AnnotChanged;
153  bool m_EditModeWasOn;
154  bool m_ChangedState;
155  PageItem *redrawItem;
156  SelectionRubberBand *redrawMarker;
157  FPoint RCenter;
158  FPoint m_mousePointDoc;
159  void updatesOn(bool on);
160  //CB This MUST now be called AFTER a call to doc->addPage or doc->addMasterPage as it
161  //does NOT create a page anymore.
162  ScPage* addPage(int nr, bool mov = true);
163 
164  void reformPages(bool moveObjects = true);
165  void reformPagesView();
166  void showMasterPage(int nr);
167  void hideMasterPage();
168  void showSymbolPage(QString symbolName);
169  void hideSymbolPage();
170  void showInlinePage(int id);
171  void hideInlinePage();
172  QImage PageToPixmap(int Nr, int maxGr, bool drawFrame = true, bool drawBackground = true);
173  QImage MPageToPixmap(QString name, int maxGr, bool drawFrame = true);
174  void RecalcPicturesRes();
179  void setNewRulerOrigin(QMouseEvent *m);
180  void getDragRectScreen(double *x, double *y, double *w, double *h);
181  void getGroupRectScreen(double *x, double *y, double *w, double *h);
182  bool PointOnLine(QPoint Start, QPoint Ende, QRect MArea);
183  void TransformPoly(int mode, int rot = 1, double scaling = 1.0);
184  bool slotSetCurs(int x, int y);
185  void HandleCurs(PageItem *currItem, QRect mpo);
186  void Deselect(bool prop = true);
187  void SelectItemNr(uint nr, bool draw = true, bool single = false);
188  void SelectItem(PageItem *pi, bool draw = true, bool single = false);
189  void rememberOldZoomLocation(int mx=0, int my=0);
190  bool groupTransactionStarted() { return m_groupTransactions > 0; }
191  void startGroupTransaction(const QString &actionName = "",
192  const QString &description = "",
193  QPixmap *actionPixmap = 0,
194  Selection* customSelection = 0);
195  void endGroupTransaction();
196  void cancelGroupTransaction();
197  void setScale(const double newScale);
198  double scale() const;
199 
200  virtual void changed(QRectF re, bool);
201 
202  void updateCanvas(QRectF box = QRectF());
203  void updateCanvas(double x, double y, double width, double height) { updateCanvas(QRectF(x,y,width,height)); }
204  void setCanvasOrigin(double x, double y);
205  void setCanvasCenter(double x, double y);
206  void scrollCanvasBy(double deltaX, double deltaY);
207  FPoint canvasOrigin() const;
208  QRectF visibleCanvas() const;
209  void setRedrawMarkerShown(bool shown);
210 
211 private:
212  // legacy:
213  void updateContents(QRect box = QRect());
214  void updateContents(int x, int y, int w, int h);
215  void repaintContents(QRect box);
216  void resizeContents(int w, int h);
217  QPoint contentsToViewport(QPoint p);
218  QPoint viewportToContents(QPoint p);
219 public: // for now
220  int contentsX();
221  int contentsY();
222  int contentsWidth();
223  int contentsHeight();
224  void setContentsPos(int x, int y);
225  int visibleWidth() { return viewport()->size().width(); } ;
226  int visibleHeight() { return viewport()->size().height(); } ;
227  void stopAllDrags();
228  void scrollBy(int x, int y);
229  void zoom(double scale = 0.0);
230  void zoom(int canvasX, int canvasY, double scale, bool preservePoint);
231 
232 public slots: // Public slots
233  void languageChange();
234  void toggleCMS(bool cmsOn);
235  void switchPreviewVisual(int vis);
236  void togglePreviewEdit(bool edit);
237  void togglePreview(bool inPreview);
238  void unitChange();
239  void setRulersShown(bool isShown);
241  void slotZoom100();
243  void slotZoomIn(int mx=0,int my=0);
244  void slotZoomOut(int mx=0,int my=0);
246  void DrawNew();
247  void GotoPa(int Seite);
248  void GotoLa(int l);
249  void GotoPage(int Seite);
250  void ChgUnit(int art);
251 
252  void SetCPo(double x, double y);
253  void SetCCPo(double x, double y);
254  void editExtendedImageProperties();
255  void RefreshGradient(PageItem *currItem, double dx = 8, double dy = 8);
256  void ToPicFrame();
257  void ToPolyFrame();
258  void ToTextFrame();
259  void ToBezierFrame();
260  void ToPathText();
261  void FromPathText();
262  void Bezier2Poly();
263  void PasteToPage();
264  void TextToPath();
265 
266 //for linking frame after draw new frame
267 private:
268  PageItem * firstFrame;
269 
270 private: // Private attributes
271  int m_previousMode;
272  QMenu *pmen3;
273  QMenu *pmenResolution;
274  QPoint m_pressLocation;
275  QTime m_moveTimer;
276  QTimer *m_dragTimer;
277  bool m_dragTimerFired;
278  bool Ready;
279  int oldX;
280  int oldY;
281  int m_groupTransactions;
282  int m_oldCanvasHeight;
283  int m_oldCanvasWidth;
284  UndoTransaction m_groupTransaction;
285  bool _isGlobalMode;
286  bool linkAfterDraw;
287  bool ImageAfterDraw;
288  bool m_oldSnapToElem;
289 
290  double oldItemX;
291  double oldItemY;
292 
293 private slots:
294  void setZoom();
300  void setRulerPos(int x, int y);
301  void setObjectUndoMode();
302  void setGlobalUndoMode();
303  void dragTimerTimeOut();
304 
305 public:
306  virtual void wheelEvent ( QWheelEvent *ev );
307  virtual void changeEvent(QEvent *e);
308 
309  void keyPressEvent(QKeyEvent *k);
310  void keyReleaseEvent(QKeyEvent *k);
311  void inputMethodEvent ( QInputMethodEvent * event );
312  QVariant inputMethodQuery ( Qt::InputMethodQuery query ) const ;
313 
314  inline void registerMousePress(QPoint p);
315  bool mousePressed();
316  void resetMousePressed();
317  inline QPoint mousePressLocation();
318  inline bool moveTimerElapsed();
319  inline void resetMoveTimer();
320 
321  inline void startDragTimer();
322  inline void stopDragTimer();
323  inline void resetDragTimer();
324  inline bool dragTimerElapsed();
325 
326  bool handleObjectImport(QMimeData* mimeData, TransactionSettings* trSettings = NULL);
327 
328 protected: // Protected methods
329  virtual void enterEvent(QEvent *);
330  virtual void leaveEvent(QEvent *);
331  virtual void resizeEvent ( QResizeEvent * event );
332  bool eventFilter(QObject *obj, QEvent *event);
333 
334  // those appear to be gone from QScrollArea:
335  virtual void contentsDragEnterEvent(QDragEnterEvent *e);
336  virtual void contentsDragMoveEvent(QDragMoveEvent *e);
337  virtual void contentsDragLeaveEvent(QDragLeaveEvent *e);
338  virtual void contentsDropEvent(QDropEvent *e);
339  virtual void setHBarGeometry(QScrollBar &bar, int x, int y, int w, int h);
340  virtual void setVBarGeometry(QScrollBar &bar, int x, int y, int w, int h);
341  void scrollContentsBy(int dx, int dy);
342 
343  //The width of vertical ruler/height of horizontal ruler, set to 17 in scribusview.cpp
344  int m_vhRulerHW;
345 
346 signals:
347  void changeUN(int);
348  void changeLA(int);
349  void HaveSel();
350  void DocChanged();
351  void ItemGeom();
352  void PolyOpen();
353  void PStatus(int, uint);
354  void SetAngle(double);
355  void SetSizeValue(double);
356  void SetLineArt(Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle);
357  void SetLocalValues(double, double, double, double);
358  void ItemTextAttr(double);
359  void ItemTextCols(int, double);
360  void SetDistValues(double, double, double, double);
361  void ItemCharStyle(const CharStyle&);
362  void ItemTextAlign(int);
363  void ItemTextEffects(int);
364  void HasTextSel();
365  void HasNoTextSel();
366  void MVals(double, double, double, double, double, double, int);
367  void PaintingDone();
368  void LoadPic();
369  void StatusPic();
370  void AppendText();
371  void DoGroup();
372  void CutItem();
373  void CopyItem();
374  void Amode(int);
375  void AddBM(PageItem *);
376  void DelBM(PageItem *);
377  void ChBMText(PageItem *);
378  void ToScrap(QString);
379  void LoadElem(QString, double, double, bool, bool, ScribusDoc *, ScribusView *);
380  void LevelChanged(uint);
381  void HavePoint(bool, bool);
382  void ClipPo(double, double);
383  void PolyStatus(int, uint);
384  void AnnotProps();
385  void EndNodeEdit();
386  void Hrule(int);
387  void Vrule(int);
388  void MousePos(double, double);
389  void callGimp();
390  void signalGuideInformation(int, qreal);
391 };
392 
393 
394 
395 
396 inline void ScribusView::registerMousePress(QPoint p)
397 {
398  m_pressLocation = p;
399  m_moveTimer.start();
400  m_dragTimerFired = false;
401 }
402 
403 
404 inline QPoint ScribusView::mousePressLocation()
405 {
406  return m_pressLocation;
407 }
408 
409 
410 inline bool ScribusView::moveTimerElapsed()
411 {
412  return (m_moveTimer.elapsed() > Prefs->uiPrefs.mouseMoveTimeout);
413 }
414 
415 
416 inline void ScribusView::resetMoveTimer()
417 {
418  m_moveTimer.start();
419 }
420 
421 
422 inline void ScribusView::startDragTimer()
423 {
424  m_dragTimerFired = false;
425  m_dragTimer->setSingleShot(true);
426  m_dragTimer->start(1000); // set Timeout for starting a Drag operation to 1 sec.
427 }
428 
429 inline void ScribusView::stopDragTimer()
430 {
431  m_dragTimer->stop();
432 }
433 
434 
435 inline void ScribusView::resetDragTimer()
436 {
437  m_dragTimerFired = false;
438 }
439 
440 
441 inline bool ScribusView::dragTimerElapsed()
442 {
443  return m_dragTimerFired;
444 }
445 
446 inline CanvasMode* ScribusView::canvasMode()
447 {
448  return m_canvasMode;
449 }
450 
451 #endif
Definition: prefsstructs.h:453
Definition: observable.h:87
Definition: canvasmode_copyproperties.h:29
Definition: charstyle.h:78
Definition: storytext.cpp:1996
Definition: undotransaction.h:45
Definition: canvasmode_editmeshpatch.h:42
Definition: canvasmode_edit.h:35
Definition: canvasmode_objimport.h:35
Definition: rulermover.h:34
Definition: canvas.h:80
Vertical ruler.
Definition: vruler.h:40
RulerMover * rulerMover
Definition: scribusview.h:119
Definition: scpage.h:46
This Class is the base class for your application. It sets up the main window and providing a menubar...
Definition: scribus.h:123
Definition: canvasmode_editmeshgradient.h:41
Definition: canvasmode_editgradient.h:35
A point with floating point precision.
Definition: fpoint.h:43
Definition: selectionrubberband.h:9
the Document Class
Definition: scribusdoc.h:90
Definition: scribuswin.h:40
Definition: canvasmode.h:72
Definition: pageselector.h:24
Definition: canvasmode_editarc.h:40
ScrSpinBox is a Qt4 replacement for our old ScrSpinBox using Qt3.
Definition: scrspinbox.h:21
Definition: canvasmode_editspiral.h:41
Definition: canvasmode_magnifier.h:37
Definition: undomanager.h:52
Definition: canvasgesture.h:47
Horizontal ruler.
Definition: hruler.h:45
Definition: canvasmode_imageimport.h:32
Definition: canvasmode_normal.h:37
Definition: canvasmode_edittable.h:34
Definition: canvasmode_editweldpoint.h:41
Definition: pageitem.h:92
UndoManager handles the undo stack.
Definition: undomanager.h:81
Definition: clockwidget.h:35
Definition: canvasmode_rotate.h:35
Definition: scribusview.h:87
Definition: canvasmode_nodeedit.h:32
ScribusDoc *const Doc
Definition: scribusview.h:125
Definition: canvasmode_editpolygon.h:41
Definition: selection.h:34