Changeset 4265 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2011-07-27T07:16:41+02:00 (13 years ago)
Author:
jttt
Message:

Make merge layers work when more than one layer is selected

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java

    r4139 r4265  
    22package org.openstreetmap.josm.actions;
    33
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    66
    77import java.awt.event.ActionEvent;
     
    2020                .registerShortcut("system:merge", tr("Edit: {0}", tr("Merge")), KeyEvent.VK_M, Shortcut.GROUP_MENU),
    2121                false /* register */
    22         );
     22                );
    2323        putValue("help", ht("/Action/MergeLayer"));
    2424        putValue("toolbar", "action/mergelayer");
    2525        Main.toolbar.register(this);
     26    }
     27
     28    public void merge(List<Layer> sourceLayers) {
     29        Layer targetLayer = askTargetLayer(sourceLayers);
     30        if (targetLayer == null)
     31            return;
     32        for (Layer l: sourceLayers) {
     33            if (l != targetLayer) {
     34                targetLayer.mergeFrom(l);
     35                Main.map.mapView.removeLayer(l);
     36            }
     37        }
     38        Main.map.mapView.setActiveLayer(targetLayer);
    2639    }
    2740
  • trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    r4230 r4265  
    236236                    }
    237237                }
    238         );
     238                );
    239239
    240240        add(createButtonPanel(), BorderLayout.SOUTH);
     
    278278                    }
    279279                }
    280         );
     280                );
    281281    }
    282282
     
    298298                    }
    299299                }
    300         );
     300                );
    301301    }
    302302
     
    654654                new MergeLayerAction().merge(layer);
    655655            } else {
    656                 Layer selectedLayer = getModel().getSelectedLayers().get(0);
    657                 new MergeLayerAction().merge(selectedLayer);
     656                if (getModel().getSelectedLayers().size() == 1) {
     657                    Layer selectedLayer = getModel().getSelectedLayers().get(0);
     658                    new MergeLayerAction().merge(selectedLayer);
     659                } else {
     660                    new MergeLayerAction().merge(getModel().getSelectedLayers());
     661                }
    658662            }
    659663        }
     
    668672        public void updateEnabledState() {
    669673            if (layer == null) {
    670                 if (getModel().getSelectedLayers().size() != 1) {
     674                if (getModel().getSelectedLayers().isEmpty()) {
    671675                    setEnabled(false);
    672                     return;
    673                 }
    674                 Layer selectedLayer = getModel().getSelectedLayers().get(0);
    675                 List<Layer> targets = getModel().getPossibleMergeTargets(selectedLayer);
    676                 setEnabled(!targets.isEmpty());
     676                } else  if (getModel().getSelectedLayers().size() > 1) {
     677                    Layer firstLayer = getModel().getSelectedLayers().get(0);
     678                    for (Layer l: getModel().getSelectedLayers()) {
     679                        if (l != firstLayer && !l.isMergable(firstLayer)) {
     680                            setEnabled(false);
     681                            return;
     682                        }
     683                    }
     684                    setEnabled(true);
     685                } else {
     686                    Layer selectedLayer = getModel().getSelectedLayers().get(0);
     687                    List<Layer> targets = getModel().getPossibleMergeTargets(selectedLayer);
     688                    setEnabled(!targets.isEmpty());
     689                }
    677690            } else {
    678691                List<Layer> targets = getModel().getPossibleMergeTargets(layer);
     
    847860                        oc = l.getColor(false);
    848861                        if(oc != null) {
    849                             if(oc.equals(c))
     862                            if(oc.equals(c)) {
    850863                                oc = null;
    851                             else
     864                            } else {
    852865                                break;
     866                            }
    853867                        }
    854868                    }
    855                     if(oc == null) /* not more than one color, don't use coloring */
     869                    /* not more than one color, don't use coloring */
     870                    if(oc == null) {
    856871                        c = null;
     872                    }
    857873                }
    858874                /* Setting foreground properly handles null as default! */
Note: See TracChangeset for help on using the changeset viewer.