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();
     }
 
