From 020cc303b46b4dc96c33d4e89bff1d6c2f125d87 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 24 May 2016 14:27:27 +0200 Subject: Polish the player example. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Port it to use URLs and mime types. - Introduce QCommandLineParser. - Resize according to screen size. - Add some bells and whistles, set window file paths, always display duration and file name, handle drop. Change-Id: I75aa101d32cfde0c0c75a0686a50c2d7d5dce827 Reviewed-by: Topi Reiniƶ Reviewed-by: Joerg Bornemann --- examples/winextras/musicplayer/main.cpp | 71 +++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 21 deletions(-) (limited to 'examples/winextras/musicplayer/main.cpp') diff --git a/examples/winextras/musicplayer/main.cpp b/examples/winextras/musicplayer/main.cpp index 5cace0d..0502015 100644 --- a/examples/winextras/musicplayer/main.cpp +++ b/examples/winextras/musicplayer/main.cpp @@ -41,50 +41,79 @@ #include "musicplayer.h" #include +#include +#include +#include #include +#include #include #include #include +#include //! [0] -static void associateFileTypes(const QStringList &fileTypes) +static bool associateFileTypes() { QString displayName = QGuiApplication::applicationDisplayName(); QString filePath = QCoreApplication::applicationFilePath(); QString fileName = QFileInfo(filePath).fileName(); - QSettings settings("HKEY_CURRENT_USER\\Software\\Classes\\Applications\\" + fileName, QSettings::NativeFormat); - settings.setValue("FriendlyAppName", displayName); + const QString key = QStringLiteral("HKEY_CURRENT_USER\\Software\\Classes\\Applications\\") + fileName; + QSettings settings(key, QSettings::NativeFormat); + if (settings.status() != QSettings::NoError) { + qWarning() << "Cannot access registry key" << key; + return false; + } + settings.setValue(QStringLiteral("FriendlyAppName"), displayName); - settings.beginGroup("SupportedTypes"); - foreach (const QString& fileType, fileTypes) - settings.setValue(fileType, QString()); + settings.beginGroup(QStringLiteral("SupportedTypes")); + QMimeDatabase mimeDatabase; + foreach (const QString &fileType, MusicPlayer::supportedMimeTypes()) { + foreach (QString suffix, mimeDatabase.mimeTypeForName(fileType).suffixes()) { + suffix.prepend('.'); + settings.setValue(suffix, QString()); + } + } settings.endGroup(); - settings.beginGroup("shell"); - settings.beginGroup("open"); - settings.setValue("FriendlyAppName", displayName); - settings.beginGroup("Command"); - settings.setValue(".", QChar('"') + QDir::toNativeSeparators(filePath) + QString("\" \"%1\"")); + settings.beginGroup(QStringLiteral("shell")); + settings.beginGroup(QStringLiteral("open")); + settings.setValue(QStringLiteral("FriendlyAppName"), displayName); + settings.beginGroup(QStringLiteral("Command")); + settings.setValue(QStringLiteral("."), + QLatin1Char('"') + QDir::toNativeSeparators(filePath) + QStringLiteral("\" \"%1\"")); + + return true; } //! [0] int main(int argc, char *argv[]) { QApplication app(argc, argv); - app.setApplicationName("MusicPlayer"); - app.setOrganizationName("QtWinExtras"); - app.setOrganizationDomain("qt-project.org"); - app.setApplicationDisplayName("QtWinExtras Music Player"); - app.setWindowIcon(QIcon(":/logo.png")); + QCoreApplication::setApplicationName(QStringLiteral("MusicPlayer")); + QCoreApplication::setApplicationVersion( QLatin1String(QT_VERSION_STR)); + QCoreApplication::setOrganizationName(QStringLiteral("QtWinExtras")); + QCoreApplication::setOrganizationDomain("qt-project.org"); + QGuiApplication::setApplicationDisplayName(QStringLiteral("QtWinExtras Music Player")); + QApplication::setWindowIcon(QIcon(QStringLiteral(":/logo.png"))); + + if (!associateFileTypes()) + return -1; - associateFileTypes(QStringList(".mp3")); + QCommandLineParser parser; + parser.setApplicationDescription(QGuiApplication::applicationDisplayName()); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument(QStringLiteral("url"), MusicPlayer::tr("The URL to open.")); + parser.process(app); MusicPlayer player; - const QStringList arguments = QCoreApplication::arguments(); - if (arguments.size() > 1) - player.playFile(arguments.at(1)); - player.resize(300, 60); + + if (!parser.positionalArguments().isEmpty()) + player.playUrl(QUrl::fromUserInput(parser.positionalArguments().constFirst(), QDir::currentPath(), QUrl::AssumeLocalFile)); + + const QRect availableGeometry = QApplication::desktop()->availableGeometry(&player); + player.resize(availableGeometry.width() / 6, availableGeometry.height() / 17); player.show(); return app.exec(); -- cgit v1.2.3