Index: trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java	(revision 4576)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java	(revision 4577)
@@ -70,5 +70,4 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryBounds;
-import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
@@ -91,6 +90,6 @@
         }
     }
-    ImageryProvidersPanel imageryProviders;
-    ImageryLayerInfo layerInfo;
+    private ImageryProvidersPanel imageryProviders;
+    private ImageryLayerInfo layerInfo;
 
     // Common settings
@@ -104,8 +103,8 @@
     // WMS Settings
     private JComboBox browser;
-    JCheckBox overlapCheckBox;
-    JSpinner spinEast;
-    JSpinner spinNorth;
-    JSpinner spinSimConn;
+    private JCheckBox overlapCheckBox;
+    private JSpinner spinEast;
+    private JSpinner spinNorth;
+    private JSpinner spinSimConn;
 
     //TMS settings controls
@@ -283,4 +282,8 @@
         p.add(pane,GBC.std().fill(GBC.BOTH));
     }
+    
+    public ImageryProvidersPanel getProvidersPanel() {
+        return imageryProviders;
+    }
 
     private void loadSettings() {
@@ -355,11 +358,11 @@
      */
     public void setServerUrl(String server, String url) {
-        for (int i = 0; i < imageryProviders.model.getRowCount(); i++) {
-            if (server.equals(imageryProviders.model.getValueAt(i, 0).toString())) {
-                imageryProviders.model.setValueAt(url, i, 1);
+        for (int i = 0; i < imageryProviders.activeModel.getRowCount(); i++) {
+            if (server.equals(imageryProviders.activeModel.getValueAt(i, 0).toString())) {
+                imageryProviders.activeModel.setValueAt(url, i, 1);
                 return;
             }
         }
-        imageryProviders.model.addRow(new String[] { server, url });
+        imageryProviders.activeModel.addRow(new String[] { server, url });
     }
 
@@ -372,19 +375,29 @@
      */
     public String getServerUrl(String server) {
-        for (int i = 0; i < imageryProviders.model.getRowCount(); i++) {
-            if (server.equals(imageryProviders.model.getValueAt(i, 0).toString()))
-                return imageryProviders.model.getValueAt(i, 1).toString();
+        for (int i = 0; i < imageryProviders.activeModel.getRowCount(); i++) {
+            if (server.equals(imageryProviders.activeModel.getValueAt(i, 0).toString()))
+                return imageryProviders.activeModel.getValueAt(i, 1).toString();
         }
         return null;
     }
 
-    static class ImageryProvidersPanel extends JPanel {
-        final ImageryLayerTableModel model;
-        final ImageryDefaultLayerTableModel modeldef;
+    public static class ImageryProvidersPanel extends JPanel {
+        // Public JTables and JMapViewer
+        public final JTable activeTable;
+        public final JTable defaultTable;
+        public final JMapViewer defaultMap;
+
+        // Public models
+        public final ImageryLayerTableModel activeModel;
+        public final ImageryDefaultLayerTableModel defaultModel;
+        
+        // Public JToolbars
+        public final JToolBar activeToolbar;
+        public final JToolBar middleToolbar;
+        public final JToolBar defaultToolbar;
+
+        // Private members
+        private final PreferenceTabbedPane gui;
         private final ImageryLayerInfo layerInfo;
-        private JTable listActive;
-        final JTable listdef;
-        final JMapViewer map;
-        final PreferenceTabbedPane gui;
         
         private class ImageryTableCellRenderer extends DefaultTableCellRenderer {
@@ -423,42 +436,42 @@
             this.gui = gui;
             this.layerInfo = layerInfoArg;
-            this.model = new ImageryLayerTableModel();
-
-            listActive = new JTable(model) {
+            this.activeModel = new ImageryLayerTableModel();
+
+            activeTable = new JTable(activeModel) {
                 @Override
                 public String getToolTipText(MouseEvent e) {
                     java.awt.Point p = e.getPoint();
-                    return model.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString();
+                    return activeModel.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString();
                 }
             };
 
-            modeldef = new ImageryDefaultLayerTableModel();
-            listdef = new JTable(modeldef) {
+            defaultModel = new ImageryDefaultLayerTableModel();
+            defaultTable = new JTable(defaultModel) {
                 @Override
                 public String getToolTipText(MouseEvent e) {
                     java.awt.Point p = e.getPoint();
-                    return (String) modeldef.getValueAt(rowAtPoint(p), columnAtPoint(p));
+                    return (String) defaultModel.getValueAt(rowAtPoint(p), columnAtPoint(p));
                 }
             };
 
-            modeldef.addTableModelListener(
+            defaultModel.addTableModelListener(
                 new TableModelListener() {
                     @Override
                     public void tableChanged(TableModelEvent e) {
-                        listActive.repaint();
+                        activeTable.repaint();
                     }
                 }
             );
 
-            model.addTableModelListener(
+            activeModel.addTableModelListener(
                 new TableModelListener() {
                     @Override
                     public void tableChanged(TableModelEvent e) {
-                        listdef.repaint();
+                        defaultTable.repaint();
                     }
                 }
             );
 
-            TableColumnModel mod = listdef.getColumnModel();
+            TableColumnModel mod = defaultTable.getColumnModel();
             mod.getColumn(2).setPreferredWidth(800);
             mod.getColumn(2).setCellRenderer(new ImageryTableCellRenderer(layerInfo.getLayers()));
@@ -466,5 +479,5 @@
             mod.getColumn(0).setPreferredWidth(50);
 
-            mod = listActive.getColumnModel();
+            mod = activeTable.getColumnModel();
             mod.getColumn(1).setPreferredWidth(800);
             mod.getColumn(1).setCellRenderer(new ImageryTableCellRenderer(layerInfo.getDefaultLayers()));
@@ -472,53 +485,53 @@
 
             RemoveEntryAction remove = new RemoveEntryAction();
-            listActive.getSelectionModel().addListSelectionListener(remove);
+            activeTable.getSelectionModel().addListSelectionListener(remove);
 
             add(new JLabel(tr("Available default entries:")), GBC.eol().insets(5, 5, 0, 0));
             // Add default item list
-            JScrollPane scrolldef = new JScrollPane(listdef);
+            JScrollPane scrolldef = new JScrollPane(defaultTable);
             scrolldef.setPreferredSize(new Dimension(200, 200));
             add(scrolldef, GBC.std().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(1.0, 0.6).insets(5, 0, 0, 0));
 
             // Add default item map
-            map = new JMapViewer();
-            map.setZoomContolsVisible(false);
-            map.setMinimumSize(new Dimension(100, 200));
-            add(map, GBC.std().insets(5, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
-
-            listdef.getSelectionModel().addListSelectionListener(new DefListSelectionListener());
-
-            JToolBar tb = new JToolBar(JToolBar.VERTICAL);
-            tb.setFloatable(false);
-            tb.setBorderPainted(false);
-            tb.setOpaque(false);
-            tb.add(new ReloadAction());
-            add(tb, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 5, 0));
+            defaultMap = new JMapViewer();
+            defaultMap.setZoomContolsVisible(false);
+            defaultMap.setMinimumSize(new Dimension(100, 200));
+            add(defaultMap, GBC.std().insets(5, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
+
+            defaultTable.getSelectionModel().addListSelectionListener(new DefListSelectionListener());
+
+            defaultToolbar = new JToolBar(JToolBar.VERTICAL);
+            defaultToolbar.setFloatable(false);
+            defaultToolbar.setBorderPainted(false);
+            defaultToolbar.setOpaque(false);
+            defaultToolbar.add(new ReloadAction());
+            add(defaultToolbar, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 5, 0));
 
             ActivateAction activate = new ActivateAction();
-            listdef.getSelectionModel().addListSelectionListener(activate);
+            defaultTable.getSelectionModel().addListSelectionListener(activate);
             JButton btnActivate = new JButton(activate);
 
-            JToolBar tb2 = new JToolBar(JToolBar.VERTICAL);
-            tb2.setFloatable(false);
-            tb2.setBorderPainted(false);
-            tb2.setOpaque(false);
-            tb2.add(btnActivate);
-            add(tb2, GBC.eol().anchor(GBC.CENTER).insets(5, 15, 5, 0));
+            middleToolbar = new JToolBar(JToolBar.HORIZONTAL);
+            middleToolbar.setFloatable(false);
+            middleToolbar.setBorderPainted(false);
+            middleToolbar.setOpaque(false);
+            middleToolbar.add(btnActivate);
+            add(middleToolbar, GBC.eol().anchor(GBC.CENTER).insets(5, 15, 5, 0));
 
             add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
 
             add(new JLabel(tr("Selected entries:")), GBC.eol().insets(5, 0, 0, 0));
-            JScrollPane scroll = new JScrollPane(listActive);
+            JScrollPane scroll = new JScrollPane(activeTable);
             add(scroll, GBC.std().fill(GridBagConstraints.BOTH).span(GridBagConstraints.RELATIVE).weight(1.0, 0.4).insets(5, 0, 0, 5));
             scroll.setPreferredSize(new Dimension(200, 200));
 
-            JToolBar sideButtonTB = new JToolBar(JToolBar.VERTICAL);
-            sideButtonTB.setFloatable(false);
-            sideButtonTB.setBorderPainted(false);
-            sideButtonTB.setOpaque(false);
-            sideButtonTB.add(new NewEntryAction());
-            //sideButtonTB.add(edit); TODO
-            sideButtonTB.add(remove);
-            add(sideButtonTB, GBC.eol().anchor(GBC.NORTH).insets(0, 0, 5, 5));
+            activeToolbar = new JToolBar(JToolBar.VERTICAL);
+            activeToolbar.setFloatable(false);
+            activeToolbar.setBorderPainted(false);
+            activeToolbar.setOpaque(false);
+            activeToolbar.add(new NewEntryAction());
+            //activeToolbar.add(edit); TODO
+            activeToolbar.add(remove);
+            add(activeToolbar, GBC.eol().anchor(GBC.NORTH).insets(0, 0, 5, 5));
 
         }
@@ -539,6 +552,6 @@
                 // First index is set to -1 when the list is refreshed, so discard all map rectangles and polygons
                 if (e.getFirstIndex() == -1) {
-                    map.removeAllMapRectangles();
-                    map.removeAllMapPolygons();
+                    defaultMap.removeAllMapRectangles();
+                    defaultMap.removeAllMapPolygons();
                     mapRectangles.clear();
                     mapPolygons.clear();
@@ -550,6 +563,6 @@
                     // If needed, adjust map to show all map rectangles and polygons
                     if (!mapRectangles.isEmpty() || !mapPolygons.isEmpty()) {
-                        map.setDisplayToFitMapElements(false, true, true);
-                        map.zoomOut();
+                        defaultMap.setDisplayToFitMapElements(false, true, true);
+                        defaultMap.zoomOut();
                     }
                 }
@@ -557,9 +570,9 @@
 
             private void updateBoundsAndShapes(int i) {
-                ImageryBounds bounds = modeldef.getRow(i).getBounds();
+                ImageryBounds bounds = defaultModel.getRow(i).getBounds();
                 if (bounds != null) {
                     List<Shape> shapes = bounds.getShapes();
                     if (shapes != null && !shapes.isEmpty()) {
-                        if (listdef.getSelectionModel().isSelectedIndex(i)) {
+                        if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
                             if (!mapPolygons.containsKey(i)) {
                                 List<MapPolygon> list = new ArrayList<MapPolygon>();
@@ -569,5 +582,5 @@
                                     MapPolygon polygon = new MapPolygonImpl(shape.getPoints());
                                     list.add(polygon);
-                                    map.addMapPolygon(polygon);
+                                    defaultMap.addMapPolygon(polygon);
                                 }
                             }
@@ -575,5 +588,5 @@
                             // Remove previously drawn map polygons
                             for (MapPolygon polygon : mapPolygons.get(i)) {
-                                map.removeMapPolygon(polygon);
+                                defaultMap.removeMapPolygon(polygon);
                             }
                             mapPolygons.remove(i);
@@ -581,5 +594,5 @@
                      // Only display bounds when no polygons (shapes) are defined for this provider
                     } else {
-                        if (listdef.getSelectionModel().isSelectedIndex(i)) {
+                        if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
                             if (!mapRectangles.containsKey(i)) {
                                 // Add new map rectangle
@@ -588,9 +601,9 @@
                                 MapRectangle rectangle = new MapRectangleImpl(topLeft, bottomRight);
                                 mapRectangles.put(i, rectangle);
-                                map.addMapRectangle(rectangle);
+                                defaultMap.addMapRectangle(rectangle);
                             }
                         } else if (mapRectangles.containsKey(i)) {
                             // Remove previously drawn map rectangle
-                            map.removeMapRectangle(mapRectangles.get(i));
+                            defaultMap.removeMapRectangle(mapRectangles.get(i));
                             mapRectangles.remove(i);
                         }
@@ -600,5 +613,5 @@
         }
 
-        class NewEntryAction extends AbstractAction {
+        private class NewEntryAction extends AbstractAction {
             public NewEntryAction() {
                 putValue(NAME, tr("New"));
@@ -628,5 +641,5 @@
                 if (answer == JOptionPane.OK_OPTION) {
                     try {
-                        model.addRow(p.getImageryInfo());
+                        activeModel.addRow(p.getImageryInfo());
                     } catch (IllegalArgumentException ex) {
                         if (ex.getMessage() == null || ex.getMessage().isEmpty()) {
@@ -642,5 +655,5 @@
         }
 
-        class RemoveEntryAction extends AbstractAction implements ListSelectionListener {
+        private class RemoveEntryAction extends AbstractAction implements ListSelectionListener {
 
             public RemoveEntryAction() {
@@ -652,5 +665,5 @@
 
             protected void updateEnabledState() {
-                setEnabled(listActive.getSelectedRowCount() > 0);
+                setEnabled(activeTable.getSelectedRowCount() > 0);
             }
 
@@ -663,11 +676,11 @@
             public void actionPerformed(ActionEvent e) {
                 Integer i;
-                while ((i = listActive.getSelectedRow()) != -1) {
-                    model.removeRow(i);
-                }
-            }
-        }
-
-        class ActivateAction extends AbstractAction implements ListSelectionListener {
+                while ((i = activeTable.getSelectedRow()) != -1) {
+                    activeModel.removeRow(i);
+                }
+            }
+        }
+
+        private class ActivateAction extends AbstractAction implements ListSelectionListener {
             public ActivateAction() {
                 putValue(NAME, tr("Activate"));
@@ -677,5 +690,5 @@
 
             protected void updateEnabledState() {
-                setEnabled(listdef.getSelectedRowCount() > 0);
+                setEnabled(defaultTable.getSelectedRowCount() > 0);
             }
 
@@ -687,5 +700,5 @@
             @Override
             public void actionPerformed(ActionEvent e) {
-                int[] lines = listdef.getSelectedRows();
+                int[] lines = defaultTable.getSelectedRows();
                 if (lines.length == 0) {
                     JOptionPane.showMessageDialog(
@@ -700,14 +713,14 @@
 
                 outer: for (int i = 0; i < lines.length; i++) {
-                    ImageryInfo info = modeldef.getRow(lines[i]);
+                    ImageryInfo info = defaultModel.getRow(lines[i]);
 
                     // Check if an entry with exactly the same values already
                     // exists
-                    for (int j = 0; j < model.getRowCount(); j++) {
-                        if (info.equalsBaseValues(model.getRow(j))) {
+                    for (int j = 0; j < activeModel.getRowCount(); j++) {
+                        if (info.equalsBaseValues(activeModel.getRow(j))) {
                             // Select the already existing row so the user has
                             // some feedback in case an entry exists
-                            listActive.getSelectionModel().setSelectionInterval(j, j);
-                            listActive.scrollRectToVisible(listActive.getCellRect(j, 0, true));
+                            activeTable.getSelectionModel().setSelectionInterval(j, j);
+                            activeTable.scrollRectToVisible(activeTable.getCellRect(j, 0, true));
                             continue outer;
                         }
@@ -724,13 +737,13 @@
                     }
 
-                    model.addRow(new ImageryInfo(info));
-                    int lastLine = model.getRowCount() - 1;
-                    listActive.getSelectionModel().setSelectionInterval(lastLine, lastLine);
-                    listActive.scrollRectToVisible(listActive.getCellRect(lastLine, 0, true));
-                }
-            }
-        }
-
-        class ReloadAction extends AbstractAction {
+                    activeModel.addRow(new ImageryInfo(info));
+                    int lastLine = activeModel.getRowCount() - 1;
+                    activeTable.getSelectionModel().setSelectionInterval(lastLine, lastLine);
+                    activeTable.scrollRectToVisible(activeTable.getCellRect(lastLine, 0, true));
+                }
+            }
+        }
+
+        private class ReloadAction extends AbstractAction {
             public ReloadAction() {
                 putValue(SHORT_DESCRIPTION, tr("reload defaults"));
@@ -740,5 +753,5 @@
             public void actionPerformed(ActionEvent evt) {
                 layerInfo.loadDefaults(true);
-                modeldef.fireTableDataChanged();
+                defaultModel.fireTableDataChanged();
             }
         }
@@ -747,5 +760,5 @@
          * The table model for imagery layer list
          */
-        class ImageryLayerTableModel extends DefaultTableModel {
+        public class ImageryLayerTableModel extends DefaultTableModel {
             public ImageryLayerTableModel() {
                 setColumnIdentifiers(new String[] { tr("Menu Name"), tr("Imagery URL")});
@@ -810,5 +823,5 @@
          * The table model for the default imagery layer list
          */
-        class ImageryDefaultLayerTableModel extends DefaultTableModel {
+        public class ImageryDefaultLayerTableModel extends DefaultTableModel {
             public ImageryDefaultLayerTableModel() {
                 setColumnIdentifiers(new String[]{"", tr("Menu Name (Default)"), tr("Imagery URL (Default)")});
