Changeset 4577 in josm


Ignore:
Timestamp:
2011-11-05T18:31:05+01:00 (13 years ago)
Author:
Don-vip
Message:

Let plugins interact with Imagery Preferences dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java

    r4551 r4577  
    7070import org.openstreetmap.josm.data.imagery.ImageryInfo;
    7171import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryBounds;
    72 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    7372import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
    7473import org.openstreetmap.josm.data.imagery.OffsetBookmark;
     
    9190        }
    9291    }
    93     ImageryProvidersPanel imageryProviders;
    94     ImageryLayerInfo layerInfo;
     92    private ImageryProvidersPanel imageryProviders;
     93    private ImageryLayerInfo layerInfo;
    9594
    9695    // Common settings
     
    104103    // WMS Settings
    105104    private JComboBox browser;
    106     JCheckBox overlapCheckBox;
    107     JSpinner spinEast;
    108     JSpinner spinNorth;
    109     JSpinner spinSimConn;
     105    private JCheckBox overlapCheckBox;
     106    private JSpinner spinEast;
     107    private JSpinner spinNorth;
     108    private JSpinner spinSimConn;
    110109
    111110    //TMS settings controls
     
    283282        p.add(pane,GBC.std().fill(GBC.BOTH));
    284283    }
     284   
     285    public ImageryProvidersPanel getProvidersPanel() {
     286        return imageryProviders;
     287    }
    285288
    286289    private void loadSettings() {
     
    355358     */
    356359    public void setServerUrl(String server, String url) {
    357         for (int i = 0; i < imageryProviders.model.getRowCount(); i++) {
    358             if (server.equals(imageryProviders.model.getValueAt(i, 0).toString())) {
    359                 imageryProviders.model.setValueAt(url, i, 1);
     360        for (int i = 0; i < imageryProviders.activeModel.getRowCount(); i++) {
     361            if (server.equals(imageryProviders.activeModel.getValueAt(i, 0).toString())) {
     362                imageryProviders.activeModel.setValueAt(url, i, 1);
    360363                return;
    361364            }
    362365        }
    363         imageryProviders.model.addRow(new String[] { server, url });
     366        imageryProviders.activeModel.addRow(new String[] { server, url });
    364367    }
    365368
     
    372375     */
    373376    public String getServerUrl(String server) {
    374         for (int i = 0; i < imageryProviders.model.getRowCount(); i++) {
    375             if (server.equals(imageryProviders.model.getValueAt(i, 0).toString()))
    376                 return imageryProviders.model.getValueAt(i, 1).toString();
     377        for (int i = 0; i < imageryProviders.activeModel.getRowCount(); i++) {
     378            if (server.equals(imageryProviders.activeModel.getValueAt(i, 0).toString()))
     379                return imageryProviders.activeModel.getValueAt(i, 1).toString();
    377380        }
    378381        return null;
    379382    }
    380383
    381     static class ImageryProvidersPanel extends JPanel {
    382         final ImageryLayerTableModel model;
    383         final ImageryDefaultLayerTableModel modeldef;
     384    public static class ImageryProvidersPanel extends JPanel {
     385        // Public JTables and JMapViewer
     386        public final JTable activeTable;
     387        public final JTable defaultTable;
     388        public final JMapViewer defaultMap;
     389
     390        // Public models
     391        public final ImageryLayerTableModel activeModel;
     392        public final ImageryDefaultLayerTableModel defaultModel;
     393       
     394        // Public JToolbars
     395        public final JToolBar activeToolbar;
     396        public final JToolBar middleToolbar;
     397        public final JToolBar defaultToolbar;
     398
     399        // Private members
     400        private final PreferenceTabbedPane gui;
    384401        private final ImageryLayerInfo layerInfo;
    385         private JTable listActive;
    386         final JTable listdef;
    387         final JMapViewer map;
    388         final PreferenceTabbedPane gui;
    389402       
    390403        private class ImageryTableCellRenderer extends DefaultTableCellRenderer {
     
    423436            this.gui = gui;
    424437            this.layerInfo = layerInfoArg;
    425             this.model = new ImageryLayerTableModel();
    426 
    427             listActive = new JTable(model) {
     438            this.activeModel = new ImageryLayerTableModel();
     439
     440            activeTable = new JTable(activeModel) {
    428441                @Override
    429442                public String getToolTipText(MouseEvent e) {
    430443                    java.awt.Point p = e.getPoint();
    431                     return model.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString();
     444                    return activeModel.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString();
    432445                }
    433446            };
    434447
    435             modeldef = new ImageryDefaultLayerTableModel();
    436             listdef = new JTable(modeldef) {
     448            defaultModel = new ImageryDefaultLayerTableModel();
     449            defaultTable = new JTable(defaultModel) {
    437450                @Override
    438451                public String getToolTipText(MouseEvent e) {
    439452                    java.awt.Point p = e.getPoint();
    440                     return (String) modeldef.getValueAt(rowAtPoint(p), columnAtPoint(p));
     453                    return (String) defaultModel.getValueAt(rowAtPoint(p), columnAtPoint(p));
    441454                }
    442455            };
    443456
    444             modeldef.addTableModelListener(
     457            defaultModel.addTableModelListener(
    445458                new TableModelListener() {
    446459                    @Override
    447460                    public void tableChanged(TableModelEvent e) {
    448                         listActive.repaint();
     461                        activeTable.repaint();
    449462                    }
    450463                }
    451464            );
    452465
    453             model.addTableModelListener(
     466            activeModel.addTableModelListener(
    454467                new TableModelListener() {
    455468                    @Override
    456469                    public void tableChanged(TableModelEvent e) {
    457                         listdef.repaint();
     470                        defaultTable.repaint();
    458471                    }
    459472                }
    460473            );
    461474
    462             TableColumnModel mod = listdef.getColumnModel();
     475            TableColumnModel mod = defaultTable.getColumnModel();
    463476            mod.getColumn(2).setPreferredWidth(800);
    464477            mod.getColumn(2).setCellRenderer(new ImageryTableCellRenderer(layerInfo.getLayers()));
     
    466479            mod.getColumn(0).setPreferredWidth(50);
    467480
    468             mod = listActive.getColumnModel();
     481            mod = activeTable.getColumnModel();
    469482            mod.getColumn(1).setPreferredWidth(800);
    470483            mod.getColumn(1).setCellRenderer(new ImageryTableCellRenderer(layerInfo.getDefaultLayers()));
     
    472485
    473486            RemoveEntryAction remove = new RemoveEntryAction();
    474             listActive.getSelectionModel().addListSelectionListener(remove);
     487            activeTable.getSelectionModel().addListSelectionListener(remove);
    475488
    476489            add(new JLabel(tr("Available default entries:")), GBC.eol().insets(5, 5, 0, 0));
    477490            // Add default item list
    478             JScrollPane scrolldef = new JScrollPane(listdef);
     491            JScrollPane scrolldef = new JScrollPane(defaultTable);
    479492            scrolldef.setPreferredSize(new Dimension(200, 200));
    480493            add(scrolldef, GBC.std().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(1.0, 0.6).insets(5, 0, 0, 0));
    481494
    482495            // Add default item map
    483             map = new JMapViewer();
    484             map.setZoomContolsVisible(false);
    485             map.setMinimumSize(new Dimension(100, 200));
    486             add(map, GBC.std().insets(5, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
    487 
    488             listdef.getSelectionModel().addListSelectionListener(new DefListSelectionListener());
    489 
    490             JToolBar tb = new JToolBar(JToolBar.VERTICAL);
    491             tb.setFloatable(false);
    492             tb.setBorderPainted(false);
    493             tb.setOpaque(false);
    494             tb.add(new ReloadAction());
    495             add(tb, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 5, 0));
     496            defaultMap = new JMapViewer();
     497            defaultMap.setZoomContolsVisible(false);
     498            defaultMap.setMinimumSize(new Dimension(100, 200));
     499            add(defaultMap, GBC.std().insets(5, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
     500
     501            defaultTable.getSelectionModel().addListSelectionListener(new DefListSelectionListener());
     502
     503            defaultToolbar = new JToolBar(JToolBar.VERTICAL);
     504            defaultToolbar.setFloatable(false);
     505            defaultToolbar.setBorderPainted(false);
     506            defaultToolbar.setOpaque(false);
     507            defaultToolbar.add(new ReloadAction());
     508            add(defaultToolbar, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 5, 0));
    496509
    497510            ActivateAction activate = new ActivateAction();
    498             listdef.getSelectionModel().addListSelectionListener(activate);
     511            defaultTable.getSelectionModel().addListSelectionListener(activate);
    499512            JButton btnActivate = new JButton(activate);
    500513
    501             JToolBar tb2 = new JToolBar(JToolBar.VERTICAL);
    502             tb2.setFloatable(false);
    503             tb2.setBorderPainted(false);
    504             tb2.setOpaque(false);
    505             tb2.add(btnActivate);
    506             add(tb2, GBC.eol().anchor(GBC.CENTER).insets(5, 15, 5, 0));
     514            middleToolbar = new JToolBar(JToolBar.HORIZONTAL);
     515            middleToolbar.setFloatable(false);
     516            middleToolbar.setBorderPainted(false);
     517            middleToolbar.setOpaque(false);
     518            middleToolbar.add(btnActivate);
     519            add(middleToolbar, GBC.eol().anchor(GBC.CENTER).insets(5, 15, 5, 0));
    507520
    508521            add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
    509522
    510523            add(new JLabel(tr("Selected entries:")), GBC.eol().insets(5, 0, 0, 0));
    511             JScrollPane scroll = new JScrollPane(listActive);
     524            JScrollPane scroll = new JScrollPane(activeTable);
    512525            add(scroll, GBC.std().fill(GridBagConstraints.BOTH).span(GridBagConstraints.RELATIVE).weight(1.0, 0.4).insets(5, 0, 0, 5));
    513526            scroll.setPreferredSize(new Dimension(200, 200));
    514527
    515             JToolBar sideButtonTB = new JToolBar(JToolBar.VERTICAL);
    516             sideButtonTB.setFloatable(false);
    517             sideButtonTB.setBorderPainted(false);
    518             sideButtonTB.setOpaque(false);
    519             sideButtonTB.add(new NewEntryAction());
    520             //sideButtonTB.add(edit); TODO
    521             sideButtonTB.add(remove);
    522             add(sideButtonTB, GBC.eol().anchor(GBC.NORTH).insets(0, 0, 5, 5));
     528            activeToolbar = new JToolBar(JToolBar.VERTICAL);
     529            activeToolbar.setFloatable(false);
     530            activeToolbar.setBorderPainted(false);
     531            activeToolbar.setOpaque(false);
     532            activeToolbar.add(new NewEntryAction());
     533            //activeToolbar.add(edit); TODO
     534            activeToolbar.add(remove);
     535            add(activeToolbar, GBC.eol().anchor(GBC.NORTH).insets(0, 0, 5, 5));
    523536
    524537        }
     
    539552                // First index is set to -1 when the list is refreshed, so discard all map rectangles and polygons
    540553                if (e.getFirstIndex() == -1) {
    541                     map.removeAllMapRectangles();
    542                     map.removeAllMapPolygons();
     554                    defaultMap.removeAllMapRectangles();
     555                    defaultMap.removeAllMapPolygons();
    543556                    mapRectangles.clear();
    544557                    mapPolygons.clear();
     
    550563                    // If needed, adjust map to show all map rectangles and polygons
    551564                    if (!mapRectangles.isEmpty() || !mapPolygons.isEmpty()) {
    552                         map.setDisplayToFitMapElements(false, true, true);
    553                         map.zoomOut();
     565                        defaultMap.setDisplayToFitMapElements(false, true, true);
     566                        defaultMap.zoomOut();
    554567                    }
    555568                }
     
    557570
    558571            private void updateBoundsAndShapes(int i) {
    559                 ImageryBounds bounds = modeldef.getRow(i).getBounds();
     572                ImageryBounds bounds = defaultModel.getRow(i).getBounds();
    560573                if (bounds != null) {
    561574                    List<Shape> shapes = bounds.getShapes();
    562575                    if (shapes != null && !shapes.isEmpty()) {
    563                         if (listdef.getSelectionModel().isSelectedIndex(i)) {
     576                        if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
    564577                            if (!mapPolygons.containsKey(i)) {
    565578                                List<MapPolygon> list = new ArrayList<MapPolygon>();
     
    569582                                    MapPolygon polygon = new MapPolygonImpl(shape.getPoints());
    570583                                    list.add(polygon);
    571                                     map.addMapPolygon(polygon);
     584                                    defaultMap.addMapPolygon(polygon);
    572585                                }
    573586                            }
     
    575588                            // Remove previously drawn map polygons
    576589                            for (MapPolygon polygon : mapPolygons.get(i)) {
    577                                 map.removeMapPolygon(polygon);
     590                                defaultMap.removeMapPolygon(polygon);
    578591                            }
    579592                            mapPolygons.remove(i);
     
    581594                     // Only display bounds when no polygons (shapes) are defined for this provider
    582595                    } else {
    583                         if (listdef.getSelectionModel().isSelectedIndex(i)) {
     596                        if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
    584597                            if (!mapRectangles.containsKey(i)) {
    585598                                // Add new map rectangle
     
    588601                                MapRectangle rectangle = new MapRectangleImpl(topLeft, bottomRight);
    589602                                mapRectangles.put(i, rectangle);
    590                                 map.addMapRectangle(rectangle);
     603                                defaultMap.addMapRectangle(rectangle);
    591604                            }
    592605                        } else if (mapRectangles.containsKey(i)) {
    593606                            // Remove previously drawn map rectangle
    594                             map.removeMapRectangle(mapRectangles.get(i));
     607                            defaultMap.removeMapRectangle(mapRectangles.get(i));
    595608                            mapRectangles.remove(i);
    596609                        }
     
    600613        }
    601614
    602         class NewEntryAction extends AbstractAction {
     615        private class NewEntryAction extends AbstractAction {
    603616            public NewEntryAction() {
    604617                putValue(NAME, tr("New"));
     
    628641                if (answer == JOptionPane.OK_OPTION) {
    629642                    try {
    630                         model.addRow(p.getImageryInfo());
     643                        activeModel.addRow(p.getImageryInfo());
    631644                    } catch (IllegalArgumentException ex) {
    632645                        if (ex.getMessage() == null || ex.getMessage().isEmpty()) {
     
    642655        }
    643656
    644         class RemoveEntryAction extends AbstractAction implements ListSelectionListener {
     657        private class RemoveEntryAction extends AbstractAction implements ListSelectionListener {
    645658
    646659            public RemoveEntryAction() {
     
    652665
    653666            protected void updateEnabledState() {
    654                 setEnabled(listActive.getSelectedRowCount() > 0);
     667                setEnabled(activeTable.getSelectedRowCount() > 0);
    655668            }
    656669
     
    663676            public void actionPerformed(ActionEvent e) {
    664677                Integer i;
    665                 while ((i = listActive.getSelectedRow()) != -1) {
    666                     model.removeRow(i);
    667                 }
    668             }
    669         }
    670 
    671         class ActivateAction extends AbstractAction implements ListSelectionListener {
     678                while ((i = activeTable.getSelectedRow()) != -1) {
     679                    activeModel.removeRow(i);
     680                }
     681            }
     682        }
     683
     684        private class ActivateAction extends AbstractAction implements ListSelectionListener {
    672685            public ActivateAction() {
    673686                putValue(NAME, tr("Activate"));
     
    677690
    678691            protected void updateEnabledState() {
    679                 setEnabled(listdef.getSelectedRowCount() > 0);
     692                setEnabled(defaultTable.getSelectedRowCount() > 0);
    680693            }
    681694
     
    687700            @Override
    688701            public void actionPerformed(ActionEvent e) {
    689                 int[] lines = listdef.getSelectedRows();
     702                int[] lines = defaultTable.getSelectedRows();
    690703                if (lines.length == 0) {
    691704                    JOptionPane.showMessageDialog(
     
    700713
    701714                outer: for (int i = 0; i < lines.length; i++) {
    702                     ImageryInfo info = modeldef.getRow(lines[i]);
     715                    ImageryInfo info = defaultModel.getRow(lines[i]);
    703716
    704717                    // Check if an entry with exactly the same values already
    705718                    // exists
    706                     for (int j = 0; j < model.getRowCount(); j++) {
    707                         if (info.equalsBaseValues(model.getRow(j))) {
     719                    for (int j = 0; j < activeModel.getRowCount(); j++) {
     720                        if (info.equalsBaseValues(activeModel.getRow(j))) {
    708721                            // Select the already existing row so the user has
    709722                            // some feedback in case an entry exists
    710                             listActive.getSelectionModel().setSelectionInterval(j, j);
    711                             listActive.scrollRectToVisible(listActive.getCellRect(j, 0, true));
     723                            activeTable.getSelectionModel().setSelectionInterval(j, j);
     724                            activeTable.scrollRectToVisible(activeTable.getCellRect(j, 0, true));
    712725                            continue outer;
    713726                        }
     
    724737                    }
    725738
    726                     model.addRow(new ImageryInfo(info));
    727                     int lastLine = model.getRowCount() - 1;
    728                     listActive.getSelectionModel().setSelectionInterval(lastLine, lastLine);
    729                     listActive.scrollRectToVisible(listActive.getCellRect(lastLine, 0, true));
    730                 }
    731             }
    732         }
    733 
    734         class ReloadAction extends AbstractAction {
     739                    activeModel.addRow(new ImageryInfo(info));
     740                    int lastLine = activeModel.getRowCount() - 1;
     741                    activeTable.getSelectionModel().setSelectionInterval(lastLine, lastLine);
     742                    activeTable.scrollRectToVisible(activeTable.getCellRect(lastLine, 0, true));
     743                }
     744            }
     745        }
     746
     747        private class ReloadAction extends AbstractAction {
    735748            public ReloadAction() {
    736749                putValue(SHORT_DESCRIPTION, tr("reload defaults"));
     
    740753            public void actionPerformed(ActionEvent evt) {
    741754                layerInfo.loadDefaults(true);
    742                 modeldef.fireTableDataChanged();
     755                defaultModel.fireTableDataChanged();
    743756            }
    744757        }
     
    747760         * The table model for imagery layer list
    748761         */
    749         class ImageryLayerTableModel extends DefaultTableModel {
     762        public class ImageryLayerTableModel extends DefaultTableModel {
    750763            public ImageryLayerTableModel() {
    751764                setColumnIdentifiers(new String[] { tr("Menu Name"), tr("Imagery URL")});
     
    810823         * The table model for the default imagery layer list
    811824         */
    812         class ImageryDefaultLayerTableModel extends DefaultTableModel {
     825        public class ImageryDefaultLayerTableModel extends DefaultTableModel {
    813826            public ImageryDefaultLayerTableModel() {
    814827                setColumnIdentifiers(new String[]{"", tr("Menu Name (Default)"), tr("Imagery URL (Default)")});
Note: See TracChangeset for help on using the changeset viewer.