001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.changeset.query; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Color; 007import java.awt.GridBagConstraints; 008import java.awt.GridBagLayout; 009 010import javax.swing.BorderFactory; 011import javax.swing.ButtonGroup; 012import javax.swing.JPanel; 013import javax.swing.JRadioButton; 014 015import org.openstreetmap.josm.io.ChangesetQuery; 016import org.openstreetmap.josm.spi.preferences.Config; 017import org.openstreetmap.josm.tools.GBC; 018 019/** 020 * This is the panel for selecting whether the changeset query should be restricted to 021 * open or closed changesets. 022 * @since 11326 (extracted from AdvancedChangesetQueryPanel) 023 */ 024public class OpenAndCloseStateRestrictionPanel extends JPanel implements RestrictionPanel { 025 026 private static final String PREF_ROOT = "changeset-query.advanced.open-restrictions"; 027 private static final String PREF_QUERY_TYPE = PREF_ROOT + ".query-type"; 028 029 private final JRadioButton rbOpenOnly = new JRadioButton(tr("Query open changesets only")); 030 private final JRadioButton rbClosedOnly = new JRadioButton(tr("Query closed changesets only")); 031 private final JRadioButton rbBoth = new JRadioButton(tr("Query both open and closed changesets")); 032 033 /** 034 * Constructs a new {@code OpenAndCloseStateRestrictionPanel}. 035 */ 036 public OpenAndCloseStateRestrictionPanel() { 037 build(); 038 } 039 040 protected void build() { 041 setLayout(new GridBagLayout()); 042 setBorder(BorderFactory.createCompoundBorder( 043 BorderFactory.createEmptyBorder(3, 3, 3, 3), 044 BorderFactory.createCompoundBorder( 045 BorderFactory.createLineBorder(Color.GRAY), 046 BorderFactory.createEmptyBorder(5, 5, 5, 5) 047 ) 048 )); 049 GridBagConstraints gc = GBC.eol().fill(GridBagConstraints.HORIZONTAL); 050 add(rbOpenOnly, gc); 051 add(rbClosedOnly, gc); 052 add(rbBoth, gc); 053 054 ButtonGroup bgRestrictions = new ButtonGroup(); 055 bgRestrictions.add(rbBoth); 056 bgRestrictions.add(rbClosedOnly); 057 bgRestrictions.add(rbOpenOnly); 058 } 059 060 /** 061 * Initializes HMI for user input. 062 */ 063 public void startUserInput() { 064 restoreFromSettings(); 065 } 066 067 /** 068 * Sets the query restrictions on <code>query</code> for state based restrictions. 069 * @param query the query to fill 070 */ 071 @Override 072 public void fillInQuery(ChangesetQuery query) { 073 if (rbBoth.isSelected()) { 074 query.beingClosed(true); 075 query.beingOpen(true); 076 } else if (rbOpenOnly.isSelected()) { 077 query.beingOpen(true); 078 } else if (rbClosedOnly.isSelected()) { 079 query.beingClosed(true); 080 } 081 } 082 083 /** 084 * Remember settings in preferences. 085 */ 086 public void rememberSettings() { 087 if (rbBoth.isSelected()) { 088 Config.getPref().put(PREF_QUERY_TYPE, "both"); 089 } else if (rbOpenOnly.isSelected()) { 090 Config.getPref().put(PREF_QUERY_TYPE, "open"); 091 } else if (rbClosedOnly.isSelected()) { 092 Config.getPref().put(PREF_QUERY_TYPE, "closed"); 093 } 094 } 095 096 /** 097 * Restore settings from preferences. 098 */ 099 public void restoreFromSettings() { 100 String v = Config.getPref().get(PREF_QUERY_TYPE, "open"); 101 rbBoth.setSelected("both".equals(v)); 102 rbOpenOnly.setSelected("open".equals(v)); 103 rbClosedOnly.setSelected("closed".equals(v)); 104 } 105 106 @Override 107 public boolean isValidChangesetQuery() { 108 return true; 109 } 110 111 @Override 112 public void displayMessageIfInvalid() { 113 // Do nothing 114 } 115}