Ticket #6728: 6728.patch

File 6728.patch, 4.5 KB (added by simon04, 13 years ago)
  • src/org/openstreetmap/josm/actions/OpenFileAction.java

    diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
    index 53957f9..a61bda6 100644
    a b public class OpenFileAction extends DiskAccessAction {  
    275275                    // remove the files which failed to load from the list
    276276                    fileHistory.removeAll(failedAll);
    277277                    int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
    278                     Collection<String> trimmedFileHistory = new ArrayList<String>(Math.min(maxsize, fileHistory.size()));
    279                     int i = 0;
    280                     for (String s : fileHistory) {
    281                         if (++i > maxsize) {
    282                             break;
    283                         }
    284                         trimmedFileHistory.add(s);
    285                     }
    286                     Main.pref.putCollection("file-open.history", trimmedFileHistory);
     278                    Main.pref.putCollectionBounded("file-open.history", maxsize, fileHistory);
    287279                }
    288280            }
    289281        }
  • src/org/openstreetmap/josm/actions/SaveActionBase.java

    diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
    index 99ac086..293c29d 100644
    a b import static org.openstreetmap.josm.tools.I18n.tr;  
    66import java.awt.event.ActionEvent;
    77import java.io.File;
    88import java.io.IOException;
    9 
     9import java.util.Collection;
     10import java.util.LinkedList;
     11import java.util.List;
    1012import javax.swing.JFileChooser;
    1113import javax.swing.JOptionPane;
    1214import javax.swing.filechooser.FileFilter;
    import org.openstreetmap.josm.io.FileExporter;  
    2224import org.openstreetmap.josm.tools.Shortcut;
    2325
    2426public abstract class SaveActionBase extends DiskAccessAction {
     27    private File file;
    2528
    2629    public SaveActionBase(String name, String iconName, String tooltip, Shortcut shortcut) {
    2730        super(name, iconName, tooltip, shortcut);
    2831    }
    2932
     33    @Override
    3034    public void actionPerformed(ActionEvent e) {
    31         if (!isEnabled())
     35        if (!isEnabled()) {
    3236            return;
    33         doSave();
     37        }
     38        boolean saved = doSave();
     39        if (saved) {
     40            addToFileOpenHistory();
     41        }
    3442    }
    3543
    3644    public boolean doSave() {
    public abstract class SaveActionBase extends DiskAccessAction {  
    4755    public boolean doSave(Layer layer) {
    4856        if(!checkSaveConditions(layer))
    4957            return false;
    50         return doInternalSave(layer, getFile(layer));
     58        file = getFile(layer);
     59        return doInternalSave(layer, file);
    5160    }
    5261
    5362    public boolean doSave(Layer layer, File file) {
    public abstract class SaveActionBase extends DiskAccessAction {  
    223232        }
    224233        return true;
    225234    }
     235
     236    protected void addToFileOpenHistory() {
     237        String filepath;
     238        try {
     239            filepath = file.getCanonicalPath();
     240        } catch (IOException ign) {
     241            return;
     242        }
     243
     244        int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
     245        Collection<String> oldHistory = Main.pref.getCollection("file-open.history");
     246        List<String> history = new LinkedList<String>(oldHistory);
     247        history.add(0, filepath);
     248        Main.pref.putCollectionBounded("file-open.history", maxsize, history);
     249    }
    226250}
  • src/org/openstreetmap/josm/data/Preferences.java

    diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
    index c8444f5..ea3e992 100644
    a b public class Preferences {  
    740740        return put(key, Utils.join("\u001e", val));
    741741    }
    742742
     743    /**
     744     * Saves at most {@code maxsize} items of collection {@code val}.
     745     */
     746    public boolean putCollectionBounded(String key, int maxsize, Collection<String> val) {
     747        Collection<String> newCollection = new ArrayList<String>(maxsize);
     748        for (String i : val) {
     749            if (newCollection.size() >= maxsize) {
     750                break;
     751            }
     752            newCollection.add(i);
     753        }
     754        return putCollection(key, newCollection);
     755    }
     756
    743757    synchronized private void putCollectionDefault(String key, Collection<String> val) {
    744758        putDefault(key, Utils.join("\u001e", val));
    745759    }