Changeset 4265 in josm


Ignore:
Timestamp:
Jul 27, 2011 7:16:41 AM (22 months 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.