/*************************************************************************
*
* $RCSfile: SimpleViewer.java,v $
*
* $Revision: 1.3 $
*
* last change: $Author: jsc $ $Date: 2002/12/17 18:06:36 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
import javax.swing.filechooser.*;
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import com.sun.star.beans.LocalOfficeConnection;
/** A simple Applet that contains the SimpleBean.
*
* This applet is a sample implementation of the
* OpenOffice.org bean.
* When initally loaded the applet has two buttons
* one for opening an existant file and one to open
* a blank document of a given type supported by
* OpenOffice.org eg. Writer, Calc, Impress, .....
*
*/
public class SimpleViewer extends java.applet.Applet
{
/**
* Private variables declaration - GUI components
*/
private Panel buttonPanel;
private JButton newDocumentButton;
private JPopupMenu documentTypePopUp;
private JButton openDocumentButton;
private JTextField documentURLTextField;
private JMenuItem item;
private JFileChooser fileChooser;
/**
* Private variables declaration - SimpleBean variables
*/
private SimpleBean simpleBean;
/**
* Initialize the Appplet
*/
public void init()
{
//Initialize GUI components
buttonPanel = new Panel();
newDocumentButton = new JButton("New document...");
documentTypePopUp = new JPopupMenu();
openDocumentButton = new JButton("Open file...");
documentURLTextField = new JTextField();
//The simpleBean needs to be initialized to add it to the applet
simpleBean = new SimpleBean();
//Setup the connection to a local Office process
simpleBean.setOfficeConnection(new LocalOfficeConnection());
//Set up the Popup Menu to create a blank document
documentTypePopUp.setToolTipText("Create an empty document");
item = documentTypePopUp.add("Text Document");
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
createBlankDoc("private:factory/swriter",
"New text document");
}
});
item = documentTypePopUp.add("Presentation Document");
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
createBlankDoc("private:factory/simpress",
"New presentation document");
}
});
item = documentTypePopUp.add("Drawing Document");
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
createBlankDoc("private:factory/sdraw",
"New drawing document");
}
});
item = documentTypePopUp.add("Formula Document");
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
createBlankDoc("private:factory/smath",
"New formula document");
}
});
item = documentTypePopUp.add("Spreadsheet Document");
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
createBlankDoc("private:factory/scalc",
"New spreadsheet document");
}
});
openDocumentButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
openDocument(evt);
}
});
newDocumentButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
documentTypePopUp.show((Component)evt.getSource(), 0,0);
}
});
documentURLTextField.setEditable(false);
documentURLTextField.setPreferredSize(new Dimension(200, 30));
buttonPanel.add(newDocumentButton);
buttonPanel.add(openDocumentButton);
buttonPanel.add(documentURLTextField);
setLayout(new BorderLayout());
add(buttonPanel, BorderLayout.SOUTH);
add(simpleBean, BorderLayout.CENTER);
simpleBean.setMenuBarVisible(false);
}
/**
* Create a blank document of type <code>desc</code>
*
* @param url The private internal URL of the OpenOffice.org
* document describing the document
* @param desc A description of the document to be created
*/
private void createBlankDoc(String url, String desc)
{
//Create a blank document
try
{
documentURLTextField.setText(desc);
//Get the office process to load the URL
simpleBean.load(url);
}
catch (IOException ioe)
{
ioe.printStackTrace();
//return;
}
simpleBean.setMenuBarVisible(true);
return;
}
/**
* Opens an existing document using the fileChooser
*
* @param evt A button action event
*/
private void openDocument(ActionEvent evt)
{
int fileChoserRetVal = 0;
//Show the fileChooser
fileChoserRetVal = getFileChooser().showOpenDialog(this);
if(fileChoserRetVal == JFileChooser.APPROVE_OPTION)
{
//Get the file selected in the fileChooser
File file = getFileChooser().getSelectedFile();
//If the file exists, get the Office process to load it
if(file.exists())
{
try
{
documentURLTextField.setText(file.getName());
simpleBean.load("file:///" + file.getAbsolutePath());
}
catch (IOException ioe)
{
ioe.printStackTrace();
return;
}
}
else
{
//If the file does not exist create a blank writer document
try
{
documentURLTextField.setText("New text document");
simpleBean.load("private:factory/swriter");
}
catch (IOException ioe)
{
ioe.printStackTrace();
return;
}
}
simpleBean.setMenuBarVisible(true);
}
}
/**
* A file chooser factory.
*/
private JFileChooser getFileChooser()
{
if(fileChooser == null)
{
fileChooser = new JFileChooser();
}
return fileChooser;
}
/**
* An ExitListener listening for windowClosing events
*/
private class ExitListener extends WindowAdapter
{
/**
* windowClosed
*
* @param e A WindowEvent for a closed Window event
*/
public void windowClosed(WindowEvent e)
{
simpleBean.closeConnection();
stop();
System.exit(0);
}
/**
* windowClosing for a closing window event
*
* @param e A WindowEvent for a closing window event
*/
public void windowClosing(WindowEvent e)
{
((Window)e.getSource()).dispose();
}
}
public static void main(String args[])
{
Frame frame = new Frame("OpenOffice.org Demo");
SimpleViewer SimpleViewer = new SimpleViewer();
frame.setLayout(new BorderLayout());
frame.addWindowListener(SimpleViewer.new ExitListener());
SimpleViewer.init();
SimpleViewer.start();
frame.add(SimpleViewer);
frame.setSize(640,480);
frame.show();
}
}