org.eclipse.swt.examples.ole.win32.OLEExample.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.swt.examples.ole.win32.OLEExample.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2018 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.examples.ole.win32;

import java.io.*;

import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.ole.win32.*;
import org.eclipse.swt.widgets.*;

/**
 * OLEExample is an example that uses <code>org.eclipse.swt</code> 
 * libraries to implement a simple SWT window that can host different Active X
 * controls.
 *
 * @since 3.3
 */
public class OLEExample {

    OleClientSite clientSite;
    OleFrame oleFrame;
    Button closeButton;
    boolean createClientSite = true; // to create OleControlSite, set to false.

    public static void main(String[] args) {
        Display display = new Display();
        OLEExample example = new OLEExample();
        example.open(display);
        display.dispose();
    }

    /** 
     * Create a file Exit menu item 
     */
    void addFileMenu(OleFrame frame) {
        final Shell shell = frame.getShell();
        Menu menuBar = shell.getMenuBar();
        if (menuBar == null) {
            menuBar = new Menu(shell, SWT.BAR);
            shell.setMenuBar(menuBar);
        }
        MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE);
        fileMenu.setText("&File");
        Menu menuFile = new Menu(fileMenu);
        fileMenu.setMenu(menuFile);
        frame.setFileMenus(new MenuItem[] { fileMenu });

        MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
        menuFileExit.setText("Exit");
        menuFileExit.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> shell.dispose()));
    }

    OleClientSite createSite(OleFrame frame, String progID) {
        if (createClientSite) {
            return new OleClientSite(frame, SWT.NONE, progID);
        } else {
            return new OleControlSite(frame, SWT.NONE, progID);
        }
    }

    OleClientSite createSite(OleFrame frame, String progID, File file) {
        if (createClientSite) {
            return new OleClientSite(frame, SWT.NONE, progID, file);
        } else {
            return new OleControlSite(frame, SWT.NONE, progID, file);
        }
    }

    void disposeClient() {
        if (clientSite != null)
            clientSite.dispose();
        clientSite = null;
    }

    /**
     * Prompt the user for a file and try to open it with some known ActiveX controls.
     */
    void fileOpen() {
        Shell shell = oleFrame.getShell();
        FileDialog dialog = new FileDialog(shell, SWT.OPEN);
        String fileName = dialog.open();
        if (fileName == null)
            return;

        disposeClient();

        // try opening a .doc file using Word
        if (clientSite == null) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                String fileExtension = fileName.substring(index + 1);
                if (fileExtension.equalsIgnoreCase("doc") || fileExtension.equalsIgnoreCase("rtf")
                        || fileExtension.equalsIgnoreCase("txt")) {
                    try {
                        clientSite = createSite(oleFrame, "Word.Document", new File(fileName));
                    } catch (SWTException error2) {
                        disposeClient();
                    }
                }
            }
        }

        // try opening a xls file with Excel
        if (clientSite == null) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                String fileExtension = fileName.substring(index + 1);
                if (fileExtension.equalsIgnoreCase("xls")) {
                    try {
                        clientSite = createSite(oleFrame, "Excel.Sheet", new File(fileName));
                    } catch (SWTException error2) {
                        disposeClient();
                    }
                }
            }
        }

        // try opening a media file with MPlayer
        if (clientSite == null) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                String fileExtension = fileName.substring(index + 1);
                if (fileExtension.equalsIgnoreCase("mpa")) {
                    try {
                        clientSite = createSite(oleFrame, "MPlayer", new File(fileName));
                    } catch (SWTException error2) {
                        disposeClient();
                    }
                }
            }
        }

        // try opening with wmv, mpg, mpeg, avi, asf, wav with WMPlayer
        if (clientSite == null) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                String fileExtension = fileName.substring(index + 1);
                if (fileExtension.equalsIgnoreCase("wmv") || fileExtension.equalsIgnoreCase("mpg")
                        || fileExtension.equalsIgnoreCase("mpeg") || fileExtension.equalsIgnoreCase("avi")
                        || fileExtension.equalsIgnoreCase("asf") || fileExtension.equalsIgnoreCase("wav")) {
                    try {
                        clientSite = createSite(oleFrame, "WMPlayer.OCX");
                        OleAutomation player = new OleAutomation(clientSite);
                        int playURL[] = player.getIDsOfNames(new String[] { "URL" });
                        if (playURL != null) {
                            boolean suceeded = player.setProperty(playURL[0], new Variant(fileName));
                            if (!suceeded)
                                disposeClient();
                        } else {
                            disposeClient();
                        }
                        player.dispose();
                    } catch (SWTException error2) {
                        disposeClient();
                    }
                }
            }
        }

        // try opening a PDF file with Acrobat reader
        if (clientSite == null) {
            int index = fileName.lastIndexOf('.');
            if (index != -1) {
                String fileExtension = fileName.substring(index + 1);
                if (fileExtension.equalsIgnoreCase("pdf")) {
                    try {
                        clientSite = createSite(oleFrame, "PDF.PdfCtrl.5");
                        clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
                        OleAutomation pdf = new OleAutomation(clientSite);
                        int loadFile[] = pdf.getIDsOfNames(new String[] { "LoadFile" });
                        if (loadFile != null) {
                            Variant result = pdf.invoke(loadFile[0], new Variant[] { new Variant(fileName) });
                            if (result == null)
                                disposeClient();
                            else
                                result.dispose();
                        } else {
                            disposeClient();
                        }
                        pdf.dispose();
                    } catch (SWTException error2) {
                        disposeClient();
                    }
                }
            }
        }

        // try opening with Explorer
        if (clientSite == null) {
            try {
                clientSite = createSite(oleFrame, "Shell.Explorer");
                OleAutomation explorer = new OleAutomation(clientSite);
                int[] navigate = explorer.getIDsOfNames(new String[] { "Navigate" });

                if (navigate != null) {
                    Variant result = explorer.invoke(navigate[0], new Variant[] { new Variant(fileName) });
                    if (result == null)
                        disposeClient();
                    else
                        result.dispose();
                } else {
                    disposeClient();
                }
                explorer.dispose();
            } catch (SWTException error2) {
                disposeClient();
            }
        }

        if (clientSite != null) {
            clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
        }
    }

    void newClientSite(String progID) {
        disposeClient();
        try {
            clientSite = createSite(oleFrame, progID);
        } catch (SWTException error) {

        }
        if (clientSite != null)
            clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
    }

    public void open(Display display) {
        Shell shell = new Shell(display);
        shell.setText("OLE Example");
        shell.setLayout(new FillLayout());

        Composite parent = new Composite(shell, SWT.NONE);
        parent.setLayout(new GridLayout(4, true));

        Composite buttons = new Composite(parent, SWT.NONE);
        buttons.setLayout(new GridLayout());
        GridData gridData = new GridData(SWT.BEGINNING, SWT.FILL, false, false);
        buttons.setLayoutData(gridData);

        Composite displayArea = new Composite(parent, SWT.BORDER);
        displayArea.setLayout(new FillLayout());
        displayArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));

        Button excelButton = new Button(buttons, SWT.RADIO);
        excelButton.setText("New Excel Sheet");
        excelButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                newClientSite("Excel.Sheet");
        }));
        Button mediaPlayerButton = new Button(buttons, SWT.RADIO);
        mediaPlayerButton.setText("New MPlayer");
        mediaPlayerButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                newClientSite("MPlayer");
        }));
        Button powerPointButton = new Button(buttons, SWT.RADIO);
        powerPointButton.setText("New PowerPoint Slide");
        powerPointButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                newClientSite("PowerPoint.Slide");
        }));
        Button wordButton = new Button(buttons, SWT.RADIO);
        wordButton.setText("New Word Document");
        wordButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                newClientSite("Word.Document");
        }));
        new Label(buttons, SWT.NONE);
        Button openButton = new Button(buttons, SWT.RADIO);
        openButton.setText("Open file...");
        openButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                fileOpen();
        }));
        new Label(buttons, SWT.NONE);
        closeButton = new Button(buttons, SWT.RADIO);
        closeButton.setText("Close file");
        closeButton.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
            if (((Button) e.widget).getSelection())
                disposeClient();
        }));
        closeButton.setSelection(true);

        oleFrame = new OleFrame(displayArea, SWT.NONE);
        addFileMenu(oleFrame);

        shell.setSize(800, 600);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
}