File indexing completed on 2024-05-26 04:32:27

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *  SPDX-FileCopyrightText: 2021 Eoin O'Neil <eoinoneill1991@gmail.com>
0004  *  SPDX-FileCopyrightText: 2021 Emmet O'Neill <emmetoneill.pdx@gmail.com>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #ifndef TIMELINE_RULER_HEADER_H
0010 #define TIMELINE_RULER_HEADER_H
0011 
0012 #include <QHeaderView>
0013 #include <QScopedPointer>
0014 #include "kis_action_manager.h"
0015 
0016 class QPaintEvent;
0017 
0018 class KisAnimTimelineTimeHeader : public QHeaderView
0019 {
0020     Q_OBJECT
0021 public:
0022     KisAnimTimelineTimeHeader(QWidget *parent = 0);
0023     ~KisAnimTimelineTimeHeader() override;
0024 
0025     void setPixelOffset(qreal offset);
0026 
0027     void setFramePerSecond(int fps);
0028     bool setZoom(qreal zoomLevel);
0029     qreal zoom();
0030 
0031     void setModel(QAbstractItemModel *model) override;
0032 
0033     void setActionManager(KisActionManager *actionManager);
0034 
0035     void mouseMoveEvent(QMouseEvent *e) override;
0036 
0037     int estimateFirstVisibleColumn();
0038     int estimateLastVisibleColumn();
0039 
0040 protected:
0041     void mousePressEvent(QMouseEvent *e) override;
0042 
0043     void mouseReleaseEvent(QMouseEvent *e) override;
0044 
0045     void paintEvent(QPaintEvent *e) override;
0046     void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override;
0047     void paintSection1(QPainter *painter, const QRect &rect, int logicalIndex) const;
0048     void changeEvent(QEvent *event) override;
0049 
0050 private:
0051     void updateMinimumSize();
0052 
0053     void paintSpan(QPainter *painter, int userFrameId,
0054                    const QRect &spanRect,
0055                    bool isIntegralLine,
0056                    bool isPrevIntegralLine,
0057                    QStyle *style,
0058                    const QPalette &palette,
0059                    const QPen &gridPen) const;
0060 
0061 public Q_SLOTS:
0062     void slotSaveThrottle(qreal value);
0063 
0064 Q_SIGNALS:
0065     void sigInsertColumnLeft();
0066     void sigInsertColumnRight();
0067     void sigInsertMultipleColumns();
0068 
0069     void sigRemoveColumns();
0070     void sigRemoveColumnsAndShift();
0071 
0072     void sigInsertHoldColumns();
0073     void sigRemoveHoldColumns();
0074     void sigInsertHoldColumnsCustom();
0075     void sigRemoveHoldColumnsCustom();
0076 
0077     void sigMirrorColumns();
0078     void sigClearCache();
0079 
0080     void sigCutColumns();
0081     void sigCopyColumns();
0082     void sigPasteColumns();
0083 
0084     void sigZoomChanged(qreal zoom);
0085 
0086 private:
0087     struct Private;
0088     const QScopedPointer<Private> m_d;
0089 };
0090 
0091 #endif // TIMELINE_RULER_HEADER_H