Ignore:
Timestamp:
2009-07-18T23:31:42+02:00 (15 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/src/org/openstreetmap/josm/gui/dialogs/relation
Files:
3 added
3 edited

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
Note: See TracChangeset for help on using the changeset viewer.