source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java@ 6524

Last change on this file since 6524 was 6361, checked in by Don-vip, 11 years ago

Sonar/Findbugs - Unused formal parameter

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.BorderLayout;
7import java.awt.FlowLayout;
8import java.awt.event.ActionEvent;
9import java.awt.event.MouseAdapter;
10import java.awt.event.MouseEvent;
11
12import javax.swing.AbstractAction;
13import javax.swing.JCheckBox;
14import javax.swing.JList;
15import javax.swing.JPanel;
16import javax.swing.JScrollPane;
17import javax.swing.ListSelectionModel;
18import javax.swing.event.ListDataEvent;
19import javax.swing.event.ListDataListener;
20import javax.swing.event.ListSelectionEvent;
21import javax.swing.event.ListSelectionListener;
22
23import org.openstreetmap.josm.Main;
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.OsmDataLayer;
28import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
29import org.openstreetmap.josm.tools.ImageProvider;
30
31/**
32 * This is browser for a list of relations which refer to another relations
33 *
34 *
35 */
36public class ReferringRelationsBrowser extends JPanel {
37
38 /** the list of relations */
39 private JList referrers;
40 private ReferringRelationsBrowserModel model;
41 private OsmDataLayer layer;
42 private JCheckBox cbReadFull;
43 private EditAction editAction;
44
45 /**
46 * build the GUI
47 */
48 protected void build() {
49 setLayout(new BorderLayout());
50 referrers = new JList(model);
51 referrers.setCellRenderer(new OsmPrimitivRenderer());
52 add(new JScrollPane(referrers), BorderLayout.CENTER);
53 referrers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
54 referrers.addMouseListener(new DblClickMouseAdapter());
55
56 JPanel pnl = new JPanel();
57 pnl.setLayout(new FlowLayout(FlowLayout.LEFT));
58
59 ReloadAction reloadAction = new ReloadAction();
60 referrers.getModel().addListDataListener(reloadAction);
61 pnl.add(new SideButton(reloadAction));
62 pnl.add(cbReadFull = new JCheckBox(tr("including immediate children of parent relations")));
63
64 editAction = new EditAction();
65 referrers.getSelectionModel().addListSelectionListener(editAction);
66 pnl.add(new SideButton(editAction));
67 add(pnl, BorderLayout.SOUTH);
68 }
69
70 public ReferringRelationsBrowser(OsmDataLayer layer, ReferringRelationsBrowserModel model) {
71 this.model = model;
72 this.layer = layer;
73 build();
74 }
75
76 public void init() {
77 model.populate(getLayer().data);
78 }
79
80 protected OsmDataLayer getLayer() {
81 return layer;
82 }
83
84 /**
85 * Action for loading the parent relations of a relation
86 *
87 */
88 class ReloadAction extends AbstractAction implements ListDataListener {
89 public ReloadAction() {
90 putValue(SHORT_DESCRIPTION, tr("Load parent relations"));
91 putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
92 putValue(NAME, tr("Reload"));
93 refreshEnabled();
94 }
95
96 protected void refreshEnabled() {
97 setEnabled(model.canReload());
98 }
99
100 @Override
101 public void actionPerformed(ActionEvent e) {
102 boolean full = cbReadFull.isSelected();
103 final ParentRelationLoadingTask task = new ParentRelationLoadingTask(
104 model.getRelation(),
105 getLayer(),
106 full,
107 new PleaseWaitProgressMonitor(tr("Loading parent relations"))
108 );
109 task.setContinuation(
110 new Runnable() {
111 @Override
112 public void run() {
113 if (task.isCanceled() || task.hasError())
114 return;
115 model.populate(task.getParents());
116 }
117 }
118 );
119 Main.worker.submit(task);
120 }
121
122 @Override
123 public void contentsChanged(ListDataEvent e) {
124 refreshEnabled();
125 }
126
127 @Override
128 public void intervalAdded(ListDataEvent e) {
129 refreshEnabled();
130 }
131
132 @Override
133 public void intervalRemoved(ListDataEvent e) {
134 refreshEnabled();
135 }
136 }
137
138 /**
139 * Action for editing the currently selected relation
140 *
141 */
142 class EditAction extends AbstractAction implements ListSelectionListener {
143 public EditAction() {
144 putValue(SHORT_DESCRIPTION, tr("Edit the currently selected relation"));
145 putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
146 putValue(NAME, tr("Edit"));
147 refreshEnabled();
148 }
149
150 protected void refreshEnabled() {
151 setEnabled(referrers.getSelectionModel().getMinSelectionIndex() >=0);
152 }
153
154 @Override
155 public void actionPerformed(ActionEvent e) {
156 run();
157 }
158
159 public void run() {
160 int idx = referrers.getSelectedIndex();
161 if (idx < 0) return;
162 Relation r = model.get(idx);
163 if (r == null) return;
164 RelationEditor editor = RelationEditor.getEditor(getLayer(), r, null);
165 editor.setVisible(true);
166 }
167
168 @Override
169 public void valueChanged(ListSelectionEvent e) {
170 refreshEnabled();
171 }
172 }
173
174 class DblClickMouseAdapter extends MouseAdapter {
175 @Override
176 public void mouseClicked(MouseEvent e) {
177 if (e.getClickCount() == 2) {
178 editAction.run();
179 }
180 }
181 }
182}
Note: See TracBrowser for help on using the repository browser.