Changeset 13608 in josm


Ignore:
Timestamp:
2018-04-08T01:45:57+02:00 (3 months ago)
Author:
Don-vip
Message:

fix #15711 - Vizualize imagery layers with non-zero offsets (patch by skorbut)

Location:
trunk
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/.settings/org.eclipse.jdt.ui.prefs

    r8510 r13608  
    4444sp_cleanup.remove_trailing_whitespaces_all=true
    4545sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
    46 sp_cleanup.remove_unnecessary_casts=true
     46sp_cleanup.remove_unnecessary_casts=false
    4747sp_cleanup.remove_unnecessary_nls_tags=false
    4848sp_cleanup.remove_unused_imports=false
  • trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    r13285 r13608  
    4343import org.openstreetmap.josm.Main;
    4444import org.openstreetmap.josm.actions.MergeLayerAction;
     45import org.openstreetmap.josm.data.coor.EastNorth;
     46import org.openstreetmap.josm.data.imagery.OffsetBookmark;
    4547import org.openstreetmap.josm.data.preferences.AbstractProperty;
    4648import org.openstreetmap.josm.gui.MainApplication;
     
    5759import org.openstreetmap.josm.gui.dialogs.layer.MoveUpAction;
    5860import org.openstreetmap.josm.gui.dialogs.layer.ShowHideLayerAction;
     61import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
    5962import org.openstreetmap.josm.gui.layer.JumpToMarkerActions;
    6063import org.openstreetmap.josm.gui.layer.Layer;
     
    6770import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
    6871import org.openstreetmap.josm.gui.layer.NativeScaleLayer;
     72import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings.DisplaySettingsChangeEvent;
     73import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings.DisplaySettingsChangeListener;
    6974import org.openstreetmap.josm.gui.util.MultikeyActionsHandler;
    7075import org.openstreetmap.josm.gui.util.MultikeyShortcutAction.MultikeyInfo;
     
    8691 * @since 17
    8792 */
    88 public class LayerListDialog extends ToggleDialog {
     93public class LayerListDialog extends ToggleDialog implements DisplaySettingsChangeListener {
    8994    /** the unique instance of the dialog */
    9095    private static volatile LayerListDialog instance;
     
    206211        layerList.getColumnModel().getColumn(1).setResizable(false);
    207212
    208         layerList.getColumnModel().getColumn(2).setCellRenderer(new LayerVisibleCellRenderer());
    209         layerList.getColumnModel().getColumn(2).setCellEditor(new LayerVisibleCellEditor(new LayerVisibleCheckBox()));
     213        layerList.getColumnModel().getColumn(2).setCellRenderer(new OffsetLayerCellRenderer());
     214        layerList.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(new OffsetLayerCheckBox()));
    210215        layerList.getColumnModel().getColumn(2).setMaxWidth(16);
    211216        layerList.getColumnModel().getColumn(2).setPreferredWidth(16);
    212217        layerList.getColumnModel().getColumn(2).setResizable(false);
    213218
    214         layerList.getColumnModel().getColumn(3).setCellRenderer(new LayerNameCellRenderer());
    215         layerList.getColumnModel().getColumn(3).setCellEditor(new LayerNameCellEditor(new DisableShortcutsOnFocusGainedTextField()));
     219        layerList.getColumnModel().getColumn(3).setCellRenderer(new LayerVisibleCellRenderer());
     220        layerList.getColumnModel().getColumn(3).setCellEditor(new LayerVisibleCellEditor(new LayerVisibleCheckBox()));
     221        layerList.getColumnModel().getColumn(3).setMaxWidth(16);
     222        layerList.getColumnModel().getColumn(3).setPreferredWidth(16);
     223        layerList.getColumnModel().getColumn(3).setResizable(false);
     224
     225        layerList.getColumnModel().getColumn(4).setCellRenderer(new LayerNameCellRenderer());
     226        layerList.getColumnModel().getColumn(4).setCellEditor(new LayerNameCellEditor(new DisableShortcutsOnFocusGainedTextField()));
    216227        // Disable some default JTable shortcuts to use JOSM ones (see #5678, #10458)
    217228        for (KeyStroke ks : new KeyStroke[] {
     
    442453    }
    443454
     455    private static class OffsetLayerCheckBox extends JCheckBox {
     456        OffsetLayerCheckBox() {
     457            setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
     458            ImageIcon blank = ImageProvider.get("dialogs/layerlist", "blank");
     459            ImageIcon withOffset = ImageProvider.get("dialogs/layerlist", "offset");
     460            setIcon(blank);
     461            setSelectedIcon(withOffset);
     462        }
     463    }
     464
    444465    private static class ActiveLayerCellRenderer implements TableCellRenderer {
    445466        private final JCheckBox cb;
     
    518539                cb.setSelected(false);
    519540                cb.setToolTipText(tr("this layer has no native resolution"));
     541            }
     542            return cb;
     543        }
     544    }
     545
     546    private static class OffsetLayerCellRenderer implements TableCellRenderer {
     547        private final JCheckBox cb;
     548
     549        /**
     550         * Constructs a new {@code OffsetLayerCellRenderer}.
     551         */
     552        OffsetLayerCellRenderer() {
     553            cb = new OffsetLayerCheckBox();
     554            cb.setEnabled(false);
     555        }
     556
     557        @Override
     558        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
     559            Layer layer = (Layer) value;
     560            if (layer instanceof AbstractTileSourceLayer<?>) {
     561                if (EastNorth.ZERO.equals(((AbstractTileSourceLayer<?>) layer).getDisplaySettings().getDisplacement())) {
     562                    cb.setSelected(false);
     563                    cb.setEnabled(false); // TODO: allow reselecting checkbox and thereby setting the old offset again
     564                    cb.setToolTipText(tr("layer is without a user-defined offset"));
     565                } else {
     566                    cb.setSelected(true);
     567                    cb.setEnabled(true);
     568                    cb.setToolTipText(tr("layer has a user-defined offset (click to remove offset)"));
     569                }
     570
     571            } else {
     572                cb.setSelected(false);
     573                cb.setEnabled(false);
     574                cb.setToolTipText(tr("this layer can not have an offset"));
    520575            }
    521576            return cb;
     
    781836            selectionModel.setSelectionInterval(idx, idx);
    782837            ensureSelectedIsVisible();
     838            if (layer instanceof AbstractTileSourceLayer<?>) {
     839                ((AbstractTileSourceLayer<?>) layer).getDisplaySettings().addSettingsChangeListener(LayerListDialog.getInstance());
     840            }
    783841        }
    784842
     
    9651023        @Override
    9661024        public int getColumnCount() {
    967             return 4;
     1025            return 5;
    9681026        }
    9691027
     
    9761034                case 1:
    9771035                case 2:
    978                 case 3: return layers.get(row);
     1036                case 3:
     1037                case 4: return layers.get(row);
    9791038                default: // Do nothing
    9801039                }
     
    10051064                    } else if (l instanceof NativeScaleLayer) {
    10061065                        map.mapView.setNativeScaleLayer((NativeScaleLayer) l);
    1007                         if (oldLayer != null) {
    1008                             int idx = getLayers().indexOf(oldLayer);
     1066                        if (oldLayer instanceof Layer) {
     1067                            int idx = getLayers().indexOf((Layer) oldLayer);
    10091068                            if (idx >= 0) {
    10101069                                fireTableCellUpdated(idx, col);
     
    10141073                    break;
    10151074                case 2:
     1075                    // reset layer offset
     1076                    if (l instanceof AbstractTileSourceLayer<?>) {
     1077                        AbstractTileSourceLayer<?> abstractTileSourceLayer = (AbstractTileSourceLayer<?>) l;
     1078                        OffsetBookmark offsetBookmark = abstractTileSourceLayer.getDisplaySettings().getOffsetBookmark();
     1079                        if (offsetBookmark != null) {
     1080                            offsetBookmark.setDisplacement(EastNorth.ZERO);
     1081                            abstractTileSourceLayer.getDisplaySettings().setOffsetBookmark(offsetBookmark);
     1082                        }
     1083                    }
     1084                    break;
     1085                case 3:
    10161086                    l.setVisible((Boolean) value);
    10171087                    break;
    1018                 case 3:
     1088                case 4:
    10191089                    l.rename((String) value);
    10201090                    break;
     
    12141284        return new MultikeyInfo(index, l.getName());
    12151285    }
     1286
     1287    @Override
     1288    public void displaySettingsChanged(DisplaySettingsChangeEvent e) {
     1289        if ("displacement".equals(e.getChangedSetting())) {
     1290            layerList.repaint();
     1291        }
     1292    }
    12161293}
Note: See TracChangeset for help on using the changeset viewer.