package authoritymanager.client;

import java.util.Vector;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Panel;

public class AddButton extends Button {
	public boolean isCurrent ;
	private Vector<AddWidget> children ;
	private AddWidget addWidget ;
	
	public AddButton(AddWidget addWidget, Vector<AddWidget> children) {
		super() ;
		SetCurrent(true) ;
		this.children = children ;
		this.addWidget = addWidget ;
		
		addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				AddButton button = (AddButton) event.getSource() ;
				AddWidget curWidget = button.GetWidget() ;
				Vector<AddWidget> curChildren = button.GetChildren() ;
				FlexTable table = (FlexTable) button.getParent() ;
				
				if (button.IsCurrent()) {
					button.SetCurrent(false) ;					
					AddWidget addChild = new AddWidget(curWidget.GetView(), curWidget.GetConfiguration()) ;
					curChildren.add(addChild) ;
					int curRow = table.getRowCount() ;
					table.setWidget(curRow, 0, addChild.getWidget()) ;
					table.setWidget(curRow, 1, new AddButton(addChild, curChildren)) ;
					curWidget.Disable() ;
				}
				else {
					curChildren.remove(curWidget) ;
				
					for (int iRow = 0 ; iRow < table.getRowCount() ; iRow ++) {
						if (table.getWidget(iRow, 1) == button) {
							table.removeRow(iRow) ;
							break ;
						}
					}
				}
			}
		}) ;
	}
	
	public AddWidget GetWidget() {
		return addWidget ;
	}
	public void SetCurrent(boolean isCurrent) {
		this.isCurrent = isCurrent ;
		if (isCurrent) {
			this.setHTML("<SMALL>+</SMALL>") ;
		}
		else {
			this.setHTML("<SMALL>-</SMALL>") ;
		}
	}
	public boolean IsCurrent() {
		return this.isCurrent ;
	}
	
	public Vector<AddWidget> GetChildren() {
		return this.children ;
	}

}
