001    /*
002     * SimuCS - Simulator to use with Classifier Systems 
003     * MSc project - Oxford University 
004     * by Benoit Isaac - Summer 2005
005     */
006    
007    package simuLCS.graphics;
008    import java.awt.BorderLayout;
009    import java.awt.Dimension;
010    import java.awt.FlowLayout;
011    import java.awt.Graphics;
012    
013    import javax.swing.BoxLayout;
014    import javax.swing.JLabel;
015    import javax.swing.JPanel;
016    import javax.swing.JTextField;
017    import javax.swing.event.DocumentEvent;
018    import javax.swing.event.DocumentListener;
019    
020    import simuLCS.Classifier;
021    import simuLCS.Template;
022    
023    /**
024     * Handles the Panel showing the GUI according to the Template of the 
025     * currently selected entity
026     * @author Benoit
027     * 
028     */
029    public class G_PanClassifier extends G_Panel {
030    
031            protected G_Panel panNorth, panCenter, panSouth;
032            protected G_TemplatePanActions panActions;
033            protected G_TemplatePanConditions panConditions;
034            private Classifier currentClass;
035    
036            private JTextField nameField;
037            
038            private String titlePanel ;
039    
040            private String previousName = "";
041    
042            public G_PanClassifier(String title) {
043                    super();
044                    titlePanel = title;
045                    setLayout(new BorderLayout());
046    
047                    panNorth = new G_Panel();
048                    createPanNorth(titlePanel,panNorth);
049    
050                    add(panNorth, BorderLayout.NORTH);
051                    //              add(panCenter,BorderLayout.CENTER);
052    
053            }
054    
055            
056    
057            protected void createPanNorth(String title,G_Panel p) {
058    //              G_Panel p = new G_Panel();
059                    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
060                    JLabel j = new JLabel(title);
061    
062                    JPanel name = new JPanel(new FlowLayout());
063                    JLabel n = new JLabel("Name ?");
064                    nameField = new JTextField(20);
065                    nameField.getDocument().addDocumentListener(new ChangeNameListener());
066    
067                    Template t = getTemplateFromSelected();
068                    JLabel n2 = new JLabel("Condition for other agent:");
069                    panConditions = new G_TemplatePanConditions(t, t.getConditions());
070                    JLabel n3 = new JLabel("Action:");
071                    panActions = new G_TemplatePanActions(t, t.getActions());
072    
073                    name.add(n);
074                    name.add(nameField);
075    
076                    p.add(j);
077                    p.add(name);
078                    p.add(n2);
079                    p.add(panConditions);
080                    p.add(n3);
081                    p.add(panActions);
082                    G_Panel jempty = new G_Panel();
083                    jempty.setPreferredSize(new Dimension(this.getWidth(),50));
084                    jempty.setMinimumSize(new Dimension(this.getWidth(),50));
085                    p.add(jempty);
086    
087                    p.validate();
088            }
089    
090            class ChangeNameListener implements DocumentListener {
091                    public synchronized void updateName(DocumentEvent e) {
092    
093                            if (nameField.getText().equals("")) {
094                                    //                      User didn't type in a name...
095                                    //                              Toolkit.getDefaultToolkit().beep();
096                                    return;
097                            } else {
098                                    if (!nameField.getText().equals(previousName)) {
099                                            // new name, we update
100                                            currentClass.setName(nameField.getText());
101                                            previousName = nameField.getText();
102                                            repaintCustom();
103                                    }
104    
105                            }
106                    }
107    
108                    /* (non-Javadoc)
109                     * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
110                     */
111                    public void changedUpdate(DocumentEvent e) {
112                            updateName(e);
113                    }
114    
115                    /* (non-Javadoc)
116                     * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent)
117                     */
118                    public void insertUpdate(DocumentEvent e) {
119                            updateName(e);
120                    }
121    
122                    /* (non-Javadoc)
123                     * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
124                     */
125                    public void removeUpdate(DocumentEvent e) {
126                            updateName(e);
127    
128                    }
129            }
130    
131            public void updateValues() {
132                    currentClass = G_Panel.getCurrentClassifier();
133                    if (currentClass != null && getTemplateFromSelected() != null) {
134                            nameField.setText(currentClass.getName());
135                            nameField.validate();
136    
137                            panActions.updateValues();
138                            panConditions.updateValues();
139    
140                    }
141    
142    
143            }
144    
145            public void paintComponents(Graphics g) {
146                    createPanNorth(titlePanel,panNorth);
147                    updateValues();
148    
149                    this.validate();
150            }
151    }