Ignore:
Timestamp:
2007-09-24T01:36:24+02:00 (17 years ago)
Author:
framm
Message:

This commit is a manual merge of all changes that have been made to
the intermediate "core_0.5" branch on the main OSM repository,
bevore JOSM was moved to openstreetmap.de.

Changes incorporated here:

r4464@svn.openstreetmap.org
r4466@svn.openstreetmap.org
r4468@svn.openstreetmap.org
r4469@svn.openstreetmap.org
r4479@svn.openstreetmap.org

Location:
branch/0.5/src/org/openstreetmap/josm/gui/dialogs
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branch/0.5/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r301 r329  
    3333import org.openstreetmap.josm.data.SelectionChangedListener;
    3434import org.openstreetmap.josm.data.osm.DataSet;
     35import org.openstreetmap.josm.data.osm.Relation;
     36import org.openstreetmap.josm.data.osm.RelationMember;
    3537import org.openstreetmap.josm.data.osm.Node;
    3638import org.openstreetmap.josm.data.osm.OsmPrimitive;
    37 import org.openstreetmap.josm.data.osm.Segment;
    3839import org.openstreetmap.josm.data.osm.Way;
    3940import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
     
    8889                add(buttonPanel, BorderLayout.SOUTH);
    8990
    90                 DataSet.listeners.add(new SelectionChangedListener(){
     91                DataSet.selListeners.add(new SelectionChangedListener(){
    9192                        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
    9293                                displaylist.clearSelection();
     
    130131                                model.addElement(osm);
    131132                for (OsmPrimitive osm : this.conflicts.keySet())
    132                         if (osm instanceof Segment)
    133                                 model.addElement(osm);
    134                 for (OsmPrimitive osm : this.conflicts.keySet())
    135133                        if (osm instanceof Way)
    136134                                model.addElement(osm);
     
    155153                                g.drawRect(p.x-1, p.y-1, 2, 2);
    156154                        }
    157                         public void visit(Segment ls) {
    158                                 if (ls.incomplete)
    159                                         return;
    160                                 Point p1 = nc.getPoint(ls.from.eastNorth);
    161                                 Point p2 = nc.getPoint(ls.to.eastNorth);
     155                        public void visit(Node n1, Node n2) {
     156                                Point p1 = nc.getPoint(n1.eastNorth);
     157                                Point p2 = nc.getPoint(n2.eastNorth);
    162158                                g.drawLine(p1.x, p1.y, p2.x, p2.y);
    163159                        }
    164160                        public void visit(Way w) {
    165                                 for (Segment ls : w.segments)
    166                                         visit(ls);
     161                                Node lastN = null;
     162                                for (Node n : w.nodes) {
     163                                        if (lastN == null) {
     164                                                lastN = n;
     165                                                continue;
     166                                        }
     167                                        visit(lastN, n);
     168                                        lastN = n;
     169                                }
     170                        }
     171                        public void visit(Relation e) {
     172                                for (RelationMember em : e.members)
     173                                        em.member.visit(this);
    167174                        }
    168175                };
  • branch/0.5/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java

    r298 r329  
    144144                revertButton.putClientProperty("help", "Dialog/History/Revert");
    145145               
    146                 DataSet.listeners.add(this);
     146                DataSet.selListeners.add(this);
    147147        }
    148148
  • branch/0.5/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java

    r301 r329  
    4848import org.openstreetmap.josm.data.osm.DataSet;
    4949import org.openstreetmap.josm.data.osm.OsmPrimitive;
     50import org.openstreetmap.josm.data.osm.Relation;
     51import org.openstreetmap.josm.data.osm.RelationMember;
     52import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    5053import org.openstreetmap.josm.gui.MapFrame;
    5154import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference;
     55import org.openstreetmap.josm.gui.tagging.ForwardActionListener;
    5256import org.openstreetmap.josm.gui.tagging.TaggingCellRenderer;
    53 import org.openstreetmap.josm.gui.tagging.ForwardActionListener;
    5457import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    5558import org.openstreetmap.josm.tools.AutoCompleteComboBox;
     
    7780
    7881        /**
     82         * Used to display relation names in the membership table
     83         */
     84        private NameVisitor nameVisitor = new NameVisitor();
     85       
     86        /**
    7987         * Watches for double clicks and from editing or new property, depending on the
    8088         * location, the click was.
     
    8593                        if (e.getClickCount() < 2)
    8694                                return;
    87                         if (e.getSource() instanceof JScrollPane)
    88                                 add();
    89                         else {
     95       
     96                        if (e.getSource() == propertyTable)
     97                        {
    9098                                int row = propertyTable.rowAtPoint(e.getPoint());
    91                                 edit(row);
    92                         }
    93                 }
    94         }
    95 
    96         /**
    97          * Edit the value in the table row
    98          * @param row   The row of the table, from which the value is edited.
    99          */
    100         void edit(int row) {
    101                 String key = data.getValueAt(row, 0).toString();
     99                                if (row > -1) {
     100                                        propertyEdit(row);
     101                                        return;
     102                        }
     103                        } else if (e.getSource() == membershipTable) {
     104                                int row = membershipTable.rowAtPoint(e.getPoint());
     105                                if (row > -1) {
     106                                        membershipEdit(row);
     107                                        return;
     108                                }
     109                        }
     110                        add();
     111                }
     112        }
     113
     114        /**
     115         * Edit the value in the properties table row
     116         * @param row The row of the table from which the value is edited.
     117         */
     118        void propertyEdit(int row) {
     119                String key = propertyData.getValueAt(row, 0).toString();
    102120                Collection<OsmPrimitive> sel = Main.ds.getSelected();
    103121                if (sel.isEmpty()) {
     
    118136                p.add(keyField, GBC.eol().fill(GBC.HORIZONTAL));
    119137                               
    120                 final JComboBox combo = (JComboBox)data.getValueAt(row, 1);
     138                final JTextField valueField = new JTextField((String)propertyData.getValueAt(row, 1));
    121139                p.add(new JLabel(tr("Value")), GBC.std());
    122140                p.add(Box.createHorizontalStrut(10), GBC.std());
    123                 p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
     141                p.add(valueField, GBC.eol().fill(GBC.HORIZONTAL));
    124142
    125143                final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
    126144                        @Override public void selectInitialValue() {
    127                                 combo.requestFocusInWindow();
    128                                 combo.getEditor().selectAll();
     145                                valueField.requestFocusInWindow();
     146                                valueField.selectAll();
    129147                        }
    130148                };
    131149                final JDialog dlg = optionPane.createDialog(Main.parent, tr("Change values?"));
    132                 combo.getEditor().addActionListener(new ActionListener(){
     150                valueField.addActionListener(new ActionListener(){
    133151                        public void actionPerformed(ActionEvent e) {
    134152                                optionPane.setValue(JOptionPane.OK_OPTION);
     
    136154                        }
    137155                });
    138                 String oldComboEntry = combo.getEditor().getItem().toString();
    139156                dlg.setVisible(true);
    140157
     
    142159                if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE ||
    143160                                (answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION)) {
    144                         combo.getEditor().setItem(oldComboEntry);
    145                         return;
    146                 }
    147 
    148                 String value = combo.getEditor().getItem().toString();
     161                        return;
     162                }
     163
     164                String value = valueField.getText();
    149165                if (value.equals(tr("<different>")))
    150166                        return;
     
    164180                }
    165181
    166                 if (!key.equals(newkey) || value == null)
    167182                        selectionChanged(sel); // update whole table
    168 
    169183                Main.parent.repaint(); // repaint all - drawing could have been changed
     184        }
     185
     186        /**
     187         * This simply fires up an relation editor for the relation shown; everything else
     188         * is the editor's business.
     189         *
     190         * @param row
     191         */
     192        void membershipEdit(int row) { 
     193                final RelationEditor editor = new RelationEditor((Relation)membershipData.getValueAt(row, 0));
     194                editor.setVisible(true);
    170195        }
    171196
     
    197222                        }
    198223                }
    199                 for (int i = 0; i < data.getRowCount(); ++i)
    200                         allData.remove(data.getValueAt(i, 0));
     224                for (int i = 0; i < propertyData.getRowCount(); ++i)
     225                        allData.remove(propertyData.getValueAt(i, 0));
    201226                final AutoCompleteComboBox keys = new AutoCompleteComboBox();
    202227                keys.setPossibleItems(allData.keySet());
     
    249274         */
    250275        private void delete(int row) {
    251                 String key = data.getValueAt(row, 0).toString();
     276                String key = propertyData.getValueAt(row, 0).toString();
    252277                Collection<OsmPrimitive> sel = Main.ds.getSelected();
    253278                Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, null));
     
    258283         * The property data.
    259284         */
    260         private final DefaultTableModel data = new DefaultTableModel(){
     285        private final DefaultTableModel propertyData = new DefaultTableModel() {
    261286                @Override public boolean isCellEditable(int row, int column) {
    262287                        return false;
    263288                }
    264289                @Override public Class<?> getColumnClass(int columnIndex) {
    265                         return columnIndex == 1 ? JComboBox.class : String.class;
     290                        return String.class;
    266291                }
    267292        };
     293
     294        /**
     295         * The membership data.
     296         */
     297        private final DefaultTableModel membershipData = new DefaultTableModel() {
     298                @Override public boolean isCellEditable(int row, int column) {
     299                        return false;
     300                }
     301                @Override public Class<?> getColumnClass(int columnIndex) {
     302                        return columnIndex == 1 ? Relation.class : String.class;
     303                }
     304        };
     305       
    268306        /**
    269307         * The properties list.
    270308         */
    271         private final JTable propertyTable = new JTable(data);
     309        private final JTable propertyTable = new JTable(propertyData);
     310        private final JTable membershipTable = new JTable(membershipData);
     311
    272312        public JComboBox taggingPresets = new JComboBox();
    273313
     
    277317         */
    278318        public PropertiesDialog(MapFrame mapFrame) {
    279                 super(tr("Properties"), "propertiesdialog", tr("Properties for selected objects."), KeyEvent.VK_P, 150);
     319                super(tr("Properties/Memberships"), "propertiesdialog", tr("Properties for selected objects."), KeyEvent.VK_P, 150);
    280320
    281321                if (TaggingPresetPreference.taggingPresets.size() > 0) {
     
    300340                taggingPresets.setRenderer(new TaggingCellRenderer());
    301341
    302                 data.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
     342                // setting up the properties table
     343               
     344                propertyData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
    303345                propertyTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    304                 propertyTable.setDefaultRenderer(JComboBox.class, new DefaultTableCellRenderer(){
     346       
     347                propertyTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer(){
    305348                        @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    306349                                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    307350                                if (c instanceof JLabel) {
    308                                         String str = ((JComboBox)value).getEditor().getItem().toString();
     351                                        String str = (String) value;
    309352                                        ((JLabel)c).setText(str);
    310353                                        if (str.equals(tr("<different>")))
     
    314357                        }
    315358                });
    316                 propertyTable.setDefaultRenderer(String.class, new DefaultTableCellRenderer(){
     359               
     360                // setting up the membership table
     361               
     362                membershipData.setColumnIdentifiers(new String[]{tr("Member Of"),tr("Role")});
     363                membershipTable.setRowSelectionAllowed(false);
     364               
     365                membershipTable.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
    317366                        @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    318                                 return super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     367                                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     368                                if (c instanceof JLabel) {
     369                                        nameVisitor.visit((Relation)value);
     370                                        ((JLabel)c).setText(nameVisitor.name);
     371                                }
     372                                return c;
    319373                        }
    320374                });
     375               
     376                // combine both tables and wrap them in a scrollPane
     377                JPanel bothTables = new JPanel();
     378                bothTables.setLayout(new GridBagLayout());
     379                bothTables.add(propertyTable.getTableHeader(), GBC.eol().fill(GBC.HORIZONTAL));
     380                bothTables.add(propertyTable, GBC.eol().fill(GBC.BOTH));
     381                bothTables.add(membershipTable.getTableHeader(), GBC.eol().fill(GBC.HORIZONTAL));
     382                bothTables.add(membershipTable, GBC.eol().fill(GBC.BOTH));
     383               
    321384                DblClickWatch dblClickWatch = new DblClickWatch();
    322385                propertyTable.addMouseListener(dblClickWatch);
    323                 JScrollPane scrollPane = new JScrollPane(propertyTable);
     386                membershipTable.addMouseListener(dblClickWatch);
     387                JScrollPane scrollPane = new JScrollPane(bothTables);
    324388                scrollPane.addMouseListener(dblClickWatch);
    325389                add(scrollPane, BorderLayout.CENTER);
     
    335399                                                JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to edit."));
    336400                                        else
    337                                                 edit(sel);
     401                                                propertyEdit(sel);
    338402                                } else if (e.getActionCommand().equals("Delete")) {
    339403                                        if (sel == -1)
     
    344408                        }
    345409                };
     410               
    346411                buttonPanel.add(createButton(marktr("Add"),tr("Add a new key/value pair to all objects"), KeyEvent.VK_A, buttonAction));
    347412                buttonPanel.add(createButton(marktr("Edit"),tr( "Edit the value of the selected key for all objects"), KeyEvent.VK_E, buttonAction));
     
    349414                add(buttonPanel, BorderLayout.SOUTH);
    350415
    351                 DataSet.listeners.add(this);
     416                DataSet.selListeners.add(this);
    352417        }
    353418
     
    375440                if (propertyTable.getCellEditor() != null)
    376441                        propertyTable.getCellEditor().cancelCellEditing();
    377                 data.setRowCount(0);
     442
     443                // re-load property data
     444               
     445                propertyData.setRowCount(0);
    378446
    379447                Map<String, Integer> valueCount = new HashMap<String, Integer>();
     
    391459                }
    392460                for (Entry<String, Collection<String>> e : props.entrySet()) {
    393                         JComboBox value = new JComboBox(e.getValue().toArray());
    394                         value.setEditable(true);
    395                         value.getEditor().setItem(e.getValue().size() > 1 || valueCount.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next());
    396                         data.addRow(new Object[]{e.getKey(), value});
     461                        String value=(e.getValue().size() > 1 || valueCount.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next());
     462                        propertyData.addRow(new Object[]{e.getKey(), value});
     463                }
     464               
     465                // re-load membership data
     466                // this is rather expensive since we have to walk through all members of all existing relationships.
     467                // could use back references here for speed if necessary.
     468               
     469                membershipData.setRowCount(0);
     470               
     471                Map<Relation, Integer> valueCountM = new HashMap<Relation, Integer>();
     472                TreeMap<Relation, Collection<String>> roles = new TreeMap<Relation, Collection<String>>();
     473                for (Relation r : Main.ds.relations) {
     474                        for (RelationMember m : r.members) {
     475                                if (newSelection.contains(m.member)) {
     476                                        Collection<String> value = roles.get(r);
     477                                        if (value == null) {
     478                                                value = new TreeSet<String>();
     479                                                roles.put(r, value);
     480                                        }
     481                                        value.add(m.role);
     482                                        valueCountM.put(r, valueCount.containsKey(r) ? valueCount.get(r)+1 : 1);
     483                                }
     484                        }
     485                }
     486               
     487                for (Entry<Relation, Collection<String>> e : roles.entrySet()) {
     488                        //JComboBox value = new JComboBox(e.getValue().toArray());
     489                        //value.setEditable(true);
     490                        //value.getEditor().setItem(e.getValue().size() > 1 || valueCount.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next());
     491                        String value = e.getValue().size() > 1 || valueCountM.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next();
     492                        membershipData.addRow(new Object[]{e.getKey(), value});
    397493                }
    398494        }
  • branch/0.5/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r298 r329  
    8080                selectionChanged(Main.ds.getSelected());
    8181
    82                 DataSet.listeners.add(this);
     82                DataSet.selListeners.add(this);
    8383        }
    8484
  • branch/0.5/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java

    r298 r329  
    5454                selectionChanged(Main.ds.getSelected());
    5555               
    56                 DataSet.listeners.add(this);
     56                DataSet.selListeners.add(this);
    5757        }
    5858
Note: See TracChangeset for help on using the changeset viewer.