Changeset 15226 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
- Timestamp:
- 2019-07-07T18:36:38+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
r15176 r15226 12 12 import java.util.Arrays; 13 13 import java.util.List; 14 import java.util.stream.Collectors; 14 15 15 16 import javax.swing.AbstractAction; 16 17 import javax.swing.DefaultCellEditor; 18 import javax.swing.DefaultListSelectionModel; 17 19 import javax.swing.JCheckBox; 18 20 import javax.swing.JTable; … … 62 64 63 65 private JTable userTable; 64 private final FilterTableModel filterModel = new FilterTableModel(); 65 66 private final EnableFilterAction enableFilterAction; 67 private final HidingFilterAction hidingFilterAction; 66 private final FilterTableModel filterModel = new FilterTableModel(new DefaultListSelectionModel()); 67 68 private final AddAction addAction = new AddAction(); 69 private final EditAction editAction = new EditAction(); 70 private final DeleteAction deleteAction = new DeleteAction(); 71 private final MoveUpAction moveUpAction = new MoveUpAction(); 72 private final MoveDownAction moveDownAction = new MoveDownAction(); 73 private final SortAction sortAction = new SortAction(); 74 private final ReverseAction reverseAction = new ReverseAction(); 75 private final EnableFilterAction enableFilterAction = new EnableFilterAction(); 76 private final HidingFilterAction hidingFilterAction = new HidingFilterAction(); 68 77 69 78 /** … … 75 84 KeyEvent.VK_F, Shortcut.ALT_SHIFT), 162); 76 85 build(); 77 enableFilterAction = new EnableFilterAction();78 hidingFilterAction = new HidingFilterAction();79 86 MultikeyActionsHandler.getInstance().addAction(enableFilterAction); 80 87 MultikeyActionsHandler.getInstance().addAction(hidingFilterAction); … … 112 119 }; 113 120 121 private abstract class FilterAction extends AbstractAction implements IEnabledStateUpdating { 122 123 FilterAction(String name, String description, String icon) { 124 putValue(NAME, name); 125 putValue(SHORT_DESCRIPTION, description); 126 new ImageProvider("dialogs", icon).getResource().attachImageIcon(this, true); 127 } 128 129 @Override 130 public void updateEnabledState() { 131 setEnabled(!filterModel.getSelectionModel().isSelectionEmpty()); 132 } 133 } 134 135 private class AddAction extends FilterAction { 136 AddAction() { 137 super(tr("Add"), tr("Add filter."), /* ICON(dialogs/) */ "add"); 138 } 139 140 @Override 141 public void actionPerformed(ActionEvent e) { 142 SearchSetting searchSetting = SearchAction.showSearchDialog(new Filter()); 143 if (searchSetting != null) { 144 filterModel.addFilter(new Filter(searchSetting)); 145 } 146 } 147 148 @Override 149 public void updateEnabledState() { 150 // Do nothing 151 } 152 } 153 154 private class EditAction extends FilterAction { 155 EditAction() { 156 super(tr("Edit"), tr("Edit filter."), /* ICON(dialogs/) */ "edit"); 157 } 158 159 @Override 160 public void actionPerformed(ActionEvent e) { 161 int index = filterModel.getSelectionModel().getMinSelectionIndex(); 162 if (index < 0) return; 163 Filter f = filterModel.getValue(index); 164 SearchSetting searchSetting = SearchAction.showSearchDialog(f); 165 if (searchSetting != null) { 166 filterModel.setValue(index, new Filter(searchSetting)); 167 } 168 } 169 } 170 171 private class DeleteAction extends FilterAction { 172 DeleteAction() { 173 super(tr("Delete"), tr("Delete filter."), /* ICON(dialogs/) */ "delete"); 174 } 175 176 @Override 177 public void actionPerformed(ActionEvent e) { 178 int index = filterModel.getSelectionModel().getMinSelectionIndex(); 179 if (index >= 0) { 180 filterModel.removeFilter(index); 181 } 182 } 183 } 184 185 private class MoveUpAction extends FilterAction { 186 MoveUpAction() { 187 super(tr("Up"), tr("Move filter up."), /* ICON(dialogs/) */ "up"); 188 } 189 190 @Override 191 public void actionPerformed(ActionEvent e) { 192 int index = userTable.convertRowIndexToModel(userTable.getSelectionModel().getMinSelectionIndex()); 193 if (index >= 0 && filterModel.moveUp(index)) { 194 filterModel.getSelectionModel().setSelectionInterval(index-1, index-1); 195 } 196 } 197 198 @Override 199 public void updateEnabledState() { 200 setEnabled(filterModel.canMoveUp()); 201 } 202 } 203 204 private class MoveDownAction extends FilterAction { 205 MoveDownAction() { 206 super(tr("Down"), tr("Move filter down."), /* ICON(dialogs/) */ "down"); 207 } 208 209 @Override 210 public void actionPerformed(ActionEvent e) { 211 int index = userTable.convertRowIndexToModel(userTable.getSelectionModel().getMinSelectionIndex()); 212 if (index >= 0 && filterModel.moveDown(index)) { 213 filterModel.getSelectionModel().setSelectionInterval(index+1, index+1); 214 } 215 } 216 217 @Override 218 public void updateEnabledState() { 219 setEnabled(filterModel.canMoveDown()); 220 } 221 } 222 223 private class SortAction extends FilterAction { 224 SortAction() { 225 super(tr("Sort"), tr("Sort filters."), /* ICON(dialogs/) */ "sort"); 226 } 227 228 @Override 229 public void actionPerformed(ActionEvent e) { 230 filterModel.sort(); 231 } 232 233 @Override 234 public void updateEnabledState() { 235 setEnabled(filterModel.getRowCount() > 1); 236 } 237 } 238 239 private class ReverseAction extends FilterAction { 240 ReverseAction() { 241 super(tr("Reverse"), tr("Reverse the filters order."), /* ICON(dialogs/) */ "reverse"); 242 } 243 244 @Override 245 public void actionPerformed(ActionEvent e) { 246 filterModel.reverse(); 247 } 248 249 @Override 250 public void updateEnabledState() { 251 setEnabled(filterModel.getRowCount() > 1); 252 } 253 } 254 114 255 /** 115 256 * Builds the GUI. … … 120 261 userTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 121 262 userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 122 userTable.set AutoCreateRowSorter(true);263 userTable.setSelectionModel(filterModel.getSelectionModel()); 123 264 124 265 TableHelper.adjustColumnWidth(userTable, 0, false); … … 130 271 userTable.setDefaultRenderer(String.class, new StringRenderer()); 131 272 userTable.setDefaultEditor(String.class, new DefaultCellEditor(new DisableShortcutsOnFocusGainedTextField())); 132 133 SideButton addButton = new SideButton(new AbstractAction() {134 {135 putValue(NAME, tr("Add"));136 putValue(SHORT_DESCRIPTION, tr("Add filter."));137 new ImageProvider("dialogs", "add").getResource().attachImageIcon(this, true);138 }139 140 @Override141 public void actionPerformed(ActionEvent e) {142 SearchSetting searchSetting = SearchAction.showSearchDialog(new Filter());143 if (searchSetting != null) {144 filterModel.addFilter(new Filter(searchSetting));145 }146 }147 });148 SideButton editButton = new SideButton(new AbstractAction() {149 {150 putValue(NAME, tr("Edit"));151 putValue(SHORT_DESCRIPTION, tr("Edit filter."));152 new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);153 }154 155 @Override156 public void actionPerformed(ActionEvent e) {157 int index = userTable.getSelectionModel().getMinSelectionIndex();158 if (index < 0) return;159 Filter f = filterModel.getFilter(index);160 SearchSetting searchSetting = SearchAction.showSearchDialog(f);161 if (searchSetting != null) {162 filterModel.setFilter(index, new Filter(searchSetting));163 }164 }165 });166 SideButton deleteButton = new SideButton(new AbstractAction() {167 {168 putValue(NAME, tr("Delete"));169 putValue(SHORT_DESCRIPTION, tr("Delete filter."));170 new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);171 }172 173 @Override174 public void actionPerformed(ActionEvent e) {175 int index = userTable.getSelectionModel().getMinSelectionIndex();176 if (index >= 0) {177 filterModel.removeFilter(index);178 }179 }180 });181 SideButton upButton = new SideButton(new AbstractAction() {182 {183 putValue(NAME, tr("Up"));184 putValue(SHORT_DESCRIPTION, tr("Move filter up."));185 new ImageProvider("dialogs", "up").getResource().attachImageIcon(this, true);186 }187 188 @Override189 public void actionPerformed(ActionEvent e) {190 int index = userTable.getSelectionModel().getMinSelectionIndex();191 if (index >= 0) {192 filterModel.moveUpFilter(index);193 userTable.getSelectionModel().setSelectionInterval(index-1, index-1);194 }195 }196 });197 SideButton downButton = new SideButton(new AbstractAction() {198 {199 putValue(NAME, tr("Down"));200 putValue(SHORT_DESCRIPTION, tr("Move filter down."));201 new ImageProvider("dialogs", "down").getResource().attachImageIcon(this, true);202 }203 204 @Override205 public void actionPerformed(ActionEvent e) {206 int index = userTable.getSelectionModel().getMinSelectionIndex();207 if (index >= 0) {208 filterModel.moveDownFilter(index);209 userTable.getSelectionModel().setSelectionInterval(index+1, index+1);210 }211 }212 });213 273 214 274 // Toggle filter "enabled" on Enter … … 218 278 int index = userTable.getSelectedRow(); 219 279 if (index >= 0) { 220 Filter filter = filterModel.get Filter(index);280 Filter filter = filterModel.getValue(index); 221 281 filterModel.setValueAt(!filter.enable, index, FilterTableModel.COL_ENABLED); 222 282 } … … 230 290 int index = userTable.getSelectedRow(); 231 291 if (index >= 0) { 232 Filter filter = filterModel.get Filter(index);292 Filter filter = filterModel.getValue(index); 233 293 filterModel.setValueAt(!filter.hiding, index, FilterTableModel.COL_HIDING); 234 294 } … … 236 296 }); 237 297 238 createLayout(userTable, true, Arrays.asList( 239 addButton, editButton, deleteButton, upButton, downButton 240 )); 298 List<FilterAction> actions = Arrays.asList(addAction, editAction, deleteAction, moveUpAction, moveDownAction, sortAction, reverseAction); 299 for (FilterAction action : actions) { 300 TableHelper.adaptTo(action, filterModel); 301 TableHelper.adaptTo(action, filterModel.getSelectionModel()); 302 action.updateEnabledState(); 303 } 304 createLayout(userTable, true, actions.stream().map(a -> new SideButton(a, false)).collect(Collectors.toList())); 241 305 } 242 306 … … 384 448 385 449 for (int i = 0; i < filterModel.getRowCount(); i++) { 386 Filter filter = filterModel.getFilter(i); 387 MultikeyInfo info = new MultikeyInfo(i, filter.text); 388 result.add(info); 450 result.add(new MultikeyInfo(i, filterModel.getValue(i).text)); 389 451 } 390 452 … … 420 482 public void executeMultikeyAction(int index, boolean repeatLastAction) { 421 483 if (index >= 0 && index < filterModel.getRowCount()) { 422 Filter filter = filterModel.get Filter(index);484 Filter filter = filterModel.getValue(index); 423 485 filterModel.setValueAt(!filter.enable, index, FilterTableModel.COL_ENABLED); 424 486 lastFilter = filter; … … 444 506 public void executeMultikeyAction(int index, boolean repeatLastAction) { 445 507 if (index >= 0 && index < filterModel.getRowCount()) { 446 Filter filter = filterModel.get Filter(index);508 Filter filter = filterModel.getValue(index); 447 509 filterModel.setValueAt(!filter.hiding, index, FilterTableModel.COL_HIDING); 448 510 lastFilter = filter;
Note:
See TracChangeset
for help on using the changeset viewer.