Ignore:
Timestamp:
2011-07-24T19:07:08+02:00 (13 years ago)
Author:
akks
Message:

'InfoMode initial commit'

Location:
applications/editors/josm/plugins/infomode
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/infomode/nbproject/project.xml

    r26364 r26389  
    2222                    <encoding>UTF-8</encoding>
    2323                </source-folder>
     24                <build-file>
     25                    <location>../../dist/InfoMode.jar</location>
     26                </build-file>
    2427            </folders>
    2528            <ide-actions>
     
    3740                    <target>runjosm</target>
    3841                </action>
     42                <action name="debug">
     43                    <script>nbproject/ide-targets.xml</script>
     44                    <target>debug-nb</target>
     45                </action>
    3946            </ide-actions>
     47            <export>
     48                <type>jar</type>
     49                <location>../../dist/InfoMode.jar</location>
     50                <build-target>install</build-target>
     51            </export>
    4052            <view>
    4153                <items>
     
    5365                    <ide-action name="clean"/>
    5466                    <ide-action name="run"/>
     67                    <ide-action name="debug"/>
    5568                </context-menu>
    5669            </view>
     
    6174                <package-root>src</package-root>
    6275                <classpath mode="compile">../../core/src</classpath>
     76                <built-to>../../dist/InfoMode.jar</built-to>
    6377                <source-level>1.6</source-level>
    6478            </compilation-unit>
  • applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoMode.java

    r26364 r26389  
    2525import java.awt.event.InputEvent;
    2626import java.awt.event.KeyEvent;
    27 import java.text.DateFormat;
    28 import java.util.Locale;
     27import java.util.HashSet;
     28import java.util.Set;
     29import javax.swing.Popup;
     30import javax.swing.PopupFactory;
    2931
    3032import org.openstreetmap.josm.Main;
     
    4951    private boolean oldShift;
    5052    private EastNorth pos;
    51     DateFormat df;
     53    private WayPoint wpOld;
     54    private Popup oldPopup;
     55    private InfoPanel infoPanel;
    5256
    5357    InfoMode(MapFrame mapFrame) {
     
    5660                tr("Mode: {0}", tr("GPX info mode")),
    5761                KeyEvent.VK_BACK_SLASH, Shortcut.GROUP_EDIT), mapFrame, Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    58         df = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.DEFAULT, Locale.getDefault());
     62        infoPanel=new InfoPanel();
    5963       
    6064    }
     
    9296
    9397        Main.map.mapView.removeTemporaryLayer(this);
     98        if (oldPopup!=null) oldPopup.hide();
    9499
    95100        try {
     
    119124           
    120125            double minDist=1e9,d,len=0;
    121             WayPoint wp=null;
     126            WayPoint wp=null,oldWp=null,prevWp=null;
    122127            GpxTrack trk=null;
    123128            for (GpxTrack track : gpxL.data.tracks) {
     
    125130                    for (WayPoint S : seg.getWayPoints()) {
    126131                        d = S.getEastNorth().distance(pos);
    127                         if (d<minDist && d<10) {
     132                        if (d<minDist && d<100) {
    128133                            minDist = d;
     134                            prevWp=oldWp;
    129135                            wp=S;
    130136                            trk=track;
    131137                            }
    132                         if (track==trk) len+=seg.length();
    133                         }
     138                        oldWp=wp;
    134139                    }
     140                }
    135141            }
    136142            if (wp!=null) {
    137143                Point p = mv.getPoint(wp.getCoor());
     144                               
    138145                g.setColor(Color.RED);
    139146                g.fillOval(p.x-10, p.y-10, 20, 20); // mark selected point
    140                 p.translate(20, 5);
    141                 g.setColor(Color.WHITE);
    142                 g.fillRoundRect(p.x, p.y-25, 200, 50,10,10);
    143                 g.setColor(Color.BLACK);
    144                 g.drawString(df.format(wp.getTime()), p.x+5, p.y-10);
    145                 String s = (String) trk.getAttributes().get("name");
    146                 if (s!=null) g.drawString(s, p.x+5, p.y+5);
    147                 System.out.println(trk.getAttributes().toString());               
    148                 System.out.println(wp.attr.toString());               
    149                 s = (String) wp.attr.get("ele");
    150                 String s1=null;
    151                 try {s1 = String.format("%3.1f", Double.parseDouble(s));} catch (Exception e) {  }
    152                 if (s1!=null) g.drawString("H="+s1, p.x+5, p.y+20);
     147               
     148                if (wp!=wpOld) {
     149                if (oldPopup!=null) oldPopup.hide();
     150                double vel=-1;
     151                if (prevWp!=null && wp.time!=prevWp.time) {
     152                    vel=wp.getCoor().greatCircleDistance(prevWp.getCoor())/
     153                            (wp.time-prevWp.time)*3.6;
     154                }
     155                infoPanel.setData(wp,trk,vel,gpxL.data.tracks);
     156                Point s=mv.getLocationOnScreen();
     157                Popup pp=PopupFactory.getSharedInstance().getPopup(mv, infoPanel,
     158                        s.x+p.x+10, s.y+p.y+10);
     159                pp.show();
     160                wpOld=wp;
     161                oldPopup=pp;
     162                }
    153163            }
    154164           
     
    170180        if (!isEnabled()) return;
    171181        if (e.getButton() != MouseEvent.BUTTON1) return;
    172        
    173182        //setStatusLine(tr("Please move the mouse to draw new way"));
    174183        repaint();
     
    180189        if (!isEnabled()) return;
    181190        if (e.getButton() != MouseEvent.BUTTON1) return;
    182        
     191        if (oldPopup!=null) {
     192            oldPopup.hide();
     193            oldPopup=null;        wpOld=null;
     194        }       
    183195        repaint();
    184196    }
     
    186198    @Override
    187199    public void mouseDragged(MouseEvent e) {
    188         mouseMoved(e);
     200        if (oldPopup!=null) {
     201            oldPopup.hide();
     202            oldPopup=null;        wpOld=null;
     203        }
    189204    }
    190205
     
    199214        ///  System.out.println(e);
    200215        if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
    201         }
    202     }
     216            filterTracks();
     217            repaint();
     218        }
     219    }
     220   
    203221
    204222    /**
     
    222240
    223241    private void repaint() {
    224         Main.map.mapView.repaint();
     242        if (Main.map!=null) Main.map.mapView.repaint();
    225243    }
    226244    private void setStatusLine(String tr) {
     
    229247    }
    230248
     249    private synchronized void filterTracks() {
     250        Layer l = Main.main.getActiveLayer();
     251       
     252        if (l instanceof GpxLayer && pos!=null) {
     253            GpxLayer gpxL = (GpxLayer )l;
     254            Set<GpxTrack> toRemove = new HashSet<GpxTrack>();
     255            for (GpxTrack track : gpxL.data.tracks) {
     256                boolean f=true;
     257                sg: for (GpxTrackSegment seg : track.getSegments()) {
     258                    for (WayPoint S : seg.getWayPoints()) {
     259                        if (S.time!=0) {f=false; break sg;}
     260                    }
     261                }
     262                if (f) toRemove.add(track);
     263            }
     264            gpxL.data.tracks.removeAll(toRemove);
     265                               
     266
     267        }
     268    }
     269
    231270   
    232271
Note: See TracChangeset for help on using the changeset viewer.