import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; import java.lang.ref.SoftReference; import java.net.URL; import java.net.MalformedURLException; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; public class viewer { private IRController irControl; private ViewerActions actions; protected ViewFrame viewFrame; private JFrame thumbFrame; private ArrayList imgs; private int current = -1; public viewer () { imgs = new ArrayList(); actions = new ViewerActions(this); viewFrame = new ViewFrame(); viewFrame.addWindowListener(new ExitWindowListener()); viewFrame.addKeyListener(new KeyController(this)); JPopupMenu popupMenu = new JPopupMenu(); addMenus(popupMenu); viewFrame.imgPanel.addMouseListener(new PopupMouseListener(popupMenu)); /* JMenuBar menuBar = new JMenuBar(); addMenus(menuBar); viewFrame.setJMenuBar(menuBar); */ //createViewFrame(); createThumbFrame(); startIRController(); } private void addMenus (JComponent m) { JMenu zoomMenu = new JMenu("Zoom"); zoomMenu.add(new JButton(actions.getAction(ViewerActions.ZOOM_IN_ACTION))); m.add(zoomMenu); m.add(new JButton(actions.getAction(ViewerActions.QUIT_ACTION))); } // private void createViewFrame () { } private void createThumbFrame () { ThumbPanel thumbs = new ThumbPanel(this); JScrollPane thumbScr = new JScrollPane(thumbs); thumbFrame = new JFrame(); thumbFrame.setTitle("Index"); thumbFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); thumbFrame.setContentPane(thumbScr); thumbFrame.pack(); } private void startIRController () { try { irControl = new IRController(this); } catch (Throwable t) { System.err.println(t.toString()); } } protected ArrayList getImgs () { return imgs; } public void setCurrent (int i) { if (i >= 0 && i < imgs.size()) { current = i; thumbFrame.hide(); showCurrent(); } } private void showCurrent () { viewFrame.showImage((ImageEntry)imgs.get(current), current, imgs.size()); } public void addImage (URL url) { imgs.add(new ImageEntry(url)); } private void preload (int i) { if (i >= 0 && i < imgs.size()) { new PreloadThread((ImageEntry)imgs.get(i)).start(); } } public void prevImage () { if (current > 0) { current--; showCurrent(); preload(current-1); } } public void nextImage () { if (current < imgs.size()-1) { current++; showCurrent(); preload(current+1); } } public void doCommand (String comm) { System.out.println("Got command: " + comm); Action action = actions.getAction(comm); if (action != null) { action.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, comm)); } else { System.err.println("Unknown command: " + comm); } } public void quit () { System.exit(0); } public static String file (String name) { URL url = viewer.class.getResource(name); return url == null ? name : url.getFile(); } protected class ExitWindowListener extends WindowAdapter { public void windowClosing (WindowEvent e) { quit(); } } public static void main (String[] args) { try { URL pwd = new File(System.getProperty("user.dir")).toURL(); viewer v = new viewer(); for (int i = 0; i < args.length; i++) { try { URL url = new URL(pwd, args[i]); if (new File(url.getFile()).isDirectory()) { System.out.println(url + " is a directory."); } else { v.addImage(url); } } catch (MalformedURLException ex) { System.err.println("Bad URL: " + args[i]); } } if (v.imgs.size() == 0) { System.err.println("No images."); System.exit(1); } v.nextImage(); } catch (MalformedURLException ex) { System.err.println("Bad current directory: " + ex.toString()); } } }