package uk.co.mmscomputing.device.fax;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.beans.*;
import javax.swing.border.*;
import uk.co.mmscomputing.util.*;
public class FaxPanel extends JComponent implements FaxConstants,FaxSenderListener {
private FaxSender sender;
private JButton sendbutton;
private JButton selbutton;
private Properties properties;
public FaxPanel(Properties properties,FaxSender sender){
this.properties=properties;
this.sender=sender;
setLayout(new GridLayout(2,1));
sendbutton=new JButton("send",new JarImageIcon(getClass(),"32x32/fax.png"));
sendbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "send"));
// sendbutton.setEnabled(false);
add(sendbutton);
selbutton=new JButton("select",new JarImageIcon(getClass(),"32x32/list.png"));
selbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "select"));
// add(selbutton);
sender.addListener(this);
}
public void send(){
// sendbutton.setEnabled(false);
// selbutton.setEnabled(false);
sender.setMetadata(properties);
}
public void select(){ // select sane data source
// sendbutton.setEnabled(false);
// selbutton.setEnabled(false);
}
public void update(FaxSenderMetadata.Type type, FaxSenderMetadata md){
try{
if(type.equals(FaxSenderMetadata.STATE)){
if(md.isState(faxRinging)){
int waitforsecs = md.getTimeOut();
String rno = md.getRemoteNo();
md.setTimeOut(waitforsecs,new RequestProgressMonitor(rno,"",waitforsecs*1000));
}
}
}catch(Exception e){
System.out.println("9\b"+getClass().getName()+".update:\n\t"+e);
e.printStackTrace();
}
}
}
class RequestProgressMonitor extends uk.co.mmscomputing.concurrent.Timer
implements uk.co.mmscomputing.concurrent.TimerListener{
JFrame dialog;
JProgressBar progressBar;
public RequestProgressMonitor(String remote,String name,int timeout){
super(timeout);
setDelay(500);
setListener(this);
dialog=getDialog(remote,name);
}
public JFrame getDialog(String remote,String name){
JPanel panel=new JPanel();
JPanel q=new JPanel();
q.setLayout(new BorderLayout());
Border border = q.getBorder();
Border margin = new EmptyBorder(10,10,5,10);
q.setBorder(new CompoundBorder(border, margin));
q.add(new JLabel("Fax Connection Request :"),BorderLayout.NORTH);
JLabel img=new JLabel(new JarImageIcon(getClass(),"32x32/fax.png"));
img.setBorder(new EmptyBorder(10,10,10,10));
q.add(img,BorderLayout.WEST);
// JLabel msg=new JLabel("<html><i>"+name+"</i><br>"+remote+"</html>");
JLabel msg=new JLabel("Fax Number : "+remote);
msg.setBorder(new EmptyBorder(10,10,10,10));
q.add(msg,BorderLayout.CENTER);
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
progressBar = new JProgressBar(0,timeout);
progressBar.setValue(0);
progressBar.setIndeterminate(false);
progressBar.setStringPainted(true);
progressBar.setBorder(new EmptyBorder(5,0,5,0));
p.add(progressBar,BorderLayout.NORTH);
JPanel buttons=new JPanel();
buttons.setLayout(new GridLayout(0,3));
buttons.add(new JPanel());
JButton button=new JButton(
new AbstractAction("cancel"){
public void actionPerformed(ActionEvent ev){
release();
}
}
);
buttons.add(button);
buttons.add(new JPanel());
p.add(buttons,BorderLayout.CENTER);
q.add(p,BorderLayout.SOUTH);
panel.setLayout(new BorderLayout());
panel.setOpaque(true);
panel.add(q,BorderLayout.NORTH);
JFrame dialog = new JFrame("Progress...");
dialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
dialog.setContentPane(panel);
dialog.pack();
return dialog;
}
public void begin(int timeleft){
dialog.setLocationRelativeTo(null);
dialog.toFront();
dialog.setVisible(true);
}
public void tick(int timeleft){
progressBar.setValue(timeout-timeleft);
progressBar.setString("Pick up in "+timeleft+" ms");
}
public void end(int timeleft){
dialog.dispose();
}
}