Changeset 77 in josm for src/org


Ignore:
Timestamp:
2006-03-31T21:35:26+02:00 (19 years ago)
Author:
imi
Message:

added customizable colores for raw gps layers (popup menu in layer list)

Location:
src/org/openstreetmap/josm
Files:
10 edited

Legend:

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

    r76 r77  
    227227                        if (arguments.remove("--reset-preferences")) {
    228228                                pref.resetToDefault();
    229                                 pref.save();
    230229                        } else
    231230                                pref.load();
     
    234233                        errMsg = "Preferences could not be loaded. Write default preference file to '"+Preferences.getPreferencesDir()+"preferences'.";
    235234                        pref.resetToDefault();
    236                         try {
    237                                 pref.save();
    238                         } catch (IOException e) {
    239                                 e.printStackTrace();
    240                                 errMsg = "Preferences could not be loaded. Reverting to default.";
    241                         }
    242235                }
    243236                if (errMsg != null)
  • src/org/openstreetmap/josm/actions/DownloadAction.java

    r75 r77  
    8989                        int cutPos = osmDataServer.endsWith("/0.2") ? 4 : 5;
    9090                        Main.pref.put("osm-server.url", osmDataServer.substring(0, osmDataServer.length()-cutPos));
    91                         try {
    92                                 Main.pref.save();
    93                         } catch (IOException x) {
    94                                 x.printStackTrace();
    95                                 JOptionPane.showMessageDialog(Main.main, "Could not save the preferences change:\n" + x.getMessage());
    96                         }
    9791                }
    9892
  • src/org/openstreetmap/josm/actions/UploadAction.java

    r75 r77  
    55import java.awt.event.InputEvent;
    66import java.awt.event.KeyEvent;
    7 import java.io.IOException;
    87import java.util.Collection;
    98import java.util.LinkedList;
     
    5453                        int cutPos = osmDataServer.endsWith("/0.2") ? 4 : 5;
    5554                        Main.pref.put("osm-server.url", osmDataServer.substring(0, osmDataServer.length()-cutPos));
    56                         try {
    57                                 Main.pref.save();
    58                         } catch (IOException x) {
    59                                 x.printStackTrace();
    60                                 JOptionPane.showMessageDialog(Main.main, "Could not save the preferences change:\n" + x.getMessage());
    61                         }
    6255                }
    6356
  • src/org/openstreetmap/josm/data/Preferences.java

    r75 r77  
    88import java.io.PrintWriter;
    99import java.util.ArrayList;
    10 import java.util.Collection;
    11 import java.util.LinkedList;
     10import java.util.Map;
    1211import java.util.SortedMap;
    1312import java.util.TreeMap;
     
    6665                return prop;
    6766        }
    68         synchronized public Collection<Entry<String, String>> getAllPrefix(String prefix) {
    69                 LinkedList<Entry<String,String>> all = new LinkedList<Entry<String,String>>();
     67        synchronized public Map<String, String> getAllPrefix(String prefix) {
     68                Map<String,String> all = new TreeMap<String,String>();
    7069                for (Entry<String,String> e : properties.entrySet())
    7170                        if (e.getKey().startsWith(prefix))
    72                                 all.add(e);
     71                                all.put(e.getKey(), e.getValue());
    7372                return all;
    7473        }
     
    8079        synchronized public void put(String key, String value) {
    8180                if (value == null)
    82                         value = "";
    83                 properties.put(key, value);
     81                        properties.remove(key);
     82                else
     83                        properties.put(key, value);
     84                save();
    8485                firePreferenceChanged(key, value);
    8586        }
    8687        synchronized public void put(String key, boolean value) {
    8788                properties.put(key, Boolean.toString(value));
     89                save();
    8890                firePreferenceChanged(key, Boolean.toString(value));
    8991        }
     
    9597
    9698
    97         public void save() throws IOException {
    98                 PrintWriter out = new PrintWriter(new FileWriter(getPreferencesDir()+"preferences"));
    99                 for (Entry<String, String> e : properties.entrySet())
    100                         if (!e.getValue().equals(""))
    101                                 out.println(e.getKey()+"="+e.getValue());
    102                 out.close();
     99        /**
     100         * Called after every put. In case of a problem, do nothing but output the error
     101         * in log.
     102         */
     103        private void save() {
     104                try {
     105                        PrintWriter out = new PrintWriter(new FileWriter(
     106                                        getPreferencesDir() + "preferences"));
     107                        for (Entry<String, String> e : properties.entrySet())
     108                                if (!e.getValue().equals(""))
     109                                        out.println(e.getKey() + "=" + e.getValue());
     110                        out.close();
     111                } catch (IOException e) {
     112                        e.printStackTrace();
     113                        // do not message anything, since this can be called from strange
     114                        // places.
     115                }               
    103116        }
    104117
     
    127140                properties.put("color.selected", ColorHelper.color2html(Color.white));
    128141                properties.put("color.gps point", ColorHelper.color2html(Color.gray));
     142                save();
    129143        }
    130144}
  • src/org/openstreetmap/josm/gui/MapView.java

    r74 r77  
    1111import java.util.LinkedList;
    1212
    13 import javax.swing.event.ChangeEvent;
    14 import javax.swing.event.ChangeListener;
    15 
    1613import org.openstreetmap.josm.Main;
    1714import org.openstreetmap.josm.data.Bounds;
     
    2017import org.openstreetmap.josm.data.osm.DataSet;
    2118import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    22 import org.openstreetmap.josm.data.projection.Projection;
    2319import org.openstreetmap.josm.gui.layer.Layer;
    2420import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    3834 * @author imi
    3935 */
    40 public class MapView extends NavigatableComponent implements ChangeListener {
     36public class MapView extends NavigatableComponent {
    4137
    4238        /**
     
    9288         */
    9389        public void addLayer(Layer layer) {
    94                 // reinitialize layer's data
    95                 layer.init(getProjection());
    96 
    9790                if (layer instanceof OsmDataLayer) {
    9891                        final OsmDataLayer dataLayer = (OsmDataLayer)layer;
     
    322315                        firePropertyChange("scale", oldScale, scale);
    323316        }
    324 
    325         /**
    326          * Notify from the projection, that something has changed.
    327          */
    328         public void stateChanged(ChangeEvent e) {
    329                 // reset all datasets.
    330                 Projection p = getProjection();
    331                 for (Layer l : layers)
    332                         l.init(p);
    333                 recalculateCenterScale();
    334         }
    335317}
  • src/org/openstreetmap/josm/gui/PreferenceDialog.java

    r75 r77  
    88import java.awt.event.ActionEvent;
    99import java.awt.event.ActionListener;
    10 import java.io.IOException;
    11 import java.util.Collection;
     10import java.util.Map;
     11import java.util.TreeMap;
    1212import java.util.Vector;
    1313import java.util.Map.Entry;
     
    7878                        }
    7979
    80                         try {
    81                                 Main.pref.save();
    82                         } catch (IOException x) {
    83                                 x.printStackTrace();
    84                                 JOptionPane.showMessageDialog(PreferenceDialog.this, "Could not save preferences:\n"+x.getMessage());
    85                         }
    8680                        if (requiresRestart)
    8781                                JOptionPane.showMessageDialog(PreferenceDialog.this, "You have to restart JOSM for some settings to take effect.");
     
    212206
    213207               
    214                 Collection<Entry<String,String>> c = Main.pref.getAllPrefix("color.");
     208               
     209                Map<String,String> allColors = new TreeMap<String, String>(Main.pref.getAllPrefix("color."));
     210
    215211                Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
    216                 for (Entry<String,String> e : c) {
     212                for (Entry<String,String> e : allColors.entrySet()) {
    217213                        Vector<Object> row = new Vector<Object>(2);
    218214                        row.add(e.getKey().substring("color.".length()));
     
    229225                };
    230226                colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     227                final TableCellRenderer oldColorsRenderer = colors.getDefaultRenderer(Object.class);
     228                colors.setDefaultRenderer(Object.class, new TableCellRenderer(){
     229                        public Component getTableCellRendererComponent(JTable t, Object o, boolean selected, boolean focus, int row, int column) {
     230                                if (column == 1) {
     231                                        JLabel l = new JLabel(ColorHelper.color2html((Color)o));
     232                                        l.setBackground((Color)o);
     233                                        l.setOpaque(true);
     234                                        return l;
     235                                }
     236                                return oldColorsRenderer.getTableCellRendererComponent(t,o,selected,focus,row,column);
     237                        }
     238                });
     239                colors.getColumnModel().getColumn(1).setWidth(100);
     240               
    231241                JButton colorEdit = new JButton("Choose");
    232242                colorEdit.addActionListener(new ActionListener(){
     
    243253                        }
    244254                });
    245                 final TableCellRenderer oldColorsRenderer = colors.getDefaultRenderer(Object.class);
    246                 colors.setDefaultRenderer(Object.class, new TableCellRenderer(){
    247                         public Component getTableCellRendererComponent(JTable t, Object o, boolean selected, boolean focus, int row, int column) {
    248                                 if (column == 1) {
    249                                         JLabel l = new JLabel(ColorHelper.color2html((Color)o));
    250                                         l.setBackground((Color)o);
    251                                         l.setOpaque(true);
    252                                         return l;
    253                                 }
    254                                 return oldColorsRenderer.getTableCellRendererComponent(t,o,selected,focus,row,column);
    255                         }
    256                 });
    257                 colors.getColumnModel().getColumn(1).setWidth(100);
    258255
    259256                // setting tooltips
  • src/org/openstreetmap/josm/gui/dialogs/LayerList.java

    r75 r77  
    22
    33import java.awt.BorderLayout;
     4import java.awt.Color;
    45import java.awt.Component;
    56import java.awt.Dimension;
     
    89import java.awt.event.ActionListener;
    910import java.awt.event.KeyEvent;
     11import java.awt.event.MouseAdapter;
     12import java.awt.event.MouseEvent;
    1013import java.util.Collection;
    1114
     
    1417import javax.swing.Icon;
    1518import javax.swing.JButton;
     19import javax.swing.JColorChooser;
    1620import javax.swing.JLabel;
    1721import javax.swing.JList;
     22import javax.swing.JMenuItem;
     23import javax.swing.JOptionPane;
    1824import javax.swing.JPanel;
     25import javax.swing.JPopupMenu;
    1926import javax.swing.JScrollPane;
    2027import javax.swing.ListSelectionModel;
     
    2936import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    3037import org.openstreetmap.josm.gui.layer.Layer;
     38import org.openstreetmap.josm.gui.layer.RawGpsDataLayer;
     39import org.openstreetmap.josm.tools.ColorHelper;
    3140import org.openstreetmap.josm.tools.ImageProvider;
    3241import org.openstreetmap.josm.tools.ImageProvider.OverlayPosition;
     
    111120                mapView.addLayerChangeListener(this);
    112121
     122                layers.addMouseListener(new MouseAdapter(){
     123                        private void openPopup(MouseEvent e) {
     124                                final int index = layers.locationToIndex(e.getPoint());
     125                                final Layer layer = (Layer)layers.getModel().getElementAt(index);
     126                                if (!(layer instanceof RawGpsDataLayer))
     127                                        return; // currently only options for raw layers.
     128                                JPopupMenu menu = new JPopupMenu();
     129                                JMenuItem color = new JMenuItem("Customize Color");
     130                                color.addActionListener(new ActionListener(){
     131                                        public void actionPerformed(ActionEvent e) {
     132                                                String col = Main.pref.get("color.layer "+layer.name, Main.pref.get("color.gps point", ColorHelper.color2html(Color.gray)));
     133                                                JColorChooser c = new JColorChooser(ColorHelper.html2color(col));
     134                                                Object[] options = new Object[]{"OK", "Cancel", "Default"};
     135                                                int answer = JOptionPane.showOptionDialog(Main.main, c, "Choose a color", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
     136                                                switch (answer) {
     137                                                case 0:
     138                                                        Main.pref.put("color.layer "+layer.name, ColorHelper.color2html(c.getColor()));
     139                                                        break;
     140                                                case 1:
     141                                                        return;
     142                                                case 2:
     143                                                        Main.pref.put("color.layer "+layer.name, null);
     144                                                        break;
     145                                                }
     146                                                Main.main.repaint();
     147                                        }
     148                                });
     149                                menu.add(color);
     150                                menu.show(LayerList.this, e.getX(), e.getY());
     151                        }
     152                        @Override public void mousePressed(MouseEvent e) {
     153                                if (e.isPopupTrigger())
     154                                        openPopup(e);
     155                        }
     156                        @Override public void mouseReleased(MouseEvent e) {
     157                                if (e.isPopupTrigger())
     158                                        openPopup(e);
     159                        }
     160                });
     161               
     162               
    113163                // Buttons
    114164                JPanel buttonPanel = new JPanel(new GridLayout(1, 5));
     
    222272                updateButtonEnabled();
    223273        }
     274
     275        public void layerMoved(Layer layer, int newPosition) {}
    224276}
  • src/org/openstreetmap/josm/gui/layer/Layer.java

    r71 r77  
    66
    77import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    8 import org.openstreetmap.josm.data.projection.Projection;
    98import org.openstreetmap.josm.gui.MapView;
    109
     
    7978         */
    8079        abstract public void visitBoundingBox(BoundingXYVisitor v);
    81 
    82         /**
    83          * Initialize the internal dataset with the given projection.
    84          */
    85         abstract public void init(Projection projection);
    8680}
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r74 r77  
    2121import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    2222import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
    23 import org.openstreetmap.josm.data.projection.Projection;
    2423import org.openstreetmap.josm.gui.MapView;
    2524import org.openstreetmap.josm.tools.ImageProvider;
     
    138137                for (Node n : data.nodes)
    139138                        v.visit(n);
    140         }
    141 
    142         @Override
    143         public void init(Projection projection) {
    144                 for (Node n : data.nodes)
    145                         projection.latlon2eastNorth(n.coor);
    146139        }
    147140
  • src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java

    r75 r77  
    1414import org.openstreetmap.josm.data.coor.LatLon;
    1515import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    16 import org.openstreetmap.josm.data.projection.Projection;
    1716import org.openstreetmap.josm.gui.MapView;
    1817import org.openstreetmap.josm.tools.ColorHelper;
     
    2827
    2928        private static Icon icon;
    30 
     29       
    3130        /**
    3231         * A list of ways which containing a list of points.
     
    3837                super(name);
    3938                this.data = data;
    40                
     39
     40                eastNorth = new LinkedList<Collection<EastNorth>>();
     41                for (Collection<LatLon> c : data) {
     42                        Collection<EastNorth> eastNorthList = new LinkedList<EastNorth>();
     43                        for (LatLon ll : c)
     44                                eastNorthList.add(Main.proj.latlon2eastNorth(ll));
     45                        this.eastNorth.add(eastNorthList);
     46                }
     47
    4148                Main.pref.addPreferenceChangedListener(new PreferenceChangedListener(){
    4249                        public void preferenceChanged(String key, String newValue) {
    43                                 if (Main.main.getMapFrame() == null) {
    44                                         Main.pref.removePreferenceChangedListener(this);
    45                                         return;
    46                                 }
    47                                 if (key.equals("drawRawGpsLines") || key.equals("forceRawGpsLines"))
     50                                if (Main.main.getMapFrame() != null && (key.equals("drawRawGpsLines") || key.equals("forceRawGpsLines")))
    4851                                        Main.main.getMapFrame().repaint();
    4952                        }
     
    6467        public void paint(Graphics g, MapView mv) {
    6568                String gpsCol = Main.pref.get("color.gps point");
    66                 if (gpsCol.equals(""))
     69                String gpsColSpecial = Main.pref.get("color.layer "+name);
     70                if (!gpsColSpecial.equals(""))
     71                        g.setColor(ColorHelper.html2color(gpsColSpecial));
     72                else if (!gpsCol.equals(""))
     73                        g.setColor(ColorHelper.html2color(gpsCol));
     74                else
    6775                        g.setColor(Color.GRAY);
    68                 else
    69                         g.setColor(ColorHelper.html2color(gpsCol));
    7076                Point old = null;
    7177                for (Collection<EastNorth> c : eastNorth) {
     
    108114                                v.visit(eastNorth);
    109115        }
    110 
    111         @Override
    112         public void init(Projection projection) {
    113                 eastNorth = new LinkedList<Collection<EastNorth>>();
    114                 for (Collection<LatLon> c : data) {
    115                         Collection<EastNorth> eastNorthList = new LinkedList<EastNorth>();
    116                         for (LatLon ll : c)
    117                                 eastNorthList.add(Main.proj.latlon2eastNorth(ll));
    118                         this.eastNorth.add(eastNorthList);
    119                 }
    120         }
    121116}
Note: See TracChangeset for help on using the changeset viewer.