|
@@ -5,6 +5,7 @@ import java.awt.Graphics;
|
|
|
import java.awt.event.ComponentEvent;
|
|
|
import java.awt.event.ComponentListener;
|
|
|
import java.util.Collection;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Observable;
|
|
|
import java.util.Observer;
|
|
|
|
|
@@ -13,11 +14,13 @@ import javax.swing.JPanel;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.ConfigurationController;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.control.Controller;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Connection;
|
|
|
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Link;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Model;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Port;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.util.Pair;
|
|
|
import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.VisualisationInteractor;
|
|
|
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.util.Utility;
|
|
|
|
|
|
/**
|
|
|
* Panel which visualizes the SmartHome Network, it's Devices and Connections
|
|
@@ -28,6 +31,8 @@ import de.tu_darmstadt.tk.SmartHomeNetworkSim.view.VisualisationInteractor;
|
|
|
@SuppressWarnings("serial")
|
|
|
public class VisualisationPanel extends JPanel implements Observer {
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* Smart Home model which is visualized
|
|
|
*/
|
|
@@ -150,8 +155,61 @@ public class VisualisationPanel extends JPanel implements Observer {
|
|
|
* the Graphics object to visualize on
|
|
|
*/
|
|
|
public void paintDevices(Graphics g) {
|
|
|
+ /*
|
|
|
+ * Visualization calculations for all devices
|
|
|
+ */
|
|
|
+ /**
|
|
|
+ * Number of Links in the Model
|
|
|
+ */
|
|
|
+ int numberOfLinks = control.getLinks().size();
|
|
|
+ /**
|
|
|
+ * Angle per Link in "linkSlice degrees"
|
|
|
+ */
|
|
|
+ int linkSlice = (int) Math.round(360.0 / numberOfLinks);
|
|
|
+ /**
|
|
|
+ * Map of links to Colors and position of the Color
|
|
|
+ */
|
|
|
+ HashMap<Link, Pair<Integer,Color>> linkColors = null;
|
|
|
+ /**
|
|
|
+ * Dimension of the link ring
|
|
|
+ */
|
|
|
+ int linkDim = 6;
|
|
|
+
|
|
|
+ if(config.isShowLinks()){
|
|
|
+ linkColors = new HashMap<Link, Pair<Integer,Color>>();
|
|
|
+ int i = 0;
|
|
|
+ for(Link l: control.getLinks()){
|
|
|
+ /**
|
|
|
+ * Distinct Color as String containing the hex values (128 static ones should be enough)
|
|
|
+ */
|
|
|
+ String colorHex = Utility.indexcolors[i%Utility.indexcolors.length];
|
|
|
+ /**
|
|
|
+ * Color of the given Hex String (Base16)
|
|
|
+ */
|
|
|
+ Color color = new Color(
|
|
|
+ Integer.valueOf(colorHex.substring(1,3),16),
|
|
|
+ Integer.valueOf(colorHex.substring(3,5),16),
|
|
|
+ Integer.valueOf(colorHex.substring(5,7),16));
|
|
|
+ /**
|
|
|
+ * Put position and Color into the HashMap
|
|
|
+ */
|
|
|
+ linkColors.put(l, new Pair<Integer, Color>(i,color));
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Paint Devices
|
|
|
+ */
|
|
|
+
|
|
|
//Values for dragging of multiple Devices
|
|
|
+ /**
|
|
|
+ * Pixel offset of dragged devices on the x axis
|
|
|
+ */
|
|
|
int x_offset = 0;
|
|
|
+ /**
|
|
|
+ * Pixel offset of dragged devices on the y axis
|
|
|
+ */
|
|
|
int y_offset = 0;
|
|
|
if(interactor.mode == VisualisationInteractor.SELECTED_DRAG && !interactor.selectedDevices.isEmpty()){
|
|
|
x_offset = interactor.dragged_x-interactor.dragged.getX();
|
|
@@ -159,19 +217,44 @@ public class VisualisationPanel extends JPanel implements Observer {
|
|
|
}
|
|
|
//Paint Devices
|
|
|
for (SmartDevice s: model.getDevices()) {
|
|
|
+ /**
|
|
|
+ * x Position of the device
|
|
|
+ */
|
|
|
int x = s.getX();
|
|
|
+ /**
|
|
|
+ * y Position of the device
|
|
|
+ */
|
|
|
int y = s.getY();
|
|
|
if(interactor.mode==VisualisationInteractor.SELECTED_DRAG && interactor.selectedDevices.contains(s)) {
|
|
|
// Update visualization of dragged object
|
|
|
x += x_offset;
|
|
|
y += y_offset;
|
|
|
}
|
|
|
+ //Paint Links of Device V0.0
|
|
|
+ if(config.isShowLinks()){
|
|
|
+ for(Link l:s.getLinks()){
|
|
|
+ /*
|
|
|
+ * Split circle around the object into NumberOfLinks Sections, color the sections, connected with the device
|
|
|
+ */
|
|
|
+ /**
|
|
|
+ * Number and color of the current link
|
|
|
+ */
|
|
|
+ Pair<Integer, Color> linkPos = linkColors.get(l);
|
|
|
+ if(l==null)continue;//Skip Links, which are not in the model
|
|
|
+ g.setColor(linkPos.getRight());
|
|
|
+ g.fillArc(x - config.getDeviceVisualizationRadius() - linkDim, y - config.getDeviceVisualizationRadius() - linkDim,
|
|
|
+ 2 * config.getDeviceVisualizationRadius() - 1 + 2 * linkDim, 2 * config.getDeviceVisualizationRadius() - 1 + 2*linkDim,
|
|
|
+ linkPos.getLeft()*linkSlice, linkSlice);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
if(//(interactor.mode==VisualisationInteractor.SELECTED||interactor.mode==VisualisationInteractor.DRAG_SELECT ||interactor.mode == VisualisationInteractor.SELECTED_DRAG || interactor.mode == VisualisationInteractor.RIGHTCLICK_MENU)&&
|
|
|
(interactor.selectedDevices.contains(s)^interactor.selectedDevicesDrag.contains(s))){
|
|
|
//HighlightSelected Devices
|
|
|
g.setColor(new Color(135,206,235));
|
|
|
- }else
|
|
|
+ }else{
|
|
|
g.setColor(Color.WHITE);
|
|
|
+ }
|
|
|
g.fillOval(x - config.getDeviceVisualizationRadius(), y - config.getDeviceVisualizationRadius(),
|
|
|
2 * config.getDeviceVisualizationRadius() - 1, 2 * config.getDeviceVisualizationRadius() - 1);
|
|
|
g.setColor(Color.BLACK);
|
|
@@ -185,7 +268,7 @@ public class VisualisationPanel extends JPanel implements Observer {
|
|
|
if(config.isShowSmartDeviceNames())
|
|
|
g.drawString(s.getName(),
|
|
|
x - g.getFontMetrics().stringWidth(s.getName()) / 2, y
|
|
|
- + config.getDeviceVisualizationRadius() + 11);
|
|
|
+ + config.getDeviceVisualizationRadius() + 11 + (config.isShowLinks()?linkDim:0));
|
|
|
}
|
|
|
}
|
|
|
|