From 4edc71584724df0b5da290b9b3028e159349f6fe Mon Sep 17 00:00:00 2001 From: mikera Date: Mon, 6 May 2024 10:34:54 +0100 Subject: [PATCH] GUI updates working towards Torus swaps in wallet --- .../src/main/java/convex/core/init/Init.java | 2 +- .../convex/gui/components/BalanceLabel.java | 2 +- .../convex/gui/components/ConnectPanel.java | 2 +- .../convex/gui/components/ScrollyList.java | 7 +++++-- .../java/convex/gui/keys/KeyRingPanel.java | 18 +++++++++++++++--- .../java/convex/gui/wallet/TokenComponent.java | 3 ++- .../main/java/convex/gui/wallet/TokenInfo.java | 4 ++++ .../java/convex/gui/wallet/WalletPanel.java | 8 ++++---- .../src/main/java/convex/api/Convex.java | 4 ++-- 9 files changed, 35 insertions(+), 15 deletions(-) diff --git a/convex-core/src/main/java/convex/core/init/Init.java b/convex-core/src/main/java/convex/core/init/Init.java index f95cd1eac..877850840 100644 --- a/convex-core/src/main/java/convex/core/init/Init.java +++ b/convex-core/src/main/java/convex/core/init/Init.java @@ -379,7 +379,7 @@ private static State doCurrencyDeploy(State s, AVector row) { double cvx = cvxPrice * supply / subDivisions; - Context ctx = Context.createFake(s, DISTRIBUTION_ADDRESS); + Context ctx = Context.createFake(s, GENESIS_ADDRESS); ctx = ctx.eval(Reader .read("(do (import convex.fungible :as fun) (deploy (fun/build-token {:supply " + supply + " :decimals "+decimals+"})))")); Address addr = ctx.getResult(); diff --git a/convex-gui/src/main/java/convex/gui/components/BalanceLabel.java b/convex-gui/src/main/java/convex/gui/components/BalanceLabel.java index 7f86a5a77..50fc4d736 100644 --- a/convex-gui/src/main/java/convex/gui/components/BalanceLabel.java +++ b/convex-gui/src/main/java/convex/gui/components/BalanceLabel.java @@ -102,7 +102,7 @@ public void setBalance(AInteger a) { append(chs,c,decimalSize); } for (int i=decimals; i<9; i++) { - append(" ",balanceColour,decimalSize); + append("\u2007",balanceColour,decimalSize); } Toolkit.addPopupMenu(this, new BalanceMenu()); diff --git a/convex-gui/src/main/java/convex/gui/components/ConnectPanel.java b/convex-gui/src/main/java/convex/gui/components/ConnectPanel.java index 86a7c7bfe..f25fc79f2 100644 --- a/convex-gui/src/main/java/convex/gui/components/ConnectPanel.java +++ b/convex-gui/src/main/java/convex/gui/components/ConnectPanel.java @@ -67,7 +67,7 @@ public static Convex tryConnect(JComponent parent,String prompt) { try { String target=pan.hostField.getText(); InetSocketAddress sa=Utils.toInetSocketAddress(target); - System.err.println("Attempting connect to: "+sa); + log.info("Attempting connect to: "+sa); Convex convex=Convex.connect(sa); convex.setAddress(pan.addressField.getAddress()); diff --git a/convex-gui/src/main/java/convex/gui/components/ScrollyList.java b/convex-gui/src/main/java/convex/gui/components/ScrollyList.java index bf9b75cdf..666e41cb9 100644 --- a/convex-gui/src/main/java/convex/gui/components/ScrollyList.java +++ b/convex-gui/src/main/java/convex/gui/components/ScrollyList.java @@ -27,6 +27,8 @@ public class ScrollyList extends JScrollPane { private final ListModel model; private final ScrollablePanel listPanel = new ScrollablePanel(); + private final MigLayout listLayout; + public void refreshList() { EventQueue.invokeLater(()->{; listPanel.removeAll(); @@ -74,7 +76,8 @@ public ScrollyList(ListModel model, Function builder) { this.model = model; // this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - listPanel.setLayout(new MigLayout("wrap 1")); + listLayout=new MigLayout("wrap"); + listPanel.setLayout(listLayout); setViewportView(listPanel); getViewport().setBackground(null); @@ -84,7 +87,7 @@ public void intervalAdded(ListDataEvent e) { int start=e.getIndex0(); int last=e.getIndex1(); for (int i=start; i<=last; i++) { - listPanel.add(builder.apply(model.getElementAt(i)),"span"); + listPanel.add(builder.apply(model.getElementAt(i)),"wrap"); } } diff --git a/convex-gui/src/main/java/convex/gui/keys/KeyRingPanel.java b/convex-gui/src/main/java/convex/gui/keys/KeyRingPanel.java index 1cf159e0f..0ead0612e 100644 --- a/convex-gui/src/main/java/convex/gui/keys/KeyRingPanel.java +++ b/convex-gui/src/main/java/convex/gui/keys/KeyRingPanel.java @@ -1,6 +1,7 @@ package convex.gui.keys; import java.awt.Color; +import java.util.concurrent.CompletableFuture; import javax.swing.DefaultListModel; import javax.swing.JButton; @@ -15,9 +16,13 @@ import convex.core.crypto.AKeyPair; import convex.core.crypto.wallet.AWalletEntry; import convex.core.crypto.wallet.HotWalletEntry; +import convex.core.data.ACell; import convex.core.data.AccountKey; import convex.core.data.Address; import convex.core.data.Blob; +import convex.core.lang.RT; +import convex.core.lang.Symbols; +import convex.core.lang.ops.Special; import convex.gui.components.ActionPanel; import convex.gui.components.ScrollyList; import convex.gui.components.Toast; @@ -105,8 +110,15 @@ public static DefaultListModel getListModel() { public static AWalletEntry findWalletEntry(Convex convex) { Address a=convex.getAddress(); if (a==null) return null; - AccountKey key=convex.getAccountKey(a); - AWalletEntry we=Toolkit.getKeyRingEntry(key); - return we; + AccountKey key; + try { + CompletableFuture cf=convex.query(Special.forSymbol(Symbols.STAR_KEY)).thenApply(r->r.getValue()); + key = RT.ensureAccountKey(cf.get()); + AWalletEntry we=Toolkit.getKeyRingEntry(key); + return we; + } catch (Exception e) { + e.printStackTrace(); + return null; + } } } diff --git a/convex-gui/src/main/java/convex/gui/wallet/TokenComponent.java b/convex-gui/src/main/java/convex/gui/wallet/TokenComponent.java index 9413f33c1..90fc49465 100644 --- a/convex-gui/src/main/java/convex/gui/wallet/TokenComponent.java +++ b/convex-gui/src/main/java/convex/gui/wallet/TokenComponent.java @@ -44,7 +44,8 @@ public TokenComponent(Convex convex, TokenInfo token) { add(symLabel); balanceLabel = new BalanceLabel(); - balanceLabel.setFont(Toolkit.MONO_FONT); + balanceLabel.setDecimals(token.getDecimals()); + balanceLabel.setFont(Toolkit.MONO_FONT); balanceLabel.setBalance(0); balanceLabel.setToolTipText("Account balance for "+symbolName); add(balanceLabel,"align right"); diff --git a/convex-gui/src/main/java/convex/gui/wallet/TokenInfo.java b/convex-gui/src/main/java/convex/gui/wallet/TokenInfo.java index 61f3dccdf..b4428ad72 100644 --- a/convex-gui/src/main/java/convex/gui/wallet/TokenInfo.java +++ b/convex-gui/src/main/java/convex/gui/wallet/TokenInfo.java @@ -157,4 +157,8 @@ public static TokenInfo getMulti(Convex convex, String key) { } return null; } + + public int getDecimals() { + return decimals; + } } \ No newline at end of file diff --git a/convex-gui/src/main/java/convex/gui/wallet/WalletPanel.java b/convex-gui/src/main/java/convex/gui/wallet/WalletPanel.java index 1e7bd8397..8b5c690d0 100644 --- a/convex-gui/src/main/java/convex/gui/wallet/WalletPanel.java +++ b/convex-gui/src/main/java/convex/gui/wallet/WalletPanel.java @@ -43,7 +43,7 @@ public WalletPanel(Convex convex) { // add(new AccountChooserPanel(convex),"dock south"); ActionPanel ap=new ActionPanel(); - ap.add(new ActionButton("Track Token",0xe145,e->{ + ap.add(ActionButton.build("Track Token",0xe145,e->{ String newID=JOptionPane.showInputDialog(WalletPanel.this, "Enter Token ID"); if (newID==null) return; try { @@ -59,10 +59,10 @@ public WalletPanel(Convex convex) { } catch (Exception ex) { Toast.display(WalletPanel.this, "Error adding token: "+ex.getMessage(),Color.ORANGE); } - })); - ap.add(new ActionButton("Refresh",0xe5d5,e->{ + },"Add a token to the tracked token list")); + ap.add(ActionButton.build("Refresh",0xe5d5,e->{ list.refreshList(); - })); + },"Refresh token details and balances")); add(ap,"dock south"); ThreadUtils.runVirtual(this::updateLoop); diff --git a/convex-peer/src/main/java/convex/api/Convex.java b/convex-peer/src/main/java/convex/api/Convex.java index 604c28fce..a9c32c918 100644 --- a/convex-peer/src/main/java/convex/api/Convex.java +++ b/convex-peer/src/main/java/convex/api/Convex.java @@ -851,8 +851,8 @@ public Result querySync(ACell query, Address address, long timeoutMillis) throws result = cf.get(timeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw Utils.sneakyThrow(e); - } catch (Exception e) { - return Result.fromException(e); + } catch (ExecutionException e) { + return Result.fromException(e.getCause()); } finally { cf.cancel(true); }