#include "RecentFilesManager.h" RecentFilesManager::RecentFilesManager(QObject* parent, QMenu* recentFilesMenu): QObject(parent), recentFilesMenu(recentFilesMenu) { } void RecentFilesManager::createRecentFileActs(const QStringList& recentFiles) { if(recentFiles.isEmpty()) { recentFilesMenu->setEnabled(false); return; } int recentFilesNum = recentFiles.size(); if(recentFilesNum > MaxRecentFiles) recentFilesNum = MaxRecentFiles; for(int i = 0; i < recentFilesNum; i++) recentFilesMenu->addAction(createRecentFileAction(recentFiles[i])); updateActionTexts(); } QAction* RecentFilesManager::createRecentFileAction(const QString& filePath) { QAction* action = new QAction(this); action->setData(QDir::fromNativeSeparators(filePath)); connect(action, SIGNAL(triggered()), this, SLOT(triggerRecentFile())); return action; } void RecentFilesManager::updateActionTexts() { for(int i = 0; i < recentFilesMenu->actions().size(); i++) { QAction* action = recentFilesMenu->actions()[i]; QString filePath = getActionFile(action); QString fileName = getShortFileName(filePath); QString fileDir = QDir::toNativeSeparators(getShortDirPath(filePath)); QString text = QString("&%1 %2 (%3)").arg((i + 1) % 10) .arg(fileName).arg(fileDir); action->setText(text); } } QString RecentFilesManager::getActionFile(QAction* action) { return action->data().toString(); } QString RecentFilesManager::getLastUsedFilePath() const { if(recentFilesMenu->actions().isEmpty()) return QString(); return getActionFile(recentFilesMenu->actions().first()); } QString RecentFilesManager::getShortDirPath(const QString& filePath) const { QString path = QFileInfo(filePath).absolutePath(); QFontMetrics metrics(recentFilesMenu->font()); return metrics.elidedText(path, Qt::ElideMiddle, MaxPathLength); } void RecentFilesManager::triggerRecentFile() { QAction *action = qobject_cast(sender()); if(action) emit recentFileTriggered(getActionFile(action)); } void RecentFilesManager::addFile( const QString& filePath) { addRecentFileAction(filePath); updateActionTexts(); emit addedFile(); } void RecentFilesManager::addRecentFileAction(const QString& filePath) { recentFilesMenu->setEnabled(true); foreach(QAction* action, recentFilesMenu->actions()) if(action->data() == filePath) recentFilesMenu->removeAction(action); QAction* newAction = createRecentFileAction(filePath); if(!recentFilesMenu->actions().isEmpty()) recentFilesMenu->insertAction(recentFilesMenu->actions().first(), newAction); else recentFilesMenu->addAction(newAction); if(recentFilesMenu->actions().size() > MaxRecentFiles) recentFilesMenu->removeAction(recentFilesMenu->actions().last()); } QStringList RecentFilesManager::getFiles() const { QStringList list; foreach(QAction* action, recentFilesMenu->actions()) list << getActionFile(action); return list; }