File indexing completed on 2024-05-12 13:04:45

0001 /*
0002  * This file is part of the KDE project
0003  * SPDX-FileCopyrightText: 2013 Arjen Hiemstra <ahiemstra@heimr.nl>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef CQCANVASCONTROLLERITEM_H
0009 #define CQCANVASCONTROLLERITEM_H
0010 
0011 #include <QDeclarativeItem>
0012 
0013 class CQCanvasControllerItem : public QDeclarativeItem
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(QDeclarativeItem* canvas READ canvas WRITE setCanvas NOTIFY canvasChanged)
0017     Q_PROPERTY(QDeclarativeItem* flickable READ flickable WRITE setFlickable NOTIFY flickableChanged)
0018     Q_PROPERTY(QSize documentSize READ documentSize NOTIFY documentSizeChanged)
0019     Q_PROPERTY(qreal zoom READ zoom WRITE setZoom NOTIFY zoomChanged)
0020     Q_PROPERTY(qreal minimumZoom READ minimumZoom WRITE setMinimumZoom NOTIFY minimumZoomChanged)
0021     Q_PROPERTY(qreal maximumZoom READ maximumZoom WRITE setMaximumZoom NOTIFY maximumZoomChanged)
0022 public:
0023     explicit CQCanvasControllerItem(QDeclarativeItem* parent = 0);
0024     ~CQCanvasControllerItem();
0025 
0026     void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget* );
0027 
0028     QDeclarativeItem* canvas() const;
0029     void setCanvas(QDeclarativeItem* canvas);
0030 
0031     QDeclarativeItem* flickable() const;
0032     void setFlickable(QDeclarativeItem* item);
0033 
0034     QSize documentSize() const;
0035 
0036     qreal zoom() const;
0037     void setZoom(qreal newZoom);
0038     /**
0039      * Zoom to fit page, but without changing the mode. This is used for
0040      * reader mode in Calligra Gemini.
0041      */
0042     Q_INVOKABLE void zoomToPage();
0043 
0044     qreal minimumZoom() const;
0045     void setMinimumZoom(qreal newZoom);
0046 
0047     qreal maximumZoom() const;
0048     void setMaximumZoom(qreal newZoom);
0049 
0050 public Q_SLOTS:
0051     void beginZoomGesture();
0052     void endZoomGesture();
0053 
0054     void zoomBy(qreal amount, const QPointF& center = QPointF());
0055 
0056     void fitToWidth(qreal width);
0057 
0058     void returnToBounds();
0059 
0060 Q_SIGNALS:
0061     void canvasChanged();
0062     void flickableChanged();
0063     void documentSizeChanged();
0064     void zoomChanged();
0065     void minimumZoomChanged();
0066     void maximumZoomChanged();
0067     void movingFastChanged();
0068 
0069 protected:
0070     virtual void geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry);
0071     virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value);
0072 
0073 private Q_SLOTS:
0074     void updateDocumentSize(const QSize& size);
0075     void updateDocumentPosition(const QPoint& pos);
0076     void canvasControllerChanged();
0077 
0078 private:
0079     class Private;
0080     Private * const d;
0081 };
0082 
0083 #endif // CQCANVASCONTROLLERITEM_H