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