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