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