Mercurial > hg > sonic-visualiser
diff main/main.cpp @ 2232:76b1c50f1f6d osc-script
Update command-line parsing; work toward running OSC script in batch
author | Chris Cannam |
---|---|
date | Mon, 25 Mar 2019 15:53:03 +0000 |
parents | 0b15f3b16776 |
children | f6fb577f3809 |
line wrap: on
line diff
--- a/main/main.cpp Fri Mar 22 17:49:36 2019 +0000 +++ b/main/main.cpp Mon Mar 25 15:53:03 2019 +0000 @@ -42,6 +42,7 @@ #include <QTimer> #include <QPainter> #include <QFileOpenEvent> +#include <QCommandLineParser> #include <iostream> #include <signal.h> @@ -90,6 +91,8 @@ \section model Data sources: the Model hierarchy +***!!! todo: update this + A Model is something containing, or knowing how to obtain, data. For example, WaveFileModel is a model that knows how to get data @@ -238,12 +241,6 @@ svSystemSpecificInitialisation(); -#ifdef Q_WS_X11 -#if QT_VERSION >= 0x040500 -// QApplication::setGraphicsSystem("raster"); -#endif -#endif - #ifdef Q_OS_MAC if (QSysInfo::MacintoshVersion > QSysInfo::MV_10_8) { // Fix for OS/X 10.9 font problem @@ -253,7 +250,48 @@ SVApplication application(argc, argv); + QApplication::setOrganizationName("sonic-visualiser"); + QApplication::setOrganizationDomain("sonicvisualiser.org"); + QApplication::setApplicationName(QApplication::tr("Sonic Visualiser")); + QApplication::setApplicationVersion(SV_VERSION); + + //!!! todo hand-update translations + QCommandLineParser parser; + parser.setApplicationDescription(QApplication::tr("Sonic Visualiser is a program for viewing and exploring audio data\nfor semantic music analysis and annotation.")); + parser.addHelpOption(); + parser.addVersionOption(); + + parser.addOptions({ + { "no-audio", QApplication::tr + ("Do not attempt to open an audio output device.") }, + { "no-osc", QApplication::tr + ("Do not provide an Open Sound Control port for remote control.") }, + { "osc-script", QApplication::tr + ("Batch run the OSC script found in the given file. Scripts consist of /command arg1 arg2 ... OSC control lines, optionally interleaved with numbers to specify pauses in seconds."), + "osc.txt" } + }); + + parser.addPositionalArgument + ("[<file> ...]", QApplication::tr("One or more Sonic Visualiser (.sv) and audio files may be provided.")); + QStringList args = application.arguments(); + if (!parser.parse(args)) { + if (parser.unknownOptionNames().contains("?")) { + // QCommandLineParser only understands -? for help on Windows, + // but we historically accepted it everywhere - provide this + // backward compatibility + parser.showHelp(); + } + } + + parser.process(args); + + args = parser.positionalArguments(); + + bool audioOutput = true; + bool oscSupport = true; + + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); @@ -263,24 +301,6 @@ signal(SIGQUIT, signalHandler); #endif - bool audioOutput = true; - bool oscSupport = true; - - if (args.contains("--help") || args.contains("-h") || args.contains("-?")) { - cerr << QApplication::tr( - "\nSonic Visualiser is a program for viewing and exploring audio data\nfor semantic music analysis and annotation.\n\nUsage:\n\n %1 [--no-audio] [--no-osc] [<file> ...]\n\n --no-audio: Do not attempt to open an audio output device\n --no-osc: Do not provide an Open Sound Control port for remote control\n <file>: One or more Sonic Visualiser (.sv) and audio files may be provided.\n").arg(argv[0]) << endl; - exit(2); - } - - if (args.contains("--no-audio")) audioOutput = false; - if (args.contains("--no-osc")) oscSupport = false; - - QApplication::setOrganizationName("sonic-visualiser"); - QApplication::setOrganizationDomain("sonicvisualiser.org"); - QApplication::setApplicationName(QApplication::tr("Sonic Visualiser")); - - QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); - SVSplash *splash = nullptr; QSettings settings; @@ -411,7 +431,11 @@ for (QStringList::iterator i = args.begin(); i != args.end(); ++i) { - if (i == args.begin()) continue; + // Note QCommandLineParser has now pulled out argv[0] and all + // the options, so in theory everything here from the very + // first arg should be relevant. But let's reject names + // starting with "-" just in case. + if (i->startsWith('-')) continue; QString path = *i; @@ -419,7 +443,8 @@ application.handleFilepathArgument(path, splash); } - for (QStringList::iterator i = application.m_filepathQueue.begin(); i != application.m_filepathQueue.end(); ++i) { + for (QStringList::iterator i = application.m_filepathQueue.begin(); + i != application.m_filepathQueue.end(); ++i) { QString path = *i; application.handleFilepathArgument(path, splash); } @@ -439,6 +464,11 @@ settings.endGroup(); #endif + QString scriptFile = parser.value("osc-script"); + if (scriptFile != "") { + gui->cueOSCScript(scriptFile); + } + int rv = application.exec(); gui->hide();