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 }