
convex.gui.components.BalanceLabel Maven / Gradle / Ivy
package convex.gui.components;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.math.BigInteger;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.text.AttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import convex.core.ErrorCodes;
import convex.core.Result;
import convex.core.data.ACell;
import convex.core.data.prim.AInteger;
import convex.core.data.prim.CVMLong;
import convex.core.lang.RT;
import convex.core.text.Text;
import convex.core.util.Utils;
import convex.gui.utils.SymbolIcon;
import convex.gui.utils.Toolkit;
/**
* Component for attractive displace of coin / token balances
*/
@SuppressWarnings("serial")
public class BalanceLabel extends BaseTextPane {
protected AInteger balance;
public class BalanceMenu extends JPopupMenu {
JMenuItem copyMenuItem = new JMenuItem("Copy Value",SymbolIcon.get(0xe14d,Toolkit.SMALL_ICON_SIZE));
public BalanceMenu() {
add(copyMenuItem);
copyMenuItem.addActionListener(e->{
Toolkit.copyToClipboard(RT.toString(balance));
});
}
}
public static final Color GOLD=new Color(255,255,0);
public static final Color SILVER=new Color(200,200,230);
public static final Color BRONZE=new Color(180,120,60);
public static final Color COPPER=new Color(150,80,30);
protected int decimals=9;
private Color balanceColour=GOLD;
public BalanceLabel() {
this.setEditable(false);
this.setFocusable(false);
}
public void setBalance(long a) {
setBalance(CVMLong.create(a));
}
public void setDecimals(int decimals) {
this.decimals=decimals;
// reset balance to ensure correct display
refreshBalance();
}
private synchronized void refreshBalance() {
try {
if (balance==null) {
super.setText("- ");
return;
} else {
// Clear balance for appends
super.setText("");
}
int size=getFont().getSize();
BigInteger unit=getUnit(decimals);
BigInteger bi=balance.big();
BigInteger change=bi.remainder(unit);
BigInteger coins=bi.divide(unit);
AttributeSet attribs = new SimpleAttributeSet();
attribs=styleContext.addAttribute(attribs, StyleConstants.Alignment, StyleConstants.ALIGN_RIGHT);
attribs=styleContext.addAttribute(attribs, StyleConstants.FontFamily, getFont().getFamily());
//StyleConstants.setAlignment(attribs, StyleConstants.ALIGN_RIGHT);
//StyleConstants.setFontFamily(attribs, Font.PLAIN);
this.setParagraphAttributes(attribs, true);
String cs=Text.toFriendlyNumber(coins.longValue());
append(cs,balanceColour,size);
String ch=Text.zeroPad(change,decimals);
int decimalSize=size*2/3;
append(decimals>0?".":" ",SILVER,decimalSize);
for (int i=0; i");
} else {
setText(error.toString());
}
return;
}
if (bal instanceof AInteger) {
setBalance((AInteger)bal);
} else {
setText("");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy