Changeset 4577 in josm


Ignore:
Timestamp:
Nov 5, 2011 6:31:05 PM (19 months 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.