<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">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("&lt;html&gt;&lt;i&gt;"+name+"&lt;/i&gt;&lt;br&gt;"+remote+"&lt;/html&gt;");
    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();
  }
}
</pre></body></html>