Browse Source

HolonElement Back-End Control and Merge
Merge branch 'Ohne_Drag_and_Drop' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons into Ohne_Drag_and_Drop

# Conflicts:
# bin/ui/controller/ObjectControl.class
# src/ui/controller/ObjectControl.java

Teh-Hai Julian Zheng 8 years ago
parent
commit
523d6f7bae

BIN
bin/classes/HolonElement.class


BIN
bin/ui/controller/Control.class


BIN
bin/ui/model/Model.class


BIN
bin/ui/view/AddElementPopUp.class


BIN
bin/ui/view/AddObjectPopUp.class


BIN
bin/ui/view/GUI$1.class


BIN
bin/ui/view/GUI$2.class


BIN
bin/ui/view/GUI$3.class


BIN
bin/ui/view/GUI$4.class


BIN
bin/ui/view/GUI$5.class


BIN
bin/ui/view/GUI$6.class


BIN
bin/ui/view/GUI.class


BIN
bin/ui/view/MyCanvas.class


+ 1 - 1
src/classes/GlobalVariables.java

@@ -1,5 +1,5 @@
 package classes;
 
 public class GlobalVariables {
-	public static int SCALE = 70;
+	public static int SCALE = 75;
 }

+ 1 - 1
src/classes/HolonElement.java

@@ -17,7 +17,7 @@ public class HolonElement {
 
 	
 	
-	public HolonElement(String eleName, int amount, float energy) {
+	public HolonElement(String eleName, float energy, int amount) {
 		setEleName(eleName);
 		setAmount(amount);
 		setEnergy(energy);

+ 4 - 0
src/ui/controller/Control.java

@@ -69,6 +69,10 @@ public class Control {
 		categoryController.deleteObjectInCat(toDelete, deleteIn);
 	}
 
+	public void setSelectedObjectID(int id){
+		objectControl.setSelectedObjectID(id);
+	}
+
 	////////// etc
 	/**
 	 * Getter for Model

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

@@ -79,7 +79,12 @@ public class ObjectControl {
 	 * @param type
 	 */
 	public void addNewElementIntoCanvasObject(String object, String eleName, int amount, float energy, Type type) {
+<<<<<<< HEAD
 		addElementIntoCanvasObject(object, new HolonElement(eleName, amount, energy), type);
+=======
+		addElementIntoCanvasObject(searchHolonObject(object, M.getObjectsOnCanvas()),
+				new HolonElement(eleName, energy, amount), type);
+>>>>>>> f71b104b4003141ade3fc9002252a0ad1706422d
 	}
 
 	/**
@@ -115,7 +120,18 @@ public class ObjectControl {
 	public void addNewElementIntoCategoryObject(String category, String object, String eleName, int amount,
 			float energy, Type type) {
 
+<<<<<<< HEAD
 		addElementIntoCategoryObject(category, object, new HolonElement(eleName, amount, energy), type);
+=======
+		for (Category cats : M.getCategories()) {
+			if (cats.getName().equals(category)) {
+				cat = cats;
+				break;
+			}
+		}
+		addElementIntoCategoryObject(searchHolonObject(object, cat.getObjects()),
+				new HolonElement(eleName, energy, amount), type);
+>>>>>>> f71b104b4003141ade3fc9002252a0ad1706422d
 	}
 
 	/**
@@ -137,4 +153,14 @@ public class ObjectControl {
 
 		return obj;
 	}
+	
+	/**
+	 * Returns the ID of the selected Object
+	 * 0 = no Object is selected
+	 * 
+	 * @return ID
+	 */
+	public void setSelectedObjectID(int id){
+		M.setSelectedObjectID(id);
+	}
 }

+ 23 - 0
src/ui/model/Model.java

@@ -13,6 +13,8 @@ import ui.controller.*;
 
 public class Model {
 
+	// ID of the Selected Object
+	private int selectedID = 0;
 	// eventuell wenn Canvasgröße gewählt werden kann
 	private int HEIGHT;
 	private int WIDTH;
@@ -119,5 +121,26 @@ public class Model {
 	public void setCategoryListeners(LinkedList<CategoryListener> linkedList) {
 		this.categoryListeners = linkedList;
 	}
+	
+	/**
+	 * Set the ID of the selected Object
+	 * 0 = no Object is selected
+	 * 
+	 * @param ID
+	 * 
+	 */
+	public void setSelectedObjectID(int id){
+		this.selectedID = id;
+	}
+	
+	/**
+	 * Returns the ID of the selected Object
+	 * 0 = no Object is selected
+	 * 
+	 * @return ID
+	 */
+	public int getSelectedObjectID(){
+		return selectedID;
+	}
 
 }

+ 55 - 19
src/ui/view/AddElementPopUp.java

@@ -2,22 +2,31 @@ package ui.view;
 
 import java.awt.BorderLayout;
 import java.awt.FlowLayout;
+import java.util.ArrayList;
 
 import javax.swing.JButton;
 import javax.swing.JDialog;
 import javax.swing.JPanel;
 import javax.swing.border.EmptyBorder;
+import javax.swing.JFrame;
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.JTextField;
 import javax.swing.JComboBox;
 import javax.swing.DefaultComboBoxModel;
 
+import classes.HolonElement;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
 public class AddElementPopUp extends JDialog {
 
 	private final JPanel contentPanel = new JPanel();
-	private JTextField textField;
-	private JTextField textField_1;
-	private JTextField textField_2;
+	private JTextField elementName;
+	private JTextField providedEnergy;
+	private JTextField amount;
+	private HolonElement hl;
 
 	/**
 	 * Launch the application.
@@ -36,6 +45,8 @@ public class AddElementPopUp extends JDialog {
 	 * Create the dialog.
 	 */
 	public AddElementPopUp() {
+		super((java.awt.Frame) null, true);
+		setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
 		setBounds(100, 100, 300, 190);
 		getContentPane().setLayout(new BorderLayout());
 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
@@ -55,31 +66,52 @@ public class AddElementPopUp extends JDialog {
 		lblAmount.setBounds(10, 84, 46, 14);
 		contentPanel.add(lblAmount);
 		
-		textField = new JTextField();
-		textField.setBounds(140, 8, 110, 20);
-		contentPanel.add(textField);
-		textField.setColumns(10);
+		elementName = new JTextField();
+		elementName.setBounds(140, 8, 110, 20);
+		contentPanel.add(elementName);
+		elementName.setColumns(10);
 		
-		JComboBox comboBox = new JComboBox();
-		comboBox.setModel(new DefaultComboBoxModel(new String[] {"+", "-"}));
-		comboBox.setBounds(100, 46, 33, 20);
-		contentPanel.add(comboBox);
+		final JComboBox sign = new JComboBox();
+		sign.setModel(new DefaultComboBoxModel(new String[] {"+", "-"}));
+		sign.setBounds(100, 46, 33, 20);
+		contentPanel.add(sign);
 		
-		textField_1 = new JTextField();
-		textField_1.setBounds(140, 46, 110, 20);
-		contentPanel.add(textField_1);
-		textField_1.setColumns(10);
+		providedEnergy = new JTextField();
+		providedEnergy.setBounds(140, 46, 110, 20);
+		contentPanel.add(providedEnergy);
+		providedEnergy.setColumns(10);
+		providedEnergy.setText("0");
 		
-		textField_2 = new JTextField();
-		textField_2.setBounds(140, 81, 110, 20);
-		contentPanel.add(textField_2);
-		textField_2.setColumns(10);
+		amount = new JTextField();
+		amount.setBounds(140, 81, 110, 20);
+		contentPanel.add(amount);
+		amount.setColumns(10);
+		amount.setText("0");
 		{
 			JPanel buttonPane = new JPanel();
 			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
 			getContentPane().add(buttonPane, BorderLayout.SOUTH);
 			{
 				JButton okButton = new JButton("OK");
+				okButton.addActionListener(new ActionListener() {
+					public void actionPerformed(ActionEvent arg0) {
+						if(elementName.getText().length() != 0){
+							try{
+								float energy = Float.parseFloat(providedEnergy.getText().toString());
+								int elementAmount = Integer.parseInt(amount.getText().toString());
+								if(sign.getSelectedItem().toString().equals("-")){
+									energy = energy * -1;
+								}
+								hl = new HolonElement(elementName.getText().toString(), energy, elementAmount);
+								dispose();
+							} catch(NumberFormatException e){
+								JOptionPane.showMessageDialog(new JFrame(),"Please enter numbers in the Fields amount and providedEnergy");
+							}
+						}else{
+							JOptionPane.showMessageDialog(new JFrame(), "Please enter a Name");
+						}
+					}
+				});
 				okButton.setActionCommand("OK");
 				buttonPane.add(okButton);
 				getRootPane().setDefaultButton(okButton);
@@ -91,4 +123,8 @@ public class AddElementPopUp extends JDialog {
 			}
 		}
 	}
+	
+	public HolonElement getElement(){
+		return hl;
+	}
 }

+ 59 - 10
src/ui/view/AddObjectPopUp.java

@@ -5,11 +5,16 @@ import java.awt.Component;
 import java.awt.FlowLayout;
 import java.awt.event.*;
 import java.io.*;
+import java.util.ArrayList;
 
+import javax.swing.DefaultListModel;
 import javax.swing.JButton;
 import javax.swing.JDialog;
 import javax.swing.JFileChooser;
 import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ListModel;
+import javax.swing.ListSelectionModel;
 import javax.swing.border.EmptyBorder;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.JLabel;
@@ -18,12 +23,21 @@ import javax.swing.JList;
 import javax.swing.JOptionPane;
 import javax.swing.SwingConstants;
 
+import classes.HolonElement;
+
+import javax.swing.JScrollBar;
+import javax.swing.ScrollPaneConstants;
+
 public class AddObjectPopUp extends JDialog {
 
 	private final JPanel contentPanel = new JPanel();
 	private AddElementPopUp addElement;
 	private JTextField textField;
 	private JTextField textField_1;
+	private ArrayList<HolonElement> hElements;
+	private DefaultListModel listModel;
+	private JList list;
+
 	private File selectedFile = null;
 	private String filePath = " ";
 
@@ -49,6 +63,7 @@ public class AddObjectPopUp extends JDialog {
 		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
 		getContentPane().add(contentPanel, BorderLayout.CENTER);
 		contentPanel.setLayout(null);
+		hElements = new ArrayList<HolonElement>();
 		this.setTitle("Add Object Menu");
 		{
 			JLabel lblName = new JLabel("Name:");
@@ -62,12 +77,6 @@ public class AddObjectPopUp extends JDialog {
 			contentPanel.add(textField);
 			textField.setColumns(10);
 		}
-		{
-			textField_1 = new JTextField();
-			textField_1.setBounds(135, 51, 271, 20);
-			contentPanel.add(textField_1);
-			textField_1.setColumns(10);
-		}
 		{
 			JButton btnBrowseImage = new JButton("Browse Image");
 			btnBrowseImage.setBounds(10, 50, 112, 23);
@@ -80,9 +89,10 @@ public class AddObjectPopUp extends JDialog {
 
 		}
 		{
-			JList list = new JList();
-			list.setBounds(10, 98, 242, 130);
-			contentPanel.add(list);
+			textField_1 = new JTextField();
+			textField_1.setBounds(135, 51, 271, 20);
+			contentPanel.add(textField_1);
+			textField_1.setColumns(10);
 		}
 		{
 			JButton btnAddDefaultElement = new JButton("Add Default Element");
@@ -90,11 +100,46 @@ public class AddObjectPopUp extends JDialog {
 				public void actionPerformed(ActionEvent arg0) {
 					addElement = new AddElementPopUp();
 					addElement.setVisible(true);
+					HolonElement hl = addElement.getElement();
+					addElement(hl);
 				}
 			});
+
 			btnAddDefaultElement.setBounds(262, 95, 144, 23);
 			contentPanel.add(btnAddDefaultElement);
 		}
+		{
+			JScrollPane scrollPane = new JScrollPane();
+			scrollPane.setBounds(10, 84, 236, 133);
+			contentPanel.add(scrollPane);
+			{
+
+				listModel = new DefaultListModel();
+				HolonElement hel = new HolonElement("Test", 100, 5);
+				String name = hel.getEleName();
+				for (int i = 0; i < 11; i++) {
+					hel.setEleName(name + i);
+					addElement(hel);
+				}
+				list = new JList(listModel);
+				scrollPane.setViewportView(list);
+			}
+		}
+		{
+			JButton btnNewButton = new JButton("Delete Default Element");
+			btnNewButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					int selectedIndex = list.getSelectedIndex();
+					if (selectedIndex != -1) {
+						listModel.remove(selectedIndex);
+						hElements.remove(selectedIndex);
+					}
+				}
+			});
+			btnNewButton.setBounds(262, 129, 144, 23);
+			contentPanel.add(btnNewButton);
+		}
+
 		{
 			JPanel buttonPane = new JPanel();
 			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
@@ -123,6 +168,11 @@ public class AddObjectPopUp extends JDialog {
 		}
 	}
 
+	public void addElement(HolonElement hl) {
+		hElements.add(hl);
+		listModel.addElement(hl.getAmount() + "x: " + hl.getEleName() + " " + hl.getEnergy() + "U");
+	}
+
 	protected void fileChooser() {
 		// TODO Auto-generated method stub
 		JFileChooser FileChooser = new JFileChooser();
@@ -164,5 +214,4 @@ public class AddObjectPopUp extends JDialog {
 			e1.printStackTrace();
 		}
 	}
-
 }

+ 17 - 27
src/ui/view/GUI.java

@@ -105,7 +105,7 @@ public class GUI implements CategoryListener {
 	public GUI(Control control) {
 		this.controller = control;
 		this.model = control.getModel();
-		this.canvas = new MyCanvas(model);
+		this.canvas = new MyCanvas(model, control);
 		control.initListener(this);
 		initialize();
 	}
@@ -117,7 +117,7 @@ public class GUI implements CategoryListener {
 	private void initialize() {
 		frmCyberPhysical = new JFrame();
 		frmCyberPhysical.setTitle("Cyber Physical Systems Model");
-		frmCyberPhysical.setBounds(100, 100, 891, 467);
+		frmCyberPhysical.setBounds(100, 100, 1000, 800);
 		frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
 		frmCyberPhysical.setJMenuBar(menuBar);
@@ -183,48 +183,38 @@ public class GUI implements CategoryListener {
 		splitPane_2.setDividerLocation(200);
 
 		splitPane.setLeftComponent(scrollPane_1);
-		img = new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(GlobalVariables.SCALE, GlobalVariables.SCALE,
-				java.awt.Image.SCALE_SMOOTH);
-		Icon icon = new ImageIcon(img);
 
 		TreeCellRenderer customRenderer = new TreeCellRenderer() {
-
 			@Override
 			public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
 					boolean leaf, int row, boolean hasFocus) {
 				JLabel label = new JLabel();
 				Image imgR = null;
-				CpsObject tempCPS = null;
-
-				for (Category cat : model.getCategories()) {
-					if (value.toString().compareTo(cat.getCompareName()) == 0) {
-						label.setText(cat.getCompareName());
-					}
-					for (CpsObject cps : cat.getObjects()) {
-						if (value.toString().compareTo(cps.getCompareName()) == 0) {
-							tempCPS = cps;
-							imgR = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage()
-									.getScaledInstance(GlobalVariables.SCALE, GlobalVariables.SCALE, java.awt.Image.SCALE_SMOOTH);
-							if (imgR != null) {
-								label.setIcon(new ImageIcon(imgR));
+				
+				if(leaf){
+					for (Category cat : model.getCategories()) {
+						for (CpsObject cps : cat.getObjects()) {
+							if (value.toString().compareTo(cps.getCompareName()) == 0) {
+								imgR = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage()
+										.getScaledInstance(GlobalVariables.SCALE, GlobalVariables.SCALE, java.awt.Image.SCALE_SMOOTH);
+								if (imgR != null) {
+									label.setIcon(new ImageIcon(imgR));
+								}
+								label.setText(cps.getName());
 							}
-							label.setText(cps.getName());
 						}
 					}
 				}
+				
+				if(hasFocus) label.setForeground(new Color(0, 0, 255));
+				tree.setRowHeight(GlobalVariables.SCALE);
 				if(label.getText().length() == 0) label.setText(value.toString());
+				
 				return label;
 
 			}
 		};
 
-		/*
-		 * DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)
-		 * tree.getCellRenderer(); renderer.setLeafIcon(icon); //
-		 * renderer.setClosedIcon(icon); // renderer.setOpen
-		 */
-		tree.setRowHeight(icon.getIconHeight());
-
 		tree.setCellRenderer(customRenderer);
 
 		tree.addMouseListener(new MouseAdapter() {

+ 45 - 18
src/ui/view/MyCanvas.java

@@ -13,33 +13,41 @@ import java.awt.event.MouseMotionListener;
 import java.util.ArrayList;
 import java.util.LinkedList;
 
+import javax.swing.AbstractButton;
 import javax.swing.ImageIcon;
+import javax.swing.JLabel;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
+import javax.swing.JToolTip;
 
 import classes.CpsObject;
 import classes.GlobalVariables;
 import classes.HolonElement;
 import classes.HolonObject;
+import ui.controller.Control;
 import ui.model.*;
 
 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;
-	Model model;
+	private Model model;
+	private final Control controller;
 	
 	boolean dragging = false;
 	boolean dropDelete = false;
-	CpsObject tempCps = null;
-	Rectangle selectRect = new Rectangle();
+	private CpsObject tempCps = null;
+	private Rectangle selectRect = new Rectangle();
 
 	// PopUpMenu
-	JPopupMenu popmenu = new JPopupMenu();
-	JMenuItem itemDelete = new JMenuItem("Delete Object");
-
-	public MyCanvas(final Model model) {
+	private JPopupMenu popmenu = new JPopupMenu();
+	private JMenuItem itemDelete = new JMenuItem("Delete Object");
+	private JToolTip objectTT = new JToolTip();
+	
+	public MyCanvas(final Model model, Control control) {
+		this.add(objectTT);
+		this.controller = control;
 		this.model = model;
 		popmenu.add(itemDelete);
 		itemDelete.setEnabled(false);
@@ -47,30 +55,32 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				model.getObjectsOnCanvas().remove(tempCps);
+				tempCps = null;
 				selectRect.setRect(0, 0, 0, 0);
 				repaint();
 			}
 		});
 
-		//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);
 	}
 
+	/**
+	 * Paints all Components on the Canvas
+	 * 
+	 * @param Graphics
+	 *            
+	 */
 	public void paintComponent(Graphics g) {
-		// Draws the image to the canvas
 		super.paintComponent(g);
 		if(selectRect != null){
-			g.setColor(new Color(220, 220, 220));
+			g.setColor(new Color(100, 255, 100));
 		    g.fillRect((int)selectRect.getX(), (int)selectRect.getY(), (int)selectRect.getWidth(), (int)selectRect.getHeight());
 		}
 		
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
 			img = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage();
 			g.drawImage(img, cps.getPos().x, cps.getPos().y, GlobalVariables.SCALE, GlobalVariables.SCALE, null);
-			//g.drawImage(img, cps.getPos().x, cps.getPos().y, null);
 		}
 	}
 
@@ -96,18 +106,23 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		// TODO Auto-generated method stub
 		x = e.getX();
 		y = e.getY();
+		int cx;
+		int cy;
 		tempCps = null;
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
-			int cx = cps.getPos().x;
-			int cy = cps.getPos().y;
+			cx = cps.getPos().x;
+			cy = cps.getPos().y;
 			if (x - GlobalVariables.SCALE <= cx && y - GlobalVariables.SCALE <= cy && x >= cx && y >= cy) {
 				tempCps = cps;
 			}
 		}
+		//Object Selection
 		if(tempCps != null){
 			selectRect.setBounds(tempCps.getPos().x-(GlobalVariables.SCALE/20), tempCps.getPos().y-(GlobalVariables.SCALE/20), GlobalVariables.SCALE+GlobalVariables.SCALE/10, GlobalVariables.SCALE+GlobalVariables.SCALE/10);
+			controller.setSelectedObjectID(tempCps.getID());
 			System.out.println("Select");
 		}else {
+			controller.setSelectedObjectID(0);
 			selectRect.setRect(0, 0, 0, 0);
 			System.out.println("Unselect");
 		}
@@ -143,8 +158,9 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 				tempCps.setPos(e.getX() - GlobalVariables.SCALE/2, e.getY() - GlobalVariables.SCALE/2);
 				dragging = true;
 				selectRect.setLocation(tempCps.getPos().x-(GlobalVariables.SCALE/20), tempCps.getPos().y-(GlobalVariables.SCALE/20));
+				objectTT.setTipText(tempCps.getName());
+				objectTT.setLocation(tempCps.getPos().x, tempCps.getPos().y);
 				repaint();
-				System.out.println("drag: " + e.getX() + " " + e.getY());
 			} catch (Exception e2) {
 				// TODO: handle exception
 			}
@@ -152,7 +168,18 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 
 	@Override
 	public void mouseMoved(MouseEvent e) {
-		// TODO Auto-generated method stub
-
+		x = e.getX();
+		y = e.getY();
+		int cx;
+		int cy;
+		for (CpsObject cps : model.getObjectsOnCanvas()) {
+			cx = cps.getPos().x;
+			cy = cps.getPos().y;
+			if (x - GlobalVariables.SCALE <= cx && y - GlobalVariables.SCALE <= cy && x >= cx && y >= cy) {
+				objectTT.setEnabled(true);
+				objectTT.setTipText(cps.getName());
+				objectTT.setLocation(cx, cy);
+			}
+		}
 	}
 }