Ignore:
Timestamp:
2010-10-20T00:26:35+02:00 (14 years ago)
Author:
oliverw
Message:

Implemented cursor feature.

Location:
applications/editors/josm/plugins/ElevationProfile
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/ElevationProfile

    • Property svn:ignore set to
      lib

      build

      doc

      test
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationProfileBase.java

    r23709 r23721  
    443443         */
    444444        public boolean hasElevationData() {
    445                 return minHeight == maxHeight;
     445                return minHeight != maxHeight;
    446446        }
    447447
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationProfilePlugin.java

    r23709 r23721  
    6565                if (newFrame != null) {
    6666                        newFrame.addToggleDialog(eleProfileDlg);
    67                         eleProfileDlg.addModelListener(eleMode);
     67                        eleProfileDlg.addModelListener(eleMode);                       
    6868                }
    6969               
     
    7373                        Main.map.mapView.addPropertyChangeListener(eleProfileDlg);
    7474                        MapView.addLayerChangeListener(eleProfileDlg);
     75                        eleProfileDlg.setProfileLayer(getCurrentLayer());
    7576                }
    7677        }
     
    8485                if(currentLayer == null){
    8586                        currentLayer = new ElevationProfileLayer("Elevation profile");
    86                         Main.main.addLayer(currentLayer);
     87                        Main.main.addLayer(currentLayer);                       
    8788                }
    8889                return currentLayer;
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationWayPointKind.java

    r23709 r23721  
    2121public enum ElevationWayPointKind {
    2222        Plain,                          // Simple way point
     23        Highlighted,            // Highlighted waypoint
    2324        StartPoint,                     // First way point
    2425        EndPoint,                       // Last way point
     
    2728        ElevationGain,          // Elevation gain
    2829        ElevationLoss,          // Elevation loss       
    29         FullHour                        // Full Hour
     30        FullHour                        // Full Hour   
    3031}
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java

    r23709 r23721  
    8888                                return LOW_COLOR;
    8989                        }
     90                case Highlighted:
     91                        return Color.ORANGE;
    9092                case ElevationGain:
    9193                        return Color.GREEN;
     
    98100                case MinElevation:
    99101                        return LOW_COLOR;
    100 
     102               
    101103                case StartPoint:
    102104                        return START_COLOR;
     
    177179                if (kind == ElevationWayPointKind.FullHour) {
    178180                        int hour = WayPointHelper.getHourOfWayPoint(wpt);                       
    179                         drawLabel(String.format("%d:00", hour), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g);
     181                        drawLabel(String.format("%02d:00", hour), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g);
     182                }
     183               
     184                if (kind == ElevationWayPointKind.Highlighted) {
     185                        int eleH = (int) WayPointHelper.getElevation(wpt);
     186                        int hour = WayPointHelper.getHourOfWayPoint(wpt);                       
     187                        int min = WayPointHelper.getMinuteOfWayPoint(wpt);
     188                        drawSphere(g, Color.WHITE, c, pnt.x, pnt.y, r2 * 2);
     189                        drawLabel(String.format("%02d:%02d", hour, min), pnt.x, pnt.y - g.getFontMetrics().getHeight(), g);
     190                        drawLabel(String.format("%dm", eleH), pnt.x, pnt.y + g.getFontMetrics().getHeight(), g);
    180191                }
    181192        }
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationColors.java

    r23709 r23721  
    2626        public static Color EPLightBlue = new Color(176, 187, 208);
    2727       
     28        public static Color EPOrange = new Color(180, 140, 115);
     29       
    2830        public static Color EPLightBeige = new Color(235, 235, 215);
    2931        public static Color EPMidBeige = new Color(227, 222, 215);
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java

    r23709 r23721  
    3838import javax.swing.JTextField;
    3939
     40import org.openstreetmap.josm.Main;
    4041import org.openstreetmap.josm.data.gpx.GpxData;
    4142import org.openstreetmap.josm.gui.MapView;
     
    8182        private JRadioButton geoidFixed;
    8283        private JTextField geoidFixedValue;
     84       
     85        private ElevationProfileLayer profileLayer;
    8386
    8487        /**
     
    118121                        Shortcut shortcut, int preferredHeight, boolean defShow) {
    119122                super(name, iconName, tooltip, shortcut, preferredHeight, defShow);
    120 
     123                               
    121124                JPanel dataPanel = new JPanel(new GridBagLayout());
    122125                GridBagConstraints c = new GridBagConstraints();
     
    273276                                updateView();
    274277                        }
     278                }
     279        }
     280
     281        public ElevationProfileLayer getProfileLayer() {
     282                return profileLayer;
     283        }
     284
     285        public void setProfileLayer(ElevationProfileLayer profileLayer) {
     286                if (this.profileLayer != profileLayer) {
     287                        if (this.profileLayer != null) {
     288                                profPanel.removeSelectionListener(this.profileLayer);
     289                        }
     290                        this.profileLayer = profileLayer;
     291                        profPanel.addSelectionListener(this.profileLayer);
    275292                }
    276293        }
     
    399416                                layerMap.put(newLayer, em);
    400417                        }
    401 
     418                       
     419                        System.out.println("Active layer: " + newLayer.getName());
    402420                        ElevationModel em = layerMap.get(newLayer);
    403421                        em.setSliceSize(slices);
    404422                        setModel(em);
     423                       
    405424                }
    406425        }
     
    408427        public void layerAdded(Layer newLayer) {
    409428                createLayer(newLayer);
     429                System.out.println("layerAdded: " + newLayer.getName());
    410430        }
    411431
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java

    r23709 r23721  
    4141 */
    4242public class ElevationProfileLayer extends
    43                 org.openstreetmap.josm.gui.layer.Layer {
     43org.openstreetmap.josm.gui.layer.Layer implements IElevationProfileSelectionListener {
    4444        private IElevationProfile profile;
    4545        private IElevationProfileRenderer renderer = new DefaultElevationProfileRenderer();
     46        private WayPoint selWayPoint = null;
    4647
    4748        /**
     
    154155                WayPoint lastWpt = null;
    155156                int lastEle = 0;
     157                int index = 0;
    156158
    157159                if (profile != null) {
     
    159161                                int ele = (int) WayPointHelper.getElevation(wpt);
    160162
    161                                 if (lastWpt != null) {
    162                                         int h1 = WayPointHelper.getHourOfWayPoint(wpt);
    163                                         int h2 = WayPointHelper.getHourOfWayPoint(lastWpt);
    164                                         if (h1 != h2) { // hour changed?
     163                                if (selWayPoint == null) {
     164                                        if (lastWpt != null) {                                 
     165                                                int h1 = WayPointHelper.getHourOfWayPoint(wpt);
     166                                                int h2 = WayPointHelper.getHourOfWayPoint(lastWpt);
     167                                                if (h1 != h2) { // hour changed?
     168                                                        renderer.renderWayPoint(g, profile, mv, wpt,
     169                                                                        ElevationWayPointKind.FullHour);
     170                                                } else { // check for elevation gain
     171                                                        if (ele > lastEle) {
     172                                                                renderer.renderWayPoint(g, profile, mv, wpt,
     173                                                                                ElevationWayPointKind.ElevationGain);
     174                                                        } else {
     175                                                                renderer.renderWayPoint(g, profile, mv, wpt,
     176                                                                                ElevationWayPointKind.ElevationLoss);
     177                                                        }
     178                                                }
     179                                        }
     180                                } else {
     181                                        if (selWayPoint == wpt)  {
    165182                                                renderer.renderWayPoint(g, profile, mv, wpt,
    166                                                                 ElevationWayPointKind.FullHour);
    167                                         } else { // check for elevation gain
     183                                                        ElevationWayPointKind.Highlighted);
     184                                        } else {
    168185                                                if (ele > lastEle) {
    169186                                                        renderer.renderWayPoint(g, profile, mv, wpt,
     
    175192                                        }
    176193                                }
    177                                
     194
    178195                                // remember for next iteration
    179196                                lastEle = (int) WayPointHelper.getElevation(wpt);
    180197                                lastWpt = wpt;
     198                                index++;
    181199                        }
    182200
     
    206224        }
    207225
     226        @Override
     227        public void selectedWayPointChanged(WayPoint newWayPoint) {
     228                if (selWayPoint != newWayPoint) {
     229                        selWayPoint = newWayPoint;
     230                        Main.map.repaint();
     231                }
     232        }
     233
    208234}
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java

    r23709 r23721  
    55import java.awt.Color;
    66import java.awt.Dimension;
     7import java.awt.Event;
    78import java.awt.Font;
    89import java.awt.FontMetrics;
     
    1112import java.awt.event.ComponentEvent;
    1213import java.awt.event.ComponentListener;
     14import java.awt.event.MouseEvent;
     15import java.awt.event.MouseListener;
     16import java.awt.event.MouseMotionListener;
    1317import java.text.Format;
    1418import java.text.SimpleDateFormat;
     19import java.util.ArrayList;
    1520import java.util.Date;
     21import java.util.List;
    1622
    1723import javax.swing.BorderFactory;
     
    2430import org.openstreetmap.josm.plugins.elevation.WayPointHelper;
    2531
    26 public class ElevationProfilePanel extends JPanel implements ComponentListener {
     32/**
     33 * Provides the panel showing the elevation profile.
     34 * @author Oliver
     35 *
     36 */
     37public class ElevationProfilePanel extends JPanel implements ComponentListener, MouseMotionListener {
    2738        /**
    2839         * Serial version UID
     
    3243        private Rectangle plotArea;
    3344        private IElevationProfileRenderer renderer = new DefaultElevationProfileRenderer();
    34 
     45        private int selectedIndex = -1;
     46        private List<IElevationProfileSelectionListener> selectionChangedListeners = new ArrayList<IElevationProfileSelectionListener>();
     47        private boolean isPainting;
     48
     49        /**
     50         * Constructs a new ElevationProfilePanel with the given elevation profile.
     51         * @param profile The elevation profile to show in the panel.
     52         */
    3553        public ElevationProfilePanel(IElevationProfile profile) {
    3654                super();
     
    4058                createOrUpdatePlotArea();
    4159                addComponentListener(this);
    42         }
    43 
     60                addMouseMotionListener(this);
     61        }
     62
     63        /**
     64         * Gets the elevation profile instance.
     65         * @return
     66         */
    4467        public IElevationProfile getProfile() {
    4568                return profile;
    4669        }
    4770
     71        /**
     72         * Sets the new elevation profile instance.
     73         * @param profile
     74         */
    4875        public void setElevationModel(IElevationProfile profile) {
    49                 this.profile = profile;
    50         }
    51 
     76                if (this.profile != profile) {
     77                        this.profile = profile;
     78                        invalidate();
     79                }
     80        }
     81
     82        /**
     83         * Gets the plot area coordinates.
     84         * @return
     85         */
    5286        public Rectangle getPlotArea() {
    5387                return plotArea;
    5488        }
    5589
     90        /**
     91         * Sets the plot area coordinates.
     92         * @param plotArea
     93         */
    5694        public void setPlotArea(Rectangle plotArea) {
    5795                this.plotArea = plotArea;
    5896        }
    59 
     97       
     98        /**
     99         * Gets the selected index of the bar. 
     100         * @return
     101         */
     102        public int getSelectedIndex() {
     103                return selectedIndex;
     104        }
     105
     106        /**
     107         * Sets the selected index of the bar.
     108         * @param selectedIndex
     109         */
     110        public void setSelectedIndex(int selectedIndex) {
     111                this.selectedIndex = selectedIndex;
     112        }
     113       
     114        /**
     115         * Gets the selected (highlighted) way point.
     116         * @return The selected way point or null, if no way point is selected.
     117         */
     118        public WayPoint getSelectedWayPoint() {
     119                if (this.selectedIndex != -1 && profile != null && profile.getWayPoints() != null && profile.getWayPoints().size() > this.selectedIndex) {
     120                        return profile.getWayPoints().get(this.selectedIndex);
     121                } else {
     122                        return null;                   
     123                }
     124        }
     125       
     126        /**
     127         * Adds a selection listener.
     128         * @param listener The listener instance to add.
     129         */
     130        public void addSelectionListener(IElevationProfileSelectionListener listener) {
     131                if (listener == null) return;
     132               
     133                selectionChangedListeners.add(listener);
     134        }
     135       
     136        /**
     137         * Removes a selection listener from the list.
     138         * @param listener The listener instance to remove.
     139         */
     140        public void removeSelectionListener(IElevationProfileSelectionListener listener) {
     141                if (listener == null) return;
     142               
     143                selectionChangedListeners.remove(listener);
     144        }
     145       
     146        /**
     147         * Removes all selection listeners.
     148         */
     149        public void removeAllSelectionListeners() {
     150                selectionChangedListeners.clear();     
     151        }
     152       
     153        protected void fireSelectionChanged(WayPoint selWayPoint) {
     154                for (IElevationProfileSelectionListener listener : selectionChangedListeners) {
     155                        listener.selectedWayPointChanged(selWayPoint);
     156                }
     157        }
     158
     159        /* (non-Javadoc)
     160         * @see javax.swing.JComponent#paint(java.awt.Graphics)
     161         */
    60162        @Override
    61163        public void paint(Graphics g) {
     164                isPainting = true;
    62165                super.paint(g);
    63166
     
    91194                } finally {
    92195                        setFont(oldFont);
    93                 }
    94         }
    95 
     196                        isPainting = false;
     197                }
     198        }
     199
     200        /**
     201         * Draw a string with a specified alignment.
     202         * @param s The text to display.
     203         * @param x The x coordinate.
     204         * @param y The y coordinate.
     205         * @param align The text alignment.
     206         * @param g The graphics context.
     207         * @return The resulting rectangle of the drawn string.
     208         */
    96209        private Rectangle drawAlignedString(String s, int x, int y,
    97210                        TextAlignment align, Graphics g) {
     
    115228        }
    116229
     230        /**
     231         * Draw a string which is horizontally centered around (x,y).
     232         * @param s The text to display.
     233         * @param x The x coordinate.
     234         * @param y The y coordinate.
     235         * @param g The graphics context.
     236         * @return The resulting rectangle of the drawn string.
     237         */
    117238        private void drawHCenteredString(String s, int x, int y, Graphics g) {
    118                 FontMetrics fm = g.getFontMetrics();
    119                 int xoff = fm.stringWidth(s) / 2;
    120                 // int yoff = (fm.getAscent() + fm.getDescent()) / 2;
    121 
    122                 g.drawString(s, x - xoff, y);
    123         }
    124 
     239                drawAlignedString(s, x, y, TextAlignment.Centered, g);
     240        }
     241
     242        /**
     243         * Formats the date in a predefined manner: "21. Oct 2010, 12:10".
     244         * @param date
     245         * @return
     246         */
    125247        private String formatDate(Date date) {
    126248                Format formatter = new SimpleDateFormat("d MMM yy, HH:mm");
     
    129251        }
    130252
     253        /**
     254         * Helper function to draw elevation axes.
     255         * @param g
     256         */
    131257        private void drawElevationLines(Graphics g) {
    132258                double diff = profile.getHeightDifference();
     
    257383                        Color c = renderer.getColorForWaypoint(profile, wpt,
    258384                                        ElevationWayPointKind.Plain);
     385                       
     386                        if (i == this.selectedIndex) {
     387                                c = renderer.getColorForWaypoint(profile, wpt, ElevationWayPointKind.Highlighted);
     388                        }
    259389                        int yEle = getYForEelevation(eleVal);
    260390                        int x = getPlotLeft() + i;
     
    276406        }
    277407
     408       
     409        /* (non-Javadoc)
     410         * @see javax.swing.JComponent#paintBorder(java.awt.Graphics)
     411         */
    278412        @Override
    279413        protected void paintBorder(Graphics g) {
     
    284418        }
    285419
     420
     421        /**
     422         * Determines the size of the plot area depending on the panel size.
     423         */
    286424        private void createOrUpdatePlotArea() {
    287425                Dimension caSize = getSize();
     
    306444        public void componentHidden(ComponentEvent arg0) {
    307445                // TODO Auto-generated method stub
    308 
    309446        }
    310447
     
    318455        public void componentMoved(ComponentEvent arg0) {
    319456                // TODO Auto-generated method stub
    320 
    321457        }
    322458
     
    343479        }
    344480
     481        @Override
     482        public void mouseDragged(MouseEvent arg0) {
     483                // TODO Auto-generated method stub
     484               
     485        }
     486
     487        @Override
     488        public void mouseMoved(MouseEvent arg0) {
     489                if (isPainting || arg0.isControlDown() || arg0.isAltDown() || arg0.isShiftDown()) arg0.consume();
     490               
     491                int x = arg0.getX();
     492                int l = this.getX();
     493                int pl = this.getPlotLeft();
     494                int newIdx = x - l - pl;
     495               
     496                if (newIdx != this.selectedIndex && newIdx > 0) {
     497                        this.selectedIndex = newIdx;
     498                        this.repaint();         
     499                        fireSelectionChanged(getSelectedWayPoint());
     500                }
     501        }
     502
    345503}
Note: See TracChangeset for help on using the changeset viewer.