001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.io; 003 004 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005 import static org.openstreetmap.josm.tools.I18n.tr; 006 007 import java.awt.event.ActionEvent; 008 import java.io.File; 009 import java.util.Collection; 010 import java.util.Collections; 011 import javax.swing.AbstractAction; 012 import javax.swing.JMenu; 013 import javax.swing.JMenuItem; 014 import javax.swing.JSeparator; 015 import javax.swing.event.MenuEvent; 016 import javax.swing.event.MenuListener; 017 018 import org.openstreetmap.josm.Main; 019 import org.openstreetmap.josm.actions.OpenFileAction.OpenFileTask; 020 import org.openstreetmap.josm.tools.ImageProvider; 021 022 /** 023 * Show list of recently opened files 024 */ 025 public class RecentlyOpenedFilesMenu extends JMenu { 026 ClearAction clearAction; 027 028 public RecentlyOpenedFilesMenu() { 029 super(tr("Open Recent")); 030 setToolTipText(tr("List of recently opened files")); 031 setIcon(ImageProvider.get("openrecent.png")); 032 putClientProperty("help", ht("/Action/OpenRecent")); 033 034 // build dynamically 035 addMenuListener(new MenuListener() { 036 @Override 037 public void menuSelected(MenuEvent e) { 038 rebuild(); 039 } 040 041 @Override 042 public void menuDeselected(MenuEvent e) { 043 } 044 045 @Override 046 public void menuCanceled(MenuEvent e) { 047 } 048 }); 049 } 050 051 private void rebuild() { 052 removeAll(); 053 Collection<String> fileHistory = Main.pref.getCollection("file-open.history"); 054 055 for (final String file : fileHistory) { 056 add(new AbstractAction() { 057 { 058 putValue(NAME, file); 059 putValue("help", ht("/Action/OpenRecent")); 060 putValue("toolbar", false); 061 } 062 @Override 063 public void actionPerformed(ActionEvent e) { 064 File f = new File(file); 065 OpenFileTask task = new OpenFileTask(Collections.singletonList(f), null); 066 task.setRecordHistory(true); 067 Main.worker.submit(task); 068 } 069 }); 070 } 071 add(new JSeparator()); 072 if (clearAction == null) { 073 clearAction = new ClearAction(); 074 } 075 JMenuItem clearItem = new JMenuItem(clearAction); 076 clearItem.setEnabled(!fileHistory.isEmpty()); 077 add(clearItem); 078 } 079 080 private static class ClearAction extends AbstractAction { 081 082 public ClearAction() { 083 super(tr("Clear")); 084 putValue(SHORT_DESCRIPTION, tr("Clear the list of recently opened files")); 085 putValue("help", ht("/Action/OpenRecent")); 086 putValue("toolbar", "recentlyopenedfiles/clear"); 087 } 088 089 @Override 090 public void actionPerformed(ActionEvent e) { 091 Main.pref.putCollection("file-open.history", null); 092 } 093 } 094 }