Changeset 50 in josm for src/org/openstreetmap


Ignore:
Timestamp:
2006-02-12T12:05:34+01:00 (19 years ago)
Author:
imi
Message:
  • fixed exception when merging some keys (download)
  • fixed "please wait" doesn't disappearing
  • added "There are changes" - dialog
Location:
src/org/openstreetmap/josm
Files:
7 edited

Legend:

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

    r46 r50  
    77import java.awt.Point;
    88import java.awt.Toolkit;
     9import java.awt.event.WindowAdapter;
     10import java.awt.event.WindowEvent;
    911import java.util.Arrays;
    1012import java.util.Collection;
     
    3537import org.openstreetmap.josm.gui.MapFrame;
    3638import org.openstreetmap.josm.gui.ShowModifiers;
     39import org.openstreetmap.josm.gui.layer.Layer;
     40import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3741
    3842/**
     
    140144               
    141145                getContentPane().add(toolBar, BorderLayout.NORTH);
     146       
     147                addWindowListener(new WindowAdapter(){
     148                        @Override
     149                        public void windowClosing(WindowEvent arg0) {
     150                                if (mapFrame != null) {
     151                                        boolean changed = false;
     152                                        for (Layer l : mapFrame.mapView.getAllLayers()) {
     153                                                if (l instanceof OsmDataLayer && ((OsmDataLayer)l).isModified()) {
     154                                                        changed = true;
     155                                                        break;
     156                                                }
     157                                        }
     158                                        if (changed) {
     159                                                int answer = JOptionPane.showConfirmDialog(
     160                                                                Main.this, "There are unsaved changes. Really quit?",
     161                                                                "Unsaved Changes", JOptionPane.YES_NO_OPTION);
     162                                                if (answer != JOptionPane.YES_OPTION)
     163                                                        return;
     164                                        }
     165                                }
     166                                System.exit(0);
     167                        }
     168                });
     169                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
    142170        }
    143171
     
    174202               
    175203                main = new Main();
    176                 main.setDefaultCloseOperation(EXIT_ON_CLOSE);
    177204                main.setVisible(true);
    178205
  • src/org/openstreetmap/josm/actions/DownloadAction.java

    r44 r50  
    1414import javax.swing.JButton;
    1515import javax.swing.JCheckBox;
    16 import javax.swing.JDialog;
    1716import javax.swing.JLabel;
    1817import javax.swing.JOptionPane;
     
    163162                final OsmServerReader osmReader = new OsmServerReader(b.latlon[0], b.latlon[1], b.latlon[2], b.latlon[3]);
    164163               
    165                 final JDialog pleaseWaitDlg = createPleaseWaitDialog("Downloading data");
    166                
    167                 new Thread(){
     164                new Thread(new PleaseWaitRunnable("Downloading data"){
    168165                        @Override
    169                         public void run() {
     166                        public void realRun() {
    170167                                try {
    171168                                        String name = latlon[0].getText() + " "
     
    181178                                                        return; // user cancelled download
    182179                                                if (dataSet.nodes.isEmpty()) {
    183                                                         pleaseWaitDlg.setVisible(false);
    184                                                         pleaseWaitDlg.dispose();
     180                                                        closeDialog();
    185181                                                        JOptionPane.showMessageDialog(Main.main,
    186182                                                                        "No data imported.");
     
    194190                                        else
    195191                                                Main.main.getMapFrame().mapView.addLayer(layer);
    196                                         pleaseWaitDlg.setVisible(false);
    197192                                } catch (JDOMException x) {
    198                                         pleaseWaitDlg.setVisible(false);
    199                                         pleaseWaitDlg.dispose();
     193                                        closeDialog();
    200194                                        x.printStackTrace();
    201195                                        JOptionPane.showMessageDialog(Main.main, x.getMessage());
    202196                                } catch (FileNotFoundException x) {
    203                                         pleaseWaitDlg.setVisible(false);
    204                                         pleaseWaitDlg.dispose();
     197                                        closeDialog();
    205198                                        x.printStackTrace();
    206199                                        JOptionPane.showMessageDialog(Main.main,
    207200                                                        "URL nicht gefunden: " + x.getMessage());
    208201                                } catch (IOException x) {
    209                                         pleaseWaitDlg.setVisible(false);
    210                                         pleaseWaitDlg.dispose();
     202                                        closeDialog();
    211203                                        x.printStackTrace();
    212204                                        JOptionPane.showMessageDialog(Main.main, x.getMessage());
    213                                 } finally {
    214                                         if (pleaseWaitDlg.isVisible()) {
    215                                                 pleaseWaitDlg.setVisible(false);
    216                                                 pleaseWaitDlg.dispose();
    217                                         }
    218                                 }
    219                         }
    220                 }.start();
    221                
    222                 pleaseWaitDlg.setVisible(true);
     205                                }
     206                        }
     207                }).start();
    223208        }
    224209       
  • src/org/openstreetmap/josm/actions/JosmAction.java

    r44 r50  
    77import javax.swing.JDialog;
    88import javax.swing.JLabel;
     9import javax.swing.SwingUtilities;
    910
    1011import org.openstreetmap.josm.Main;
     
    1718abstract public class JosmAction extends AbstractAction {
    1819
     20        /**
     21         * Instanced of this thread will display a "Please Wait" message in middle of JOSM
     22         * to indicate a progress beeing executed.
     23         * 
     24         * @author Imi
     25         */
     26        protected abstract class PleaseWaitRunnable implements Runnable {
     27                private String msg;
     28                private JDialog pleaseWaitDlg;
     29                /**
     30                 * Create the runnable object with a given message for the user.
     31                 */
     32                PleaseWaitRunnable(String msg) {
     33                        this.msg = msg;
     34                }
     35                public final void run() {
     36                        pleaseWaitDlg = new JDialog(Main.main, true);
     37                        pleaseWaitDlg.setUndecorated(true);
     38                        JLabel l = new JLabel(msg+". Please Wait.");
     39                        l.setBorder(BorderFactory.createCompoundBorder(
     40                                        BorderFactory.createEtchedBorder(),
     41                                        BorderFactory.createEmptyBorder(20,20,20,20)));
     42                        pleaseWaitDlg.getContentPane().add(l);
     43                        pleaseWaitDlg.pack();
     44                        pleaseWaitDlg.setLocation(Main.main.getX()+Main.main.getWidth()/2-pleaseWaitDlg.getWidth()/2,
     45                                        Main.main.getY()+Main.main.getHeight()/2-pleaseWaitDlg.getHeight()/2);
     46                        pleaseWaitDlg.setResizable(false);
     47                        SwingUtilities.invokeLater(new Runnable(){
     48                                public void run() {
     49                                        pleaseWaitDlg.setVisible(true);
     50                                }
     51                        });
     52                        try {
     53                                realRun();
     54                        } finally {
     55                                closeDialog();
     56                        }
     57                }
     58                public abstract void realRun();
     59                public void closeDialog() {
     60                        pleaseWaitDlg.setVisible(false);
     61                        pleaseWaitDlg.dispose();
     62                }
     63        }
     64       
    1965        /**
    2066         * Construct the action.
     
    3480                        putValue(ACCELERATOR_KEY, shortCut);
    3581        }
    36 
    37         /**
    38          * @return A dialog labeled "... Please Wait." where ... is the message parameter.
    39          */
    40         protected JDialog createPleaseWaitDialog(String msg) {
    41                 final JDialog pleaseWaitDlg = new JDialog(Main.main, true);
    42                 pleaseWaitDlg.setUndecorated(true);
    43                 JLabel l = new JLabel(msg+". Please Wait.");
    44                 l.setBorder(BorderFactory.createCompoundBorder(
    45                                 BorderFactory.createEtchedBorder(),
    46                                 BorderFactory.createEmptyBorder(20,20,20,20)));
    47                 pleaseWaitDlg.getContentPane().add(l);
    48                 pleaseWaitDlg.pack();
    49                 pleaseWaitDlg.setLocation(Main.main.getX()+Main.main.getWidth()/2-pleaseWaitDlg.getWidth()/2,
    50                                 Main.main.getY()+Main.main.getHeight()/2-pleaseWaitDlg.getHeight()/2);
    51                 pleaseWaitDlg.setResizable(false);
    52                 return pleaseWaitDlg;
    53         }
    5482}
  • src/org/openstreetmap/josm/actions/UploadAction.java

    r44 r50  
    88import java.util.LinkedList;
    99
    10 import javax.swing.JDialog;
    1110import javax.swing.JLabel;
    1211import javax.swing.JList;
     
    7574                all.addAll(delete);
    7675               
    77                 final JDialog dlg = createPleaseWaitDialog("Uploading data");
    78                 new Thread(){
     76                new Thread(new PleaseWaitRunnable("Uploading data"){
    7977                        @Override
    80                         public void run() {
     78                        public void realRun() {
    8179                                try {
    8280                                        server.uploadOsm(all);
    8381                                } catch (JDOMException x) {
    84                                         dlg.setVisible(false);
    85                                         dlg.dispose();
     82                                        closeDialog();
    8683                                        x.printStackTrace();
    8784                                        JOptionPane.showMessageDialog(Main.main, x.getMessage());
    88                                 } finally {
    89                                         if (dlg.isVisible()) {
    90                                                 dlg.setVisible(false);
    91                                                 dlg.dispose();
    92                                         }
    9385                                }
    9486                        }
    95                 }.start();
    96                
    97                 dlg.setVisible(true);
     87                }).start();
    9888               
    9989                // finished without errors -> clean dataset
  • src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java

    r35 r50  
    166166                        if (myOsm.keys == null)
    167167                                myOsm.keys = otherOsm.keys;
    168                         else
     168                        else if (otherOsm.keys != null)
    169169                                myOsm.keys.putAll(otherOsm.keys);
    170170                        myOsm.modifiedProperties = true;
  • src/org/openstreetmap/josm/gui/MapView.java

    r43 r50  
    2323import org.openstreetmap.josm.gui.layer.Layer;
    2424import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     25import org.openstreetmap.josm.gui.layer.OsmDataLayer.ModifiedChangedListener;
    2526
    2627/**
     
    100101
    101102                if (layer instanceof OsmDataLayer) {
     103                        final OsmDataLayer dataLayer = (OsmDataLayer)layer;
    102104                        if (editLayer != null) {
    103105                                // merge the layer into the existing one
     
    108110                                return;
    109111                        }
    110                         editLayer = (OsmDataLayer)layer;
     112                        editLayer = dataLayer;
     113                        dataLayer.addModifiedListener(new ModifiedChangedListener(){
     114                                public void modifiedChanged(boolean value, OsmDataLayer source) {
     115                                        Main.main.setTitle((value?"*":"")+"Java Open Street Map - Editor");
     116                                }
     117                        });
    111118                }
    112119
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r41 r50  
    3434public class OsmDataLayer extends Layer {
    3535
     36        public interface ModifiedChangedListener {
     37                void modifiedChanged(boolean value, OsmDataLayer source);
     38        }
     39       
    3640        private static Icon icon;
    3741
     
    4246
    4347        /**
     48         * Whether the data of this layer was modified during the session.
     49         */
     50        private boolean modified = false;
     51        /**
    4452         * All commands that were made on the dataset.
    4553         */
     
    5058        private Stack<Command> redoCommands = new Stack<Command>();
    5159
     60        /**
     61         * List of all listeners for changes of modified flag.
     62         */
     63        LinkedList<ModifiedChangedListener> listener;
     64       
    5265        /**
    5366         * Construct a OsmDataLayer.
     
    157170                Main.main.undoAction.setEnabled(true);
    158171                Main.main.redoAction.setEnabled(false);
     172                setModified(true);
    159173        }
    160174
     
    171185                Main.main.undoAction.setEnabled(!commands.isEmpty());
    172186                Main.main.redoAction.setEnabled(true);
     187                if (commands.isEmpty())
     188                        setModified(false);
    173189        }
    174190        /**
     
    200216                for (Iterator<Track> it = data.tracks.iterator(); it.hasNext();)
    201217                        cleanIterator(it);
     218               
     219                // not modified anymore, since either everything reverted to file state or
     220                // everything uploaded properly.               
     221                setModified(false);
     222               
     223        }
     224
     225        public boolean isModified() {
     226                return modified;
     227        }
     228
     229        public void setModified(boolean modified) {
     230                if (modified == this.modified)
     231                        return;
     232                this.modified = modified;
     233                if (listener != null)
     234                        for (ModifiedChangedListener l : listener)
     235                                l.modifiedChanged(modified, this);
     236        }
     237
     238        /**
     239         * Add the parameter to the intern list of listener for modified state.
     240         * @param l Listener to add to the list. Must not be null.
     241         */
     242        public void addModifiedListener(ModifiedChangedListener l) {
     243                if (listener == null)
     244                        listener = new LinkedList<ModifiedChangedListener>();
     245                listener.add(l);
    202246        }
    203247
Note: See TracChangeset for help on using the changeset viewer.