/** * */ package ie.dcu.apps.ist.actions; import java.io.*; import java.util.*; /** * Jump to the next image in the directory * * @author Kevin McGuinness */ public class NextAction extends AppAction { // Supported file extensions static final String EXTENSIONS = "jpg;jpeg;png;gif;bmp;ctx"; private final java.io.FileFilter imageFilter; public NextAction(ActionManager m) { super(m); // Create an image file filter imageFilter = new SimpleFileFilter(EXTENSIONS); } @Override public void run() { if (window.hasContext()) { // Get currently opened file File file = window.getContext().getFile(); // Find the one after & open it File next = findNext(file); if (next != null) { manager.get(OpenAction.class).open(next); } } } private File findNext(File file) { File dir = file.getParentFile(); if (dir != null) { // List the images File[] files = dir.listFiles(imageFilter); // Need at least one if (files.length > 1) { // Search for ourself... for (int i = 0; i < files.length; i++) { if (files[i].equals(file)) { // Use next file (wrap back to first) return files[(i+1)%files.length]; } } } } return null; } } class SimpleFileFilter implements java.io.FileFilter { /** * Holds the list of extensions. It is expected it will be quite * short, so we use an ArrayList. */ private final ArrayList extensions; /** * Construct a simple file extension filter based on a semicolon separated * list of file extensions. * * @param extensions * A list of file extensions (ex. jpeg;jpg;png) */ public SimpleFileFilter(String extensions) { String[] exts = extensions.split(";"); this.extensions = new ArrayList(exts.length); for (String s : exts) { if ((s = s.trim()).length() != 0) { if (s.startsWith("*")) { s = s.substring(1); } if (!s.startsWith(".")) { s = "." + s; } this.extensions.add(s); } } } public boolean accept(File pathname) { if (pathname.isFile()) { String name = pathname.getName(); // List of extensions should be fairly short.. for (String ext : extensions) { if (name.endsWith(ext)) { return true; } } } return false; } }