Changeset 10288 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs
- Timestamp:
- 2016-05-27T19:19:13+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
r10250 r10288 60 60 import org.openstreetmap.josm.gui.layer.JumpToMarkerActions; 61 61 import org.openstreetmap.josm.gui.layer.Layer; 62 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; 63 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; 64 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent; 65 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent; 66 import org.openstreetmap.josm.gui.layer.MainLayerManager; 67 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 68 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 62 69 import org.openstreetmap.josm.gui.layer.NativeScaleLayer; 63 70 import org.openstreetmap.josm.gui.util.GuiHelper; … … 75 82 * change the ordering of the layers, to hide/show layers, to activate layers, 76 83 * and to delete layers. 84 * <p> 85 * Support for multiple {@link LayerListDialog} is currently not complete but intended for the future. 77 86 * @since 17 78 87 */ … … 134 143 private final transient Shortcut[] visibilityToggleShortcuts = new Shortcut[10]; 135 144 private final ToggleLayerIndexVisibility[] visibilityToggleActions = new ToggleLayerIndexVisibility[10]; 145 146 /** 147 * The {@link MainLayerManager} this list is for. 148 */ 149 private final transient MainLayerManager layerManager; 136 150 137 151 /** … … 155 169 */ 156 170 protected LayerListDialog(MapFrame mapFrame) { 171 this(mapFrame.mapView.getLayerManager()); 172 } 173 174 /** 175 * Creates a layer list and attach it to the given mapView. 176 * @param layerManager The layer manager this list is for 177 */ 178 private LayerListDialog(MainLayerManager layerManager) { 157 179 super(tr("Layers"), "layerlist", tr("Open a list of all loaded layers."), 158 180 Shortcut.registerShortcut("subwindow:layers", tr("Toggle: {0}", tr("Layers")), KeyEvent.VK_L, 159 181 Shortcut.ALT_SHIFT), 100, true); 182 this.layerManager = layerManager; 160 183 161 184 // create the models … … 167 190 // create the list control 168 191 // 169 layerList = new LayerList(model );192 layerList = new LayerList(model, layerManager); 170 193 layerList.setSelectionModel(selectionModel); 171 194 layerList.addMouseListener(new PopupMenuHandler()); … … 219 242 // init the model 220 243 // 221 final MapView mapView = mapFrame.mapView;222 244 model.populate(); 223 model.setSelectedLayer( mapView.getActiveLayer());245 model.setSelectedLayer(layerManager.getActiveLayer()); 224 246 model.addLayerListModelListener( 225 247 new LayerListModelListener() { … … 297 319 } 298 320 321 /** 322 * Gets the layer manager this dialog is for. 323 * @return The layer manager. 324 * @since 10288 325 */ 326 public MainLayerManager getLayerManager() { 327 return layerManager; 328 } 329 299 330 @Override 300 331 public void showNotify() { 301 332 MapView.addLayerChangeListener(activateLayerAction); 302 MapView.addLayerChangeListener(model); 333 layerManager.addLayerChangeListener(model); 334 layerManager.addActiveLayerChangeListener(model, true); 303 335 model.populate(); 304 336 } … … 306 338 @Override 307 339 public void hideNotify() { 308 MapView.removeLayerChangeListener(model); 340 layerManager.removeLayerChangeListener(model); 341 layerManager.removeActiveLayerChangeListener(model); 309 342 MapView.removeLayerChangeListener(activateLayerAction); 310 343 } … … 513 546 514 547 protected boolean isActiveLayer(Layer layer) { 515 if (!Main.isDisplayingMapView()) 516 return false; 517 return Main.map.mapView.getActiveLayer() == layer; 548 return getLayerManager().getActiveLayer() == layer; 518 549 } 519 550 … … 612 643 * the properties {@link Layer#VISIBLE_PROP} and {@link Layer#NAME_PROP}. 613 644 */ 614 public static final class LayerListModel extends AbstractTableModel implements MapView.LayerChangeListener, PropertyChangeListener { 645 public static final class LayerListModel extends AbstractTableModel 646 implements LayerChangeListener, ActiveLayerChangeListener, PropertyChangeListener { 615 647 /** manages list selection state*/ 616 648 private final DefaultListSelectionModel selectionModel; … … 628 660 } 629 661 630 void set layerList(LayerList layerList) {662 void setLayerList(LayerList layerList) { 631 663 this.layerList = layerList; 664 } 665 666 private MainLayerManager getLayerManager() { 667 // layerList should never be null. But if it is, we should not crash. 668 if (layerList == null) { 669 return new MainLayerManager(); 670 } else { 671 return layerList.getLayerManager(); 672 } 632 673 } 633 674 … … 744 785 final int size = getRowCount(); 745 786 final List<Integer> rows = getSelectedRows(); 746 GuiHelper.runInEDTAndWait(new Runnable() { 747 @Override 748 public void run() { 749 if (rows.isEmpty() && size > 0) { 750 selectionModel.setSelectionInterval(size-1, size-1); 751 } 752 fireTableDataChanged(); 753 fireRefresh(); 754 ensureActiveSelected(); 755 } 756 }); 787 788 if (rows.isEmpty() && size > 0) { 789 selectionModel.setSelectionInterval(size-1, size-1); 790 } 791 fireTableDataChanged(); 792 fireRefresh(); 793 ensureActiveSelected(); 757 794 } 758 795 … … 888 925 public List<Layer> getPossibleMergeTargets(Layer source) { 889 926 List<Layer> targets = new ArrayList<>(); 890 if (source == null || !Main.isDisplayingMapView()) {927 if (source == null) { 891 928 return targets; 892 929 } 893 for (Layer target : Main.map.mapView.getAllLayersAsList()) {930 for (Layer target : getLayers()) { 894 931 if (source == target) { 895 932 continue; … … 910 947 */ 911 948 public List<Layer> getLayers() { 912 if (!Main.isDisplayingMapView()) 913 return Collections.<Layer>emptyList(); 914 return Main.map.mapView.getAllLayersAsList(); 949 return getLayerManager().getLayers(); 915 950 } 916 951 … … 942 977 */ 943 978 protected Layer getActiveLayer() { 944 return Main.isDisplayingMapView() ? Main.map.mapView.getActiveLayer() : null;945 } 946 947 /** 948 * Replies the scale layer. null, if no active layer is available 979 return getLayerManager().getActiveLayer(); 980 } 981 982 /** 983 * Replies the scale layer. null, if no active layer is available. 949 984 * 950 985 * @return the scale layer. null, if no active layer is available 951 */ 986 * @deprecated Deprecated since it is unused in JOSM and does not really belong here. Can be removed soon (August 2016). 987 * You can directly query MapView. 988 */ 989 @Deprecated 952 990 protected NativeScaleLayer getNativeScaleLayer() { 953 991 return Main.isDisplayingMapView() ? Main.map.mapView.getNativeScaleLayer() : null; … … 998 1036 switch (col) { 999 1037 case 0: 1000 Main.map.mapView.setActiveLayer(l);1038 getLayerManager().setActiveLayer(l); 1001 1039 l.setVisible(true); 1002 1040 break; … … 1028 1066 1029 1067 /* ------------------------------------------------------------------------------ */ 1068 /* Interface ActiveLayerChangeListener */ 1069 /* ------------------------------------------------------------------------------ */ 1070 @Override 1071 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) { 1072 Layer oldLayer = e.getPreviousActiveLayer(); 1073 if (oldLayer != null) { 1074 int idx = getLayers().indexOf(oldLayer); 1075 if (idx >= 0) { 1076 fireTableRowsUpdated(idx, idx); 1077 } 1078 } 1079 1080 Layer newLayer = getActiveLayer(); 1081 if (newLayer != null) { 1082 int idx = getLayers().indexOf(newLayer); 1083 if (idx >= 0) { 1084 fireTableRowsUpdated(idx, idx); 1085 } 1086 } 1087 ensureActiveSelected(); 1088 } 1089 1090 /* ------------------------------------------------------------------------------ */ 1030 1091 /* Interface LayerChangeListener */ 1031 1092 /* ------------------------------------------------------------------------------ */ 1032 1093 @Override 1033 public void activeLayerChange(final Layer oldLayer, final Layer newLayer) { 1034 GuiHelper.runInEDTAndWait(new Runnable() { 1035 @Override 1036 public void run() { 1037 if (oldLayer != null) { 1038 int idx = getLayers().indexOf(oldLayer); 1039 if (idx >= 0) { 1040 fireTableRowsUpdated(idx, idx); 1041 } 1042 } 1043 1044 if (newLayer != null) { 1045 int idx = getLayers().indexOf(newLayer); 1046 if (idx >= 0) { 1047 fireTableRowsUpdated(idx, idx); 1048 } 1049 } 1050 ensureActiveSelected(); 1051 } 1052 }); 1053 } 1054 1055 @Override 1056 public void layerAdded(Layer newLayer) { 1057 onAddLayer(newLayer); 1058 } 1059 1060 @Override 1061 public void layerRemoved(final Layer oldLayer) { 1062 onRemoveLayer(oldLayer); 1094 public void layerAdded(LayerAddEvent e) { 1095 onAddLayer(e.getAddedLayer()); 1096 } 1097 1098 @Override 1099 public void layerRemoving(LayerRemoveEvent e) { 1100 onRemoveLayer(e.getRemovedLayer()); 1101 } 1102 1103 @Override 1104 public void layerOrderChanged(LayerOrderChangeEvent e) { 1105 // ignored for now, since only we change layer order. 1063 1106 } 1064 1107 … … 1078 1121 } 1079 1122 1123 /** 1124 * This component displays a list of layers and provides the methods needed by {@link LayerListModel}. 1125 */ 1080 1126 static class LayerList extends JTable { 1081 LayerList(LayerListModel dataModel) { 1127 private final transient MainLayerManager layerManager; 1128 1129 LayerList(LayerListModel dataModel, MainLayerManager layerManager) { 1082 1130 super(dataModel); 1083 dataModel.setlayerList(this); 1131 this.layerManager = layerManager; 1132 dataModel.setLayerList(this); 1084 1133 } 1085 1134 … … 1093 1142 viewport.scrollRectToVisible(rect); 1094 1143 } 1144 1145 /** 1146 * Gets you the layer manager used for this list. 1147 * @return The layer manager. 1148 * @since 10288 1149 */ 1150 public MainLayerManager getLayerManager() { 1151 return layerManager; 1152 } 1095 1153 } 1096 1154 … … 1149 1207 */ 1150 1208 public static Layer getLayerForIndex(int index) { 1151 if (!Main.isDisplayingMapView()) 1152 return null; 1153 1154 List<Layer> layers = Main.map.mapView.getAllLayersAsList(); 1209 List<Layer> layers = Main.getLayerManager().getLayers(); 1155 1210 1156 1211 if (index < layers.size() && index >= 0) … … 1169 1224 List<MultikeyInfo> result = new ArrayList<>(); 1170 1225 1171 if (!Main.isDisplayingMapView()) 1172 return result; 1173 1174 List<Layer> layers = Main.map.mapView.getAllLayersAsList(); 1226 List<Layer> layers = Main.getLayerManager().getLayers(); 1175 1227 1176 1228 int index = 0; … … 1186 1238 1187 1239 /** 1188 * Determines if a layer is valid (contained in layer list).1240 * Determines if a layer is valid (contained in global layer list). 1189 1241 * @param l the layer 1190 1242 * @return {@code true} if layer {@code l} is contained in current layer list 1191 1243 */ 1192 1244 public static boolean isLayerValid(Layer l) { 1193 if (l == null || !Main.isDisplayingMapView())1245 if (l == null) 1194 1246 return false; 1195 1247 1196 return Main. map.mapView.getAllLayersAsList().contains(l);1248 return Main.getLayerManager().containsLayer(l); 1197 1249 } 1198 1250 … … 1203 1255 */ 1204 1256 public static MultikeyInfo getLayerInfo(Layer l) { 1205 if (l == null || !Main.isDisplayingMapView())1257 if (l == null) 1206 1258 return null; 1207 1259 1208 int index = Main. map.mapView.getAllLayersAsList().indexOf(l);1260 int index = Main.getLayerManager().getLayers().indexOf(l); 1209 1261 if (index < 0) 1210 1262 return null;
Note:
See TracChangeset
for help on using the changeset viewer.