/*
	A basic extension of the java.awt.Frame class
 */

import java.awt.*;
import java.net.RTP.*;
import java.net.RTP.Packets.*;

public class frRTPMonitor extends Frame implements RTP_actionListener
{
    private static Session rtpSession;
    
	public frRTPMonitor(Session s)
	{
	    rtpSession = s;
	    
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(new BorderLayout(0,0));
		setVisible(false);
		setSize(insets().left + insets().right + 488,insets().top + insets().bottom + 250);
		list = new java.awt.List(0,false);
		list.setBounds(insets().left + 0,insets().top + 23,488,227);
		add("Center", list);
		panel1 = new java.awt.Panel();
		panel1.setLayout(new GridLayout(1,4,0,0));
		panel1.setBounds(insets().left + 0,insets().top + 0,488,0);
		add("North", panel1);
		chkShowData = new java.awt.Checkbox("Show RTP Packet Data");
		chkShowData.setBounds(0,0,162,23);
		panel1.add(chkShowData);
		txtTestMessage = new java.awt.TextField();
		txtTestMessage.setText("Test Message");
		txtTestMessage.setBounds(162,0,162,23);
		panel1.add(txtTestMessage);
		button1 = new java.awt.Button();
		button1.setLabel("Send test packet");
		button1.setBounds(324,0,162,23);
		button1.setBackground(new Color(12632256));
		panel1.add(button1);
		setTitle("RTP PacketMonitor");
		//}}

		//{{INIT_MENUS
		//}}

		//{{REGISTER_LISTENERS
		SymWindow aSymWindow = new SymWindow();
		this.addWindowListener(aSymWindow);
		SymAction lSymAction = new SymAction();
		button1.addActionListener(lSymAction);
		//}}
	}

	public frRTPMonitor(String title, Session s)
	{
		this(s);
		setTitle(title);
	}

	public synchronized void show()
	{
		move(50, 50);
		super.show();
	}

	public void addNotify()
	{
	    // Record the size of the window prior to calling parents addNotify.
	    Dimension d = getSize();
	    
		super.addNotify();

		if (fComponentsAdjusted)
			return;

		// Adjust components according to the insets
		setSize(insets().left + insets().right + d.width, insets().top + insets().bottom + d.height);
		Component components[] = getComponents();
		for (int i = 0; i < components.length; i++)
		{
			Point p = components[i].getLocation();
			p.translate(insets().left, insets().top);
			components[i].setLocation(p);
		}
		fComponentsAdjusted = true;
	}

    // Used for addNotify check.
	boolean fComponentsAdjusted = false;

	//{{DECLARE_CONTROLS
	java.awt.List list;
	java.awt.Panel panel1;
	java.awt.Checkbox chkShowData;
	java.awt.TextField txtTestMessage;
	java.awt.Button button1;
	//}}

	//{{DECLARE_MENUS
	//}}

	class SymWindow extends java.awt.event.WindowAdapter
	{
		public void windowClosing(java.awt.event.WindowEvent event)
		{
			Object object = event.getSource();
			if (object == frRTPMonitor.this)
				Frame1_WindowClosing(event);
		}
	}
	
	void Frame1_WindowClosing(java.awt.event.WindowEvent event)
	{
		hide();		 // hide the Frame
	}
	
    public void handleRTPEvent ( RTPPacket rtppkt) {
        String sItem =  new String ( "( RTP SSRC: " + rtppkt.SSRC + 
                       ", Seq No: " + rtppkt.SequenceNumber +
                       ", TS: " + rtppkt.TimeStamp  );        
                       
        if ( chkShowData.getState() == true )
            sItem += ", Data: " + new String ( rtppkt.data ) ;
        
        sItem += ")";
        
        list.addItem ( sItem );
            
        list.select ( list.getItemCount() -1 );
    }
	

	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == button1)
				button1_Action(event);
		}
	}

	void button1_Action(java.awt.event.ActionEvent event)
	{
		rtpSession.m_RTPHandler.sendTestPacket();
		//txtTestMessage.;
	}
}
