File indexing completed on 2024-05-12 04:57:15
0001 #include "application.h" 0002 0003 #include "appglobal.h" 0004 #include "actions/kcodecactionext.h" 0005 #include "actions/krecentfilesactionext.h" 0006 #include "actions/useraction.h" 0007 #include "actions/useractionnames.h" 0008 #include "core/undo/undostack.h" 0009 #include "gui/playerwidget.h" 0010 #include "gui/waveform/waveformwidget.h" 0011 #include "scripting/scriptsmanager.h" 0012 #include "translate/translatedialog.h" 0013 #include "videoplayer/videoplayer.h" 0014 0015 #include <QAction> 0016 #include <QMenu> 0017 #include <QTextCodec> 0018 0019 #include <KLocalizedString> 0020 #include <kwidgetsaddons_version.h> 0021 0022 0023 using namespace SubtitleComposer; 0024 0025 void 0026 Application::setupActions() 0027 { 0028 KActionCollection *actionCollection = m_mainWindow->actionCollection(); 0029 UserActionManager *actionManager = UserActionManager::instance(); 0030 VideoPlayer *videoPlayer = VideoPlayer::instance(); 0031 0032 QAction *quitAction = KStandardAction::quit(m_mainWindow, &MainWindow::close, actionCollection); 0033 quitAction->setStatusTip(i18n("Exit the application")); 0034 0035 QAction *prefsAction = KStandardAction::preferences(this, &Application::showPreferences, actionCollection); 0036 prefsAction->setStatusTip(i18n("Configure Subtitle Composer")); 0037 0038 QAction *newSubtitleAction = new QAction(actionCollection); 0039 newSubtitleAction->setIcon(QIcon::fromTheme("document-new")); 0040 newSubtitleAction->setText(i18nc("@action:inmenu Create a new subtitle", "New")); 0041 newSubtitleAction->setStatusTip(i18n("Create an empty subtitle")); 0042 actionCollection->setDefaultShortcuts(newSubtitleAction, KStandardShortcut::openNew()); 0043 connect(newSubtitleAction, &QAction::triggered, this, &Application::newSubtitle); 0044 actionCollection->addAction(ACT_NEW_SUBTITLE, newSubtitleAction); 0045 actionManager->addAction(newSubtitleAction, UserAction::FullScreenOff); 0046 0047 QAction *openSubtitleAction = new QAction(actionCollection); 0048 openSubtitleAction->setIcon(QIcon::fromTheme("document-open")); 0049 openSubtitleAction->setText(i18nc("@action:inmenu Open subtitle file", "Open Subtitle...")); 0050 openSubtitleAction->setStatusTip(i18n("Open subtitle file")); 0051 actionCollection->setDefaultShortcuts(openSubtitleAction, KStandardShortcut::open()); 0052 connect(openSubtitleAction, &QAction::triggered, this, [this](){ openSubtitle(); }); 0053 actionCollection->addAction(ACT_OPEN_SUBTITLE, openSubtitleAction); 0054 actionManager->addAction(openSubtitleAction, 0); 0055 0056 m_reopenSubtitleAsAction = new KCodecActionExt(actionCollection, KCodecActionExt::Open); 0057 m_reopenSubtitleAsAction->setIcon(QIcon::fromTheme("view-refresh")); 0058 m_reopenSubtitleAsAction->setText(i18n("Reload As...")); 0059 m_reopenSubtitleAsAction->setStatusTip(i18n("Reload opened file with a different encoding")); 0060 connect(m_reopenSubtitleAsAction, &KCodecActionExt::triggered, this, &Application::reopenSubtitleWithCodec); 0061 actionCollection->addAction(ACT_REOPEN_SUBTITLE_AS, m_reopenSubtitleAsAction); 0062 actionManager->addAction(m_reopenSubtitleAsAction, UserAction::SubOpened | UserAction::SubPClean | UserAction::FullScreenOff); 0063 0064 m_recentSubtitlesAction = new KRecentFilesActionExt(actionCollection); 0065 m_recentSubtitlesAction->setIcon(QIcon::fromTheme("document-open")); 0066 m_recentSubtitlesAction->setText(i18nc("@action:inmenu Open rencently used subtitle file", "Open &Recent Subtitle")); 0067 m_recentSubtitlesAction->setStatusTip(i18n("Open subtitle file")); 0068 connect(m_recentSubtitlesAction, &KRecentFilesActionExt::urlSelected, this, [this](const QUrl &url){ openSubtitle(url); }); 0069 actionCollection->addAction(ACT_RECENT_SUBTITLES, m_recentSubtitlesAction); 0070 0071 QAction *saveSubtitleAction = new QAction(actionCollection); 0072 saveSubtitleAction->setIcon(QIcon::fromTheme("document-save")); 0073 saveSubtitleAction->setText(i18n("Save")); 0074 saveSubtitleAction->setStatusTip(i18n("Save opened subtitle")); 0075 actionCollection->setDefaultShortcuts(saveSubtitleAction, KStandardShortcut::save()); 0076 connect(saveSubtitleAction, &QAction::triggered, this, [this](){ saveSubtitle(QTextCodec::codecForName(m_subtitleEncoding.toUtf8())); }); 0077 actionCollection->addAction(ACT_SAVE_SUBTITLE, saveSubtitleAction); 0078 actionManager->addAction(saveSubtitleAction, UserAction::SubPDirty | UserAction::FullScreenOff); 0079 0080 m_saveSubtitleAsAction = new KCodecActionExt(actionCollection, KCodecActionExt::Save); 0081 m_saveSubtitleAsAction->setIcon(QIcon::fromTheme("document-save-as")); 0082 m_saveSubtitleAsAction->setText(i18n("Save As...")); 0083 m_saveSubtitleAsAction->setStatusTip(i18n("Save opened subtitle with different settings")); 0084 connect(m_saveSubtitleAsAction, &KCodecActionExt::triggered, this, &Application::saveSubtitleAs); 0085 connect(m_saveSubtitleAsAction, &QAction::triggered, this, [&](){ saveSubtitleAs(); }); 0086 actionCollection->addAction(ACT_SAVE_SUBTITLE_AS, m_saveSubtitleAsAction); 0087 actionManager->addAction(m_saveSubtitleAsAction, UserAction::SubOpened | UserAction::FullScreenOff); 0088 0089 QAction *closeSubtitleAction = new QAction(actionCollection); 0090 closeSubtitleAction->setIcon(QIcon::fromTheme("window-close")); 0091 closeSubtitleAction->setText(i18n("Close")); 0092 closeSubtitleAction->setStatusTip(i18n("Close opened subtitle")); 0093 actionCollection->setDefaultShortcuts(closeSubtitleAction, KStandardShortcut::close()); 0094 connect(closeSubtitleAction, &QAction::triggered, this, &Application::closeSubtitle); 0095 actionCollection->addAction(ACT_CLOSE_SUBTITLE, closeSubtitleAction); 0096 actionManager->addAction(closeSubtitleAction, UserAction::SubOpened | UserAction::FullScreenOff); 0097 0098 QAction *newSubtitleTrAction = new QAction(actionCollection); 0099 newSubtitleTrAction->setIcon(QIcon::fromTheme("document-new")); 0100 newSubtitleTrAction->setText(i18n("New Translation")); 0101 newSubtitleTrAction->setStatusTip(i18n("Create an empty translation subtitle")); 0102 actionCollection->setDefaultShortcut(newSubtitleTrAction, QKeySequence("Ctrl+Shift+N")); 0103 connect(newSubtitleTrAction, &QAction::triggered, this, &Application::newSubtitleTr); 0104 actionCollection->addAction(ACT_NEW_SUBTITLE_TR, newSubtitleTrAction); 0105 actionManager->addAction(newSubtitleTrAction, UserAction::SubOpened | UserAction::FullScreenOff); 0106 0107 QAction *openSubtitleTrAction = new QAction(actionCollection); 0108 openSubtitleTrAction->setIcon(QIcon::fromTheme("document-open")); 0109 openSubtitleTrAction->setText(i18n("Open Translation...")); 0110 openSubtitleTrAction->setStatusTip(i18n("Open translation subtitle file")); 0111 actionCollection->setDefaultShortcut(openSubtitleTrAction, QKeySequence("Ctrl+Shift+O")); 0112 connect(openSubtitleTrAction, &QAction::triggered, this, [this](){ openSubtitleTr(); }); 0113 actionCollection->addAction(ACT_OPEN_SUBTITLE_TR, openSubtitleTrAction); 0114 actionManager->addAction(openSubtitleTrAction, UserAction::SubOpened); 0115 0116 m_reopenSubtitleTrAsAction = new KCodecActionExt(actionCollection, KCodecActionExt::Open); 0117 m_reopenSubtitleTrAsAction->setIcon(QIcon::fromTheme("view-refresh")); 0118 m_reopenSubtitleTrAsAction->setText(i18n("Reload Translation As...")); 0119 m_reopenSubtitleTrAsAction->setStatusTip(i18n("Reload opened translation file with a different encoding")); 0120 connect(m_reopenSubtitleTrAsAction, &KCodecActionExt::triggered, this, &Application::reopenSubtitleTrWithCodec); 0121 actionCollection->addAction(ACT_REOPEN_SUBTITLE_TR_AS, m_reopenSubtitleTrAsAction); 0122 actionManager->addAction(m_reopenSubtitleTrAsAction, UserAction::SubTrOpened | UserAction::SubSClean | UserAction::FullScreenOff); 0123 0124 m_recentSubtitlesTrAction = new KRecentFilesActionExt(actionCollection); 0125 m_recentSubtitlesTrAction->setIcon(QIcon::fromTheme("document-open")); 0126 m_recentSubtitlesTrAction->setText(i18n("Open &Recent Translation")); 0127 m_recentSubtitlesTrAction->setStatusTip(i18n("Open translation subtitle file")); 0128 connect(m_recentSubtitlesTrAction, &KRecentFilesActionExt::urlSelected, this, [this](const QUrl &url){ openSubtitleTr(url); }); 0129 actionCollection->addAction(ACT_RECENT_SUBTITLES_TR, m_recentSubtitlesTrAction); 0130 actionManager->addAction(m_recentSubtitlesTrAction, UserAction::SubOpened | UserAction::FullScreenOff); 0131 0132 QAction *saveSubtitleTrAction = new QAction(actionCollection); 0133 saveSubtitleTrAction->setIcon(QIcon::fromTheme("document-save")); 0134 saveSubtitleTrAction->setText(i18n("Save Translation")); 0135 saveSubtitleTrAction->setStatusTip(i18n("Save opened translation subtitle")); 0136 actionCollection->setDefaultShortcut(saveSubtitleTrAction, QKeySequence("Ctrl+Shift+S")); 0137 connect(saveSubtitleTrAction, &QAction::triggered, this, [&](){ 0138 saveSubtitleTr(QTextCodec::codecForName(m_subtitleTrEncoding.toUtf8())); 0139 }); 0140 actionCollection->addAction(ACT_SAVE_SUBTITLE_TR, saveSubtitleTrAction); 0141 actionManager->addAction(saveSubtitleTrAction, UserAction::SubSDirty | UserAction::FullScreenOff); 0142 0143 m_saveSubtitleTrAsAction = new KCodecActionExt(actionCollection, KCodecActionExt::Save); 0144 m_saveSubtitleTrAsAction->setIcon(QIcon::fromTheme("document-save-as")); 0145 m_saveSubtitleTrAsAction->setText(i18n("Save Translation As...")); 0146 m_saveSubtitleTrAsAction->setStatusTip(i18n("Save opened translation subtitle with different settings")); 0147 connect(m_saveSubtitleTrAsAction, &KCodecActionExt::triggered, this, &Application::saveSubtitleTrAs); 0148 connect(m_saveSubtitleTrAsAction, &QAction::triggered, this, [&](){ saveSubtitleTrAs(); }); 0149 actionCollection->addAction(ACT_SAVE_SUBTITLE_TR_AS, m_saveSubtitleTrAsAction); 0150 actionManager->addAction(m_saveSubtitleTrAsAction, UserAction::SubTrOpened | UserAction::FullScreenOff); 0151 0152 QAction *closeSubtitleTrAction = new QAction(actionCollection); 0153 closeSubtitleTrAction->setIcon(QIcon::fromTheme("window-close")); 0154 closeSubtitleTrAction->setText(i18n("Close Translation")); 0155 closeSubtitleTrAction->setStatusTip(i18n("Close opened translation subtitle")); 0156 actionCollection->setDefaultShortcut(closeSubtitleTrAction, QKeySequence("Ctrl+Shift+F4; Ctrl+Shift+W")); 0157 connect(closeSubtitleTrAction, &QAction::triggered, this, &Application::closeSubtitleTr); 0158 actionCollection->addAction(ACT_CLOSE_SUBTITLE_TR, closeSubtitleTrAction); 0159 actionManager->addAction(closeSubtitleTrAction, UserAction::SubTrOpened | UserAction::FullScreenOff); 0160 0161 QAction *undoAction = appUndoStack()->undoAction(); 0162 undoAction->setIcon(QIcon::fromTheme("edit-undo")); 0163 actionCollection->setDefaultShortcuts(undoAction, KStandardShortcut::undo()); 0164 actionCollection->addAction(ACT_UNDO, undoAction); 0165 0166 QAction *redoAction = appUndoStack()->redoAction(); 0167 redoAction->setIcon(QIcon::fromTheme("edit-redo")); 0168 actionCollection->setDefaultShortcuts(redoAction, KStandardShortcut::redo()); 0169 actionCollection->addAction(ACT_REDO, redoAction); 0170 0171 QAction *splitSubtitleAction = new QAction(actionCollection); 0172 splitSubtitleAction->setText(i18n("Split Subtitle...")); 0173 splitSubtitleAction->setStatusTip(i18n("Split the opened subtitle in two parts")); 0174 connect(splitSubtitleAction, &QAction::triggered, this, &Application::splitSubtitle); 0175 actionCollection->addAction(ACT_SPLIT_SUBTITLE, splitSubtitleAction); 0176 actionManager->addAction(splitSubtitleAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0177 0178 QAction *joinSubtitlesAction = new QAction(actionCollection); 0179 joinSubtitlesAction->setText(i18n("Join Subtitles...")); 0180 joinSubtitlesAction->setStatusTip(i18n("Append to the opened subtitle another one")); 0181 connect(joinSubtitlesAction, &QAction::triggered, this, &Application::joinSubtitles); 0182 actionCollection->addAction(ACT_JOIN_SUBTITLES, joinSubtitlesAction); 0183 actionManager->addAction(joinSubtitlesAction, UserAction::SubOpened | UserAction::FullScreenOff); 0184 0185 QAction *insertBeforeCurrentLineAction = new QAction(actionCollection); 0186 insertBeforeCurrentLineAction->setIcon(QIcon::fromTheme(QStringLiteral("list-add"))); 0187 insertBeforeCurrentLineAction->setText(i18n("Insert Before")); 0188 insertBeforeCurrentLineAction->setStatusTip(i18n("Insert empty line before current one")); 0189 actionCollection->setDefaultShortcut(insertBeforeCurrentLineAction, QKeySequence("Ctrl+Insert")); 0190 connect(insertBeforeCurrentLineAction, &QAction::triggered, this, &Application::insertBeforeCurrentLine); 0191 actionCollection->addAction(ACT_INSERT_BEFORE_CURRENT_LINE, insertBeforeCurrentLineAction); 0192 actionManager->addAction(insertBeforeCurrentLineAction, UserAction::SubOpened | UserAction::FullScreenOff); 0193 0194 QAction *insertAfterCurrentLineAction = new QAction(actionCollection); 0195 insertAfterCurrentLineAction->setIcon(QIcon::fromTheme(QStringLiteral("list-add"))); 0196 insertAfterCurrentLineAction->setText(i18n("Insert After")); 0197 insertAfterCurrentLineAction->setStatusTip(i18n("Insert empty line after current one")); 0198 actionCollection->setDefaultShortcut(insertAfterCurrentLineAction, QKeySequence("Insert")); 0199 connect(insertAfterCurrentLineAction, &QAction::triggered, this, &Application::insertAfterCurrentLine); 0200 actionCollection->addAction(ACT_INSERT_AFTER_CURRENT_LINE, insertAfterCurrentLineAction); 0201 actionManager->addAction(insertAfterCurrentLineAction, UserAction::SubOpened | UserAction::FullScreenOff); 0202 0203 QAction *removeSelectedLinesAction = new QAction(actionCollection); 0204 removeSelectedLinesAction->setIcon(QIcon::fromTheme(QStringLiteral("list-remove"))); 0205 removeSelectedLinesAction->setText(i18n("Remove")); 0206 removeSelectedLinesAction->setStatusTip(i18n("Remove selected lines")); 0207 actionCollection->setDefaultShortcut(removeSelectedLinesAction, QKeySequence("Delete")); 0208 connect(removeSelectedLinesAction, &QAction::triggered, this, &Application::removeSelectedLines); 0209 actionCollection->addAction(ACT_REMOVE_SELECTED_LINES, removeSelectedLinesAction); 0210 actionManager->addAction(removeSelectedLinesAction, UserAction::HasSelection | UserAction::FullScreenOff); 0211 0212 QAction *splitSelectedLinesAction = new QAction(actionCollection); 0213 splitSelectedLinesAction->setText(i18n("Split Lines")); 0214 splitSelectedLinesAction->setStatusTip(i18n("Split selected lines")); 0215 connect(splitSelectedLinesAction, &QAction::triggered, this, &Application::splitSelectedLines); 0216 actionCollection->addAction(ACT_SPLIT_SELECTED_LINES, splitSelectedLinesAction); 0217 actionManager->addAction(splitSelectedLinesAction, UserAction::HasSelection | UserAction::FullScreenOff); 0218 0219 QAction *joinSelectedLinesAction = new QAction(actionCollection); 0220 joinSelectedLinesAction->setText(i18n("Join Lines")); 0221 joinSelectedLinesAction->setStatusTip(i18n("Join selected lines")); 0222 connect(joinSelectedLinesAction, &QAction::triggered, this, &Application::joinSelectedLines); 0223 actionCollection->addAction(ACT_JOIN_SELECTED_LINES, joinSelectedLinesAction); 0224 actionManager->addAction(joinSelectedLinesAction, UserAction::HasSelection | UserAction::FullScreenOff); 0225 0226 QAction *selectAllLinesAction = new QAction(actionCollection); 0227 selectAllLinesAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-select-all"))); 0228 selectAllLinesAction->setText(i18n("Select All")); 0229 selectAllLinesAction->setStatusTip(i18n("Select all lines")); 0230 actionCollection->setDefaultShortcuts(selectAllLinesAction, KStandardShortcut::selectAll()); 0231 connect(selectAllLinesAction, &QAction::triggered, this, &Application::selectAllLines); 0232 actionCollection->addAction(ACT_SELECT_ALL_LINES, selectAllLinesAction); 0233 actionManager->addAction(selectAllLinesAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0234 0235 QAction *gotoLineAction = new QAction(actionCollection); 0236 gotoLineAction->setText(i18n("Go to Line...")); 0237 gotoLineAction->setStatusTip(i18n("Go to specified line")); 0238 actionCollection->setDefaultShortcuts(gotoLineAction, KStandardShortcut::gotoLine()); 0239 connect(gotoLineAction, &QAction::triggered, this, &Application::gotoLine); 0240 actionCollection->addAction(ACT_GOTO_LINE, gotoLineAction); 0241 actionManager->addAction(gotoLineAction, UserAction::SubHasLines); 0242 0243 QAction *findAction = new QAction(actionCollection); 0244 findAction->setIcon(QIcon::fromTheme("edit-find")); 0245 findAction->setText(i18n("Find...")); 0246 findAction->setStatusTip(i18n("Find occurrences of strings or regular expressions")); 0247 actionCollection->setDefaultShortcuts(findAction, KStandardShortcut::find()); 0248 connect(findAction, &QAction::triggered, this, &Application::find); 0249 actionCollection->addAction(ACT_FIND, findAction); 0250 actionManager->addAction(findAction, UserAction::SubHasLine); 0251 0252 QAction *findNextAction = new QAction(actionCollection); 0253 findNextAction->setIcon(QIcon::fromTheme("go-down-search")); 0254 findNextAction->setText(i18n("Find Next")); 0255 findNextAction->setStatusTip(i18n("Find next occurrence of string or regular expression")); 0256 actionCollection->setDefaultShortcuts(findNextAction, KStandardShortcut::findNext()); 0257 connect(findNextAction, &QAction::triggered, this, &Application::findNext); 0258 actionCollection->addAction(ACT_FIND_NEXT, findNextAction); 0259 actionManager->addAction(findNextAction, UserAction::SubHasLine); 0260 0261 QAction *findPreviousAction = new QAction(actionCollection); 0262 findPreviousAction->setIcon(QIcon::fromTheme("go-up-search")); 0263 findPreviousAction->setText(i18n("Find Previous")); 0264 findPreviousAction->setStatusTip(i18n("Find previous occurrence of string or regular expression")); 0265 actionCollection->setDefaultShortcuts(findPreviousAction, KStandardShortcut::findPrev()); 0266 connect(findPreviousAction, &QAction::triggered, this, &Application::findPrevious); 0267 actionCollection->addAction(ACT_FIND_PREVIOUS, findPreviousAction); 0268 actionManager->addAction(findPreviousAction, UserAction::SubHasLine); 0269 0270 QAction *replaceAction = new QAction(actionCollection); 0271 replaceAction->setText(i18n("Replace...")); 0272 replaceAction->setStatusTip(i18n("Replace occurrences of strings or regular expressions")); 0273 actionCollection->setDefaultShortcuts(replaceAction, KStandardShortcut::replace()); 0274 connect(replaceAction, &QAction::triggered, this, &Application::replace); 0275 actionCollection->addAction(ACT_REPLACE, replaceAction); 0276 actionManager->addAction(replaceAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0277 0278 QAction *retrocedeCurrentLineAction = new QAction(actionCollection); 0279 retrocedeCurrentLineAction->setIcon(QIcon::fromTheme("go-down")); 0280 retrocedeCurrentLineAction->setText(i18n("Retrocede current line")); 0281 retrocedeCurrentLineAction->setStatusTip(i18n("Makes the line before the current one active")); 0282 actionCollection->setDefaultShortcut(retrocedeCurrentLineAction, QKeySequence("Alt+Up")); 0283 connect(retrocedeCurrentLineAction, &QAction::triggered, this, &Application::retrocedeCurrentLine); 0284 actionCollection->addAction(ACT_RETROCEDE_CURRENT_LINE, retrocedeCurrentLineAction); 0285 actionManager->addAction(retrocedeCurrentLineAction, UserAction::SubHasLines | UserAction::HasSelection); 0286 0287 QAction *advanceCurrentLineAction = new QAction(actionCollection); 0288 advanceCurrentLineAction->setIcon(QIcon::fromTheme("go-down")); 0289 advanceCurrentLineAction->setText(i18n("Advance current line")); 0290 advanceCurrentLineAction->setStatusTip(i18n("Makes the line after the current one active")); 0291 actionCollection->setDefaultShortcut(advanceCurrentLineAction, QKeySequence("Alt+Down")); 0292 connect(advanceCurrentLineAction, &QAction::triggered, this, &Application::advanceCurrentLine); 0293 actionCollection->addAction(ACT_ADVANCE_CURRENT_LINE, advanceCurrentLineAction); 0294 actionManager->addAction(advanceCurrentLineAction, UserAction::SubHasLines | UserAction::HasSelection); 0295 0296 QAction *detectErrorsAction = new QAction(actionCollection); 0297 detectErrorsAction->setIcon(QIcon::fromTheme("edit-find")); 0298 detectErrorsAction->setText(i18n("Detect Errors...")); 0299 detectErrorsAction->setStatusTip(i18n("Detect errors in the current subtitle")); 0300 actionCollection->setDefaultShortcut(detectErrorsAction, QKeySequence("Ctrl+E")); 0301 connect(detectErrorsAction, &QAction::triggered, this, &Application::detectErrors); 0302 actionCollection->addAction(ACT_DETECT_ERRORS, detectErrorsAction); 0303 actionManager->addAction(detectErrorsAction, UserAction::HasSelection | UserAction::FullScreenOff); 0304 0305 QAction *clearErrorsAction = new QAction(actionCollection); 0306 clearErrorsAction->setText(i18n("Clear Errors/Marks")); 0307 clearErrorsAction->setStatusTip(i18n("Clear detected errors and marks in the current subtitle")); 0308 actionCollection->setDefaultShortcut(clearErrorsAction, QKeySequence("Ctrl+Shift+E")); 0309 connect(clearErrorsAction, &QAction::triggered, this, &Application::clearErrors); 0310 actionCollection->addAction(ACT_CLEAR_ERRORS, clearErrorsAction); 0311 actionManager->addAction(clearErrorsAction, UserAction::HasSelection | UserAction::FullScreenOff); 0312 0313 QAction *nextErrorAction = new QAction(actionCollection); 0314 nextErrorAction->setIcon(QIcon::fromTheme("go-down-search")); 0315 nextErrorAction->setText(i18n("Select Next Error/Mark")); 0316 nextErrorAction->setStatusTip(i18n("Select next line with error or mark")); 0317 actionCollection->setDefaultShortcut(nextErrorAction, QKeySequence("F4")); 0318 connect(nextErrorAction, &QAction::triggered, this, &Application::selectNextError); 0319 actionCollection->addAction(ACT_SELECT_NEXT_ERROR, nextErrorAction); 0320 actionManager->addAction(nextErrorAction, UserAction::SubHasLine); 0321 0322 QAction *prevErrorAction = new QAction(actionCollection); 0323 prevErrorAction->setIcon(QIcon::fromTheme("go-up-search")); 0324 prevErrorAction->setText(i18n("Select Previous Error/Mark")); 0325 prevErrorAction->setStatusTip(i18n("Select previous line with error or mark")); 0326 actionCollection->setDefaultShortcut(prevErrorAction, QKeySequence("Shift+F4")); 0327 connect(prevErrorAction, &QAction::triggered, this, &Application::selectPreviousError); 0328 actionCollection->addAction(ACT_SELECT_PREVIOUS_ERROR, prevErrorAction); 0329 actionManager->addAction(prevErrorAction, UserAction::SubHasLine); 0330 0331 QAction *spellCheckAction = new QAction(actionCollection); 0332 spellCheckAction->setIcon(QIcon::fromTheme("tools-check-spelling")); 0333 spellCheckAction->setText(i18n("Spelling...")); 0334 spellCheckAction->setStatusTip(i18n("Check lines spelling")); 0335 connect(spellCheckAction, &QAction::triggered, this, &Application::spellCheck); 0336 actionCollection->addAction(ACT_SPELL_CHECK, spellCheckAction); 0337 actionManager->addAction(spellCheckAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0338 0339 QAction *toggleSelectedLinesMarkAction = new QAction(actionCollection); 0340 toggleSelectedLinesMarkAction->setText(i18n("Toggle Mark")); 0341 toggleSelectedLinesMarkAction->setStatusTip(i18n("Toggle mark on selected lines")); 0342 actionCollection->setDefaultShortcut(toggleSelectedLinesMarkAction, QKeySequence("Ctrl+M")); 0343 connect(toggleSelectedLinesMarkAction, &QAction::triggered, this, &Application::toggleSelectedLinesMark); 0344 actionCollection->addAction(ACT_TOGGLE_SELECTED_LINES_MARK, toggleSelectedLinesMarkAction); 0345 actionManager->addAction(toggleSelectedLinesMarkAction, UserAction::HasSelection | UserAction::FullScreenOff); 0346 0347 QAction *toggleSelectedLinesBoldAction = new QAction(actionCollection); 0348 toggleSelectedLinesBoldAction->setIcon(QIcon::fromTheme("format-text-bold")); 0349 toggleSelectedLinesBoldAction->setText(i18n("Toggle Bold")); 0350 toggleSelectedLinesBoldAction->setStatusTip(i18n("Toggle selected lines bold attribute")); 0351 actionCollection->setDefaultShortcut(toggleSelectedLinesBoldAction, QKeySequence("Ctrl+B")); 0352 connect(toggleSelectedLinesBoldAction, &QAction::triggered, this, &Application::toggleSelectedLinesBold); 0353 actionCollection->addAction(ACT_TOGGLE_SELECTED_LINES_BOLD, toggleSelectedLinesBoldAction); 0354 actionManager->addAction(toggleSelectedLinesBoldAction, UserAction::HasSelection | UserAction::FullScreenOff); 0355 0356 QAction *toggleSelectedLinesItalicAction = new QAction(actionCollection); 0357 toggleSelectedLinesItalicAction->setIcon(QIcon::fromTheme("format-text-italic")); 0358 toggleSelectedLinesItalicAction->setText(i18n("Toggle Italic")); 0359 toggleSelectedLinesItalicAction->setStatusTip(i18n("Toggle selected lines italic attribute")); 0360 actionCollection->setDefaultShortcut(toggleSelectedLinesItalicAction, QKeySequence("Ctrl+I")); 0361 connect(toggleSelectedLinesItalicAction, &QAction::triggered, this, &Application::toggleSelectedLinesItalic); 0362 actionCollection->addAction(ACT_TOGGLE_SELECTED_LINES_ITALIC, toggleSelectedLinesItalicAction); 0363 actionManager->addAction(toggleSelectedLinesItalicAction, UserAction::HasSelection | UserAction::FullScreenOff); 0364 0365 QAction *toggleSelectedLinesUnderlineAction = new QAction(actionCollection); 0366 toggleSelectedLinesUnderlineAction->setIcon(QIcon::fromTheme("format-text-underline")); 0367 toggleSelectedLinesUnderlineAction->setText(i18n("Toggle Underline")); 0368 toggleSelectedLinesUnderlineAction->setStatusTip(i18n("Toggle selected lines underline attribute")); 0369 actionCollection->setDefaultShortcut(toggleSelectedLinesUnderlineAction, QKeySequence("Ctrl+U")); 0370 connect(toggleSelectedLinesUnderlineAction, &QAction::triggered, this, &Application::toggleSelectedLinesUnderline); 0371 actionCollection->addAction(ACT_TOGGLE_SELECTED_LINES_UNDERLINE, toggleSelectedLinesUnderlineAction); 0372 actionManager->addAction(toggleSelectedLinesUnderlineAction, UserAction::HasSelection | UserAction::FullScreenOff); 0373 0374 QAction *toggleSelectedLinesStrikeThroughAction = new QAction(actionCollection); 0375 toggleSelectedLinesStrikeThroughAction->setIcon(QIcon::fromTheme("format-text-strikethrough")); 0376 toggleSelectedLinesStrikeThroughAction->setText(i18n("Toggle Strike Through")); 0377 toggleSelectedLinesStrikeThroughAction->setStatusTip(i18n("Toggle selected lines strike through attribute")); 0378 actionCollection->setDefaultShortcut(toggleSelectedLinesStrikeThroughAction, QKeySequence("Ctrl+T")); 0379 connect(toggleSelectedLinesStrikeThroughAction, &QAction::triggered, this, &Application::toggleSelectedLinesStrikeThrough); 0380 actionCollection->addAction(ACT_TOGGLE_SELECTED_LINES_STRIKETHROUGH, toggleSelectedLinesStrikeThroughAction); 0381 actionManager->addAction(toggleSelectedLinesStrikeThroughAction, UserAction::HasSelection | UserAction::FullScreenOff); 0382 0383 QAction *changeSelectedLinesColorAction = new QAction(actionCollection); 0384 changeSelectedLinesColorAction->setIcon(QIcon::fromTheme("format-text-color")); 0385 changeSelectedLinesColorAction->setText(i18n("Change Text Color")); 0386 changeSelectedLinesColorAction->setStatusTip(i18n("Change text color of selected lines")); 0387 actionCollection->setDefaultShortcut(changeSelectedLinesColorAction, QKeySequence("Ctrl+Shift+C")); 0388 connect(changeSelectedLinesColorAction, &QAction::triggered, this, &Application::changeSelectedLinesColor); 0389 actionCollection->addAction(ACT_CHANGE_SELECTED_LINES_TEXT_COLOR, changeSelectedLinesColorAction); 0390 actionManager->addAction(changeSelectedLinesColorAction, UserAction::HasSelection | UserAction::FullScreenOff); 0391 0392 QAction *shiftAction = new QAction(actionCollection); 0393 shiftAction->setText(i18n("Shift...")); 0394 shiftAction->setStatusTip(i18n("Shift lines an specified amount of time")); 0395 actionCollection->setDefaultShortcut(shiftAction, QKeySequence("Ctrl+D")); 0396 connect(shiftAction, &QAction::triggered, this, &Application::shiftLines); 0397 actionCollection->addAction(ACT_SHIFT, shiftAction); 0398 actionManager->addAction(shiftAction, UserAction::SubHasLine | UserAction::FullScreenOff | UserAction::AnchorsNone); 0399 0400 QAction *shiftSelectedLinesFwdAction = new QAction(actionCollection); 0401 actionCollection->setDefaultShortcut(shiftSelectedLinesFwdAction, QKeySequence("Shift++")); 0402 connect(shiftSelectedLinesFwdAction, &QAction::triggered, this, &Application::shiftSelectedLinesForwards); 0403 actionCollection->addAction(ACT_SHIFT_SELECTED_LINES_FORWARDS, shiftSelectedLinesFwdAction); 0404 actionManager->addAction(shiftSelectedLinesFwdAction, UserAction::HasSelection | UserAction::FullScreenOff | UserAction::EditableShowTime); 0405 0406 QAction *shiftSelectedLinesBwdAction = new QAction(actionCollection); 0407 actionCollection->setDefaultShortcut(shiftSelectedLinesBwdAction, QKeySequence("Shift+-")); 0408 connect(shiftSelectedLinesBwdAction, &QAction::triggered, this, &Application::shiftSelectedLinesBackwards); 0409 actionCollection->addAction(ACT_SHIFT_SELECTED_LINES_BACKWARDS, shiftSelectedLinesBwdAction); 0410 actionManager->addAction(shiftSelectedLinesBwdAction, UserAction::HasSelection | UserAction::FullScreenOff | UserAction::EditableShowTime); 0411 0412 QAction *adjustAction = new QAction(actionCollection); 0413 adjustAction->setText(i18n("Adjust...")); 0414 adjustAction->setStatusTip(i18n("Linearly adjust all lines to a specified interval")); 0415 actionCollection->setDefaultShortcut(adjustAction, QKeySequence("Ctrl+J")); 0416 connect(adjustAction, &QAction::triggered, this, &Application::adjustLines); 0417 actionCollection->addAction(ACT_ADJUST, adjustAction); 0418 actionManager->addAction(adjustAction, UserAction::SubHasLines | UserAction::FullScreenOff | UserAction::AnchorsNone); 0419 0420 QAction *changeFrameRateAction = new QAction(actionCollection); 0421 changeFrameRateAction->setText(i18n("Change Frame Rate...")); 0422 changeFrameRateAction->setStatusTip(i18n("Retime subtitle lines by reinterpreting its frame rate")); 0423 connect(changeFrameRateAction, &QAction::triggered, this, &Application::changeFrameRate); 0424 actionCollection->addAction(ACT_CHANGE_FRAME_RATE, changeFrameRateAction); 0425 actionManager->addAction(changeFrameRateAction, UserAction::SubOpened | UserAction::FullScreenOff | UserAction::AnchorsNone); 0426 0427 QAction *durationLimitsAction = new QAction(actionCollection); 0428 durationLimitsAction->setText(i18n("Enforce Duration Limits...")); 0429 durationLimitsAction->setStatusTip(i18n("Enforce lines minimum and/or maximum duration limits")); 0430 actionCollection->setDefaultShortcut(durationLimitsAction, QKeySequence("Ctrl+L")); 0431 connect(durationLimitsAction, &QAction::triggered, this, &Application::enforceDurationLimits); 0432 actionCollection->addAction(ACT_DURATION_LIMITS, durationLimitsAction); 0433 actionManager->addAction(durationLimitsAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0434 0435 QAction *autoDurationsAction = new QAction(actionCollection); 0436 autoDurationsAction->setText(i18n("Set Automatic Durations...")); 0437 autoDurationsAction->setStatusTip(i18n("Set lines durations based on amount of letters, words and line breaks")); 0438 connect(autoDurationsAction, &QAction::triggered, this, &Application::setAutoDurations); 0439 actionCollection->addAction(ACT_AUTOMATIC_DURATIONS, autoDurationsAction); 0440 actionManager->addAction(autoDurationsAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0441 0442 QAction *maximizeDurationsAction = new QAction(actionCollection); 0443 maximizeDurationsAction->setText(i18n("Maximize Durations...")); 0444 maximizeDurationsAction->setStatusTip(i18n("Extend lines durations up to their next lines show time")); 0445 connect(maximizeDurationsAction, &QAction::triggered, this, &Application::maximizeDurations); 0446 actionCollection->addAction(ACT_MAXIMIZE_DURATIONS, maximizeDurationsAction); 0447 actionManager->addAction(maximizeDurationsAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0448 0449 QAction *fixOverlappingLinesAction = new QAction(actionCollection); 0450 fixOverlappingLinesAction->setText(i18n("Fix Overlapping Times...")); 0451 fixOverlappingLinesAction->setStatusTip(i18n("Fix lines overlapping times")); 0452 connect(fixOverlappingLinesAction, &QAction::triggered, this, &Application::fixOverlappingLines); 0453 actionCollection->addAction(ACT_FIX_OVERLAPPING_LINES, fixOverlappingLinesAction); 0454 actionManager->addAction(fixOverlappingLinesAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0455 0456 QAction *syncWithSubtitleAction = new QAction(actionCollection); 0457 syncWithSubtitleAction->setText(i18n("Synchronize with Subtitle...")); 0458 syncWithSubtitleAction->setStatusTip(i18n("Copy timing information from another subtitle")); 0459 connect(syncWithSubtitleAction, &QAction::triggered, this, &Application::syncWithSubtitle); 0460 actionCollection->addAction(ACT_SYNC_WITH_SUBTITLE, syncWithSubtitleAction); 0461 actionManager->addAction(syncWithSubtitleAction, UserAction::SubHasLine | UserAction::FullScreenOff | UserAction::AnchorsNone); 0462 0463 QAction *breakLinesAction = new QAction(actionCollection); 0464 breakLinesAction->setText(i18n("Break Lines...")); 0465 breakLinesAction->setStatusTip(i18n("Automatically set line breaks")); 0466 connect(breakLinesAction, &QAction::triggered, this, &Application::breakLines); 0467 actionCollection->addAction(ACT_ADJUST_TEXTS, breakLinesAction); 0468 actionManager->addAction(breakLinesAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0469 0470 QAction *unbreakTextsAction = new QAction(actionCollection); 0471 unbreakTextsAction->setText(i18n("Unbreak Lines...")); 0472 unbreakTextsAction->setStatusTip(i18n("Remove line breaks from lines")); 0473 connect(unbreakTextsAction, &QAction::triggered, this, &Application::unbreakTexts); 0474 actionCollection->addAction(ACT_UNBREAK_TEXTS, unbreakTextsAction); 0475 actionManager->addAction(unbreakTextsAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0476 0477 QAction *simplifySpacesAction = new QAction(actionCollection); 0478 simplifySpacesAction->setText(i18n("Simplify Spaces...")); 0479 simplifySpacesAction->setStatusTip(i18n("Remove unneeded spaces from lines")); 0480 connect(simplifySpacesAction, &QAction::triggered, this, &Application::simplifySpaces); 0481 actionCollection->addAction(ACT_SIMPLIFY_SPACES, simplifySpacesAction); 0482 actionManager->addAction(simplifySpacesAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0483 0484 QAction *changeCaseAction = new QAction(actionCollection); 0485 changeCaseAction->setText(i18n("Change Case...")); 0486 changeCaseAction->setStatusTip(i18n("Change lines text to upper, lower, title or sentence case")); 0487 connect(changeCaseAction, &QAction::triggered, this, &Application::changeCase); 0488 actionCollection->addAction(ACT_CHANGE_CASE, changeCaseAction); 0489 actionManager->addAction(changeCaseAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0490 0491 QAction *fixPunctuationAction = new QAction(actionCollection); 0492 fixPunctuationAction->setText(i18n("Fix Punctuation...")); 0493 fixPunctuationAction->setStatusTip(i18n("Fix punctuation errors in lines")); 0494 connect(fixPunctuationAction, &QAction::triggered, this, &Application::fixPunctuation); 0495 actionCollection->addAction(ACT_FIX_PUNCTUATION, fixPunctuationAction); 0496 actionManager->addAction(fixPunctuationAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0497 0498 QAction *translateAction = new QAction(actionCollection); 0499 translateAction->setText(i18n("Translate...")); 0500 translateAction->setStatusTip(i18n("Translate lines texts using Google services")); 0501 QObject::connect(translateAction, &QAction::triggered, this, &TranslateDialog::performTranslation); 0502 actionCollection->addAction(ACT_TRANSLATE, translateAction); 0503 actionManager->addAction(translateAction, UserAction::SubHasLine | UserAction::FullScreenOff); 0504 0505 QAction *editCurrentLineInPlaceAction = new QAction(actionCollection); 0506 editCurrentLineInPlaceAction->setText(i18n("Edit Line in Place")); 0507 editCurrentLineInPlaceAction->setStatusTip(i18n("Edit current line text in place")); 0508 actionCollection->setDefaultShortcut(editCurrentLineInPlaceAction, QKeySequence("F2")); 0509 connect(editCurrentLineInPlaceAction, &QAction::triggered, m_mainWindow->m_linesWidget, &LinesWidget::editCurrentLineInPlace); 0510 actionCollection->addAction(ACT_EDIT_CURRENT_LINE_IN_PLACE, editCurrentLineInPlaceAction); 0511 actionManager->addAction(editCurrentLineInPlaceAction, UserAction::HasSelection | UserAction::FullScreenOff); 0512 0513 QAction *openVideoAction = new QAction(actionCollection); 0514 openVideoAction->setIcon(QIcon::fromTheme("document-open")); 0515 openVideoAction->setText(i18n("Open Video...")); 0516 openVideoAction->setStatusTip(i18n("Open video file")); 0517 connect(openVideoAction, &QAction::triggered, this, [this](){ openVideo(); }); 0518 actionCollection->addAction(ACT_OPEN_VIDEO, openVideoAction); 0519 0520 m_recentVideosAction = new KRecentFilesActionExt(actionCollection); 0521 m_recentVideosAction->setIcon(QIcon::fromTheme("document-open")); 0522 m_recentVideosAction->setText(i18n("Open &Recent Video")); 0523 m_recentVideosAction->setStatusTip(i18n("Open video file")); 0524 connect(m_recentVideosAction, &KRecentFilesActionExt::urlSelected, this, [this](const QUrl &url){ openVideo(url); }); 0525 actionCollection->addAction(ACT_RECENT_VIDEOS, m_recentVideosAction); 0526 0527 QAction *demuxTextStreamAction = new KSelectAction(actionCollection); 0528 demuxTextStreamAction->setIcon(QIcon::fromTheme("select_stream")); 0529 demuxTextStreamAction->setText(i18n("Import Subtitle Stream")); 0530 demuxTextStreamAction->setStatusTip(i18n("Import subtitle stream into subtitle editor")); 0531 connect(demuxTextStreamAction->menu(), &QMenu::triggered, this, [this](QAction *action){ demuxTextStream(action->data().value<int>()); }); 0532 actionCollection->addAction(ACT_DEMUX_TEXT_STREAM, demuxTextStreamAction); 0533 0534 QAction *speechImportStreamAction = new KSelectAction(actionCollection); 0535 speechImportStreamAction->setIcon(QIcon::fromTheme("select_stream")); 0536 speechImportStreamAction->setText(i18n("Recognize Speech")); 0537 speechImportStreamAction->setStatusTip(i18n("Recognize speech in audio stream")); 0538 connect(speechImportStreamAction->menu(), &QMenu::triggered, this, [this](QAction *action){ speechImportAudioStream(action->data().value<int>()); }); 0539 actionCollection->addAction(ACT_ASR_IMPORT_AUDIO_STREAM, speechImportStreamAction); 0540 0541 QAction *closeVideoAction = new QAction(actionCollection); 0542 closeVideoAction->setIcon(QIcon::fromTheme("window-close")); 0543 closeVideoAction->setText(i18n("Close Video")); 0544 closeVideoAction->setStatusTip(i18n("Close video file")); 0545 connect(closeVideoAction, &QAction::triggered, videoPlayer, &VideoPlayer::closeFile); 0546 actionCollection->addAction(ACT_CLOSE_VIDEO, closeVideoAction); 0547 actionManager->addAction(closeVideoAction, UserAction::VideoOpened); 0548 0549 KToggleAction *fullScreenAction = new KToggleAction(actionCollection); 0550 fullScreenAction->setIcon(QIcon::fromTheme("view-fullscreen")); 0551 fullScreenAction->setText(i18n("Full Screen Mode")); 0552 fullScreenAction->setStatusTip(i18n("Toggle full screen mode")); 0553 actionCollection->setDefaultShortcuts(fullScreenAction, KStandardShortcut::fullScreen()); 0554 connect(fullScreenAction, &QAction::toggled, this, &Application::setFullScreenMode); 0555 actionCollection->addAction(ACT_TOGGLE_FULL_SCREEN, fullScreenAction); 0556 0557 QAction *stopAction = new QAction(actionCollection); 0558 stopAction->setIcon(QIcon::fromTheme("media-playback-stop")); 0559 stopAction->setText(i18n("Stop")); 0560 stopAction->setStatusTip(i18n("Stop video playback")); 0561 connect(stopAction, &QAction::triggered, videoPlayer, &VideoPlayer::stop); 0562 actionCollection->addAction(ACT_STOP, stopAction); 0563 actionManager->addAction(stopAction, UserAction::VideoPlaying); 0564 0565 QAction *playPauseAction = new QAction(actionCollection); 0566 playPauseAction->setIcon(QIcon::fromTheme("media-playback-start")); 0567 playPauseAction->setText(i18n("Play")); 0568 playPauseAction->setStatusTip(i18n("Toggle video playing/paused")); 0569 actionCollection->setDefaultShortcut(playPauseAction, QKeySequence("Ctrl+Space")); 0570 connect(playPauseAction, &QAction::triggered, videoPlayer, &VideoPlayer::togglePlayPaused); 0571 actionCollection->addAction(ACT_PLAY_PAUSE, playPauseAction); 0572 actionManager->addAction(playPauseAction, UserAction::VideoOpened); 0573 0574 QAction *seekBackwardAction = new QAction(actionCollection); 0575 seekBackwardAction->setIcon(QIcon::fromTheme("media-seek-backward")); 0576 seekBackwardAction->setText(i18n("Seek Backward")); 0577 actionCollection->setDefaultShortcut(seekBackwardAction, QKeySequence("Left")); 0578 connect(seekBackwardAction, &QAction::triggered, this, &Application::seekBackward); 0579 actionCollection->addAction(ACT_SEEK_BACKWARD, seekBackwardAction); 0580 actionManager->addAction(seekBackwardAction, UserAction::VideoPlaying); 0581 0582 QAction *seekForwardAction = new QAction(actionCollection); 0583 seekForwardAction->setIcon(QIcon::fromTheme("media-seek-forward")); 0584 seekForwardAction->setText(i18n("Seek Forward")); 0585 actionCollection->setDefaultShortcut(seekForwardAction, QKeySequence("Right")); 0586 connect(seekForwardAction, &QAction::triggered, this, &Application::seekForward); 0587 actionCollection->addAction(ACT_SEEK_FORWARD, seekForwardAction); 0588 actionManager->addAction(seekForwardAction, UserAction::VideoPlaying); 0589 0590 QAction *stepFrameBackwardAction = new QAction(actionCollection); 0591 stepFrameBackwardAction->setText(i18n("Frame Step Backward")); 0592 actionCollection->setDefaultShortcut(stepFrameBackwardAction, QKeySequence("Ctrl+Left")); 0593 connect(stepFrameBackwardAction, &QAction::triggered, this, &Application::stepBackward); 0594 actionCollection->addAction(ACT_STEP_FRAME_BACKWARD, stepFrameBackwardAction); 0595 actionManager->addAction(stepFrameBackwardAction, UserAction::VideoPlaying); 0596 0597 QAction *stepFrameForwardAction = new QAction(actionCollection); 0598 stepFrameForwardAction->setText(i18n("Frame Step Forward")); 0599 actionCollection->setDefaultShortcut(stepFrameForwardAction, QKeySequence("Ctrl+Right")); 0600 connect(stepFrameForwardAction, &QAction::triggered, this, &Application::stepForward); 0601 actionCollection->addAction(ACT_STEP_FRAME_FORWARD, stepFrameForwardAction); 0602 actionManager->addAction(stepFrameForwardAction, UserAction::VideoPlaying); 0603 0604 QAction *seekToPrevLineAction = new QAction(actionCollection); 0605 seekToPrevLineAction->setIcon(QIcon::fromTheme("media-skip-backward")); 0606 seekToPrevLineAction->setText(i18n("Seek to Previous Line")); 0607 seekToPrevLineAction->setStatusTip(i18n("Seek to previous subtitle line show time")); 0608 actionCollection->setDefaultShortcut(seekToPrevLineAction, QKeySequence("Ctrl+Shift+Up")); 0609 connect(seekToPrevLineAction, &QAction::triggered, this, &Application::seekToPrevLine); 0610 actionCollection->addAction(ACT_SEEK_TO_PREVIOUS_LINE, seekToPrevLineAction); 0611 actionManager->addAction(seekToPrevLineAction, UserAction::SubHasLine | UserAction::VideoPlaying); 0612 0613 QAction *playrateIncreaseAction = new QAction(actionCollection); 0614 playrateIncreaseAction->setIcon(QIcon::fromTheme(QStringLiteral("playrate_plus"))); 0615 playrateIncreaseAction->setText(i18n("Increase media play rate")); 0616 playrateIncreaseAction->setStatusTip(i18n("Increase media playback rate")); 0617 connect(playrateIncreaseAction, &QAction::triggered, this, &Application::playrateIncrease); 0618 actionCollection->addAction(ACT_PLAY_RATE_INCREASE, playrateIncreaseAction); 0619 actionManager->addAction(playrateIncreaseAction, UserAction::VideoPlaying); 0620 0621 QAction *playrateDecreaseAction = new QAction(actionCollection); 0622 playrateDecreaseAction->setIcon(QIcon::fromTheme(QStringLiteral("playrate_minus"))); 0623 playrateDecreaseAction->setText(i18n("Decrease media play rate")); 0624 playrateDecreaseAction->setStatusTip(i18n("Decrease media playback rate")); 0625 connect(playrateDecreaseAction, &QAction::triggered, this, &Application::playrateDecrease); 0626 actionCollection->addAction(ACT_PLAY_RATE_DECREASE, playrateDecreaseAction); 0627 actionManager->addAction(playrateDecreaseAction, UserAction::VideoPlaying); 0628 0629 QAction *playCurrentLineAndPauseAction = new QAction(actionCollection); 0630 playCurrentLineAndPauseAction->setText(i18n("Play Current Line and Pause")); 0631 playCurrentLineAndPauseAction->setStatusTip(i18n("Seek to selected subtitle line show time, play it and then pause")); 0632 actionCollection->setDefaultShortcut(playCurrentLineAndPauseAction, QKeySequence("Ctrl+Return")); 0633 connect(playCurrentLineAndPauseAction, &QAction::triggered, this, &Application::playOnlyCurrentLine); 0634 actionCollection->addAction(ACT_PLAY_CURRENT_LINE_AND_PAUSE, playCurrentLineAndPauseAction); 0635 actionManager->addAction(playCurrentLineAndPauseAction, UserAction::SubHasLine | UserAction::VideoPlaying); 0636 0637 QAction *seekCurrentLineAction = new QAction(actionCollection); 0638 seekCurrentLineAction->setText(i18n("Seek to Current Line")); 0639 seekCurrentLineAction->setStatusTip(i18n("Seek to selected subtitle line show time")); 0640 connect(seekCurrentLineAction, &QAction::triggered, this, &Application::seekToCurrentLine); 0641 actionCollection->addAction(ACT_SEEK_TO_CURRENT_LINE, seekCurrentLineAction); 0642 actionManager->addAction(seekCurrentLineAction, UserAction::SubHasLine | UserAction::VideoPlaying); 0643 0644 QAction *seekToNextLineAction = new QAction(actionCollection); 0645 seekToNextLineAction->setIcon(QIcon::fromTheme("media-skip-forward")); 0646 seekToNextLineAction->setText(i18n("Seek to Next Line")); 0647 seekToNextLineAction->setStatusTip(i18n("Seek to next subtitle line show time")); 0648 actionCollection->setDefaultShortcut(seekToNextLineAction, QKeySequence("Ctrl+Shift+Down")); 0649 connect(seekToNextLineAction, &QAction::triggered, this, &Application::seekToNextLine); 0650 actionCollection->addAction(ACT_SEEK_TO_NEXT_LINE, seekToNextLineAction); 0651 actionManager->addAction(seekToNextLineAction, UserAction::SubHasLine | UserAction::VideoPlaying); 0652 0653 QAction *setCurrentLineShowTimeFromVideoAction = new QAction(actionCollection); 0654 setCurrentLineShowTimeFromVideoAction->setIcon(QIcon::fromTheme(QStringLiteral("set_show_time"))); 0655 setCurrentLineShowTimeFromVideoAction->setText(i18n("Set Line Show Time to Video Position")); 0656 setCurrentLineShowTimeFromVideoAction->setStatusTip(i18n("Set current line show time to video position")); 0657 actionCollection->setDefaultShortcut(setCurrentLineShowTimeFromVideoAction, QKeySequence("Shift+Z")); 0658 connect(setCurrentLineShowTimeFromVideoAction, &QAction::triggered, this, &Application::setCurrentLineShowTimeFromVideo); 0659 actionCollection->addAction(ACT_SET_CURRENT_LINE_SHOW_TIME, setCurrentLineShowTimeFromVideoAction); 0660 actionManager->addAction(setCurrentLineShowTimeFromVideoAction, UserAction::HasSelection | UserAction::VideoPlaying | UserAction::EditableShowTime); 0661 0662 QAction *setCurrentLineHideTimeFromVideoAction = new QAction(actionCollection); 0663 setCurrentLineHideTimeFromVideoAction->setIcon(QIcon::fromTheme(QStringLiteral("set_hide_time"))); 0664 setCurrentLineHideTimeFromVideoAction->setText(i18n("Set Line Hide Time to Video Position")); 0665 setCurrentLineHideTimeFromVideoAction->setStatusTip(i18n("Set current line hide time to video position")); 0666 actionCollection->setDefaultShortcut(setCurrentLineHideTimeFromVideoAction, QKeySequence("Shift+X")); 0667 connect(setCurrentLineHideTimeFromVideoAction, &QAction::triggered, this, &Application::setCurrentLineHideTimeFromVideo); 0668 actionCollection->addAction(ACT_SET_CURRENT_LINE_HIDE_TIME, setCurrentLineHideTimeFromVideoAction); 0669 actionManager->addAction(setCurrentLineHideTimeFromVideoAction, UserAction::HasSelection | UserAction::VideoPlaying | UserAction::EditableShowTime); 0670 0671 QAction *shiftToVideoPositionAction = new QAction(actionCollection); 0672 shiftToVideoPositionAction->setText(i18n("Shift Current Line to Video Position")); 0673 shiftToVideoPositionAction->setStatusTip(i18n("Set current line show time to video position by equally shifting all lines")); 0674 actionCollection->setDefaultShortcut(shiftToVideoPositionAction, QKeySequence("Shift+A")); 0675 connect(shiftToVideoPositionAction, &QAction::triggered, this, &Application::shiftToVideoPosition); 0676 actionCollection->addAction(ACT_SHIFT_TO_VIDEO_POSITION, shiftToVideoPositionAction); 0677 actionManager->addAction(shiftToVideoPositionAction, UserAction::HasSelection | UserAction::VideoPlaying | UserAction::FullScreenOff | UserAction::EditableShowTime); 0678 0679 KToggleAction *currentLineFollowsVideoAction = new KToggleAction(actionCollection); 0680 currentLineFollowsVideoAction->setIcon(QIcon::fromTheme(QStringLiteral("current_line_follows_video"))); 0681 currentLineFollowsVideoAction->setText(i18n("Current Line Follows Video")); 0682 currentLineFollowsVideoAction->setStatusTip(i18n("Make current line follow the playing video position")); 0683 connect(currentLineFollowsVideoAction, &QAction::toggled, this, &Application::onLinkCurrentLineToVideoToggled); 0684 actionCollection->addAction(ACT_CURRENT_LINE_FOLLOWS_VIDEO, currentLineFollowsVideoAction); 0685 0686 KToggleAction *toggleMuteAction = new KToggleAction(actionCollection); 0687 toggleMuteAction->setIcon(QIcon::fromTheme("audio-volume-muted")); 0688 toggleMuteAction->setText(i18nc("@action:inmenu Toggle audio muted", "Mute")); 0689 toggleMuteAction->setStatusTip(i18n("Enable/disable playback sound")); 0690 actionCollection->setDefaultShortcut(toggleMuteAction, QKeySequence("/")); 0691 connect(toggleMuteAction, &QAction::toggled, videoPlayer, &VideoPlayer::setMuted); 0692 actionCollection->addAction(ACT_TOGGLE_MUTED, toggleMuteAction); 0693 0694 QAction *increaseVolumeAction = new QAction(actionCollection); 0695 increaseVolumeAction->setIcon(QIcon::fromTheme("audio-volume-high")); 0696 increaseVolumeAction->setText(i18n("Increase Volume")); 0697 increaseVolumeAction->setStatusTip(i18n("Increase volume by 5%")); 0698 actionCollection->setDefaultShortcut(increaseVolumeAction, Qt::Key_Plus); 0699 connect(increaseVolumeAction, &QAction::triggered, videoPlayer, &VideoPlayer::increaseVolume); 0700 actionCollection->addAction(ACT_INCREASE_VOLUME, increaseVolumeAction); 0701 0702 QAction *decreaseVolumeAction = new QAction(actionCollection); 0703 decreaseVolumeAction->setIcon(QIcon::fromTheme("audio-volume-low")); 0704 decreaseVolumeAction->setText(i18n("Decrease Volume")); 0705 decreaseVolumeAction->setStatusTip(i18n("Decrease volume by 5%")); 0706 actionCollection->setDefaultShortcut(decreaseVolumeAction, Qt::Key_Minus); 0707 connect(decreaseVolumeAction, &QAction::triggered, videoPlayer, &VideoPlayer::decreaseVolume); 0708 actionCollection->addAction(ACT_DECREASE_VOLUME, decreaseVolumeAction); 0709 0710 KSelectAction *setActiveAudioStreamAction = new KSelectAction(actionCollection); 0711 setActiveAudioStreamAction->setIcon(QIcon::fromTheme(QStringLiteral("languages"))); 0712 setActiveAudioStreamAction->setText(i18n("Audio Streams")); 0713 setActiveAudioStreamAction->setStatusTip(i18n("Select active audio stream")); 0714 #if KWIDGETSADDONS_VERSION < QT_VERSION_CHECK(5, 78, 0) 0715 connect(setActiveAudioStreamAction, QOverload<int>::of(&KSelectAction::triggered), videoPlayer, &VideoPlayer::selectAudioStream); 0716 #else 0717 connect(setActiveAudioStreamAction, &KSelectAction::indexTriggered, videoPlayer, &VideoPlayer::selectAudioStream); 0718 #endif 0719 actionCollection->addAction(ACT_SET_ACTIVE_AUDIO_STREAM, setActiveAudioStreamAction); 0720 actionManager->addAction(setActiveAudioStreamAction, UserAction::VideoOpened); 0721 0722 QAction *increaseSubtitleFontAction = new QAction(actionCollection); 0723 increaseSubtitleFontAction->setIcon(QIcon::fromTheme("format-font-size-more")); 0724 increaseSubtitleFontAction->setText(i18n("Increase Font Size")); 0725 increaseSubtitleFontAction->setStatusTip(i18n("Increase subtitles font size by 1 point")); 0726 actionCollection->setDefaultShortcut(increaseSubtitleFontAction, QKeySequence("Alt++")); 0727 connect(increaseSubtitleFontAction, &QAction::triggered, m_mainWindow->m_playerWidget, &PlayerWidget::increaseFontSize); 0728 actionCollection->addAction(ACT_INCREASE_SUBTITLE_FONT, increaseSubtitleFontAction); 0729 0730 QAction *decreaseSubtitleFontAction = new QAction(actionCollection); 0731 decreaseSubtitleFontAction->setIcon(QIcon::fromTheme("format-font-size-less")); 0732 decreaseSubtitleFontAction->setText(i18n("Decrease Font Size")); 0733 decreaseSubtitleFontAction->setStatusTip(i18n("Decrease subtitles font size by 1 point")); 0734 actionCollection->setDefaultShortcut(decreaseSubtitleFontAction, QKeySequence("Alt+-")); 0735 connect(decreaseSubtitleFontAction, &QAction::triggered, m_mainWindow->m_playerWidget, &PlayerWidget::decreaseFontSize); 0736 actionCollection->addAction(ACT_DECREASE_SUBTITLE_FONT, decreaseSubtitleFontAction); 0737 0738 KSelectAction *setActiveSubtitleStreamAction = new KSelectAction(actionCollection); 0739 setActiveSubtitleStreamAction->setIcon(QIcon::fromTheme(QStringLiteral("languages"))); 0740 setActiveSubtitleStreamAction->setText(i18n("Displayed Subtitle Text")); 0741 setActiveSubtitleStreamAction->setStatusTip(i18n("Select visible subtitle text")); 0742 #if KWIDGETSADDONS_VERSION < QT_VERSION_CHECK(5, 78, 0) 0743 connect(setActiveSubtitleStreamAction, QOverload<int>::of(&KSelectAction::triggered), this, &Application::setActiveSubtitleStream); 0744 #else 0745 connect(setActiveSubtitleStreamAction, &KSelectAction::indexTriggered, this, &Application::setActiveSubtitleStream); 0746 #endif 0747 actionCollection->addAction(ACT_SET_ACTIVE_SUBTITLE_STREAM, setActiveSubtitleStreamAction); 0748 actionManager->addAction(setActiveSubtitleStreamAction, UserAction::SubTrOpened); 0749 0750 QAction *toggleAnchor = new QAction(actionCollection); 0751 toggleAnchor->setIcon(QIcon::fromTheme(QStringLiteral("anchor"))); 0752 toggleAnchor->setText(i18n("Toggle Anchor")); 0753 toggleAnchor->setStatusTip(i18n("(Un)Anchor current line's show time to timeline (Editing anchored line's show time will stretch/compact the timeline between adjacent anchors)")); 0754 actionCollection->setDefaultShortcut(toggleAnchor, QKeySequence("Alt+A")); 0755 connect(toggleAnchor, &QAction::triggered, this, &Application::anchorToggle); 0756 actionCollection->addAction(ACT_ANCHOR_TOGGLE, toggleAnchor); 0757 actionManager->addAction(toggleAnchor, UserAction::HasSelection | UserAction::FullScreenOff); 0758 0759 QAction *removeAllAnchors = new QAction(actionCollection); 0760 removeAllAnchors->setText(i18n("Remove All Anchors")); 0761 removeAllAnchors->setStatusTip(i18n("Unanchor show time from the timeline on all anchored lines")); 0762 actionCollection->setDefaultShortcut(removeAllAnchors, QKeySequence("Alt+Shift+A")); 0763 connect(removeAllAnchors, &QAction::triggered, this, &Application::anchorRemoveAll); 0764 actionCollection->addAction(ACT_ANCHOR_REMOVE_ALL, removeAllAnchors); 0765 actionManager->addAction(removeAllAnchors, UserAction::HasSelection | UserAction::FullScreenOff | UserAction::AnchorsSome); 0766 0767 QAction *scriptsManagerAction = new QAction(actionCollection); 0768 scriptsManagerAction->setIcon(QIcon::fromTheme("folder-development")); 0769 scriptsManagerAction->setText(i18nc("@action:inmenu Manage user scripts", "Scripts Manager...")); 0770 scriptsManagerAction->setStatusTip(i18n("Manage user scripts")); 0771 connect(scriptsManagerAction, &QAction::triggered, m_scriptsManager, &ScriptsManager::showDialog); 0772 actionCollection->addAction(ACT_SCRIPTS_MANAGER, scriptsManagerAction); 0773 actionManager->addAction(scriptsManagerAction, UserAction::FullScreenOff); 0774 0775 QAction *waveformZoomInAction = new QAction(actionCollection); 0776 waveformZoomInAction->setIcon(QIcon::fromTheme("zoom-in")); 0777 waveformZoomInAction->setText(i18n("Waveform Zoom In")); 0778 waveformZoomInAction->setStatusTip(i18n("Waveform Zoom In")); 0779 connect(waveformZoomInAction, &QAction::triggered, m_mainWindow->m_waveformWidget, &WaveformWidget::zoomIn); 0780 actionCollection->addAction(ACT_WAVEFORM_ZOOM_IN, waveformZoomInAction); 0781 0782 QAction *waveformZoomOutAction = new QAction(actionCollection); 0783 waveformZoomOutAction->setIcon(QIcon::fromTheme("zoom-out")); 0784 waveformZoomOutAction->setText(i18n("Waveform Zoom Out")); 0785 waveformZoomOutAction->setStatusTip(i18n("Waveform Zoom Out")); 0786 connect(waveformZoomOutAction, &QAction::triggered, m_mainWindow->m_waveformWidget, &WaveformWidget::zoomOut); 0787 actionCollection->addAction(ACT_WAVEFORM_ZOOM_OUT, waveformZoomOutAction); 0788 0789 QAction *waveformAutoScrollAction = new QAction(actionCollection); 0790 waveformAutoScrollAction->setCheckable(true); 0791 waveformAutoScrollAction->setIcon(QIcon::fromTheme(QStringLiteral("current_line_follows_video"))); 0792 waveformAutoScrollAction->setText(i18n("Waveform Auto Scroll")); 0793 waveformAutoScrollAction->setStatusTip(i18n("Waveform display will automatically scroll to video position")); 0794 connect(waveformAutoScrollAction, &QAction::toggled, m_mainWindow->m_waveformWidget, &WaveformWidget::setAutoscroll); 0795 actionCollection->addAction(ACT_WAVEFORM_AUTOSCROLL, waveformAutoScrollAction); 0796 0797 updateActionTexts(); 0798 0799 emit actionsReady(); 0800 }