From a37596f9465a9d5d69eb6f3181775e4c5f588401 Mon Sep 17 00:00:00 2001 From: Luca Keidel <info@lucakeidel.de> Date: Fri, 8 Jul 2016 23:48:15 +0200 Subject: [PATCH] Added a status bar showing wallet information when a node is clicked --- .../configurations/GephiConfiguration.java | 24 ++++++++++++- .../java/fucoin/gui/gephi/GraphWindow.java | 34 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/main/java/fucoin/configurations/GephiConfiguration.java b/src/main/java/fucoin/configurations/GephiConfiguration.java index 0e035f1..1465998 100644 --- a/src/main/java/fucoin/configurations/GephiConfiguration.java +++ b/src/main/java/fucoin/configurations/GephiConfiguration.java @@ -1,15 +1,26 @@ package fucoin.configurations; +import akka.actor.ActorRef; +import akka.pattern.Patterns; +import akka.util.Timeout; +import fucoin.actions.transaction.ActionGetAmount; +import fucoin.actions.transaction.ActionGetAmountAnswer; import fucoin.configurations.internal.ConfigurationName; import fucoin.configurations.internal.GephiLoader; import fucoin.gui.gephi.GraphWindow; import org.gephi.graph.api.Graph; +import scala.concurrent.Await; +import scala.concurrent.Future; +import scala.concurrent.duration.Duration; import java.io.FileNotFoundException; import java.net.URISyntaxException; @ConfigurationName("Gephi Test Configuration") public class GephiConfiguration extends AbstractConfiguration { + + private Timeout timeout = new Timeout(Duration.create(10, "seconds")); + @Override public void run() { initSupervisor(); @@ -27,7 +38,18 @@ public class GephiConfiguration extends AbstractConfiguration { createOverlayNetwork(g); GraphWindow graphWindow = new GraphWindow(); - graphWindow.addNodeClickHandler((node, event) -> System.out.println(node.getLabel() + " wurde angeklickt!")); + graphWindow.addNodeClickHandler((node, event) -> { + ActorRef wallet = walletByName(node.getLabel()); + + Future<Object> future = Patterns.ask(wallet, new ActionGetAmount(), timeout); + ActionGetAmountAnswer answer = null; + try { + answer = (ActionGetAmountAnswer) Await.result(future, timeout.duration()); + } catch (Exception e) { + System.err.println("An error occured while fetching the wallet info: "+e.getMessage()); + } + graphWindow.setInfobarText(node.getLabel()+" has "+answer.amount+" FUCs"); + }); graphWindow.setVisible(true); } diff --git a/src/main/java/fucoin/gui/gephi/GraphWindow.java b/src/main/java/fucoin/gui/gephi/GraphWindow.java index d4e1a20..954f6d7 100644 --- a/src/main/java/fucoin/gui/gephi/GraphWindow.java +++ b/src/main/java/fucoin/gui/gephi/GraphWindow.java @@ -19,6 +19,8 @@ public class GraphWindow extends JFrame implements NodeMouseListener { private final PreviewController previewController; private final PreviewSketch previewSketch; + private JLabel infobarText; + public GraphWindow() { super(); @@ -41,8 +43,36 @@ public class GraphWindow extends JFrame implements NodeMouseListener { G2DTarget target = (G2DTarget) previewController.getRenderTarget(RenderTarget.G2D_TARGET); previewSketch = new PreviewSketch(target, isRetina()); + infobarText = new JLabel("Click on a node to see further information.", SwingConstants.LEFT); + this.add(previewSketch, BorderLayout.CENTER); + JPanel infobar = new JPanel(new BorderLayout()); + infobar.add(infobarText, BorderLayout.WEST); + + JPanel zoomOptions = new JPanel(new FlowLayout(FlowLayout.CENTER, 5,2)); + zoomOptions.add(new JLabel("Zoom: ")); + + Dimension zoomBtnSize = new Dimension(20,20); + + JButton minusButton = new JButton("-"); + minusButton.setPreferredSize(zoomBtnSize); + minusButton.addActionListener(e -> previewSketch.zoomMinus()); + zoomOptions.add(minusButton); + + JButton resetButton = new JButton("0"); + resetButton.setPreferredSize(zoomBtnSize); + resetButton.addActionListener(e -> previewSketch.resetZoom()); + zoomOptions.add(resetButton); + + JButton plusButton = new JButton("+"); + plusButton.setPreferredSize(zoomBtnSize); + plusButton.addActionListener(e -> previewSketch.zoomPlus()); + zoomOptions.add(plusButton); + + infobar.add(zoomOptions, BorderLayout.EAST); + this.add(infobar, BorderLayout.SOUTH); + previewController.refreshPreview(); previewSketch.resetZoom(); @@ -86,4 +116,8 @@ public class GraphWindow extends JFrame implements NodeMouseListener { previewController.refreshPreview(); previewSketch.repaint(); } + + public void setInfobarText(String text){ + SwingUtilities.invokeLater(() -> infobarText.setText(text)); + } } -- GitLab