Changeset 3378 in josm for trunk


Ignore:
Timestamp:
2010-07-20T08:54:22+02:00 (14 years ago)
Author:
jttt
Message:

Fix #2662 Auto-save

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/Main.java

    r3340 r3378  
    362362
    363363        I18n.fixJFileChooser();
    364        
     364
    365365        // init default coordinate format
    366366        //
     
    508508    }
    509509
     510    public static boolean exitJosm(boolean exit) {
     511        if (Main.saveUnsavedModifications()) {
     512            Main.saveGuiGeometry();
     513            // Remove all layers because somebody may rely on layerRemoved events (like AutosaveTask)
     514            if (Main.isDisplayingMapView()) {
     515                Collection<Layer> layers = new ArrayList<Layer>(Main.map.mapView.getAllLayers());
     516                for (Layer l: layers) {
     517                    Main.map.mapView.removeLayer(l);
     518                }
     519            }
     520            if (exit) {
     521                System.exit(0);
     522                return true;
     523            } else
     524                return true;
     525        } else
     526            return false;
     527    }
     528
    510529    /**
    511530     * The type of a command line parameter, to be used in switch statements.
  • trunk/src/org/openstreetmap/josm/actions/ExitAction.java

    r2715 r3378  
    22package org.openstreetmap.josm.actions;
    33
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    66
    77import java.awt.event.ActionEvent;
     
    2727
    2828    public void actionPerformed(ActionEvent e) {
    29         if (Main.saveUnsavedModifications()) {
    30             Main.saveGuiGeometry();
    31             System.exit(0);
    32         }
     29        Main.exitJosm(true);
    3330    }
    3431}
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r3362 r3378  
    1515import java.util.List;
    1616import java.util.Map;
     17import java.util.concurrent.CopyOnWriteArrayList;
    1718import java.util.concurrent.locks.Lock;
    1819import java.util.concurrent.locks.ReadWriteLock;
     
    6970    private Storage<OsmPrimitive> allPrimitives = new Storage<OsmPrimitive>(new IdHash(), 16, true);
    7071    private Map<PrimitiveId, OsmPrimitive> primitivesMap = allPrimitives.foreignKey(new IdHash());
    71     private List<DataSetListener> listeners = new ArrayList<DataSetListener>();
     72    private CopyOnWriteArrayList<DataSetListener> listeners = new CopyOnWriteArrayList<DataSetListener>();
    7273
    7374    // Number of open calls to beginUpdate
     
    839840
    840841    public void addDataSetListener(DataSetListener dsl) {
    841         listeners.add(dsl);
     842        listeners.addIfAbsent(dsl);
    842843    }
    843844
     
    10011002     * Marks all "invisible" objects as deleted. These objects should be always marked as
    10021003     * deleted when downloaded from the server. They can be undeleted later if necessary.
    1003      * 
     1004     *
    10041005     */
    10051006    public void deleteInvisible() {
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r3287 r3378  
    2525
    2626import org.openstreetmap.josm.Main;
     27import org.openstreetmap.josm.data.AutosaveTask;
     28import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    2729import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
    2830import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    5961        mainFrame.addWindowListener(new WindowAdapter(){
    6062            @Override public void windowClosing(final WindowEvent arg0) {
    61                 if (!Main.saveUnsavedModifications())
    62                     return;
    63                 Main.saveGuiGeometry();
    64                 System.exit(0);
     63                Main.exitJosm(true);
    6564            }
    6665        });
     
    240239        }
    241240
     241        AutosaveTask autosaveTask = new AutosaveTask();
     242        List<OsmDataLayer> unsavedLayers = autosaveTask.getUnsavedLayers();
     243        if (!unsavedLayers.isEmpty()) {
     244            ExtendedDialog dialog = new ExtendedDialog(
     245                    Main.parent,
     246                    tr("Unsaved osm data"),
     247                    new String[] {tr("Restore"), tr("Cancel")}
     248            );
     249            dialog.setContent(tr("JOSM found {0} unsaved osm data layers. It looks like JOSM crashed last time. Do you want to restore data?",
     250                    unsavedLayers.size()));
     251            dialog.setButtonIcons(new String[] {"ok.png", "cancel.png"});
     252            dialog.showDialog();
     253            if (dialog.getValue() == 1) {
     254                for (OsmDataLayer layer: unsavedLayers) {
     255                    Main.main.addLayer(layer);
     256                }
     257            }
     258
     259
     260        }
     261        autosaveTask.schedule();
     262
     263
    242264        EventQueue.invokeLater(new Runnable() {
    243265            public void run() {
  • trunk/src/org/openstreetmap/josm/io/OsmExporter.java

    r3083 r3378  
    6868
    6969            OsmWriter w = new OsmWriter(new PrintWriter(writer), false, layer.data.getVersion());
    70             w.header();
    71             w.writeDataSources(layer.data);
    72             w.writeContent(layer.data);
    73             w.footer();
    74             w.close();
     70            layer.data.getReadLock().lock();
     71            try {
     72                w.header();
     73                w.writeDataSources(layer.data);
     74                w.writeContent(layer.data);
     75                w.footer();
     76                w.close();
     77            } finally {
     78                layer.data.getReadLock().unlock();
     79            }
    7580            // FIXME - how to close?
    7681            if (!Main.pref.getBoolean("save.keepbackup") && (tmpFile != null)) {
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java

    r3083 r3378  
    4848        //System.out.println("Going to handle method "+method+" (short: "+method.getName()+") with event "+args[0]);
    4949        if (method.getName().equals("handleQuit")) {
    50             handled = Main.saveUnsavedModifications();
     50            handled = Main.exitJosm(false);
    5151        } else if (method.getName().equals("handleAbout")) {
    5252            Main.main.menu.about.actionPerformed(null);
Note: See TracChangeset for help on using the changeset viewer.