/******************************************************************
* 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.*;
import java.awt.event.*;
import java.text.*;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.*;
import javax.swing.JTextField;
import javax.swing.border.*;
/**
* The TimeChooser class can be used to let the user define a certain point
* in time by means of a dialog window. Used for for filling the reply-by
* attribute of an ACL.
*
* @author Giovanni Rimassa - Universita` di Parma, Chris van Aart -
* Acklin
* @created May 19, 2002
* @version $Date: 2010-04-15 11:26:09 +0200 (gio, 15 apr 2010) $ $Revision: 6311 $
*/
public class ACLTimeChooserDialog implements ActionListener {
/**
* Constructor for the TimeChooserDialog object
*/
public ACLTimeChooserDialog() {
retVal = CANCEL;
date = null;
}
/**
* Constructor for the TimeChooserDialog object
*
* @param d Description of Parameter
*/
public ACLTimeChooserDialog(Date d) {
retVal = CANCEL;
date = d;
}
/**
* @param args The command line arguments
*/
public static void main(String[] args) {
ACLTimeChooserDialog tc = new ACLTimeChooserDialog();
tc.setDate(new Date());
tc.showViewTimeDlg(null);
}
/**
* Gets the Date attribute of the TimeChooserDialog object
*
* @return The Date value
*/
public Date getDate() {
return (date);
}
/**
* Sets the Date attribute of the TimeChooserDialog object
*
* @param d The new Date value
*/
public void setDate(Date d) {
date = d;
}
/**
* Description of the Method
*
* @param parent Description of Parameter
* @return Description of the Returned Value
*/
public int showEditTimeDlg(JFrame parent) {
Calendar cal;
dlg = new JDialog(parent, "Edit time");
dlg.setBackground(Color.white);
/*
THIS PART IS RELATED TO THE EDITING OF RELATIVE TIMES (NOT YET IMPLEMENTED)
JPanel modePanel = new JPanel();
absButton = new JToggleButton("Absolute");
relButton = new JToggleButton("Relative");
relButton.setPreferredSize(absButton.getPreferredSize());
absButton.setSelected(true);
relButton.setSelected(false);
mode = ABSOLUTE;
absButton.addActionListener(this);
modePanel.add(absButton);
relButton.addActionListener(this);
modePanel.add(relButton);
dlg.getContentPane().add(modePanel);
dlg.getContentPane().add(Box.createVerticalStrut(5));
*/
// Controls to set the time
cal = new GregorianCalendar();
if (date != null) {
cal.setTime(date);
}
JPanel timePanel = new JPanel();
timePanel.setLayout(new GridLayout(2, 3));
((GridLayout)(timePanel.getLayout())).setHgap(5);
timePanel.setBackground(Color.white);
year = new JTextField(4);
year.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.YEAR), year, "Year:", Integer.MAX_VALUE);
month = new JTextField(4);
month.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.MONTH) + 1, month, "Month:", 12);
day = new JTextField(4);
day.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.DATE), day, "Day:", 31);
hour = new JTextField(4);
hour.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.HOUR_OF_DAY), hour, "Hour:", 23);
min = new JTextField(4);
min.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.MINUTE), min, "Min:", 59);
sec = new JTextField(4);
sec.setEditable(false);
addTimeUnitLine(timePanel, cal.get(Calendar.SECOND), sec, "Sec:", 59);
timePanel.setBorder(new TitledBorder("Time"));
dlg.getContentPane().add(timePanel, BorderLayout.CENTER);
// Buttons to set/reset the edited time
JPanel buttonPanel = new JPanel();
buttonPanel.setBackground(Color.white);
JButton setButton = new JButton("Set");
setButton.setBackground(Color.white);
setButton.setFont(new java.awt.Font("Dialog", 0, 11));
JButton resetButton = new JButton("Reset");
resetButton.setBackground(Color.white);
resetButton.setFont(new java.awt.Font("Dialog", 0, 11));
JButton cancelButton = new JButton("Cancel");
cancelButton.setBackground(Color.white);
cancelButton.setFont(new java.awt.Font("Dialog", 0, 11));
setButton.setPreferredSize(cancelButton.getPreferredSize());
resetButton.setPreferredSize(cancelButton.getPreferredSize());
setButton.addActionListener(this);
resetButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonPanel.add(setButton);
buttonPanel.add(resetButton);
buttonPanel.add(cancelButton);
dlg.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
// Display the dialog window
dlg.setModal(true);
dlg.pack();
dlg.setResizable(false);
if (parent != null) {// Locate the dialog relatively to the parent
dlg.setLocation(parent.getX() + (parent.getWidth() - dlg.getWidth()) / 2, parent.getY() + (parent.getHeight() - dlg.getHeight()) / 2);
}
else {// Locate the dialog relatively to the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int centerX = (int)screenSize.getWidth() / 2;
int centerY = (int)screenSize.getHeight() / 2;
dlg.setLocation(centerX - dlg.getWidth() / 2, centerY - dlg.getHeight() / 2);
}
dlg.setVisible(true);
return (retVal);
}
/**
* Description of the Method
*
* @param parent Description of Parameter
*/
public void showViewTimeDlg(JFrame parent) {
String s;
JPanel p;
dlg = new JDialog(parent, "View Time");
dlg.getContentPane().setLayout(new BoxLayout(dlg.getContentPane(), BoxLayout.Y_AXIS));
// Time indication label
p = new JPanel();
p.setBackground(Color.white);
if (date == null) {
s = "No time indication to display";
}
else {
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
s = df.format(date);
}
JLabel l = new JLabel(s);
l.setBackground(Color.white);
l.setFont(new java.awt.Font("Dialog", 0, 11));
p.add(l);
dlg.getContentPane().add(p);
// dlg.getContentPane().add(Box.createVerticalStrut(5));
// Close button
p = new JPanel();
p.setBackground(Color.white);
JButton b = new JButton("Close");
b.setBackground(Color.white);
b.setFont(new java.awt.Font("Dialog", 0, 11));
b.addActionListener(this);
p.add(b);
dlg.getContentPane().add(p);
dlg.setBackground(Color.white);
// Display the dialog window
dlg.setModal(true);
dlg.pack();
dlg.setResizable(false);
if (parent != null) {// Locate the dialog relatively to the parent
dlg.setLocation(parent.getX() + (parent.getWidth() - dlg.getWidth()) / 2, parent.getY() + (parent.getHeight() - dlg.getHeight()) / 2);
}
else {// Locate the dialog relatively to the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int centerX = (int)screenSize.getWidth() / 2;
int centerY = (int)screenSize.getHeight() / 2;
dlg.setLocation(centerX - dlg.getWidth() / 2, centerY - dlg.getHeight() / 2);
}
dlg.setVisible(true);
}
/**
* Description of the Method
*
* @param e Description of Parameter
*/
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("Set")) {
Integer I;
I = new Integer(year.getText());
int YY = I.intValue();
I = new Integer(month.getText());
int MM = I.intValue();
I = new Integer(day.getText());
int DD = I.intValue();
I = new Integer(hour.getText());
int hh = I.intValue();
I = new Integer(min.getText());
int mm = I.intValue();
I = new Integer(sec.getText());
int ss = I.intValue();
Calendar cal = new GregorianCalendar(YY, MM - 1, DD, hh, mm, ss);
date = cal.getTime();
retVal = OK;
dlg.dispose();
}
else if (command.equals("Reset")) {
date = null;
retVal = OK;
dlg.dispose();
}
else if (command.equals("Cancel")) {
retVal = CANCEL;
dlg.dispose();
}
else if (command.equals("Close")) {
dlg.dispose();
}
else if (command.equals("Absolute")) {
absButton.setSelected(true);
relButton.setSelected(false);
mode = ABSOLUTE;
}
else if (command.equals("Relative")) {
relButton.setSelected(true);
absButton.setSelected(false);
mode = RELATIVE;
}
}
/**
* Adds a feature to the TimeUnitLine attribute of the TimeChooserDialog
* object
*
* @param tp The feature to be added to the TimeUnitLine
* attribute
* @param timeUnit The feature to be added to the TimeUnitLine
* attribute
* @param timeUnitEdit The feature to be added to the TimeUnitLine
* attribute
* @param timeUnitLabel The feature to be added to the TimeUnitLine
* attribute
* @param limit The feature to be added to the TimeUnitLine
* attribute
*/
private void addTimeUnitLine(JPanel tp, int timeUnit, final JTextField timeUnitEdit, final String timeUnitLabel, final int limit) {
JPanel up = new JPanel();
((FlowLayout)(up.getLayout())).setHgap(0);
up.setBackground(Color.white);
JLabel l = new JLabel(timeUnitLabel);
l.setBackground(Color.white);
l.setFont(new java.awt.Font("Dialog", 0, 11));
timeUnitEdit.setText(String.valueOf(timeUnit));
JButton B1 = new JButton("+");
B1.setBackground(Color.white);
B1.setFont(new java.awt.Font("Dialog", 0, 11));
B1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Integer i = new Integer(timeUnitEdit.getText());
int ii = i.intValue() + 1;
if (ii <= limit) {
timeUnitEdit.setText(String.valueOf(ii));
}
}
});
JButton B2 = new JButton("-");
B2.setBackground(Color.white);
B2.setFont(new java.awt.Font("Dialog", 0, 11));
B2.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Integer i = new Integer(timeUnitEdit.getText());
int ii = i.intValue() - 1;
int inf_limit = (timeUnitLabel.equalsIgnoreCase("Hour:") || timeUnitLabel.equalsIgnoreCase("Min:") || timeUnitLabel.equalsIgnoreCase("Sec:") ? 0 : 1);
if (ii >= inf_limit) {
timeUnitEdit.setText(String.valueOf(ii));
}
}
});
B1.setMargin(new Insets(2, 4, 2, 4));
B2.setMargin(new Insets(2, 4, 2, 4));
Dimension d = new Dimension();
d.height = B1.getPreferredSize().height;
d.width = (new JLabel("XXXXX")).getPreferredSize().width;
l.setPreferredSize(d);
l.setAlignmentX((float)1);
timeUnitEdit.setPreferredSize(new Dimension(50, d.height));
up.add(l);
up.add(B1);
up.add(timeUnitEdit);
up.add(B2);
tp.add(up);
}
/**
* Description of the Field
*/
public final static int ABSOLUTE = 0;
/**
* Description of the Field
*/
public final static int RELATIVE = 1;
/**
* Description of the Field
*/
public final static int OK = 1;
/**
* Description of the Field
*/
public final static int CANCEL = 0;
JToggleButton absButton;
JToggleButton relButton;
private Date date;
private int mode;
private int retVal;
private JDialog dlg;
private JTextField year, month, day, hour, min, sec;
}
// ***EOF***