/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.esa.snap.rcp.util; import org.esa.snap.rcp.SnapApp; import org.openide.util.WeakListeners; import org.openide.util.actions.Presenter; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.util.prefs.PreferenceChangeEvent; import java.util.prefs.PreferenceChangeListener; import java.util.prefs.Preferences; /** * An action which sets a boolean preference value. * * @author Norman */ public class BooleanPreferenceKeyAction extends AbstractAction implements PreferenceChangeListener, Presenter.Toolbar, Presenter.Menu, Presenter.Popup { private final String preferenceKey; private final boolean defaultValue; protected BooleanPreferenceKeyAction(String preferenceKey) { this(preferenceKey, false); } protected BooleanPreferenceKeyAction(String preferenceKey, boolean defaultValue) { this.preferenceKey = preferenceKey; this.defaultValue = defaultValue; Preferences preferences = SnapApp.getDefault().getPreferences(); preferences.addPreferenceChangeListener(WeakListeners.create(PreferenceChangeListener.class, this, preferences)); setSelected(getPreferenceValue()); } public String getPreferenceKey() { return preferenceKey; } public boolean isSelected() { return Boolean.TRUE.equals(getValue(SELECTED_KEY)); } public void setSelected(boolean selected) { putValue(SELECTED_KEY, selected); } @Override public void actionPerformed(ActionEvent e) { setPreferenceValue(isSelected()); } @Override public JMenuItem getMenuPresenter() { JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(this); menuItem.setIcon(null); return menuItem; } @Override public JMenuItem getPopupPresenter() { return getMenuPresenter(); } @Override public Component getToolbarPresenter() { JToggleButton toggleButton = new JToggleButton(this); toggleButton.setText(null); return toggleButton; } @Override public void preferenceChange(PreferenceChangeEvent evt) { if (getPreferenceKey().equals(evt.getKey())) { setSelected(getPreferenceValue()); } } private boolean getPreferenceValue() { return SnapApp.getDefault().getPreferences().getBoolean(getPreferenceKey(), defaultValue); } private void setPreferenceValue(boolean selected) { SnapApp.getDefault().getPreferences().putBoolean(getPreferenceKey(), selected); } }