File indexing completed on 2023-09-24 03:56:09

0001 /*
0002  *  SPDX-FileCopyrightText: 2012 Sebastian Gottfried <sebastiangottfried@web.de>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 
0008 #include "coursecommands.h"
0009 
0010 #include <KLocalizedString>
0011 
0012 #include "core/course.h"
0013 #include "core/lesson.h"
0014 
0015 SetCourseTitleCommand::SetCourseTitleCommand(Course* course, const QString& oldTitle, QUndoCommand* parent) :
0016     QUndoCommand(parent),
0017     m_course(course),
0018     m_oldTitle(oldTitle),
0019     m_newTitle(course->title())
0020 {
0021     setText(i18n("Set title"));
0022 }
0023 
0024 void SetCourseTitleCommand::undo()
0025 {
0026     m_course->setTitle(m_oldTitle);
0027 }
0028 
0029 void SetCourseTitleCommand::redo()
0030 {
0031     m_course->setTitle(m_newTitle);
0032 }
0033 
0034 bool SetCourseTitleCommand::mergeWith(const QUndoCommand* command)
0035 {
0036     const SetCourseTitleCommand* setCourseTitleCommand = static_cast<const SetCourseTitleCommand*>(command);
0037 
0038     if (m_course != setCourseTitleCommand->m_course)
0039         return false;
0040 
0041     m_newTitle = setCourseTitleCommand->m_newTitle;
0042     return true;
0043 }
0044 
0045 int SetCourseTitleCommand::id() const
0046 {
0047     return 0x9a2e787f;
0048 }
0049 
0050 SetCourseKeyboadLayoutNameCommand::SetCourseKeyboadLayoutNameCommand(Course* course, const QString& oldKeyboardLayoutName, QUndoCommand* parent) :
0051     QUndoCommand(parent),
0052     m_course(course),
0053     m_oldKeyboardLayoutName(oldKeyboardLayoutName),
0054     m_newKeyboardLayoutName(course->keyboardLayoutName())
0055 {
0056     setText(i18n("Set keyboard layout"));
0057 }
0058 
0059 void SetCourseKeyboadLayoutNameCommand::undo()
0060 {
0061     m_course->setKeyboardLayoutName(m_oldKeyboardLayoutName);
0062 }
0063 
0064 void SetCourseKeyboadLayoutNameCommand::redo()
0065 {
0066     m_course->setKeyboardLayoutName(m_newKeyboardLayoutName);
0067 }
0068 
0069 bool SetCourseKeyboadLayoutNameCommand::mergeWith(const QUndoCommand* command)
0070 {
0071     const SetCourseKeyboadLayoutNameCommand* setCourseKeyboardLayoutNameCommand = static_cast<const SetCourseKeyboadLayoutNameCommand*>(command);
0072 
0073     if (m_course != setCourseKeyboardLayoutNameCommand->m_course)
0074         return false;
0075 
0076     m_newKeyboardLayoutName = setCourseKeyboardLayoutNameCommand->m_newKeyboardLayoutName;
0077     return true;
0078 }
0079 
0080 int SetCourseKeyboadLayoutNameCommand::id() const
0081 {
0082     return 0xc6c1d878;
0083 }
0084 
0085 SetCourseDescriptionCommand::SetCourseDescriptionCommand(Course* course, const QString& oldDescription, QUndoCommand* parent) :
0086     QUndoCommand(parent),
0087     m_course(course),
0088     m_oldDescription(oldDescription),
0089     m_newDescription(course->description())
0090 {
0091     setText(i18n("Edit description"));
0092 }
0093 
0094 void SetCourseDescriptionCommand::undo()
0095 {
0096     m_course->setDescription(m_oldDescription);
0097 }
0098 
0099 void SetCourseDescriptionCommand::redo()
0100 {
0101     m_course->setDescription(m_newDescription);
0102 }
0103 
0104 bool SetCourseDescriptionCommand::mergeWith(const QUndoCommand* command)
0105 {
0106     const SetCourseDescriptionCommand* setCourseDescriptionCommand = static_cast<const SetCourseDescriptionCommand*>(command);
0107 
0108     if (m_course != setCourseDescriptionCommand->m_course)
0109         return false;
0110 
0111     m_newDescription = setCourseDescriptionCommand->m_newDescription;
0112     return true;
0113 }
0114 
0115 int SetCourseDescriptionCommand::id() const
0116 {
0117     return 0x264f63fb;
0118 }
0119 
0120 AddLessonCommand::AddLessonCommand(Course* course, int lessonIndex,const QString& lessonId, QUndoCommand* parent) :
0121     QUndoCommand(parent),
0122     m_course(course),
0123     m_lessonIndex(lessonIndex),
0124     m_lessonId(lessonId)
0125 {
0126     setText(i18n("Add lesson"));
0127 }
0128 
0129 void AddLessonCommand::undo()
0130 {
0131     m_course->removeLesson(m_lessonIndex);
0132 }
0133 
0134 void AddLessonCommand::redo()
0135 {
0136     Lesson* lesson = new Lesson();
0137 
0138     lesson->setId(m_lessonId);
0139 
0140     if (m_lessonIndex == m_course->lessonCount())
0141     {
0142         m_course->addLesson(lesson);
0143     }
0144     else
0145     {
0146         m_course->insertLesson(m_lessonIndex, lesson);
0147     }
0148 }
0149 
0150 bool AddLessonCommand::mergeWith(const QUndoCommand* command)
0151 {
0152     Q_UNUSED(command);
0153     return false;
0154 }
0155 
0156 int AddLessonCommand::id() const
0157 {
0158     return 0x34f95ddf;
0159 }
0160 
0161 RemoveLessonCommand::RemoveLessonCommand(Course* course, int lessonIndex, QUndoCommand* parent) :
0162     QUndoCommand(parent),
0163     m_course(course),
0164     m_lessonIndex(lessonIndex),
0165     m_backupLesson(nullptr)
0166 {
0167     setText(i18n("Remove lesson"));
0168 }
0169 
0170 RemoveLessonCommand::~RemoveLessonCommand()
0171 {
0172     if (m_backupLesson)
0173     {
0174         delete m_backupLesson;
0175     }
0176 }
0177 
0178 void RemoveLessonCommand::undo()
0179 {
0180     Q_ASSERT(m_backupLesson);
0181 
0182     if (m_lessonIndex == m_course->lessonCount())
0183     {
0184         m_course->addLesson(m_backupLesson);
0185     }
0186     else
0187     {
0188         m_course->insertLesson(m_lessonIndex, m_backupLesson);
0189     }
0190 
0191     m_backupLesson = nullptr;
0192 }
0193 
0194 void RemoveLessonCommand::redo()
0195 {
0196     m_backupLesson = new Lesson();
0197     m_backupLesson->copyFrom(m_course->lesson(m_lessonIndex));
0198     m_course->removeLesson(m_lessonIndex);
0199 }
0200 
0201 bool RemoveLessonCommand::mergeWith(const QUndoCommand* command)
0202 {
0203     Q_UNUSED(command)
0204     return false;
0205 }
0206 
0207 int RemoveLessonCommand::id() const
0208 {
0209     return 0x36f2ef42;
0210 }
0211 
0212 MoveLessonCommand::MoveLessonCommand(Course* course, int oldLessonIndex, int newLessonIndex, QUndoCommand* parent) :
0213     QUndoCommand(parent),
0214     m_course(course),
0215     m_oldLessonIndex(oldLessonIndex),
0216     m_newLessonIndex(newLessonIndex)
0217 {
0218     setText(i18n("Move lesson"));
0219 }
0220 
0221 void MoveLessonCommand::undo()
0222 {
0223     Lesson* lesson = new Lesson();
0224 
0225     lesson->copyFrom(m_course->lesson(m_newLessonIndex));
0226     m_course->removeLesson(m_newLessonIndex);
0227 
0228     if (m_oldLessonIndex == m_course->lessonCount())
0229     {
0230         m_course->addLesson(lesson);
0231     }
0232     else
0233     {
0234         m_course->insertLesson(m_oldLessonIndex, lesson);
0235     }
0236 
0237 }
0238 
0239 void MoveLessonCommand::redo()
0240 {
0241     Lesson* lesson = new Lesson();
0242 
0243     lesson->copyFrom(m_course->lesson(m_oldLessonIndex));
0244     m_course->removeLesson(m_oldLessonIndex);
0245 
0246     if (m_newLessonIndex == m_course->lessonCount())
0247     {
0248         m_course->addLesson(lesson);
0249     }
0250     else
0251     {
0252         m_course->insertLesson(m_newLessonIndex, lesson);
0253     }
0254 }
0255 
0256 bool MoveLessonCommand::mergeWith(const QUndoCommand* command)
0257 {
0258     const MoveLessonCommand* moveLessonCommand = static_cast<const MoveLessonCommand*>(command);
0259 
0260     if (m_course != moveLessonCommand->m_course)
0261         return false;
0262 
0263     if (m_newLessonIndex != moveLessonCommand->m_oldLessonIndex)
0264         return false;
0265 
0266     m_newLessonIndex = moveLessonCommand->m_newLessonIndex;
0267     return true;
0268 }
0269 
0270 int MoveLessonCommand::id() const
0271 {
0272     return 0xf3993bad;
0273 }
0274 
0275 SetLessonTitleCommand::SetLessonTitleCommand(Course* course, int lessonIndex, const QString& oldTitle, QUndoCommand* parent) :
0276     QUndoCommand(parent),
0277     m_course(course),
0278     m_lessonIndex(lessonIndex),
0279     m_oldTitle(oldTitle),
0280     m_newTitle(course->lesson(lessonIndex)->title())
0281 {
0282     setText(i18n("Set lesson title"));
0283 }
0284 
0285 void SetLessonTitleCommand::undo()
0286 {
0287     m_course->lesson(m_lessonIndex)->setTitle(m_oldTitle);
0288 }
0289 
0290 void SetLessonTitleCommand::redo()
0291 {
0292     m_course->lesson(m_lessonIndex)->setTitle(m_newTitle);
0293 }
0294 
0295 bool SetLessonTitleCommand::mergeWith(const QUndoCommand* command)
0296 {
0297     const SetLessonTitleCommand* setLessonTitleCommand = static_cast<const SetLessonTitleCommand*>(command);
0298 
0299     if (m_course != setLessonTitleCommand->m_course)
0300         return false;
0301 
0302     if (m_lessonIndex != setLessonTitleCommand->m_lessonIndex)
0303         return false;
0304 
0305     m_newTitle = setLessonTitleCommand->m_newTitle;
0306     return true;
0307 }
0308 
0309 int SetLessonTitleCommand::id() const
0310 {
0311     return 0x4499bef5;
0312 }
0313 
0314 SetLessonNewCharactersCommand::SetLessonNewCharactersCommand(Course* course, int lessonIndex, const QString& oldNewCharacters, QUndoCommand* parent) :
0315     QUndoCommand(parent),
0316     m_course(course),
0317     m_lessonIndex(lessonIndex),
0318     m_oldNewCharacters(oldNewCharacters),
0319     m_newNewCharacters(course->lesson(lessonIndex)->newCharacters())
0320 {
0321     setText(i18n("Set new characters for lesson"));
0322 }
0323 
0324 void SetLessonNewCharactersCommand::undo()
0325 {
0326     m_course->lesson(m_lessonIndex)->setNewCharacters(m_oldNewCharacters);
0327 }
0328 
0329 void SetLessonNewCharactersCommand::redo()
0330 {
0331     m_course->lesson(m_lessonIndex)->setNewCharacters(m_newNewCharacters);
0332 }
0333 
0334 bool SetLessonNewCharactersCommand::mergeWith(const QUndoCommand* command)
0335 {
0336     const SetLessonNewCharactersCommand* setLessonNewCharactersCommand = static_cast<const SetLessonNewCharactersCommand*>(command);
0337 
0338     if (m_course != setLessonNewCharactersCommand->m_course)
0339         return false;
0340 
0341     if (m_lessonIndex != setLessonNewCharactersCommand->m_lessonIndex)
0342         return false;
0343 
0344     m_newNewCharacters = setLessonNewCharactersCommand->m_newNewCharacters;
0345     return true;
0346 }
0347 
0348 int SetLessonNewCharactersCommand::id() const
0349 {
0350     return 0x325e1dc2;
0351 }
0352 
0353 SetLessonTextCommand::SetLessonTextCommand(Course* course, int lessonIndex, const QString& oldText, QUndoCommand* parent) :
0354     QUndoCommand(parent),
0355     m_course(course),
0356     m_lessonIndex(lessonIndex),
0357     m_oldText(oldText),
0358     m_newText(course->lesson(lessonIndex)->text())
0359 {
0360     setText(i18n("Set lesson text"));
0361 }
0362 
0363 void SetLessonTextCommand::undo()
0364 {
0365     m_course->lesson(m_lessonIndex)->setText(m_oldText);
0366 }
0367 
0368 void SetLessonTextCommand::redo()
0369 {
0370     m_course->lesson(m_lessonIndex)->setText(m_newText);
0371 }
0372 
0373 bool SetLessonTextCommand::mergeWith(const QUndoCommand* command)
0374 {
0375     const SetLessonTextCommand* setLessonTextCommand = static_cast<const SetLessonTextCommand*>(command);
0376 
0377     if (m_course != setLessonTextCommand->m_course)
0378         return false;
0379 
0380     if (m_lessonIndex != setLessonTextCommand->m_lessonIndex)
0381         return false;
0382 
0383     m_newText = setLessonTextCommand->m_newText;
0384     return true;
0385 }
0386 
0387 int SetLessonTextCommand::id() const
0388 {
0389     return 0xdea53874;
0390 }