blob: 6b38360e41c01b6380cddceff16d55caf9c985c8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*******************************************************************************/
import org.eclipse.swt.*;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import java.io.*;
import java.net.*;
public class DocumentationViewer {
static Browser browser;
static String[] urls;
static String[] titles;
static int index;
public static void main(String argv[]) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("SWT Browser - Documentation Viewer");
shell.setLayout(new GridLayout());
Composite compTools = new Composite(shell, SWT.NONE);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
compTools.setLayoutData(data);
compTools.setLayout(new GridLayout(2, false));
ToolBar tocBar = new ToolBar(compTools, SWT.NONE);
ToolItem openItem = new ToolItem(tocBar, SWT.PUSH);
openItem.setText("Browse");
ToolBar navBar = new ToolBar(compTools, SWT.NONE);
navBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END));
final ToolItem back = new ToolItem(navBar, SWT.PUSH);
back.setText("Back");
back.setEnabled(false);
final ToolItem forward = new ToolItem(navBar, SWT.PUSH);
forward.setText("Forward");
forward.setEnabled(false);
Composite comp = new Composite(shell, SWT.NONE);
data = new GridData(GridData.FILL_BOTH);
comp.setLayoutData(data);
comp.setLayout(new FillLayout());
final SashForm form = new SashForm(comp, SWT.HORIZONTAL);
form.setLayout(new FillLayout());
final List list = new List(form, SWT.SINGLE);
try {
browser = new Browser(form, SWT.NONE);
} catch (SWTError e) {
MessageBox messageBox = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
messageBox.setMessage("Closing application. The Browser could not be initialized.");
messageBox.setText("Fatal error - application terminated");
messageBox.open();
System.exit(-1);
}
back.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
browser.back();
}
});
forward.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
browser.forward();
}
});
list.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
int index = list.getSelectionIndex();
browser.setUrl(urls[index]);
}
});
final LocationListener locationListener = new LocationListener() {
public void changed(LocationEvent event) {
Browser browser = (Browser)event.widget;
back.setEnabled(browser.isBackEnabled());
forward.setEnabled(browser.isForwardEnabled());
}
public void changing(LocationEvent event) {
}
};
/* Build a table of contents. Open each HTML file
* found in the given folder to retrieve their title.
*/
final TitleListener tocTitleListener = new TitleListener() {
public void changed(TitleEvent event) {
titles[index] = event.title;
}
};
final ProgressListener tocProgressListener = new ProgressListener() {
public void changed(ProgressEvent event) {
}
public void completed(ProgressEvent event) {
Browser browser = (Browser)event.widget;
index++;
boolean tocCompleted = index >= titles.length;
if (tocCompleted) {
browser.dispose();
browser = new Browser(form, SWT.NONE);
DocumentationViewer.browser = browser;
form.layout(true);
browser.addLocationListener(locationListener);
list.removeAll();
for (int i = 0; i < titles.length; i++) list.add(titles[i]);
list.select(0);
browser.setUrl(urls[0]);
shell.setText("SWT Browser - Documentation Viewer");
return;
}
shell.setText("Building index "+index+"/"+urls.length);
browser.setUrl(urls[index]);
}
};
openItem.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
DirectoryDialog dialog = new DirectoryDialog(shell);
String folder = dialog.open();
if (folder == null) return;
File file = new File(folder);
File[] files = file.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".html") || name.endsWith(".htm");
}
});
if (files.length == 0) return;
urls = new String[files.length];
titles = new String[files.length];
index = 0;
for (int i = 0; i < files.length; i++) {
try {
String url = files[i].toURL().toString();
urls[i] = url;
} catch (MalformedURLException ex) {}
}
shell.setText("Building index");
browser.addTitleListener(tocTitleListener);
browser.addProgressListener(tocProgressListener);
if (urls.length > 0) browser.setUrl(urls[0]);
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}