Browse Source

Adds ImagePreference Class

TomTroppmann 2 years ago
parent
commit
121d3ee467

+ 0 - 0
res/images/canvas/home.png → res/images/canvas/House.png


+ 0 - 0
res/images/canvas/node.png → res/images/canvas/node_unselected.png


+ 0 - 0
res/images/canvas/switch_on.png → res/images/canvas/switch_closed.png


+ 0 - 0
res/images/canvas/switch_off.png → res/images/canvas/switch_open.png


+ 2 - 1
src/holeg/addon/helper/EmailNotification.java

@@ -16,6 +16,7 @@ import javax.swing.JTextField;
 
 import org.apache.commons.mail.*;
 
+import holeg.preferences.ImagePreference;
 import holeg.utility.image.Import;
 
 
@@ -48,7 +49,7 @@ public class EmailNotification {
 		loadPreferences();
 		JFrame frame = new JFrame();
 		frame.setTitle("Email Settings");
-		frame.setIconImage(Import.loadImage("/images/logo/holeg.png",30,30));
+		frame.setIconImage(Import.loadImage(ImagePreference.Logo,30,30));
 		frame.setContentPane(createEditFormular(frame));
 		frame.pack();
 		frame.setPreferredSize(new Dimension(400,frame.getHeight()));

+ 2 - 1
src/holeg/api/AlgorithmFrameworkFlex.java

@@ -50,6 +50,7 @@ import holeg.model.Flexibility;
 import holeg.model.HolonElement;
 import holeg.model.HolonObject;
 import holeg.model.HolonSwitch;
+import holeg.preferences.ImagePreference;
 import holeg.model.Flexibility.FlexState;
 import holeg.model.HolonElement.Priority;
 import holeg.ui.controller.Control;
@@ -215,7 +216,7 @@ public abstract class AlgorithmFrameworkFlex implements AddOn{
 		emailNotificationCheckbox.addActionListener(actionEvent -> useEmailNotification = emailNotificationCheckbox.isSelected());
 		parameterPanel.add(emailNotificationCheckbox);
 		
-		JButton emailSettingsButton = new JButton("", new ImageIcon(Import.loadImage("/images/buttons/settings.png", 16,16)));
+		JButton emailSettingsButton = new JButton("", new ImageIcon(Import.loadImage(ImagePreference.Button.Settings, 16,16)));
 		emailSettingsButton.setBounds(1030, 200, 20, 20);
 		emailSettingsButton.addActionListener(event -> {
 			EmailNotification.OpenEmailSettings(content);

+ 2 - 1
src/holeg/api/TopologieAlgorithmFramework.java

@@ -48,6 +48,7 @@ import holeg.model.GroupNode;
 import holeg.model.HolonObject;
 import holeg.model.HolonSwitch;
 import holeg.model.Node;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.DecoratedGroupNode;
 import holeg.ui.model.DecoratedNetwork;
@@ -1169,7 +1170,7 @@ public abstract class TopologieAlgorithmFramework implements AddOn{
 		public void resetState() {
 			state = 0;
 			wildcard.setName("Wildcard");
-			wildcard.setImage("/images/canvas/home.png");
+			wildcard.setImage(ImagePreference.Canvas.DefaultObject.House);
 			wildcard.clearElements();
 		}
 		

+ 0 - 1
src/holeg/model/GroupNode.java

@@ -15,7 +15,6 @@ public class GroupNode extends AbstractCanvasObject {
 
 	public GroupNode(String nodeName) {
 		super(nodeName);
-		this.setImage("/images/canvas/group_node.png");
 		this.setSav("CVS");
 	}
 

+ 61 - 144
src/holeg/model/HolonSwitch.java

@@ -11,67 +11,53 @@ import holeg.ui.controller.IndexTranslator;
 import holeg.utility.math.vector.Vec2f;
 
 /**
- * The class HolonSwitch represents a Switch, which can be turned on and off.
+ * The class HolonSwitch represents an Object in the system, that has the
+ * capacity of manipulate the electricity flow. The switch can be manage
+ * automatically through a graph or direct manually.
  * 
  * @author Gruppe14
  *
  */
 public class HolonSwitch extends AbstractCanvasObject implements TimelineDependent {
 
-	/**
-	 * The class HolonSwitch represents an Object in the system, that has the
-	 * capacity of manipulate the electricity flow. The switch can be manage
-	 * automatically through a graph or direct manually.
-	 *
-	 */
-	/*
-	 * manual state True, if this wire is working (capable of carrying electricity),
-	 * else false
-	 */
-	@Expose
-	boolean manualActive;
+	
+	public enum SwitchState {
+		Open, Closed
+	}
 
-	/*
-	 * active state True, if this wire is working (capable of carrying electricity),
-	 * else false
-	 */
-	@Expose
-	private boolean autoActive;
+	public enum SwitchOperatingMode {
+		Manuel, Auto
+	}
 
-	/*
-	 * true if switch has to be used manually
-	 */
 	@Expose
-	boolean manualMode;
-
+	private SwitchOperatingMode mode = SwitchOperatingMode.Auto;
 	@Expose
-	int localPeriod;
-
+	private SwitchState manuelState = SwitchState.Closed;
+	@Expose
+	private int localPeriod;
 	@Expose
-	boolean localPeriodActive;
+	boolean localPeriodActive = false;
 
-	/*
+	
+	
+	
+	
+	/**
 	 * Energy at each point of the graph with 50 predefined points. At the
 	 * beginning, it starts with all values at energy
 	 */
-	boolean[] activeAt;
-	// Points on the UnitGraph
+	boolean[] activeAt = new boolean[LocalMode.STANDARD_GRAPH_ACCURACY];
+	/** Points on the UnitGraph */
 	LinkedList<Vec2f> graphPoints = new LinkedList<>();
 
 	/**
-	 * Create a new HolonSwitch with the default name ("Switch"), a default value of
-	 * automatic handle and active status.
+	 * Create a new HolonSwitch with a custom name, a default value of automatic
+	 * handle and active status.
 	 * 
-	 * @param objName String
+	 * @param name String
 	 */
-	public HolonSwitch(String objName) {
-		super(objName);
-		setUseLocalPeriod(false);
-		activeAt = new boolean[LocalMode.STANDARD_GRAPH_ACCURACY];
-		setManualState(true);
-		setAutoState(true);
-		setManualMode(false);
-		setGraphPoints(new LinkedList<Vec2f>());
+	public HolonSwitch(String name) {
+		super(name);
 		initGraphPoints();
 		sampleGraph();
 	}
@@ -86,15 +72,11 @@ public class HolonSwitch extends AbstractCanvasObject implements TimelineDepende
 		setLocalPeriod(other.getLocalPeriod());
 		setUseLocalPeriod(other.isUsingLocalPeriod());
 		activeAt = new boolean[LocalMode.STANDARD_GRAPH_ACCURACY];
-		super.setName(other.getName());
-		setManualState(other.getManualState());
-		setAutoState(true);
-		setGraphPoints(new LinkedList<Vec2f>());
+		setName(other.getName());
 		for (Vec2f p : other.getGraphPoints()) {
 			this.graphPoints.add(new Vec2f(p.getX(), p.getY()));
 		}
 		sampleGraph();
-		setManualMode(other.getManualMode());
 	}
 
 	@Override
@@ -106,81 +88,36 @@ public class HolonSwitch extends AbstractCanvasObject implements TimelineDepende
 	/**
 	 * Calculates the state of the Switch.
 	 */
-	public void switchState() {
-		if (!manualMode) {
-			setManualMode(true);
-		}
-		if (this.manualActive == true) {
-			setImage(getSwitchOpenImage());
-		} else {
-			setImage(getSwitchClosedImage());
+	public void toggleStateManuel() {
+		switch(manuelState) {
+		case Closed:
+			manuelState = SwitchState.Open;
+			break;
+		case Open:
+		default:
+			manuelState = SwitchState.Closed;
+			break;
 		}
-		this.manualActive = !manualActive;
-
-	}
-
-	public static String getSwitchClosedImage() {
-		return "/images/canvas/switch_on.png";
 	}
-
-	public static String getSwitchOpenImage() {
-		return "/images/canvas/switch-off.png";
-	}
-
-	//TODO(Tom2021-12-20): remove getState timestep
-	/**
-	 * Getter for the status of the Switch at a given timestep.
-	 * 
-	 * @param timeStep state at given iteration.
-	 * @return state value (true if closed/active, false if open)
-	 */
-	public boolean getState(int timeStep) {
-		if (manualMode) {
-			return this.manualActive;
-		} else {
-			return activeAt[IndexTranslator.getEffectiveIndex(this, timeStep)];
+	
+	/*
+	 * STATE
+	 */
+	
+	private SwitchState state;
+	public void calculateState(int timestep) {
+		switch (mode) {
+		case Auto:
+			state = activeAt[IndexTranslator.getEffectiveIndex(this, timestep)] ? SwitchState.Open : SwitchState.Closed;
+		case Manuel:
+		default:
+			state =  manuelState;
 		}
 	}
-
-	/**
-	 * Change the state of the Switch to manual.
-	 * 
-	 * @param state the State
-	 */
-	public void setManualState(boolean state) {
-		this.manualActive = state;
-		setImage();
+	public SwitchState getState() {
+		return state;
 	}
-
-	/**
-	 * Set the state of the Switch to automatic.
-	 * 
-	 * @param state the State
-	 */
-	public void setAutoState(boolean state) {
-		this.autoActive = state;
-		setImage();
-	}
-
-	/**
-	 * Set Image of the Switch.
-	 */
-	private void setImage() {
-		if (manualMode) {
-			if (!this.manualActive) {
-				setImage("/images/canvas/switch-off.png");
-			} else {
-				setImage("/images/canvas/switch-on.png");
-			}
-		} else {
-			if (!this.autoActive) {
-				setImage("/images/canvas/switch-off.png");
-			} else {
-				setImage("/images/canvas/switch-on.png");
-			}
-		}
-	}
-
+	
 	/**
 	 * For automatic use only (through the graph).
 	 * 
@@ -208,40 +145,20 @@ public class HolonSwitch extends AbstractCanvasObject implements TimelineDepende
 		graphPoints.add(new Vec2f(1, 1));
 	}
 
-	/**
-	 * Returns the ManualState.
-	 * 
-	 * @return boolean Manual State
-	 */
-	public boolean getManualState() {
-		return this.manualActive;
+	public SwitchOperatingMode getMode() {
+		return mode;
 	}
 
-	/**
-	 * Returns the autoActive.
-	 * 
-	 * @return boolean autoActive
-	 */
-	public boolean getAutoActive() {
-		return autoActive;
+	public void setMode(SwitchOperatingMode mode) {
+		this.mode = mode;
 	}
 
-	/**
-	 * Set the overall value of the Switch (manual mode).
-	 * 
-	 * @param mode the mode (boolean)
-	 */
-	public void setManualMode(boolean mode) {
-		manualMode = mode;
+	public SwitchState getManuelState() {
+		return manuelState;
 	}
 
-	/**
-	 * Get manualmode state.
-	 * 
-	 * @return boolean manual mode state
-	 */
-	public boolean getManualMode() {
-		return manualMode;
+	public void setManuelState(SwitchState manuelState) {
+		this.manuelState = manuelState;
 	}
 
 	// interfaces.GraphEditable

+ 0 - 1
src/holeg/model/Node.java

@@ -17,7 +17,6 @@ public class Node extends AbstractCanvasObject {
 	 */
 	public Node(String objName) {
 		super(objName);
-		this.setImage("/images/canvas/node.png");
 		this.setSav("CVS");
 	}
 	

+ 56 - 0
src/holeg/preferences/ImagePreference.java

@@ -0,0 +1,56 @@
+package holeg.preferences;
+
+public class ImagePreference {
+
+	public static class Canvas {
+		public static class Switch {
+			public static final String Open = "/images/canvas/switch_open.png";
+			public static final String Closed = "/images/canvas/switch_closed.png";
+		}
+		public static final String GroupNode = "/images/canvas/group_node.png";
+		public static class Node {
+			public static final String Selected = "/images/canvas/node_selected.png";
+			public static final String Unselected = "/images/canvas/node_unselected.png";
+		}
+		
+		public static class DefaultObject {
+			public static final String House = "/images/canvas/house.png";
+			public static final String PowerPlant = "/images/canvas/power_plant.png";
+		}		
+		public static final String ImageNotFound = "/images/canvas/image_not_found.png";
+		public static final String ReplaceSymbol = "/images/canvas/replace.png";
+	}
+	
+	public static class Button {
+		public static final String Settings = "/images/buttons/settings.png";
+		public static class Console {
+			public static final String Clear = "/images/buttons/clear.png";
+			public static final String Top = "/images/buttons/top.png";
+			public static final String Bottom = "/images/buttons/bottom.png";	
+		}
+		public static class Inspector {
+			public static final String Reset = "/images/buttons/reset_circle.png";				
+			public static final String Graph = "/images/buttons/graph.png";				
+		}
+		public static class Menu {
+			public static final String Algo = "/images/buttons/algo.png";						
+			public static final String Outliner = "/images/buttons/outliner.png";						
+		}
+		public static class TimePanel {
+			public static final String Play = "/images/buttons/play.png";						
+			public static final String Pause = "/images/buttons/pause.png";						
+			public static final String Reset = "/images/buttons/reset.png";						
+			public static final String Forward = "/images/buttons/forward.png";						
+			public static final String Backward = "/images/buttons/backward.png";						
+		}
+		public static class Outliner {
+			public static final String Open = "/images/buttons/open.png";						
+			public static final String Closed = "/images/buttons/closed.png";						
+			public static final String Leaf = "/images/buttons/leaf.png";						
+		}
+	}
+	public static class Category {
+		public static final String Folder = "/images/buttons/folder.png";								
+	}
+	public static final String Logo = "/images/logo/holeg.png";
+}

+ 5 - 5
src/holeg/ui/controller/CategoryController.java

@@ -6,6 +6,7 @@ import holeg.model.AbstractCanvasObject;
 import holeg.model.HolonElement;
 import holeg.model.HolonObject;
 import holeg.model.HolonSwitch;
+import holeg.preferences.ImagePreference;
 import holeg.ui.model.GuiSettings;
 import holeg.ui.view.main.Category;
 import holeg.utility.events.Event;
@@ -43,9 +44,9 @@ public class CategoryController {
 		Category building = createCategoryWithName("Building");
 		Category component = createCategoryWithName("Component");
 		HolonObject powerPlant = addNewHolonObject(energy, "Power Plant", new ArrayList<HolonElement>(),
-				"/images/canvas/power_plant.png");
-		HolonObject house = addNewHolonObject(building, "House", new ArrayList<HolonElement>(), "/images/canvas/home.png");
-		addNewHolonSwitch(component, "Switch", "/images/canvas/switch_on.png");
+				ImagePreference.Canvas.DefaultObject.PowerPlant);
+		HolonObject house = addNewHolonObject(building, "House", new ArrayList<HolonElement>(), ImagePreference.Canvas.DefaultObject.House);
+		addNewHolonSwitch(component, "Switch");
 		powerPlant.add(new HolonElement(null, "Power", 10000));
 		energy.getObjects().add(powerPlant);
 	
@@ -158,9 +159,8 @@ public class CategoryController {
 	 * @param image
 	 *            the Image Path
 	 */
-	public HolonSwitch addNewHolonSwitch(Category cat, String objName, String image) {
+	public HolonSwitch addNewHolonSwitch(Category cat, String objName) {
 		HolonSwitch holonSwitch = new HolonSwitch(objName);
-		holonSwitch.setImage(image);
 		holonSwitch.setSav(cat.getName());
 		addObject(cat, holonSwitch);
 		return holonSwitch;

+ 1 - 1
src/holeg/ui/controller/Control.java

@@ -191,7 +191,7 @@ public class Control {
 	 * @throws IOException
 	 */
 	public void addSwitch(Category cat, String obj) {
-		categoryController.addNewHolonSwitch(cat, obj, "/images/canvas/switch_on.png");
+		categoryController.addNewHolonSwitch(cat, obj);
 		saveCategory();
 	}
 

+ 0 - 3
src/holeg/ui/controller/SimulationManager.java

@@ -27,7 +27,6 @@ import holeg.ui.model.Model.FairnessModel;
 public class SimulationManager {
 	private static final Logger log = Logger.getLogger(SimulationManager.class.getName());
 	private Model model;
-	private HashMap<Integer, VisualRepresentationalState> savesVisual = new HashMap<Integer, VisualRepresentationalState>();
 	private int timeStep;
 	public Optional<DecoratedState> actualDecorState = Optional.empty();
 
@@ -89,8 +88,6 @@ public class SimulationManager {
 		ArrayList<DecoratedSwitch> listOfDecoratedSwitches = decorateSwitches(minimumModel, timestep);
 		DecoratedState stateFromThisTimestep = new DecoratedState(decorNetworks, leftOver, listOfDecoratedSwitches,
 				timestep);
-		if (updateVisual)
-			savesVisual.put(timestep, new VisualRepresentationalState(stateFromThisTimestep, minimumModel));
 		actualDecorState = Optional.of(stateFromThisTimestep);
 		long end = System.currentTimeMillis();
 		log.finer("Simulation: " + (end - start) + "ms");

+ 0 - 408
src/holeg/ui/model/VisualRepresentationalState.java

@@ -1,408 +0,0 @@
-package holeg.ui.model;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.stream.Collectors;
-
-import holeg.model.AbstractCanvasObject;
-import holeg.model.Edge;
-import holeg.model.GroupNode;
-import holeg.model.HolonObject;
-import holeg.model.Node;
-import holeg.ui.model.ExitCable.ExitCableState;
-
-public class VisualRepresentationalState {
-	private ArrayList<Supplier> supplierList = new ArrayList<>();
-	private ArrayList<Passiv> passivList= new ArrayList<>();
-	private ArrayList<Consumer> consumerList= new ArrayList<>();
-	private ArrayList<Node> nodeList= new ArrayList<>();
-	private ArrayList<Edge> cableList= new ArrayList<>();
-	private ArrayList<DecoratedSwitch> switchList= new ArrayList<>();
-	private ArrayList<DecoratedGroupNode> groupNodeList= new ArrayList<>();
-	private ArrayList<ExitCable> exitCableList= new ArrayList<>();
-	
-	//ForFastAccessIndividualGroupNodes:
-	private HashMap<GroupNode, DecoratedGroupNode> createdGroupNodes;
-	
-	public HashMap<HolonObject, DecoratedHolonObject> createdHolonObjects;
-	
-	public VisualRepresentationalState(DecoratedState stateFromThisTimestep, MinimumModel minimumModel) {
-		reassignObjects(stateFromThisTimestep, minimumModel);
-	}
-
-
-	//Getter:
-	public ArrayList<Supplier> getSupplierList() {
-		return supplierList;
-	}
-	public ArrayList<Passiv> getPassivList() {
-		return passivList;
-	}
-	public ArrayList<Consumer> getConsumerList() {
-		return consumerList;
-	}
-	public ArrayList<Node> getNodeList() {
-		return nodeList;
-	}
-	public ArrayList<Edge> getCableList() {
-		return cableList;
-	}
-	public ArrayList<DecoratedSwitch> getSwitchList() {
-		return switchList;
-	}
-	public ArrayList<DecoratedGroupNode> getGroupNodeList() {
-		return groupNodeList;
-	}
-	
-	//Reassignments:
-	private void reassignObjects(DecoratedState stateFromThisTimestep, MinimumModel minimumModel) {
-		
-		//generate CableLookUp
-		HashMap<Edge, ArrayList<GroupNode>> inGroupEdges = minimumModel.getInGroupEdges();
-		
-		createdGroupNodes =  new HashMap<GroupNode, DecoratedGroupNode>();
-		createdHolonObjects = new HashMap<HolonObject, DecoratedHolonObject>();
-		
-		ArrayList<IntermediateCalculationCable> exitCables = new ArrayList<IntermediateCalculationCable>();
-		//createThem
-		for(GroupNode groupNode :  minimumModel.getUppderNodeList()) {
-			createdGroupNodes.put(groupNode, new DecoratedGroupNode(groupNode));
-		}
-		//unrolling Networks
-		for(DecoratedNetwork net : stateFromThisTimestep.getNetworkList()) {
-			for(Consumer con : net.getConsumerList()) {
-				DecoratedGroupNode groupNodeFromObject = addObject(con.getModel(), consumerList, con);
-				if(groupNodeFromObject != null) {
-					addToGroupNode(con, groupNodeFromObject.getConsumerList());
-				}
-				this.createdHolonObjects.put(con.getModel(), con);
-			}
-			for(Consumer con : net.getConsumerSelfSuppliedList()) {
-				DecoratedGroupNode groupNodeFromObject = addObject(con.getModel(), consumerList, con);
-				if(groupNodeFromObject != null) {
-					addToGroupNode(con, groupNodeFromObject.getConsumerList());
-				}
-				this.createdHolonObjects.put(con.getModel(), con);
-			}
-			for(Supplier sup : net.getSupplierList()) {
-				DecoratedGroupNode groupNodeFromObject = addObject(sup.getModel(), supplierList, sup);
-				if(groupNodeFromObject != null) {
-					addToGroupNode(sup, groupNodeFromObject.getSupplierList());
-				}
-				this.createdHolonObjects.put(sup.getModel(), sup);
-			}
-			for(Passiv pas : net.getPassivNoEnergyList()) {
-				DecoratedGroupNode groupNodeFromObject = addObject(pas.getModel(), passivList, pas);
-				if(groupNodeFromObject != null) {
-					addToGroupNode(pas, groupNodeFromObject.getPassivList());
-				}
-				this.createdHolonObjects.put(pas.getModel(), pas);
-			}
-			for(Edge cable : net.getDecoratedCableList()) {
-				addCable(cable, inGroupEdges,createdGroupNodes, exitCables);
-			}
-		}
-		for(Edge cable : stateFromThisTimestep.getLeftOverEdges()) {
-			addCable(cable, inGroupEdges, createdGroupNodes, exitCables);
-		}
-		for(Node node : minimumModel.getNodeList()) {
-			DecoratedGroupNode groupNodeFromObject = addObject(node, nodeList ,node);
-			if(groupNodeFromObject != null) {
-				addToGroupNode(node, groupNodeFromObject.getNodeList());
-			}
-		}
-		for(DecoratedSwitch dSwitch: stateFromThisTimestep.getDecoratedSwitches()) {
-			DecoratedGroupNode groupNodeFromObject = addObject(dSwitch.getModel(), switchList, dSwitch);
-			if(groupNodeFromObject != null) {
-				addToGroupNode(dSwitch, groupNodeFromObject.getSwitchList());
-			}
-		}
-		for(DecoratedGroupNode dGroupNode: createdGroupNodes.values()) {
-			DecoratedGroupNode groupNodeFromObject = addObject(dGroupNode.getModel(), groupNodeList, dGroupNode);
-			if(groupNodeFromObject != null) {
-				addToGroupNode(dGroupNode, groupNodeFromObject.getGroupNodeList());
-			}
-		}
-		//Create TreeNodeModel:
-		HashMap<GroupNode, TreeNode<TreeGroupNodeData>> fastaccess= new HashMap<GroupNode, TreeNode<TreeGroupNodeData>>();
-		TreeNode<TreeGroupNodeData> root = new TreeNode<TreeGroupNodeData>(null, new ArrayList<TreeNode<TreeGroupNodeData>>(), new TreeGroupNodeData(null, 0));
-		fastaccess.put(null, root);
-		for(DecoratedGroupNode dGroupNode: getGroupNodeList()) {
-			addTreeNode(root, dGroupNode, 1, fastaccess);
-		}
-		for(IntermediateCalculationCable cable : exitCables) {
-			createExitEdgesV2(root,cable , cable.getInsideObject(),cable.getInsideUpperNode(),cable.getOusideObject(),cable.getOutsideUpperNode(), fastaccess);			
-		}
-	}
-
-
-	private void createExitEdgesV2(TreeNode<TreeGroupNodeData> root, IntermediateCalculationCable cable,  AbstractCanvasObject insideObject,
-			GroupNode insideUpperNode, AbstractCanvasObject ousideObject, GroupNode outsideUpperNode, HashMap<GroupNode, TreeNode<TreeGroupNodeData>> fastaccess) {
-		
-		
-		
-		
-		//Create Up List
-		LinkedList<TreeNode<TreeGroupNodeData>> listFromStart = createList(insideUpperNode, fastaccess);
-		LinkedList<TreeNode<TreeGroupNodeData>> listFromEnd = createList(outsideUpperNode, fastaccess);
-		LinkedList<TreeNode<TreeGroupNodeData>> common = new LinkedList<TreeNode<TreeGroupNodeData>>(listFromStart);
-		common.retainAll(listFromEnd);
-		TreeNode<TreeGroupNodeData> firstCommon = common.getFirst();
-		LinkedList<TreeNode<TreeGroupNodeData>> resultList = new LinkedList<TreeNode<TreeGroupNodeData>>();
-		//Add from listFromStart till firstCommon
-		createresultList(listFromStart, firstCommon, resultList);		
-		//Add firstCommon
-		resultList.add(firstCommon);
-		//Add from listFromEnd till firstCommon
-		createresultList(listFromEnd, firstCommon, resultList);
-		LinkedList<NodeInfo> infoList = new LinkedList<NodeInfo>();
-		//Categorize:
-		ListIterator<TreeNode<TreeGroupNodeData>> iter = resultList.listIterator();
-		
-		while(iter.hasNext()) {
-			//categorize
-			TreeNode<TreeGroupNodeData> actual, next = null, previous = null;
-			if(iter.hasPrevious()) {
-				previous =iter.previous();
-				iter.next();
-			}
-			actual = iter.next();
-			if(iter.hasNext()) {
-				next =iter.next();
-				iter.previous();
-			}
-			NodeInfo actualInfo = new NodeInfo(actual.getData().groupNode);
-			if(previous!= null) {
-				actualInfo.previousGroupNode = previous.getData().groupNode;
-				if(previous == actual.getParent()) {
-					actualInfo.previous = Info.Parent;
-				}else {
-					actualInfo.previous = Info.Child;
-				}
-			}
-			if(next!= null) {
-				actualInfo.nextGroupNode = next.getData().groupNode;
-				if(next == actual.getParent()) {
-					actualInfo.next = Info.Parent;
-				}else {
-					actualInfo.next = Info.Child;
-				}
-			}
-			infoList.add(actualInfo);
-		}
-		for(NodeInfo info: infoList) {
-			DecoratedGroupNode group = this.createdGroupNodes.get(info.groupNode);
-			ArrayList<ExitCable> mylist;
-			if(group == null) {
-				mylist = this.getExitCableList();
-			}else{
-				mylist = group.getExitCableList();
-			}
-			ExitCableState state =null;
-			if(info.previous == Info.Nothing) {
-				if(info.next == Info.Child) {
-					state = ExitCableState.DOWN;
-					mylist.add(new ExitCable(state, insideObject, info.nextGroupNode, cable.getEdge()));
-				}else if(info.next == Info.Parent) {
-					state = ExitCableState.UP;
-					mylist.add(new ExitCable(state, insideObject, ousideObject, cable.getEdge()));
-				}else {
-					System.out.println("Error in VisualState");
-				}
-			}else if(info.previous == Info.Child) {
-				if(info.next == Info.Child) {
-					state = ExitCableState.DOWNDOWN;
-					mylist.add(new ExitCable(state, info.previousGroupNode, info.nextGroupNode, cable.getEdge()));
-				}else if(info.next == Info.Parent) {
-					state = ExitCableState.DOWNUP;
-					mylist.add(new ExitCable(state, info.previousGroupNode, ousideObject, cable.getEdge()));
-				}else {
-					state = ExitCableState.DOWN;
-					mylist.add(new ExitCable(state, info.previousGroupNode, ousideObject, cable.getEdge()));
-				}
-			}else {//(info.previous == Info.Parent)
-				if(info.next == Info.Child) {
-					state = ExitCableState.DOWNUP;
-					mylist.add(new ExitCable(state, info.nextGroupNode, insideObject, cable.getEdge()));
-				}else if(info.next == Info.Parent) {
-					System.out.println("Error in VisualState");
-				}else {
-					state = ExitCableState.UP;
-					mylist.add(new ExitCable(state, ousideObject, insideObject, cable.getEdge()));
-				}
-			}
-		}
-	}
-
-
-	private void createresultList(LinkedList<TreeNode<TreeGroupNodeData>> list,
-			TreeNode<TreeGroupNodeData> firstCommon, LinkedList<TreeNode<TreeGroupNodeData>> resultList) {
-		for(TreeNode<TreeGroupNodeData> node: list) {
-			if(node == firstCommon) {
-				break;
-			}
-			resultList.add(node);
-		}
-	}
-
-
-	private LinkedList<TreeNode<TreeGroupNodeData>> createList(GroupNode insideUpperNode,
-			HashMap<GroupNode, TreeNode<TreeGroupNodeData>> fastaccess) {
-		System.out.println(insideUpperNode);
-		TreeNode<TreeGroupNodeData> actualNode = fastaccess.get(insideUpperNode);
-		LinkedList<TreeNode<TreeGroupNodeData>> list = new LinkedList<TreeNode<TreeGroupNodeData>>();
-		list.add(actualNode);
-		while(actualNode.getParent() != null) {
-			actualNode = actualNode.getParent();
-			list.add(actualNode);
-		}
-		return list;
-	}
-
-
-	private void addCable(Edge cable, HashMap<Edge, ArrayList<GroupNode>> inGroupEdges,
-			HashMap<GroupNode, DecoratedGroupNode> createdGroupNodes, ArrayList<IntermediateCalculationCable> exitCables) {
-		boolean isInGroup = false;
-		if(cable.getA().isInGroupNode()) {
-			isInGroup = true;
-		}
-		if(cable.getB().isInGroupNode()) {
-			isInGroup = true;
-		}
-		if(isInGroup) {
-			
-			boolean isIntern = cable.getA().getGroupNode() == cable.getB().getGroupNode(); //Case null == null is not possible trough before Filtering MinimumModel#addUpperObjects(CpsUpperNode)
-			if(isIntern) {
-				DecoratedGroupNode groupNodeFromBoth = createdGroupNodes.get(cable.getA().getGroupNode());
-				groupNodeFromBoth.getInternCableList().add(cable);				
-			}else {
-				if(cable.getA().isInGroupNode()) {
-					exitCables.add(new IntermediateCalculationCable(cable, cable.getA().getGroupNode(),cable.getB().getGroupNode(), cable.getA(), cable.getB()));
-				} else if(cable.getB().isInGroupNode()) {
-					exitCables.add(new IntermediateCalculationCable(cable, cable.getB().getGroupNode(),cable.getA().getGroupNode(), cable.getB(), cable.getA()));
-				}
-			}
-		}else {
-			cableList.add(cable);					
-		}
-	}
-
-	private <DecoratedObject> void addToGroupNode(DecoratedObject object, ArrayList<DecoratedObject> groupNodeListPar) {
-		groupNodeListPar.add(object);
-	}
-	
-	
-	
-	
-	public int getAmountfOfGroupNodes() {
-		return groupNodeList.stream().map(groupNode -> groupNode.getAmountOfGroupNodes()).reduce(0, Integer::sum);
-	}
-	
-	
-	
-	public float getConsumptionFromConsumer() {		
-		return consumerList.stream().map(con -> con.getEnergyNeededFromNetwork()).reduce(0.f, Float::sum)+
-				groupNodeList.stream().map(groupNode -> groupNode.getConsumptionFromConsumer()).reduce(0.f, Float::sum);
-	}
-	public float getProductionFromSupplier() {		
-		return supplierList.stream().map(sup -> sup.getEnergyToSupplyNetwork()).reduce(0.f, Float::sum)+
-				groupNodeList.stream().map(groupNode -> groupNode.getProductionFromSupplier()).reduce(0.f, Float::sum);
-	}
-	
-	public float getAverageConsumption() {
-		return getConsumptionFromConsumer() / (float)getAmountfOfGroupNodes();
-	}
-	public float getAverageProduction() {
-		return getProductionFromSupplier() / (float)getAmountfOfGroupNodes();
-	}
-	
-	
-	
-	
-	
-
-	//Generics
-	private <DecoratedObject> DecoratedGroupNode addObject(AbstractCanvasObject modelOfObject, ArrayList<DecoratedObject> listToAdd, DecoratedObject object) {
-		if(modelOfObject.getGroupNode()  != null) {
-			return  createdGroupNodes.get(modelOfObject.getGroupNode());
-		}
-		listToAdd.add(object);
-		return null;
-	}
-
-	public enum Info{
-		Nothing, Parent, Child
-	}
-	private class NodeInfo{
-		public GroupNode groupNode;
-		public Info previous = Info.Nothing;
-		public Info next = Info.Nothing;
-		public GroupNode previousGroupNode = null;
-		public GroupNode nextGroupNode = null;
-		
-		public NodeInfo(GroupNode groupNode) {
-			this.groupNode = groupNode;
-		}
-		public String toString() {
-			return "Previuos: " + previous.toString() + "|Next: " + next.toString();
-		}
-		
-	}
-	public HashMap<GroupNode, DecoratedGroupNode> getCreatedGroupNodes() {
-		return createdGroupNodes;
-	}
-	private class TreeNode<T> {
-		private  TreeNode<T> parentNode;
-		private List<TreeNode<T>> children;
-		private T data;
-		
-		public TreeNode( TreeNode<T> parentNode, List<TreeNode<T>> children, T data) {
-			this.parentNode = parentNode;
-			this.children = children;
-			this.data = data;
-		}
-		
-		//Methods
-		public TreeNode<T> getParent(){
-			return parentNode;
-		}
-		public List<TreeNode<T>> getChildren(){
-			return children;
-		}
-		public T getData() {
-			return data;
-		}
-		public String toString() {
-			return "[" + data.toString() + " Children(" + children.stream().map(Object::toString).collect(Collectors.joining(", ")) + ")]";
-		}
-	}
-	private class TreeGroupNodeData{
-		public GroupNode groupNode;
-		public int layer;
-		public TreeGroupNodeData(GroupNode groupNode, int layer) {
-			this.groupNode = groupNode;
-			this.layer = layer;
-		}
-		public String toString() {
-			return "Layer:" + layer;
-		}
-	}
-	
-	private void addTreeNode(TreeNode<TreeGroupNodeData> node, DecoratedGroupNode dGroupNode, int layer, HashMap<GroupNode, TreeNode<TreeGroupNodeData>> fastaccess) {
-		TreeNode<TreeGroupNodeData> newNode = new TreeNode<TreeGroupNodeData> (node, new ArrayList<TreeNode<TreeGroupNodeData>>() , new TreeGroupNodeData(dGroupNode.getModel(), layer));
-		node.getChildren().add(newNode);
-		fastaccess.put(newNode.data.groupNode, newNode);
-		for(DecoratedGroupNode dGroupNodeIntern: dGroupNode.getGroupNodeList()) {
-			addTreeNode(newNode, dGroupNodeIntern, layer+1, fastaccess);
-		}
-	}
-
-
-	public ArrayList<ExitCable> getExitCableList() {
-		return exitCableList;
-	}
-}
-

+ 4 - 3
src/holeg/ui/view/canvas/Canvas.java

@@ -36,6 +36,7 @@ import holeg.model.HolonObject.HolonObjectState;
 import holeg.model.HolonSwitch;
 import holeg.model.Node;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.Consumer;
 import holeg.ui.model.DecoratedGroupNode;
@@ -369,7 +370,7 @@ public class Canvas extends AbstractCanvas implements MouseListener, MouseMotion
 		g.setColor(Color.lightGray);
 		g.fillRect(pos.getX() - GuiSettings.getPictureScaleDiv2(), pos.getY() - GuiSettings.getPictureScaleDiv2(),
 				GuiSettings.getPictureScale(), GuiSettings.getPictureScale());
-		drawCanvasObject(g, "/images/canvas/group_node.png", pos);
+		drawCanvasObject(g, ImagePreference.Canvas.GroupNode, pos);
 		paintGroupNodeBar(g, dGroupNode, pos);
 	}
 
@@ -512,7 +513,7 @@ public class Canvas extends AbstractCanvas implements MouseListener, MouseMotion
 			paintSwitch(g2d, dSwitch);
 		}
 		for (Node node : visualState.getNodeList()) {
-			drawCanvasObject(g2d, "/images/canvas/node.png", node.getPosition());
+			drawCanvasObject(g2d, ImagePreference.Canvas.Node.Unselected, node.getPosition());
 		}
 
 		// -->oldCode
@@ -554,7 +555,7 @@ public class Canvas extends AbstractCanvas implements MouseListener, MouseMotion
 		if (mayBeReplaced != null) {
 			g2d.setColor(Color.RED);
 			Vec2i pos = mayBeReplaced.getPosition();
-			g2d.drawImage(Import.loadImage("/images/canvas/replace.png"), pos.getX() + GuiSettings.getPictureScaleDiv2(),
+			g2d.drawImage(Import.loadImage(ImagePreference.Canvas.ReplaceSymbol), pos.getX() + GuiSettings.getPictureScaleDiv2(),
 					pos.getY() - GuiSettings.getPictureScale(), GuiSettings.getPictureScaleDiv2(), GuiSettings.getPictureScaleDiv2(), null);
 		}
 		// <-- OldCode

+ 4 - 3
src/holeg/ui/view/component/Console.java

@@ -11,6 +11,7 @@ import javax.swing.JTextArea;
 import javax.swing.JToolBar;
 import javax.swing.text.DefaultCaret;
 
+import holeg.preferences.ImagePreference;
 import holeg.utility.image.Import;
 /**
  * Little new swing object to print data to a console.
@@ -31,16 +32,16 @@ public class Console extends JPanel {
 		this.add(scrollPane, BorderLayout.CENTER);
 		JToolBar toolBar = new JToolBar();
 		toolBar.setFloatable(false);
-		JButton clearButton  = new JButton("", new ImageIcon(Import.loadImage("/images/buttons/clear.png", 24, 24)));
+		JButton clearButton  = new JButton("", new ImageIcon(Import.loadImage(ImagePreference.Button.Console.Clear, 24, 24)));
 		clearButton.setToolTipText("Clear Console");
 		clearButton.addActionListener(actionEvent -> clear());
 		toolBar.add(clearButton);
 		toolBar.add(Box.createHorizontalGlue());
-		JButton topButton = new JButton("", new ImageIcon(Import.loadImage("/images/buttons/top.png", 24, 24)));
+		JButton topButton = new JButton("", new ImageIcon(Import.loadImage(ImagePreference.Button.Console.Top, 24, 24)));
 		topButton.setToolTipText("Scroll to top");
 		topButton.addActionListener(actionEvent -> scrollToTop());
 		toolBar.add(topButton);
-		JButton botButton = new JButton("", new ImageIcon(Import.loadImage("/images/buttons/bottom.png", 24, 24)));
+		JButton botButton = new JButton("", new ImageIcon(Import.loadImage(ImagePreference.Button.Console.Bottom, 24, 24)));
 		botButton.setToolTipText("Scroll to bottom");
 		botButton.addActionListener(actionEvent -> scrollToBottom());
 		toolBar.add(botButton);

+ 2 - 1
src/holeg/ui/view/dialog/AboutUsPopUp.java

@@ -2,6 +2,7 @@ package holeg.ui.view.dialog;
 
 import javax.swing.*;
 
+import holeg.preferences.ImagePreference;
 import holeg.utility.image.Import;
 
 import java.awt.*;
@@ -56,7 +57,7 @@ public class AboutUsPopUp extends JFrame {
         contentPanel2.setLayout(new BoxLayout(contentPanel2, BoxLayout.Y_AXIS));
         contentPanel3.setLayout(new BoxLayout(contentPanel3, BoxLayout.Y_AXIS));
         
-        this.setIconImage(Import.loadImage("/images/logo/holeg.png",30,30));
+        this.setIconImage(Import.loadImage(ImagePreference.Logo,30,30));
         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         setBounds(100, 100, 500, 800);
         setLocationRelativeTo(parentFrame);

+ 2 - 1
src/holeg/ui/view/dialog/AddElementPopUp.java

@@ -19,6 +19,7 @@ import javax.swing.border.EmptyBorder;
 import holeg.model.HolonElement;
 import holeg.model.HolonObject;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.utility.image.Import;
 
 /**
@@ -55,7 +56,7 @@ public class AddElementPopUp extends JDialog {
 	 */
 	AddElementPopUp(JFrame parentFrame) {
 		super((java.awt.Frame) null, true);
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
 		setBounds(100, 100, 400, 245);
 		setLocationRelativeTo(parentFrame);

+ 2 - 1
src/holeg/ui/view/dialog/AddObjectPopUp.java

@@ -35,6 +35,7 @@ import holeg.model.AbstractCanvasObject;
 import holeg.model.HolonElement;
 import holeg.model.HolonObject;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.utility.image.Import;
 
@@ -74,7 +75,7 @@ public class AddObjectPopUp extends JDialog {
 
 		toEdit = obj;
 		editState = edit;
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		setBounds(100, 100, 450, 342);
 		setLocationRelativeTo(parentFrame);
 		getContentPane().setLayout(new BorderLayout());

+ 2 - 1
src/holeg/ui/view/dialog/CanvasResizePopUp.java

@@ -2,6 +2,7 @@ package holeg.ui.view.dialog;
 
 import javax.swing.*;
 
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.ui.model.Model;
@@ -35,7 +36,7 @@ public class CanvasResizePopUp extends JDialog {
 		this.canvas = canvas;
 
 		// properties and stuff
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png",30,30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo,30,30));
 		this.setTitle("Set the Size of the View");
 		setBounds(200, 100, 200, 100);
         setLocationRelativeTo(parentFrame);

+ 2 - 1
src/holeg/ui/view/dialog/CreateTemplatePopUp.java

@@ -21,6 +21,7 @@ import javax.swing.filechooser.FileNameExtensionFilter;
 
 import holeg.model.HolonElement;
 import holeg.model.HolonObject;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.ui.model.Model;
@@ -112,7 +113,7 @@ public class CreateTemplatePopUp extends JDialog {
 		/*
 		 * create Frame and GUI
 		 */
-		setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		setBounds(100, 100, 476, 344);
 		setLocationRelativeTo(parentFrame);
 		getContentPane().setLayout(new BorderLayout());

+ 4 - 3
src/holeg/ui/view/inspector/Inspector.java

@@ -23,6 +23,7 @@ import javax.swing.JToolBar;
 import holeg.interfaces.TimelineDependent;
 import holeg.model.HolonElement;
 import holeg.model.HolonSwitch;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.utility.image.Import;
@@ -45,11 +46,11 @@ public class Inspector extends JSplitPane {
 	private final JToolBar toolBarGraph = new JToolBar();
 	private String[] comboContext = { "", "5", "10", "20", "100", "1000" };
 	private JComboBox<String> localPeriodInput = new JComboBox<String>(comboContext);
-	private JButton resetButton = new JButton("", new ImageIcon(Import.loadImage("/images/buttons/reset_circle.png")));
-	private final ImageIcon localPeriodButtonImageEnabled = new ImageIcon(Import.loadImage("/images/buttons/graph.png"));
+	private JButton resetButton = new JButton("", new ImageIcon(Import.loadImage(ImagePreference.Button.Inspector.Reset)));
+	private final ImageIcon localPeriodButtonImageEnabled = new ImageIcon(Import.loadImage(ImagePreference.Button.Inspector.Graph));
 
 	private final ImageIcon localPeriodButtonImageDisabled = new ImageIcon(
-			GrayFilter.createDisabledImage(Import.loadImage("/images/buttons/graph.png")));
+			GrayFilter.createDisabledImage(Import.loadImage(ImagePreference.Button.Inspector.Graph)));
 	private JButton localPeriodButton = new JButton("", localPeriodButtonImageEnabled);
 
 	public Inspector(Control control) {

+ 6 - 5
src/holeg/ui/view/main/GUI.java

@@ -69,6 +69,7 @@ import holeg.model.GroupNode;
 import holeg.model.HolonObject;
 import holeg.model.HolonSwitch;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.ui.model.IdCounter;
@@ -508,7 +509,7 @@ public class GUI {
 
 		holegJFrame.setJMenuBar(menuBar);
 
-		holegJFrame.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		holegJFrame.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 
 		menuBar.add(mnNewMenu);
 
@@ -716,7 +717,7 @@ public class GUI {
 				if (label.getText().isEmpty()) {
 					label.setText(value.toString());
 					if (!value.toString().equals("Categories")) {
-						label.setIcon(new ImageIcon(Import.loadImage("/images/buttons/folder.png")));
+						label.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Category.Folder)));
 					}
 				}
 
@@ -1279,7 +1280,7 @@ public class GUI {
 		menuBar.add(menuWindow);
 		// Algo
 		JMenuItem openMenu = new JMenuItem("Open Algorithm Panel", new ImageIcon(Import
-				.loadImage("/images/buttons/algo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
+				.loadImage(ImagePreference.Button.Menu.Algo).getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
 		openMenu.addActionListener(actionEvent -> {
 			new AddOnWindow(holegJFrame, control);
 		});
@@ -1287,7 +1288,7 @@ public class GUI {
 		menuWindow.add(openMenu);
 		// Outliner
 		JMenuItem openOutliner = new JMenuItem("Open Outliner", new ImageIcon(Import
-				.loadImage("/images/buttons/outliner.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
+				.loadImage(ImagePreference.Button.Menu.Outliner).getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
 		openOutliner.addActionListener(actionEvent -> {
 			new Outliner(holegJFrame, model, control);
 		});
@@ -1296,7 +1297,7 @@ public class GUI {
 		menuWindow.add(openOutliner);
 		// FlexWindow
 		JMenuItem openFlexMenuItem = new JMenuItem("Open Flexibility Panel", new ImageIcon(Import
-				.loadImage("/images/buttons/algo.png").getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
+				.loadImage(ImagePreference.Button.Menu.Algo).getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
 		openFlexMenuItem.addActionListener(actionEvent -> {
 			new FlexWindow(holegJFrame, control);
 		});

+ 8 - 7
src/holeg/ui/view/main/TimePanel.java

@@ -34,6 +34,7 @@ import javax.swing.event.ChangeListener;
 import javax.swing.plaf.basic.BasicSliderUI;
 
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.GuiSettings;
 import holeg.utility.image.Import;
@@ -159,13 +160,13 @@ public class TimePanel extends JPanel implements ActionListener {
 		playBtn.setContentAreaFilled(false);
 		playBtn.setBorderPainted(false);
 		playBtn.setBorder(null);
-		playBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/play.png", 30, 30)));
+		playBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Play, 30, 30)));
 		playBtn.addActionListener(clicked -> play());
 		timeResetBtn.setToolTipText("Reset");
 
 		timeResetBtn.setContentAreaFilled(false);
 		timeResetBtn.setBorder(null);
-		timeResetBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/reset.png", 30, 30)));
+		timeResetBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Reset, 30, 30)));
 		timeResetBtn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent ae) {
 				timeSlider.setValue(timeSlider.getMinimum());
@@ -181,7 +182,7 @@ public class TimePanel extends JPanel implements ActionListener {
 
 		timeForwardBtn.setContentAreaFilled(false);
 		timeForwardBtn.setBorder(null);
-		timeForwardBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/forward.png", 30, 30)));
+		timeForwardBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Forward, 30, 30)));
 		timeForwardBtn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent ae) {
 				timeSlider.setValue(timeSlider.getValue() + 1);
@@ -191,7 +192,7 @@ public class TimePanel extends JPanel implements ActionListener {
 		timeBackwardBtn.setToolTipText("Backward");
 
 		timeBackwardBtn.setBorder(null);
-		timeBackwardBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/backward.png", 30, 30)));
+		timeBackwardBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Backward, 30, 30)));
 		timeBackwardBtn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent ae) {
 				timeSlider.setValue(timeSlider.getValue() - 1);
@@ -327,7 +328,7 @@ public class TimePanel extends JPanel implements ActionListener {
 		timer.setDelay(GuiSettings.timerSpeed);
 		if (timeSlider.getValue() >= control.getModel().getMaxIterations() - 1) {
 			running = false;
-			playBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/play.png", 30, 30)));
+			playBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Play, 30, 30)));
 			timer.stop();
 		}
 	}
@@ -339,10 +340,10 @@ public class TimePanel extends JPanel implements ActionListener {
 		if (running) {
 			timer.setDelay(GuiSettings.timerSpeed);
 			timer.start();
-			playBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/pause.png", 30, 30)));
+			playBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Pause, 30, 30)));
 		} else {
 			timer.stop();
-			playBtn.setIcon(new ImageIcon(Import.loadImage("/images/buttons/play.png", 30, 30)));
+			playBtn.setIcon(new ImageIcon(Import.loadImage(ImagePreference.Button.TimePanel.Play, 30, 30)));
 		}
 	}
 	

+ 2 - 1
src/holeg/ui/view/window/AddOnWindow.java

@@ -26,6 +26,7 @@ import javax.tools.JavaCompiler;
 import javax.tools.ToolProvider;
 
 import holeg.api.AddOn;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.utility.image.Import;
 
@@ -38,7 +39,7 @@ public class AddOnWindow extends JFrame{
 		this.setTitle("Add-Ons");
 		this.setVisible(true);
 		this.setContentPane(content);
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		initMenuBar();
 		initDefaultContentPanel();
 		this.pack();

+ 2 - 1
src/holeg/ui/view/window/FlexWindow.java

@@ -56,6 +56,7 @@ import holeg.model.HolonElement;
 import holeg.model.HolonElement.Priority;
 import holeg.model.HolonObject;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.Model;
 import holeg.utility.image.Import;
@@ -110,7 +111,7 @@ public class FlexWindow extends JFrame {
 
 	private void initWindowPanel(JFrame parentFrame) {
 		this.setBounds(0, 0, 400, parentFrame.getHeight()>20?parentFrame.getHeight()- 20:parentFrame.getHeight());
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		this.setTitle("Flexibility");
 		this.setLocationRelativeTo(parentFrame);
 		this.setVisible(true);

+ 2 - 1
src/holeg/ui/view/window/Outliner.java

@@ -19,6 +19,7 @@ import javax.swing.tree.DefaultTreeCellRenderer;
 import holeg.model.AbstractCanvasObject;
 import holeg.model.Edge;
 import holeg.preferences.ColorPreference;
+import holeg.preferences.ImagePreference;
 import holeg.ui.controller.Control;
 import holeg.ui.model.Consumer;
 import holeg.ui.model.DecoratedNetwork;
@@ -46,7 +47,7 @@ public class Outliner extends JFrame {
 	Runnable update = this::update;
 	public Outliner(JFrame parentFrame, Model model, Control control){ 
 		setBounds(0, 0, 400, parentFrame.getHeight());
-		this.setIconImage(Import.loadImage("/images/logo/holeg.png", 30, 30));
+		this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
 		this.setTitle("Outliner");
 		setLocationRelativeTo(parentFrame);
 		this.setVisible(true);

+ 3 - 1
src/holeg/utility/image/Import.java

@@ -9,6 +9,8 @@ import java.io.InputStream;
 import java.util.HashMap;
 import javax.imageio.ImageIO;
 
+import holeg.preferences.ImagePreference;
+
 /**
  * 
  * @author TU-Darmstadt BP Gruppe 7 WS17/18 Centralized resource loading methods
@@ -111,7 +113,7 @@ public class Import {
 			}
 			f = new File(url);// Possible bug with duplicate names.
 			if (!f.exists()) {
-				url = "res/images/canvas/image_not_found.png";
+				url = "res" + ImagePreference.Canvas.ImageNotFound;
 			}
 			return new FileInputStream(url);