/*
 * Copyright (c) 2002-2007 TeamDev Ltd. All rights reserved.
 *
 * Use is subject to license terms.
 *
 * The complete licence text can be found at
 * http://www.teamdev.com/comfyj/license.jsf
 */
package com.jniwrapper.win32.samples.demo;

import com.jniwrapper.win32.automation.Automation;
import com.jniwrapper.win32.automation.OleContainer;
import com.jniwrapper.win32.automation.types.Variant;
import com.jniwrapper.win32.com.ComException;
import com.jniwrapper.win32.com.types.CLSID;
import com.jniwrapper.win32.HResult;
import com.jniwrapper.util.Logger;

import javax.swing.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 @author Serge Piletsky
 @author Vladimir Kondrashchenko
 */
public class PDFContainer extends OleContainerInfoBean
{
    private static final Logger LOG = Logger.getInstance(PDFContainer.class);

    private static final String AcrobatProgID = "PDF.PdfCtrl.5";
    private static final String Acrobat7ProgID = "AcroPDF.PDF";

    private static String _progID;

    static
    {
        try
        {
            CLSID.createFromProgID(Acrobat7ProgID);
            _progID = Acrobat7ProgID;
        }
        catch (ComException e)
        {
            // "AcroPDF.PDF" is not registered
            if (e.getHResult() == HResult.CO_E_CLASSSTRING)
            {
                _progID = AcrobatProgID;
            }
            else
            {
                throw e;
            }
        }
    }

    private JCheckBox cbShowToolbar;
    private JCheckBox cbShowScrollBars;

    public PDFContainer()
    {
        super(_progID,
                "PDF Files (*.pdf)|*.pdf",
                "This page demonstrates OLE Container with PDF ActiveX control.",
                "pdf");
    }

    public void loadFile(String fileName)
    {
        final OleContainer container = getContainer();
        Automation automation = new Automation(container.getOleObject());
        automation.setProperty("src", fileName);
        if (_progID.equals(Acrobat7ProgID))
        {
            automation.invoke("LoadFile"new Object[]{fileName});
        }
        cbShowScrollBars.setSelected(true);
        cbShowScrollBars.setEnabled(true);
        cbShowToolbar.setSelected(true);
        cbShowToolbar.setEnabled(true);
    }

    public JPanel createFileInfoPanel()
    {
        JPanel acrobatCustomization = new JPanel(new GridBagLayout());
        acrobatCustomization.setBorder(BorderFactory.createTitledBorder("Acrobar Reader Customization"));
        acrobatCustomization.setPreferredSize(new Dimension(10075));

        final Automation acrobat = new Automation(getContainer().getOleObject());

        cbShowToolbar = new JCheckBox("Display Toolbar"true);
        cbShowToolbar.setEnabled(false);
        cbShowToolbar.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                acrobat.invoke("setShowToolbar"new Variant[] { new Variant(cbShowToolbar.isSelected())});
            }
        });
        cbShowScrollBars = new JCheckBox("Display Scrollbars"true);
        cbShowScrollBars.setEnabled(false);
        cbShowScrollBars.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                acrobat.invoke("setShowScrollbars"new Variant[] { new Variant(cbShowScrollBars.isSelected())});
            }
        });

        acrobatCustomization.add(cbShowToolbar, new GridBagConstraints(00110.00.0
                , GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(1010510)00));
        acrobatCustomization.add(cbShowScrollBars, new GridBagConstraints(01110.00.0
                , GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0101010)00));

        acrobatCustomization.add(new Panel()new GridBagConstraints(02111.01.0
                , GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0000)00));

        return acrobatCustomization;
    }

    public ImageIcon getIcon()
    {
        ImageIcon icon = null;
        try
        {
            icon = new ImageIcon(ImageIO.read(ExcelContainer.class.getResourceAsStream("res/acrobat.png")));
        }
        catch (Exception e)
        {
            LOG.error("", e);
        }
        return icon;
    }
}