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.IGlyphStyle;
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 GlyphStyleWidget extends AbstractElementStyleWidget
{
private static final int LABEL_COLUMN = 0;
private static final int WIDGET_COLUMN = 1;
private static final int FILL_COLOR_ROW = 0;
private static final int STROKE_COLOR_ROW = 1;
private static final int WIDTH_ROW = 2;
private SingleValueChangeHandler<String> fillColorUpdater = new SingleValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
for(INode node : getNodes())
{
getStyle(node).getGlyphStyle().setFillColor(event.getValue());
}
}
};
private SingleValueChangeHandler<String> strokeColorUpdater = new SingleValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
for(INode node : getNodes())
{
getStyle(node).getGlyphStyle().setStrokeColor(event.getValue());
}
}
};
private SingleValueChangeHandler<Double> lineWidthUpdater = new SingleValueChangeHandler<Double>()
{
@Override
public void onValueChange(ValueChangeEvent<Double> event)
{
for(INode node : getNodes())
{
getStyle(node).getGlyphStyle().setLineWidth(event.getValue());
}
}
};
public GlyphStyleWidget(IDocument document)
{
super(document);
setText(FILL_COLOR_ROW, LABEL_COLUMN, "Glyph fill color:");
setFillColorWidget(new TextBox());
setText(STROKE_COLOR_ROW, LABEL_COLUMN, "Glyph stroke color:");
setStrokeColorWidget(new TextBox());
setText(WIDTH_ROW, LABEL_COLUMN, "Glyph outline width:");
setLineWidthWidget(new DoubleBox());
}
public void setFillColorWidget(HasValue<String> widget)
{
fillColorUpdater.attachTo(widget);
setWidget(FILL_COLOR_ROW, WIDGET_COLUMN, widget);
}
public void setStrokeColorWidget(HasValue<String> widget)
{
strokeColorUpdater.attachTo(widget);
setWidget(STROKE_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> getFillColorWidget()
{
return (HasValue<String>)getWidget(FILL_COLOR_ROW, WIDGET_COLUMN);
}
@SuppressWarnings("unchecked")
public HasValue<String> getStrokeColorWidget()
{
return (HasValue<String>)getWidget(STROKE_COLOR_ROW, WIDGET_COLUMN);
}
@SuppressWarnings("unchecked")
public HasValue<Double> getLineWidthWidget()
{
return (HasValue<Double>)getWidget(WIDTH_ROW, WIDGET_COLUMN);
}
@Override
public void updateValues(INode node)
{
IGlyphStyle style = getStyle(node).getGlyphStyle();
String fillColor = style.getFillColor();
getFillColorWidget().setValue(fillColor, true);
String strokeColor = style.getStrokeColor();
getStrokeColorWidget().setValue(strokeColor, true);
double lineWidth = style.getLineWidth();
getLineWidthWidget().setValue(lineWidth, true);
}
}