Index: /trunk/images/dialogs/activate.svg
===================================================================
--- /trunk/images/dialogs/activate.svg	(revision 2697)
+++ /trunk/images/dialogs/activate.svg	(revision 2697)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   inkscape:export-filename="C:\data\eclipse-ws\eclipse-3.5\JOSM\images\dialogs\activate.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   sodipodi:docname="Neues Dokument 1">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective3650"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3672"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3672-4"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3703"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3747"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.2"
+     inkscape:cx="9.1091631"
+     inkscape:cy="9.0998065"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1094"
+     inkscape:window-height="741"
+     inkscape:window-x="165"
+     inkscape:window-y="163"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       style="fill:#ae8f8f;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.1887976,1048.7981 5.7614909,-5.8419 14.9487355,0 -4.415101,5.8527 -16.2951254,-0.011 z"
+       id="path2816-6-3"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#ae8f8f;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.07869,1043.8267 5.7614916,-5.8418 14.9487324,0 -4.415101,5.8527 -16.295123,-0.011 z"
+       id="path2816-6"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#ae8f8f;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1.21211,1038.9234 5.7614908,-5.8418 14.9487352,0 -4.415106,5.8527 -16.29512,-0.011 z"
+       id="path2816"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#189f5c;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       id="path3761"
+       sodipodi:cx="310.11682"
+       sodipodi:cy="757.39764"
+       sodipodi:rx="79.802048"
+       sodipodi:ry="72.73098"
+       d="m 389.91887,757.39764 a 79.802048,72.73098 0 1 1 -159.6041,0 79.802048,72.73098 0 1 1 159.6041,0 z"
+       transform="matrix(0.05915865,0,0,0.07067087,-0.08694729,980.72553)" />
+    <path
+       style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.963287,1035.182 2.183922,1.5692 2.582129,-4.934"
+       id="path3771"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 2696)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 2697)
@@ -5,5 +5,5 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.GridLayout;
+import java.awt.FlowLayout;
 import java.awt.Point;
 import java.awt.Rectangle;
@@ -29,4 +29,5 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.JToolBar;
 import javax.swing.KeyStroke;
 import javax.swing.ListModel;
@@ -42,8 +43,9 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.io.SaveLayersDialog;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -96,5 +98,8 @@
 
     protected JPanel createButtonPanel() {
-        JPanel buttonPanel = new JPanel(new GridLayout(1, 5));
+        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));
+
+        JToolBar tb = new JToolBar(JToolBar.HORIZONTAL);
+        tb.setFloatable(false);
 
         // -- move up action
@@ -102,5 +107,5 @@
         adaptTo(moveUpAction, model);
         adaptTo(moveUpAction,selectionModel);
-        buttonPanel.add(new SideButton(moveUpAction));
+        tb.add(moveUpAction);
 
         // -- move down action
@@ -108,5 +113,5 @@
         adaptTo(moveDownAction, model);
         adaptTo(moveDownAction,selectionModel);
-        buttonPanel.add(new SideButton(moveDownAction));
+        tb.add(moveDownAction);
 
         // -- activate action
@@ -114,10 +119,10 @@
         adaptTo(activateLayerAction, selectionModel);
         MapView.addLayerChangeListener(activateLayerAction);
-        buttonPanel.add(new SideButton(activateLayerAction, "activate"));
+        tb.add(activateLayerAction);
 
         // -- show hide action
         ShowHideLayerAction showHideLayerAction = new ShowHideLayerAction();
         adaptTo(showHideLayerAction, selectionModel);
-        buttonPanel.add(new SideButton(showHideLayerAction, "showhide"));
+        tb.add(showHideLayerAction);
 
         // -- merge layer action
@@ -125,5 +130,6 @@
         adaptTo(mergeLayerAction, model);
         adaptTo(mergeLayerAction,selectionModel);
-        buttonPanel.add(new SideButton(mergeLayerAction));
+        tb.add(mergeLayerAction);
+
 
         //-- delete layer action
@@ -134,6 +140,7 @@
         layerList.getActionMap().put("deleteLayer", deleteLayerAction);
         adaptTo(deleteLayerAction, selectionModel);
-        buttonPanel.add(new SideButton(deleteLayerAction, "delete"));
-
+        tb.add(deleteLayerAction);
+
+        buttonPanel.add(tb);
         return buttonPanel;
     }
@@ -157,5 +164,6 @@
         layerList = new LayerList(model);
         layerList.setSelectionModel(selectionModel);
-        layerList.addMouseListener(new LayerListMouseAdapter());
+        layerList.addMouseListener(new DblClickAdapter());
+        layerList.addMouseListener(new PopupMenuHandler());
         layerList.setBackground(UIManager.getColor("Button.background"));
         layerList.setCellRenderer(new LayerListCellRenderer());
@@ -172,5 +180,4 @@
                         layerList.ensureIndexIsVisible(index);
                     }
-
                     public void refresh() {
                         layerList.repaint();
@@ -244,21 +251,4 @@
      */
     public final  class DeleteLayerAction extends AbstractAction implements IEnabledStateUpdating {
-        private  Layer layer;
-
-        /**
-         * Creates a {@see DeleteLayerAction} for a specific layer.
-         *
-         * @param layer the layer. Must not be null.
-         * @exception IllegalArgumentException thrown, if layer is null
-         */
-        public DeleteLayerAction(Layer layer) {
-            this();
-            if (layer == null)
-                throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "layer"));
-            this.layer = layer;
-            putValue(NAME, tr("Delete"));
-            updateEnabledState();
-        }
-
         /**
          * Creates a {@see DeleteLayerAction} which will delete the currently
@@ -268,6 +258,7 @@
         public DeleteLayerAction() {
             putValue(SMALL_ICON,ImageProvider.get("dialogs", "delete"));
-            putValue(SHORT_DESCRIPTION, tr("Delete the selected layer."));
-            putValue("help", "Action/LayerDelete");
+            putValue(SHORT_DESCRIPTION, tr("Delete the selected layers."));
+            putValue(NAME, tr("Delete"));
+            putValue("help", HelpUtil.ht("/Dialog/LayerDialog#DeleteLayer"));
             updateEnabledState();
         }
@@ -299,10 +290,5 @@
 
         public void actionPerformed(ActionEvent e) {
-            List<Layer> selectedLayers;
-            if (this.layer == null) {
-                selectedLayers = getModel().getSelectedLayers();
-            } else {
-                selectedLayers = Collections.singletonList(this.layer);
-            }
+            List<Layer> selectedLayers = getModel().getSelectedLayers();
             if (selectedLayers.isEmpty())
                 return;
@@ -315,9 +301,5 @@
 
         public void updateEnabledState() {
-            if (layer == null) {
-                setEnabled(! getModel().getSelectedLayers().isEmpty());
-            } else {
-                setEnabled(true);
-            }
+            setEnabled(! getModel().getSelectedLayers().isEmpty());
         }
     }
@@ -350,5 +332,5 @@
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "showhide"));
             putValue(SHORT_DESCRIPTION, tr("Toggle visible state of the selected layer."));
-            putValue("help", "Action/LayerShowHide");
+            putValue("help", HelpUtil.ht("/Dialog/LayerDialog#ShowHideLayer"));
             updateEnabledState();
         }
@@ -392,5 +374,5 @@
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "activate"));
             putValue(SHORT_DESCRIPTION, tr("Activate the selected layer"));
-            putValue("help", "Action/ActivateLayer");
+            putValue("help", HelpUtil.ht("/Dialog/LayerDialog#ActivateLayer"));
             updateEnabledState();
         }
@@ -457,5 +439,5 @@
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "mergedown"));
             putValue(SHORT_DESCRIPTION, tr("Merge this layer into another layer"));
-            putValue("help", "Action/MergeLayer");
+            putValue("help", HelpUtil.ht("/Dialog/LayerDialog#MergeLayer"));
             updateEnabledState();
         }
@@ -521,11 +503,11 @@
     }
 
-    class LayerListMouseAdapter extends MouseAdapter {
-
-        private void openPopup(MouseEvent e) {
-            Point p = e.getPoint();
+    class PopupMenuHandler extends PopupMenuLauncher {
+        @Override
+        public void launch(MouseEvent evt) {
+            Point p = evt.getPoint();
             int index = layerList.locationToIndex(p);
             if (index < 0) return;
-            if (!layerList.getCellBounds(index, index).contains(e.getPoint()))
+            if (!layerList.getCellBounds(index, index).contains(evt.getPoint()))
                 return;
             if (!layerList.isSelectedIndex(index)) {
@@ -536,14 +518,7 @@
             menu.show(LayerListDialog.this, p.x, p.y-3);
         }
-        @Override public void mousePressed(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                openPopup(e);
-            }
-        }
-        @Override public void mouseReleased(MouseEvent e) {
-            if (e.isPopupTrigger()) {
-                openPopup(e);
-            }
-        }
+    }
+
+    class DblClickAdapter extends MouseAdapter {
         @Override public void mouseClicked(MouseEvent e) {
             if (e.getClickCount() == 2) {
@@ -1042,5 +1017,6 @@
      */
     public DeleteLayerAction createDeleteLayerAction(Layer layer) {
-        return new DeleteLayerAction(layer);
+        // the delete layer action doesn't depend on the current layer
+        return new DeleteLayerAction();
     }
 
