package gui.interfaces;
import gui.ColoredToggleButton;
import op.tools.SYSConst;
import op.tools.SYSTools;
import org.apache.commons.collections.CollectionUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashSet;
/**
* Created by tloehr on 23.06.15.
*/
public class YesNoToggleButton extends JPanel implements ItemSelectable {
protected HashSet<ItemListener> itemListenerList = new HashSet<>();
protected ColoredToggleButton tbYes, tbNo;
public YesNoToggleButton() {
this(true);
}
public YesNoToggleButton(boolean selectYes) {
this("misc.msg.yes", "misc.msg.no", selectYes);
}
public YesNoToggleButton(String yes, String no, boolean selectYes) {
super(new GridLayout(1, 2));
tbYes = new ColoredToggleButton(SYSTools.xx(yes), SYSConst.darkgreen, UIManager.getColor("ToggleButton.background"), Color.YELLOW, Color.gray);
tbNo = new ColoredToggleButton(SYSTools.xx(no), SYSConst.darkred, UIManager.getColor("ToggleButton.background"), Color.YELLOW, Color.gray);
add(tbYes);
add(tbNo);
tbYes.setOpaque(true);
tbNo.setOpaque(true);
tbYes.addItemListener(e -> {
tbNo.setSelected(e.getStateChange() != ItemEvent.SELECTED);
broadcast(e);
});
tbNo.addItemListener(e -> {
tbYes.setSelected(e.getStateChange() != ItemEvent.SELECTED);
});
tbYes.setSelected(selectYes);
tbNo.setSelected(!selectYes);
setBorder(BorderFactory.createLineBorder(Color.black));
}
public boolean isPositiveSelected(){
return tbYes.isSelected();
}
@Override
public void setToolTipText(String text) {
tbYes.setToolTipText(text);
tbNo.setToolTipText(text);
}
@Override
public Object[] getSelectedObjects() {
return tbYes.isSelected() ? new Integer[]{JOptionPane.YES_OPTION} : new Integer[]{JOptionPane.NO_OPTION};
}
@Override
public void addItemListener(ItemListener l) {
itemListenerList.add(l);
}
@Override
public void removeItemListener(ItemListener l) {
itemListenerList.remove(l);
}
void broadcast(final ItemEvent e) {
CollectionUtils.forAllDo(itemListenerList, o -> ((ItemListener) o).itemStateChanged(e));
}
public void setSelected(boolean selected) {
tbYes.setSelected(selected);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
SYSTools.setXEnabled(this, enabled);
}
@Override
public void setFont(Font font) {
if (tbYes == null) {
super.setFont(font);
} else {
tbYes.setFont(font);
tbNo.setFont(font);
}
}
}