| /******************************************************************************* |
| * 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(); |
| } |
| } |