/******************************************************************
* JADE - Java Agent DEvelopment Framework is a framework to develop
* multi-agent systems in compliance with the FIPA specifications.
* Copyright (C) 2002 TILAB S.p.A.
*
* This file is donated by Acklin B.V. to the JADE project.
*
*
* GNU Lesser General Public License
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation,
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
* ***************************************************************/
package jade.tools.gui;
import java.awt.Color;
import java.awt.event.*;
import java.lang.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import jade.lang.acl.*;
import jade.domain.FIPANames;
/**
* This class is used for selecting performatives or protocols of ACLMessage.
*
* @author Chris van Aart - Acklin B.V., the Netherlands
* @created April 26, 2002
*/
public class ACLComboBox extends JComboBox implements Observer {
/**
* Sets the Editable attribute of the ACLComboBox object
*
* @param theBool The new Editable value
*/
public void setEditable(boolean theBool) {
super.setEditable(theBool);
this.setEnabled(theBool);
}
/**
* register performatives in the comboBoxModel
*
* @param arg part of observer interface
*/
public void registerPerformatives(Object arg) {
comboBoxModel.removeAllElements();
String[] names = ACLMessage.getAllPerformativeNames();
for (int i = 0; i < names.length; i++) {
comboBoxModel.addElement(names[i]);
}
this.setModel(comboBoxModel);
this.setRenderer(new ACLPerformativesRenderer());
this.msg = (ACLMessage)arg;
this.setSelectedIndex(msg.getPerformative());
String methodName = "get" + fieldName;
String theType = "java.lang.String";
this.setBackground(Color.white);
this.setFont(new java.awt.Font("Dialog", 1, 11));
Color foreGround = ACLPerformativesRenderer.determineColor(msg.getPerformative(msg.getPerformative()));
this.setForeground(foreGround);
UIManager.put("ComboBox.disabledForeground", foreGround);
UIManager.put("ComboBox.disabledBackground", Color.white);
this.addItemListener(
new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
performativeItemStateChanged();
}
});
repaint();
updateUI();
}
/**
* Register protocols from ACLMessage
*
* @param arg ACLMessage
*/
public void registerProtocol(Object arg) {
comboBoxModel.removeAllElements();
for (int i = 0; i < fipaProtocols.length; i++) {
comboBoxModel.addElement(fipaProtocols[i]);
}
this.setModel(comboBoxModel);
this.msg = (ACLMessage)arg;
this.setSelectedItem(msg.getProtocol());
String methodName = "get" + fieldName;
String theType = "java.lang.String";
this.setBackground(Color.white);
UIManager.put("ComboBox.disabledForeground", Color.black);
UIManager.put("ComboBox.disabledBackground", Color.white);
this.setFont(new java.awt.Font("Dialog", 0, 11));
this.setEditable(true);
this.addItemListener(
new java.awt.event.ItemListener() {
public void itemStateChanged(ItemEvent e) {
protocolItemStateChanged();
}
});
repaint();
updateUI();
}
/**
* part of observer interface
*
* @param ob observable
* @param arg what to observe
*/
public void update(Observable ob, Object arg) {
}
/**
* triggered when focus lost
*
* @param e FocusEvent
*/
public void focusLost(FocusEvent e) {
}
/**
* Description of the Method
*/
void performativeItemStateChanged() {
if (this.getSelectedItem() == null) {
return;
}
String value = (String)this.getSelectedItem();
this.setForeground(ACLPerformativesRenderer.determineColor(value));
if (this.isEnabled()) {
int i = this.getSelectedIndex();
msg.setPerformative(i);
}
}
/**
* Description of the Method
*/
void protocolItemStateChanged() {
if (this.getSelectedItem() == null) {
return;
}
if (this.isEnabled()) {
String value = (String)this.getSelectedItem();
msg.setProtocol(value);
}
}
private static String fipaProtocols[] = {
"",
FIPANames.InteractionProtocol.FIPA_REQUEST,
FIPANames.InteractionProtocol.FIPA_QUERY,
FIPANames.InteractionProtocol.FIPA_REQUEST_WHEN,
FIPANames.InteractionProtocol.FIPA_ENGLISH_AUCTION,
FIPANames.InteractionProtocol.FIPA_DUTCH_AUCTION,
FIPANames.InteractionProtocol.FIPA_BROKERING,
FIPANames.InteractionProtocol.FIPA_RECRUITING,
FIPANames.InteractionProtocol.FIPA_PROPOSE,
FIPANames.InteractionProtocol.FIPA_CONTRACT_NET,
FIPANames.InteractionProtocol.FIPA_ITERATED_CONTRACT_NET
};
private DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel();
private ACLMessage msg;
private String fieldName;
}
// ***EOF***