source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java@ 12630

Last change on this file since 12630 was 12630, checked in by Don-vip, 7 years ago

see #15182 - deprecate Main.map and Main.isDisplayingMapView(). Replacements: gui.MainApplication.getMap() / gui.MainApplication.isDisplayingMapView()

  • Property svn:eol-style set to native
File size: 10.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.changeset.query;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.BorderLayout;
7import java.awt.GridBagConstraints;
8import java.awt.GridBagLayout;
9import java.awt.Insets;
10import java.awt.event.ItemEvent;
11import java.awt.event.ItemListener;
12import java.util.EnumMap;
13import java.util.Map;
14
15import javax.swing.BorderFactory;
16import javax.swing.ButtonGroup;
17import javax.swing.JCheckBox;
18import javax.swing.JPanel;
19import javax.swing.JRadioButton;
20
21import org.openstreetmap.josm.Main;
22import org.openstreetmap.josm.data.Bounds;
23import org.openstreetmap.josm.gui.JosmUserIdentityManager;
24import org.openstreetmap.josm.gui.MainApplication;
25import org.openstreetmap.josm.gui.MapView;
26import org.openstreetmap.josm.gui.widgets.HtmlPanel;
27import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
28import org.openstreetmap.josm.io.ChangesetQuery;
29import org.openstreetmap.josm.tools.Logging;
30
31/**
32 * This panel presents a list of basic queries for changesets.
33 * @since 2689
34 */
35public class BasicChangesetQueryPanel extends JPanel {
36
37 /**
38 * Enumeration of basic, predefined queries
39 */
40 private enum BasicQuery {
41 MOST_RECENT_CHANGESETS,
42 MY_OPEN_CHANGESETS,
43 CHANGESETS_IN_MAP_VIEW;
44 }
45
46 private transient Map<BasicQuery, JRadioButton> rbQueries;
47 private transient Map<BasicQuery, JMultilineLabel> lblQueries;
48 private JCheckBox cbMyChangesetsOnly;
49
50 protected JPanel buildQueriesPanel() {
51 JPanel pnl = new JPanel(new GridBagLayout());
52
53 ButtonGroup bgQueries = new ButtonGroup();
54 rbQueries = new EnumMap<>(BasicQuery.class);
55 lblQueries = new EnumMap<>(BasicQuery.class);
56 SelectQueryHandler selectedQueryHandler = new SelectQueryHandler();
57 for (BasicQuery q: BasicQuery.values()) {
58 JRadioButton rb = new JRadioButton();
59 rb.addItemListener(selectedQueryHandler);
60 rbQueries.put(q, rb);
61 bgQueries.add(rb);
62 lblQueries.put(q, new JMultilineLabel(""));
63 }
64
65 GridBagConstraints gc = new GridBagConstraints();
66 // -- most recent changes
67 gc.fill = GridBagConstraints.NONE;
68 gc.anchor = GridBagConstraints.NORTHWEST;
69 gc.insets = new Insets(0, 0, 5, 3);
70 pnl.add(rbQueries.get(BasicQuery.MOST_RECENT_CHANGESETS), gc);
71
72 gc.gridx = 1;
73 gc.fill = GridBagConstraints.HORIZONTAL;
74 gc.weightx = 1.0;
75 pnl.add(lblQueries.get(BasicQuery.MOST_RECENT_CHANGESETS), gc);
76
77 // -- most recent changes
78 gc.gridx = 0;
79 gc.gridy = 1;
80 gc.fill = GridBagConstraints.NONE;
81 gc.weightx = 0.0;
82 pnl.add(rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS), gc);
83
84 gc.gridx = 1;
85 gc.fill = GridBagConstraints.HORIZONTAL;
86 gc.weightx = 1.0;
87 pnl.add(lblQueries.get(BasicQuery.MY_OPEN_CHANGESETS), gc);
88
89 // -- changesets in map view
90 gc.gridx = 0;
91 gc.gridy = 2;
92 gc.fill = GridBagConstraints.NONE;
93 gc.weightx = 0.0;
94 pnl.add(rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW), gc);
95
96 gc.gridx = 1;
97 gc.fill = GridBagConstraints.HORIZONTAL;
98 gc.weightx = 1.0;
99 pnl.add(lblQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW), gc);
100
101 // -- checkbox my changesets only
102 gc.gridx = 0;
103 gc.gridy = 3;
104 gc.gridwidth = 2;
105 gc.insets = new Insets(5, 0, 3, 3);
106 gc.fill = GridBagConstraints.HORIZONTAL;
107 gc.weightx = 1.0;
108 cbMyChangesetsOnly = new JCheckBox(tr("Download my changesets only"));
109 pnl.add(cbMyChangesetsOnly, gc);
110 cbMyChangesetsOnly.setToolTipText(
111 tr("<html>Select to restrict the query to your changesets only.<br>Unselect to include all changesets in the query.</html>"));
112
113 // grab remaining space
114 gc.gridx = 0;
115 gc.gridy = 4;
116 gc.gridwidth = 2;
117 gc.insets = new Insets(5, 0, 3, 3);
118 gc.fill = GridBagConstraints.BOTH;
119 gc.weightx = 1.0;
120 gc.weighty = 1.0;
121 pnl.add(new JPanel(), gc);
122
123 return pnl;
124 }
125
126 protected JPanel buildInfoPanel() {
127 HtmlPanel pnlInfos = new HtmlPanel();
128 pnlInfos.setText(tr("<html>Please select one the following <strong>standard queries</strong>."
129 + "Select <strong>Download my changesets only</strong>"
130 + " if you only want to download changesets created by yourself.<br>"
131 + "Note that JOSM will download max. 100 changesets.</html>")
132 );
133 return pnlInfos;
134 }
135
136 protected final void build() {
137 setLayout(new BorderLayout(0, 5));
138 setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
139 add(buildInfoPanel(), BorderLayout.NORTH);
140 add(buildQueriesPanel(), BorderLayout.CENTER);
141 }
142
143 /**
144 * Constructs a new {@code BasicChangesetQueryPanel}.
145 */
146 public BasicChangesetQueryPanel() {
147 build();
148 }
149
150 /**
151 * Initializes the panel.
152 */
153 public void init() {
154 JMultilineLabel lbl = lblQueries.get(BasicQuery.MOST_RECENT_CHANGESETS);
155 lbl.setText(tr("<html>Download the latest changesets</html>"));
156
157 // query for open changesets only possible if we have a current user which is at least
158 // partially identified
159 lbl = lblQueries.get(BasicQuery.MY_OPEN_CHANGESETS);
160 if (JosmUserIdentityManager.getInstance().isAnonymous()) {
161 rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(false);
162 lbl.setText(tr("<html>Download my open changesets<br><em>Disabled. " +
163 "Please enter your OSM user name in the preferences first.</em></html>"));
164 } else {
165 rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(true);
166 lbl.setText(tr("<html>Download my open changesets</html>"));
167 }
168
169 // query for changesets in the current map view only if there *is* a current map view
170 lbl = lblQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW);
171 if (!MainApplication.isDisplayingMapView()) {
172 rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(false);
173 lbl.setText(tr("<html>Download changesets in the current map view.<br><em>Disabled. " +
174 "There is currently no map view active.</em></html>"));
175 } else {
176 rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(true);
177 lbl.setText(tr("<html>Download changesets in the current map view</html>"));
178 }
179
180 restoreFromPreferences();
181 }
182
183 /**
184 * Remember settings in preferences.
185 */
186 public void rememberInPreferences() {
187 BasicQuery q = getSelectedQuery();
188 if (q == null) {
189 Main.pref.put("changeset-query.basic.query", null);
190 } else {
191 Main.pref.put("changeset-query.basic.query", q.toString());
192 }
193 Main.pref.put("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
194 }
195
196 /**
197 * Restore settings from preferences.
198 */
199 public void restoreFromPreferences() {
200 BasicQuery q;
201 String value = Main.pref.get("changeset-query.basic.query", null);
202 if (value == null) {
203 q = BasicQuery.MOST_RECENT_CHANGESETS;
204 } else {
205 try {
206 q = BasicQuery.valueOf(BasicQuery.class, value);
207 } catch (IllegalArgumentException e) {
208 Logging.log(Logging.LEVEL_WARN, tr("Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default query.",
209 "changeset-query.basic.query", value), e);
210 q = BasicQuery.MOST_RECENT_CHANGESETS;
211 }
212 }
213 rbQueries.get(q).setSelected(true);
214 boolean mineOnly = Main.pref.getBoolean("changeset-query.basic.my-changesets-only", false);
215 mineOnly = mineOnly || q.equals(BasicQuery.MY_OPEN_CHANGESETS);
216 cbMyChangesetsOnly.setSelected(mineOnly);
217 }
218
219 protected BasicQuery getSelectedQuery() {
220 for (BasicQuery q : BasicQuery.values()) {
221 if (rbQueries.get(q).isSelected())
222 return q;
223 }
224 return null;
225 }
226
227 /**
228 * Builds the changeset query.
229 * @return the changeset query
230 */
231 public ChangesetQuery buildChangesetQuery() {
232 BasicQuery q = getSelectedQuery();
233 ChangesetQuery query = new ChangesetQuery();
234 JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
235 if (q == null)
236 return query;
237 switch(q) {
238 case MOST_RECENT_CHANGESETS:
239 break;
240 case MY_OPEN_CHANGESETS:
241 query = query.beingOpen(true);
242 break;
243 case CHANGESETS_IN_MAP_VIEW:
244 MapView mapView = MainApplication.getMap().mapView;
245 Bounds b = mapView.getLatLonBounds(mapView.getBounds());
246 query = query.inBbox(b);
247 break;
248 }
249
250 if (cbMyChangesetsOnly.isSelected()) {
251 if (im.isPartiallyIdentified()) {
252 query = query.forUser(im.getUserName());
253 } else if (im.isFullyIdentified()) {
254 query = query.forUser(im.getUserId()).beingOpen(true);
255 } else
256 // anonymous -- can happen with a fresh config.
257 throw new IllegalStateException(tr("Cannot create changeset query for open changesets of anonymous user"));
258 }
259
260 return query;
261 }
262
263 /**
264 * Responds to changes in the selected query
265 */
266 class SelectQueryHandler implements ItemListener {
267 @Override
268 public void itemStateChanged(ItemEvent e) {
269 BasicQuery q = getSelectedQuery();
270 if (q == null) return;
271 if (q.equals(BasicQuery.MY_OPEN_CHANGESETS)) {
272 cbMyChangesetsOnly.setSelected(true);
273 cbMyChangesetsOnly.setEnabled(false);
274 } else {
275 if (!cbMyChangesetsOnly.isEnabled()) {
276 cbMyChangesetsOnly.setEnabled(true);
277 }
278 }
279 }
280 }
281}
Note: See TracBrowser for help on using the repository browser.