+++ /dev/null
-package tim.prune.data;
-
-/**
- * Class to hold and manage the list of recently used files
- */
-public class RecentFileList
-{
- private RecentFile[] _files = null;
- private static final int DEFAULT_SIZE = 6;
- private static final int MAX_SIZE = 20;
-
- /**
- * Default constructor
- */
- public RecentFileList()
- {
- _files = new RecentFile[DEFAULT_SIZE];
- }
-
- /**
- * Constructor
- * @param inString String from config
- */
- public RecentFileList(String inString)
- {
- _files = null;
- int pos = 0;
- if (inString != null && inString.length() > 0)
- {
- for (String s : inString.split(";"))
- {
- if (pos == 0)
- {
- int listSize = DEFAULT_SIZE;
- try
- {
- listSize = Integer.parseInt(s);
- if (listSize < 1 || listSize > MAX_SIZE) {
- listSize = DEFAULT_SIZE;
- }
- }
- catch (NumberFormatException nfe) {}
- _files = new RecentFile[listSize];
- pos++;
- }
- else if (pos <= _files.length)
- {
- RecentFile rf = new RecentFile(s);
- if (rf.isValid())
- {
- _files[pos-1] = rf;
- pos++;
- }
- }
- }
- }
- if (_files == null) {
- _files = new RecentFile[DEFAULT_SIZE];
- }
- }
-
- /**
- * @return size of list (may not have this many entries yet)
- */
- public int getSize()
- {
- if (_files == null) return 0;
- return _files.length;
- }
-
- /**
- * @return the number of valid entries in the list
- */
- public int getNumEntries()
- {
- if (_files == null) return 0;
- int numFound = 0;
- for (RecentFile rf : _files) {
- if (rf != null && rf.isValid())
- numFound++;
- }
- return numFound;
- }
-
- /**
- * @return string to save in config
- */
- public String getConfigString()
- {
- StringBuilder builder = new StringBuilder(100);
- int size = getSize();
- builder.append("" + size);
- for (RecentFile f : _files)
- {
- builder.append(';');
- if (f != null) builder.append(f.getConfigString());
- }
- return builder.toString();
- }
-
- /**
- * Add the given file to the top of the list
- * @param inRF file to add
- */
- public void addFile(RecentFile inRF)
- {
- // Build a new array with the latest file at the top
- RecentFile[] files = new RecentFile[_files.length];
- int rfIndex = 0;
- if (inRF != null && inRF.isValid())
- {
- files[rfIndex] = inRF;
- rfIndex++;
- }
- // Loop, copying the other files
- for (RecentFile rf : _files)
- {
- if (rf != null && rf.isValid() && (inRF==null || !rf.isSameFile(inRF)))
- {
- files[rfIndex] = rf;
- rfIndex++;
- if (rfIndex >= files.length) break;
- }
- }
- _files = files;
- }
-
- /**
- * Verify all the entries and remove the invalid ones
- */
- public void verifyAll() {
- addFile(null);
- }
-
- /**
- * Get the RecentFile object at the given index
- * @param inIndex index, starting at 0
- * @return RecentFile object or null if out of range
- */
- public RecentFile getFile(int inIndex)
- {
- if (inIndex < 0 || inIndex >= _files.length) return null;
- return _files[inIndex];
- }
-
- /**
- * Resize the list to the new size
- * @param inNewSize new size of list
- */
- public void resizeList(int inNewSize)
- {
- // don't do anything if size doesn't make sense
- if (inNewSize > 0 && inNewSize <= MAX_SIZE)
- {
- RecentFile[] files = new RecentFile[inNewSize];
- int numToCopy = _files.length;
- if (inNewSize < numToCopy) {
- numToCopy = inNewSize;
- }
- System.arraycopy(_files, 0, files, 0, numToCopy);
- _files = files;
- }
- }
-}