Ignore:
Timestamp:
2019-01-31T09:01:24+01:00 (6 years ago)
Author:
gerdp
Message:

fix #9860: Zoom to undeleted object(s)

  • Add all restored objects to the selection list and zoom to that selection.
  • Improve code and javadoc to fix some sonar issues
Location:
applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/Undelete.java

    r33835 r34871  
    77import org.openstreetmap.josm.plugins.PluginInformation;
    88
     9/**
     10 * Create the undelete plugin.
     11 */
    912public class Undelete extends Plugin {
    1013
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java

    r34568 r34871  
    88import java.util.ArrayList;
    99import java.util.Collections;
     10import java.util.LinkedHashSet;
    1011import java.util.List;
     12import java.util.Set;
    1113
    1214import javax.swing.JOptionPane;
    1315
    1416import org.openstreetmap.josm.actions.AutoScaleAction;
     17import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode;
    1518import org.openstreetmap.josm.actions.JosmAction;
    1619import org.openstreetmap.josm.data.osm.DataSet;
     
    4043import org.openstreetmap.josm.tools.Shortcut;
    4144
     45/**
     46 * Undelete one or more objects.
     47 */
    4248public class UndeleteAction extends JosmAction {
    4349
     
    4955        private final List<PrimitiveId> ids;
    5056
    51         private Worker(OsmPrimitive parent, OsmDataLayer layer, List<PrimitiveId> ids) {
     57        private Set<OsmPrimitive> restored;
     58
     59        private Worker(OsmPrimitive parent, OsmDataLayer layer, List<PrimitiveId> ids, Set<OsmPrimitive> restored) {
    5260            this.parent = parent;
    5361            this.layer = layer;
    5462            this.ids = ids;
     63            this.restored = restored != null ? restored : new LinkedHashSet<>();
    5564        }
    5665
     
    8392
    8493                            primitive = layer.data.getPrimitiveById(id, type);
     94                            restored.add(primitive);
    8595                        } else {
    8696                            // We search n-1 version with redaction robustness
     
    8898                            long n = hPrimitive1.getVersion();
    8999                            while (hPrimitive2 == null && idx < n) {
    90                                 hPrimitive2 =  h.getByVersion(n - idx++);
     100                                hPrimitive2 = h.getByVersion(n - idx++);
    91101                            }
    92102                            if (type.equals(OsmPrimitiveType.NODE)) {
     
    109119
    110120                                HistoryWay hWay = (HistoryWay) hPrimitive2;
    111                                 // System.out.println(tr("Primitive {0} version {1}: {2} nodes",
    112                                 // hPrimitive2.getId(), hPrimitive2.getVersion(),
    113                                 // hWay.getNumNodes()));
    114121                                List<PrimitiveId> nodeIds = new ArrayList<>();
    115122                                if (hWay != null) {
     
    118125                                    }
    119126                                }
    120                                 undelete(false, nodeIds, way);
     127                                undelete(false, nodeIds, way, restored);
    121128
    122129                                primitive = way;
     
    147154                                            }
    148155                                            layer.data.addPrimitive(p);
     156                                            restored.add(p);
    149157                                        }
    150158                                        members.add(new RelationMember(m.getRole(), p));
     
    164172
    165173                                layer.data.addPrimitive(primitive);
     174                                restored.add(primitive);
    166175                            } else {
    167176                              final String msg = OsmPrimitiveType.NODE.equals(type)
     
    186195            if (parent instanceof Way && !nodes.isEmpty()) {
    187196                ((Way) parent).setNodes(nodes);
    188                 MainApplication.getMap().repaint();
    189197            }
    190             GuiHelper.runInEDT(() -> AutoScaleAction.zoomTo(layer.data.allNonDeletedPrimitives()));
     198            if (!restored.isEmpty()) {
     199                layer.data.setSelected(restored);
     200                GuiHelper.runInEDT(() -> AutoScaleAction.autoScale(AutoScaleMode.SELECTION));
     201            }
    191202        }
    192203    }
     
    208219
    209220    public void undelete(boolean newLayer, final List<PrimitiveId> ids, final OsmPrimitive parent) {
     221        undelete(newLayer, ids, parent, new LinkedHashSet<>());
     222    }
     223
     224    private void undelete(boolean newLayer, final List<PrimitiveId> ids, final OsmPrimitive parent, Set<OsmPrimitive> restored) {
    210225
    211226        // TODO: undelete relation members if necessary
     
    226241
    227242        MainApplication.worker.execute(task);
    228         MainApplication.worker.submit(new Worker(parent, layer, ids));
     243        MainApplication.worker.submit(new Worker(parent, layer, ids, restored));
    229244    }
    230245}
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteDialog.java

    r34568 r34871  
    2020import org.openstreetmap.josm.spi.preferences.Config;
    2121
     22/**
     23 *
     24 * Popup for undelete action. Allows to enter a list of objects.
     25 */
    2226public class UndeleteDialog extends ExtendedDialog {
    2327
     
    2630
    2731    public UndeleteDialog(Component parent) {
    28         super(parent, tr("Undelete Object"), new String[] {tr("Undelete object"), tr("Cancel")});
     32        super(parent, tr("Undelete Object"), tr("Undelete object"), tr("Cancel"));
    2933
    3034        JPanel all = new JPanel(new GridBagLayout());
     
    5256        all.add(layer, gc);
    5357        setContent(all, false);
    54         setButtonIcons(new String[] {"undelete.png", "cancel.png"});
    55         setToolTipTexts(new String[] {tr("Start undeleting"), tr("Close dialog and cancel")});
     58        setButtonIcons("undelete.png", "cancel.png");
     59        setToolTipTexts(tr("Start undeleting"), tr("Close dialog and cancel"));
    5660        setDefaultButton(1);
    5761    }
Note: See TracChangeset for help on using the changeset viewer.