>From 4ec89d0243a9a403535d57e8afba0b29d10cb3f5 Mon Sep 17 00:00:00 2001 From: Daniel Schaal Date: Sat, 7 Jan 2012 17:34:32 +0100 Subject: [PATCH] GUI: When opening multiple files add only one entry to recent file list. --- src/player_qt.cpp | 36 +++++++++++++++++++----------------- src/player_qt.h | 4 +--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/player_qt.cpp b/src/player_qt.cpp index 206635f..8c5fe13 100644 --- a/src/player_qt.cpp +++ b/src/player_qt.cpp @@ -2266,20 +2266,21 @@ void main_window::open_recent_file() { QAction *action = qobject_cast(sender()); if (action) - open(action->data().toString()); + open(action->data().toStringList()); } void main_window::update_recent_file_actions() { - QStringList files = _settings->value("Session/recent-files").toStringList(); + QVariantList files = _settings->value("Session/recent-files").toList(); - int num_recent_files = qMin(files.size(), (int)_max_recent_files); + int num_recent_files = qMin(files.size(), _max_recent_files); bool have_recent_files = num_recent_files > 0; for (int i = 0; i < num_recent_files; ++i) { - QString text = QString("&%1 %2").arg(i + 1).arg(stripped_name(files[i])); + QStringList recentFilesEntry = files[i].toStringList(); + QString text = QString("&%1 %2").arg(i + 1).arg(stripped_name(recentFilesEntry)); _recent_file_actions[i]->setText(text); - _recent_file_actions[i]->setData(files[i]); + _recent_file_actions[i]->setData(recentFilesEntry); _recent_file_actions[i]->setVisible(true); } for (int j = num_recent_files; j < _max_recent_files; ++j) @@ -2297,9 +2298,16 @@ void main_window::clear_recent_files() update_recent_file_actions(); } -QString main_window::stripped_name(const QString& filename) +QString main_window::stripped_name(const QStringList & filenames) { - return QFileInfo(filename).fileName(); + QStringList stripped; + foreach(QString file, filenames) { + stripped.append(QFileInfo(file).fileName()); + } + QString strippedNames = stripped.join(", "); + if(strippedNames.length() >= 50) + strippedNames = strippedNames.left(47).append("..."); + return strippedNames; } QString main_window::current_file_hash() @@ -2625,11 +2633,6 @@ void main_window::playloop_step() } } -void main_window::open(QString url) -{ - open(QStringList(url)); -} - void main_window::open(QStringList filenames, const device_request &dev_request) { _player->force_stop(); @@ -2697,12 +2700,11 @@ void main_window::file_open() _settings->setValue("Session/file-open-dir", QFileInfo(file_names[0]).path()); open(file_names); - QStringList files = _settings->value("Session/recent-files").toStringList(); + QVariantList files = _settings->value("Session/recent-files").toList(); + + files.removeAll(file_names); + files.prepend(file_names); - foreach(QString file, file_names) { - files.removeAll(file); - files.prepend(file); - } while (files.size() > _max_recent_files) files.removeLast(); _settings->setValue("Session/recent-files", files); diff --git a/src/player_qt.h b/src/player_qt.h index 223784b..3f90959 100644 --- a/src/player_qt.h +++ b/src/player_qt.h @@ -343,7 +343,6 @@ private: bool _stop_request; int _max_recent_files; - QStringList _recent_files; QList _recent_file_actions; QAction *_recent_files_separator; QAction *_clear_recent_separator; @@ -352,9 +351,8 @@ private: QString current_file_hash(); bool open_player(); void open(QStringList urls, const device_request &dev_request = device_request()); - void open(QString url); void update_recent_file_actions(); - QString stripped_name(const QString &filename); + QString stripped_name(const QStringList & filenames); private slots: void move_event(); -- 1.7.8.2