diff options
Diffstat (limited to 'tests/manual/jumplist/testwidget.cpp')
-rw-r--r-- | tests/manual/jumplist/testwidget.cpp | 90 |
1 files changed, 61 insertions, 29 deletions
diff --git a/tests/manual/jumplist/testwidget.cpp b/tests/manual/jumplist/testwidget.cpp index e6660e4..15982a6 100644 --- a/tests/manual/jumplist/testwidget.cpp +++ b/tests/manual/jumplist/testwidget.cpp @@ -38,34 +38,27 @@ #include <QStyle> #include <QFile> #include <QFileDialog> +#include <QDesktopServices> #include <QMessageBox> +#include <QProcess> +#include <QStatusBar> +#include <QUrl> #include <QWinJumpList> #include <QWinJumpListItem> #include <QWinJumpListCategory> #include <QDebug> TestWidget::TestWidget(QWidget *parent) : - QWidget(parent), + QMainWindow(parent), ui(new Ui::TestWidget) { ui->setupUi(this); - if (QCoreApplication::arguments().contains("-text")) - ui->text->setPlainText("Hello, world!"); - if (!QCoreApplication::arguments().contains("-fullscreen")) - ui->btnClose->hide(); - - for (int i = 1; i < QCoreApplication::arguments().size(); i++) { - const QString arg = QCoreApplication::arguments().at(i); - if (!arg.isEmpty() && arg.at(0) != '-' && QFile(arg).exists()) { - showFile(arg); - break; - } - } - - connect(ui->btnUpdate, &QAbstractButton::clicked, this, &TestWidget::updateJumpList); - connect(ui->btnOpenFile, &QAbstractButton::clicked, this, &TestWidget::openFile); - connect(ui->btnClose, &QAbstractButton::clicked, QCoreApplication::quit); + connect(ui->actionUpdate, &QAction::triggered, this, &TestWidget::updateJumpList); + connect(ui->actionOpen, &QAction::triggered, this, &TestWidget::openFile); + connect(ui->actionExit, &QAction::triggered, QCoreApplication::quit); + connect(ui->actionShow_in_Explorer, &QAction::triggered, this, &TestWidget::showInExplorer); + connect(ui->actionRun_JumpListView, &QAction::triggered, this, &TestWidget::runJumpListView); } TestWidget::~TestWidget() @@ -73,6 +66,12 @@ TestWidget::~TestWidget() delete ui; } +QStringList TestWidget::supportedMimeTypes() +{ + return QStringList() << "text/x-c++src" << "text/x-csrc" << "text/x-chdr" + << "text/x-c++hdr" << "text/x-qml" << "text/plain"; +} + void TestWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); @@ -88,40 +87,73 @@ void TestWidget::changeEvent(QEvent *e) void TestWidget::showFile(const QString &path) { QFile file(path); - if (file.open(QIODevice::ReadOnly|QIODevice::Text)) - ui->text->setPlainText(QString::fromUtf8(file.readAll())); - else - QMessageBox::warning(this, "Error", "Failed to open file"); + if (!file.open(QIODevice::ReadOnly|QIODevice::Text)) { + const QString error = "Failed to open file " + QDir::toNativeSeparators(path) + + ": " + file.errorString(); + QMessageBox::warning(this, "Error", error); + return; + } + setText(QString::fromUtf8(file.readAll())); +} + +void TestWidget::setText(const QString &text) +{ + ui->text->setPlainText(text); } void TestWidget::updateJumpList() { QWinJumpList jumplist; + if (!m_id.isEmpty()) + jumplist.setIdentifier(m_id); + const QString applicationBinary = QDir::toNativeSeparators(QCoreApplication::applicationFilePath()); jumplist.recent()->setVisible(ui->cbShowRecent->isChecked()); jumplist.frequent()->setVisible(ui->cbShowFrequent->isChecked()); if (ui->cbRunFullscreen->isChecked()) { QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Link); item->setTitle(ui->cbRunFullscreen->text()); - item->setFilePath(QDir::toNativeSeparators(QCoreApplication::applicationFilePath())); + item->setFilePath(applicationBinary); item->setArguments(QStringList("-fullscreen")); item->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton)); jumplist.tasks()->addItem(item); } if (ui->cbRunFusion->isChecked()) { - jumplist.tasks()->addLink(style()->standardIcon(QStyle::SP_DesktopIcon), ui->cbRunFusion->text(), QDir::toNativeSeparators(QCoreApplication::applicationFilePath()), (QStringList() << "-style" << "fusion")); + jumplist.tasks()->addLink(style()->standardIcon(QStyle::SP_DesktopIcon), + ui->cbRunFusion->text(), + applicationBinary, + (QStringList() << "-style" << "fusion")); } if (ui->cbRunText->isChecked()) { jumplist.tasks()->addSeparator(); - jumplist.tasks()->addLink(ui->cbRunText->text(), QDir::toNativeSeparators(QCoreApplication::applicationFilePath()), QStringList("-text")); + jumplist.tasks()->addLink(ui->cbRunText->text(), + applicationBinary, + QStringList("-text")); } jumplist.tasks()->setVisible(!jumplist.tasks()->isEmpty()); } void TestWidget::openFile() { - QString filePath = QFileDialog::getOpenFileName(this, "Open a text file", QString(), "Text files (*.txt)"); - if (filePath.isEmpty()) - return; - else - showFile(filePath); + QFileDialog fileDialog(this, "Open a Text File"); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setMimeTypeFilters(TestWidget::supportedMimeTypes()); + // Note: The native file dialog creates the frequent/recent entries. + if (!ui->actionUse_Native_File_Dialog->isChecked()) + fileDialog.setOption(QFileDialog::DontUseNativeDialog); + if (fileDialog.exec() == QDialog::Accepted) + showFile(fileDialog.selectedFiles().first()); +} + +void TestWidget::showInExplorer() +{ + const QString path = QFile::decodeName(qgetenv("APPDATA")) + + "/Microsoft/Windows/Recent/Automaticdestinations"; + QDesktopServices::openUrl(QUrl::fromLocalFile(path)); +} + +void TestWidget::runJumpListView() +{ + const char binary[] = "JumpListsView"; + if (!QProcess::startDetached(binary)) + statusBar()->showMessage(QLatin1String("Unable to run ") + binary); } |