/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2013 - Raw Material Software Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ RecentlyOpenedFilesList::RecentlyOpenedFilesList() : maxNumberOfItems (10) { } RecentlyOpenedFilesList::~RecentlyOpenedFilesList() { } //============================================================================== void RecentlyOpenedFilesList::setMaxNumberOfItems (const int newMaxNumber) { maxNumberOfItems = jmax (1, newMaxNumber); files.removeRange (maxNumberOfItems, getNumFiles()); } int RecentlyOpenedFilesList::getNumFiles() const { return files.size(); } File RecentlyOpenedFilesList::getFile (const int index) const { return File (files [index]); } void RecentlyOpenedFilesList::clear() { files.clear(); } void RecentlyOpenedFilesList::addFile (const File& file) { removeFile (file); files.insert (0, file.getFullPathName()); setMaxNumberOfItems (maxNumberOfItems); } void RecentlyOpenedFilesList::removeFile (const File& file) { files.removeString (file.getFullPathName()); } void RecentlyOpenedFilesList::removeNonExistentFiles() { for (int i = getNumFiles(); --i >= 0;) if (! getFile(i).exists()) files.remove (i); } //============================================================================== int RecentlyOpenedFilesList::createPopupMenuItems (PopupMenu& menuToAddTo, const int baseItemId, const bool showFullPaths, const bool dontAddNonExistentFiles, const File** filesToAvoid) { int num = 0; for (int i = 0; i < getNumFiles(); ++i) { const File f (getFile(i)); if ((! dontAddNonExistentFiles) || f.exists()) { bool needsAvoiding = false; if (filesToAvoid != nullptr) { for (const File** avoid = filesToAvoid; *avoid != nullptr; ++avoid) { if (f == **avoid) { needsAvoiding = true; break; } } } if (! needsAvoiding) { menuToAddTo.addItem (baseItemId + i, showFullPaths ? f.getFullPathName() : f.getFileName()); ++num; } } } return num; } //============================================================================== String RecentlyOpenedFilesList::toString() const { return files.joinIntoString ("\n"); } void RecentlyOpenedFilesList::restoreFromString (const String& stringifiedVersion) { clear(); files.addLines (stringifiedVersion); setMaxNumberOfItems (maxNumberOfItems); } //============================================================================== void RecentlyOpenedFilesList::registerRecentFileNatively (const File& file) { #if JUCE_MAC JUCE_AUTORELEASEPOOL { [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL: [NSURL fileURLWithPath: juceStringToNS (file.getFullPathName())]]; } #else (void) file; #endif }