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

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

fix Checkstyle issues

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