Changeset 28624 in osm for applications


Ignore:
Timestamp:
2012-08-24T13:41:33+02:00 (12 years ago)
Author:
donvip
Message:

[josm_plugins] See #josm7980 - Fix memory leaks in alignways, fixAdresses, measurement, routing, turnlanes and waypoint_search plugins

Location:
applications/editors/josm/plugins
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/FixAddressesPlugin.java

    r27338 r28624  
    2727 */
    2828public class FixAddressesPlugin extends Plugin {
    29         private static IncompleteAddressesDialog incompleteAddrDlg;
    3029        private static FixAddressesPreferences preferences;
    3130
     
    5554        @Override
    5655        public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    57                 // TODO Auto-generated method stub
    58                 super.mapFrameInitialized(oldFrame, newFrame);
    59 
    6056                if (newFrame != null) {
    61                         incompleteAddrDlg = new IncompleteAddressesDialog();
    6257                        FixAddressesMapMode faMode = new FixAddressesMapMode(Main.map);
    6358                        IconToggleButton faModeButton = new IconToggleButton(faMode);
    6459                        faModeButton.setVisible(true);
    65                         newFrame.addToggleDialog(incompleteAddrDlg);
     60                        newFrame.addToggleDialog(new IncompleteAddressesDialog());
    6661                }
    6762        }
     
    7166                // TODO Auto-generated method stub
    7267                return getPreferences();
    73         }
    74 
    75         /**
    76          * @return the incompleteAddrDlg
    77          */
    78         protected static IncompleteAddressesDialog getIncompleteAddrDlg() {
    79                 return incompleteAddrDlg;
    8068        }
    8169
  • applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysAction.java

    r27852 r28624  
    5858
    5959                    AlignWaysCmdKeepLength cmdAW;
    60                     if (AlignWaysPlugin.awDialog.getAwOpt() == AligningModeOption.ALGN_OPT_KEEP_ANGLE) {
     60                    if (AlignWaysPlugin.getAwDialog().getAwOpt() == AligningModeOption.ALGN_OPT_KEEP_ANGLE) {
    6161                        cmdAW = new AlignWaysCmdKeepAngles();
    6262                    } else {
  • applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysDialog.java

    r27466 r28624  
    163163
    164164    }
    165 
    166     public JCheckBoxMenuItem getWindowMenuItem() {
    167         return windowMenuItem;
    168     }
    169 
    170 
    171165}
  • applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysPlugin.java

    r27508 r28624  
    22
    33import static org.openstreetmap.josm.tools.I18n.tr;
    4 
    5 import javax.swing.JMenuItem;
    64
    75import org.openstreetmap.josm.Main;
     
    2018public class AlignWaysPlugin extends Plugin {
    2119
    22     static AlignWaysMode awMode;
    23     private final IconToggleButton btn;
    24     static JMenuItem alignWaysMenuItem;
    25     static JosmAction awAction;
    26     static AlignWaysDialog awDialog;
    27     static IconToggleButton optBtn;
     20    private static AlignWaysMode awMode;
     21    private static IconToggleButton btn;
     22    private static JosmAction awAction;
     23    private static AlignWaysDialog awDialog;
     24    private static IconToggleButton optBtn;
    2825
    2926    // The major version is e.g. used to decide when to trigger What's New windows
     
    3330        super(info);
    3431       
    35         // Construct the AlignWays mode toggle button
    36         awMode = new AlignWaysMode(Main.map, "alignways", tr("Align Ways mode"));
    37         btn = new IconToggleButton(awMode);
    38         btn.setVisible(true);
    39        
    4032        // Add the action entries to the Tools Menu
    4133        Main.main.menu.toolsMenu.addSeparator();
    4234        awAction = new AlignWaysAction();
    43         alignWaysMenuItem = MainMenu.add(Main.main.menu.toolsMenu, awAction);
    44        
    45         awDialog = new AlignWaysDialog(awMode);
    46         // Prevent user clicking on the Windows menu entry while panel is meaningless
    47         awDialog.getWindowMenuItem().setEnabled(false);
     35        MainMenu.add(Main.main.menu.toolsMenu, awAction);
    4836    }
    4937
    5038    @Override
    5139    public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    52         if(newFrame != null) {
    53             optBtn = newFrame.addToggleDialog(AlignWaysPlugin.getAwDialog());
     40        if (newFrame != null) {
     41            // Construct the AlignWays mode toggle button
     42            awMode = new AlignWaysMode(Main.map, "alignways", tr("Align Ways mode"));
     43            btn = new IconToggleButton(awMode);
     44            btn.setVisible(true);
     45            newFrame.addMapMode(btn);
     46            optBtn = newFrame.addToggleDialog(awDialog = new AlignWaysDialog(awMode));
    5447        } else {
    55             // Disable menu item in Windows menu
    56             awDialog.getWindowMenuItem().setEnabled(false);
    57         }
    58 
    59         if (Main.map != null) {
    60             Main.map.addMapMode(btn);
    61             // Re-enable menu item in Windows menu
    62             awDialog.getWindowMenuItem().setEnabled(true);
     48            awDialog = null;
     49            optBtn = null;
     50            btn = null;
     51            awMode = null;
    6352        }
    6453    }
     
    9180        return optBtn;
    9281    }
    93 
    9482}
  • applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysTipsPanel.java

    r27348 r28624  
    101101        step04.setText(tr("<html>\n<div style=\"font-family:sans-serif\">\n<ul>\n  <li><b>Align the segments.</b> Press <b><i><span style=\"color:green\">{0}"
    102102                + "</span></i></b>. Alternatively you''ll find the command in the <b>Tools</b>\n menu or may want to place the action on the <b>toolbar</b>.\n  </li>\n</ul>\n</div>\n</html>\n\n",
    103                 AlignWaysPlugin.awAction.getShortcut().getKeyText()));
     103                AlignWaysPlugin.getAwAction().getShortcut().getKeyText()));
    104104        step04.setVerticalAlignment(SwingConstants.TOP);
    105105
  • applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java

    r28589 r28624  
    3232 * @author ramack
    3333 */
    34 public class MeasurementDialog extends ToggleDialog {
     34public class MeasurementDialog extends ToggleDialog implements SelectionChangedListener {
    3535    private static final long serialVersionUID = 4708541586297950021L;
    3636
     
    5959     */
    6060    protected JLabel segAngleLabel;
    61 
     61   
    6262    /**
    6363     * Constructor
     
    112112            resetButton
    113113        }));
    114 
    115         final MeasurementDialog dlg = this;
    116 
    117         DataSet.addSelectionListener(new SelectionChangedListener() {
    118             @Override
    119             public void selectionChanged(Collection<? extends OsmPrimitive> arg0) {
    120                 double length = 0.0;
    121                 double segAngle = 0.0;
    122                 double area = 0.0;
    123                 Node lastNode = null;
    124                 for(OsmPrimitive p:arg0) {
    125                     // ignore incomplete nodes
    126                     if(p instanceof Node && !((Node)p).isIncomplete()) {
    127                         Node n =(Node)p;
    128                         if(lastNode == null) {
    129                             lastNode = n;
    130                         } else {
    131                             length += lastNode.getCoor().greatCircleDistance(n.getCoor());
    132                             segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
    133                             lastNode = n;
    134                         }
    135                     } else if (p instanceof Way) {
    136                         Way w = (Way)p;
    137                         Node lastN = null;
    138                         for (Node n: w.getNodes()) {
    139                             if (lastN != null && lastN.getCoor() != null && n.getCoor() != null) {
    140                                 length += lastN.getCoor().greatCircleDistance(n.getCoor());
    141                                 //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
    142                                 area += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
    143                                 - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
    144                                 segAngle = MeasurementLayer.angleBetween(lastN.getCoor(), n.getCoor());
    145                             }
    146                             lastN = n;
    147                         }
    148                         if (lastN != null && lastN == w.getNodes().iterator().next())
    149                             area = Math.abs(area / 2);
    150                         else
    151                             area = 0;
    152                     }
    153                 }
    154                 dlg.selectLengthLabel.setText(new DecimalFormat("#0.00").format(length) + " m");
    155 
    156                 dlg.segAngleLabel.setText(new DecimalFormat("#0.0").format(segAngle) + " \u00b0");
    157                 dlg.selectAreaLabel.setText(new DecimalFormat("#0.00").format(area) + " m\u00b2");
    158             }
    159         });
     114       
     115        DataSet.addSelectionListener(this);
    160116    }
    161117
     
    166122        MeasurementPlugin.getCurrentLayer().reset();
    167123    }
     124
     125        @Override
     126        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
     127        double length = 0.0;
     128        double segAngle = 0.0;
     129        double area = 0.0;
     130        Node lastNode = null;
     131        for (OsmPrimitive p : newSelection) {
     132            // ignore incomplete nodes
     133            if (p instanceof Node && !((Node)p).isIncomplete()) {
     134                Node n =(Node)p;
     135                if (lastNode == null) {
     136                    lastNode = n;
     137                } else {
     138                    length += lastNode.getCoor().greatCircleDistance(n.getCoor());
     139                    segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
     140                    lastNode = n;
     141                }
     142            } else if (p instanceof Way) {
     143                Way w = (Way)p;
     144                Node lastN = null;
     145                for (Node n: w.getNodes()) {
     146                    if (lastN != null && lastN.getCoor() != null && n.getCoor() != null) {
     147                        length += lastN.getCoor().greatCircleDistance(n.getCoor());
     148                        //http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
     149                        area += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
     150                        - (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
     151                        segAngle = MeasurementLayer.angleBetween(lastN.getCoor(), n.getCoor());
     152                    }
     153                    lastN = n;
     154                }
     155                if (lastN != null && lastN == w.getNodes().iterator().next())
     156                    area = Math.abs(area / 2);
     157                else
     158                    area = 0;
     159            }
     160        }
     161        selectLengthLabel.setText(new DecimalFormat("#0.00").format(length) + " m");
     162        segAngleLabel.setText(new DecimalFormat("#0.0").format(segAngle) + " \u00b0");
     163        selectAreaLabel.setText(new DecimalFormat("#0.00").format(area) + " m\u00b2");
     164        }
     165
     166        /* (non-Javadoc)
     167         * @see org.openstreetmap.josm.gui.dialogs.ToggleDialog#destroy()
     168         */
     169        @Override
     170        public void destroy() {
     171                super.destroy();
     172                DataSet.removeSelectionListener(this);
     173        }
    168174}
  • applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementLayer.java

    r25137 r28624  
    141141        DecimalFormat nf = new DecimalFormat("#0.00");
    142142        DecimalFormat nf2 = new DecimalFormat("#0.0");
    143         MeasurementPlugin.measurementDialog.pathLengthLabel.setText(pathLength < 800?nf2.format(pathLength) + " m":nf.format(pathLength/1000) + " km");
     143        if (MeasurementPlugin.measurementDialog != null) {
     144            MeasurementPlugin.measurementDialog.pathLengthLabel.setText(pathLength < 800?nf2.format(pathLength) + " m":nf.format(pathLength/1000) + " km");
     145        }
    144146    }
    145147
  • applications/editors/josm/plugins/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementPlugin.java

    r23193 r28624  
    2121    public MeasurementPlugin(PluginInformation info) {
    2222        super(info);
    23         mode = new MeasurementMode(Main.map, "measurement", tr("measurement mode"));
    24         btn = new IconToggleButton(mode);
    25         btn.setVisible(true);
    26         measurementDialog = new MeasurementDialog();
    2723    }
    2824
    2925    @Override
    3026    public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    31         if(newFrame != null)
    32             newFrame.addToggleDialog(measurementDialog);
    33         if(Main.map != null)
    34             Main.map.addMapMode(btn);
     27        if (newFrame != null) {
     28            newFrame.addToggleDialog(measurementDialog = new MeasurementDialog());
     29            mode = new MeasurementMode(newFrame, "measurement", tr("measurement mode"));
     30            btn = new IconToggleButton(mode);
     31            btn.setVisible(true);
     32            newFrame.addMapMode(btn);
     33        } else {
     34                btn = null;
     35                mode = null;
     36                measurementDialog = null;
     37        }
    3538    }
    3639
    37     public static MeasurementLayer getCurrentLayer(){
    38         if(currentLayer == null){
     40    public static MeasurementLayer getCurrentLayer() {
     41        if (currentLayer == null) {
    3942            currentLayer = new MeasurementLayer(tr("Measurements"));
    4043            Main.main.addLayer(currentLayer);
  • applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/RoutingPlugin.java

    r28568 r28624  
    7979         * The side dialog where nodes are listed
    8080         */
    81         private final RoutingDialog routingDialog;
     81        private RoutingDialog routingDialog;
    8282
    8383        /**
     
    147147                logger.debug("Loading routing plugin...");
    148148                preferenceSettings=new RoutingPreferenceDialog();
    149                 // Create side dialog
    150                 routingDialog = new RoutingDialog();
    151149                // Initialize layers list
    152150                layers = new ArrayList<RoutingLayer>();
     
    188186        @Override
    189187        public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    190                 if(newFrame != null) {
     188                if (newFrame != null) {
    191189                        // Create plugin map modes
    192190                        addRouteNodeAction = new AddRouteNodeAction(newFrame);
     
    205203                        // Enable menu
    206204                        menu.enableStartItem();
    207                         newFrame.addToggleDialog(routingDialog);
     205                        newFrame.addToggleDialog(routingDialog = new RoutingDialog());
     206                } else {
     207                        addRouteNodeAction = null;
     208                        removeRouteNodeAction = null;
     209                        moveRouteNodeAction = null;
     210                        addRouteNodeButton = null;
     211                        removeRouteNodeButton = null;
     212                        moveRouteNodeButton = null;
     213                        routingDialog = null;
    208214                }
    209215        }
     
    216222                if (newLayer instanceof RoutingLayer) {                 /*   show Routing toolbar and dialog window  */
    217223                        menu.enableRestOfItems();
    218                         routingDialog.showDialog();
    219                         routingDialog.refresh();
     224                        if (routingDialog != null) {
     225                                routingDialog.showDialog();
     226                                routingDialog.refresh();
     227                        }
    220228                }else{                                                                                  /*   hide Routing toolbar and dialog window  */
    221229                        menu.disableRestOfItems();
    222                         routingDialog.hideDialog();
     230                        if (routingDialog != null) {
     231                                routingDialog.hideDialog();
     232                        }
    223233                }
    224234        }
     
    267277                }
    268278                // Reload RoutingDialog table model
    269                 routingDialog.refresh();
     279                if (routingDialog != null) {
     280                        routingDialog.refresh();
     281                }
    270282        }
    271283
  • applications/editors/josm/plugins/turnlanes/src/org/openstreetmap/josm/plugins/turnlanes/gui/TurnLanesDialog.java

    r28620 r28624  
    129129    };
    130130   
    131     private final Action editAction = new EditAction();
    132     private final Action validateAction = new ValidateAction();
     131    private final JosmAction editAction = new EditAction();
     132    private final JosmAction validateAction = new ValidateAction();
    133133   
    134134    private static final long serialVersionUID = -1998375221636611358L;
     
    220220        MapView.removeEditLayerChangeListener(this);
    221221        DataSet.removeSelectionListener(this);
     222        editAction.destroy();
     223        validateAction.destroy();
    222224        }
    223225}
  • applications/editors/josm/plugins/waypoint_search/src/org/openstreetmap/josm/plugins/waypointSearch/WaypointSearchPlugin.java

    r23192 r28624  
    11package org.openstreetmap.josm.plugins.waypointSearch;
    22
     3import static org.openstreetmap.josm.tools.I18n.tr;
     4
     5import org.openstreetmap.josm.gui.MapFrame;
     6import org.openstreetmap.josm.gui.MapView;
     7import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     8import org.openstreetmap.josm.gui.layer.Layer;
    39import org.openstreetmap.josm.plugins.Plugin;
    410import org.openstreetmap.josm.plugins.PluginInformation;
    5 import org.openstreetmap.josm.Main;
    6 import org.openstreetmap.josm.gui.MapView;
    7 import org.openstreetmap.josm.gui.layer.Layer;
    8 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    9 import static org.openstreetmap.josm.tools.I18n.tr;
    1011
    1112public class WaypointSearchPlugin extends Plugin implements LayerChangeListener  {
     
    1516    * @param info  information about the plugin and its local installation   
    1617    */
    17     private Engine engine = new Engine();
    18     private SelectWaypointDialog waypointDialog = new SelectWaypointDialog(tr("Waypoint search"), "ToolbarIcon", tr("Search after waypoint. Click and move the map view to the waypoint."), null, 100);
     18    private final Engine engine = new Engine();
     19    private SelectWaypointDialog waypointDialog;
    1920   
    2021    public WaypointSearchPlugin(PluginInformation info) {
     
    2324    }
    2425     
    25     @Override
     26        @Override
     27        public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
     28                if (newFrame != null) {
     29                        newFrame.addToggleDialog(waypointDialog = new SelectWaypointDialog(
     30                                        tr("Waypoint search"), "ToolbarIcon", tr("Search after waypoint. Click and move the map view to the waypoint."), null, 100));
     31                } else {
     32                        waypointDialog = null;
     33                }
     34        }
     35
     36        @Override
    2637    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
    27         // TODO Auto-generated method stub
    28        
    2938    }
    30 
    3139   
    3240    @Override
    3341    public void layerAdded(Layer newLayer) {
    34         //add dialog
    35         if (Main.map.getToggleDialog(SelectWaypointDialog.class)==null) {
    36             Main.map.addToggleDialog(waypointDialog);
    37         }
    38         //update search
    39         if (engine.gpxLayersExist()) {
     42        // update search
     43        if (waypointDialog != null && engine.gpxLayersExist()) {
    4044            waypointDialog.updateSearchResults();
    4145        }
    4246    }
    4347
    44 
    45 
    4648    @Override
    4749    public void layerRemoved(Layer oldLayer) {
    48         if (!engine.gpxLayersExist()) {
     50        if (waypointDialog != null && !engine.gpxLayersExist()) {
    4951            waypointDialog.updateSearchResults();
    5052        }   
    5153    }
    52  
    5354}
    54 
    55 
    56 
    57    
    58    
    59    
    60 
    61 
    62 
    63 
    64 
    65 
    66 
    67 
    68 
    69 
    70 
    71 
    72 
    73 
    74 
    75 
    76 
    77    
    78    
    79 
    80 
    81 
    82 
    83 
    84 
Note: See TracChangeset for help on using the changeset viewer.