41 QCoreApplication* pApp =
nullptr;
42 if ( QCoreApplication::instance() ==
nullptr) {
43 pApp =
new QCoreApplication( argc, argv );
44 pApp->setApplicationVersion(
46 assert( QCoreApplication::instance() == pApp );
49 QCommandLineParser parser;
53 QStringList availableAudioDrivers;
55 availableAudioDrivers <<
61 QCommandLineOption audioDriverOption(
62 QStringList() <<
"d" <<
"driver",
63 QString(
"Use the selected audio driver (%1)" )
64 .arg( availableAudioDrivers.join(
", " ) ),
"Audiodriver");
65 QCommandLineOption playlistFileNameOption(
66 QStringList() <<
"p" <<
67 "playlist",
"Load a playlist (*.h2playlist) at startup",
"File" );
68 QCommandLineOption songFileOption(
69 QStringList() <<
"s" <<
70 "song",
"Load a song (*.h2song) at startup",
"File" );
71 QCommandLineOption kitOption(
72 QStringList() <<
"k" <<
"kit",
"Load a drumkit at startup",
"DrumkitName" );
74 QCommandLineOption installDrumkitOption(
75 QStringList() <<
"i" <<
76 "install",
"Install a drumkit (*.h2drumkit)",
"File");
78 QCommandLineOption verboseOption(
79 QStringList() <<
"V" <<
80 "verbose",
"Level, if present, may be None, Error, Warning, Info, Debug, Constructors, Locks, or 0xHHHH",
"Level" );
81 QCommandLineOption logFileOption(
82 QStringList() <<
"L" <<
"log-file",
"Alternative log file path",
"Path" );
83 QCommandLineOption logTimestampsOption(
84 QStringList() <<
"T" <<
85 "log-timestamps",
"Add timestamps to all log messages" );
86 QCommandLineOption logColorsOption(
87 QStringList() <<
"log-colors",
"Use ANSI colors in log messages" );
88 QCommandLineOption noLogColorsOption(
89 QStringList() <<
"no-log-colors",
90 "Suppress ANSI colors in log messages" );
92 QCommandLineOption systemDataPathOption(
93 QStringList() <<
"P" <<
94 "data",
"Use an alternate system data path",
"Path" );
95 QCommandLineOption userDataPathOption(
96 QStringList() <<
"user-data",
"Use an alternate user data path",
"Path" );
97 QCommandLineOption configFileOption(
98 QStringList() <<
"config",
"Use an alternate config file",
"Path" );
99 QCommandLineOption uiLayoutOption(
100 QStringList() <<
"layout",
"UI layout ('tabbed' or 'single')",
"Layout" );
101#ifdef H2CORE_HAVE_OSC
102 QCommandLineOption oscPortOption(
103 QStringList() <<
"O" <<
104 "osc-port",
"Custom port for OSC connections",
"int" );
106 QCommandLineOption noSplashScreenOption(
107 QStringList() <<
"n" <<
"nosplash",
"Hide splash screen" );
109 QCommandLineOption shotListOption(
110 QStringList() <<
"t" <<
111 "shotlist",
"Shot list of widgets to grab",
"ShotList" );
113 QCommandLineOption noReporterOption(
114 QStringList() <<
"child",
"Child process (no crash reporter)");
116 parser.addHelpOption();
117 parser.addVersionOption();
119 parser.addOption( audioDriverOption );
120 parser.addOption( playlistFileNameOption );
121 parser.addOption( songFileOption );
122 parser.addOption( kitOption );
124 parser.addOption( installDrumkitOption );
126 parser.addOption( verboseOption );
127 parser.addOption( logFileOption );
128 parser.addOption( logTimestampsOption );
129 parser.addOption( logColorsOption );
130 parser.addOption( noLogColorsOption );
132 parser.addOption( systemDataPathOption );
133 parser.addOption( userDataPathOption );
134 parser.addOption( configFileOption );
135 parser.addOption( uiLayoutOption );
136#ifdef H2CORE_HAVE_OSC
137 parser.addOption( oscPortOption );
139 parser.addOption( noSplashScreenOption );
141 parser.addOption( shotListOption );
143 parser.addOption( noReporterOption );
145 parser.addPositionalArgument(
"file",
"Song, playlist or Drumkit file" );
148 parser.process( *( QCoreApplication::instance() ) );
157 QString sVerbosityString = parser.value( verboseOption );
159 if ( parser.isSet( verboseOption ) ) {
160 if ( ! sVerbosityString.isEmpty() ) {
162 sVerbosityString.toLocal8Bit() );
177 if ( parser.isSet( logColorsOption ) ) {
180 else if ( parser.isSet( noLogColorsOption ) ) {
189#ifdef H2CORE_HAVE_OSC
190 QString sOscPort = parser.value( oscPortOption );
191 if ( ! sOscPort.isEmpty() ) {
195 std::cerr <<
"Unable to parse 'osc-port' option. Please provide an integer value"
212 foreach ( sArg, parser.positionalArguments() ) {
224 if ( pApp !=
nullptr ) {