Changeset 3518 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
- Timestamp:
- 10.09.2010 07:45:16 (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
r3501 r3518 7 7 import java.awt.BorderLayout; 8 8 import java.awt.Component; 9 import java.awt.Cursor;10 import java.awt.Dialog.ModalityType;11 import java.awt.Dimension;12 9 import java.awt.Font; 13 10 import java.awt.GridBagLayout; 14 11 import java.awt.Point; 12 import java.awt.Dialog.ModalityType; 15 13 import java.awt.event.ActionEvent; 16 14 import java.awt.event.ActionListener; … … 20 18 import java.awt.event.MouseAdapter; 21 19 import java.awt.event.MouseEvent; 22 import java.awt.event.MouseListener;23 20 import java.util.ArrayList; 24 21 import java.util.Collection; … … 66 63 import org.openstreetmap.josm.data.osm.Relation; 67 64 import org.openstreetmap.josm.data.osm.RelationMember; 65 import org.openstreetmap.josm.data.osm.Tag; 68 66 import org.openstreetmap.josm.data.osm.Way; 69 67 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; … … 78 76 import org.openstreetmap.josm.gui.SideButton; 79 77 import org.openstreetmap.josm.gui.dialogs.ToggleDialog; 78 import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler; 80 79 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 81 80 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 82 import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference;83 81 import org.openstreetmap.josm.gui.tagging.TaggingPreset; 84 82 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox; … … 480 478 private final SideButton btnEdit; 481 479 private final SideButton btnDel; 482 private final JPanel presets = new JPanel(new GridBagLayout());480 private final PresetListPanel presets = new PresetListPanel(); 483 481 484 482 private final JLabel selectSth = new JLabel("<html><p>" … … 716 714 } 717 715 718 private void checkPresets(int nodes, int ways, int relations, int closedways)719 {720 /**721 * Small helper class that manages the highlighting of the label on hover as well as opening722 * the corresponding preset when clicked723 */724 class PresetLabelML implements MouseListener {725 JLabel label;726 Font bold;727 Font normal;728 TaggingPreset tag;729 PresetLabelML(JLabel lbl, TaggingPreset t) {730 super();731 label = lbl;732 lbl.setCursor(new Cursor(Cursor.HAND_CURSOR));733 normal = label.getFont();734 bold = normal.deriveFont(normal.getStyle() ^ Font.BOLD);735 tag = t;736 }737 public void mouseClicked(MouseEvent arg0) {738 tag.actionPerformed(null);739 }740 public void mouseEntered(MouseEvent arg0) {741 label.setFont(bold);742 }743 public void mouseExited(MouseEvent arg0) {744 label.setFont(normal);745 }746 public void mousePressed(MouseEvent arg0) {}747 public void mouseReleased(MouseEvent arg0) {}748 }749 750 presets.removeAll();751 int total = nodes+ways+relations+closedways;752 if(total == 0) {753 presets.setVisible(false);754 return;755 }756 757 for(TaggingPreset t : TaggingPresetPreference.taggingPresets) {758 if((t.types == null || !((relations > 0 && !t.types.contains("relation")) &&759 (nodes > 0 && !t.types.contains("node")) &&760 (ways+closedways > 0 && !t.types.contains("way")) &&761 (closedways > 0 && !t.types.contains("closedway")))) && t.isShowable())762 {763 int found = 0;764 for(TaggingPreset.Item i : t.data) {765 if(!(i instanceof TaggingPreset.Key)) {766 continue;767 }768 String val = ((TaggingPreset.Key)i).value;769 String key = ((TaggingPreset.Key)i).key;770 // we subtract 100 if not found and add 1 if found771 found -= 100;772 if(key == null || !valueCount.containsKey(key)) {773 continue;774 }775 776 Map<String, Integer> v = valueCount.get(key);777 if(v.size() == 1 && val != null && v.containsKey(val) && v.get(val) == total) {778 found += 101;779 }780 }781 782 if(found <= 0) {783 continue;784 }785 786 JLabel lbl = new JLabel(t.getName());787 lbl.addMouseListener(new PresetLabelML(lbl, t));788 presets.add(lbl, GBC.eol().fill(GBC.HORIZONTAL));789 }790 }791 792 if(presets.getComponentCount() > 0) {793 presets.setVisible(true);794 // This ensures the presets are exactly as high as needed.795 int height = presets.getComponentCount() * presets.getComponent(0).getHeight();796 Dimension size = new Dimension(presets.getWidth(), height);797 presets.setMaximumSize(size);798 presets.setMinimumSize(size);799 } else {800 presets.setVisible(false);801 }802 }803 804 716 private int findRow(TableModel model, Object value) { 805 717 for (int i=0; i<model.getRowCount(); i++) { … … 809 721 return -1; 810 722 } 723 724 private PresetHandler presetHandler = new PresetHandler() { 725 726 @Override 727 public void updateTags(List<Tag> tags) { 728 Command command = TaggingPreset.createCommand(getSelection(), tags); 729 if (command != null) { 730 Main.main.undoRedo.add(command); 731 } 732 } 733 734 @Override 735 public Collection<OsmPrimitive> getSelection() { 736 if (Main.main == null) return null; 737 if (Main.main.getCurrentDataSet() == null) return null; 738 739 return Main.main.getCurrentDataSet().getSelected(); 740 } 741 }; 811 742 812 743 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { … … 870 801 propertyData.addRow(new Object[]{e.getKey(), e.getValue()}); 871 802 } 872 873 // re-load membership data874 // this is rather expensive since we have to walk through all members of all existing relationships.875 // could use back references here for speed if necessary.876 803 877 804 membershipData.setRowCount(0); … … 913 840 } 914 841 915 checkPresets(nodes, ways, relations, closedways);842 presets.updatePresets(nodes, ways, relations, closedways, valueCount, presetHandler); 916 843 917 844 membershipTable.getTableHeader().setVisible(membershipData.getRowCount() > 0);
Note: See TracChangeset
for help on using the changeset viewer.
