- Timestamp:
- 2011-11-27T15:58:09+01:00 (13 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
r4363 r4615 11 11 import java.awt.event.KeyEvent; 12 12 import java.awt.event.MouseEvent; 13 import java.util.ArrayList; 13 14 import java.util.Arrays; 14 15 import java.util.Collection; 15 16 import java.util.HashSet; 17 import java.util.List; 16 18 import java.util.Set; 17 19 import java.util.Stack; 18 20 21 import javax.swing.AbstractAction; 19 22 import javax.swing.JCheckBox; 20 23 import javax.swing.JTable; 24 import javax.swing.KeyStroke; 21 25 import javax.swing.ListSelectionModel; 22 26 import javax.swing.SwingUtilities; … … 44 48 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent; 45 49 import org.openstreetmap.josm.gui.SideButton; 50 import org.openstreetmap.josm.tools.MultikeyActionsHandler; 51 import org.openstreetmap.josm.tools.MultikeyShortcutAction; 46 52 import org.openstreetmap.josm.tools.Shortcut; 47 53 … … 65 71 Shortcut.registerShortcut("subwindow:filter", tr("Toggle: {0}", tr("Filter")), KeyEvent.VK_F, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 162); 66 72 build(); 73 74 MultikeyActionsHandler.getInstance().addAction(new EnableFilterAction()); 75 MultikeyActionsHandler.getInstance().addAction(new HidingFilterAction()); 67 76 } 68 77 … … 80 89 } 81 90 82 protected String[] columnToolTips = { 83 tr("Enable filter"), 84 tr("Hide elements"), 91 private static final KeyStroke ENABLE_FILTER_SHORTCUT 92 = Shortcut.registerShortcut("core_multikey:enableFilter", "", 'E', Shortcut.GROUP_DIRECT, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK).getKeyStroke(); 93 94 private static final KeyStroke HIDING_FILTER_SHORTCUT 95 = Shortcut.registerShortcut("core_multikey:hidingFilter", "", 'H', Shortcut.GROUP_DIRECT, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK).getKeyStroke(); 96 97 98 protected final String[] columnToolTips = { 99 tr("Enable filter ({0}+{1})", KeyEvent.getKeyModifiersText(ENABLE_FILTER_SHORTCUT.getModifiers()), KeyEvent.getKeyText(ENABLE_FILTER_SHORTCUT.getKeyCode())), 100 tr("Hiding filter ({0}+{1})", KeyEvent.getKeyModifiersText(HIDING_FILTER_SHORTCUT.getModifiers()), KeyEvent.getKeyText(HIDING_FILTER_SHORTCUT.getKeyCode())), 85 101 null, 86 102 tr("Inverse filter"), … … 172 188 173 189 createLayout(userTable, true, Arrays.asList(new SideButton[] { 174 addButton, editButton, deleteButton, upButton, downButton190 addButton, editButton, deleteButton, upButton, downButton 175 191 })); 176 192 } … … 277 293 filterModel.executeFilters(getAffectedPrimitives(event.getPrimitives())); 278 294 } 295 296 abstract class AbstractFilterAction extends AbstractAction implements MultikeyShortcutAction { 297 298 protected Filter lastFilter; 299 300 @Override 301 public void actionPerformed(ActionEvent e) { 302 throw new UnsupportedOperationException(); 303 } 304 305 @Override 306 public List<MultikeyInfo> getMultikeyCombinations() { 307 List<MultikeyInfo> result = new ArrayList<MultikeyShortcutAction.MultikeyInfo>(); 308 309 for (int i=0; i<filterModel.getRowCount(); i++) { 310 Filter filter = filterModel.getFilter(i); 311 MultikeyInfo info = new MultikeyInfo(i, filter.text); 312 result.add(info); 313 } 314 315 return result; 316 } 317 318 protected boolean isLastFilterValid() { 319 return lastFilter != null && filterModel.getFilters().contains(lastFilter); 320 } 321 322 @Override 323 public MultikeyInfo getLastMultikeyAction() { 324 if (isLastFilterValid()) 325 return new MultikeyInfo(-1, lastFilter.text); 326 else 327 return null; 328 } 329 330 } 331 332 private class EnableFilterAction extends AbstractFilterAction { 333 334 EnableFilterAction() { 335 putValue(SHORT_DESCRIPTION, tr("Enable filter")); 336 putValue(ACCELERATOR_KEY, ENABLE_FILTER_SHORTCUT); 337 } 338 339 @Override 340 public void executeMultikeyAction(int index, boolean repeatLastAction) { 341 if (index >= 0 && index < filterModel.getRowCount()) { 342 Filter filter = filterModel.getFilter(index); 343 filterModel.setValueAt(!filter.enable, index, FilterTableModel.COL_ENABLED); 344 lastFilter = filter; 345 } else if (repeatLastAction && isLastFilterValid()) { 346 filterModel.setValueAt(!lastFilter.enable, filterModel.getFilters().indexOf(lastFilter), FilterTableModel.COL_ENABLED); 347 } 348 } 349 } 350 351 private class HidingFilterAction extends AbstractFilterAction { 352 353 public HidingFilterAction() { 354 putValue(SHORT_DESCRIPTION, tr("Hiding filter")); 355 putValue(ACCELERATOR_KEY, HIDING_FILTER_SHORTCUT); 356 } 357 358 @Override 359 public void executeMultikeyAction(int index, boolean repeatLastAction) { 360 if (index >= 0 && index < filterModel.getRowCount()) { 361 Filter filter = filterModel.getFilter(index); 362 filterModel.setValueAt(!filter.hiding, index, FilterTableModel.COL_HIDING); 363 lastFilter = filter; 364 } else if (repeatLastAction && isLastFilterValid()) { 365 filterModel.setValueAt(!lastFilter.hiding, filterModel.getFilters().indexOf(lastFilter), FilterTableModel.COL_HIDING); 366 } 367 } 368 369 } 279 370 } -
trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
r3926 r4615 36 36 */ 37 37 public class FilterTableModel extends AbstractTableModel { 38 39 public static final int COL_ENABLED = 0; 40 public static final int COL_HIDING = 1; 41 public static final int COL_TEXT = 2; 42 public static final int COL_INVERTED = 3; 38 43 39 44 // number of primitives that are disabled but not hidden … … 293 298 Filter f = filters.get(row); 294 299 switch (column) { 295 case 0:300 case COL_ENABLED: 296 301 f.enable = (Boolean) aValue; 297 302 savePrefs(); … … 299 304 fireTableRowsUpdated(row, row); 300 305 break; 301 case 1:306 case COL_HIDING: 302 307 f.hiding = (Boolean) aValue; 303 308 savePrefs(); 304 309 updateFilters(); 305 310 break; 306 case 2:311 case COL_TEXT: 307 312 f.text = (String) aValue; 308 313 savePrefs(); 309 314 break; 310 case 3:315 case COL_INVERTED: 311 316 f.inverted = (Boolean) aValue; 312 317 savePrefs(); … … 322 327 Filter f = filters.get(row); 323 328 switch (column) { 324 case 0:329 case COL_ENABLED: 325 330 return f.enable; 326 case 1:331 case COL_HIDING: 327 332 return f.hiding; 328 case 2:333 case COL_TEXT: 329 334 return f.text; 330 case 3:335 case COL_INVERTED: 331 336 return f.inverted; 332 337 case 4: … … 397 402 g.translate(-dx, -dy); 398 403 } 404 405 public List<Filter> getFilters() { 406 return filters; 407 } 399 408 } -
trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
r4604 r4615 15 15 import javax.swing.Action; 16 16 import javax.swing.JMenuItem; 17 import javax.swing.JPanel; 17 18 import javax.swing.JPopupMenu; 18 19 import javax.swing.KeyStroke; 20 import javax.swing.event.PopupMenuEvent; 21 import javax.swing.event.PopupMenuListener; 19 22 20 23 import org.openstreetmap.josm.Main; … … 131 134 132 135 JMenuItem lbTitle = new JMenuItem((String) action.action.getValue(Action.SHORT_DESCRIPTION)); 133 lbTitle.setHorizontalAlignment(JMenuItem.CENTER);134 136 lbTitle.setEnabled(false); 135 layers.add(lbTitle); 137 JPanel pnTitle = new JPanel(); 138 pnTitle.add(lbTitle); 139 layers.add(pnTitle); 136 140 137 141 char repeatKey = (char) action.shortcut.getKeyCode(); … … 150 154 @Override 151 155 public void actionPerformed(ActionEvent e) { 152 Main.map.statusLine.resetHelpText(STATUS_BAR_ID);153 156 action.action.executeMultikeyAction(info.getIndex(), false); 154 157 } … … 167 170 @Override 168 171 public void actionPerformed(ActionEvent e) { 169 Main.map.statusLine.resetHelpText(STATUS_BAR_ID);170 172 action.action.executeMultikeyAction(-1, true); 171 173 } … … 174 176 } 175 177 } 178 layers.addPopupMenuListener(new PopupMenuListener() { 179 180 @Override 181 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {} 182 183 @Override 184 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { 185 Main.map.statusLine.resetHelpText(STATUS_BAR_ID); 186 } 187 188 @Override 189 public void popupMenuCanceled(PopupMenuEvent e) {} 190 }); 176 191 177 192 layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
Note:
See TracChangeset
for help on using the changeset viewer.