/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.core.api.gui.util;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JToggleButton.ToggleButtonModel;
import org.weasis.core.api.service.AuditLog;
public abstract class ToggleButtonListener extends BasicActionState implements ActionListener {
protected ButtonModel model;
public ToggleButtonListener(ActionW action, boolean selected) {
super(action);
model = new ToggleButtonModel();
model.setSelected(selected);
model.addActionListener(this);
}
@Override
public void enableAction(boolean enabled) {
model.setEnabled(enabled);
}
@Override
public String toString() {
return action.getTitle();
}
@Override
public ActionW getActionW() {
return action;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof ButtonModel) {
actionPerformed(model.isSelected());
AuditLog.LOGGER.info("action:{} val:{}", action.cmd(), model.isSelected()); //$NON-NLS-1$
}
}
public abstract void actionPerformed(boolean selected);
public synchronized void setSelectedWithoutTriggerAction(boolean selected) {
model.setSelected(selected);
}
public synchronized void setSelected(boolean selected) {
boolean oldVal = model.isSelected();
if (oldVal != selected) {
model.setSelected(selected);
actionPerformed(selected);
AuditLog.LOGGER.info("action:{} val:{}", action.cmd(), model.isSelected()); //$NON-NLS-1$
}
}
public boolean isSelected() {
return model.isSelected();
}
@Override
public boolean registerActionState(Object c) {
if (super.registerActionState(c)) {
if (c instanceof AbstractButton) {
((AbstractButton) c).setModel(model);
}
return true;
}
return false;
}
public JCheckBoxMenuItem createUnregiteredJCheckBoxMenuItem(String text) {
final JCheckBoxMenuItem checkBoxItem = new JCheckBoxMenuItem(text, null, model.isSelected());
checkBoxItem.setModel(model);
return checkBoxItem;
}
public JCheckBox createCheckBox(String title) {
final JCheckBox check = new JCheckBox(title);
registerActionState(check);
return check;
}
public JCheckBoxMenuItem createMenu(String title) {
final JCheckBoxMenuItem menu = new JCheckBoxMenuItem(title);
registerActionState(menu);
return menu;
}
}