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