File indexing completed on 2024-05-12 03:48:25
0001 /* 0002 File : DatapickerImageView.h 0003 Project : LabPlot 0004 Description : DatapickerImage view for datapicker 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2015 Ankit Wagadre <wagadre.ankit@gmail.com> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #ifndef DATAPICKERIMAGEVIEW_H 0012 #define DATAPICKERIMAGEVIEW_H 0013 0014 #include "commonfrontend/worksheet/WorksheetView.h" 0015 0016 class AbstractAspect; 0017 class DatapickerImage; 0018 class Datapicker; 0019 class Transform; 0020 0021 class QActionGroup; 0022 class QMenu; 0023 class QPrinter; 0024 class QToolBar; 0025 class QToolButton; 0026 class QWheelEvent; 0027 0028 class DatapickerImageView : public QGraphicsView { 0029 Q_OBJECT 0030 0031 public: 0032 explicit DatapickerImageView(DatapickerImage*); 0033 ~DatapickerImageView() override; 0034 0035 void setScene(QGraphicsScene*); 0036 void exportToFile(const QString&, const WorksheetView::ExportFormat, const int); 0037 0038 private: 0039 enum class MouseMode { Navigation, ZoomSelection, ReferencePointsEntry, CurvePointsEntry, CurveSegmentsEntry }; 0040 0041 void initActions(); 0042 void initMenus(); 0043 void drawForeground(QPainter*, const QRectF&) override; 0044 void drawBackground(QPainter*, const QRectF&) override; 0045 void exportPaint(QPainter*, const QRectF& targetRect, const QRectF& sourceRect); 0046 void updateMagnificationWindow(); 0047 0048 // events 0049 void contextMenuEvent(QContextMenuEvent*) override; 0050 void keyPressEvent(QKeyEvent* event) override; 0051 void wheelEvent(QWheelEvent*) override; 0052 void mousePressEvent(QMouseEvent*) override; 0053 void mouseReleaseEvent(QMouseEvent*) override; 0054 void mouseMoveEvent(QMouseEvent*) override; 0055 0056 DatapickerImage* m_image; 0057 Datapicker* m_datapicker; 0058 Transform* m_transform; 0059 MouseMode m_mouseMode{MouseMode::ReferencePointsEntry}; 0060 bool m_selectionBandIsShown{false}; 0061 QPoint m_selectionStart; 0062 QPoint m_selectionEnd; 0063 int magnificationFactor{0}; 0064 float m_rotationAngle{0.0}; 0065 int m_numScheduledScalings{0}; 0066 0067 // Menus 0068 QMenu* m_zoomMenu; 0069 QMenu* m_viewMouseModeMenu; 0070 QMenu* m_viewImageMenu; 0071 QMenu* m_navigationMenu; 0072 QMenu* m_magnificationMenu; 0073 0074 QToolButton* tbZoom{nullptr}; 0075 QToolButton* tbMagnification{nullptr}; 0076 QAction* currentZoomAction{nullptr}; 0077 QAction* currentMagnificationAction{nullptr}; 0078 QAction* currentPlotPointsTypeAction{nullptr}; 0079 0080 // Actions 0081 QAction* zoomInViewAction; 0082 QAction* zoomOutViewAction; 0083 QAction* zoomOriginAction; 0084 QAction* zoomFitPageHeightAction; 0085 QAction* zoomFitPageWidthAction; 0086 0087 QAction* setAxisPointsAction; 0088 QAction* setCurvePointsAction; 0089 QAction* selectSegmentAction; 0090 0091 QAction* addCurveAction; 0092 0093 QAction* navigationModeAction; 0094 QAction* zoomSelectionModeAction; 0095 0096 QActionGroup* navigationActionGroup; 0097 QAction* shiftLeftAction; 0098 QAction* shiftRightAction; 0099 QAction* shiftDownAction; 0100 QAction* shiftUpAction; 0101 0102 QActionGroup* magnificationActionGroup; 0103 QAction* noMagnificationAction; 0104 QAction* twoTimesMagnificationAction; 0105 QAction* threeTimesMagnificationAction; 0106 QAction* fourTimesMagnificationAction; 0107 QAction* fiveTimesMagnificationAction; 0108 0109 public Q_SLOTS: 0110 void createContextMenu(QMenu*) const; 0111 void fillToolBar(QToolBar*); 0112 void print(QPrinter*); 0113 0114 private Q_SLOTS: 0115 void mouseModeChanged(QAction*); 0116 void magnificationChanged(QAction*); 0117 void changeZoom(QAction*); 0118 void changeSelectedItemsPosition(QAction*); 0119 void handleImageActions(); 0120 void updateBackground(); 0121 void addCurve(); 0122 void changeRotationAngle(); 0123 0124 void zoom(int); 0125 void scalingTime(); 0126 void animFinished(); 0127 0128 Q_SIGNALS: 0129 void statusInfo(const QString&); 0130 0131 friend class DatapickerTest; 0132 }; 0133 0134 #endif