File indexing completed on 2024-06-16 04:38:14
0001 /* 0002 SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar> 0003 SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "subtitlelineactions.h" 0009 #include "core/richtext/richdocument.h" 0010 #include "core/subtitle.h" 0011 0012 #include <KLocalizedString> 0013 0014 using namespace SubtitleComposer; 0015 0016 // *** SubtitleLineAction 0017 SubtitleLineAction::SubtitleLineAction(SubtitleLine *line, UndoStack::DirtyMode dirtyMode, const QString &description) 0018 : UndoAction(dirtyMode, line->subtitle(), description), 0019 m_line(line) 0020 {} 0021 0022 SubtitleLineAction::~SubtitleLineAction() 0023 {} 0024 0025 0026 // *** SetLinePrimaryTextAction 0027 SetLinePrimaryTextAction::SetLinePrimaryTextAction(SubtitleLine *line, RichDocument *primaryDoc) 0028 : SubtitleLineAction(line, UndoStack::Primary, i18n("Set Line Text")), 0029 m_primaryDoc(primaryDoc), 0030 m_primaryDocState(primaryDoc->availableUndoSteps()) 0031 {} 0032 0033 SetLinePrimaryTextAction::~SetLinePrimaryTextAction() 0034 {} 0035 0036 bool 0037 SetLinePrimaryTextAction::mergeWith(const QUndoCommand *command) 0038 { 0039 const SetLinePrimaryTextAction *cur = static_cast<const SetLinePrimaryTextAction *>(command); 0040 return cur->m_primaryDoc == m_primaryDoc && cur->m_primaryDocState == m_primaryDocState; 0041 } 0042 0043 void 0044 SetLinePrimaryTextAction::undo() 0045 { 0046 const bool prev = m_line->ignoreDocChanges(true); 0047 while(m_primaryDoc->isUndoAvailable() && m_primaryDoc->availableUndoSteps() >= m_primaryDocState) 0048 m_primaryDoc->undo(); 0049 m_line->ignoreDocChanges(prev); 0050 emit m_line->primaryTextChanged(); 0051 } 0052 0053 void 0054 SetLinePrimaryTextAction::redo() 0055 { 0056 const bool prev = m_line->ignoreDocChanges(true); 0057 while(m_primaryDoc->isRedoAvailable() && m_primaryDoc->availableUndoSteps() < m_primaryDocState) 0058 m_primaryDoc->redo(); 0059 m_line->ignoreDocChanges(prev); 0060 emit m_line->primaryTextChanged(); 0061 } 0062 0063 0064 // *** SetLineSecondaryTextAction 0065 SetLineSecondaryTextAction::SetLineSecondaryTextAction(SubtitleLine *line, RichDocument *secondaryDoc) 0066 : SubtitleLineAction(line, UndoStack::Secondary, i18n("Set Line Secondary Text")), 0067 m_secondaryDoc(secondaryDoc), 0068 m_secondaryDocState(secondaryDoc->availableUndoSteps()) 0069 {} 0070 0071 SetLineSecondaryTextAction::~SetLineSecondaryTextAction() 0072 {} 0073 0074 bool 0075 SetLineSecondaryTextAction::mergeWith(const QUndoCommand *command) 0076 { 0077 const SetLineSecondaryTextAction *cur = static_cast<const SetLineSecondaryTextAction *>(command); 0078 return cur->m_secondaryDoc == m_secondaryDoc && cur->m_secondaryDocState == m_secondaryDocState; 0079 } 0080 0081 void 0082 SetLineSecondaryTextAction::undo() 0083 { 0084 const bool prev = m_line->ignoreDocChanges(true); 0085 while(m_secondaryDoc->isUndoAvailable() && m_secondaryDoc->availableUndoSteps() >= m_secondaryDocState) 0086 m_secondaryDoc->undo(); 0087 m_line->ignoreDocChanges(prev); 0088 emit m_line->secondaryTextChanged(); 0089 } 0090 0091 void 0092 SetLineSecondaryTextAction::redo() 0093 { 0094 const bool prev = m_line->ignoreDocChanges(true); 0095 while(m_secondaryDoc->isRedoAvailable() && m_secondaryDoc->availableUndoSteps() < m_secondaryDocState) 0096 m_secondaryDoc->redo(); 0097 m_line->ignoreDocChanges(prev); 0098 emit m_line->secondaryTextChanged(); 0099 } 0100 0101 0102 0103 // *** SetLineShowTimeAction 0104 SetLineShowTimeAction::SetLineShowTimeAction(SubtitleLine *line, const Time &showTime) 0105 : SubtitleLineAction(line, UndoStack::Both, i18n("Set Line Show Time")), 0106 m_showTime(showTime) 0107 {} 0108 0109 SetLineShowTimeAction::~SetLineShowTimeAction() 0110 {} 0111 0112 bool 0113 SetLineShowTimeAction::mergeWith(const QUndoCommand *command) 0114 { 0115 const SetLineShowTimeAction *currentAction = static_cast<const SetLineShowTimeAction *>(command); 0116 return ¤tAction->m_line == &m_line; 0117 } 0118 0119 void 0120 SetLineShowTimeAction::redo() 0121 { 0122 Time tmp = m_line->m_showTime; 0123 m_line->m_showTime = m_showTime; 0124 m_showTime = tmp; 0125 0126 emit m_line->showTimeChanged(m_line->m_showTime); 0127 } 0128 0129 0130 // *** SetLineHideTimeAction 0131 SetLineHideTimeAction::SetLineHideTimeAction(SubtitleLine *line, const Time &hideTime) 0132 : SubtitleLineAction(line, UndoStack::Both, i18n("Set Line Hide Time")), 0133 m_hideTime(hideTime) 0134 {} 0135 0136 SetLineHideTimeAction::~SetLineHideTimeAction() 0137 {} 0138 0139 bool 0140 SetLineHideTimeAction::mergeWith(const QUndoCommand *command) 0141 { 0142 const SetLineHideTimeAction *currentAction = static_cast<const SetLineHideTimeAction *>(command); 0143 return ¤tAction->m_line == &m_line; 0144 } 0145 0146 void 0147 SetLineHideTimeAction::redo() 0148 { 0149 Time tmp = m_line->m_hideTime; 0150 m_line->m_hideTime = m_hideTime; 0151 m_hideTime = tmp; 0152 0153 emit m_line->hideTimeChanged(m_line->m_hideTime); 0154 } 0155 0156 0157 // *** SetLineTimesAction 0158 SetLineTimesAction::SetLineTimesAction(SubtitleLine *line, const Time &showTime, const Time &hideTime, QString description) 0159 : SubtitleLineAction(line, UndoStack::Both, description), 0160 m_showTime(showTime), 0161 m_hideTime(hideTime) 0162 {} 0163 0164 SetLineTimesAction::~SetLineTimesAction() 0165 {} 0166 0167 bool 0168 SetLineTimesAction::mergeWith(const QUndoCommand *command) 0169 { 0170 const SetLineTimesAction *currentAction = static_cast<const SetLineTimesAction *>(command); 0171 return ¤tAction->m_line == &m_line; 0172 } 0173 0174 void 0175 SetLineTimesAction::redo() 0176 { 0177 if(m_line->m_showTime != m_showTime) { 0178 Time tmp = m_line->m_showTime; 0179 m_line->m_showTime = m_showTime; 0180 m_showTime = tmp; 0181 0182 emit m_line->showTimeChanged(m_line->m_showTime); 0183 } 0184 0185 if(m_line->m_hideTime != m_hideTime) { 0186 Time tmp = m_line->m_hideTime; 0187 m_line->m_hideTime = m_hideTime; 0188 m_hideTime = tmp; 0189 0190 emit m_line->hideTimeChanged(m_line->m_hideTime); 0191 } 0192 } 0193 0194 // *** SetLineErrorsAction 0195 SetLineErrorsAction::SetLineErrorsAction(SubtitleLine *line, int errorFlags) 0196 : SubtitleLineAction(line, UndoStack::None, i18n("Set Line Errors")), 0197 m_errorFlags(errorFlags) 0198 {} 0199 0200 SetLineErrorsAction::~SetLineErrorsAction() 0201 {} 0202 0203 bool 0204 SetLineErrorsAction::mergeWith(const QUndoCommand *command) 0205 { 0206 const SetLineErrorsAction *currentAction = static_cast<const SetLineErrorsAction *>(command); 0207 return ¤tAction->m_line == &m_line; 0208 } 0209 0210 void 0211 SetLineErrorsAction::redo() 0212 { 0213 int tmp = m_line->m_errorFlags; 0214 m_line->m_errorFlags = m_errorFlags; 0215 m_errorFlags = tmp; 0216 0217 emit m_line->errorFlagsChanged(m_line->m_errorFlags); 0218 }