123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597 |
- package ui.view;
- import javax.swing.JSplitPane;
- import javax.swing.JScrollPane;
- import javax.swing.JPanel;
- import java.util.ArrayList;
- import java.util.Hashtable;
- import java.util.Random;
- import javax.swing.GroupLayout;
- import javax.swing.GroupLayout.Alignment;
- import javax.swing.JLabel;
- import javax.swing.LayoutStyle.ComponentPlacement;
- import javax.swing.event.DocumentEvent;
- import javax.swing.event.DocumentListener;
- import javax.swing.event.TreeSelectionEvent;
- import javax.swing.event.TreeSelectionListener;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeModel;
- import javax.swing.tree.MutableTreeNode;
- import javax.swing.tree.TreeNode;
- import DataSets.GraphDataSet;
- import DataSets.PropertyDataSet;
- import classes.HolonObject;
- import interfaces.GraphListener;
- import ui.controller.Control;
- import javax.swing.JTextField;
- import javax.swing.JComboBox;
- import javax.swing.JButton;
- import javax.swing.JTree;
- import java.awt.Color;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.ItemEvent;
- import java.awt.event.ItemListener;
- import javax.swing.border.LineBorder;
- import javax.swing.JPopupMenu;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import javax.swing.JMenuItem;
- import javax.swing.BoxLayout;
- public class splitPane extends JSplitPane implements GraphListener {
- private JTextField graphNrTxtField;
- private JTextField redField;
- private JTextField greenField;
- private JTextField blueField;
- private JTree objectTree;
- private DefaultTreeModel treeModel;
- private DefaultMutableTreeNode objectsNode;
- private DefaultMutableTreeNode wholeHolon;
- private Hashtable<String, GraphDataSet> objectHashtable;
- private JPanel colorPanel;
- private PropertyDataSet currentProperty = new PropertyDataSet();
- private JComboBox colorComboBox;
- private Control controller;
- private JPanel graphPanel;
- JLabel showObjectlbl;
- JLabel showPropertylbl;
- public splitPane(Control cont) {
- //this.rightComponent
- this.controller = cont;
- objectHashtable = new Hashtable<String, GraphDataSet>();
- JScrollPane dataPane = new JScrollPane();
- setLeftComponent(dataPane);
- JPanel panel = new JPanel();
- dataPane.setViewportView(panel);
-
- JScrollPane treeScrollPane = new JScrollPane();
-
- JLabel lblObject = new JLabel("Object(s):");
-
- showObjectlbl = new JLabel("...");
-
- JLabel lblProperty = new JLabel("Property:");
-
- showPropertylbl = new JLabel("...");
-
- JLabel lblGraph = new JLabel("Graph:");
-
- JLabel lblColor = new JLabel("Color:");
-
- colorComboBox = new JComboBox();
- colorComboBox.addItem("");
- colorComboBox.addItem("Red");
- colorComboBox.addItem("Blue");
- colorComboBox.addItem("Green");
- colorComboBox.addItem("Yellow");
- colorComboBox.addItem("Orange");
- colorComboBox.addItem("Cyan");
- colorComboBox.addItem("Magenta");
- colorComboBox.addItem("Pink");
- colorComboBox.addItem("Gray");
- colorComboBox.addItem("Random");
- colorComboBox.addItemListener(new ItemListener(){
- @Override
- public void itemStateChanged(ItemEvent e) {
- String colorName = (String) colorComboBox.getSelectedItem();
- Color tmpColor = Color.WHITE;
- switch(colorName){
- case "" : tmpColor = currentProperty.getColor();
- break;
- case "Red": tmpColor = Color.RED;
- colorChanged(tmpColor);
- break;
- case "Blue":tmpColor = Color.BLUE;
- colorChanged(tmpColor);
- break;
- case "Green":tmpColor = Color.GREEN;
- colorChanged(tmpColor);
- break;
- case "Yellow":tmpColor = Color.YELLOW;
- colorChanged(tmpColor);
- break;
- case "Orange":tmpColor = Color.ORANGE;
- colorChanged(tmpColor);
- break;
- case "Cyan":tmpColor = Color.CYAN;
- colorChanged(tmpColor);
- break;
- case "Magenta":tmpColor = Color.MAGENTA;
- colorChanged(tmpColor);
- break;
- case "Pink":tmpColor = Color.PINK;
- colorChanged(tmpColor);
- break;
- case "Gray":tmpColor = Color.GRAY;
- colorChanged(tmpColor);
- break;
- case "Random":Random rdm = new Random();
- tmpColor = new Color(rdm.nextInt(255),rdm.nextInt(255),rdm.nextInt(255));
- }
- redField.setText(Integer.toString(tmpColor.getRed()));
- greenField.setText(Integer.toString(tmpColor.getGreen()));
- blueField.setText(Integer.toString(tmpColor.getBlue()));
- }
-
- });
-
- //====================GRAPH NR TEXTFIELD======================//
- graphNrTxtField = new JTextField();
- graphNrTxtField.setColumns(10);
- graphNrTxtField.getDocument().addDocumentListener(new DocumentListener(){
- /*
- * if textField for Red changes, changes will applied in the DataStructure "currentProperty"
- * if Value is legit
- */
- @Override
- public void insertUpdate(DocumentEvent e) {
- if(currentProperty != null){
- currentProperty.setGraph(graphNrTxtField.getText());
- }
- }
- @Override
- public void removeUpdate(DocumentEvent e) {
- if(currentProperty != null){
- currentProperty.setGraph(graphNrTxtField.getText());
- }
- }
- @Override
- public void changedUpdate(DocumentEvent e) {
-
- }
- });
-
- //====================GRAPH NR TEXTFIELD END==================//
-
- //====================RED TEXTFIELD===========================//
- redField = new JTextField();
- redField.setColumns(10);
- redField.getDocument().addDocumentListener(new DocumentListener(){
- /*
- * if textField for Red changes, changes will applied in the DataStructure "currentProperty"
- * if Value is legit
- */
- @Override
- public void insertUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(redField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(tmp, oldColor.getGreen(), oldColor.getBlue());
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void removeUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(redField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(tmp, oldColor.getGreen(), oldColor.getBlue());
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void changedUpdate(DocumentEvent e) {
-
- }
- });
- //======================RED TEXTFIELD END==========================//
-
- //======================GREEN TEXTFIELD============================//
- greenField = new JTextField();
- greenField.setColumns(10);
- greenField.getDocument().addDocumentListener(new DocumentListener(){
- /*
- * if textField for Red changes, changes will applied in the DataStructure "currentProperty"
- * if Value is legit
- */
- @Override
- public void insertUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(greenField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(oldColor.getRed(), tmp, oldColor.getBlue());
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void removeUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(greenField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(oldColor.getRed(), tmp, oldColor.getBlue());
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void changedUpdate(DocumentEvent e) {
-
- }
- });
- //======================GREEN TEXTFIELD END========================//
-
- //======================BLUE TEXTFIELD=============================//
- blueField = new JTextField();
- blueField.setColumns(10);
- blueField.getDocument().addDocumentListener(new DocumentListener(){
- /*
- * if textField for Red changes, changes will applied in the DataStructure "currentProperty"
- * if Value is legit
- */
- @Override
- public void insertUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(blueField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(oldColor.getRed(), oldColor.getGreen(), tmp);
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void removeUpdate(DocumentEvent e) {
- int tmp = -1;
- try{
- tmp = Integer.parseInt(blueField.getText());
- }catch(NumberFormatException e1){
-
- }
- if(tmp > -1 && tmp <= 255){
- if(currentProperty != null){
- Color oldColor = currentProperty.getColor();
- Color color = new Color(oldColor.getRed(), oldColor.getGreen(), tmp);
- currentProperty.setColor(color);
- colorChanged(color);
- }
- }
- }
- @Override
- public void changedUpdate(DocumentEvent e) {
-
- }
- });
- //======================BLUE TEXTFIELD END=========================//
-
- JLabel lblR = new JLabel("R:");
-
- JLabel lblG = new JLabel("G:");
-
- JLabel lblB = new JLabel("B:");
-
- JButton btnAdd = new JButton("Add");
- btnAdd.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- graphPanel.add(new JButton("new"));
- graphPanel.updateUI();
- }
- });
-
- colorPanel = new JPanel();
- colorPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
- colorPanel.setBackground(Color.WHITE);
- GroupLayout gl_panel = new GroupLayout(panel);
- gl_panel.setHorizontalGroup(
- gl_panel.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_panel.createSequentialGroup()
- .addContainerGap()
- .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_panel.createSequentialGroup()
- .addComponent(treeScrollPane, GroupLayout.DEFAULT_SIZE, 187, Short.MAX_VALUE)
- .addContainerGap())
- .addGroup(gl_panel.createSequentialGroup()
- .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
- .addComponent(lblGraph)
- .addComponent(lblObject)
- .addComponent(lblProperty)
- .addComponent(lblColor)
- .addGroup(gl_panel.createSequentialGroup()
- .addComponent(lblR)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
- .addComponent(colorPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(redField, GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
- .addComponent(showObjectlbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(showPropertylbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(colorComboBox, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(graphNrTxtField)
- .addGroup(gl_panel.createSequentialGroup()
- .addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
- .addComponent(btnAdd)
- .addGroup(gl_panel.createSequentialGroup()
- .addComponent(lblG)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(greenField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(lblB)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))
- .addGap(32))))
- );
- gl_panel.setVerticalGroup(
- gl_panel.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_panel.createSequentialGroup()
- .addContainerGap()
- .addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 174, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
- .addComponent(showObjectlbl))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblProperty)
- .addComponent(showPropertylbl))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblGraph)
- .addComponent(graphNrTxtField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblColor)
- .addComponent(colorComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addGap(18)
- .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
- .addComponent(lblR)
- .addComponent(redField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(lblG)
- .addComponent(greenField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(lblB)
- .addComponent(blueField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(colorPanel, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(btnAdd)
- .addContainerGap(35, Short.MAX_VALUE))
- );
-
- objectTree = new JTree();
- treeModel = (DefaultTreeModel)objectTree.getModel();
- DefaultMutableTreeNode root = new DefaultMutableTreeNode("Statistics");
- wholeHolon = new DefaultMutableTreeNode("whole Holon");
- wholeHolon.add(new DefaultMutableTreeNode("total Production"));
- wholeHolon.add(new DefaultMutableTreeNode("total Consumption"));
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of Supplied Objects"));
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of not Supplied Objects"));
- wholeHolon.add(new DefaultMutableTreeNode("Percentage of partially Supplied Objects"));
- objectsNode = new DefaultMutableTreeNode("Objects");
- DefaultMutableTreeNode defaultNode = new DefaultMutableTreeNode("empty");
-
- objectsNode.add(defaultNode);
- treeModel.setRoot(root);
- root.add(wholeHolon);
- root.add(objectsNode);
- objectTree.setModel(treeModel);
-
- treeScrollPane.setViewportView(objectTree);
-
- JPopupMenu popupMenu = new JPopupMenu();
- addPopup(objectTree, popupMenu);
-
- JMenuItem mntmUntrack = new JMenuItem("Untrack");
- mntmUntrack.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)objectTree.getLastSelectedPathComponent();
- if(selectedNode.getLevel() == 2 && !selectedNode.getParent().toString().equals("whole Holon")){
- String object = selectedNode.toString();
- controller.removeTrackingObj((HolonObject)objectHashtable.get(object).getObject());
- }
- }
- });
- popupMenu.add(mntmUntrack);
-
- objectTree.addTreeSelectionListener(new TreeSelectionListener(){
- @Override
- public void valueChanged(TreeSelectionEvent e) {
- resetFields();
- showObjectlbl.setText("...");
- showPropertylbl.setText("...");
- DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)objectTree.getLastSelectedPathComponent();
- if(selectedNode == null){
- return;
- }else{
- if(selectedNode.getLevel() == 0){
- disableFields();
- }
- if(selectedNode.getLevel() == 1){
- disableFields();
- currentProperty = null;
- showObjectlbl.setText(selectedNode.toString());
- }
- if(selectedNode.getLevel() == 2){
- if(((DefaultMutableTreeNode)selectedNode.getParent()).toString().equals("whole Holon")){
- enableFields();
- showPropertylbl.setText(selectedNode.toString());
- showObjectlbl.setText(selectedNode.getParent().toString());
- }else{
- disableFields();
- currentProperty = null;
- showObjectlbl.setText(selectedNode.toString());
- }
- }
- if(selectedNode.getLevel() == 3){
- enableFields();
- String object = ((DefaultMutableTreeNode)selectedNode.getParent()).toString();
- String property = selectedNode.toString();
- currentProperty = objectHashtable.get(object).getPropertytTable().get(property);
- Color color = currentProperty.getColor();
- redField.setText(Integer.toString(color.getRed()));
- greenField.setText(Integer.toString(color.getGreen()));
- blueField.setText(Integer.toString(color.getBlue()));
-
- showObjectlbl.setText(object);
- showPropertylbl.setText(property);
- graphNrTxtField.setText(currentProperty.getAssignedGraph());
- colorPanel.setBackground(color);
- }
- }
- }
-
- });
- panel.setLayout(gl_panel);
-
- JScrollPane graphScrollPane = new JScrollPane();
- setRightComponent(graphScrollPane);
-
- graphPanel = new JPanel();
- graphScrollPane.setViewportView(graphPanel);
- graphPanel.setLayout(new BoxLayout(graphPanel, BoxLayout.Y_AXIS));
- repaintGraph();
- }
- @Override
- public void repaintGraph() {
- treeModel.reload();
- }
- @Override
- public void addTrackedObject(ArrayList<HolonObject> hlList) {
- objectsNode.removeAllChildren();
- objectHashtable.clear();
- if(hlList.size() > 0 && hlList != null){
- for(HolonObject hO : hlList){
- Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
- String name = hO.getName() + " " + hO.getID();
- DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(name);
- tmp.add(new DefaultMutableTreeNode("total Production"));
- tmp.add(new DefaultMutableTreeNode("total Consumption"));
- tmp.add(new DefaultMutableTreeNode("number of activated Elements"));
- tmpHash.put("total Production", new PropertyDataSet());
- tmpHash.put("total Consumption", new PropertyDataSet());
- tmpHash.put("number of activated Elements", new PropertyDataSet());
- GraphDataSet gS = new GraphDataSet(hO, tmpHash);
- objectHashtable.put(name, gS);
- objectsNode.add(tmp);
- }
- }else{
- objectsNode.add(new DefaultMutableTreeNode("empty"));
- }
-
- }
-
- public void colorChanged(Color color){
- colorPanel.setBackground(color);
- }
-
- public void resetFields(){
- colorPanel.setBackground(Color.WHITE);
- redField.setText("");
- greenField.setText("");
- blueField.setText("");
- //graphNrTxtField.setText("");
- colorComboBox.setSelectedIndex(0);
- }
-
- public void disableFields(){
- redField.setEnabled(false);
- greenField.setEnabled(false);
- blueField.setEnabled(false);
- graphNrTxtField.setEnabled(false);
- colorComboBox.setEnabled(false);
- colorPanel.setBackground(Color.LIGHT_GRAY);
- }
-
- public void enableFields(){
- redField.setEnabled(true);
- greenField.setEnabled(true);
- blueField.setEnabled(true);
- graphNrTxtField.setEnabled(true);
- colorComboBox.setEnabled(true);
- colorPanel.setBackground(Color.WHITE);
- }
-
- private static void addPopup(Component component, final JPopupMenu popup) {
- component.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- if (e.isPopupTrigger()) {
- showMenu(e);
- }
- }
- public void mouseReleased(MouseEvent e) {
- if (e.isPopupTrigger()) {
- showMenu(e);
- }
- }
- private void showMenu(MouseEvent e) {
- popup.show(e.getComponent(), e.getX(), e.getY());
- }
- });
- }
- }
|