1 #include "common/common_pch.h"
2
3 #include <QAction>
4 #include <QMenu>
5
6 #include <matroska/KaxSemantic.h>
7
8 #include "common/qt.h"
9 #include "mkvtoolnix-gui/main_window/main_window.h"
10 #include "mkvtoolnix-gui/main_window/preferences_dialog.h"
11 #include "mkvtoolnix-gui/util/modify_tracks_submenu.h"
12 #include "mkvtoolnix-gui/util/settings.h"
13
14 namespace mtx::gui::Util {
15
16 void
setupTrack(QMenu & subMenu)17 ModifyTracksSubmenu::setupTrack(QMenu &subMenu) {
18 m_toggleTrackEnabledFlag = new QAction{&subMenu};
19 m_toggleDefaultTrackFlag = new QAction{&subMenu};
20 m_toggleForcedDisplayFlag = new QAction{&subMenu};
21 m_toggleOriginalFlag = new QAction{&subMenu};
22 m_toggleCommentaryFlag = new QAction{&subMenu};
23 m_toggleHearingImpairedFlag = new QAction{&subMenu};
24 m_toggleVisualImpairedFlag = new QAction{&subMenu};
25 m_toggleTextDescriptionsFlag = new QAction{&subMenu};
26
27 m_toggleTrackEnabledFlag ->setShortcut(Q("Ctrl+Alt+F, E"));
28 m_toggleDefaultTrackFlag ->setShortcut(Q("Ctrl+Alt+F, D"));
29 m_toggleForcedDisplayFlag ->setShortcut(Q("Ctrl+Alt+F, F"));
30 m_toggleOriginalFlag ->setShortcut(Q("Ctrl+Alt+F, O"));
31 m_toggleCommentaryFlag ->setShortcut(Q("Ctrl+Alt+F, C"));
32 m_toggleHearingImpairedFlag ->setShortcut(Q("Ctrl+Alt+F, H"));
33 m_toggleVisualImpairedFlag ->setShortcut(Q("Ctrl+Alt+F, V"));
34 m_toggleTextDescriptionsFlag->setShortcut(Q("Ctrl+Alt+F, T"));
35
36 m_toggleTrackEnabledFlag ->setData(libmatroska::KaxTrackFlagEnabled::ClassInfos.GlobalId.GetValue());
37 m_toggleDefaultTrackFlag ->setData(libmatroska::KaxTrackFlagDefault::ClassInfos.GlobalId.GetValue());
38 m_toggleForcedDisplayFlag ->setData(libmatroska::KaxTrackFlagForced::ClassInfos.GlobalId.GetValue());
39 m_toggleCommentaryFlag ->setData(libmatroska::KaxFlagCommentary::ClassInfos.GlobalId.GetValue());
40 m_toggleOriginalFlag ->setData(libmatroska::KaxFlagOriginal::ClassInfos.GlobalId.GetValue());
41 m_toggleHearingImpairedFlag ->setData(libmatroska::KaxFlagHearingImpaired::ClassInfos.GlobalId.GetValue());
42 m_toggleVisualImpairedFlag ->setData(libmatroska::KaxFlagVisualImpaired::ClassInfos.GlobalId.GetValue());
43 m_toggleTextDescriptionsFlag->setData(libmatroska::KaxFlagTextDescriptions::ClassInfos.GlobalId.GetValue());
44
45 subMenu.addAction(m_toggleTrackEnabledFlag);
46 subMenu.addAction(m_toggleDefaultTrackFlag);
47 subMenu.addAction(m_toggleForcedDisplayFlag);
48 subMenu.addAction(m_toggleOriginalFlag);
49 subMenu.addAction(m_toggleCommentaryFlag);
50 subMenu.addAction(m_toggleHearingImpairedFlag);
51 subMenu.addAction(m_toggleVisualImpairedFlag);
52 subMenu.addAction(m_toggleTextDescriptionsFlag);
53 }
54
55 void
setupLanguage(QMenu & subMenu)56 ModifyTracksSubmenu::setupLanguage(QMenu &subMenu) {
57 subMenu.clear();
58
59 auto idx = 0;
60
61 for (auto const &formattedLanguage : Util::Settings::get().m_languageShortcuts) {
62 auto language = mtx::bcp47::language_c::parse(to_utf8(formattedLanguage));
63 if (!language.is_valid())
64 continue;
65
66 ++idx;
67
68 auto action = new QAction{&subMenu};
69 action->setData(formattedLanguage);
70 action->setText(Q(language.format_long()));
71
72 if (idx <= 10)
73 action->setShortcut(Q("Ctrl+Alt+A, %1").arg(idx % 10));
74
75 subMenu.addAction(action);
76
77 connect(action, &QAction::triggered, this, &ModifyTracksSubmenu::languageChangeTriggered);
78 }
79
80 if (idx)
81 subMenu.addSeparator();
82
83 m_configureLanguages = new QAction{&subMenu};
84 subMenu.addAction(m_configureLanguages);
85
86 connect(m_configureLanguages, &QAction::triggered, this, []() { MainWindow::get()->editPreferencesAndShowPage(PreferencesDialog::Page::LanguagesShortcuts); });
87
88 retranslateUi();
89 }
90
91 void
retranslateUi()92 ModifyTracksSubmenu::retranslateUi() {
93 if (m_configureLanguages)
94 m_configureLanguages->setText(QY("&Configure available languages"));
95
96 if (!m_toggleTrackEnabledFlag)
97 return;
98
99 m_toggleTrackEnabledFlag ->setText(QY("Toggle \"track &enabled\" flag"));
100 m_toggleDefaultTrackFlag ->setText(QY("Toggle \"&default track\" flag"));
101 m_toggleForcedDisplayFlag ->setText(QY("Toggle \"&forced display\" flag"));
102 m_toggleOriginalFlag ->setText(QY("Toggle \"&original\" flag"));
103 m_toggleCommentaryFlag ->setText(QY("Toggle \"&commentary\" flag"));
104 m_toggleHearingImpairedFlag ->setText(QY("Toggle \"&hearing impaired\" flag"));
105 m_toggleVisualImpairedFlag ->setText(QY("Toggle \"&visual impaired\" flag"));
106 m_toggleTextDescriptionsFlag->setText(QY("Toggle \"&text descriptions\" flag"));
107 }
108
109 void
languageChangeTriggered()110 ModifyTracksSubmenu::languageChangeTriggered() {
111 auto action = dynamic_cast<QAction *>(sender());
112 if (!action)
113 return;
114
115 auto language = action->data().toString();
116 if (!language.isEmpty())
117 Q_EMIT languageChangeRequested(language);
118 }
119
120 }
121