MyBooks
reportpreview.h
Go to the documentation of this file.
1 /***************************************************************************
2  * This file is part of the CuteReport project *
3  * Copyright (C) 2012-2017 by Alexander Mikhalov *
4  * alexander.mikhalov@gmail.com *
5  * *
6  ** GNU General Public License Usage **
7  * *
8  * This library is free software: you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation, either version 3 of the License, or *
11  * (at your option) any later version. *
12  * You should have received a copy of the GNU General Public License *
13  * along with this program. If not, see <http://www.gnu.org/licenses/>. *
14  * *
15  * *
16  * This library is distributed in the hope that it will be useful, *
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19  * GNU General Public License for more details. *
20  ***************************************************************************/
21 #ifndef REPORTPREVIEW_H
22 #define REPORTPREVIEW_H
23 
24 #include "widgets_export.h"
25 #include <QWidget>
26 #include <QPointer>
27 #include <QGraphicsScene>
28 #include <QTimer>
29 
30 namespace Ui {
31 class ReportPreview;
32 }
33 
34 class QGraphicsDropShadowEffect;
35 class QProgressDialog;
36 class Preview;
37 class QGraphicsSceneMouseEvent;
38 
39 namespace CuteReport
40 {
41 
42 class ReportCore;
43 class ReportInterface;
44 class RenderedPageInterface;
45 class ReportPreviewEditor;
46 class GraphicsScene;
47 
48 class WIDGET_EXPORTS ReportPreview : public QWidget
49 {
50  Q_OBJECT
51 public:
52  enum PreviewFlag {
53  ShowNothing = 0x0000,
54  ShowPrint = 0x0001,
55  ShowZoom = 0x0002,
56  ShowFit = 0x0004,
57  ShowNavigation = 0x0008,
58  ShowRun = 0x0010,
59  ShowBorderless = 0x0020,
60  ShowFitted = 0x0040,
61  ShowAllTools = ShowPrint | ShowZoom | ShowFit | ShowNavigation | ShowRun | ShowRun,
62  ShowDefault = ShowAllTools
63  };
64 
65  enum ResultFitMode { FitPage, FitWidth };
66 
67  Q_DECLARE_FLAGS(PreviewFlags, PreviewFlag)
68 
69  enum ZoomStyle {ZoomDPI, ZoomScale};
70 
71  explicit ReportPreview(QWidget * parent = 0, PreviewFlags f = ShowDefault);
72  explicit ReportPreview(CuteReport::ReportCore *core, QWidget *parent = 0, PreviewFlags f = ShowDefault);
73  ~ReportPreview();
74 
75  void setShowFlags(PreviewFlags f);
76  void connectReport(ReportInterface *report);
77  void setFitMode(ResultFitMode fitMode);
78  void clear();
79 
80  void updateView();
81  void resetView();
82  void setPageCounter(int current, int total);
83  qreal viewScale() const;
84  void setViewScale (qreal scale);
85 
86  void setReportCore(CuteReport::ReportCore *reportCore) {m_reportCore = reportCore;}
87  CuteReport::ReportCore * reportCore() {return m_reportCore;}
88 
89  bool showProgress() const;
90  void setShowProgress(bool showProgress);
91 
92 public slots:
93  void run();
94  void slotFitPage();
95  void slotFitWidth();
96 
97 signals:
98  void closed();
99  void pagePrevious();
100  void pageNext();
101  void pageFirst();
102  void pageLast();
103  void print();
104  void exported();
105  void viewScalled(qreal);
106 
107 private slots:
108  void initMe(CuteReport::ReportPreview::PreviewFlags f);
109  void slotZoomEdited(QString text);
110  void slotZoomCursorPositionChanged(int oldPos, int newPos);
111  void slotZoomChanged();
112  void slotZoomIn();
113  void slotZoomOut();
114  void slotZoomOrig();
115 
116  void slotPageNext();
117  void slotPagePrevious();
118  void slotPageFirst();
119  void slotPageLast();
120  void slotPrint();
121  void slotExport();
122  void slotEdit(bool value);
123 
124  void showProgressDialog(const QString & labelText, const QString & cancelButtonText, int minimum, int maximum);
125  void hideProgressDialog();
126  void doShowProgressDialog();
127  void updateProgressDialog(const QString & labelText, int value, int maximum);
128  void slotRenderingStarted(CuteReport::ReportInterface * report);
129  void slotRendererDone(CuteReport::ReportInterface * report, bool);
130  void slotRendererProcessingPage(CuteReport::ReportInterface*report, int value, int total, int pass, int passTotal);
131  void slotDialogCancelled();
132 
133  void viewVerticalScrollBarChanged(int value);
134  void viewHorizontalScrollBarChanged(int value);
135 
136 
137 
138 private:
139  void connectCore();
140  void clearPage();
141  void clearEditor();
142  void showPage(int index);
143  void setPageEffect(CuteReport::RenderedPageInterface * page);
144  void deletePageEffect();
145  QRectF currentPageGeometry();
146  QRectF currentSceneGeometry();
147  void updateScrollBars();
148  void updateZoomLabel();
149  virtual void resizeEvent ( QResizeEvent * event );
150  virtual void closeEvent(QCloseEvent * event);
151 
152 
153 private:
154  Ui::ReportPreview *ui;
155  GraphicsScene * m_scene;
156  CuteReport::ReportCore * m_reportCore;
157  QPointer<CuteReport::ReportInterface> m_report;
158  qreal m_viewScale;
159  int m_origDpi;
160  int m_viewDpi;
161  QProgressDialog * m_progressDialog;
162  bool m_renderingDone;
163  QPointer<QGraphicsDropShadowEffect> m_pageEffect;
164  int m_currentPageIndex;
165  bool m_reportCoreInited;
166  PreviewFlags m_flags;
167  bool m_cancelled;
168  ZoomStyle m_zoomStyle;
169  ReportPreviewEditor * m_editor;
170  ResultFitMode m_fitMode;
171  bool m_showProgress;
172  QTimer m_progressDialogDelayTimer;
173 };
174 
175 
176 class GraphicsScene: public QGraphicsScene
177 {
178 public:
179  GraphicsScene(QObject *parent = 0) : QGraphicsScene(parent), m_editor(0){}
180 
181  void setEditor(ReportPreviewEditor * editor) {m_editor = editor;}
182  void removeEditor() {m_editor = 0;}
183 
184 protected:
185  virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent * mouseEvent );
186  virtual void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * mouseEvent );
187 
188 private:
189  ReportPreviewEditor * m_editor;
190 };
191 
192 
193 } //namespace
194 
195 Q_DECLARE_OPERATORS_FOR_FLAGS(CuteReport::ReportPreview::PreviewFlags)
196 
197 #endif // REPORTPREVIEW_H
PreviewFlag
Definition: reportpreview.h:52
Definition: abstractpainterdelegate.h:42
void removeEditor()
Definition: reportpreview.h:182
Definition: reportpreview.h:30
TODO v2: rename to ReportObject.
Definition: reportinterface.h:71
Definition: reportpreview.h:48
#define WIDGET_EXPORTS
Definition: widgets_export.h:17
ZoomStyle
Definition: reportpreview.h:69
ResultFitMode
Definition: reportpreview.h:65
void setEditor(ReportPreviewEditor *editor)
Definition: reportpreview.h:181
Definition: reportpreview.h:176
Definition: pageinterface.h:305
GraphicsScene(QObject *parent=0)
Definition: reportpreview.h:179
void setReportCore(CuteReport::ReportCore *reportCore)
Definition: reportpreview.h:86
Definition: reportcore.h:83
CuteReport::ReportCore * reportCore()
Definition: reportpreview.h:87