import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.wildcrest.j2printerworks.*;
import com.symantec.itools.javax.swing.icons.ImageIcon;

public class J2PanelPrinterImageApplication extends javax.swing.JFrame
{
	public J2PanelPrinterImageApplication()
	{
		// 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
		setJMenuBar(menuBar);
		setTitle("J2PanelPrinter Image Application");
		setDefaultCloseOperation(javax.swing.JFrame.DO_NOTHING_ON_CLOSE);
		getContentPane().setLayout(new BorderLayout(0,0));
		getContentPane().setBackground(java.awt.Color.white);
		setSize(488,309);
		setVisible(false);
		try {
			openIcon.setImageLocation(symantec.itools.net.RelativeURL.getURL("images/open.gif"));
		}
		catch (java.net.MalformedURLException error) { }
		//$$ openIcon.move(120,312);
		try {
			printIcon.setImageLocation(symantec.itools.net.RelativeURL.getURL("images/print.gif"));
		}
		catch (java.net.MalformedURLException error) { }
		//$$ printIcon.move(96,312);
		try {
			printsetupIcon.setImageLocation(symantec.itools.net.RelativeURL.getURL("images/printsetup.gif"));
		}
		catch (java.net.MalformedURLException error) { }
		//$$ printsetupIcon.move(72,312);
		try {
			previewIcon.setImageLocation(symantec.itools.net.RelativeURL.getURL("images/preview.gif"));
		}
		catch (java.net.MalformedURLException error) { }
		//$$ previewIcon.move(48,312);
		try {
			aboutIcon.setImageLocation(symantec.itools.net.RelativeURL.getURL("images/about.gif"));
		}
		catch (java.net.MalformedURLException error) { }
		//$$ aboutIcon.move(0,312);
		saveFileDialog.setMode(FileDialog.SAVE);
		saveFileDialog.setTitle("Save");
		//$$ saveFileDialog.move(24,336);
		openFileDialog.setMode(FileDialog.LOAD);
		openFileDialog.setTitle("Open");
		//$$ openFileDialog.move(0,336);
		//$$ menuBar.move(168,312);
		//$$ JMenuBar1.move(168,312);
		fileMenu.setText("File");
		fileMenu.setActionCommand("File");
		fileMenu.setMnemonic((int)'F');
		menuBar.add(fileMenu);
		openItem.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
		openItem.setText("Open Image...");
		openItem.setActionCommand("Open...");
		openItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.Event.CTRL_MASK));
		openItem.setMnemonic((int)'O');
		fileMenu.add(openItem);
		fileMenu.add(JSeparator2);
		pagesetupItem.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
		pagesetupItem.setText("Page Setup...");
		pagesetupItem.setActionCommand("Save");
		pagesetupItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.Event.CTRL_MASK));
		pagesetupItem.setMnemonic((int)'S');
		fileMenu.add(pagesetupItem);
		previewItem.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
		previewItem.setText("Print Preview...");
		previewItem.setActionCommand("Save");
		previewItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.Event.CTRL_MASK));
		previewItem.setMnemonic((int)'S');
		fileMenu.add(previewItem);
		printItem.setText("Print...");
		printItem.setActionCommand("Save As...");
		printItem.setMnemonic((int)'A');
		fileMenu.add(printItem);
		fileMenu.add(JSeparator1);
		exitItem.setText("Exit");
		exitItem.setActionCommand("Exit");
		exitItem.setMnemonic((int)'X');
		fileMenu.add(exitItem);
		paginationMenu.setText("Pagination");
		paginationMenu.setActionCommand("Pagination");
		menuBar.add(paginationMenu);
		shrinkItem.setText("Shrink-to-fit");
		shrinkItem.setActionCommand("Shrink-to-fit");
		shrinkItem.setSelected(true);
		paginationMenu.add(shrinkItem);
		tileItem.setText("Tile");
		tileItem.setActionCommand("Tile");
		paginationMenu.add(tileItem);
		horizontalAlignmentMenu.setText("Align Horizontal");
		horizontalAlignmentMenu.setActionCommand("HorizontalAlignment");
		menuBar.add(horizontalAlignmentMenu);
		leftItem.setText("Left");
		leftItem.setActionCommand("Left");
		horizontalAlignmentMenu.add(leftItem);
		centerHItem.setText("Center");
		centerHItem.setActionCommand("Center");
		centerHItem.setSelected(true);
		horizontalAlignmentMenu.add(centerHItem);
		rightItem.setText("Right");
		rightItem.setActionCommand("Right");
		horizontalAlignmentMenu.add(rightItem);
		veritcalAlignmentMenu.setText("Align Vertical");
		veritcalAlignmentMenu.setActionCommand("VerticalAlignment");
		menuBar.add(veritcalAlignmentMenu);
		topItem.setText("Top");
		topItem.setActionCommand("Top");
		veritcalAlignmentMenu.add(topItem);
		centerVItem.setText("Center");
		centerVItem.setActionCommand("Center");
		centerVItem.setSelected(true);
		veritcalAlignmentMenu.add(centerVItem);
		bottomItem.setText("Bottom");
		bottomItem.setActionCommand("Bottom");
		veritcalAlignmentMenu.add(bottomItem);
		helpMenu.setText("Help");
		helpMenu.setActionCommand("Help");
		helpMenu.setMnemonic((int)'H');
		menuBar.add(helpMenu);
		aboutItem.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
		aboutItem.setText("About...");
		aboutItem.setActionCommand("About...");
		aboutItem.setMnemonic((int)'A');
		helpMenu.add(aboutItem);
		pagesetupItem.setIcon(printsetupIcon);
		printItem.setIcon(printIcon);
		openItem.setIcon(openIcon);
		previewItem.setIcon(previewIcon);
		aboutItem.setIcon(aboutIcon);
		//}}

		//{{INIT_MENUS
		//}}

		//{{REGISTER_LISTENERS
		SymWindow aSymWindow = new SymWindow();
		this.addWindowListener(aSymWindow);
		SymAction lSymAction = new SymAction();
		openItem.addActionListener(lSymAction);
		previewItem.addActionListener(lSymAction);
		exitItem.addActionListener(lSymAction);
		aboutItem.addActionListener(lSymAction);
		pagesetupItem.addActionListener(lSymAction);
		printItem.addActionListener(lSymAction);
		shrinkItem.addActionListener(lSymAction);
		tileItem.addActionListener(lSymAction);
		leftItem.addActionListener(lSymAction);
		centerHItem.addActionListener(lSymAction);
		rightItem.addActionListener(lSymAction);
		topItem.addActionListener(lSymAction);
		centerVItem.addActionListener(lSymAction);
		bottomItem.addActionListener(lSymAction);
		//}}

		panelPrinter.setPageRule(J2PanelPrinter.SHRINK_TO_FIT);
		panelPrinter.setHorizontalAlignment(J2PanelPrinter.CENTER);
		panelPrinter.setVerticalAlignment(J2PanelPrinter.CENTER);

            readImageFile("./images/MountRose.jpg");

	}

    /**
     * Creates a new instance of JFrame1 with the given title.
     * @param sTitle the title for the new frame.
     * @see #JFrame1()
     */
     public J2PanelPrinterImageApplication(String sTitle)
	{
		this();
		setTitle(sTitle);
	}

	/**
	 * The entry point for this application.
	 * Sets the Look and Feel to the System Look and Feel.
	 * Creates a new JFrame1 and makes it visible.
	 */
	static public void main(String args[])
	{
		try {
		    try {
                        // L&F tests:
		        //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                        //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                        //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                        //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                        //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
		    }
		    catch (Exception e) {
		    }

			//Create a new instance of our application's frame, and make it visible.
			(new J2PanelPrinterImageApplication()).setVisible(true);
		}
		catch (Throwable t) {
			t.printStackTrace();
			//Ensure the application exits with an error condition.
			System.exit(1);
		}
	}

    /**
     * Notifies this component that it has been added to a container
     * This method should be called by <code>Container.add</code>, and
     * not by user code directly.
     * Overridden here to adjust the size of the frame if needed.
     * @see java.awt.Container#removeNotify
     */
	public void addNotify()
	{
		// Record the size of the window prior to calling parents addNotify.
		Dimension size = getSize();

		super.addNotify();

		if (frameSizeAdjusted)
			return;
		frameSizeAdjusted = true;

		// Adjust size of frame according to the insets and menu bar
		javax.swing.JMenuBar menuBar = getRootPane().getJMenuBar();
		int menuBarHeight = 0;
		if (menuBar != null)
		    menuBarHeight = menuBar.getPreferredSize().height;
		Insets insets = getInsets();
		setSize(insets.left + insets.right + size.width, insets.top + insets.bottom + size.height + menuBarHeight);
	}

	// Used by addNotify
	boolean frameSizeAdjusted = false;

	//{{DECLARE_CONTROLS
	com.symantec.itools.javax.swing.icons.ImageIcon openIcon = new com.symantec.itools.javax.swing.icons.ImageIcon();
	com.symantec.itools.javax.swing.icons.ImageIcon printIcon = new com.symantec.itools.javax.swing.icons.ImageIcon();
	com.symantec.itools.javax.swing.icons.ImageIcon printsetupIcon = new com.symantec.itools.javax.swing.icons.ImageIcon();
	com.symantec.itools.javax.swing.icons.ImageIcon previewIcon = new com.symantec.itools.javax.swing.icons.ImageIcon();
	com.symantec.itools.javax.swing.icons.ImageIcon aboutIcon = new com.symantec.itools.javax.swing.icons.ImageIcon();
	java.awt.FileDialog saveFileDialog = new java.awt.FileDialog(this);
	java.awt.FileDialog openFileDialog = new java.awt.FileDialog(this);
	javax.swing.JMenuBar menuBar = new javax.swing.JMenuBar();
	javax.swing.JMenu fileMenu = new javax.swing.JMenu();
	javax.swing.JMenuItem openItem = new javax.swing.JMenuItem();
	javax.swing.JSeparator JSeparator2 = new javax.swing.JSeparator();
	javax.swing.JMenuItem pagesetupItem = new javax.swing.JMenuItem();
	javax.swing.JMenuItem previewItem = new javax.swing.JMenuItem();
	javax.swing.JMenuItem printItem = new javax.swing.JMenuItem();
	javax.swing.JSeparator JSeparator1 = new javax.swing.JSeparator();
	javax.swing.JMenuItem exitItem = new javax.swing.JMenuItem();
	javax.swing.JMenu paginationMenu = new javax.swing.JMenu();
	javax.swing.JCheckBoxMenuItem shrinkItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JCheckBoxMenuItem tileItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JMenu horizontalAlignmentMenu = new javax.swing.JMenu();
	javax.swing.JCheckBoxMenuItem leftItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JCheckBoxMenuItem centerHItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JCheckBoxMenuItem rightItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JMenu veritcalAlignmentMenu = new javax.swing.JMenu();
	javax.swing.JCheckBoxMenuItem topItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JCheckBoxMenuItem centerVItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JCheckBoxMenuItem bottomItem = new javax.swing.JCheckBoxMenuItem();
	javax.swing.JMenu helpMenu = new javax.swing.JMenu();
	javax.swing.JMenuItem aboutItem = new javax.swing.JMenuItem();
	//}}

	J2Printer printer = new J2Printer();
	J2PanelPrinter panelPrinter = new J2PanelPrinter();

	//{{DECLARE_MENUS
	//}}

	void exitApplication()
	{
		try {
	    	// Beep
	    	Toolkit.getDefaultToolkit().beep();
	    	// Show a confirmation dialog
	    	int reply = JOptionPane.showConfirmDialog(this,
	    	                                          "Do you really want to exit?",
	    	                                          "JFC Application - Exit" ,
	    	                                          JOptionPane.YES_NO_OPTION,
	    	                                          JOptionPane.QUESTION_MESSAGE);
			// If the confirmation was affirmative, handle exiting.
			if (reply == JOptionPane.YES_OPTION)
			{
		    	this.setVisible(false);    // hide the Frame
		    	this.dispose();            // free the system resources
		    	System.exit(0);            // close the application
			}
		} catch (Exception e) {
		}
	}

	class SymWindow extends java.awt.event.WindowAdapter
	{
		public void windowClosing(java.awt.event.WindowEvent event)
		{
			Object object = event.getSource();
			if (object == J2PanelPrinterImageApplication.this)
				J2PanelPrinterImageApplication_windowClosing(event);
		}
	}

	void J2PanelPrinterImageApplication_windowClosing(java.awt.event.WindowEvent event)
	{
		exitApplication();
	}

	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == openItem)
				openItem_actionPerformed(event);
			else if (object == previewItem)
				previewItem_actionPerformed(event);
			else if (object == exitItem)
				exitItem_actionPerformed(event);
			else if (object == aboutItem)
				aboutItem_actionPerformed(event);
			else if (object == pagesetupItem)
				pagesetupItem_actionPerformed(event);
			else if (object == printItem)
				printItem_actionPerformed(event);
			else if (object == shrinkItem)
				shrinkItem_actionPerformed(event);
			else if (object == tileItem)
				tileItem_actionPerformed(event);
			else if (object == leftItem)
				leftItem_actionPerformed(event);
			else if (object == centerHItem)
				centerHItem_actionPerformed(event);
			else if (object == rightItem)
				rightItem_actionPerformed(event);
			else if (object == topItem)
				topItem_actionPerformed(event);
			else if (object == centerVItem)
				centerVItem_actionPerformed(event);
			else if (object == bottomItem)
				bottomItem_actionPerformed(event);

		}
	}

        String rememberDir = ".";
	void openItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		openFileDialog.setFile("*.gif; *.jpg; *.png");
                openFileDialog.setDirectory(rememberDir);
		openFileDialog.setVisible(true);
		String file = openFileDialog.getDirectory() + openFileDialog.getFile();
                rememberDir = openFileDialog.getDirectory();
                readImageFile(file);
	}

        private void readImageFile(String file) {
		Image image = new javax.swing.ImageIcon(file).getImage();
                ImagePanel imagePanel = new ImagePanel(image);

                // Java-style border: imagePanel.setBorder(new javax.swing.border.LineBorder(Color.green,20));
                // J2PW-style border: panelPrinter.setOutsideLines(true);
                // (can use either or both)

                getContentPane().removeAll();
		getContentPane().add(new JScrollPane(imagePanel), "Center");
		pack();

		panelPrinter.setPanel(imagePanel);
		printer.setPageable(panelPrinter);
	}


	void exitItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		exitApplication();
	}

	void aboutItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		try {
			// JAboutDialog Create with owner and show as modal
			{
				JAboutDialog JAboutDialog1 = new JAboutDialog(this);
				JAboutDialog1.setModal(true);
				JAboutDialog1.show();
			}
		} catch (Exception e) {
		}
	}

	void pagesetupItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		printer.showPageSetupDialog();
	}

	void previewItem_actionPerformed(java.awt.event.ActionEvent event)
	{
           //test: printer.setPageImagesMonochrome(true);
           printer.showPrintPreviewDialog(this);
	}

	void printItem_actionPerformed(java.awt.event.ActionEvent event)
	{
           //test: printer.printToPDF("outPDF.pdf");
	     printer.print();
	}

	void shrinkItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setPageRule(J2PanelPrinter.SHRINK_TO_FIT);
		shrinkItem.setSelected(true);
		tileItem.setSelected(false);
	}

	void tileItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setPageRule(J2PanelPrinter.TILE);
		shrinkItem.setSelected(false);
		tileItem.setSelected(true);
	}

	void leftItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setHorizontalAlignment(J2PanelPrinter.LEFT);
		leftItem.setSelected(true);
		centerHItem.setSelected(false);
		rightItem.setSelected(false);
	}

	void centerHItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setHorizontalAlignment(J2PanelPrinter.CENTER);
		leftItem.setSelected(false);
		centerHItem.setSelected(true);
		rightItem.setSelected(false);
	}

	void rightItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setHorizontalAlignment(J2PanelPrinter.RIGHT);
		leftItem.setSelected(false);
		centerHItem.setSelected(false);
		rightItem.setSelected(true);
	}

	void topItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setVerticalAlignment(J2PanelPrinter.TOP);
		topItem.setSelected(true);
		centerVItem.setSelected(false);
		bottomItem.setSelected(false);
	}

	void centerVItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setVerticalAlignment(J2PanelPrinter.CENTER);
		topItem.setSelected(false);
		centerVItem.setSelected(true);
		bottomItem.setSelected(false);
	}

	void bottomItem_actionPerformed(java.awt.event.ActionEvent event)
	{
		panelPrinter.setVerticalAlignment(J2PanelPrinter.BOTTOM);
		topItem.setSelected(false);
		centerVItem.setSelected(false);
		bottomItem.setSelected(true);
	}
}
