lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 Chris Cannam. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include "RecentFiles.h" lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: RecentFiles::RecentFiles(QString settingsGroup, size_t maxCount) : lbajardsilogic@0: m_settingsGroup(settingsGroup), lbajardsilogic@0: m_maxCount(maxCount) lbajardsilogic@0: { lbajardsilogic@0: read(); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: RecentFiles::~RecentFiles() lbajardsilogic@0: { lbajardsilogic@0: // nothing lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RecentFiles::read() lbajardsilogic@0: { lbajardsilogic@0: m_names.clear(); lbajardsilogic@0: QSettings settings; lbajardsilogic@0: settings.beginGroup(m_settingsGroup); lbajardsilogic@0: lbajardsilogic@0: for (size_t i = 0; i < 100; ++i) { lbajardsilogic@0: QString key = QString("recent-%1").arg(i); lbajardsilogic@0: QString name = settings.value(key, "").toString(); lbajardsilogic@0: if (name == "") break; lbajardsilogic@0: if (i < m_maxCount) m_names.push_back(name); lbajardsilogic@0: else settings.setValue(key, ""); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: settings.endGroup(); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RecentFiles::write() lbajardsilogic@0: { lbajardsilogic@0: QSettings settings; lbajardsilogic@0: settings.beginGroup(m_settingsGroup); lbajardsilogic@0: lbajardsilogic@0: for (size_t i = 0; i < m_maxCount; ++i) { lbajardsilogic@0: QString key = QString("recent-%1").arg(i); lbajardsilogic@0: QString name = ""; lbajardsilogic@0: if (i < m_names.size()) name = m_names[i]; lbajardsilogic@0: settings.setValue(key, name); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: settings.endGroup(); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RecentFiles::truncateAndWrite() lbajardsilogic@0: { lbajardsilogic@0: while (m_names.size() > m_maxCount) { lbajardsilogic@0: m_names.pop_back(); lbajardsilogic@0: } lbajardsilogic@0: write(); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: std::vector lbajardsilogic@0: RecentFiles::getRecent() const lbajardsilogic@0: { lbajardsilogic@0: std::vector names; lbajardsilogic@0: for (size_t i = 0; i < m_maxCount; ++i) { lbajardsilogic@0: if (i < m_names.size()) { lbajardsilogic@0: names.push_back(m_names[i]); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: return names; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RecentFiles::add(QString name) lbajardsilogic@0: { lbajardsilogic@0: bool have = false; lbajardsilogic@0: for (size_t i = 0; i < m_names.size(); ++i) { lbajardsilogic@0: if (m_names[i] == name) { lbajardsilogic@0: have = true; lbajardsilogic@0: break; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: if (!have) { lbajardsilogic@0: m_names.push_front(name); lbajardsilogic@0: } else { lbajardsilogic@0: std::deque newnames; lbajardsilogic@0: newnames.push_back(name); lbajardsilogic@0: for (size_t i = 0; i < m_names.size(); ++i) { lbajardsilogic@0: if (m_names[i] == name) continue; lbajardsilogic@0: newnames.push_back(m_names[i]); lbajardsilogic@0: } lbajardsilogic@0: m_names = newnames; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: truncateAndWrite(); lbajardsilogic@0: emit recentChanged(); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RecentFiles::addFile(QString name) lbajardsilogic@0: { lbajardsilogic@0: static QRegExp schemeRE("^[a-zA-Z]{2,5}://"); lbajardsilogic@0: if (schemeRE.indexIn(name) == 0) { lbajardsilogic@0: add(name); lbajardsilogic@0: } else { lbajardsilogic@0: add(QFileInfo(name).absoluteFilePath()); lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: