Browse Source

dragable HolonBodys + more choices for combobox

jess 7 years ago
parent
commit
c3663a6a85
3 changed files with 115 additions and 3 deletions
  1. 1 1
      src/classes/HolonBody.java
  2. 38 0
      src/ui/controller/UpdateController.java
  3. 76 2
      src/ui/view/HolonCanvas.java

+ 1 - 1
src/classes/HolonBody.java

@@ -39,7 +39,7 @@ public class HolonBody implements Comparable<HolonBody> {
 		g2.setColor(color);
 		g2.fillOval((int) (position.getX() - getRadius()), (int) (position.getY() - getRadius()),
 				(int) (2 * getRadius()), (int) (2 * getRadius()));
-		g2.setFont(new Font("TimesRoman", Font.PLAIN, (int) radius));
+		g2.setFont(new Font("TimesRoman", Font.PLAIN, (int) radius/((info.length()/5)+1)));
 		g2.setColor(Color.WHITE);
 		g2.drawString(info, position.getX() - g2.getFontMetrics().stringWidth(info) / 2,
 				position.getY() + g2.getFontMetrics().getHeight() / 3);

+ 38 - 0
src/ui/controller/UpdateController.java

@@ -372,8 +372,46 @@ public class UpdateController {
 			model.getPropertyTable().addRow(tempEdg);
 			Object[] tempSwi = { "Nr. of Switches", sub.getSwitches().size() };
 			model.getPropertyTable().addRow(tempSwi);
+			Object[] tempProd = {"Total Production", "" + getTotalProduction(new ArrayList<AbstractCpsObject>(sub.getObjects()))};
+			model.getPropertyTable().addRow(tempProd);
+			Object[] tempCons = {"Total Production", "" + getTotalConsumption(new ArrayList<AbstractCpsObject>(sub.getObjects()))};
+			model.getPropertyTable().addRow(tempCons);
 			}
 		}
 	}
+	
+	private float getTotalConsumption(ArrayList<AbstractCpsObject> objects) {
+		float val = 0;
+		int tStep = model.getCurIteration();
+		for (AbstractCpsObject obj : objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
+					if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
+						val += ele.getEnergyAt()[tStep] * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getTotalConsumption(((CpsUpperNode) obj).getNodes());
+			}
+		}
+		return val;
+	}
+	
+		private float getTotalProduction(ArrayList<AbstractCpsObject> arrayList) {
+			float val = 0;
+			int tStep = model.getCurIteration();
+			for (AbstractCpsObject obj : arrayList) {
+				if (obj instanceof HolonObject) {
+					for (HolonElement ele : ((HolonObject) obj).getElements()) {
+						if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
+							val += ele.getEnergyAt()[tStep] * ele.getAmount();
+						}
+					}
+				} else if (obj instanceof CpsUpperNode) {
+					val += getTotalProduction(((CpsUpperNode) obj).getNodes());
+				}
+			}
+			return val;
+		}
 
 }

+ 76 - 2
src/ui/view/HolonCanvas.java

@@ -9,6 +9,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.MouseWheelListener;
 import java.util.ArrayList;
@@ -17,15 +18,21 @@ import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
+import classes.AbstractCpsObject;
 import classes.Constants;
+import classes.CpsUpperNode;
 import classes.HolonBody;
+import classes.HolonElement;
+import classes.HolonObject;
 import classes.SubNet;
 import classes.Vector2d;
 import ui.controller.Control;
 import ui.model.Model;
 
-public class HolonCanvas extends JPanel implements MouseWheelListener, MouseListener {
+public class HolonCanvas extends JPanel implements MouseWheelListener, MouseListener, MouseMotionListener {
 
 	/**
 	 * 
@@ -63,6 +70,7 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 	private ArrayList<HolonBody> sortedSize = new ArrayList<>();
 	private ArrayList<HolonBody> sortedDist = new ArrayList<>();
 	private boolean sizeChange = false;
+	private HolonBody toDrag;
 
 	public HolonCanvas(Model mod, Control control) {
 		// Wire up Events
@@ -82,6 +90,8 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 		combo.addItem("Nr. of Objects");
 		combo.addItem("Nr. of Edges");
 		combo.addItem("Nr. of Switches");
+		combo.addItem("Total Production");
+		combo.addItem("Total Consumption");
 
 		combo.addActionListener(new ActionListener() {
 			@Override
@@ -90,7 +100,15 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 			}
 		});
 		this.addMouseListener(this);
+		this.addMouseMotionListener(this);
 
+		chckbxSort.addChangeListener(new ChangeListener() {
+			
+			@Override
+			public void stateChanged(ChangeEvent e) {
+				sizeChange = true;
+			}
+		});
 		add(chckbxSort);
 	}
 
@@ -227,8 +245,14 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 			case 3:
 				info = "" + subnets.get(bodyNr).getSwitches().size();
 				break;
+			case 4: 
+				info = "" + getTotalProduction(new ArrayList<AbstractCpsObject>(subnets.get(bodyNr).getObjects()));
+				break;
+			case 5:
+				info = "" + getTotalConsumption(new ArrayList<AbstractCpsObject>(subnets.get(bodyNr).getObjects()));
+				break;
 			default:
-				info = "" + bodies.get(i).getId();
+				info = "" + bodyNr;
 				break;
 			}
 			bodies.get(i).setRadius((subnets.get(bodies.get(i).getId()).getObjects().size() * 5 + 10)
@@ -237,6 +261,40 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 		}
 	}
 
+	private float getTotalConsumption(ArrayList<AbstractCpsObject> objects) {
+		float val = 0;
+		int tStep = model.getCurIteration();
+		for (AbstractCpsObject obj : objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
+					if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
+						val += ele.getEnergyAt()[tStep] * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getTotalConsumption(((CpsUpperNode) obj).getNodes());
+			}
+		}
+		return val;
+	}
+
+	private float getTotalProduction(ArrayList<AbstractCpsObject> objects) {
+		float val = 0;
+		int tStep = model.getCurIteration();
+		for (AbstractCpsObject obj : objects) {
+			if (obj instanceof HolonObject) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
+					if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
+						val += ele.getEnergyAt()[tStep] * ele.getAmount();
+					}
+				}
+			} else if (obj instanceof CpsUpperNode) {
+				val += getTotalProduction(((CpsUpperNode) obj).getNodes());
+			}
+		}
+		return val;
+	}
+
 	public void updateBodies(float elapsedSeconds) {
 
 		// step the position of movable objects based off their velocity/gravity
@@ -363,9 +421,11 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 			float cr = bodies.get(i).getRadius();
 			if (e.getX() - cr <= cx && e.getY() - cr <= cy && e.getX() + cr >= cx && e.getY() + cr >= cy) {
 				controller.addSelectedHolonBody(bodies.get(i).getId());
+				toDrag = bodies.get(i);
 				break;
 			} else {
 				controller.addSelectedHolonBody(-1);
+				toDrag = null;
 			}
 		}
 	}
@@ -374,4 +434,18 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
 	public void mouseReleased(MouseEvent e) {
 		// TODO Auto-generated method stub
 	}
+
+	@Override
+	public void mouseDragged(MouseEvent e) {
+		if(toDrag!=null){
+			toDrag.position = new Vector2d(e.getX(), e.getY());
+		}			
+		repaint();
+	}
+
+	@Override
+	public void mouseMoved(MouseEvent e) {
+		// TODO Auto-generated method stub
+		
+	}
 }