Selaa lähdekoodia

Priority and FlexToolTip

Tom 5 vuotta sitten
vanhempi
commit
fb1f490f2c

+ 1 - 1
src/classes/HolonElement.java

@@ -48,7 +48,7 @@ public class HolonElement implements LocalMode, GraphEditable{
     /** Gives us whether this element is flexible and can flexibly use any part of the energy in flexibleEnergyAvailable */
 
     
-    
+    @Expose
     private Priority priority;
 
 	public enum Priority {

+ 1 - 1
src/ui/controller/UpdateController.java

@@ -301,7 +301,7 @@ public class UpdateController {
 				Object[] tempFlex = { "Flexibility", ((HolonObject) obj).getTotalFlex() };
 				model.getPropertyTable().addRow(tempEnergy);
 				model.getPropertyTable().addRow(tempFlex);
-				model.getPropertyTable().setCellEditable(0, 1, true);
+				model.getPropertyTable().setCellEditable(0, 1, false);
 				model.getPropertyTable().setCellEditable(2, 1, false);
 				model.getPropertyTable().setCellEditable(3, 1, false);
 				model.getPropertyTable().setCellEditable(4, 1, false);

+ 77 - 1
src/ui/view/FlexWindow.java

@@ -10,6 +10,8 @@ import java.awt.Insets;
 import java.awt.Dialog.ModalityType;
 import java.awt.Dimension;
 import java.awt.event.ItemEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
 import java.math.RoundingMode;
 import java.text.NumberFormat;
@@ -35,19 +37,23 @@ import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.JTree;
+import javax.swing.SwingUtilities;
 import javax.swing.border.EmptyBorder;
 import javax.swing.text.NumberFormatter;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
 
 import classes.AbstractCpsObject;
 import classes.Constrain;
 import classes.CpsUpperNode;
 import classes.Flexibility;
 import classes.HolonElement;
+import classes.HolonElement.Priority;
 import classes.HolonObject;
 import ui.controller.Control;
 import ui.controller.FlexManager;
@@ -250,6 +256,7 @@ public class FlexWindow extends JFrame {
 				controller.calculateStateAndVisualForCurrentTimeStep();
 				controller.updateCanvas();
 			});
+			labelButton.setToolTipText(createToolTipp(actual));
 		}
 		//AddSpacer
 		JLabel spacer = new JLabel();
@@ -265,6 +272,22 @@ public class FlexWindow extends JFrame {
 	}
 
 
+	private String createToolTipp(FlexWrapper actual) {
+		String tooltipString = "<html>" +
+	"<b>" + actual.getFlex().name + "( </b>" + actual.getFlex().getElement().getEleName() + "<b> )</b><br>"
+	+ ((actual.remainingDuration() != 0)?"<i>Remaining Duration:"+ actual.remainingDuration()+"</i><br>":"") 
+	+ ((actual.remainingTimeTillActivation() != 0)?"<i>Remaining TimeTillActivation:"+ actual.remainingTimeTillActivation()+"</i><br>":"")
+	+ "Duration: " + actual.getFlex().getDuration()  + "<br>"
+	+ "Cooldown: " + actual.getFlex().getCooldown() + "<br>"
+	+ "Speed: " + actual.getFlex().speed + "<br>"
+	+ "Constrains: " + actual.getFlex().constrainList.stream().map(constrain -> constrain.getName()).collect(Collectors.joining( "," )) + "<br>"
+	+ "</html>";
+		
+		return tooltipString;
+	}
+
+
+
 	public void updateFlexOrderMenu() {
 		createUsageViewPanel();
 		contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
@@ -279,6 +302,7 @@ public class FlexWindow extends JFrame {
 		listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
 		treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
 		stateTree = new JTree(treeModel);
+		stateTree.setComponentPopupMenu(new PopUpDemo(stateTree, treeModel));
 		selectedPanel = new JPanel(new BorderLayout());
 		selectedPanel.add(new JScrollPane(stateTree));
 	}
@@ -314,7 +338,17 @@ public class FlexWindow extends JFrame {
 			listOfAllSelectedHolonObjects.add(newObjectChild);
 		}
 		treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
+	
 		stateTree.revalidate();
+//		stateTree.addMouseListener(new MouseAdapter() {
+//
+//		    @Override
+//		    public void mousePressed(MouseEvent e) {
+//		    	System.out.println("MouseEvent");
+//		    	if (!SwingUtilities.isRightMouseButton(e)) return;
+//		    	
+//		    }
+//		});
 		expandAll(stateTree);
 		selectedPanel.revalidate();
 		contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
@@ -347,7 +381,7 @@ public class FlexWindow extends JFrame {
 
 	private void expandTreeHolonObject(HolonObject hObject, DefaultMutableTreeNode root) {
 		for(HolonElement hElement: hObject.getElements()) {
-			DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(hElement.getEleName());
+			DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(new ElementInfo(hElement));
 			expandTreeFlex(hElement, newChild);
 			root.add(newChild);
 		}
@@ -602,5 +636,47 @@ public class FlexWindow extends JFrame {
 		addDialog.setVisible(true);
 	}
 	
+	class PopUpDemo extends JPopupMenu {
+	    JMenuItem anItem;
+	    public PopUpDemo(JTree jTree, DefaultTreeModel model) {
+	        anItem = new JMenuItem("EditPriorities");
+	        anItem.addActionListener( clicked -> {
+	        	TreePath[] paths = jTree.getSelectionPaths();
+	        	if(paths == null) {
+	        		jTree.setSelectionInterval(0, jTree.getRowCount());
+	        		paths = jTree.getSelectionPaths();
+	        	}
+	        	Priority prio = null;
+                for (TreePath path : jTree.getSelectionPaths()) {
+                    Object treeNodeUserObject = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
+                    if(treeNodeUserObject instanceof ElementInfo)
+                    {	
+                    	if(prio == null) prio = makePriorityDialog();
+                    	if(prio == null) break;
+                    	ElementInfo eleInfo = (ElementInfo)treeNodeUserObject;
+                    	eleInfo.ele.setPriority(prio);
+                    	model.reload((DefaultMutableTreeNode)path.getLastPathComponent());
+                    }
+                }
+	        });
+	        add(anItem);
+	    }
+		private Priority makePriorityDialog() {
+			return (Priority) JOptionPane.showInputDialog(this, "Select the Priority:", "Priority?",  JOptionPane.OK_OPTION,new ImageIcon(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB)) , Priority.values(), "");
+		}
+	}
+	
+	class ElementInfo {
+		HolonElement ele;
+		public ElementInfo(HolonElement ele) {
+			this.ele = ele;
+		}
+		@Override
+		public String toString() {
+			return ele.getEleName() + " Priority:" + ele.getPriority();
+		}
+	}
+	
+	
 	
 }

+ 11 - 2
src/ui/view/GUI.java

@@ -1378,6 +1378,7 @@ public class GUI implements CategoryListener {
 									model.getMultiTable()) != null) {
 								// For active column (boolean with a checkbox)
 								if (selectedValueBX == 6) {
+									System.out.println("selectedValueBX == 6");
 									HolonElement eleBTemp = updCon
 											.getActualHolonElement(null,
 													yBMouse, 0, tables);
@@ -1392,6 +1393,7 @@ public class GUI implements CategoryListener {
 								// For activeFlex column (boolean with a
 								// checkbox)
 								else if (selectedValueBX == 7) {
+									System.out.println("selectedValueBX == 7");
 									HolonElement eleBTemp = updCon
 											.getActualHolonElement(null,
 													yBMouse, 0, tables);
@@ -1401,7 +1403,7 @@ public class GUI implements CategoryListener {
 													selectedValueBX).toString();
 									Boolean bTemp = Boolean
 											.parseBoolean(newBStuff);
-									//TODO: delete here more
+									eleBTemp.setActive(bTemp);
 								} else {
 									// Update of HolonElement
 									HolonElement eleTemp = updCon
@@ -1417,6 +1419,7 @@ public class GUI implements CategoryListener {
 									}
 									// Energy Update
 									else if (selectedValueX == 3) {
+										System.out.println("selectedValueX == 3");
 										Float ftemp = Float
 												.parseFloat(newStuff);
 										eleTemp.setEnergyPerElement(ftemp);
@@ -1433,6 +1436,9 @@ public class GUI implements CategoryListener {
 												.parseInt(newStuff);
 										eleTemp.setAmount(iTemp);
 									}
+									else if (selectedValueX == 6) {
+										System.out.println("Test");
+									}
 								}
 							}
 						} // ------------------ single-selection mode
@@ -1452,6 +1458,7 @@ public class GUI implements CategoryListener {
 
 								// For active column (boolean with a checkbox)
 								if (selectedValueBX == 5) {
+									System.out.println("hierC?");
 									eleTemp = updCon.getActualHolonElement(
 											(HolonObject) updCon.getActualCps(),
 											yBMouse, 0, tables);
@@ -1472,12 +1479,14 @@ public class GUI implements CategoryListener {
 									String newBStuff = model
 											.getSingleTable()
 											.getValueAt(selectedValueBY,
-													selectedValueBX).toString();
+													selectedValueBX -1).toString();
 									Boolean bTemp = Boolean
 											.parseBoolean(newBStuff);
+									eleTemp.setActive(bTemp);
 									//TODO: delete Boolean bTemp = Boolean.parseBoolean(newBStuff);
 
 								} else {
+									System.out.println("hierB?");
 									// Update of HolonElement
 									eleTemp = updCon.getActualHolonElement(
 											(HolonObject) updCon.getActualCps(),