package com.project.website.canvas.client.shared.widgets;
import java.util.ArrayList;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.Widget;
public class ToggleButtonPanel extends FlowPanel
{
private ArrayList<ToggleButton> _buttonList = new ArrayList<ToggleButton>();
private boolean _isDuringChangeHandling = false;
private ToggleButton _defaultButton = null;
@Override
public void add(Widget w) {
super.add(w);
final ToggleButton button = (ToggleButton)w;
this._buttonList.add(button);
button.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
if (false == event.getValue()) {
handleButtonUnToggled(button);
}
else {
handleButtonToggled(button);
}
}
});
}
public void setDefaultButton(ToggleButton button)
{
if (false == this._buttonList.contains(button))
{
throw new ButtonNotContainedOnPanelException();
}
this._defaultButton = button;
if (null != this.getActiveButton())
{
return;
}
this._defaultButton.setValue(true, true);
}
public ToggleButton getActiveButton()
{
for (ToggleButton button : this._buttonList)
{
if (button.getValue())
{
return button;
}
}
return null;
}
private void handleButtonUnToggled(ToggleButton button)
{
if (this._isDuringChangeHandling) {
return;
}
if (null == this._defaultButton) {
return;
}
this._defaultButton.setValue(true, true);
}
private void handleButtonToggled(ToggleButton button)
{
this._isDuringChangeHandling = true;
try {
for (ToggleButton otherButton : this._buttonList)
{
if (otherButton == button)
{
continue;
}
otherButton.setValue(false, true);
}
}
finally {
this._isDuringChangeHandling = false;
}
}
}