Changeset 3302 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2010-06-03T20:40:04+02:00 (14 years ago)
Author:
stoecker
Message:

fix #4228 - display relation position in properties

File:
1 edited

Legend:

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

    r3281 r3302  
    5252import javax.swing.table.DefaultTableModel;
    5353import javax.swing.table.TableModel;
     54import javax.swing.table.TableColumnModel;
    5455import javax.swing.text.JTextComponent;
    5556
     
    337338                Main.map.mapView.getEditLayer(),
    338339                relation,
    339                 (Collection<RelationMember>) membershipData.getValueAt(row, 1) ).setVisible(true);
     340                ((MemberInfo) membershipData.getValueAt(row, 1)).role).setVisible(true);
    340341    }
    341342
     
    472473    private final JLabel selectSth = new JLabel("<html><p>"
    473474            + tr("Please select the objects you want to change properties for.") + "</p></html>");
     475
     476    class MemberInfo {
     477        List<RelationMember> role = new ArrayList<RelationMember>();
     478        List<Integer> position = new ArrayList<Integer>();
     479        void add(RelationMember r, Integer p)
     480        {
     481          role.add(r);
     482          position.add(p);
     483        }
     484    }
    474485
    475486    /**
     
    511522        // setting up the membership table
    512523
    513         membershipData.setColumnIdentifiers(new String[]{tr("Member Of"),tr("Role")});
     524        membershipData.setColumnIdentifiers(new String[]{tr("Member Of"),tr("Role"),tr("Position")});
    514525        membershipTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    515526        membershipTable.addMouseListener(new PopupMenuLauncher() {
     
    528539        });
    529540
    530         membershipTable.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
     541        TableColumnModel mod = membershipTable.getColumnModel();
     542        mod.getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
    531543            @Override public Component getTableCellRendererComponent(JTable table, Object value,
    532544                    boolean isSelected, boolean hasFocus, int row, int column) {
     
    544556        });
    545557
    546         membershipTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
     558        mod.getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
    547559            @SuppressWarnings("unchecked")
    548560            @Override public Component getTableCellRendererComponent(JTable table, Object value,
     
    552564                if (c instanceof JLabel) {
    553565                    JLabel label = (JLabel)c;
    554                     Collection<RelationMember> col = (Collection<RelationMember>) value;
     566                    MemberInfo col = (MemberInfo) value;
    555567
    556568                    String text = null;
    557                     for (RelationMember r : col) {
     569                    for (RelationMember r : col.role) {
    558570                        if (text == null) {
    559571                            text = r.getRole();
     
    573585            }
    574586        });
     587
     588        mod.getColumn(2).setCellRenderer(new DefaultTableCellRenderer() {
     589            @SuppressWarnings("unchecked")
     590            @Override public Component getTableCellRendererComponent(JTable table, Object value,
     591                    boolean isSelected, boolean hasFocus, int row, int column) {
     592                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     593                boolean isFiltered = (((Relation)table.getValueAt(row, 0))).isFiltered();
     594                if (c instanceof JLabel) {
     595                    JLabel label = (JLabel)c;
     596                    MemberInfo col = (MemberInfo) table.getValueAt(row, 1);
     597
     598                    String text = "";
     599                    for (Integer p : col.position) {
     600                        if (text.length() != 0)
     601                            text += ",";
     602                        text += String.valueOf(p);
     603                    }
     604
     605                    label.setText(text);
     606                    if (isFiltered) {
     607                        label.setFont(label.getFont().deriveFont(Font.ITALIC));
     608                    }
     609                }
     610                return c;
     611            }
     612        });
     613        mod.getColumn(2).setPreferredWidth(20);
     614        mod.getColumn(1).setPreferredWidth(40);
     615        mod.getColumn(0).setPreferredWidth(200);
    575616
    576617        // combine both tables and wrap them in a scrollPane
     
    803844        membershipData.setRowCount(0);
    804845
    805         Map<Relation, Collection<RelationMember>> roles = new HashMap<Relation, Collection<RelationMember>>();
     846        Map<Relation, MemberInfo> roles = new HashMap<Relation, MemberInfo>();
    806847        for (OsmPrimitive primitive: newSelection) {
    807848            for (OsmPrimitive ref: primitive.getReferrers()) {
    808849                if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) {
    809850                    Relation r = (Relation) ref;
    810                     Collection<RelationMember> members = new ArrayList<RelationMember>();
    811                     roles.put(r, members);
     851                    MemberInfo mi = mi = new MemberInfo();
     852                    roles.put(r, mi);
     853                    int i = 1;
    812854                    for (RelationMember m : r.getMembers()) {
    813855                        if (m.getMember() == primitive) {
    814                             members.add(m);
     856                            mi.add(m, i);
    815857                        }
     858                        ++i;
    816859                    }
    817860                }
Note: See TracChangeset for help on using the changeset viewer.