package com.yoghurt.crypto.transactions.client.widget; import java.util.Collection; import com.google.gwt.dom.client.Style.Unit; import com.googlecode.gwt.crypto.bouncycastle.util.encoders.Hex; import com.googlecode.gwt.crypto.util.Str; import com.yoghurt.crypto.transactions.client.resources.R; import com.yoghurt.crypto.transactions.client.util.misc.Color; import com.yoghurt.crypto.transactions.client.util.misc.EllipsisUtil; import com.yoghurt.crypto.transactions.shared.domain.StackObject; public class StackViewer extends ContextFieldSet<StackObject> { public StackViewer() { super(new SimpleStackContextFactory()); addStyleName(R.css().panel()); } private static final int HASH_ELLIPSIS = 16; public void setStack(final Collection<StackObject> stack) { clear(); for (final StackObject entry : stack) { addField(entry); } } @Override protected Color getFieldColor(final StackObject value) { return value.getBytes().length == 1 ? R.color().stackSingle() : R.color().stackData(); } @Override protected String getFieldText(final StackObject value) { return EllipsisUtil.applyInner(Str.toString(Hex.encode(value.getBytes())).toUpperCase(), HASH_ELLIPSIS); } @Override protected ContextField<StackObject> addField(final ContextField<StackObject> field) { if(fields.size() > 1) { field.getElement().getStyle().setMarginTop(10, Unit.PX); } return super.addField(field); } }