Changeset 7539 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
- Timestamp:
- 2014-09-15T19:42:31+02:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
r7005 r7539 24 24 25 25 import javax.swing.AbstractAction; 26 import javax.swing.Action;27 26 import javax.swing.DefaultCellEditor; 28 27 import javax.swing.DefaultListSelectionModel; … … 62 61 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 63 62 import org.openstreetmap.josm.gui.util.GuiHelper; 63 import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField; 64 64 import org.openstreetmap.josm.gui.widgets.JosmTextField; 65 65 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; … … 76 76 * change the ordering of the layers, to hide/show layers, to activate layers, 77 77 * and to delete layers. 78 * 78 * @since 17 79 79 */ 80 80 public class LayerListDialog extends ToggleDialog { … … 127 127 public void actionPerformed(ActionEvent e) { 128 128 final Layer l = model.getLayer(model.getRowCount() - layerIndex - 1); 129 if(l != null) { 129 if (l != null) { 130 130 l.toggleVisible(); 131 131 } … … 135 135 private final Shortcut[] visibilityToggleShortcuts = new Shortcut[10]; 136 136 private final ToggleLayerIndexVisibility[] visibilityToggleActions = new ToggleLayerIndexVisibility[10]; 137 137 138 /** 138 139 * registers (shortcut to toggle right hand side toggle dialogs)+(number keys) shortcuts … … 153 154 154 155 /** 155 * Create anlayer list and attach it to the given mapView.156 * Creates a layer list and attach it to the given mapView. 156 157 */ 157 158 protected LayerListDialog(MapFrame mapFrame) { … … 189 190 layerList.getColumnModel().getColumn(1).setResizable(false); 190 191 layerList.getColumnModel().getColumn(2).setCellRenderer(new LayerNameCellRenderer()); 191 layerList.getColumnModel().getColumn(2).setCellEditor(new LayerNameCellEditor(new JosmTextField())); 192 layerList.getColumnModel().getColumn(2).setCellEditor(new LayerNameCellEditor(new DisableShortcutsOnFocusGainedTextField())); 193 // Disable some default JTable shortcuts to use JOSM ones (see #5678, #10458) 192 194 for (KeyStroke ks : new KeyStroke[] { 193 KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK), 194 KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK), 195 KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.SHIFT_MASK), 196 KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_MASK), 197 KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_MASK), 198 KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_MASK), 195 KeyStroke.getKeyStroke(KeyEvent.VK_A, GuiHelper.getMenuShortcutKeyMaskEx()), 196 KeyStroke.getKeyStroke(KeyEvent.VK_C, GuiHelper.getMenuShortcutKeyMaskEx()), 197 KeyStroke.getKeyStroke(KeyEvent.VK_V, GuiHelper.getMenuShortcutKeyMaskEx()), 198 KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.SHIFT_DOWN_MASK), 199 KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_DOWN_MASK), 200 KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_DOWN_MASK), 201 KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_DOWN_MASK), 202 KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.CTRL_DOWN_MASK), 203 KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.CTRL_DOWN_MASK), 204 KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.CTRL_DOWN_MASK), 205 KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.CTRL_DOWN_MASK), 199 206 KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0), 200 207 KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0), 208 KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), 209 KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0), 201 210 }) 202 211 { … … 246 255 adaptTo(showHideLayerAction, selectionModel); 247 256 248 //-- layer opacity action 257 // -- layer opacity action 249 258 LayerOpacityAction layerOpacityAction = new LayerOpacityAction(); 250 259 adaptTo(layerOpacityAction, selectionModel); … … 261 270 adaptTo(duplicateLayerAction, selectionModel); 262 271 263 //-- delete layer action 272 // -- delete layer action 264 273 DeleteLayerAction deleteLayerAction = new DeleteLayerAction(); 265 274 layerList.getActionMap().put("deleteLayer", deleteLayerAction); … … 309 318 } 310 319 320 /** 321 * Returns the layer list model. 322 * @return the layer list model 323 */ 311 324 public LayerListModel getModel() { 312 325 return model; … … 372 385 */ 373 386 public final class DeleteLayerAction extends AbstractAction implements IEnabledStateUpdating, LayerAction { 387 374 388 /** 375 389 * Creates a {@link DeleteLayerAction} which will delete the currently 376 390 * selected layers in the layer dialog. 377 *378 391 */ 379 392 public DeleteLayerAction() { … … 423 436 } 424 437 438 /** 439 * Action which will toggle the visibility of the currently selected layers. 440 */ 425 441 public final class ShowHideLayerAction extends AbstractAction implements IEnabledStateUpdating, LayerAction, MultikeyShortcutAction { 426 442 … … 431 447 * Creates a {@link ShowHideLayerAction} which will toggle the visibility of 432 448 * the currently selected layers 433 * 434 */ 435 public ShowHideLayerAction(boolean init) { 449 */ 450 public ShowHideLayerAction() { 436 451 putValue(NAME, tr("Show/hide")); 437 452 putValue(SMALL_ICON, ImageProvider.get("dialogs", "showhide")); … … 441 456 tr("Show/hide layer")), KeyEvent.VK_S, Shortcut.SHIFT); 442 457 multikeyShortcut.setAccelerator(this); 443 if (init) { 444 updateEnabledState(); 445 } 446 } 447 448 /** 449 * Constructs a new {@code ShowHideLayerAction}. 450 */ 451 public ShowHideLayerAction() { 452 this(true); 458 updateEnabledState(); 453 459 } 454 460 … … 517 523 } 518 524 525 /** 526 * Action which allows to change the opacity of one or more layers. 527 */ 519 528 public final class LayerOpacityAction extends AbstractAction implements IEnabledStateUpdating, LayerAction { 520 529 private Layer layer; … … 523 532 524 533 /** 525 * Creates a {@link LayerOpacityAction} which allows to ch enge the534 * Creates a {@link LayerOpacityAction} which allows to change the 526 535 * opacity of one or more layers. 527 536 * … … 632 641 private Shortcut multikeyShortcut; 633 642 643 /** 644 * Constructs a new {@code ActivateLayerAction}. 645 * @param layer the layer 646 */ 634 647 public ActivateLayerAction(Layer layer) { 635 648 this(); … … 670 683 671 684 private void execute(Layer layer) { 672 // model is going to be updated via LayerChangeListener 673 // and PropertyChangeEvents 685 // model is going to be updated via LayerChangeListener and PropertyChangeEvents 674 686 Main.map.mapView.setActiveLayer(layer); 675 687 layer.setVisible(true); … … 704 716 updateEnabledState(); 705 717 } 718 706 719 @Override 707 720 public void layerAdded(Layer newLayer) { 708 721 updateEnabledState(); 709 722 } 723 710 724 @Override 711 725 public void layerRemoved(Layer oldLayer) { … … 738 752 private Layer layer; 739 753 754 /** 755 * Constructs a new {@code MergeAction}. 756 * @param layer the layer 757 * @throws IllegalArgumentException if {@code layer} is null 758 */ 740 759 public MergeAction(Layer layer) throws IllegalArgumentException { 741 760 this(); … … 806 825 */ 807 826 public final class DuplicateAction extends AbstractAction implements IEnabledStateUpdating { 808 private Layer layer; 809 827 private Layer layer; 828 829 /** 830 * Constructs a new {@code DuplicateAction}. 831 * @param layer the layer 832 * @throws IllegalArgumentException if {@code layer} is null 833 */ 810 834 public DuplicateAction(Layer layer) throws IllegalArgumentException { 811 835 this(); … … 891 915 892 916 private static class LayerVisibleCheckBox extends JCheckBox { 893 private final ImageIcon icon _eye;894 private final ImageIcon icon _eye_translucent;917 private final ImageIcon iconEye; 918 private final ImageIcon iconEyeTranslucent; 895 919 private boolean isTranslucent; 896 920 public LayerVisibleCheckBox() { 897 921 setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 898 icon _eye = ImageProvider.get("dialogs/layerlist", "eye");899 icon _eye_translucent = ImageProvider.get("dialogs/layerlist", "eye-translucent");922 iconEye = ImageProvider.get("dialogs/layerlist", "eye"); 923 iconEyeTranslucent = ImageProvider.get("dialogs/layerlist", "eye-translucent"); 900 924 setIcon(ImageProvider.get("dialogs/layerlist", "eye-off")); 901 925 setPressedIcon(ImageProvider.get("dialogs/layerlist", "eye-pressed")); 902 setSelectedIcon(icon _eye);926 setSelectedIcon(iconEye); 903 927 isTranslucent = false; 904 928 } … … 907 931 if (this.isTranslucent == isTranslucent) return; 908 932 if (isTranslucent) { 909 setSelectedIcon(icon _eye_translucent);933 setSelectedIcon(iconEyeTranslucent); 910 934 } else { 911 setSelectedIcon(icon _eye);935 setSelectedIcon(iconEye); 912 936 } 913 937 this.isTranslucent = isTranslucent; … … 923 947 924 948 private static class ActiveLayerCellRenderer implements TableCellRenderer { 925 JCheckBox cb; 949 final JCheckBox cb; 926 950 public ActiveLayerCellRenderer() { 927 951 cb = new ActiveLayerCheckBox(); … … 938 962 939 963 private static class LayerVisibleCellRenderer implements TableCellRenderer { 940 LayerVisibleCheckBox cb; 964 final LayerVisibleCheckBox cb; 941 965 public LayerVisibleCellRenderer() { 942 966 this.cb = new LayerVisibleCheckBox(); … … 953 977 954 978 private static class LayerVisibleCellEditor extends DefaultCellEditor { 955 LayerVisibleCheckBox cb; 979 final LayerVisibleCheckBox cb; 956 980 public LayerVisibleCellEditor(LayerVisibleCheckBox cb) { 957 981 super(cb); … … 1014 1038 1015 1039 private static class LayerNameCellEditor extends DefaultCellEditor { 1016 public LayerNameCellEditor( JosmTextField tf) {1040 public LayerNameCellEditor(DisableShortcutsOnFocusGainedTextField tf) { 1017 1041 super(tf); 1018 1042 } … … 1027 1051 1028 1052 class PopupMenuHandler extends PopupMenuLauncher { 1029 @Override public void showMenu(MouseEvent evt) { 1053 @Override 1054 public void showMenu(MouseEvent evt) { 1030 1055 Layer layer = getModel().getLayer(layerList.getSelectedRow()); 1031 1056 menu = new LayerListPopup(getModel().getSelectedLayers(), layer); … … 1079 1104 1080 1105 /** 1081 * Observer interface to be implemented by views using {@link LayerListModel} 1082 * 1106 * Observer interface to be implemented by views using {@link LayerListModel}. 1083 1107 */ 1084 1108 public interface LayerListModelListener { 1109 1110 /** 1111 * Fired when a layer is made visible. 1112 * @param index the layer index 1113 * @param layer the layer 1114 */ 1085 1115 public void makeVisible(int index, Layer layer); 1116 1117 1118 /** 1119 * Fired when something has changed in the layer list model. 1120 */ 1086 1121 public void refresh(); 1087 1122 } … … 1161 1196 1162 1197 /** 1163 * Populates the model with the current layers managed by 1164 * {@link MapView}. 1165 * 1198 * Populates the model with the current layers managed by {@link MapView}. 1166 1199 */ 1167 1200 public void populate() { 1168 1201 for (Layer layer: getLayers()) { 1169 1202 // make sure the model is registered exactly once 1170 //1171 1203 layer.removePropertyChangeListener(this); 1172 1204 layer.addPropertyChangeListener(this); … … 1176 1208 1177 1209 /** 1178 * Marks <code>layer</code> as selected layer. Ignored, if 1179 * layer is null. 1210 * Marks <code>layer</code> as selected layer. Ignored, if layer is null. 1180 1211 * 1181 1212 * @param layer the layer. … … 1192 1223 1193 1224 /** 1194 * Replies the list of currently selected layers. Never null, but may 1195 * be empty. 1196 * 1197 * @return the list of currently selected layers. Never null, but may 1198 * be empty. 1225 * Replies the list of currently selected layers. Never null, but may be empty. 1226 * 1227 * @return the list of currently selected layers. Never null, but may be empty. 1199 1228 */ 1200 1229 public List<Layer> getSelectedLayers() { … … 1412 1441 final Layer activeLayer = getActiveLayer(); 1413 1442 if (activeLayer != null) { 1414 // there's an active layer - select it and make it 1415 // visible 1443 // there's an active layer - select it and make it visible 1416 1444 int idx = getLayers().indexOf(activeLayer); 1417 1445 selectionModel.setSelectionInterval(idx, idx); 1418 1446 ensureSelectedIsVisible(); 1419 1447 } else { 1420 // no active layer - select the first one and make 1421 // it visible 1448 // no active layer - select the first one and make it visible 1422 1449 selectionModel.setSelectionInterval(0, 0); 1423 1450 ensureSelectedIsVisible(); … … 1557 1584 1558 1585 /** 1559 * Creates a {@link ShowHideLayerAction} for <code>layer</code>in the1586 * Creates a {@link ShowHideLayerAction} in the 1560 1587 * context of this {@link LayerListDialog}. 1561 1588 * … … 1563 1590 */ 1564 1591 public ShowHideLayerAction createShowHideLayerAction() { 1565 ShowHideLayerAction act = new ShowHideLayerAction(true); 1566 act.putValue(Action.NAME, tr("Show/Hide")); 1567 return act; 1568 } 1569 1570 /** 1571 * Creates a {@link DeleteLayerAction} for <code>layer</code> in the 1592 return new ShowHideLayerAction(); 1593 } 1594 1595 /** 1596 * Creates a {@link DeleteLayerAction} in the 1572 1597 * context of this {@link LayerListDialog}. 1573 1598 * … … 1575 1600 */ 1576 1601 public DeleteLayerAction createDeleteLayerAction() { 1577 // the delete layer action doesn't depend on the current layer1578 1602 return new DeleteLayerAction(); 1579 1603 } … … 1601 1625 } 1602 1626 1627 /** 1628 * Returns the layer at given index, or {@code null}. 1629 * @param index the index 1630 * @return the layer at given index, or {@code null} if index out of range 1631 */ 1603 1632 public static Layer getLayerForIndex(int index) { 1604 1633 … … 1614 1643 } 1615 1644 1616 // This is not Class<? extends Layer> on purpose, to allow asking for layers implementing some interface 1645 /** 1646 * Returns a list of info on all layers of a given class. 1647 * @param layerClass The layer class. This is not {@code Class<? extends Layer>} on purpose, 1648 * to allow asking for layers implementing some interface 1649 * @return list of info on all layers assignable from {@code layerClass} 1650 */ 1617 1651 public static List<MultikeyInfo> getLayerInfoByClass(Class<?> layerClass) { 1618 1652 … … 1635 1669 } 1636 1670 1671 /** 1672 * Determines if a layer is valid (contained in layer list). 1673 * @param l the layer 1674 * @return {@code true} if layer {@code l} is contained in current layer list 1675 */ 1637 1676 public static boolean isLayerValid(Layer l) { 1638 if (l == null) 1677 1678 if (l == null || !Main.isDisplayingMapView()) 1639 1679 return false; 1640 1680 1641 if (!Main.isDisplayingMapView())1642 return false;1643 1644 1681 return Main.map.mapView.getAllLayersAsList().contains(l); 1645 1682 } 1646 1683 1684 /** 1685 * Returns info about layer. 1686 * @param l the layer 1687 * @return info about layer {@code l} 1688 */ 1647 1689 public static MultikeyInfo getLayerInfo(Layer l) { 1648 1690 1649 if (l == null) 1650 return null; 1651 1652 if (!Main.isDisplayingMapView()) 1691 if (l == null || !Main.isDisplayingMapView()) 1653 1692 return null; 1654 1693
Note:
See TracChangeset
for help on using the changeset viewer.
