
//--< Foo starts here >--------------------------------------------------------|

import java.awt.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;


/** Creates and sets up the basic UI components. Creates an instance of FooTree
 *  , FooTable, buttons to copy, cut and paste.
 */
public class Foo
{
    private FooTree  _myTree  = null;
    private FooTable _myTable = null;
    private FooText  _myText  = null;

    private JButton copyBtn  = null,
                    cutBtn   = null,
                    pasteBtn = null;

    //-------------------------------------------------------------------------|

    public void doIt()
    {
        setupLookAndFeel();

        JFrame       mainFrame = new JFrame( "Desk");
        JDesktopPane deskPane = new JDesktopPane();

        mainFrame.getContentPane().add( deskPane);

        // Create the 'data' which will be displayed in all
        // internal frames
        ArrayList data = new ArrayList();
        data.add( new D( new Integer( 0), "Matrix",
                         new Float( 9.5f), new Vector()));
        data.add( new D( new Integer( 1), "UnBreakable",
                         new Float( 9.0f), new Vector()));
        data.add( new D( new Integer( 2), "The Sixth Sense",
                         new Float( 9.5f), new Vector()));
        data.add( new D( new Integer( 3), "Star Wars",
                         new Float( 9.0f), new Vector()));
        data.add( new D( new Integer( 4), "Indiana Jones",
                         new Float( 9.0f), new Vector()));
        data.add( new D( new Integer( 5), "Dil Chahta Hai",
                         new Float( 9.0f), new Vector()));
        data.add( new D( new Integer( 6), "Bowfinger",
                         new Float( 8.0f), new Vector()));
        data.add( new D( new Integer( 7), "The Final Destination",
                         new Float( 7.5f), new Vector()));

        // create tree internal frame
        JInternalFrame treeFrame  = new JInternalFrame( "MyTree");

        _myTree = new FooTree( "MyTree");
        _myTree.setData( data);

        treeFrame.getContentPane().add( new JScrollPane( _myTree));
        treeFrame.pack();
        deskPane.add( treeFrame);
        treeFrame.setResizable( true);
        treeFrame.setSize( 200, 250);
        treeFrame.setLocation( 10, 10);
        treeFrame.setVisible( true);

        // create text internal frame
        JInternalFrame textFrame = new JInternalFrame( "MyText");

        _myText = new FooText( "MyText");
        _myText.setData( "");

        textFrame.getContentPane().add( new JScrollPane( _myText));
        textFrame.pack();
        deskPane.add( textFrame);
        textFrame.setResizable( true);
        textFrame.setSize( 200, 250);
        textFrame.setLocation( 240, 10);
        textFrame.setVisible( true);

        // create table internal frame
        JInternalFrame tableFrame = new JInternalFrame( "MyTable");

        _myTable = new FooTable( "MyTable");
        _myTable.setData( data);

        tableFrame.getContentPane().add( new JScrollPane( _myTable));
        tableFrame.pack();
        deskPane.add( tableFrame);
        tableFrame.setResizable( true);
        tableFrame.setSize( 200, 250);
        tableFrame.setLocation( 470, 10);
        tableFrame.setVisible( true);

        // create button internal frame
        JInternalFrame  btnFrame = new JInternalFrame( "MyButtons");

        copyBtn = new JButton( "Copy from tree");
        copyBtn.addActionListener( new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    e.setSource( _myTree );
                    TransferHandler.getCopyAction().actionPerformed( e);
                    pasteBtn.setEnabled( true);
                }
            });


        cutBtn = new JButton( "Cut from tree");
        cutBtn.addActionListener( new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    e.setSource( _myTree );
                    TransferHandler.getCutAction().actionPerformed( e);
                    pasteBtn.setEnabled( true);
                }
            });

        pasteBtn = new JButton( "Paste in table");
        pasteBtn.addActionListener( new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    e.setSource( _myTable );
                    TransferHandler.getPasteAction().actionPerformed( e);
                }
            });

        pasteBtn.setEnabled( false);

        btnFrame.getContentPane().setLayout( new BorderLayout());
        btnFrame.getContentPane().add( copyBtn,  BorderLayout.WEST);
        btnFrame.getContentPane().add( cutBtn,   BorderLayout.CENTER);
        btnFrame.getContentPane().add( pasteBtn, BorderLayout.EAST);
        btnFrame.setResizable( true);
        btnFrame.setSize( 320, 60);
        btnFrame.setLocation( 190, 280);
        btnFrame.setVisible( true);
        deskPane.add( btnFrame);


        // Setup the main frame
        mainFrame.addWindowListener( new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        mainFrame.pack();
        mainFrame.setSize( 700, 380);

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = mainFrame.getSize();
        if(frameSize.height > screenSize.height)
            frameSize.height = screenSize.height;

        if(frameSize.width > screenSize.width)
            frameSize.width = screenSize.width;

        mainFrame.setLocation( (screenSize.width - frameSize.width) / 2,
                               (screenSize.height - frameSize.height) / 2 );


        mainFrame.setVisible( true);
    }

    //-------------------------------------------------------------------------|

    private void setupLookAndFeel ()
    {
        String laf_name = null;

        try
        {
            laf_name = UIManager.getSystemLookAndFeelClassName ();
            UIManager.setLookAndFeel(laf_name);
        }
        catch (java.lang.InstantiationException e)
        {
            prn ("We couldn't instantiate the look-and-feel: " + laf_name);
        }
        catch (java.lang.IllegalAccessException e)
        {
            prn ("We couldn't instantiate the look-and-feel: " + laf_name);
        }
        catch (java.lang.ClassNotFoundException e)
        {
            prn ("We couldn't instantiate the look-and-feel: " + laf_name);
        }
        catch (javax.swing.UnsupportedLookAndFeelException e)
        {
            prn ("We couldn't instantiate the look-and-feel: " + laf_name);
        }
    }

    //-------------------------------------------------------------------------|

    private void prn( String msg)
    {
        System.out.println( msg);
    }

    //-------------------------------------------------------------------------|

    public static void main( String[] args)
    {
        (new Foo()).doIt();
    }
}

//--< Foo ends here >----------------------------------------------------------|

