package org.iplantc.phyloviewer.viewer.client.ui;
import org.iplantc.phyloviewer.shared.model.IDocument;
import org.iplantc.phyloviewer.shared.model.INode;
import org.iplantc.phyloviewer.shared.render.style.IBranchStyle;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.user.client.ui.DoubleBox;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.TextBox;
public class BranchStyleWidget extends AbstractElementStyleWidget
{
private static final int LABEL_COLUMN = 0;
private static final int WIDGET_COLUMN = 1;
private static final int COLOR_ROW = 0;
private static final int WIDTH_ROW = 1;
private SingleValueChangeHandler<String> colorUpdater = new SingleValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
for(INode node : getNodes())
{
getStyle(node).getBranchStyle().setStrokeColor(event.getValue());
}
}
};
private SingleValueChangeHandler<Double> lineWidthUpdater = new SingleValueChangeHandler<Double>()
{
@Override
public void onValueChange(ValueChangeEvent<Double> event)
{
for(INode node : getNodes())
{
getStyle(node).getBranchStyle().setLineWidth(event.getValue());
}
}
};
public BranchStyleWidget(IDocument document)
{
super(document);
setText(COLOR_ROW, LABEL_COLUMN, "Branch color:");
setStrokeColorWidget(new TextBox());
setText(WIDTH_ROW, LABEL_COLUMN, "Branch width:");
setLineWidthWidget(new DoubleBox());
}
public void setStrokeColorWidget(HasValue<String> widget)
{
colorUpdater.attachTo(widget);
setWidget(COLOR_ROW, WIDGET_COLUMN, widget);
}
public void setLineWidthWidget(HasValue<Double> widget)
{
lineWidthUpdater.attachTo(widget);
setWidget(WIDTH_ROW, WIDGET_COLUMN, widget);
}
@SuppressWarnings("unchecked")
public HasValue<String> getStrokeColorWidget()
{
return (HasValue<String>)getWidget(COLOR_ROW, WIDGET_COLUMN);
}
@SuppressWarnings("unchecked")
public HasValue<Double> getLineWidthWidget()
{
return (HasValue<Double>)getWidget(WIDTH_ROW, WIDGET_COLUMN);
}
@Override
public void updateValues(INode node)
{
IBranchStyle style = getStyle(node).getBranchStyle();
String color = style.getStrokeColor();
getStrokeColorWidget().setValue(color, true);
double pointSize = style.getLineWidth();
getLineWidthWidget().setValue(pointSize, true);
}
}