Changeset 32395 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java
- Timestamp:
- 2016-06-24T09:10:57+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java
r30841 r32395 1 // License: GPL. For details, see LICENSE file. 1 2 package relcontext; 2 3 … … 103 104 public class RelContextDialog extends ToggleDialog implements EditLayerChangeListener, ChosenRelationListener, SelectionChangedListener { 104 105 105 public final staticString PREF_PREFIX = "reltoolbox";106 public static final String PREF_PREFIX = "reltoolbox"; 106 107 107 108 private final DefaultTableModel relationsData; … … 124 125 chosenRelation = new ChosenRelation(); 125 126 chosenRelation.addChosenRelationListener(this); 126 Ma pView.addEditLayerChangeListener(chosenRelation);127 Main.getLayerManager().addActiveLayerChangeListener(chosenRelation); 127 128 128 129 popupMenu = new ChosenRelationPopupMenu(chosenRelation); … … 144 145 roleBox.addItemListener(new ItemListener() { 145 146 @Override 146 public void itemStateChanged( 147 if (e.getStateChange() == ItemEvent.DESELECTED ) return;147 public void itemStateChanged(ItemEvent e) { 148 if (e.getStateChange() == ItemEvent.DESELECTED ) return; 148 149 String memberRole = roleBoxModel.getSelectedMembersRole(); 149 150 String selectedRole = roleBoxModel.isAnotherRoleSelected() ? askForRoleName() : roleBoxModel.getSelectedRole(); 150 if (memberRole != null && selectedRole != null && !memberRole.equals(selectedRole)151 if (memberRole != null && selectedRole != null && !memberRole.equals(selectedRole)) { 151 152 applyRoleToSelection(selectedRole.trim()); 152 153 } … … 177 178 roleBox.addPropertyChangeListener("enabled", new PropertyChangeListener() { 178 179 @Override 179 public void propertyChange( 180 public void propertyChange(PropertyChangeEvent evt) { 180 181 boolean showRoleBox = roleBox.isEnabled(); 181 182 roleBox.setVisible(showRoleBox); … … 186 187 sortAndFixAction.addPropertyChangeListener(new PropertyChangeListener() { 187 188 @Override 188 public void propertyChange( 189 public void propertyChange(PropertyChangeEvent evt) { 189 190 sortAndFixButton.setVisible(sortAndFixAction.isEnabled()); 190 191 } … … 194 195 downloadChosenRelationAction.addPropertyChangeListener(new PropertyChangeListener() { 195 196 @Override 196 public void propertyChange( 197 public void propertyChange(PropertyChangeEvent evt) { 197 198 downloadButton.setVisible(downloadChosenRelationAction.isEnabled()); 198 199 } 199 200 }); 200 201 downloadButton.setVisible(false); 201 if (Main.pref.getBoolean(PREF_PREFIX + ".hidetopline", false) )202 if (Main.pref.getBoolean(PREF_PREFIX + ".hidetopline", false) ) { 202 203 chosenRelationPanel.setVisible(false); 204 } 203 205 204 206 // [+][Multi] [X]Adm [X]Tags [X]1 … … 209 211 final JButton multipolygonButton = new JButton(createMultipolygonAction); 210 212 bottomLine.add(multipolygonButton, GBC.std()); 211 // bottomLine.add(sizeButton(new JButton(new MultipolygonSettingsAction()), 16, 0), GBC.std().fill(GBC.VERTICAL)); 213 // bottomLine.add(sizeButton(new JButton(new MultipolygonSettingsAction()), 16, 0), GBC.std().fill(GBC.VERTICAL)); 212 214 bottomLine.add(Box.createHorizontalGlue(), GBC.std().fill()); 213 215 findRelationAction = new FindRelationAction(chosenRelation); … … 217 219 multipolygonButton.addMouseListener(new MouseAdapter() { 218 220 @Override 219 public void mousePressed( 221 public void mousePressed(MouseEvent e) { 220 222 checkPopup(e); 221 223 } 222 224 223 225 @Override 224 public void mouseReleased( 226 public void mouseReleased(MouseEvent e) { 225 227 checkPopup(e); 226 228 } 227 229 228 private void checkPopup( 229 if (e.isPopupTrigger() )230 private void checkPopup(MouseEvent e) { 231 if (e.isPopupTrigger() ) { 230 232 multiPopupMenu.show(e.getComponent(), e.getX(), e.getY()); 233 } 231 234 } 232 235 }); … … 237 240 private static final Color CHOSEN_RELATION_COLOR = new Color(255, 255, 128); 238 241 239 private void configureRelationsTable( 242 private void configureRelationsTable(final JTable relationsTable) { 240 243 relationsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 241 244 relationsTable.setTableHeader(null); 242 245 relationsTable.addMouseListener(new MouseAdapter() { 243 246 @Override 244 public void mouseClicked( 247 public void mouseClicked(MouseEvent e) { 245 248 Point p = e.getPoint(); 246 249 int row = relationsTable.rowAtPoint(p); 247 if (SwingUtilities.isLeftMouseButton(e) && row >= 0250 if (SwingUtilities.isLeftMouseButton(e) && row >= 0) { 248 251 Relation relation = (Relation)relationsData.getValueAt(row, 0); 249 if (e.getClickCount() > 1252 if (e.getClickCount() > 1) { 250 253 Main.main.getEditLayer().data.setSelected(relation); 251 254 } … … 254 257 255 258 @Override 256 public void mousePressed( 259 public void mousePressed(MouseEvent e) { 257 260 checkPopup(e); 258 261 } 259 262 260 263 @Override 261 public void mouseReleased( 264 public void mouseReleased(MouseEvent e) { 262 265 checkPopup(e); 263 266 } 264 267 265 public void checkPopup( 266 if (e.isPopupTrigger()268 public void checkPopup(MouseEvent e) { 269 if (e.isPopupTrigger()) { 267 270 Point p = e.getPoint(); 268 271 int row = relationsTable.rowAtPoint(p); … … 280 283 columns.getColumn(0).setCellRenderer(new OsmPrimitivRenderer() { 281 284 @Override 282 protected String getComponentToolTipText( 285 protected String getComponentToolTipText(OsmPrimitive value) { 283 286 return null; 284 287 } 285 288 286 289 @Override 287 public Component getTableCellRendererComponent( 290 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 288 291 Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 289 if (!isSelected && value instanceof Relation && chosenRelation.isSame(value) )292 if (!isSelected && value instanceof Relation && chosenRelation.isSame(value) ) { 290 293 c.setBackground(CHOSEN_RELATION_COLOR); 291 else294 } else { 292 295 c.setBackground(table.getBackground()); 296 } 293 297 return c; 294 298 } … … 297 301 columns.getColumn(1).setCellRenderer(new DefaultTableCellRenderer() { 298 302 @Override 299 public Component getTableCellRendererComponent( 303 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 300 304 Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 301 if (!isSelected && chosenRelation.isSame(table.getValueAt(row, 0)) )305 if (!isSelected && chosenRelation.isSame(table.getValueAt(row, 0)) ) { 302 306 c.setBackground(CHOSEN_RELATION_COLOR); 303 else307 } else { 304 308 c.setBackground(table.getBackground()); 309 } 305 310 return c; 306 311 } … … 310 315 relationsTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 311 316 @Override 312 public void valueChanged( 317 public void valueChanged(ListSelectionEvent e) { 313 318 int selectedRow = relationsTable.getSelectedRow(); 314 if (selectedRow >= 0319 if (selectedRow >= 0) { 315 320 chosenRelation.set((Relation)relationsData.getValueAt(selectedRow, 0)); 316 321 relationsTable.clearSelection(); … … 320 325 } 321 326 322 private JComponent sizeButton( 327 private JComponent sizeButton(JComponent b, int width, int height) { 323 328 Dimension pref = b.getPreferredSize(); 324 329 b.setPreferredSize(new Dimension(width <= 0 ? pref.width : width, height <= 0 ? pref.height : height)); … … 346 351 347 352 @Override 348 public void chosenRelationChanged( 349 if (chosenRelationPanel != null && Main.pref.getBoolean(PREF_PREFIX + ".hidetopline", false) )353 public void chosenRelationChanged(Relation oldRelation, Relation newRelation) { 354 if (chosenRelationPanel != null && Main.pref.getBoolean(PREF_PREFIX + ".hidetopline", false) ) { 350 355 chosenRelationPanel.setVisible(newRelation != null); 351 if( Main.main.getCurrentDataSet() != null ) 356 } 357 if (Main.main.getCurrentDataSet() != null ) { 352 358 selectionChanged(Main.main.getCurrentDataSet().getSelected()); 359 } 353 360 roleBoxModel.update(); 354 361 // ? … … 356 363 357 364 @Override 358 public void selectionChanged( 359 if (!isVisible() || relationsData == null )365 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { 366 if (!isVisible() || relationsData == null ) 360 367 return; 361 368 roleBoxModel.update(); … … 363 370 relationsData.setRowCount(0); 364 371 sortAndFixAction.chosenRelationChanged(chosenRelation.get(), chosenRelation.get()); 365 if (newSelection == null )372 if (newSelection == null ) 366 373 return; 367 374 368 375 Set<Relation> relations = new TreeSet<>( 369 376 DefaultNameFormatter.getInstance().getRelationComparator()); 370 for (OsmPrimitive element : newSelection371 for (OsmPrimitive ref : element.getReferrers()372 if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()377 for (OsmPrimitive element : newSelection) { 378 for (OsmPrimitive ref : element.getReferrers()) { 379 if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) { 373 380 relations.add((Relation) ref); 374 381 } … … 376 383 } 377 384 378 for (Relation rel : relations385 for (Relation rel : relations) { 379 386 String role = null; 380 for (RelationMember m : rel.getMembers()381 for (OsmPrimitive element : newSelection382 if (m.getMember().equals(element)383 if (role == null )387 for (RelationMember m : rel.getMembers()) { 388 for (OsmPrimitive element : newSelection) { 389 if (m.getMember().equals(element)) { 390 if (role == null ) { 384 391 role = m.getRole(); 385 else if (!role.equals(m.getRole())392 } else if (!role.equals(m.getRole())) { 386 393 role = tr("<different>"); 387 394 break; … … 392 399 relationsData.addRow(new Object[] {rel, role == null ? "" : role}); 393 400 } 394 for (OsmPrimitive element : newSelection )395 if (element instanceof Relation && !chosenRelation.isSame(element) )401 for (OsmPrimitive element : newSelection ) 402 if (element instanceof Relation && !chosenRelation.isSame(element) ) { 396 403 relationsData.addRow(new Object[] {element, ""}); 404 } 397 405 } 398 406 … … 406 414 407 415 @Override 408 public void editLayerChanged( 416 public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) { 409 417 updateSelection(); 410 418 } … … 428 436 ClassLoader classLoader = RelContextDialog.class.getClassLoader(); 429 437 try ( 430 InputStream possibleRolesStream = classLoader.getResourceAsStream(POSSIBLE_ROLES_FILE); 431 BufferedReader r = new BufferedReader(new InputStreamReader(possibleRolesStream)); 432 ) { 433 while( 438 InputStream possibleRolesStream = classLoader.getResourceAsStream(POSSIBLE_ROLES_FILE); 439 BufferedReader r = new BufferedReader(new InputStreamReader(possibleRolesStream)); 440 ) { 441 while(r.ready()) { 434 442 String line = r.readLine(); 435 443 StringTokenizer t = new StringTokenizer(line, " ,;:\""); 436 if (t.hasMoreTokens()444 if (t.hasMoreTokens()) { 437 445 String type = t.nextToken(); 438 446 List<String> roles = new ArrayList<>(); 439 while( 447 while(t.hasMoreTokens() ) { 440 448 roles.add(t.nextToken()); 449 } 441 450 result.put(type, roles); 442 451 } 443 452 } 444 } catch( 453 } catch(Exception e) { 445 454 Main.error("[RelToolbox] Error reading possible roles file."); 446 455 Main.error(e); … … 453 462 454 463 List<String> items = new ArrayList<>(); 455 for (String role : roleBoxModel.getRoles()456 if (role.length() > 1 )464 for (String role : roleBoxModel.getRoles()) { 465 if (role.length() > 1 ) { 457 466 items.add(role); 467 } 458 468 } 459 469 final AutoCompletingComboBox role = new AutoCompletingComboBox(); … … 477 487 role.getEditor().addActionListener(new ActionListener() { 478 488 @Override 479 public void actionPerformed( 489 public void actionPerformed(ActionEvent e) { 480 490 dlg.setVisible(false); 481 491 optionPane.setValue(JOptionPane.OK_OPTION); … … 486 496 487 497 Object answer = optionPane.getValue(); 488 if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE489 || (answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION) ) {498 if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE 499 || (answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION)) 490 500 return null; 491 }492 501 493 502 return role.getEditor().getItem().toString().trim(); … … 496 505 private class ChosenRelationMouseAdapter extends MouseAdapter { 497 506 @Override 498 public void mouseClicked( 499 if (e.isControlDown() || !(e.getComponent() instanceof JComboBox ) ) // do not use left click handler on combo box500 if(SwingUtilities.isLeftMouseButton(e) && chosenRelation.get() != null && Main.main.getEditLayer() != null501 Main.main.getEditLayer().data.setSelected(chosenRelation.get()); 502 } 503 } 504 505 @Override 506 public void mousePressed( 507 public void mouseClicked(MouseEvent e) { 508 if (e.isControlDown() || !(e.getComponent() instanceof JComboBox ) ) // do not use left click handler on combo box 509 if (SwingUtilities.isLeftMouseButton(e) && chosenRelation.get() != null && Main.main.getEditLayer() != null) { 510 Main.main.getEditLayer().data.setSelected(chosenRelation.get()); 511 } 512 } 513 514 @Override 515 public void mousePressed(MouseEvent e) { 507 516 checkPopup(e); 508 517 } 509 518 510 519 @Override 511 public void mouseReleased( 520 public void mouseReleased(MouseEvent e) { 512 521 checkPopup(e); 513 522 } 514 523 515 private void checkPopup( 516 if (e.isPopupTrigger() && chosenRelation.get() != null524 private void checkPopup(MouseEvent e) { 525 if (e.isPopupTrigger() && chosenRelation.get() != null) { 517 526 popupMenu.show(e.getComponent(), e.getX(), e.getY() - 5); 518 527 } … … 521 530 522 531 private class ChosenRelationPopupMenu extends JPopupMenu { 523 public ChosenRelationPopupMenu( 532 public ChosenRelationPopupMenu(ChosenRelation chosenRelation) { 524 533 add(new SelectMembersAction(chosenRelation)); 525 534 add(new SelectRelationAction(chosenRelation)); … … 535 544 } 536 545 537 protected void applyRoleToSelection( 538 if (chosenRelation != null && chosenRelation.get() != null && Main.main.getCurrentDataSet() != null && !Main.main.getCurrentDataSet().selectionEmpty()546 protected void applyRoleToSelection(String role) { 547 if (chosenRelation != null && chosenRelation.get() != null && Main.main.getCurrentDataSet() != null && !Main.main.getCurrentDataSet().selectionEmpty()) { 539 548 Collection<OsmPrimitive> selected = Main.main.getCurrentDataSet().getSelected(); 540 549 Relation r = chosenRelation.get(); 541 550 List<Command> commands = new ArrayList<>(); 542 for (int i = 0; i < r.getMembersCount(); i++551 for (int i = 0; i < r.getMembersCount(); i++) { 543 552 RelationMember m = r.getMember(i); 544 if (selected.contains(m.getMember())545 if (!role.equals(m.getRole())546 // r.setMember(i, new RelationMember(role, m.getMember())); 553 if (selected.contains(m.getMember())) { 554 if (!role.equals(m.getRole())) { 555 // r.setMember(i, new RelationMember(role, m.getMember())); 547 556 commands.add(new ChangeRelationMemberRoleCommand(r, i, role)); 548 557 } 549 558 } 550 559 } 551 if (!commands.isEmpty()552 // Main.main.undoRedo.add(new ChangeCommand(chosenRelation.get(), r)); 560 if (!commands.isEmpty()) { 561 // Main.main.undoRedo.add(new ChangeCommand(chosenRelation.get(), r)); 553 562 Main.main.undoRedo.add(new SequenceCommand(tr("Change relation member roles to {0}", role), commands)); 554 563 } … … 567 576 } 568 577 } 569 /* 578 /* 570 579 private class MultipolygonSettingsAction extends AbstractAction { 571 580 public MultipolygonSettingsAction() { … … 575 584 } 576 585 577 public void actionPerformed( 586 public void actionPerformed(ActionEvent e) { 578 587 Component c = e.getSource() instanceof Component ? (Component)e.getSource() : Main.parent; 579 588 multiPopupMenu.show(c, 0, 0); … … 591 600 } 592 601 593 protected final JCheckBoxMenuItem addMenuItem( 602 protected final JCheckBoxMenuItem addMenuItem(String property, String title) { 594 603 String fullProperty = PREF_PREFIX + ".multipolygon." + property; 595 604 JCheckBoxMenuItem item = new JCheckBoxMenuItem(tr(title)); … … 602 611 603 612 @Override 604 public void actionPerformed( 613 public void actionPerformed(ActionEvent e) { 605 614 String property = e.getActionCommand(); 606 if (property != null && property.length() > 0 && e.getSource() instanceof JCheckBoxMenuItem615 if (property != null && property.length() > 0 && e.getSource() instanceof JCheckBoxMenuItem) { 607 616 boolean value = ((JCheckBoxMenuItem)e.getSource()).isSelected(); 608 617 Main.pref.put(property, value); … … 617 626 super(tr("Change role"), (String)null, tr("Enter role for selected members"), 618 627 Shortcut.registerShortcut("reltoolbox:changerole", tr("Relation Toolbox: {0}", tr("Enter role for selected members")), 619 KeyEvent.VK_R, Shortcut.ALT_CTRL), false, "relcontext/enterrole", true); 628 KeyEvent.VK_R, Shortcut.ALT_CTRL), false, "relcontext/enterrole", true); 620 629 chosenRelation.addChosenRelationListener(this); 621 630 updateEnabledState(); … … 623 632 624 633 @Override 625 public void actionPerformed( 626 if (roleBoxModel.membersRole != null634 public void actionPerformed(ActionEvent e) { 635 if (roleBoxModel.membersRole != null) { 627 636 String role = askForRoleName(); 628 if (role != null )637 if (role != null ) { 629 638 applyRoleToSelection(role); 630 } 631 } 632 633 @Override 634 public void chosenRelationChanged( Relation oldRelation, Relation newRelation ) { 639 } 640 } 641 } 642 643 @Override 644 public void chosenRelationChanged(Relation oldRelation, Relation newRelation) { 635 645 setEnabled(newRelation != null); 636 646 } … … 645 655 private final String ANOTHER_ROLE = tr("another..."); 646 656 647 public RoleComboBoxModel( 657 public RoleComboBoxModel(JComboBox<String> combobox) { 648 658 super(); 649 659 this.combobox = combobox; … … 653 663 public void update() { 654 664 membersRole = getSelectedMembersRoleIntl(); 655 if (membersRole == null656 if (combobox.isEnabled() )665 if (membersRole == null) { 666 if (combobox.isEnabled() ) { 657 667 combobox.setEnabled(false); 668 } 658 669 return; 659 670 } 660 if (!combobox.isEnabled() )671 if (!combobox.isEnabled() ) { 661 672 combobox.setEnabled(true); 673 } 662 674 663 675 List<String> items = new ArrayList<>(); 664 if (chosenRelation != null && chosenRelation.get() != null665 if (chosenRelation.isMultipolygon()676 if (chosenRelation != null && chosenRelation.get() != null) { 677 if (chosenRelation.isMultipolygon()) { 666 678 items.add("outer"); 667 679 items.add("inner"); 668 680 } 669 if (chosenRelation.get().get("type") != null681 if (chosenRelation.get().get("type") != null) { 670 682 List<String> values = possibleRoles.get(chosenRelation.get().get("type")); 671 if (values != null )683 if (values != null ) { 672 684 items.addAll(values); 673 } 674 for( RelationMember m : chosenRelation.get().getMembers() ) 675 if( m.getRole().length() > 0 && !items.contains(m.getRole()) ) 685 } 686 } 687 for (RelationMember m : chosenRelation.get().getMembers() ) 688 if (m.getRole().length() > 0 && !items.contains(m.getRole()) ) { 676 689 items.add(m.getRole()); 690 } 677 691 } 678 692 items.add(EMPTY_ROLE); 679 if (!items.contains(membersRole) )693 if (!items.contains(membersRole) ) { 680 694 items.add(0, membersRole); 695 } 681 696 items.add(ANOTHER_ROLE); 682 697 roles = Collections.unmodifiableList(items); 683 698 684 if (membersRole != null )699 if (membersRole != null ) { 685 700 setSelectedItem(membersRole); 686 else701 } else { 687 702 fireContentsChanged(this, -1, -1); 703 } 688 704 combobox.repaint(); 689 705 } … … 699 715 private String getSelectedMembersRoleIntl() { 700 716 String role = null; 701 if (chosenRelation != null && chosenRelation.get() != null && Main.main.getCurrentDataSet() != null && !Main.main.getCurrentDataSet().selectionEmpty()717 if (chosenRelation != null && chosenRelation.get() != null && Main.main.getCurrentDataSet() != null && !Main.main.getCurrentDataSet().selectionEmpty()) { 702 718 Collection<OsmPrimitive> selected = Main.main.getCurrentDataSet().getSelected(); 703 for (RelationMember m : chosenRelation.get().getMembers()704 if (selected.contains(m.getMember())705 if (role == null )719 for (RelationMember m : chosenRelation.get().getMembers()) { 720 if (selected.contains(m.getMember())) { 721 if (role == null ) { 706 722 role = m.getRole(); 707 else if (m.getRole() != null && !role.equals(m.getRole())723 } else if (m.getRole() != null && !role.equals(m.getRole())) { 708 724 role = tr("<different>"); 709 725 break; … … 725 741 726 742 @Override 727 public String getElementAt( 743 public String getElementAt(int index) { 728 744 return getRole(index); 729 745 } 730 746 731 public String getRole( 747 public String getRole(int index) { 732 748 return roles.get(index); 733 749 } 734 750 735 751 @Override 736 public void setSelectedItem( 752 public void setSelectedItem(Object anItem) { 737 753 int newIndex = anItem == null ? -1 : roles.indexOf(anItem); 738 if (newIndex != selectedIndex754 if (newIndex != selectedIndex) { 739 755 selectedIndex = newIndex; 740 756 fireContentsChanged(this, -1, -1);
Note:
See TracChangeset
for help on using the changeset viewer.