// Created on 28-jul-2003 package nu.fw.jeti.jabber; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import javax.swing.*; import javax.swing.text.JTextComponent; import nu.fw.jeti.jabber.elements.XData; import nu.fw.jeti.jabber.elements.XDataBuilder; import nu.fw.jeti.jabber.elements.XDataField; import nu.fw.jeti.util.I18N; /** * @author E.S. de Boer * */ public class XDataPanel extends JPanel { private boolean editable; private List fields = new LinkedList(); private XData xdata; private int current; public XDataPanel(XData xdata,final XDataCallback callback) { setLayout(new BorderLayout()); this.xdata = xdata; if(xdata.getType().equals("form")) { editable =true; JPanel panel = new JPanel(); JButton btnOk = new JButton(); I18N.setTextAndMnemonic("Send",btnOk); btnOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { sendForm(callback); } }); panel.add(btnOk); JButton btnCancel = new JButton(I18N.gettext("Cancel")); btnCancel.setMnemonic(KeyEvent.VK_ESCAPE); btnCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { callback.cancelForm(); } }); panel.add(btnCancel); add(panel,BorderLayout.SOUTH); } if(xdata.getInstructions() !=null) { JTextArea area = new JTextArea(xdata.getInstructions()); area.setEditable(false); area.setBackground(SystemColor.control); add(area,BorderLayout.NORTH); } if(xdata.hasItems()) { createMulti(xdata.getItems()); } else if(xdata.hasFields()) { add(new JScrollPane(createFieldsPanel(xdata.getFields())),BorderLayout.CENTER); } } public Iterator getCurrentField() { if(xdata.hasItems())return ((List)xdata.getItems().get(current)).iterator(); return xdata.getFields(); } //TODO use reported to make fields private JPanel createFieldsPanel(Iterator fields) { JPanel pnlFields = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.LINE_START; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(3, 5, 0, 3); for(Iterator i = fields;i.hasNext();) { XDataField data = (XDataField)i.next(); parseField(data, pnlFields, c); } c.gridwidth = 1; c.weighty = 1.0; c.weightx = 1.0; pnlFields.add(Box.createVerticalGlue(), c); return pnlFields; } private void createMulti(final List list) { if(list.size()>1) { JPanel panel = new JPanel(); final JButton btnNext = new JButton(); final JButton btnPrevious = new JButton(); I18N.setTextAndMnemonic("search.Previous", btnPrevious); panel.add(btnPrevious,BorderLayout.EAST); final JLabel title = new JLabel("1/" + list.size()); panel.add(title,BorderLayout.CENTER); btnPrevious.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(current!=0)current--; if(current==0)btnPrevious.setEnabled(false); if(current==list.size()-2)btnNext.setEnabled(true); title.setText(current + 1 + "/" + list.size()); gotoPostion(list); } }); I18N.setTextAndMnemonic("search.Next", btnNext); btnNext.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(current