1 #pragma once
2 
3 #include "common/common_pch.h"
4 
5 #include <QApplication>
6 #include <QStringList>
7 
8 #include "common/qt.h"
9 #include "mkvtoolnix-gui/gui_cli_parser.h"
10 
11 class QLocalServer;
12 class QThread;
13 
14 namespace mtx::gui {
15 
16 namespace Util {
17 class MediaPlayer;
18 class NetworkAccessManager;
19 }
20 
21 namespace Jobs {
22 class ProgramRunner;
23 }
24 
25 using Iso639Language     = std::pair<QString, QString>;
26 using Iso639LanguageList = std::vector<Iso639Language>;
27 using Region             = std::pair<QString, QString>;
28 using RegionList         = std::vector<Region>;
29 using CharacterSetList   = std::vector<QString>;
30 
31 class AppPrivate;
32 class App : public QApplication {
33   Q_OBJECT
34 
35 protected:
36   MTX_DECLARE_PRIVATE(AppPrivate)
37 
38   std::unique_ptr<AppPrivate> const p_ptr;
39 
40   explicit App(AppPrivate &p);
41 
42 
43 protected:
44 
45   explicit App(AppPrivate &d, QWidget *parent);
46 
47 protected:
48   enum class CliCommand {
49     OpenConfigFiles,
50     AddToMerge,
51     EditChapters,
52     EditHeaders,
53   };
54 
55 public:
56   App(int &argc, char **argv);
57   virtual ~App();
58 
59   void retranslateUi();
60   void initializeLocale(QString const &requestedLocale = QString{});
61 
62   bool parseCommandLineArguments(QStringList const &args);
63   void handleCommandLineArgumentsLocally();
64 
65   bool isOtherInstanceRunning() const;
66   void sendCommandLineArgumentsToRunningInstance();
67   void sendArgumentsToRunningInstance(QStringList const &args);
68   void raiseAndActivateRunningInstance();
69 
70   void run();
71 
72   void disableDarkMode();
73   void enableDarkMode();
74 
75   Util::NetworkAccessManager &networkAccessManager();
76 
77 Q_SIGNALS:
78   void addingFilesToMergeRequested(QStringList const &fileNames);
79   void editingChaptersRequested(QStringList const &fileNames);
80   void editingHeadersRequested(QStringList const &fileNames);
81   void openConfigFilesRequested(QStringList const &fileNames);
82   void runningInfoOnRequested(QStringList const &fileNames);
83   void toolRequested(ToolBase *tool);
84 
85 public Q_SLOTS:
86   void saveSettings() const;
87   void receiveInstanceCommunication();
88   void setupAppearance();
89 
90 protected:
91   void setupInstanceCommunicator();
92   void setupNetworkAccessManager();
93   Util::MediaPlayer &setupMediaPlayer();
94   Jobs::ProgramRunner &setupProgramRunner();
95   void setupColorMode();
96   void setupUiFont();
97 
98 public:
99   static App *instance();
100   static Util::MediaPlayer &mediaPlayer();
101   static Jobs::ProgramRunner &programRunner();
102 
103   static Iso639LanguageList const &iso639Languages();
104   static Iso639LanguageList const &iso639_2Languages();
105   static Iso639LanguageList const &commonIso639Languages();
106   static RegionList const &regions();
107   static RegionList const &commonRegions();
108   static QString const &descriptionForRegion(QString const &code);
109   static CharacterSetList const &characterSets();
110   static CharacterSetList const &commonCharacterSets();
111 
112   static void reinitializeLanguageLists();
113   static void initializeLanguageLists();
114   static void initializeRegions();
115   static void initializeIso639Languages();
116   static void initializeCharacterSets();
117 
118   static bool isInstalled();
119 
120   static QString communicatorSocketName();
121   static QString settingsBaseGroupName();
122 
123   static void fixLockFileHostName(QString const &lockFilePath);
124 };
125 
126 }
127