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