diff --git a/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java b/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java
index 73be6f1..0503685 100644
|
a
|
b
|
package org.openstreetmap.josm.plugins.todo;
|
| 3 | 3 | |
| 4 | 4 | import static org.openstreetmap.josm.tools.I18n.tr; |
| 5 | 5 | |
| | 6 | import java.awt.Component; |
| | 7 | import java.awt.Rectangle; |
| 6 | 8 | import java.awt.event.ActionEvent; |
| 7 | 9 | import java.awt.event.KeyEvent; |
| 8 | 10 | import java.awt.event.MouseAdapter; |
| … |
… |
import java.util.stream.Collectors;
|
| 18 | 20 | import java.util.stream.Stream; |
| 19 | 21 | |
| 20 | 22 | import javax.swing.AbstractAction; |
| | 23 | import javax.swing.Action; |
| 21 | 24 | import javax.swing.DefaultListSelectionModel; |
| 22 | 25 | import javax.swing.JList; |
| | 26 | import javax.swing.JPopupMenu; |
| 23 | 27 | import javax.swing.ListSelectionModel; |
| 24 | 28 | import javax.swing.SwingUtilities; |
| 25 | 29 | import javax.swing.event.ListDataEvent; |
| … |
… |
import javax.swing.event.ListSelectionListener;
|
| 29 | 33 | |
| 30 | 34 | import org.openstreetmap.josm.actions.AutoScaleAction; |
| 31 | 35 | import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode; |
| | 36 | import org.openstreetmap.josm.actions.JosmAction; |
| 32 | 37 | import org.openstreetmap.josm.data.osm.DataSelectionListener; |
| 33 | 38 | import org.openstreetmap.josm.data.osm.OsmPrimitive; |
| 34 | 39 | import org.openstreetmap.josm.data.osm.event.DatasetEventManager; |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 66 | 71 | private final PassAction actPass = new PassAction(model); |
| 67 | 72 | private final MarkAction actMark = new MarkAction(model); |
| 68 | 73 | private final MarkSelectedAction actMarkSelected = new MarkSelectedAction(model); |
| | 74 | private final ClearAndAddAction actClearAndAdd = new ClearAndAddAction(model); |
| 69 | 75 | /* The popup must be created AFTER actions */ |
| 70 | 76 | private final TodoPopup popupMenu = new TodoPopup(lstPrimitives); |
| 71 | 77 | |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 112 | 118 | SideButton addButton = new SideButton(actAdd); |
| 113 | 119 | actAdd.updateEnabledState(); |
| 114 | 120 | |
| | 121 | // the clear and add button |
| | 122 | addButton.createArrow(l -> showPopupMenu(addButton, actClearAndAdd), true); |
| | 123 | |
| 115 | 124 | // the pass button |
| 116 | 125 | SideButton passButton = new SideButton(actPass); |
| 117 | 126 | lstPrimitives.getSelectionModel().addListSelectionListener(actPass); |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 128 | 137 | createLayout(lstPrimitives, true, Arrays.asList(selectButton, addButton, passButton, markButton, markSelectedButton)); |
| 129 | 138 | } |
| 130 | 139 | |
| | 140 | private static void showPopupMenu(Component parent, Object... menuItems) { |
| | 141 | final JPopupMenu menu = new JPopupMenu(); |
| | 142 | final Rectangle box = parent.getBounds(); |
| | 143 | for (Object item : menuItems) { |
| | 144 | if (item instanceof Action) { |
| | 145 | menu.add((Action) item); |
| | 146 | } else { |
| | 147 | throw new IllegalArgumentException("We don't currently support " + item.getClass()); |
| | 148 | } |
| | 149 | } |
| | 150 | menu.show(parent, 0, box.y + box.height); |
| | 151 | } |
| | 152 | |
| 131 | 153 | private static void zoom(OsmDataLayer layer) { |
| 132 | 154 | OsmDataLayer prev = MainApplication.getLayerManager().getEditLayer(); |
| 133 | 155 | |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 178 | 200 | @Override |
| 179 | 201 | public void showNotify() { |
| 180 | 202 | SelectionEventManager.getInstance().addSelectionListenerForEdt(actAdd); |
| | 203 | SelectionEventManager.getInstance().addSelectionListenerForEdt(actClearAndAdd); |
| 181 | 204 | SelectionEventManager.getInstance().addSelectionListenerForEdt(actMarkSelected); |
| 182 | 205 | actAdd.updateEnabledState(); |
| 183 | 206 | } |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 317 | 340 | } |
| 318 | 341 | } |
| 319 | 342 | |
| | 343 | private class ClearAndAddAction extends JosmAction implements DataSelectionListener { |
| | 344 | private final TodoListModel model; |
| | 345 | |
| | 346 | ClearAndAddAction(TodoListModel model) { |
| | 347 | super( |
| | 348 | tr("Clear and add"), |
| | 349 | "dialogs/selectionlist", |
| | 350 | tr("Clear list, add the selected items to the todo list and zoom first item."), |
| | 351 | Shortcut.registerShortcut("subwindow:todo:clearandadd", tr("Clear and add elements"), KeyEvent.VK_CLOSE_BRACKET, Shortcut.CTRL), |
| | 352 | false |
| | 353 | ); |
| | 354 | this.model = model; |
| | 355 | updateEnabledState(); |
| | 356 | } |
| | 357 | |
| | 358 | @Override |
| | 359 | public void actionPerformed(ActionEvent e) { |
| | 360 | model.clear(); |
| | 361 | model.addItems(getItems()); |
| | 362 | selectAndZoom(model.getSelected()); |
| | 363 | } |
| | 364 | |
| | 365 | /** |
| | 366 | * Update the enabled state of the action |
| | 367 | */ |
| | 368 | public void updateEnabledState() { |
| | 369 | if (MainApplication.getLayerManager().getEditLayer() == null) { |
| | 370 | setEnabled(false); |
| | 371 | } else { |
| | 372 | setEnabled(!MainApplication.getLayerManager().getEditLayer().data.selectionEmpty()); |
| | 373 | } |
| | 374 | } |
| | 375 | |
| | 376 | @Override |
| | 377 | public void selectionChanged(SelectionChangeEvent event) { |
| | 378 | updateEnabledState(); |
| | 379 | } |
| | 380 | } |
| | 381 | |
| 320 | 382 | private class MarkSelectedAction extends AbstractAction implements DataSelectionListener { |
| 321 | 383 | private final TodoListModel model; |
| 322 | 384 | |
| … |
… |
public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
|
| 514 | 576 | @Override |
| 515 | 577 | public void propertyChange(PropertyChangeEvent arg0) { |
| 516 | 578 | actAdd.updateEnabledState(); |
| | 579 | actClearAndAdd.updateEnabledState(); |
| 517 | 580 | } |
| 518 | 581 | |
| 519 | 582 | @Override |