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 ®ions(); 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