package uk.co.mmscomputing.device.printmonitor;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class PMConfigurationPanel extends JPanel implements ActionListener{
static private String[][] filters = {
{"SFF" ,"Structured Fax File CAPI"},
{"MH" ,"Fax T.4 Modified Huffman"},
{"MR" ,"Fax T.4 Modified READ"},
{"MMR" ,"Fax T.6 Modified Modified READ"},
{"NONE","None"}
};
static private int[] modes = {
PMOutputStreamFactory.SFF,
PMOutputStreamFactory.T4MH,
PMOutputStreamFactory.T4MR,
PMOutputStreamFactory.T6MMR,
PMOutputStreamFactory.NONE
};
private JFrame dialog;
private ButtonGroup filterbuttons=new ButtonGroup();
private JTextField doctf=new JTextField(32);
private JTextField nametf=new JTextField(32);
private JTextField desctf=new JTextField(32);
private int outputmode = PMOutputStreamFactory.T6MMR;
private int outputmodenew = PMOutputStreamFactory.T6MMR;
private Port port;
private boolean wantToAdd;
PMConfigurationPanel(Port port,boolean wantToAdd){
super(new BorderLayout());
this.wantToAdd=wantToAdd;
this.port=port;
outputmode=port.getOutputMode();
outputmodenew=outputmode;
JTabbedPane tp=new JTabbedPane();
tp.addTab("Description",getTextFieldsPanel(port));
tp.addTab("Compression",getFilterPanel(port));
add(tp,BorderLayout.CENTER);
JPanel bp=new JPanel();
bp.setLayout(new GridLayout(1,2));
JButton button = new JButton("ok");
button.setActionCommand("ok");
button.addActionListener(this);
bp.add(button);
button = new JButton("cancel");
button.setActionCommand("cancel");
button.addActionListener(this);
bp.add(button);
add(bp,BorderLayout.SOUTH);
}
private JPanel getFilterPanel(Port port){
JPanel rp = new JPanel(new GridLayout(0, 1));
ButtonGroup group = filterbuttons;
JRadioButton button;
for(int i=0;i<modes.length;i++){
button = new JRadioButton(filters[i][1]);
button.setActionCommand(filters[i][0]);
button.addActionListener(this);
if(outputmode==modes[i]){button.setSelected(true);}
group.add(button);
rp.add(button);
}
rp.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(rp, BorderLayout.CENTER);
return p;
}
private JPanel getTextFieldsPanel(Port port){
JPanel p=new JPanel();
p.setLayout(new GridLayout(0,1));
p.add(getNamePanel(port));
p.add(getDescriptionPanel(port));
p.add(getDocumentPathPanel(port));
return p;
}
private JPanel getNamePanel(Port port){
JPanel q=new JPanel();
q.setLayout(new GridLayout(0,1));
Border border=BorderFactory.createLineBorder(Color.black);
TitledBorder title = BorderFactory.createTitledBorder(border, "Port Name");
title.setTitleJustification(TitledBorder.CENTER);
q.setBorder(title);
nametf.setText(port.getName());
nametf.setEditable(wantToAdd);
q.add(nametf);
return q;
}
private JPanel getDescriptionPanel(Port port){
JPanel q=new JPanel();
q.setLayout(new GridLayout(0,1));
Border border=BorderFactory.createLineBorder(Color.black);
TitledBorder title = BorderFactory.createTitledBorder(border, "Description");
title.setTitleJustification(TitledBorder.CENTER);
q.setBorder(title);
desctf.setText(port.getDescription());
desctf.setEditable(wantToAdd);
q.add(desctf);
return q;
}
private JPanel getDocumentPathPanel(Port port){
JPanel q=new JPanel();
q.setLayout(new GridLayout(0,1));
Border border=BorderFactory.createLineBorder(Color.black);
TitledBorder title = BorderFactory.createTitledBorder(border, "Documents Path");
title.setTitleJustification(TitledBorder.CENTER);
q.setBorder(title);
doctf.setText(port.getDocumentsPath());
q.add(doctf);
return q;
}
public void actionPerformed(ActionEvent ev) {
String action=ev.getActionCommand();
if(action.equals("ok")){
outputmode=outputmodenew;
port.setName(nametf.getText());
port.setDescription(desctf.getText());
port.setOutputMode(outputmode);
port.setDocumentsPath(doctf.getText());
if(dialog!=null){dialog.dispose();}
}else if(action.equals("cancel")){
if(dialog!=null){dialog.dispose();}
}else{
for(int i=0;i<modes.length;i++){
if(action.equals(filters[i][0])){
outputmodenew=modes[i];break;
}
}
}
}
public void display(){
try{
dialog=new JFrame("Java Print Monitor Configuration Panel");
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setContentPane(this);
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
dialog.toFront();
}catch(Exception e){
System.out.println(getClass().getName()+".display:\n\t"+e);
e.printStackTrace();
}
}
}