1 /*
2     SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar>
3     SPDX-FileCopyrightText: 2010-2019 Mladen Milinkovic <max@smoothware.net>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #ifndef SUBTITLEACTIONS_H
9 #define SUBTITLEACTIONS_H
10 
11 #include "core/range.h"
12 #include "core/rangelist.h"
13 #include "core/undo/undoaction.h"
14 #include "core/subtitle.h"
15 
16 #include <QString>
17 #include <QList>
18 
19 namespace SubtitleComposer {
20 
21 class SubtitleAction : public UndoAction
22 {
23 public:
24 	SubtitleAction(Subtitle *subtitle, UndoStack::DirtyMode dirtyMode, const QString &description = QString());
25 	virtual ~SubtitleAction();
26 
setLineSubtitle(SubtitleLine * line)27 	inline void setLineSubtitle(SubtitleLine *line)
28 	{
29 		line->m_subtitle = m_subtitle;
30 	}
31 
clearLineSubtitle(SubtitleLine * line)32 	inline void clearLineSubtitle(SubtitleLine *line)
33 	{
34 		line->m_subtitle = nullptr;
35 	}
36 };
37 
38 class SetFramesPerSecondAction : public SubtitleAction
39 {
40 public:
41 	SetFramesPerSecondAction(Subtitle *subtitle, double framesPerSecond);
42 	virtual ~SetFramesPerSecondAction();
43 
id()44 	inline int id() const override { return UndoAction::SetFramesPerSecond; }
45 
46 protected:
47 	void redo() override;
48 
49 private:
50 	double m_framesPerSecond;
51 };
52 
53 class InsertLinesAction : public SubtitleAction
54 {
55 public:
56 	InsertLinesAction(Subtitle *subtitle, const QList<SubtitleLine *> &lines, int insertIndex = -1);
57 	virtual ~InsertLinesAction();
58 
id()59 	inline int id() const override { return UndoAction::InsertLines; }
60 	bool mergeWith(const QUndoCommand *command) override;
61 
62 protected:
63 	void redo() override;
64 	void undo() override;
65 
66 private:
67 	int m_insertIndex;
68 	int m_lastIndex;
69 	QList<SubtitleLine *> m_lines;
70 };
71 
72 class RemoveLinesAction : public SubtitleAction
73 {
74 public:
75 	RemoveLinesAction(Subtitle *subtitle, int firstIndex, int lastIndex = -1);
76 	virtual ~RemoveLinesAction();
77 
id()78 	inline int id() const override { return UndoAction::RemoveLines; }
79 	bool mergeWith(const QUndoCommand *command) override;
80 
81 protected:
82 	void redo() override;
83 	void undo() override;
84 
85 private:
86 	int m_firstIndex;
87 	int m_lastIndex;
88 	QList<SubtitleLine *> m_lines;
89 };
90 
91 class MoveLineAction : public SubtitleAction
92 {
93 public:
94 	MoveLineAction(Subtitle *subtitle, int fromIndex, int toIndex = -1);
95 	virtual ~MoveLineAction();
96 
id()97 	inline int id() const override { return UndoAction::MoveLine; }
98 	bool mergeWith(const QUndoCommand *command) override;
99 
100 protected:
101 	void redo() override;
102 	void undo() override;
103 
104 private:
105 	int m_fromIndex;
106 	int m_toIndex;
107 };
108 
109 class SwapLinesTextsAction : public SubtitleAction
110 {
111 public:
112 	SwapLinesTextsAction(Subtitle *subtitle, const RangeList &ranges);
113 	virtual ~SwapLinesTextsAction();
114 
id()115 	inline int id() const override { return UndoAction::SwapLinesTexts; }
116 
117 protected:
118 	void redo() override;
119 
120 private:
121 	const RangeList m_ranges;
122 };
123 }
124 
125 #endif
126