// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.turnrestrictions.preferences; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JSeparator; import org.openstreetmap.josm.data.Preferences; import org.openstreetmap.josm.gui.widgets.HtmlPanel; import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel; import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionType; import org.openstreetmap.josm.tools.ImageProvider; /** * IconPreferencePanel allows to configure a set of road sign icons to be * used in the turnrestrictions plugin. * */ public class PreferencesPanel extends VerticallyScrollablePanel { //private static final Logger logger = Logger.getLogger(PreferencesPanel.class.getName()); private JRadioButton rbSetA; private JRadioButton rbSetB; private ButtonGroup bgIconSet; private JCheckBox cbShowViaListInBasicEditor; protected JPanel buildShowViaListInBasicEditorPanel() { JPanel pnl = new JPanel(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.HORIZONTAL; gc.weightx = 1.0; gc.gridx = 0; gc.gridy = 0; HtmlPanel msg = new HtmlPanel(); msg.setText("<html><body>" + tr("The Basic Editor can optionally display the list of via-objects " + "of a turn restriction. If enabled, one can edit them " + "in the Basic editor too. If disabled, editing of via-objects is " + "possible in the Advanced Editor only." ) + "</body></html>" ); pnl.add(msg, gc); gc.gridy++; pnl.add(cbShowViaListInBasicEditor = new JCheckBox(tr("Display and edit list of via-objects in the Basic Editor")), gc); return pnl; } /** * Builds the panel for the icon set "set-a" */ protected JPanel buildSetAPanel() { JPanel pnl = new JPanel(new GridBagLayout());; GridBagConstraints gc = new GridBagConstraints(); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.HORIZONTAL; gc.weightx = 1.0; gc.gridx = 0; gc.gridy = 0; pnl.add(rbSetA = new JRadioButton(tr("Road signs - Set A")), gc); JPanel icons = new JPanel(new FlowLayout(FlowLayout.LEFT)); for (TurnRestrictionType type: TurnRestrictionType.values()) { JLabel lbl = new JLabel(); icons.add(lbl); lbl.setIcon(ImageProvider.get("types/set-a", type.getTagValue())); } gc.gridy = 1; gc.insets = new Insets(0, 20, 0, 0); pnl.add(icons, gc); return pnl; } /** * Builds the panel for the icon set "set-b" */ protected JPanel buildSetBPanel() { JPanel pnl = new JPanel(new GridBagLayout());; GridBagConstraints gc = new GridBagConstraints(); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.HORIZONTAL; gc.weightx = 1.0; gc.gridx = 0; gc.gridy = 0; pnl.add(rbSetB = new JRadioButton(tr("Road signs - Set B")), gc); JPanel icons = new JPanel(new FlowLayout(FlowLayout.LEFT)); for (TurnRestrictionType type: TurnRestrictionType.values()) { JLabel lbl = new JLabel(); icons.add(lbl); lbl.setIcon(ImageProvider.get("types/set-b", type.getTagValue())); } gc.gridy = 1; gc.insets = new Insets(0, 20, 0, 0); pnl.add(icons, gc); return pnl; } /** * Builds the message panel at the top */ protected JPanel buildMessagePanel() { HtmlPanel pnl = new HtmlPanel(); pnl.setText( "<html><body>" + tr("Please select the set of road sign icons to be used in the plugin.") + "</body></html>" ); return pnl; } /** * Builds the UI */ protected void build() { setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.anchor = GridBagConstraints.NORTHWEST; gc.fill = GridBagConstraints.HORIZONTAL; gc.weightx = 1.0; gc.gridx = 0; gc.gridy = 0; add(buildMessagePanel(), gc); gc.gridy++; add(buildSetAPanel(), gc); gc.gridy++; add(buildSetBPanel(), gc); gc.gridy++; add(new JSeparator(), gc); gc.gridy++; add(buildShowViaListInBasicEditorPanel(), gc); gc.gridy++; add(new JSeparator(), gc); gc.gridy++; // filler - just grab remaining space gc.gridy++; gc.fill = GridBagConstraints.BOTH; gc.weighty = 1.0; add(new JPanel(), gc); bgIconSet = new ButtonGroup(); bgIconSet.add(rbSetA); bgIconSet.add(rbSetB); setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); } /** * Initializes the UI from the current settings in the JOSM preferences * {@code prefs} * * @param prefs the preferences */ public void initFromPreferences(Preferences prefs) { String set = prefs.get(PreferenceKeys.ROAD_SIGNS, "set-a"); if (!set.equals("set-a") && !set.equals("set-b")) { System.out.println( tr("Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. Assuming the default value ''set-a''.", PreferenceKeys.ROAD_SIGNS, set)); set = "set-a"; } if (set.equals("set-a")) { rbSetA.setSelected(true); } else { rbSetB.setSelected(true); } boolean b = prefs.getBoolean(PreferenceKeys.SHOW_VIAS_IN_BASIC_EDITOR, false); cbShowViaListInBasicEditor.setSelected(b); } /** * Saves the current settings to the JOSM preferences {@code prefs}. * * @param prefs the preferences */ public void saveToPreferences(Preferences prefs) { prefs.put(PreferenceKeys.ROAD_SIGNS, rbSetA.isSelected() ? "set-a" : "set-b"); prefs.put(PreferenceKeys.SHOW_VIAS_IN_BASIC_EDITOR, cbShowViaListInBasicEditor.isSelected()); } public PreferencesPanel() { build(); } }