Ignore:
Timestamp:
10.09.2010 07:45:16 (21 months ago)
Author:
jttt
Message:
  • add New relation button to Preset dialog
  • add required attribute to tagging preset (allows to specify what tags has to filled for osm primitive to qualify as having preset)
  • show list of preset also in relation dialog
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r3501 r3518  
    77import java.awt.BorderLayout; 
    88import java.awt.Component; 
    9 import java.awt.Cursor; 
    10 import java.awt.Dialog.ModalityType; 
    11 import java.awt.Dimension; 
    129import java.awt.Font; 
    1310import java.awt.GridBagLayout; 
    1411import java.awt.Point; 
     12import java.awt.Dialog.ModalityType; 
    1513import java.awt.event.ActionEvent; 
    1614import java.awt.event.ActionListener; 
     
    2018import java.awt.event.MouseAdapter; 
    2119import java.awt.event.MouseEvent; 
    22 import java.awt.event.MouseListener; 
    2320import java.util.ArrayList; 
    2421import java.util.Collection; 
     
    6663import org.openstreetmap.josm.data.osm.Relation; 
    6764import org.openstreetmap.josm.data.osm.RelationMember; 
     65import org.openstreetmap.josm.data.osm.Tag; 
    6866import org.openstreetmap.josm.data.osm.Way; 
    6967import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; 
     
    7876import org.openstreetmap.josm.gui.SideButton; 
    7977import org.openstreetmap.josm.gui.dialogs.ToggleDialog; 
     78import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler; 
    8079import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 
    8180import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    82 import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference; 
    8381import org.openstreetmap.josm.gui.tagging.TaggingPreset; 
    8482import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox; 
     
    480478    private final SideButton btnEdit; 
    481479    private final SideButton btnDel; 
    482     private final JPanel presets = new JPanel(new GridBagLayout()); 
     480    private final PresetListPanel presets = new PresetListPanel(); 
    483481 
    484482    private final JLabel selectSth = new JLabel("<html><p>" 
     
    716714    } 
    717715 
    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 opening 
    722          * the corresponding preset when clicked 
    723          */ 
    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 found 
    771                     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  
    804716    private int findRow(TableModel model, Object value) { 
    805717        for (int i=0; i<model.getRowCount(); i++) { 
     
    809721        return -1; 
    810722    } 
     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    }; 
    811742 
    812743    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { 
     
    870801            propertyData.addRow(new Object[]{e.getKey(), e.getValue()}); 
    871802        } 
    872  
    873         // re-load membership data 
    874         // 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. 
    876803 
    877804        membershipData.setRowCount(0); 
     
    913840        } 
    914841 
    915         checkPresets(nodes, ways, relations, closedways); 
     842        presets.updatePresets(nodes, ways, relations, closedways, valueCount, presetHandler); 
    916843 
    917844        membershipTable.getTableHeader().setVisible(membershipData.getRowCount() > 0); 
Note: See TracChangeset for help on using the changeset viewer.