|
@@ -10,6 +10,8 @@ import java.awt.Insets;
|
|
import java.awt.Dialog.ModalityType;
|
|
import java.awt.Dialog.ModalityType;
|
|
import java.awt.Dimension;
|
|
import java.awt.Dimension;
|
|
import java.awt.event.ItemEvent;
|
|
import java.awt.event.ItemEvent;
|
|
|
|
+import java.awt.event.MouseAdapter;
|
|
|
|
+import java.awt.event.MouseEvent;
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.BufferedImage;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.text.NumberFormat;
|
|
import java.text.NumberFormat;
|
|
@@ -35,18 +37,23 @@ import javax.swing.JMenuBar;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPanel;
|
|
|
|
+import javax.swing.JPopupMenu;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTabbedPane;
|
|
import javax.swing.JTabbedPane;
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
|
|
+import javax.swing.SwingUtilities;
|
|
import javax.swing.border.EmptyBorder;
|
|
import javax.swing.border.EmptyBorder;
|
|
import javax.swing.text.NumberFormatter;
|
|
import javax.swing.text.NumberFormatter;
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
|
|
+import javax.swing.tree.TreePath;
|
|
|
|
|
|
import classes.AbstractCpsObject;
|
|
import classes.AbstractCpsObject;
|
|
|
|
+import classes.Constrain;
|
|
import classes.CpsUpperNode;
|
|
import classes.CpsUpperNode;
|
|
import classes.Flexibility;
|
|
import classes.Flexibility;
|
|
import classes.HolonElement;
|
|
import classes.HolonElement;
|
|
|
|
+import classes.HolonElement.Priority;
|
|
import classes.HolonObject;
|
|
import classes.HolonObject;
|
|
import ui.controller.Control;
|
|
import ui.controller.Control;
|
|
import ui.controller.FlexManager;
|
|
import ui.controller.FlexManager;
|
|
@@ -249,6 +256,7 @@ public class FlexWindow extends JFrame {
|
|
controller.calculateStateAndVisualForCurrentTimeStep();
|
|
controller.calculateStateAndVisualForCurrentTimeStep();
|
|
controller.updateCanvas();
|
|
controller.updateCanvas();
|
|
});
|
|
});
|
|
|
|
+ labelButton.setToolTipText(createToolTipp(actual));
|
|
}
|
|
}
|
|
//AddSpacer
|
|
//AddSpacer
|
|
JLabel spacer = new JLabel();
|
|
JLabel spacer = new JLabel();
|
|
@@ -264,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() {
|
|
public void updateFlexOrderMenu() {
|
|
createUsageViewPanel();
|
|
createUsageViewPanel();
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Order"), usageViewPanel);
|
|
@@ -278,6 +302,7 @@ public class FlexWindow extends JFrame {
|
|
listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
|
|
listOfAllSelectedHolonObjects = new DefaultMutableTreeNode("HolonObjects");
|
|
treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
|
|
treeModel = new DefaultTreeModel(listOfAllSelectedHolonObjects);
|
|
stateTree = new JTree(treeModel);
|
|
stateTree = new JTree(treeModel);
|
|
|
|
+ stateTree.setComponentPopupMenu(new PopUpDemo(stateTree, treeModel));
|
|
selectedPanel = new JPanel(new BorderLayout());
|
|
selectedPanel = new JPanel(new BorderLayout());
|
|
selectedPanel.add(new JScrollPane(stateTree));
|
|
selectedPanel.add(new JScrollPane(stateTree));
|
|
}
|
|
}
|
|
@@ -311,10 +336,19 @@ public class FlexWindow extends JFrame {
|
|
if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
|
|
if(aCps instanceof HolonObject) expandTreeHolonObject((HolonObject)aCps, newObjectChild);
|
|
if(aCps instanceof CpsUpperNode)expandTreeUpperNode((CpsUpperNode)aCps, newObjectChild);
|
|
if(aCps instanceof CpsUpperNode)expandTreeUpperNode((CpsUpperNode)aCps, newObjectChild);
|
|
listOfAllSelectedHolonObjects.add(newObjectChild);
|
|
listOfAllSelectedHolonObjects.add(newObjectChild);
|
|
- System.out.println("Added: " + aCps.getName());
|
|
|
|
}
|
|
}
|
|
treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
|
|
treeModel.nodeStructureChanged(listOfAllSelectedHolonObjects);
|
|
|
|
+
|
|
stateTree.revalidate();
|
|
stateTree.revalidate();
|
|
|
|
+// stateTree.addMouseListener(new MouseAdapter() {
|
|
|
|
+//
|
|
|
|
+// @Override
|
|
|
|
+// public void mousePressed(MouseEvent e) {
|
|
|
|
+// System.out.println("MouseEvent");
|
|
|
|
+// if (!SwingUtilities.isRightMouseButton(e)) return;
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
+// });
|
|
expandAll(stateTree);
|
|
expandAll(stateTree);
|
|
selectedPanel.revalidate();
|
|
selectedPanel.revalidate();
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
|
|
contentPanel.setComponentAt(contentPanel.indexOfTab("Settings"), selectedPanel);
|
|
@@ -347,7 +381,7 @@ public class FlexWindow extends JFrame {
|
|
|
|
|
|
private void expandTreeHolonObject(HolonObject hObject, DefaultMutableTreeNode root) {
|
|
private void expandTreeHolonObject(HolonObject hObject, DefaultMutableTreeNode root) {
|
|
for(HolonElement hElement: hObject.getElements()) {
|
|
for(HolonElement hElement: hObject.getElements()) {
|
|
- DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(hElement.getEleName());
|
|
|
|
|
|
+ DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(new ElementInfo(hElement));
|
|
expandTreeFlex(hElement, newChild);
|
|
expandTreeFlex(hElement, newChild);
|
|
root.add(newChild);
|
|
root.add(newChild);
|
|
}
|
|
}
|
|
@@ -391,7 +425,7 @@ public class FlexWindow extends JFrame {
|
|
List<HolonObject> list = new ArrayList<HolonObject>();
|
|
List<HolonObject> list = new ArrayList<HolonObject>();
|
|
for(AbstractCpsObject aCps : objectsOnCanvas) {
|
|
for(AbstractCpsObject aCps : objectsOnCanvas) {
|
|
if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
|
|
if(aCps instanceof HolonObject) list.add((HolonObject) aCps);
|
|
- else list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
|
|
|
|
|
|
+ else if (aCps instanceof CpsUpperNode) list.addAll(createListOfHolonObjects(((CpsUpperNode)aCps).getNodes()));
|
|
}
|
|
}
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
@@ -573,8 +607,8 @@ public class FlexWindow extends JFrame {
|
|
toCreateFlex.cost = intermediateFlex.cost;
|
|
toCreateFlex.cost = intermediateFlex.cost;
|
|
toCreateFlex.setCooldown(intermediateFlex.getCooldown());
|
|
toCreateFlex.setCooldown(intermediateFlex.getCooldown());
|
|
toCreateFlex.offered=offeredCheckBox.isSelected();
|
|
toCreateFlex.offered=offeredCheckBox.isSelected();
|
|
- if(onConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.onConstrain);
|
|
|
|
- if(offConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Flexibility.offConstrain);
|
|
|
|
|
|
+ if(onConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Constrain.createOnConstrain());
|
|
|
|
+ if(offConstrainCheckBox.isSelected())toCreateFlex.constrainList.add(Constrain.createOffConstrain());
|
|
|
|
|
|
ele.flexList.add(toCreateFlex);
|
|
ele.flexList.add(toCreateFlex);
|
|
//save checkboxes
|
|
//save checkboxes
|
|
@@ -602,5 +636,47 @@ public class FlexWindow extends JFrame {
|
|
addDialog.setVisible(true);
|
|
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();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|