Mercurial > hg > svcore
view base/RecentFiles.cpp @ 297:c022976d18e8
* Merge from sv-match-alignment branch (excluding alignment-specific document).
- add aggregate wave model (not yet complete enough to be added as a true
model in a layer, but there's potential)
- add play solo mode
- add alignment model -- unused in plain SV
- fix two plugin leaks
- add m3u playlist support (opens all files at once, potentially hazardous)
- fix retrieval of pre-encoded URLs
- add ability to resample audio files on import, so as to match rates with
other files previously loaded; add preference for same
- add preliminary support in transform code for range and rate of transform
input
- reorganise preferences dialog, move dark-background option to preferences,
add option for temporary directory location
author | Chris Cannam |
---|---|
date | Fri, 28 Sep 2007 13:56:38 +0000 |
parents | 3b8008d09541 |
children | 6a94bb528e9d |
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ /* Sonic Visualiser An audio file viewer and annotation editor. Centre for Digital Music, Queen Mary, University of London. This file copyright 2006 Chris Cannam. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See the file COPYING included with this distribution for more information. */ #include "RecentFiles.h" #include "Preferences.h" #include <QFileInfo> #include <QSettings> #include <QRegExp> RecentFiles::RecentFiles(QString settingsGroup, size_t maxCount) : m_settingsGroup(settingsGroup), m_maxCount(maxCount) { read(); } RecentFiles::~RecentFiles() { // nothing } void RecentFiles::read() { m_names.clear(); QSettings settings; settings.beginGroup(m_settingsGroup); for (size_t i = 0; i < 100; ++i) { QString key = QString("recent-%1").arg(i); QString name = settings.value(key, "").toString(); if (name == "") break; if (i < m_maxCount) m_names.push_back(name); else settings.setValue(key, ""); } settings.endGroup(); } void RecentFiles::write() { QSettings settings; settings.beginGroup(m_settingsGroup); for (size_t i = 0; i < m_maxCount; ++i) { QString key = QString("recent-%1").arg(i); QString name = ""; if (i < m_names.size()) name = m_names[i]; settings.setValue(key, name); } settings.endGroup(); } void RecentFiles::truncateAndWrite() { while (m_names.size() > m_maxCount) { m_names.pop_back(); } write(); } std::vector<QString> RecentFiles::getRecent() const { std::vector<QString> names; for (size_t i = 0; i < m_maxCount; ++i) { if (i < m_names.size()) { names.push_back(m_names[i]); } } return names; } void RecentFiles::add(QString name) { bool have = false; for (size_t i = 0; i < m_names.size(); ++i) { if (m_names[i] == name) { have = true; break; } } if (!have) { m_names.push_front(name); } else { std::deque<QString> newnames; newnames.push_back(name); for (size_t i = 0; i < m_names.size(); ++i) { if (m_names[i] == name) continue; newnames.push_back(m_names[i]); } m_names = newnames; } truncateAndWrite(); emit recentChanged(); } void RecentFiles::addFile(QString name) { static QRegExp schemeRE("^[a-zA-Z]{2,5}://"); static QRegExp tempRE("[\\/][Tt]e?mp[\\/]"); if (schemeRE.indexIn(name) == 0) { add(name); } else { QString absPath = QFileInfo(name).absoluteFilePath(); if (tempRE.indexIn(absPath) != -1) { Preferences *prefs = Preferences::getInstance(); if (prefs && !prefs->getOmitTempsFromRecentFiles()) { add(absPath); } } else { add(absPath); } } }