Jelajahi Sumber

Canvas draw the CpsObjects from Model and each CpsObject has its unique ID-Number

Edgardo Palza 8 tahun lalu
induk
melakukan
99bcfbc9ad

TEMPAT SAMPAH
bin/Interfaces/ObjectListener.class


TEMPAT SAMPAH
bin/ui/controller/Control.class


TEMPAT SAMPAH
bin/ui/controller/ObjectControl.class


TEMPAT SAMPAH
bin/ui/model/Model.class


TEMPAT SAMPAH
bin/ui/view/GUI$1.class


TEMPAT SAMPAH
bin/ui/view/GUI$2.class


TEMPAT SAMPAH
bin/ui/view/GUI$3.class


TEMPAT SAMPAH
bin/ui/view/GUI$4.class


TEMPAT SAMPAH
bin/ui/view/GUI$5.class


TEMPAT SAMPAH
bin/ui/view/GUI$6.class


TEMPAT SAMPAH
bin/ui/view/GUI.class


TEMPAT SAMPAH
bin/ui/view/Main$1.class


TEMPAT SAMPAH
bin/ui/view/Main.class


TEMPAT SAMPAH
bin/ui/view/MyCanvas.class


+ 7 - 0
src/Interfaces/ObjectListener.java

@@ -0,0 +1,7 @@
+package Interfaces;
+
+import java.util.ArrayList;
+
+public interface ObjectListener {
+	public void onChange(ArrayList<classes.CpsObject> objects);
+}

+ 27 - 27
src/ui/controller/Control.java

@@ -13,70 +13,70 @@ import ui.model.Model;
 import ui.view.GUI;
 
 public class Control {
-	
+
 	public enum command {
 		CATEGORY, OBJECT
 	}
 
-	
 	private IdCounter iD;
 	private Model model;
 	private ActionListener actionListener;
 	private final CategoryController categoryController;
-	
-	public Control(Model model, IdCounter id){
+	private final ObjectControl objectControl;
+
+	public Control(Model model, IdCounter id) {
 		this.model = model;
 		this.iD = id;
 		this.categoryController = new CategoryController(model, id);
+		this.objectControl = new ObjectControl(model);
+	}
+
+	public void addObject(CpsObject object) {
+		objectControl.addObject(object);
 	}
-	
-	
-	
-	
+
 	////////// Operations for Categories and Objects ///////////
-	public void addNewCategory(String catName){
+	public void addNewCategory(String catName) {
 		categoryController.addNewCategory(catName);
 	}
-	
-	public void addNewObject(Category cat, String name){
+
+	public void addNewObject(Category cat, String name) {
 		categoryController.addNewHolonObject(cat, name);
 	}
-	
-	public void addNewTransformer(Category cat, String name){
+
+	public void addNewTransformer(Category cat, String name) {
 		categoryController.addNewHolonTransformer(cat, name);
 	}
-	
-	public void addNewSwitch(Category cat, String name){
+
+	public void addNewSwitch(Category cat, String name) {
 		categoryController.addNewHolonSwitch(cat, name);
 	}
-	
+
 	public Category searchCategory(String name) {
-		
+
 		return categoryController.searchCatNode(name);
 	}
-	
+
 	public void initListener(CategoryListener catLis) {
 		categoryController.addCatListener(catLis);
 	}
-	
-	public void deleteCategory(String catName){
+
+	public void deleteCategory(String catName) {
 		categoryController.deleteCategory(catName);
 	}
-	
-	public void deleteObjectInCat(String toDelete, String deleteIn){
+
+	public void deleteObjectInCat(String toDelete, String deleteIn) {
 		categoryController.deleteObjectInCat(toDelete, deleteIn);
 	}
-	
-	
+
 	////////// etc
 	/**
 	 * Getter for Model
+	 * 
 	 * @return
 	 */
 	public Model getModel() {
 		return model;
 	}
-	
-	
-	
+
 }

+ 26 - 1
src/ui/controller/ObjectControl.java

@@ -1,6 +1,9 @@
 package ui.controller;
 
-import ui.model.*;
+import classes.CpsObject;
+import ui.model.IdCounter;
+import ui.model.Model;
+import Interfaces.ObjectListener;
 
 public class ObjectControl {
 
@@ -12,4 +15,26 @@ public class ObjectControl {
 		ID = IdCounter.nextId();
 	}
 
+	/**
+	 * Add an CpsObject to the model and notify the ObjectListener for update.
+	 * 
+	 * @param object
+	 *            CpsObject to be added.
+	 */
+	public void addObject(CpsObject object) {
+		String name = object.getName();
+		M.getObjectsOnCanvas().add(object);
+		notifyObjListeners();
+		System.out.println("Added: " + name);
+	}
+
+	/**
+	 * notifies all listeners about changes in the Categories
+	 */
+	public void notifyObjListeners() {
+		for (ObjectListener l : M.getObjectListeners()) {
+			l.onChange(M.getObjectsOnCanvas());
+		}
+	}
+
 }

+ 21 - 3
src/ui/model/Model.java

@@ -1,6 +1,7 @@
 package ui.model;
 
 import Interfaces.CategoryListener;
+import Interfaces.ObjectListener;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -16,16 +17,19 @@ public class Model {
 	private int HEIGHT;
 	private int WIDTH;
 	/*
-	 * Array of all categories in the model. It is set by default with the categories ENERGY, BUILDINGS and COMPONENTS
+	 * Array of all categories in the model. It is set by default with the
+	 * categories ENERGY, BUILDINGS and COMPONENTS
 	 */
 	private ArrayList<Category> categories;
 	private ArrayList<CpsObject> objectsOnCanvas;
 	private List<CategoryListener> categoryListeners;
+	private List<ObjectListener> objectListeners;
 
-	public Model(){
+	public Model() {
 		setCategories(new ArrayList<Category>());
 		setObjectsOnCanvas(new ArrayList<CpsObject>());
 		setCategoryListeners(new LinkedList<CategoryListener>());
+		setObjectListeners(new LinkedList<ObjectListener>());
 	}
 
 	/**
@@ -55,10 +59,24 @@ public class Model {
 	 *            the objectsOnCanvas to set
 	 */
 	public void setObjectsOnCanvas(ArrayList<CpsObject> objectsOnCanvas) {
-		System.out.println(objectsOnCanvas);
 		this.objectsOnCanvas = objectsOnCanvas;
 	}
 
+	/**
+	 * @return the objectListeners
+	 */
+	public List<ObjectListener> getObjectListeners() {
+		return objectListeners;
+	}
+
+	/**
+	 * @param linkedList
+	 *            the objectListeners to set
+	 */
+	public void setObjectListeners(LinkedList<ObjectListener> linkedList) {
+		this.objectListeners = linkedList;
+	}
+
 	/**
 	 * @return the categoryListeners
 	 */

+ 97 - 99
src/ui/view/GUI.java

@@ -75,8 +75,6 @@ public class GUI implements CategoryListener {
 	private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 	private final JScrollPane scrollPane_2 = new JScrollPane();
 
-	private final MyCanvas canvas = new MyCanvas();
-
 	private final JTree tree = new JTree();
 	private final JEditorPane dtrpnHereWillBe = new JEditorPane();
 	private final JSplitPane splitPane_2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
@@ -95,10 +93,11 @@ public class GUI implements CategoryListener {
 	private final JButton btnDel = new JButton("-");
 
 	private final JToolBar toolBar = new JToolBar();
-	
-	//variables
+
+	// variables
 	boolean dragging = false;
-	
+
+	private final MyCanvas canvas;
 
 	/**
 	 * Create the application.
@@ -106,6 +105,7 @@ public class GUI implements CategoryListener {
 	public GUI(Control control) {
 		this.controller = control;
 		this.model = control.getModel();
+		this.canvas = new MyCanvas(model);
 		control.initListener(this);
 		initialize();
 	}
@@ -171,8 +171,11 @@ public class GUI implements CategoryListener {
 		scrollPane_3.setViewportView(table_2);
 
 		table_2.setFillsViewportHeight(true);
-		table_2.setModel(new DefaultTableModel(new Object[][] { { "Solar", "23", "10" }, { "Generator", "24", "1" },
-				{ "Something Else", "25", "3" }, }, new String[] { "Producer", "Units", "Number" }));
+		table_2.setModel(
+				new DefaultTableModel(
+						new Object[][] { { "Solar", "23", "10" }, { "Generator", "24", "1" },
+								{ "Something Else", "25", "3" }, },
+						new String[] { "Gadget", "Production", "Quantity" }));
 		table_2.getColumnModel().getColumn(0).setPreferredWidth(103);
 		table_2.getColumnModel().getColumn(1).setPreferredWidth(107);
 		table_2.getColumnModel().getColumn(2).setPreferredWidth(125);
@@ -180,72 +183,68 @@ public class GUI implements CategoryListener {
 		splitPane_2.setDividerLocation(200);
 
 		splitPane.setLeftComponent(scrollPane_1);
-		final Image img = new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(30, 30, java.awt.Image.SCALE_SMOOTH);
+		final Image img = new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
+				.getScaledInstance(30, 30, java.awt.Image.SCALE_SMOOTH);
 		Icon icon = new ImageIcon(img);
-		DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
-        renderer.setLeafIcon(icon);
-        //renderer.setClosedIcon(icon);
-        //renderer.setOpenIcon(icon);
-        tree.setRowHeight(icon.getIconHeight());
+		DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();
+		renderer.setLeafIcon(icon);
+		// renderer.setClosedIcon(icon);
+		// renderer.setOpenIcon(icon);
+		tree.setRowHeight(icon.getIconHeight());
 		tree.setCellRenderer(renderer);
-		
-		//Tree Drag and Drop
+
+		// Tree Drag and Drop
 		TransferHandler transfer = new TransferHandler("text");
-		
-		//add a MouseListener to initiate the Drag on the appropriate
-		//MouseEvent
-		/*tree.addMouseMotionListener(new MouseAdapter(){
-			 	public void mouseDragged(MouseEvent e) {
-		            	System.out.println("Drag");
-		            	Image img = null;
-		            	try {
-		            		URL url = new URL("https://cdn4.iconfinder.com/data/icons/buildings-filled-1/60/house-home-building-construction-32.png");
-		                  	img = ImageIO.read(url);
-		            	} catch (IOException e1) {
-		            		System.out.println("Failed to load the Image!");
-		            	}
-		                JTree treep = (JTree)e.getSource();
-		                TransferHandler handle = treep.getTransferHandler();
-		                handle.setDragImage(img);
-		                handle.exportAsDrag(treep, e, TransferHandler.MOVE);
-		            }
-		        });*/
-		tree.addMouseListener(new MouseAdapter(){
-            public void mouseReleased(MouseEvent e){
-                	try {
-                		if(dragging){
-                			HolonObject h = new HolonObject("House");
-                			h.setPos((int)canvas.getMousePosition().getX(),(int)canvas.getMousePosition().getY());
-                			canvas.choords.add(h);
-                			canvas.repaint();
-                			
-                			System.out.println(model.getObjectsOnCanvas());
-                			dragging = false;
-                		}
-					} catch (Exception e2) {}
-                	frmCyberPhysical.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
-	            }
-	        });
-		
-		
+
+		// add a MouseListener to initiate the Drag on the appropriate
+		// MouseEvent
+		/*
+		 * tree.addMouseMotionListener(new MouseAdapter(){ public void
+		 * mouseDragged(MouseEvent e) { System.out.println("Drag"); Image img =
+		 * null; try { URL url = new URL(
+		 * "https://cdn4.iconfinder.com/data/icons/buildings-filled-1/60/house-home-building-construction-32.png"
+		 * ); img = ImageIO.read(url); } catch (IOException e1) {
+		 * System.out.println("Failed to load the Image!"); } JTree treep =
+		 * (JTree)e.getSource(); TransferHandler handle =
+		 * treep.getTransferHandler(); handle.setDragImage(img);
+		 * handle.exportAsDrag(treep, e, TransferHandler.MOVE); } });
+		 */
+		tree.addMouseListener(new MouseAdapter() {
+			public void mouseReleased(MouseEvent e) {
+				try {
+					if (dragging) {
+						HolonObject h = new HolonObject("House");
+						h.setPos((int) canvas.getMousePosition().getX(), (int) canvas.getMousePosition().getY());
+						controller.addObject(h);
+						canvas.repaint();
+						dragging = false;
+					}
+				} catch (Exception e2) {
+				}
+				frmCyberPhysical.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+			}
+		});
+
 		tree.addTreeSelectionListener(new TreeSelectionListener() {
 			@Override
 			public void valueChanged(TreeSelectionEvent e) {
 				try {
 					String name = tree.getLastSelectedPathComponent().toString();
 					System.out.println(name);
-                    tree.clearSelection();
-                    if(name.compareTo("Power Plant")==0 || name.compareTo("House")==0 || name.compareTo("Switch")==0 || name.compareTo("Transformer")==0){
-                    	dragging = true;
-                		Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0,0), "red Cursor"); 
-                    	frmCyberPhysical.setCursor(cursor);
-                    }
+					tree.clearSelection();
+					if (name.compareTo("Power Plant") == 0 || name.compareTo("House") == 0
+							|| name.compareTo("Switch") == 0 || name.compareTo("Transformer") == 0) {
+						dragging = true;
+						Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0),
+								"red Cursor");
+						frmCyberPhysical.setCursor(cursor);
+					}
 				} catch (Exception e2) {
 					// TODO: handle exception
 				}
 			}
 		});
-		
+
 		scrollPane_1.setViewportView(tree);
 
 		scrollPane_1.setColumnHeaderView(panel);
@@ -263,25 +262,25 @@ public class GUI implements CategoryListener {
 				Object nodeInfo = tree.getLastSelectedPathComponent();
 				String selectedOption = comboBox.getSelectedItem().toString();
 				DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo;
-				
-				switch(selectedOption){
-				
-					case "Category":
-						String catName = JOptionPane.showInputDialog("Please enter a Name for Category ");
-						if(catName.length() != 0){
+
+				switch (selectedOption) {
+
+				case "Category":
+					String catName = JOptionPane.showInputDialog("Please enter a Name for Category ");
+					if (catName.length() != 0) {
 						controller.addNewCategory(catName);
-						}
-						break;
-							
-					default :
-						addObjectPopUP = new AddObjectPopUp();
-						addObjectPopUP.setVisible(true);
-						addObjectAction(selectedOption, selectedNode);
-						break;
+					}
+					break;
+
+				default:
+					addObjectPopUP = new AddObjectPopUp();
+					addObjectPopUP.setVisible(true);
+					addObjectAction(selectedOption, selectedNode);
+					break;
 				}
 			}
 		});
-		
+
 		toolBar.add(btnAdd);
 
 		// Del Button
@@ -292,18 +291,16 @@ public class GUI implements CategoryListener {
 				DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo;
 				String nodeName = selectedNode.getUserObject().toString();
 				int depthOfNode = selectedNode.getLevel();
-				
-				switch(depthOfNode){
+
+				switch (depthOfNode) {
 				case 1:
 					controller.deleteCategory(nodeName);
 					break;
 				case 2:
 					DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();
-					controller.deleteObjectInCat(nodeName,parent.getUserObject().toString());
+					controller.deleteObjectInCat(nodeName, parent.getUserObject().toString());
 					break;
 				}
-				
-
 
 			}
 		});
@@ -327,36 +324,37 @@ public class GUI implements CategoryListener {
 		});
 
 	}
-	
+
 	/*
-	 * adds a specific object type to selected Category 
-	 * also handles input windows and illegal inputs
+	 * adds a specific object type to selected Category also handles input
+	 * windows and illegal inputs
 	 */
-	public void addObjectAction(String objType, DefaultMutableTreeNode selectedNode){
-		if(selectedNode == null){
-			JOptionPane.showMessageDialog(new JFrame(), "Please select a Category first before adding " + objType + ".");
+	public void addObjectAction(String objType, DefaultMutableTreeNode selectedNode) {
+		if (selectedNode == null) {
+			JOptionPane.showMessageDialog(new JFrame(),
+					"Please select a Category first before adding " + objType + ".");
 		}
-		//if selected node is a directory for Categories
-		else{
-			if(selectedNode.getLevel()==1){
+		// if selected node is a directory for Categories
+		else {
+			if (selectedNode.getLevel() == 1) {
 				String objname = JOptionPane.showInputDialog("Please enter a Name for the " + objType);
 				Category cat = controller.searchCategory(selectedNode.getUserObject().toString());
-				switch(objType){
-				
-				case "Object": 
-					controller.addNewObject( cat , objname);
+				switch (objType) {
+
+				case "Object":
+					controller.addNewObject(cat, objname);
 					break;
-				
-				case "Switch" :
+
+				case "Switch":
 					controller.addNewSwitch(cat, objname);
-					
-				case "Transformer" :
+
+				case "Transformer":
 					controller.addNewTransformer(cat, objname);
 				}
+			} else {
+				JOptionPane.showMessageDialog(new JFrame(),
+						"Objects can not be added to Objects. Please select a Category.");
 			}
-			else{
-				JOptionPane.showMessageDialog(new JFrame(), "Objects can not be added to Objects. Please select a Category.");
-				}
 		}
 	}
 

+ 4 - 6
src/ui/view/Main.java

@@ -25,12 +25,10 @@ public class Main {
 		EventQueue.invokeLater(new Runnable() {
 			public void run() {
 				try {
-					IdCounter 	ID = new IdCounter();
-					Model 		M = new Model();
-					Control 	C = new Control(M, ID);
-					GUI 		V = new GUI(C);
-					
-
+					IdCounter ID = new IdCounter();
+					Model M = new Model();
+					Control C = new Control(M, ID);
+					GUI V = new GUI(C);
 
 					V.updateCategories(M.getCategories());
 					V.getFrmCyberPhysical().setVisible(true);

+ 64 - 63
src/ui/view/MyCanvas.java

@@ -5,6 +5,7 @@ import java.awt.Image;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
+import java.util.ArrayList;
 import java.util.LinkedList;
 
 import javax.swing.ImageIcon;
@@ -14,111 +15,111 @@ import javax.swing.JPopupMenu;
 
 import classes.CpsObject;
 import classes.HolonObject;
+import ui.model.*;
 
-class MyCanvas extends JPanel implements MouseListener, MouseMotionListener 
-{
-	private Image img = null;      // Contains the image to draw on MyCanvas
+class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
+	private Image img = null; // Contains the image to draw on MyCanvas
 	private int x = 0;
 	private int y = 0;
-	LinkedList<CpsObject> choords = new LinkedList<>();
+	ArrayList<CpsObject> choords;
 	boolean dragging = false;
 	boolean dropDelete = false;
 	CpsObject tempCPS = null;
-	
-	//PopUpMenu
+
+	// PopUpMenu
 	JPopupMenu popmenu = new JPopupMenu();
 	JMenuItem itemDelete = new JMenuItem("Delete Object");
-	
-	
-    public MyCanvas()
-    {
-    	popmenu.add(itemDelete);
-    	itemDelete.setEnabled(false);
-    	img = new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(30, 30, java.awt.Image.SCALE_SMOOTH);
-    	
-        this.addMouseListener(this);
-        this.addMouseMotionListener(this);
-    }
-
-    public void paintComponent(Graphics g)
-    {
-        // Draws the image to the canvas
-    	super.paintComponent(g);
-    	for (CpsObject cps : choords){
-    		g.drawImage(img, cps.getPos().x, cps.getPos().y, null);
-    	}
-    }
+
+	public MyCanvas(Model model) {
+		popmenu.add(itemDelete);
+		itemDelete.setEnabled(false);
+		img = new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(30, 30,
+				java.awt.Image.SCALE_SMOOTH);
+		choords = model.getObjectsOnCanvas();
+		this.addMouseListener(this);
+		this.addMouseMotionListener(this);
+	}
+
+	public void paintComponent(Graphics g) {
+		// Draws the image to the canvas
+		super.paintComponent(g);
+		for (CpsObject cps : choords) {
+			g.drawImage(img, cps.getPos().x, cps.getPos().y, null);
+		}
+	}
 
 	@Override
 	public void mouseClicked(MouseEvent e) {
 		// TODO Auto-generated method stub
-		
+
 	}
 
 	@Override
 	public void mouseEntered(MouseEvent e) {
 		// TODO Auto-generated method stub
-		
+
 	}
 
 	@Override
 	public void mouseExited(MouseEvent e) {
 		// TODO Auto-generated method stub
-		
+
 	}
 
 	@Override
 	public void mousePressed(MouseEvent e) {
 		// TODO Auto-generated method stub
 		x = e.getX();
-        y = e.getY();
-        dropDelete = false;
-        for (CpsObject cps : choords){
-        	int cx = cps.getPos().x;
-        	int cy = cps.getPos().y;
-        	if (x-img.getWidth(null)<=cx && y-img.getHeight(null) <=cy&& x+img.getWidth(null)>=cx && y+img.getHeight(null)>= cy) {
-        		tempCPS = cps;
-        		if(e.getButton() == e.BUTTON1){
-        			dragging = true;
-        		} else {
-        			dropDelete = true;
-        		}
-        	}
-        }
-        
+		y = e.getY();
+		dropDelete = false;
+		for (CpsObject cps : choords) {
+			int cx = cps.getPos().x;
+			int cy = cps.getPos().y;
+			if (x - img.getWidth(null) <= cx && y - img.getHeight(null) <= cy && x + img.getWidth(null) >= cx
+					&& y + img.getHeight(null) >= cy) {
+				tempCPS = cps;
+				if (e.getButton() == e.BUTTON1) {
+					dragging = true;
+				} else {
+					dropDelete = true;
+				}
+			}
+		}
+
 	}
 
 	@Override
-	public void mouseReleased(MouseEvent e) {        
-        if(dragging){
-        	x = e.getX();
-            y = e.getY();
-        	dragging = false;
-        	tempCPS.setPos(e.getX()-15, e.getY()-15);
-        	tempCPS = null;
-        	repaint();
-        }
-        //Rechtsklick Liste
-        if(e.getButton() == e.BUTTON3){
-        	if(dropDelete) itemDelete.setEnabled(true);
-        	popmenu.show( e.getComponent(), e.getX(), e.getY() ); 
-        	
-        }
+	public void mouseReleased(MouseEvent e) {
+		if (dragging) {
+			x = e.getX();
+			y = e.getY();
+			dragging = false;
+			tempCPS.setPos(e.getX() - 15, e.getY() - 15);
+			tempCPS = null;
+			repaint();
+		}
+		// Rechtsklick Liste
+		if (e.getButton() == e.BUTTON3) {
+			if (dropDelete)
+				itemDelete.setEnabled(true);
+			popmenu.show(e.getComponent(), e.getX(), e.getY());
+
+		}
 	}
 
 	@Override
 	public void mouseDragged(MouseEvent e) {
 		// TODO Auto-generated method stub
-		if(dragging){
-			tempCPS.setPos(e.getX()-15, e.getY()-15);
+		if (dragging) {
+			tempCPS.setPos(e.getX() - 15, e.getY() - 15);
 			repaint();
-			System.out.println("drag: "+e.getX()+" "+e.getY());
+			System.out.println("drag: " + e.getX() + " " + e.getY());
 		}
 	}
 
 	@Override
 	public void mouseMoved(MouseEvent e) {
 		// TODO Auto-generated method stub
-		
+
 	}
 }