Commit 6bd92206 authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

Visualization updates

- configurable refresh interval
- configurable visibility of inactive nodeInfo nodes
- fixes for optional simCtrl-panel (right)
parent 096c3f44
...@@ -82,6 +82,7 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointCom ...@@ -82,6 +82,7 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointCom
import de.tud.kom.p2psim.impl.util.NotSupportedException; import de.tud.kom.p2psim.impl.util.NotSupportedException;
import de.tudarmstadt.maki.simonstrator.api.Binder; import de.tudarmstadt.maki.simonstrator.api.Binder;
import de.tudarmstadt.maki.simonstrator.api.Host; import de.tudarmstadt.maki.simonstrator.api.Host;
import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID; import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.Location;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.LocationListener; import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.LocationListener;
...@@ -119,6 +120,8 @@ public class VisualizationTopologyView extends JFrame ...@@ -119,6 +120,8 @@ public class VisualizationTopologyView extends JFrame
public static final Font FONT_TINY = new Font("SansSerif", Font.PLAIN, 7); public static final Font FONT_TINY = new Font("SansSerif", Font.PLAIN, 7);
public static final Font FONT_MEDIUM = new Font("SansSerif", Font.PLAIN, 9); public static final Font FONT_MEDIUM = new Font("SansSerif", Font.PLAIN, 9);
public static int REDRAW_INTERVAL_MS = 250;
private ComponentVisManager visManager; private ComponentVisManager visManager;
...@@ -193,7 +196,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -193,7 +196,7 @@ public class VisualizationTopologyView extends JFrame
timer.addActionListener(new ActionListener() { timer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
worldPanel.invalidate(); worldPanel.invalidate();
timer.setDelay(250); timer.setDelay(REDRAW_INTERVAL_MS);
} }
}); });
timer.start(); timer.start();
...@@ -326,15 +329,20 @@ public class VisualizationTopologyView extends JFrame ...@@ -326,15 +329,20 @@ public class VisualizationTopologyView extends JFrame
* @author bjoern * @author bjoern
* @version 1.0, Jul 5, 2016 * @version 1.0, Jul 5, 2016
*/ */
private static class NodeInformation implements LocationListener { public static class VisNodeInformation implements LocationListener {
public Point2D position; public Point2D position;
public boolean clicked = false; public boolean clicked = false;
/**
* No longer react to mouse clicks etc.
*/
public boolean disableClickListener = false;
public final long hostId; public final long hostId;
public NodeInformation(TopologyComponent comp) { public VisNodeInformation(TopologyComponent comp) {
this.hostId = comp.getHost().getId().value(); this.hostId = comp.getHost().getId().value();
this.position = comp.getRealPosition().asPoint(); this.position = comp.getRealPosition().asPoint();
} }
...@@ -356,7 +364,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -356,7 +364,7 @@ public class VisualizationTopologyView extends JFrame
*/ */
protected class WorldPanel extends JLayeredPane { protected class WorldPanel extends JLayeredPane {
protected HashMap<INodeID, NodeInformation> nodeInformation = new HashMap<INodeID, NodeInformation>(); protected HashMap<INodeID, VisNodeInformation> nodeInformation = new HashMap<INodeID, VisNodeInformation>();
protected final static int PADDING = 16; protected final static int PADDING = 16;
...@@ -373,7 +381,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -373,7 +381,7 @@ public class VisualizationTopologyView extends JFrame
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
boolean turnedSomeoneOff = false; boolean turnedSomeoneOff = false;
for (NodeInformation node : nodeInformation.values()) { for (VisNodeInformation node : nodeInformation.values()) {
// Make it easier to turn things off. // Make it easier to turn things off.
if (node.clicked && node.position if (node.clicked && node.position
.distance(e.getPoint()) < PADDING + 2) { .distance(e.getPoint()) < PADDING + 2) {
...@@ -386,7 +394,10 @@ public class VisualizationTopologyView extends JFrame ...@@ -386,7 +394,10 @@ public class VisualizationTopologyView extends JFrame
} }
if (!turnedSomeoneOff) { if (!turnedSomeoneOff) {
// Turn sth on (limit to one node) // Turn sth on (limit to one node)
for (NodeInformation node : nodeInformation.values()) { for (VisNodeInformation node : nodeInformation.values()) {
if (node.disableClickListener) {
continue;
}
if (!node.clicked && node.position if (!node.clicked && node.position
.distance(e.getPoint()) < PADDING) { .distance(e.getPoint()) < PADDING) {
node.clicked = !node.clicked; node.clicked = !node.clicked;
...@@ -404,7 +415,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -404,7 +415,7 @@ public class VisualizationTopologyView extends JFrame
public void addTopologyComponent(TopologyComponent comp) { public void addTopologyComponent(TopologyComponent comp) {
if (!nodeInformation.containsKey(comp.getHost().getId())) { if (!nodeInformation.containsKey(comp.getHost().getId())) {
NodeInformation tVis = new NodeInformation(comp); VisNodeInformation tVis = new VisNodeInformation(comp);
comp.requestLocationUpdates(null, tVis); comp.requestLocationUpdates(null, tVis);
nodeInformation.put(comp.getHost().getId(), tVis); nodeInformation.put(comp.getHost().getId(), tVis);
} }
...@@ -427,7 +438,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -427,7 +438,7 @@ public class VisualizationTopologyView extends JFrame
} }
private void paintNodes(Graphics2D g2) { private void paintNodes(Graphics2D g2) {
for (NodeInformation node : nodeInformation.values()) { for (VisNodeInformation node : nodeInformation.values()) {
if (node.clicked) { if (node.clicked) {
g2.setColor(Color.MAGENTA); g2.setColor(Color.MAGENTA);
g2.fillOval((int) node.position.getX() - PADDING, g2.fillOval((int) node.position.getX() - PADDING,
...@@ -462,6 +473,15 @@ public class VisualizationTopologyView extends JFrame ...@@ -462,6 +473,15 @@ public class VisualizationTopologyView extends JFrame
System.err.println( System.err.println(
"The VisualizationTopologyView does no longer require PHY to be configured!"); "The VisualizationTopologyView does no longer require PHY to be configured!");
} }
/**
* Interval between redraw-operations of the visualization.
* Lower interval = smoother visualizations but higher resource demands.
* @param redrawInterval
*/
public void setRedrawInterval(long redrawInterval) {
VisualizationTopologyView.REDRAW_INTERVAL_MS = (int)(redrawInterval/Time.MILLISECOND);
}
/** /**
* This component allows the injection of JComponents into the visualization * This component allows the injection of JComponents into the visualization
...@@ -534,6 +554,10 @@ public class VisualizationTopologyView extends JFrame ...@@ -534,6 +554,10 @@ public class VisualizationTopologyView extends JFrame
listener.onHostClick(hostid, isActive); listener.onHostClick(hostid, isActive);
} }
} }
public static VisNodeInformation getNodeInformation(INodeID hostId) {
return worldPanel.nodeInformation.get(hostId);
}
protected static void setVariables(VisualizationTopologyView view, protected static void setVariables(VisualizationTopologyView view,
ComponentVisManager visManager, WorldPanel worldPanel, ComponentVisManager visManager, WorldPanel worldPanel,
...@@ -769,6 +793,7 @@ public class VisualizationTopologyView extends JFrame ...@@ -769,6 +793,7 @@ public class VisualizationTopologyView extends JFrame
public static void invalidate() { public static void invalidate() {
worldPanel.invalidate(); worldPanel.invalidate();
view.splitPane.revalidate();
} }
public static void addDisplayString(DisplayString str) { public static void addDisplayString(DisplayString str) {
......
...@@ -36,6 +36,7 @@ import javax.swing.event.ChangeListener; ...@@ -36,6 +36,7 @@ import javax.swing.event.ChangeListener;
import de.tud.kom.p2psim.api.common.SimHost; import de.tud.kom.p2psim.api.common.SimHost;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisNodeInformation;
import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector; import de.tud.kom.p2psim.impl.topology.views.VisualizationTopologyView.VisualizationInjector;
import de.tud.kom.p2psim.impl.topology.views.visualization.ui.VisualizationComponent; import de.tud.kom.p2psim.impl.topology.views.visualization.ui.VisualizationComponent;
import de.tudarmstadt.maki.simonstrator.api.Event; import de.tudarmstadt.maki.simonstrator.api.Event;
...@@ -62,6 +63,8 @@ public class NodeInfoComponentVis extends JComponent ...@@ -62,6 +63,8 @@ public class NodeInfoComponentVis extends JComponent
private JMenu menu = new JMenu("Node Information"); private JMenu menu = new JMenu("Node Information");
protected boolean[] activeLayers = null; protected boolean[] activeLayers = null;
boolean hideInactiveNodes = false;
public <T extends HostComponent> NodeInfoComponentVis( public <T extends HostComponent> NodeInfoComponentVis(
final Class<T> componentClass) { final Class<T> componentClass) {
...@@ -87,6 +90,14 @@ public class NodeInfoComponentVis extends JComponent ...@@ -87,6 +90,14 @@ public class NodeInfoComponentVis extends JComponent
} }
}, null, 0); }, null, 0);
} }
/**
* Hide rings for inactive nodes.
* @param hideOfflineNodes
*/
public void setHideInactiveNodes(boolean hideInactiveNodes) {
this.hideInactiveNodes = hideInactiveNodes;
}
@Override @Override
protected void paintComponent(Graphics g) { protected void paintComponent(Graphics g) {
...@@ -143,6 +154,8 @@ public class NodeInfoComponentVis extends JComponent ...@@ -143,6 +154,8 @@ public class NodeInfoComponentVis extends JComponent
* @version 1.0, Sep 22, 2013 * @version 1.0, Sep 22, 2013
*/ */
private class NodeVis { private class NodeVis {
public final VisNodeInformation visNodeInfo;
public final NodeInformation nodeInfo; public final NodeInformation nodeInfo;
...@@ -160,6 +173,7 @@ public class NodeInfoComponentVis extends JComponent ...@@ -160,6 +173,7 @@ public class NodeInfoComponentVis extends JComponent
this.nodeInfo = nodeInfo; this.nodeInfo = nodeInfo;
this.host = (SimHost) host; this.host = (SimHost) host;
this.loc = this.host.getTopologyComponent().getRealPosition(); this.loc = this.host.getTopologyComponent().getRealPosition();
this.visNodeInfo = VisualizationInjector.getNodeInformation(host.getId());
} }
/** /**
...@@ -191,6 +205,12 @@ public class NodeInfoComponentVis extends JComponent ...@@ -191,6 +205,12 @@ public class NodeInfoComponentVis extends JComponent
} }
public void draw(Graphics2D g2) { public void draw(Graphics2D g2) {
if (hideInactiveNodes && !nodeInfo.isActive()) {
visNodeInfo.disableClickListener = true;
return;
}
visNodeInfo.disableClickListener = false;
Point center = loc.asPoint(); Point center = loc.asPoint();
// Draw active (green) over underlay vis. // Draw active (green) over underlay vis.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment