From: <cpm...@us...> - 2011-11-15 23:49:02
|
Revision: 15539 http://pcgen.svn.sourceforge.net/pcgen/?rev=15539&view=rev Author: cpmeister Date: 2011-11-15 23:48:55 +0000 (Tue, 15 Nov 2011) Log Message: ----------- Recent Characters are now listed properly Modified Paths: -------------- sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java Modified: sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java 2011-11-15 13:42:57 UTC (rev 15538) +++ sandbox/uisync/code/src/java/pcgen/system/CharacterManager.java 2011-11-15 23:48:55 UTC (rev 15539) @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; @@ -40,7 +41,7 @@ import pcgen.core.facade.PartyFacade; import pcgen.core.facade.SourceSelectionFacade; import pcgen.core.facade.UIDelegate; -import pcgen.core.facade.util.DefaultListFacade; +import pcgen.core.facade.util.AbstractListFacade; import pcgen.core.facade.util.ListFacade; import pcgen.gui2.facade.CharacterFacadeImpl; import pcgen.gui2.facade.PartyFacadeImpl; @@ -66,23 +67,13 @@ public class CharacterManager { - private static final int MAX_RECENT_CHARACTERS = 5; private static final PartyFacadeImpl characters; - private static final DefaultListFacade<File> recentCharacters; + private static final RecentFileList recentCharacters; static { characters = new PartyFacadeImpl(); - recentCharacters = new DefaultListFacade<File>(); - String[] recentFiles = PCGenSettings.getInstance().getStringArray(PCGenSettings.RECENT_CHARACTERS); - if (!ArrayUtils.isEmpty(recentFiles)) - { - URI userdir = new File(ConfigurationSettings.getUserDir()).toURI(); - for (int i = 0; i < recentFiles.length; i++) - { - recentCharacters.addElement(new File(userdir.resolve(recentFiles[i]))); - } - } + recentCharacters = new RecentFileList(PCGenSettings.RECENT_CHARACTERS); } private CharacterManager() @@ -272,7 +263,7 @@ return false; } - addRecentCharacterFile(file); + recentCharacters.addRecentFile(file); return true; } @@ -286,49 +277,18 @@ { characters.removeElement(character); File charFile = character.getFileRef().getReference(); - if (charFile != null) - { - addRecentCharacterFile(character.getFileRef().getReference()); - } + recentCharacters.addRecentFile(charFile); } public static void removeAllCharacters() { for (CharacterFacade characterFacade : characters) { - addRecentCharacterFile(characterFacade.getFileRef().getReference()); + recentCharacters.addRecentFile(characterFacade.getFileRef().getReference()); } characters.clearContents(); } - private static void addRecentCharacterFile(File file) - { - if (file == null) - { - return; - } - // Remove the character if it already exists, that way the entry gets moved to the top - recentCharacters.removeElement(file); - recentCharacters.addElement(0, file); - - if (recentCharacters.getSize() > MAX_RECENT_CHARACTERS) - { - recentCharacters.removeElement(MAX_RECENT_CHARACTERS); - } - updateRecentCharacterProp(); - } - - private static void updateRecentCharacterProp() - { - URI userdir = new File(ConfigurationSettings.getUserDir()).toURI(); - String[] files = new String[recentCharacters.getSize()]; - for (int i = 0; i < files.length; i++) - { - files[i] = userdir.relativize(recentCharacters.getElementAt(i).toURI()).toString(); - } - PCGenSettings.getInstance().setStringArray(PCGenSettings.RECENT_CHARACTERS, files); - } - public static PartyFacade getCharacters() { return characters; @@ -358,3 +318,95 @@ } } + +final class RecentFileList extends AbstractListFacade<File> +{ + + private static final int MAX_RECENT_FILES = 5; + private final LinkedList<File> fileList = new LinkedList<File>(); + private final String contextProp; + + public RecentFileList(String contextProp) + { + this.contextProp = contextProp; + String[] recentFiles = PCGenSettings.getInstance().getStringArray(contextProp); + if (!ArrayUtils.isEmpty(recentFiles)) + { + URI userdir = new File(ConfigurationSettings.getUserDir()).toURI(); + for (int i = 0; i < recentFiles.length; i++) + { + addRecentFile(new File(userdir.resolve(recentFiles[i]))); + } + } + } + + private void updateRecentFileProp() + { + URI userdir = new File(ConfigurationSettings.getUserDir()).toURI(); + + List<String> uris = new ArrayList<String>(fileList.size()); + for (File file : fileList) + { + URI uri = userdir.relativize(file.toURI()); + uris.add(uri.toString()); + } + PCGenSettings.getInstance().setStringArray(contextProp, uris); + } + + public void addRecentFile(File file) + { + if (file == null || !file.isFile()) + { + return; + } + //Remove the file if it already exists, that way it gets moved to the top + int index = indexOf(file); + if (index != -1) + { + File oldFile = fileList.remove(index); + fireElementRemoved(this, oldFile, index); + } + //add it to the front + fileList.addFirst(file); + fireElementAdded(this, file, 0); + //then remove any overflowing files + if (fileList.size() > MAX_RECENT_FILES) + { + File oldFile = fileList.removeLast(); + fireElementRemoved(this, oldFile, MAX_RECENT_FILES); + } + updateRecentFileProp(); + } + + public File getElementAt(int index) + { + return fileList.get(index); + } + + public int getSize() + { + return fileList.size(); + } + + @Override + public boolean containsElement(File element) + { + return indexOf(element) != -1; + } + + private int indexOf(File element) + { + if (element != null) + { + for (int i = 0; i < fileList.size(); i++) + { + if (fileList.get(i).getAbsolutePath().equals(element.getAbsolutePath())) + { + return i; + } + } + } + return -1; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |