Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAnimTimelineFramesView.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __TIMELINE_FRAMES_VIEW_H
8#define __TIMELINE_FRAMES_VIEW_H
9
10
11#include <QScopedPointer>
12#include <QTableView>
13#include <QScroller>
14#include <QScrollBar>
15#include "kis_action_manager.h"
16#include "kritaanimationdocker_export.h"
17
18class KisAction;
19class TimelineWidget;
20
22{
23 LEFT = -1,
24 RIGHT = 1,
26 AFTER = RIGHT
27};
28
29class KRITAANIMATIONDOCKER_EXPORT KisAnimTimelineFramesView : public QTableView
30{
31 Q_OBJECT
32public:
33 KisAnimTimelineFramesView(QWidget *parent);
35
36 void setModel(QAbstractItemModel *model) override;
37 void setActionManager(KisActionManager *actionManager);
38
39 void updateGeometries() override;
40
41public Q_SLOTS:
42 void slotCanvasUpdate(class KoCanvasBase* canvas);
43
44 void slotUpdateIcons();
45 void slotUpdateLayersMenu();
46 void slotUpdateFrameActions();
47
48 void slotSelectionChanged();
49 void slotReselectCurrentIndex();
50
51 // This is used for keeping single selection in-sync with active layer
52 // traversal when desired.
53 void slotTryTransferSelectionBetweenRows(int fromRow, int toRow);
54
55 void slotSetStartTimeToCurrentPosition();
56 void slotSetEndTimeToCurrentPosition();
57 void slotUpdatePlaybackRange();
58 void slotUpdateInfiniteFramesCount();
59
60 void slotDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
61 void slotHeaderDataChanged(Qt::Orientation orientation, int first, int last);
62
63 void slotColorLabelChanged(int);
64
65 // Layer
66 void slotAddNewLayer();
67 void slotAddExistingLayer(QAction *action);
68 void slotRemoveLayer();
69 void slotLayerContextMenuRequested(const QPoint &globalPos);
70
71 // New, Insert and Remove Frames
72 void slotAddBlankFrame();
73 void slotAddDuplicateFrame();
74
75 void slotInsertKeyframeLeft() {insertKeyframes(-1, 1, TimelineDirection::LEFT, false);}
76 void slotInsertKeyframeRight() {insertKeyframes(-1, 1, TimelineDirection::RIGHT, false);}
77
78 void slotInsertKeyframeColumnLeft() {insertKeyframes(-1, 1, TimelineDirection::LEFT, true);}
79 void slotInsertKeyframeColumnRight() {insertKeyframes(-1, 1, TimelineDirection::RIGHT, true);}
80
81 void slotInsertMultipleKeyframes() {insertMultipleKeyframes(false);}
82 void slotInsertMultipleKeyframeColumns() {insertMultipleKeyframes(true);}
83
84 void slotRemoveSelectedFrames(bool entireColumn = false, bool pull = false);
85 void slotRemoveSelectedFramesAndShift() {slotRemoveSelectedFrames(false, true);}
86
87 void slotRemoveSelectedColumns() {slotRemoveSelectedFrames(true);}
88 void slotRemoveSelectedColumnsAndShift() {slotRemoveSelectedFrames(true, true);}
89
90 void slotInsertHoldFrame() {insertOrRemoveHoldFrames(1);}
91 void slotRemoveHoldFrame() {insertOrRemoveHoldFrames(-1);}
92
93 void slotInsertHoldFrameColumn() {insertOrRemoveHoldFrames(1,true);}
94 void slotRemoveHoldFrameColumn() {insertOrRemoveHoldFrames(-1,true);}
95
96 void slotInsertMultipleHoldFrames() {insertOrRemoveMultipleHoldFrames(true);}
97 void slotRemoveMultipleHoldFrames() {insertOrRemoveMultipleHoldFrames(false);}
98
99 void slotInsertMultipleHoldFrameColumns() {insertOrRemoveMultipleHoldFrames(true, true);}
100 void slotRemoveMultipleHoldFrameColumns() {insertOrRemoveMultipleHoldFrames(false, true);}
101
102 void slotMirrorFrames(bool entireColumn = false);
103 void slotMirrorColumns() {slotMirrorFrames(true);}
104 void slotClearCache();
105
106 // Copy, paste & clone.
107 void slotCopyFrames() {cutCopyImpl(false, true);}
108 void slotCutFrames() {cutCopyImpl(false, false);}
109
110 void slotCopyColumns() {cutCopyImpl(true, true);}
111 void slotCutColumns() {cutCopyImpl(true, false);}
112
113 void slotPasteFrames(bool entireColumn = false);
114 void slotPasteColumns() {slotPasteFrames(true);}
115
116 void slotMakeClonesUnique();
117
118 // Audio
119 void slotSelectAudioChannelFile();
120 void slotAudioChannelMute(bool value);
121 void slotAudioChannelRemove();
122 void slotAudioVolumeChanged(int value);
123
124 // Zoom & Scroll
125 void slotScrollerStateChanged(QScroller::State state);
126 void slotZoom(qreal zoom);
127 void slotUpdateDragInfiniteFramesCount();
128 void slotRealignScrollBars();
129 void slotEnsureRowVisible(int row);
130 void slotFitViewToFrameRange(int start, int end);
131
132 void calculateActiveLayerSelectedTimes(const QModelIndexList &selection);
133
134protected:
135 bool viewportEvent(QEvent *event) override;
136
137 void mousePressEvent(QMouseEvent *event) override;
138 void mouseDoubleClickEvent(QMouseEvent *event) override;
139 void mouseMoveEvent(QMouseEvent *e) override;
140 void mouseReleaseEvent(QMouseEvent *e) override;
141
142 void startDrag(Qt::DropActions supportedActions) override;
143 void dragEnterEvent(QDragEnterEvent *event) override;
144 void dragMoveEvent(QDragMoveEvent *event) override;
145 void dragLeaveEvent(QDragLeaveEvent *event) override;
146 void dropEvent(QDropEvent *event) override;
147
148 void wheelEvent(QWheelEvent *e) override;
149 void resizeEvent(QResizeEvent *e) override;
150
151 void rowsInserted(const QModelIndex &parent, int start, int end) override;
152 void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
153
154 QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
155 const QEvent *event) const override;
156
157private:
158 void setFramesPerSecond(int fps);
159
160 QModelIndexList calculateSelectionSpan(bool entireColumn, bool editableOnly = true) const;
161 void calculateSelectionMetrics(int &minColumn, int &maxColumn, QSet<int> &rows, bool ignoreEditability) const;
162
170 void insertKeyframes(int count = 1, int timing = 1,
171 TimelineDirection direction = TimelineDirection::LEFT, bool entireColumn = false);
172 void insertMultipleKeyframes(bool entireColumn = false);
173
174 void insertOrRemoveHoldFrames(int count, bool entireColumn = false);
175 void insertOrRemoveMultipleHoldFrames(bool insertion, bool entireColumn = false);
176 void fanSelectedFrames(const QModelIndexList &selection, int count, bool ignoreKeyless = true);
177
178 void cutCopyImpl(bool entireColumn, bool copy);
179 void clone(bool entireColumn);
180
181 void createFrameEditingMenuActions(QMenu *menu, bool emptyFrame, bool cloneFrameSelected);
182
183 int scrollPositionFromColumn(int column);
184
185 struct Private;
186 const QScopedPointer<Private> m_d;
187};
188
189#endif /* __TIMELINE_FRAMES_VIEW_H */
float value(const T *src, size_t ch)
A KisActionManager class keeps track of KisActions. These actions are always associated with the GUI....
const QScopedPointer< Private > m_d