source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java@ 758

Last change on this file since 758 was 758, checked in by stoecker, 16 years ago

unified translation a bit

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1package org.openstreetmap.josm.gui.dialogs;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4import static org.openstreetmap.josm.tools.I18n.marktr;
5
6import java.awt.BorderLayout;
7import java.awt.GridLayout;
8import java.awt.event.ActionEvent;
9import java.awt.event.ActionListener;
10import java.awt.event.KeyEvent;
11import java.awt.event.MouseAdapter;
12import java.awt.event.MouseEvent;
13import java.util.Collections;
14
15import javax.swing.DefaultListModel;
16import javax.swing.JList;
17import javax.swing.JPanel;
18import javax.swing.JScrollPane;
19import javax.swing.ListSelectionModel;
20
21import org.openstreetmap.josm.Main;
22import org.openstreetmap.josm.command.DeleteCommand;
23import org.openstreetmap.josm.data.osm.OsmPrimitive;
24import org.openstreetmap.josm.data.osm.Relation;
25import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
26import org.openstreetmap.josm.gui.SideButton;
27import org.openstreetmap.josm.gui.layer.DataChangeListener;
28import org.openstreetmap.josm.gui.layer.Layer;
29import org.openstreetmap.josm.gui.layer.OsmDataLayer;
30import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
31import org.openstreetmap.josm.tools.GBC;
32
33/**
34 * A dialog showing all known relations, with buttons to add, edit, and
35 * delete them.
36 *
37 * We don't have such dialogs for nodes, segments, and ways, becaus those
38 * objects are visible on the map and can be selected there. Relations are not.
39 *
40 * @author Frederik Ramm <frederik@remote.org>
41 */
42public class RelationListDialog extends ToggleDialog implements LayerChangeListener, DataChangeListener {
43
44 /**
45 * The selection's list data.
46 */
47 private final DefaultListModel list = new DefaultListModel();
48
49 /**
50 * The display list.
51 */
52 private JList displaylist = new JList(list);
53
54 public RelationListDialog() {
55 super(tr("Relations"), "relationlist", tr("Open a list of all relations."), KeyEvent.VK_R, 150);
56 displaylist.setCellRenderer(new OsmPrimitivRenderer());
57 displaylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
58 displaylist.addMouseListener(new MouseAdapter(){
59 @Override public void mouseClicked(MouseEvent e) {
60 if (e.getClickCount() < 2)
61 return;
62 Relation toEdit = (Relation) displaylist.getSelectedValue();
63 if (toEdit != null)
64 new RelationEditor(toEdit).setVisible(true);
65 }
66 });
67
68 add(new JScrollPane(displaylist), BorderLayout.CENTER);
69
70 JPanel buttonPanel = new JPanel(new GridLayout(1,4));
71
72 buttonPanel.add(new SideButton(marktr("New"), "addrelation", "Selection", tr("Create a new relation"), new ActionListener() {
73 public void actionPerformed(ActionEvent e) {
74 // call relation editor with null argument to create new relation
75 new RelationEditor(null).setVisible(true);
76 }
77 }), GBC.std());
78
79 buttonPanel.add(new SideButton(marktr("Select"), "select", "Selection", tr("Select this relation"), new ActionListener() {
80 public void actionPerformed(ActionEvent e) {
81 // replace selection with the relation from the list
82 Main.ds.setSelected((Relation)displaylist.getSelectedValue());
83 }
84 }), GBC.std());
85
86 buttonPanel.add(new SideButton(marktr("Edit"), "edit", "Selection", tr( "Open an editor for the selected relation"), new ActionListener() {
87 public void actionPerformed(ActionEvent e) {
88 Relation toEdit = (Relation) displaylist.getSelectedValue();
89 if (toEdit != null)
90 new RelationEditor(toEdit).setVisible(true);
91 }
92 }), GBC.std());
93
94 buttonPanel.add(new SideButton(marktr("Delete"), "delete", "Selection", tr("Delete the selected relation"), new ActionListener() {
95 public void actionPerformed(ActionEvent e) {
96 Relation toDelete = (Relation) displaylist.getSelectedValue();
97 if (toDelete != null) {
98 Main.main.undoRedo.add(
99 new DeleteCommand(Collections.singleton(toDelete)));
100 }
101 }
102 }), GBC.eol());
103 Layer.listeners.add(this);
104 add(buttonPanel, BorderLayout.SOUTH);
105 }
106
107 @Override public void setVisible(boolean b) {
108 super.setVisible(b);
109 if (b) updateList();
110 }
111
112 public void updateList() {
113 list.setSize(Main.ds.relations.size());
114 int i = 0;
115 for (OsmPrimitive e : Main.ds.sort(Main.ds.relations)) {
116 if (!e.deleted && !e.incomplete)
117 list.setElementAt(e, i++);
118 }
119 list.setSize(i);
120 }
121
122 public void activeLayerChange(Layer a, Layer b) {
123 if ((a == null || a instanceof OsmDataLayer) && b instanceof OsmDataLayer) {
124 if (a != null) ((OsmDataLayer)a).listenerDataChanged.remove(this);
125 ((OsmDataLayer)b).listenerDataChanged.add(this);
126 updateList();
127 repaint();
128 }
129 }
130
131 public void layerRemoved(Layer a) {
132 if (a instanceof OsmDataLayer) {
133 ((OsmDataLayer)a).listenerDataChanged.remove(this);
134 }
135 }
136 public void layerAdded(Layer a) {
137 if (a instanceof OsmDataLayer) {
138 ((OsmDataLayer)a).listenerDataChanged.add(this);
139 }
140 }
141 public void dataChanged(OsmDataLayer l) {
142 updateList();
143 repaint();
144 }
145
146}
Note: See TracBrowser for help on using the repository browser.