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

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

Rework console output:

  • new log level "error"
  • Replace nearly all calls to system.out and system.err to Main.(error|warn|info|debug)
  • Remove some unnecessary debug output
  • Some messages are modified (removal of "Info", "Warning", "Error" from the message itself -> notable i18n impact but limited to console error messages not seen by the majority of users, so that's ok)
  • Property svn:eol-style set to native
File size: 9.4 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.HashMap;
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.JMultilineLabel;
24import org.openstreetmap.josm.gui.JosmUserIdentityManager;
25import org.openstreetmap.josm.gui.widgets.HtmlPanel;
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 static enum BasicQuery {
38 MOST_RECENT_CHANGESETS,
39 MY_OPEN_CHANGESETS,
40 CHANGESETS_IN_MAP_VIEW;
41 }
42
43 private ButtonGroup bgQueries;
44 private Map<BasicQuery, JRadioButton> rbQueries;
45 private Map<BasicQuery, JMultilineLabel> lblQueries;
46 private JCheckBox cbMyChangesetsOnly;
47 private HtmlPanel pnlInfos;
48
49
50 protected JPanel buildQueriesPanel() {
51 JPanel pnl = new JPanel(new GridBagLayout());
52
53 bgQueries = new ButtonGroup();
54 rbQueries = new HashMap<BasicQuery, JRadioButton>();
55 lblQueries = new HashMap<BasicQuery, JMultilineLabel>();
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 pnl.add(cbMyChangesetsOnly = new JCheckBox(tr("Download my changesets only")), gc);
109 cbMyChangesetsOnly.setToolTipText(tr("<html>Select to restrict the query to your changesets only.<br>Unselect to include all changesets in the query.</html>"));
110
111 // grab remaining space
112 gc.gridx = 0;
113 gc.gridy = 4;
114 gc.gridwidth = 2;
115 gc.insets = new Insets(5,0,3,3);
116 gc.fill = GridBagConstraints.BOTH;
117 gc.weightx = 1.0;
118 gc.weighty = 1.0;
119 pnl.add(new JPanel(), gc);
120
121 return pnl;
122 }
123
124 protected JPanel buildInfoPanel() {
125 pnlInfos = new HtmlPanel();
126 pnlInfos.setText(tr("<html>Please select one the following <strong>standard queries</strong>."
127 + "Select <strong>Download my changesets only</strong>"
128 + " if you only want to download changesets created by yourself.<br>"
129 + "Note that JOSM will download max. 100 changesets.</html>")
130 );
131 return pnlInfos;
132 }
133
134 protected void build() {
135 setLayout(new BorderLayout(0,5));
136 setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
137 add(buildInfoPanel(), BorderLayout.NORTH);
138 add(buildQueriesPanel(), BorderLayout.CENTER);
139 }
140
141 public BasicChangesetQueryPanel() {
142 build();
143 }
144
145 public void init() {
146 JMultilineLabel lbl = lblQueries.get(BasicQuery.MOST_RECENT_CHANGESETS);
147 lbl.setText(tr("<html>Download the latest changesets</html>"));
148
149 // query for open changesets only possible if we have a current user which is at least
150 // partially identified
151 lbl = lblQueries.get(BasicQuery.MY_OPEN_CHANGESETS);
152 if (JosmUserIdentityManager.getInstance().isAnonymous()) {
153 rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(false);
154 lbl.setText(tr("<html>Download my open changesets<br><em>Disabled. Please enter your OSM user name in the preferences first.</em></html>"));
155 } else {
156 rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(true);
157 lbl.setText(tr("<html>Download my open changesets</html>"));
158 }
159
160 // query for changesets in the current map view only if there *is* a current
161 // map view
162 lbl = lblQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW);
163 if (Main.map == null || Main.map.mapView == null) {
164 rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(false);
165 lbl.setText(tr("<html>Download changesets in the current map view.<br><em>Disabled. There is currently no map view active.</em></html>"));
166 } else {
167 rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(true);
168 lbl.setText(tr("<html>Download changesets in the current map view</html>"));
169 }
170
171 restoreFromPreferences();
172 }
173
174 public void rememberInPreferences() {
175 BasicQuery q = getSelectedQuery();
176 if (q == null) {
177 Main.pref.put("changeset-query.basic.query", null);
178 } else {
179 Main.pref.put("changeset-query.basic.query", q.toString());
180 }
181 Main.pref.put("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
182 }
183
184 public void restoreFromPreferences() {
185 BasicQuery q;
186 String value = Main.pref.get("changeset-query.basic.query", null);
187 if (value == null) {
188 q = BasicQuery.MOST_RECENT_CHANGESETS;
189 } else {
190 try {
191 q = BasicQuery.valueOf(BasicQuery.class, value);
192 } catch(IllegalArgumentException e) {
193 Main.warn(tr("Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default query.","changeset-query.basic.query", value));
194 q = BasicQuery.MOST_RECENT_CHANGESETS;
195 }
196 }
197 rbQueries.get(q).setSelected(true);
198 boolean mineOnly = Main.pref.getBoolean("changeset-query.basic.my-changesets-only", false);
199 mineOnly = mineOnly || q.equals(BasicQuery.MY_OPEN_CHANGESETS);
200 cbMyChangesetsOnly.setSelected(mineOnly);
201 }
202
203 protected BasicQuery getSelectedQuery() {
204 for (BasicQuery q : BasicQuery.values()) {
205 if (rbQueries.get(q).isSelected())
206 return q;
207 }
208 return null;
209 }
210
211 public ChangesetQuery buildChangesetQuery() {
212 BasicQuery q = getSelectedQuery();
213 ChangesetQuery query = new ChangesetQuery();
214 JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
215 if (q == null)
216 return query;
217 switch(q) {
218 case MOST_RECENT_CHANGESETS:
219 break;
220 case MY_OPEN_CHANGESETS:
221 query = query.beingOpen(true);
222 break;
223 case CHANGESETS_IN_MAP_VIEW:
224 Bounds b = Main.map.mapView.getLatLonBounds(Main.map.mapView.getBounds());
225 query = query.inBbox(b);
226 break;
227 }
228
229 if (cbMyChangesetsOnly.isSelected()) {
230 if (im.isPartiallyIdentified()) {
231 query = query.forUser(im.getUserName());
232 } else if (im.isFullyIdentified()) {
233 query = query.forUser(im.getUserId()).beingOpen(true);
234 } else
235 // anonymous -- can happen with a fresh config.
236 throw new IllegalStateException(tr("Cannot create changeset query for open changesets of anonymous user"));
237 }
238
239 return query;
240 }
241
242 /**
243 * Responds to changes in the selected query
244 *
245 */
246 class SelectQueryHandler implements ItemListener {
247 @Override
248 public void itemStateChanged(ItemEvent e) {
249 BasicQuery q = getSelectedQuery();
250 if (q == null) return;
251 if (q.equals(BasicQuery.MY_OPEN_CHANGESETS)) {
252 cbMyChangesetsOnly.setSelected(true);
253 cbMyChangesetsOnly.setEnabled(false);
254 } else {
255 if (! cbMyChangesetsOnly.isEnabled()) {
256 cbMyChangesetsOnly.setEnabled(true);
257 }
258 }
259 }
260 }
261}
Note: See TracBrowser for help on using the repository browser.