Changeset 198 in josm for src/org


Ignore:
Timestamp:
2007-01-14T09:41:24+01:00 (18 years ago)
Author:
imi
Message:
  • added different cursors for mapmodes (actually just finished what was begun)
  • added feature to change the key in property dialog as well as the value
  • added dockable toggle dialogs
  • fixed exception when loading GPX files at command line
Location:
src/org/openstreetmap/josm
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/actions/mapmode/AddNodeAction.java

    r184 r198  
    2525import org.openstreetmap.josm.data.osm.Way;
    2626import org.openstreetmap.josm.gui.MapFrame;
    27 import org.openstreetmap.josm.tools.ImageProvider;
    2827
    2928/**
     
    5453
    5554        public AddNodeAction(MapFrame mapFrame, String name, Mode mode, String desc) {
    56                 super(name, "node/"+mode, desc, mapFrame, ImageProvider.getCursor("crosshair", "node"));
     55                super(name, "node/"+mode, desc, mapFrame, Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    5756                this.mode = mode;
    5857                putValue("help", "Action/AddNode/"+Character.toUpperCase(mode.toString().charAt(0))+mode.toString().substring(1));
     
    6261                super.enterMode();
    6362                Main.map.mapView.addMouseListener(this);
    64                 Main.map.mapView.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    6563        }
    6664
     
    6866                super.exitMode();
    6967                Main.map.mapView.removeMouseListener(this);
    70                 Main.map.mapView.setCursor(Cursor.getDefaultCursor());
    7168        }
    7269
  • src/org/openstreetmap/josm/actions/mapmode/MapMode.java

    r178 r198  
    2121 */
    2222abstract public class MapMode extends JosmAction implements MouseListener, MouseMotionListener {
    23 //      private final Cursor cursor;
    24 //      private Cursor oldCursor;
     23        private final Cursor cursor;
     24        private Cursor oldCursor;
    2525
    2626        /**
     
    2929        public MapMode(String name, String iconName, String tooltip, int keystroke, MapFrame mapFrame, Cursor cursor) {
    3030                super(name, "mapmode/"+iconName, tooltip, keystroke, 0, false);
    31 //              this.cursor = cursor;
     31                this.cursor = cursor;
    3232                putValue("active", false);
    3333        }
     
    4040                putValue(SMALL_ICON, ImageProvider.get("mapmode", iconName));
    4141                putValue(SHORT_DESCRIPTION, tooltip);
    42 //              this.cursor = cursor;
     42                this.cursor = cursor;
    4343        }
    4444
    4545        public void enterMode() {
    4646                putValue("active", true);
    47 //              oldCursor = Main.map.mapView.getCursor();
    48 //              Main.map.mapView.setCursor(cursor);
     47                oldCursor = Main.map.mapView.getCursor();
     48                Main.map.mapView.setCursor(cursor);
    4949               
    5050        }
    5151        public void exitMode() {
    5252                putValue("active", false);
    53 //              Main.map.mapView.setCursor(oldCursor);
     53                Main.map.mapView.setCursor(oldCursor);
    5454        }
    5555
  • src/org/openstreetmap/josm/command/SequenceCommand.java

    r104 r198  
    33import static org.openstreetmap.josm.tools.I18n.tr;
    44
     5import java.util.Arrays;
    56import java.util.Collection;
    67
     
    3233                this.sequence = sequenz.toArray(this.sequence);
    3334        }
     35
     36        /**
     37         * Convinient constructor, if the commands are known at compile time.
     38         */
     39        public SequenceCommand(String name, Command... sequenz) {
     40                this(name, Arrays.asList(sequenz));
     41        }
    3442       
    3543        @Override public void executeCommand() {
  • src/org/openstreetmap/josm/gui/MainApplication.java

    r192 r198  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.EventQueue;
    67import java.awt.Toolkit;
    78import java.awt.event.WindowAdapter;
     
    6768                // construct argument table
    6869                List<String> argList = Arrays.asList(argArray);
    69                 Map<String, Collection<String>> args = new HashMap<String, Collection<String>>();
     70                final Map<String, Collection<String>> args = new HashMap<String, Collection<String>>();
    7071                for (String arg : argArray) {
    7172                        if (!arg.startsWith("--"))
     
    157158                JFrame mainFrame = new JFrame(tr("Java Open Street Map - Editor"));
    158159                Main.parent = mainFrame;
    159                 Main main = new MainApplication(mainFrame);
     160                final Main main = new MainApplication(mainFrame);
    160161                main.loadPlugins();
    161162
     
    165166                        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    166167
    167                 main.postConstructorProcessCmdLine(args);
     168                EventQueue.invokeLater(new Runnable(){
     169                        public void run() {
     170                                main.postConstructorProcessCmdLine(args);
     171            }
     172                });
    168173        }
    169174}
  • src/org/openstreetmap/josm/gui/MapFrame.java

    r172 r198  
    150150                IconToggleButton button = new IconToggleButton(dlg.action);
    151151                dlg.action.button = button;
     152                dlg.parent = toggleDialogs;
    152153                toolBarActions.add(button);
    153154                toggleDialogs.add(dlg);
  • src/org/openstreetmap/josm/gui/MapView.java

    r178 r198  
    153153                        Main.ds.clearSelection();
    154154                }
     155                layer.destroy();
    155156        }
    156157
  • src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java

    r180 r198  
    2323import java.util.Map.Entry;
    2424
     25import javax.swing.Box;
    2526import javax.swing.DefaultComboBoxModel;
    2627import javax.swing.JButton;
     
    3940import org.openstreetmap.josm.Main;
    4041import org.openstreetmap.josm.command.ChangePropertyCommand;
     42import org.openstreetmap.josm.command.SequenceCommand;
    4143import org.openstreetmap.josm.data.SelectionChangedListener;
    4244import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    9799                        return;
    98100                }
    99                 String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br> "+tr("Please select a new value for \"{0}\".<br>(Empty string deletes the key.)", key)+"</html>";
     101                String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br>("+tr("An empty value deletes the key.", key)+")</html>";
     102               
     103                JPanel panel = new JPanel(new BorderLayout());
     104                panel.add(new JLabel(msg), BorderLayout.NORTH);
     105
     106                JPanel p = new JPanel(new GridBagLayout());
     107                panel.add(p, BorderLayout.CENTER);
     108               
     109                final JTextField keyField = new JTextField(key);
     110                p.add(new JLabel(tr("Key")), GBC.std());
     111                p.add(Box.createHorizontalStrut(10), GBC.std());
     112                p.add(keyField, GBC.eol().fill(GBC.HORIZONTAL));
     113                               
    100114                final JComboBox combo = (JComboBox)data.getValueAt(row, 1);
    101                 JPanel p = new JPanel(new BorderLayout());
    102                 p.add(new JLabel(msg), BorderLayout.NORTH);
    103                 p.add(combo, BorderLayout.CENTER);
    104 
    105                 final JOptionPane optionPane = new JOptionPane(p, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
     115                p.add(new JLabel(tr("Value")), GBC.std());
     116                p.add(Box.createHorizontalStrut(10), GBC.std());
     117                p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
     118
     119                final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
    106120                        @Override public void selectInitialValue() {
    107121                                combo.requestFocusInWindow();
     
    131145                if (value.equals(""))
    132146                        value = null; // delete the key
    133                 Main.main.editLayer().add(new ChangePropertyCommand(sel, key, value));
    134 
    135                 if (value == null)
     147                String newkey = keyField.getText();
     148                if (newkey.equals("")) {
     149                        newkey = key;
     150                        value = null; // delete the key instead
     151                }
     152                if (key.equals(newkey) || value == null)
     153                        Main.main.editLayer().add(new ChangePropertyCommand(sel, newkey, value));
     154                else {
     155                        Main.main.editLayer().add(new SequenceCommand(trn("Change properties of {0} object", "Change properties of {0} objects", sel.size(), sel.size()),
     156                                        new ChangePropertyCommand(sel, key, null),
     157                                        new ChangePropertyCommand(sel, newkey, value)));
     158                }
     159
     160                if (!key.equals(newkey) || value == null)
    136161                        selectionChanged(sel); // update whole table
    137162
  • src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r178 r198  
    33import java.awt.BorderLayout;
    44import java.awt.Dimension;
     5import java.awt.EventQueue;
     6import java.awt.GridBagLayout;
    57import java.awt.event.ActionEvent;
     8import java.awt.event.ActionListener;
     9import java.awt.event.ComponentAdapter;
     10import java.awt.event.ComponentEvent;
    611import java.awt.event.KeyEvent;
     12import java.awt.event.WindowAdapter;
     13import java.awt.event.WindowEvent;
    714
    815import javax.swing.AbstractButton;
    916import javax.swing.BorderFactory;
     17import javax.swing.Box;
     18import javax.swing.JButton;
     19import javax.swing.JFrame;
    1020import javax.swing.JLabel;
    1121import javax.swing.JPanel;
     
    1424import org.openstreetmap.josm.actions.JosmAction;
    1525import org.openstreetmap.josm.actions.HelpAction.Helpful;
     26import org.openstreetmap.josm.tools.GBC;
     27import org.openstreetmap.josm.tools.ImageProvider;
    1628
    1729/**
     
    4658        public final String prefName;
    4759
    48         public ToggleDialog(String name, String iconName, String tooltip, int shortCut, int preferredHeight) {
     60        public JPanel parent;
     61        private final JPanel titleBar = new JPanel(new GridBagLayout());
     62
     63        public ToggleDialog(final String name, String iconName, String tooltip, int shortCut, int preferredHeight) {
     64                super(new BorderLayout());
    4965                this.prefName = iconName;
    5066                setPreferredSize(new Dimension(330,preferredHeight));
     
    5369                action.putValue("help", helpId.substring(0, helpId.length()-6));
    5470                setLayout(new BorderLayout());
    55                 add(new JLabel(name), BorderLayout.NORTH);
     71
     72                titleBar.add(new JLabel(name), GBC.std());
     73                titleBar.add(Box.createHorizontalGlue(),GBC.std().fill(GBC.HORIZONTAL));
     74
     75                JButton sticky = new JButton(ImageProvider.get("misc", "sticky"));
     76                sticky.setBorder(BorderFactory.createEmptyBorder());
     77                final ActionListener stickyActionListener = new ActionListener(){
     78                        public void actionPerformed(ActionEvent e) {
     79                                final JFrame f = new JFrame(name);
     80                                f.setAlwaysOnTop(true);
     81                                parent.remove(ToggleDialog.this);
     82                                f.getContentPane().add(ToggleDialog.this);
     83                                f.addWindowListener(new WindowAdapter(){
     84                                        @Override public void windowClosing(WindowEvent e) {
     85                                                titleBar.setVisible(true);
     86                                                f.getContentPane().removeAll();
     87                                                parent.add(ToggleDialog.this);
     88                                                f.dispose();
     89
     90                                                // doLayout() - workaround
     91                                                setVisible(false);
     92                                                setVisible(true);
     93
     94                                                Main.pref.put(action.prefname+".docked", true);
     95                                        }
     96                                });
     97                                f.addComponentListener(new ComponentAdapter(){
     98                                        @Override public void componentMoved(ComponentEvent e) {
     99                                                Main.pref.put(action.prefname+".bounds", f.getX()+","+f.getY()+","+f.getWidth()+","+f.getHeight());
     100                    }
     101                                });
     102                                String bounds = Main.pref.get(action.prefname+".bounds",null);
     103                                if (bounds != null) {
     104                                        String[] b = bounds.split(",");
     105                                        f.setBounds(Integer.parseInt(b[0]),Integer.parseInt(b[1]),Integer.parseInt(b[2]),Integer.parseInt(b[3]));
     106                                } else
     107                                        f.pack();
     108                                Main.pref.put(action.prefname+".docked", false);
     109                                f.setVisible(true);
     110                                titleBar.setVisible(false);
     111
     112                                // doLayout() - workaround
     113                                parent.setVisible(false);
     114                                parent.setVisible(true);
     115                        }
     116                };
     117                sticky.addActionListener(stickyActionListener);
     118
     119                titleBar.add(sticky);
     120                add(titleBar, BorderLayout.NORTH);
     121
    56122                setVisible(false);
    57123                setBorder(BorderFactory.createEtchedBorder());
     124
     125                if (!Main.pref.getBoolean(action.prefname+".docked", true)) {
     126                        EventQueue.invokeLater(new Runnable(){
     127                                public void run() {
     128                                        stickyActionListener.actionPerformed(null);
     129                }
     130                        });
     131                }
    58132        }
    59133
  • src/org/openstreetmap/josm/gui/layer/Layer.java

    r138 r198  
    8888       
    8989        abstract public Component[] getMenuEntries();
     90       
     91        /**
     92         * Called, when the layer is removed from the mapview and is going to be
     93         * destroyed.
     94         *
     95         * This is because the Layer constructor can not add itself safely as listener
     96         * to the layerlist dialog, because there may be no such dialog yet (loaded
     97         * via command line parameter).
     98         */
     99        public void destroy() {}
    90100}
  • src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java

    r180 r198  
    2727import javax.swing.JRadioButton;
    2828import javax.swing.JSeparator;
    29 import javax.swing.SwingUtilities;
    3029import javax.swing.filechooser.FileFilter;
    3130
     
    4241import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    4342import org.openstreetmap.josm.gui.MapView;
    44 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    4543import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    4644import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
     
    111109                this.data = data;
    112110                Main.pref.listener.add(this);
    113                 SwingUtilities.invokeLater(new Runnable(){
    114                         public void run() {
    115                                 Main.map.mapView.addLayerChangeListener(new LayerChangeListener(){
    116                                         public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
    117                                         public void layerAdded(Layer newLayer) {}
    118                                         public void layerRemoved(Layer oldLayer) {
    119                                                 Main.pref.listener.remove(RawGpsLayer.this);
    120                                         }
    121                                 });
    122                         }
    123                 });
    124111        }
    125112
     
    318305                        Main.map.repaint();
    319306        }
     307
     308        @Override public void destroy() {
     309                Main.pref.listener.remove(RawGpsLayer.this);
     310    }
    320311}
Note: See TracChangeset for help on using the changeset viewer.