/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.report.panels.model;
import cli_fmw.main.ClipsException;
import cli_fmw.main.ContentStateListener;
import cli_fmw.utils.MessageBox;
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JCheckBox;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
/**
*
* @param <T>
* @author finder
*/
public abstract class ObjectChekBoxModel<T> implements ContentStateListener, ButtonModel{
static final long serialVersionUID = 1L;
ButtonGroup group;
T object;
boolean pressed;
boolean enabled = true;
boolean armed;
boolean rollover;
int mnemonic;
private String actionCommand;
protected EventListenerList listenerList = new EventListenerList();
boolean oldSelected;
public ObjectChekBoxModel(final JCheckBox box, T object) {
this.object = object;
box.setModel(ObjectChekBoxModel.this);
/*EventQueue.invokeLater(new Runnable() {
public void run() {
box.setModel(ObjectChekBoxModel.this);
}
});*/
}
/**
* {@inheritDoc}
*/
@Override
public boolean isArmed() {
return armed;
}
/**
* {@inheritDoc}
*/
@Override
public void setArmed(boolean b) {
if ((isArmed() == b) || !isEnabled()) {
return;
}
armed = b;
fireChange();
}
/**
* {@inheritDoc}
*/
@Override
public boolean isSelected() {
try {
if (isEnabledSelecionViseble()){
return isSelectedImp();
}
else{
return false;
}
}
catch (ClipsException ex) {
MessageBox.showException(ex);
}
return false;
}
/**
* {@inheritDoc}
*/
@Override
public void setSelected(boolean b) {
if (isEnabled()){
if (this.isSelected() == b) {
return;
}
try {
setSelectedImp(b);
//fireChange();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}
abstract public boolean isSelectedImp() throws ClipsException;
abstract public void setSelectedImp(boolean val) throws ClipsException;
/**
* {@inheritDoc}
*/
@Override
public boolean isEnabled() {
return isEnabledSelecionViseble() && enabled;
}
public boolean isEnabledSelecionViseble() {
return object != null;
}
/**
* {@inheritDoc}
*/
@Override
public void setEnabled(boolean b) {
if(enabled == b) {
return;
}
enabled = b;
if (!enabled){
armed = false;
pressed = false;
}
fireChange();
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPressed() {
return pressed;
}
/**
* {@inheritDoc}
*/
@Override
public void setPressed(boolean b) {
if((isPressed() == b) || !isEnabled()) {
return;
}
pressed = b;
if(!isPressed() && isArmed()) {
setSelected(!this.isSelected());
int modifiers = 0;
AWTEvent currentEvent = EventQueue.getCurrentEvent();
if (currentEvent instanceof InputEvent) {
modifiers = ((InputEvent)currentEvent).getModifiers();
} else if (currentEvent instanceof ActionEvent) {
modifiers = ((ActionEvent)currentEvent).getModifiers();
}
fireActionPerformed(
new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
getActionCommand(),
EventQueue.getMostRecentEventTime(),
modifiers));
}
fireChange();
}
/**
* {@inheritDoc}
*/
@Override
public boolean isRollover() {
return rollover;
}
/**
* {@inheritDoc}
*/
@Override
public void setRollover(boolean b) {
if((isRollover() == b) || !isEnabled()) {
return;
}
rollover = b;
fireChange();
}
/**
* {@inheritDoc}
*/
@Override
public int getMnemonic() {
return mnemonic;
}
/**
* {@inheritDoc}
*/
@Override
public void setMnemonic(int key) {
mnemonic = key;
fireChange();
}
/**
* {@inheritDoc}
*/
@Override
public String getActionCommand() {
return actionCommand;
}
/**
* {@inheritDoc}
*/
@Override
public void setActionCommand(String actionCommand) {
this.actionCommand = actionCommand;
}
/**
* {@inheritDoc}
*/
@Override
public void setGroup(ButtonGroup group) {
this.group = group;
}
/**
* {@inheritDoc}
*/
@Override
public void addActionListener(ActionListener l) {
listenerList.add(ActionListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public void removeActionListener(ActionListener l) {
listenerList.remove(ActionListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public void addItemListener(ItemListener l) {
listenerList.add(ItemListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public void removeItemListener(ItemListener l) {
listenerList.remove(ItemListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public void removeChangeListener(ChangeListener l) {
listenerList.remove(ChangeListener.class, l);
}
/**
* {@inheritDoc}
*/
@Override
public Object[] getSelectedObjects() {
return null;
}
public T getObject() {
return object;
}
public void setObject(T object) {
if (this.object != object || object == null){
this.object = object;
contentStateChanged();
}
}
@Override
public void contentStateChanged() {
fireChange();
}
protected void fireChange(){
if (oldSelected != isSelected()){
fireItemStateChanged(isSelected()? ItemEvent.SELECTED: ItemEvent.DESELECTED);
oldSelected = isSelected();
}
fireStateChange();
}
protected void fireActionPerformed(ActionEvent ae){
for (ActionListener changeListener : listenerList.getListeners(ActionListener.class)) {
changeListener.actionPerformed(ae);
}
}
protected void fireItemStateChanged(int state){
ItemEvent e = null;
for (ItemListener changeListener : listenerList.getListeners(ItemListener.class)) {
if (e == null) {
e = new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, this, state);
}
changeListener.itemStateChanged(e);
}
}
protected void fireStateChange(){
ChangeEvent e = null;
for (ChangeListener changeListener : listenerList.getListeners(ChangeListener.class)) {
if (e == null) {
e = new ChangeEvent(this);
}
changeListener.stateChanged(e);
}
}
}