import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleClientSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
public class OleWordExample {
private final Display display = new Display();
private Shell shell = new Shell(display);
private OleClientSite clientSite;
private OleFrame frame;
private String path = "";
public OleWordExample() {
shell.setSize(1024, 768);
shell.setText("Word Example");
shell.setLayout(new FillLayout());
}
private void createOleFrame() {
try {
frame = new OleFrame(shell, SWT.NONE);
addMenu();
createClientSite("Word.Document");
OleAutomation oleAutomation = new OleAutomation(clientSite);
} catch (SWTError e) {
System.out.println("Unable to open activeX control");
display.dispose();
return;
}
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private void addMenu() {
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 });
// Work
MenuItem menuFileNew = new MenuItem(menuFile, SWT.CASCADE);
menuFileNew.setText("New");
menuFileNew.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
newFile("new");
}
});
// work
MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE);
menuFileOpen.setEnabled(false);
menuFileOpen.setText("Open...");
menuFileOpen.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
newFile("open");
}
});
// work
MenuItem menuFileSave = new MenuItem(menuFile, SWT.CASCADE);
menuFileSave.setText("Save");
menuFileSave.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
saveFile();
}
});
// work
MenuItem menuFileSaveAs = new MenuItem(menuFile, SWT.CASCADE);
menuFileSaveAs.setText("Save As");
menuFileSaveAs.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
saveAsFile();
}
});
// work
MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE);
menuFileExit.setText("Exit");
menuFileExit.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
shell.dispose();
}
});
}
private void newFile(String command) {
if (clientSite.isDirty()) {
MessageBox messageBox = new MessageBox(clientSite.getShell(),
SWT.YES | SWT.NO | SWT.CANCEL);
messageBox.setMessage("Would you like to save the changes");
int answer = messageBox.open();
switch (answer) {
case 64:
saveFile();
fileOpen(command);
break;
case 128:
fileOpen(command);
break;
default:
break;
}
} else {
fileOpen(command);
}
}
private void createClientSite(final String fileName) {
if (clientSite != null) {
clientSite.dispose();
}
if (fileName == "Word.Document") {
clientSite = new OleClientSite(frame, SWT.NONE, fileName);
} else {
clientSite = new OleClientSite(frame, SWT.NONE, new File(fileName));
}
clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
}
private void fileOpen(String file) {
if (file == "new") {
path = "";
createClientSite("Word.Document");
} else {
FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.OPEN);
dialog.setFilterExtensions(new String[] { "*.doc", "*.docx" });
String fileName = dialog.open();
if (fileName != null) {
path = fileName;
createClientSite(fileName);
}
}
}
private void saveFile() {
if (path == "") {
saveAsFile();
} else {
clientSite.save(new File(path), true);
}
}
private void saveAsFile() {
FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.SAVE);
dialog.setFilterExtensions(new String[] { "*.doc", "*.docx" });
final String savePath = dialog.open();
if (savePath != null) {
path = savePath;
clientSite.save(new File(path), true);
}
}
public static void main(final String[] args) {
OleWordExample example = new OleWordExample();
example.createOleFrame();
}
}