Ignore:
Timestamp:
2011-07-13T10:41:01+02:00 (13 years ago)
Author:
stoecker
Message:

allow to color the entries in layer list dialog according to assigned layer drawing color

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r4208 r4230  
    1010import java.awt.BasicStroke;
    1111import java.awt.Color;
     12import java.awt.Component;
    1213import java.awt.Dimension;
    1314import java.awt.Graphics2D;
     
    3435import javax.swing.ButtonGroup;
    3536import javax.swing.Icon;
    36 import javax.swing.JColorChooser;
    3737import javax.swing.JFileChooser;
    3838import javax.swing.JLabel;
    3939import javax.swing.JList;
     40import javax.swing.JMenuItem;
    4041import javax.swing.JOptionPane;
    4142import javax.swing.JPanel;
     
    219220    }
    220221
    221     static public Color getColor(String name) {
    222         return Main.pref.getColor(marktr("gps point"), name != null ? "layer " + name : null, Color.gray);
     222    @Override
     223    public Color getColor(boolean ignoreCustom) {
     224        Color c = Main.pref.getColor(marktr("gps point"), "layer " + getName(), Color.gray);
     225
     226        return ignoreCustom || getColorMode() == colorModes.none ? c : null;
     227    }
     228
     229    public colorModes getColorMode() {
     230        try {
     231            return colorModes.values()[Main.pref.getInteger("draw.rawgps.colors", "layer "+getName(), 0)];
     232        } catch (Exception e) {
     233        }
     234        return colorModes.none;
     235    }
     236
     237    /* for preferences */
     238    static public Color getGenericColor() {
     239        return Main.pref.getColor(marktr("gps point"), Color.gray);
    223240    }
    224241
     
    230247                LayerListDialog.getInstance().createDeleteLayerAction(),
    231248                SeparatorLayerAction.INSTANCE,
    232                 new CustomizeColor(),
    233                 new CustomizeLineDrawing(),
     249                new CustomizeColor(this),
     250                new CustomizeLineDrawing(this),
    234251                new ConvertToDataLayerAction(),
    235252                SeparatorLayerAction.INSTANCE,
     
    243260                new LayerSaveAction(this),
    244261                new LayerSaveAsAction(this),
    245                 new CustomizeColor(),
    246                 new CustomizeLineDrawing(),
     262                new CustomizeColor(this),
     263                new CustomizeLineDrawing(this),
    247264                new ImportImages(),
    248265                new ImportAudio(),
     
    375392         ****************************************************************/
    376393        // Long startTime = System.currentTimeMillis();
    377         Color neutralColor = getColor(getName());
     394        Color neutralColor = getColor(true);
    378395        // also draw lines between points belonging to different segments
    379         boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force");
     396        boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force", "layer "+getName(), false);
    380397        // draw direction arrows on the lines
    381         boolean direction = Main.pref.getBoolean("draw.rawgps.direction");
     398        boolean direction = Main.pref.getBoolean("draw.rawgps.direction", "layer "+getName(), false);
    382399        // don't draw lines if longer than x meters
    383         int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth",0);
     400        int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth", "layer "+getName(), 0);
    384401
    385402        int maxLineLength;
     403        boolean lines;
    386404        if (this.isLocalFile) {
    387             maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", -1);
     405            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", "layer "+getName(), -1);
     406            lines = Main.pref.getBoolean("draw.rawgps.lines.local", "layer "+getName(), true);
    388407        } else {
    389             maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", 200);
    390         }
    391         // draw line between points, global setting
    392         boolean lines = (Main.pref.getBoolean("draw.rawgps.lines", true) || (Main.pref
    393                 .getBoolean("draw.rawgps.lines.localfiles") && this.isLocalFile));
    394         String linesKey = "draw.rawgps.lines.layer " + getName();
    395         // draw lines, per-layer setting
    396         if (Main.pref.hasKey(linesKey)) {
    397             lines = Main.pref.getBoolean(linesKey);
     408            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", "layer "+getName(), 200);
     409            lines = Main.pref.getBoolean("draw.rawgps.lines", "layer "+getName(), true);
    398410        }
    399411        // paint large dots for points
    400         boolean large = Main.pref.getBoolean("draw.rawgps.large");
    401         boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", true);
     412        boolean large = Main.pref.getBoolean("draw.rawgps.large", "layer "+getName(), false);
     413        int largesize = Main.pref.getInteger("draw.rawgps.large.size", "layer "+getName(), 3);
     414        boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", "layer "+getName(), false);
    402415        // color the lines
    403         colorModes colored = colorModes.none;
    404         try {
    405             colored = colorModes.values()[Main.pref.getInteger("draw.rawgps.colors", 0)];
    406         } catch (Exception e) {
    407         }
     416        colorModes colored = getColorMode();
    408417        // paint direction arrow with alternate math. may be faster
    409         boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection");
     418        boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection", "layer "+getName(), false);
    410419        // don't draw arrows nearer to each other than this
    411         int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", 40);
     420        int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", "layer "+getName(), 40);
    412421        // allows to tweak line coloring for different speed levels.
    413         int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45);
     422        int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", "layer "+getName(), 45);
    414423
    415424        if(lineWidth != 0)
     
    640649                }
    641650                if (large) {
    642                     g.fillRect(screen.x-1, screen.y-1, 3, 3);
     651                    g.fillRect(screen.x-1, screen.y-1, largesize, largesize);
    643652                }
    644653            } // end for trkpnt
     
    12961305    }
    12971306
    1298     private class CustomizeLineDrawing extends AbstractAction {
    1299 
    1300         CustomizeLineDrawing() {
     1307    private class CustomizeLineDrawing extends AbstractAction implements LayerAction, MultiLayerAction {
     1308        List<Layer> layers;
     1309
     1310        public CustomizeLineDrawing(List<Layer> l) {
     1311            this();
     1312            layers = l;
     1313        }
     1314
     1315        public CustomizeLineDrawing(Layer l) {
     1316            this();
     1317            layers = new LinkedList<Layer>();
     1318            layers.add(l);
     1319        }
     1320
     1321        private CustomizeLineDrawing() {
    13011322            super(tr("Customize line drawing"), ImageProvider.get("mapmode/addsegment"));
     1323        }
     1324
     1325        @Override
     1326        public boolean supportLayers(List<Layer> layers) {
     1327            for(Layer layer: layers) {
     1328                if(!(layer instanceof GpxLayer))
     1329                    return false;
     1330            }
     1331            return true;
     1332        }
     1333
     1334        @Override
     1335        public Component createMenuComponent() {
     1336            return new JMenuItem(this);
     1337        }
     1338
     1339        @Override
     1340        public Action getMultiLayerAction(List<Layer> layers) {
     1341            return new CustomizeLineDrawing(layers);
    13021342        }
    13031343
    13041344        @Override
    13051345        public void actionPerformed(ActionEvent e) {
     1346            /* FIXME: Add all the other GPX settings here as well. Unify with DrawingPreferences
     1347               Each option should be able to "use global settings". Attention with the handling
     1348               of local layer for the two local layer options! */
    13061349            JRadioButton[] r = new JRadioButton[3];
    13071350            r[0] = new JRadioButton(tr("Use global settings."));
     
    13141357                panel.add(b);
    13151358            }
    1316             String propName = "draw.rawgps.lines.layer " + getName();
     1359            String propbase = isLocalFile ? "draw.rawgps.lines.local" : "draw.rawgps.lines";
     1360            String propName = propbase + ".layer " + layers.get(0).getName();
    13171361            if (Main.pref.hasKey(propName)) {
    13181362                group.setSelected(r[Main.pref.getBoolean(propName) ? 1 : 2].getModel(), true);
     
    13291373                // continue
    13301374            }
    1331             if (group.getSelection() == r[0].getModel()) {
    1332                 Main.pref.put(propName, null);
    1333             } else {
    1334                 Main.pref.put(propName, group.getSelection() == r[1].getModel());
     1375            for(Layer layer : layers) {
     1376                propName = propbase + ".layer " + layer.getName();
     1377                if (group.getSelection() == r[0].getModel()) {
     1378                    Main.pref.put(propName, null);
     1379                } else {
     1380                    Main.pref.put(propName, group.getSelection() == r[1].getModel());
     1381                }
    13351382            }
    13361383            Main.map.repaint();
    13371384        }
    1338     }
    1339 
    1340     private class CustomizeColor extends AbstractAction {
    1341 
    1342         public CustomizeColor() {
    1343             super(tr("Customize Color"), ImageProvider.get("colorchooser"));
    1344             putValue("help", ht("/Action/LayerCustomizeColor"));
    1345         }
    1346 
    1347         @Override
    1348         public void actionPerformed(ActionEvent e) {
    1349             JColorChooser c = new JColorChooser(getColor(getName()));
    1350             Object[] options = new Object[] { tr("OK"), tr("Cancel"), tr("Default") };
    1351             int answer = JOptionPane.showOptionDialog(
    1352                     Main.parent,
    1353                     c,
    1354                     tr("Choose a color"),
    1355                     JOptionPane.OK_CANCEL_OPTION,
    1356                     JOptionPane.PLAIN_MESSAGE,
    1357                     null,
    1358                     options, options[0]
    1359             );
    1360             switch (answer) {
    1361             case 0:
    1362                 Main.pref.putColor("layer " + getName(), c.getColor());
    1363                 break;
    1364             case 1:
    1365                 return;
    1366             case 2:
    1367                 Main.pref.putColor("layer " + getName(), null);
    1368                 break;
    1369             }
    1370             Main.map.repaint();
    1371         }
    1372 
    13731385    }
    13741386
Note: See TracChangeset for help on using the changeset viewer.