Ignore:
Timestamp:
2011-03-22T15:53:58+01:00 (14 years ago)
Author:
zverik
Message:

current

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/relcontext/src/relcontext/RelContextDialog.java

    r25649 r25667  
    22
    33import java.awt.event.MouseEvent;
     4import java.util.Collection;
    45import org.openstreetmap.josm.data.osm.OsmPrimitive;
     6import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    57import static org.openstreetmap.josm.tools.I18n.tr;
    68
     
    911import java.awt.event.KeyEvent;
    1012import java.awt.event.MouseAdapter;
     13import java.util.Collections;
     14import java.util.HashSet;
     15import java.util.Set;
     16import javax.swing.DefaultListModel;
     17import javax.swing.JButton;
    1118
    1219import javax.swing.JList;
     
    1522import javax.swing.ListSelectionModel;
    1623import org.openstreetmap.josm.Main;
     24import org.openstreetmap.josm.data.SelectionChangedListener;
    1725import org.openstreetmap.josm.data.osm.Relation;
     26import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
     27import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
    1828
    1929import org.openstreetmap.josm.gui.MapView;
     30import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener;
    2031import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    2132import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
     
    2334import org.openstreetmap.josm.gui.layer.Layer;
    2435import org.openstreetmap.josm.tools.Shortcut;
     36import relcontext.actions.AddRemoveMemberAction;
     37import relcontext.actions.ClearChosenRelationAction;
     38import relcontext.actions.CreateRelationAction;
     39import relcontext.actions.DownloadChosenRelationAction;
     40import relcontext.actions.EditChosenRelationAction;
    2541
    2642/**
     
    2945 * @author Zverik
    3046 */
    31 public class RelContextDialog extends ToggleDialog implements LayerChangeListener, ChosenRelationListener {
     47public class RelContextDialog extends ToggleDialog implements EditLayerChangeListener, ChosenRelationListener, SelectionChangedListener {
    3248    private JList relationsList;
     49    private final DefaultListModel relationsData;
    3350    private ChosenRelation chosenRelation;
    3451
    3552    public RelContextDialog() {
    36         super(tr("Open Relation Editor"), "icon_relcontext",
     53        super(tr("Advanced Relation Editor"), "icon_relcontext",
    3754                tr("Opens advanced relation/multipolygon editor panel"),
    3855                Shortcut.registerShortcut("view:relcontext", tr("Toggle: {0}", tr("Open Relation Editor")),
    3956                KeyEvent.VK_R, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
     57
     58        JPanel rcPanel = new JPanel(new BorderLayout());
    4059
    4160        chosenRelation = new ChosenRelation();
     
    4362        MapView.addEditLayerChangeListener(chosenRelation);
    4463
    45         relationsList = new JList();
     64        relationsData = new DefaultListModel();
     65        relationsList = new JList(relationsData);
    4666        relationsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    4767        relationsList.setCellRenderer(new OsmPrimitivRenderer() {
     
    5878                }
    5979                chosenRelation.set((Relation)relationsList.getSelectedValue());
     80                relationsList.clearSelection();
    6081            }
    6182        });
    62         add(new JScrollPane(relationsList), BorderLayout.CENTER);
     83        rcPanel.add(new JScrollPane(relationsList), BorderLayout.CENTER);
    6384
    6485        // [±][X] relation U [AZ][Down][Edit]
    6586        JPanel topLine = new JPanel(new BorderLayout());
    6687        JPanel topLeftButtons = new JPanel(new FlowLayout(FlowLayout.LEFT));
     88        topLeftButtons.add(new JButton(new AddRemoveMemberAction(chosenRelation)));
     89        topLeftButtons.add(new JButton(new ClearChosenRelationAction(chosenRelation)));
     90        topLine.add(topLeftButtons, BorderLayout.WEST);
     91        topLine.add(new ChosenRelationComponent(chosenRelation), BorderLayout.CENTER);
    6792        JPanel topRightButtons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    68         topLine.add(topLeftButtons, BorderLayout.WEST);
     93        topRightButtons.add(new JButton(new DownloadChosenRelationAction(chosenRelation)));
     94        topRightButtons.add(new JButton(new EditChosenRelationAction(chosenRelation)));
    6995        topLine.add(topRightButtons, BorderLayout.EAST);
    70         add(topLine, BorderLayout.NORTH);
     96        rcPanel.add(topLine, BorderLayout.NORTH);
    7197
    7298        // [+][Multi] [X]Adm [X]Tags [X]1
    7399        JPanel bottomLine = new JPanel(new FlowLayout(FlowLayout.LEFT));
    74         add(bottomLine, BorderLayout.SOUTH);
     100        bottomLine.add(new JButton(new CreateRelationAction(chosenRelation)));
     101        rcPanel.add(bottomLine, BorderLayout.SOUTH);
    75102
    76         MapView.addLayerChangeListener(this);
     103        add(rcPanel, BorderLayout.CENTER);
    77104    }
     105
     106    @Override
     107    public void hideNotify() {
     108        SelectionEventManager.getInstance().removeSelectionListener(this);
     109        MapView.removeEditLayerChangeListener(this);
     110    }
     111
     112    @Override
     113    public void showNotify() {
     114        SelectionEventManager.getInstance().addSelectionListener(this, FireMode.IN_EDT_CONSOLIDATED);
     115        MapView.addEditLayerChangeListener(this);
     116    }
     117
     118
    78119
    79120    public ChosenRelation getChosenRelation() {
     
    85126    }
    86127
    87     @Override
    88     public void activeLayerChange( Layer arg0, Layer arg1 ) {
    89         // TODO Auto-generated method stub
     128    public void selectionChanged( Collection<? extends OsmPrimitive> newSelection ) {
     129        if( !isVisible() || relationsData == null )
     130            return;
     131        // repopulate relations table
     132        relationsData.clear();
     133        if( newSelection == null )
     134            return;
     135        Set<Relation> rels = new HashSet<Relation>();
     136        for( OsmPrimitive element : newSelection ) {
     137            for( OsmPrimitive ref : element.getReferrers() ) {
     138                if( ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted() ) {
     139                    rels.add((Relation) ref);
     140                }
     141            }
     142        }
     143        for( Relation rel : rels )
     144            relationsData.addElement(rel);
    90145    }
    91146
    92     @Override
    93     public void layerAdded( Layer arg0 ) {
    94         // TODO Auto-generated method stub
     147    private void updateSelection() {
     148        if (Main.main.getCurrentDataSet() == null) {
     149            selectionChanged(Collections.<OsmPrimitive>emptyList());
     150        } else {
     151            selectionChanged(Main.main.getCurrentDataSet().getSelected());
     152        }
    95153    }
    96154
    97     @Override
    98     public void layerRemoved( Layer arg0 ) {
    99         // TODO Auto-generated method stub
     155    public void editLayerChanged( OsmDataLayer oldLayer, OsmDataLayer newLayer ) {
     156        updateSelection();
    100157    }
    101158}
Note: See TracChangeset for help on using the changeset viewer.