/*******************************************************************************
* Copyright (c) 2003-2005, 2013 Till Zoppke.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Till Zoppke - initial API and implementation
******************************************************************************/
/*
* Created on 10.04.2004
*/
package eniac.menu.action;
import java.awt.event.ActionEvent;
import javax.swing.ButtonModel;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JToggleButton;
import javax.swing.JToggleButton.ToggleButtonModel;
import eniac.util.Status;
import eniac.util.StatusListener;
/**
* @author zoppke
*/
public class ToggleAction extends EAction {
/*
* ============================ lifecycle =================================
*/
public void init() {
// create buttonModel and init selection state
Status key = (Status) getValue(STATUS_PROPERTY);
ButtonModel model = new JToggleButton.ToggleButtonModel();
model.setSelected((boolean) key.getValue());
// create button
JToggleButton button = new JToggleButton(this);
button.setText(null);
button.setModel(model);
// create menuItem
JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
item.setModel(model);
// store objects
putValue(BUTTON, button);
putValue(MODEL, model);
putValue(ITEM, item);
// add listener for status of boolean property bound to this action
key.addListener(new StatusListener() {
@Override
public void statusChanged(Status status, Object newValue) {
// value was toggeled by another party. update selection
((ToggleButtonModel) getValue(MODEL)).setSelected((boolean) newValue);
}
});
// add listener and init text
Status.LANGUAGE.addListener(new StatusListener() {
@Override
public void statusChanged(Status status, Object newValue) {
// language changed. update action values and hide text
updateText();
}
});
updateText();
}
/*
* ============================= methods ================================
*/
/**
* @param e
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
Status key = (Status) getValue(STATUS_PROPERTY);
key.setValue(((ToggleButtonModel) getValue(MODEL)).isSelected());
}
}