Changeset 1806 in josm


Ignore:
Timestamp:
Jul 18, 2009 11:31:42 PM (4 years ago)
Author:
Gubaer
Message:

added OsmServerBackreferenceReader - reads primitives referring to a particular primitive (ways including a node, relations referring to a relation)
Extended relation dialog - now supports querying for parent relation(s)

Location:
trunk
Files:
6 added
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r1804 r1806  
    3131import javax.swing.JScrollPane; 
    3232import javax.swing.JSplitPane; 
     33import javax.swing.JTabbedPane; 
    3334import javax.swing.JTable; 
    3435import javax.swing.JTextField; 
    3536import javax.swing.KeyStroke; 
    3637import javax.swing.ListSelectionModel; 
     38import javax.swing.SwingUtilities; 
    3739import javax.swing.event.DocumentEvent; 
    3840import javax.swing.event.DocumentListener; 
     
    8789    private AutoCompletionCache acCache; 
    8890    private AutoCompletionList acList; 
     91    private ReferringRelationsBrowserModel referrerModel; 
    8992 
    9093    /** the member table */ 
     
    121124        memberTableModel = new MemberTableModel(); 
    122125        selectionTableModel = new SelectionTableModel(getLayer()); 
     126        referrerModel = new ReferringRelationsBrowserModel(relation); 
    123127 
    124128        // populate the models 
     
    143147 
    144148        getContentPane().setLayout(new BorderLayout()); 
    145         getContentPane().add(pnl,BorderLayout.CENTER); 
     149        JTabbedPane tabbedPane = new JTabbedPane(); 
     150        tabbedPane.add(tr("Tags and Members"), pnl); 
     151        if (relation != null && relation.id > 0) { 
     152            tabbedPane.add(tr("Parent Relations"), new ReferringRelationsBrowser(getLayer(), referrerModel)); 
     153        } 
     154 
     155        getContentPane().add(tabbedPane,BorderLayout.CENTER); 
    146156        getContentPane().add(buildOkCancelButtonPanel(), BorderLayout.SOUTH); 
    147157 
     
    381391        JPanel pnl = new JPanel(); 
    382392        pnl.setLayout(new BorderLayout()); 
    383  
    384         JTable tbl = new JTable(selectionTableModel,new SelectionTableColumnModel()); 
     393        JTable tbl = new JTable(selectionTableModel,new SelectionTableColumnModel(memberTableModel)); 
    385394        tbl.setEnabled(false); 
    386  
    387395        JScrollPane pane = new JScrollPane(tbl); 
    388396        pnl.add(pane, BorderLayout.CENTER); 
     
    533541        //--- copy relation action 
    534542        buttonPanel.add(new SideButton(new DuplicateRelationAction())); 
     543 
     544        // -- edit action 
     545        EditAction editAction = new EditAction(); 
     546        memberTableModel.getSelectionModel().addListSelectionListener(editAction); 
     547        buttonPanel.add(new SideButton(editAction)); 
    535548        return buttonPanel; 
    536549    } 
     
    966979    } 
    967980 
     981    /** 
     982     * Action for editing the currently selected relation 
     983     *  
     984     * 
     985     */ 
     986    class EditAction extends AbstractAction implements ListSelectionListener { 
     987        public EditAction() { 
     988            putValue(SHORT_DESCRIPTION, tr("Edit the relation the currently selected relation member refers to")); 
     989            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit")); 
     990            putValue(NAME, tr("Edit")); 
     991            refreshEnabled(); 
     992        } 
     993 
     994        protected void refreshEnabled() { 
     995            setEnabled(memberTable.getSelectedRowCount() == 1 && memberTableModel.isEditableRelation(memberTable.getSelectedRow())); 
     996        } 
     997 
     998        public void actionPerformed(ActionEvent e) { 
     999            int idx = memberTable.getSelectedRow(); 
     1000            if (idx < 0) return; 
     1001            OsmPrimitive primitive = memberTableModel.getReferredPrimitive(idx); 
     1002            if (! (primitive instanceof Relation)) return; 
     1003            Relation r= (Relation)primitive; 
     1004            if (r.incomplete) return; 
     1005            RelationEditor editor = RelationEditor.getEditor(getLayer(), r, null); 
     1006            editor.setVisible(true); 
     1007        } 
     1008 
     1009        public void valueChanged(ListSelectionEvent e) { 
     1010            refreshEnabled(); 
     1011        } 
     1012    } 
     1013 
     1014    /** 
     1015     * The asynchronous task for downloading relation members. 
     1016     *  
     1017     * 
     1018     */ 
    9681019    class DownloadTask extends PleaseWaitRunnable { 
    9691020        private boolean cancelled; 
    9701021        private Exception lastException; 
    971  
    972         protected void setIndeterminateEnabled(final boolean enabled) { 
    973             EventQueue.invokeLater( 
    974                     new Runnable() { 
    975                         public void run() { 
    976                             Main.pleaseWaitDlg.setIndeterminate(enabled); 
    977                         } 
    978                     } 
    979             ); 
    980         } 
    9811022 
    9821023        public DownloadTask() { 
     
    10131054        protected void realRun() throws SAXException, IOException, OsmTransferException { 
    10141055            try { 
    1015                 Main.pleaseWaitDlg.setAlwaysOnTop(true); 
    1016                 Main.pleaseWaitDlg.toFront(); 
    1017                 setIndeterminateEnabled(true); 
     1056                SwingUtilities.invokeLater( 
     1057                        new Runnable() { 
     1058                            public void run() { 
     1059                                Main.pleaseWaitDlg.setAlwaysOnTop(true); 
     1060                                Main.pleaseWaitDlg.toFront(); 
     1061                                Main.pleaseWaitDlg.setIndeterminate(true); 
     1062                            } 
     1063                        } 
     1064                ); 
    10181065                OsmServerObjectReader reader = new OsmServerObjectReader(getRelation().id, OsmPrimitiveType.RELATION, true); 
    10191066                DataSet dataSet = reader.parseOsm(); 
     
    10261073                        getLayer().data.dataSources.add(src); 
    10271074                    } 
    1028                     getLayer().fireDataChange(); 
    1029  
     1075                    // FIXME: this is necessary because there are  dialogs listening 
     1076                    // for DataChangeEvents which manipulate Swing components on this 
     1077                    // thread. 
     1078                    // 
     1079                    SwingUtilities.invokeLater( 
     1080                            new Runnable() { 
     1081                                public void run() { 
     1082                                    getLayer().fireDataChange(); 
     1083                                } 
     1084                            } 
     1085                    ); 
    10301086                    if (visitor.getConflicts().isEmpty()) 
    10311087                        return; 
     
    10491105                lastException = e; 
    10501106            } finally { 
    1051                 Main.pleaseWaitDlg.setAlwaysOnTop(false); 
    1052                 setIndeterminateEnabled(false); 
     1107                SwingUtilities.invokeLater( 
     1108                        new Runnable() { 
     1109                            public void run() { 
     1110                                Main.pleaseWaitDlg.setAlwaysOnTop(false); 
     1111                                Main.pleaseWaitDlg.setIndeterminate(false); 
     1112                            } 
     1113                        } 
     1114                ); 
    10531115            } 
    10541116        } 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r1804 r1806  
    379379        } 
    380380    } 
     381 
     382    public boolean isEditableRelation(int row) { 
     383        if (row < 0 || row >= members.size()) return false; 
     384        RelationMember member = members.get(row); 
     385        if (!(member.member instanceof Relation)) return false; 
     386        Relation r = (Relation)member.member; 
     387        return ! r.incomplete; 
     388    } 
    381389} 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableColumnModel.java

    r1804 r1806  
    77import javax.swing.table.TableColumn; 
    88 
    9 import org.openstreetmap.josm.gui.OsmPrimitivRenderer; 
    10  
    119public class SelectionTableColumnModel  extends DefaultTableColumnModel { 
    12     public SelectionTableColumnModel() { 
     10    public SelectionTableColumnModel(MemberTableModel model) { 
    1311        TableColumn col = null; 
    14         OsmPrimitivRenderer renderer = new OsmPrimitivRenderer(); 
     12        SelectionTableCellRenderer renderer = new SelectionTableCellRenderer(); 
     13        renderer.setMemberTableModel(model); 
    1514 
    1615        // column 0 - the member role 
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r1790 r1806  
    1111import java.util.Date; 
    1212import java.util.HashMap; 
    13 import java.util.HashSet; 
    1413import java.util.LinkedList; 
    1514import java.util.Map; 
    16 import java.util.Set; 
    1715import java.util.Map.Entry; 
    1816import java.util.logging.Logger; 
     
    352350                w.incomplete = true; 
    353351                w.nodes.clear(); 
     352                adder.visit(w); 
    354353            } else { 
    355354                e.getKey().copyTo(w); 
  • trunk/test/config/test-functional-env.properties

    r1799 r1806  
    1616#   temporary results  
    1717# 
    18 test.functional.tempdir=C:\\data\\projekte\\eclipse-3.4.1-ws\\JOSM-new\\test\\data\\temp 
     18test.functional.tempdir=C:\\data\\projekte\\eclipse-3.4.1-ws\\JOSM-1769\\test\\data\\temp 
    1919 
  • trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java

    r1796 r1806  
    258258        } 
    259259        assertTrue(reader.getMissingPrimitives().isEmpty()); 
    260         //assertTrue(reader.getSkippedWays().isEmpty()); 
    261260    } 
    262261 
     
    279278        } 
    280279        assertTrue(reader.getMissingPrimitives().isEmpty()); 
    281         //assertTrue(reader.getSkippedWays().isEmpty()); 
    282  
    283280    } 
    284281 
     
    301298        } 
    302299        assertTrue(reader.getMissingPrimitives().isEmpty()); 
    303         //assertTrue(reader.getSkippedWays().isEmpty()); 
    304  
    305300    } 
    306301 
     
    322317        } 
    323318        assertTrue(reader.getMissingPrimitives().isEmpty()); 
    324         //assertTrue(reader.getSkippedWays().isEmpty()); 
    325  
    326  
    327319    } 
    328320 
     
    348340        assertEquals(1, reader.getMissingPrimitives().size()); 
    349341        assertEquals(9999999, reader.getMissingPrimitives().iterator().next()); 
    350         //assertTrue(reader.getSkippedWays().isEmpty()); 
    351342    } 
    352343} 
Note: See TracChangeset for help on using the changeset viewer.