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
import de.tud.kom.p2psim.impl.util.NotSupportedException;
import de.tudarmstadt.maki.simonstrator.api.Binder;
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.component.sensor.location.Location;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.LocationListener;
......@@ -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_MEDIUM = new Font("SansSerif", Font.PLAIN, 9);
public static int REDRAW_INTERVAL_MS = 250;
private ComponentVisManager visManager;
......@@ -193,7 +196,7 @@ public class VisualizationTopologyView extends JFrame
timer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
worldPanel.invalidate();
timer.setDelay(250);
timer.setDelay(REDRAW_INTERVAL_MS);
}
});
timer.start();
......@@ -326,15 +329,20 @@ public class VisualizationTopologyView extends JFrame
* @author bjoern
* @version 1.0, Jul 5, 2016
*/
private static class NodeInformation implements LocationListener {
public static class VisNodeInformation implements LocationListener {
public Point2D position;
public boolean clicked = false;
/**
* No longer react to mouse clicks etc.
*/
public boolean disableClickListener = false;
public final long hostId;
public NodeInformation(TopologyComponent comp) {
public VisNodeInformation(TopologyComponent comp) {
this.hostId = comp.getHost().getId().value();
this.position = comp.getRealPosition().asPoint();
}
......@@ -356,7 +364,7 @@ public class VisualizationTopologyView extends JFrame
*/
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;
......@@ -373,7 +381,7 @@ public class VisualizationTopologyView extends JFrame
@Override
public void mousePressed(MouseEvent e) {
boolean turnedSomeoneOff = false;
for (NodeInformation node : nodeInformation.values()) {
for (VisNodeInformation node : nodeInformation.values()) {
// Make it easier to turn things off.
if (node.clicked && node.position
.distance(e.getPoint()) < PADDING + 2) {
......@@ -386,7 +394,10 @@ public class VisualizationTopologyView extends JFrame
}
if (!turnedSomeoneOff) {
// 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
.distance(e.getPoint()) < PADDING) {
node.clicked = !node.clicked;
......@@ -404,7 +415,7 @@ public class VisualizationTopologyView extends JFrame
public void addTopologyComponent(TopologyComponent comp) {
if (!nodeInformation.containsKey(comp.getHost().getId())) {
NodeInformation tVis = new NodeInformation(comp);
VisNodeInformation tVis = new VisNodeInformation(comp);
comp.requestLocationUpdates(null, tVis);
nodeInformation.put(comp.getHost().getId(), tVis);
}
......@@ -427,7 +438,7 @@ public class VisualizationTopologyView extends JFrame
}
private void paintNodes(Graphics2D g2) {
for (NodeInformation node : nodeInformation.values()) {
for (VisNodeInformation node : nodeInformation.values()) {
if (node.clicked) {
g2.setColor(Color.MAGENTA);
g2.fillOval((int) node.position.getX() - PADDING,
......@@ -462,6 +473,15 @@ public class VisualizationTopologyView extends JFrame
System.err.println(
"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
......@@ -534,6 +554,10 @@ public class VisualizationTopologyView extends JFrame
listener.onHostClick(hostid, isActive);
}
}
public static VisNodeInformation getNodeInformation(INodeID hostId) {
return worldPanel.nodeInformation.get(hostId);
}
protected static void setVariables(VisualizationTopologyView view,
ComponentVisManager visManager, WorldPanel worldPanel,
......@@ -769,6 +793,7 @@ public class VisualizationTopologyView extends JFrame
public static void invalidate() {
worldPanel.invalidate();
view.splitPane.revalidate();
}
public static void addDisplayString(DisplayString str) {
......
......@@ -36,6 +36,7 @@ import javax.swing.event.ChangeListener;
import de.tud.kom.p2psim.api.common.SimHost;
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.visualization.ui.VisualizationComponent;
import de.tudarmstadt.maki.simonstrator.api.Event;
......@@ -62,6 +63,8 @@ public class NodeInfoComponentVis extends JComponent
private JMenu menu = new JMenu("Node Information");
protected boolean[] activeLayers = null;
boolean hideInactiveNodes = false;
public <T extends HostComponent> NodeInfoComponentVis(
final Class<T> componentClass) {
......@@ -87,6 +90,14 @@ public class NodeInfoComponentVis extends JComponent
}
}, null, 0);
}
/**
* Hide rings for inactive nodes.
* @param hideOfflineNodes
*/
public void setHideInactiveNodes(boolean hideInactiveNodes) {
this.hideInactiveNodes = hideInactiveNodes;
}
@Override
protected void paintComponent(Graphics g) {
......@@ -143,6 +154,8 @@ public class NodeInfoComponentVis extends JComponent
* @version 1.0, Sep 22, 2013
*/
private class NodeVis {
public final VisNodeInformation visNodeInfo;
public final NodeInformation nodeInfo;
......@@ -160,6 +173,7 @@ public class NodeInfoComponentVis extends JComponent
this.nodeInfo = nodeInfo;
this.host = (SimHost) host;
this.loc = this.host.getTopologyComponent().getRealPosition();
this.visNodeInfo = VisualizationInjector.getNodeInformation(host.getId());
}
/**
......@@ -191,6 +205,12 @@ public class NodeInfoComponentVis extends JComponent
}
public void draw(Graphics2D g2) {
if (hideInactiveNodes && !nodeInfo.isActive()) {
visNodeInfo.disableClickListener = true;
return;
}
visNodeInfo.disableClickListener = false;
Point center = loc.asPoint();
// 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