/*
* Copyright (C) 2007 IsmAvatar <IsmAvatar@gmail.com>
*
* This file is part of LateralGM.
* LateralGM is free software and comes with ABSOLUTELY NO WARRANTY.
* See LICENSE for details.
*/
package org.lateralgm.components.impl;
import java.awt.Container;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
public class IndexButtonGroup
{
private class But
{
AbstractButton b;
int i;
But(AbstractButton b, int i)
{
this.b = b;
this.i = i;
}
}
private But bm[];
private int bs;
private ButtonGroup g = null;
private boolean bitwise;
private ActionListener a;
public IndexButtonGroup(int s, boolean exclusive, boolean bitwise, ActionListener a)
{
if (exclusive || !bitwise) g = new ButtonGroup();
bm = new But[s];
bs = 0;
this.bitwise = bitwise;
this.a = a;
}
public IndexButtonGroup(int s, boolean exclusive, boolean bitwise)
{
this(s,exclusive,bitwise,null);
}
public IndexButtonGroup(int s, boolean exclusive)
{
this(s,exclusive,true,null);
}
public IndexButtonGroup(int s)
{
this(s,true,true,null);
}
public void add(AbstractButton b, int value)
{
if (g != null) g.add(b);
bm[bs++] = new But(b,value);
if (a != null) b.addActionListener(a);
}
public void add(AbstractButton b)
{
if (bitwise)
add(b,1 << bs);
else
add(b,bs);
}
public int getValue()
{
int value = 0;
for (But b : bm)
{
if (b.b.isSelected()) value |= b.i;
}
return value;
}
public void setValue(int value)
{
for (But b : bm)
if (bitwise)
{
if ((b.i & value) != 0) b.b.setSelected(true);
}
else
{
if (b.i == value)
{
b.b.setSelected(true);
return;
}
}
}
public void populate(Container c)
{
for (But b : bm)
{
c.add(b.b);
}
}
}