package net.sf.jabref; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.Iterator; import java.util.LinkedList; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; public class FileHistory extends JMenu implements ActionListener { JabRefPreferences prefs; LinkedList<String> history = new LinkedList<String>(); JabRefFrame frame; public FileHistory(JabRefPreferences prefs, JabRefFrame frame) { String name = Globals.menuTitle("Recent files"); int i = name.indexOf('&'); if (i >= 0) { setText(name.substring(0, i) + name.substring(i + 1)); char mnemonic = Character.toUpperCase(name.charAt(i + 1)); setMnemonic((int) mnemonic); } else setText(name); this.prefs = prefs; this.frame = frame; String[] old = prefs.getStringArray("recentFiles"); if ((old != null) && (old.length > 0)) { for (i = 0; i < old.length; i++) { history.addFirst(old[i]); } setItems(); } else setEnabled(false); } /** * Adds the file name to the top of the menu. If it already is in * the menu, it is merely moved to the top. * * @param filename a <code>String</code> value */ public void newFile(String filename) { int i = 0; while (i < history.size()) { if (history.get(i).equals(filename)) history.remove(i--); i++; } history.addFirst(filename); while (history.size() > prefs.getInt("historySize")) { history.removeLast(); } setItems(); if (!isEnabled()) setEnabled(true); } private void setItems() { removeAll(); Iterator<String> i = history.iterator(); int count = 1; while (i.hasNext()) { addItem(i.next(), count++); } } private void addItem(String filename, int num) { String number = num + ""; JMenuItem item = new JMenuItem(number + ". " + filename); char mnemonic = Character.toUpperCase(number.charAt(0)); item.setMnemonic((int) mnemonic); item.addActionListener(this); add(item); //history.addFirst(item); } private void removeItem(String filename) { int i=0; while (i < history.size()) { if (history.get(i).equals(filename)) { history.remove(i); setItems(); return; } i++; } } public void storeHistory() { if (history.size() > 0) { String[] names = new String[history.size()]; for (int i = 0; i < names.length; i++) names[i] = history.get(i); prefs.putStringArray("recentFiles", names); } } public void actionPerformed(ActionEvent e) { String name = ((JMenuItem) e.getSource()).getText(); int pos = name.indexOf(" "); name = name.substring(pos + 1); //Util.pr("'"+name+"'"); final File fileToOpen = new File(name); if (!fileToOpen.exists()) { JOptionPane.showMessageDialog(frame, Globals.lang("File not found")+": "+fileToOpen.getName(), "Error", JOptionPane.ERROR_MESSAGE); removeItem(name); return; } (new Thread() { public void run() { frame.open.openIt(fileToOpen, true); } }).start(); } }