# Package org.crosswire.bibledesktop.display

This package contains the BookDataDisplay interface which is designed to allow GUI components to choose between the methods they use to display BookData objects.

See: Description

- Interface Summary
  Interface | Description
  --- | ---
  BookDataDisplay | An interface for all components that can display BookData.
  URIEventListener | Implement URIEventListener to receive URIEvents whenever someone activates an URI.

- Class Summary
  Class | Description
  --- | ---
  BookDataDisplayFactory | Factory for OSIS renderers.
  ProxyBookDataDisplay | An implementation of BookDataDisplay that simply proxies all requests to an underlying BookDataDisplay.
  ScrolledBookDataDisplay | An inner component of Passage pane that can't show the list.
  URIEvent | A URIEvent happens whenever a user selects a URI.

## Package org.crosswire.bibledesktop.display Description

This package contains the BookDataDisplay interface which is designed to allow GUI components to choose between the methods they use to display BookData objects.
There are several implementation of this interface in sub-packages.

- textpane - A simple unscrolled implementation that uses a JDK HTML widget.
- proxy - A handy base class to simplify adding features to another implementation of BookDataDisplay
- scrolled - Builds on proxy to scroll child BookDataDisplays. Generally the child will be a textpane implementation.
- tab - Splits a display into a number of tabs so arbitarily large pasasges can be viewed without scrolling or memory problems.
- splitlist - presents the parts of a passage as a list from which individual keys can be selected for viewing.

We have spent some time investigating alternatives to the JDK HTML widget. The requirements were:

- work using OSIS input
- be easily understood for the developer (which fairly much means HTML)
- work over webstart
- be freely re-distributable
- allow some DHTML like flexibility

JRex (Embed Mozilla)
Very good html displayer, but probably very complex to get working and installed, especially over WebStart. JNI+webstart anyone? See mozdev.

Jazilla (Mozilla re-write in Java)
Interesting project, but one that seems more interested in XUL than the Java renderer, proceeding slowly. See their home page.

JXWB (OSS Java Browser)
Commercial software made free. Works well with Swing (includes customized implementations of javax.swing.text.Document and javax.swing.text.EditorKit) Things have moved on quite a bit recently. See JXWB on SourceForge

SWT Browser Component
Don't think we could easily embed an SWT component in swing (since SWT is heavyweight in AWT speak) and I don't particularly want to re-write the whole app in SWT. However there are 2 projects to allow use of SWT from a swing API. SwingWT is a swing-like proxy to SWT and MasterCL will allow you to dynamically swap package names to make the whole of swing use SWT dynamically. It is possible to use SWT from webstart - irate radio does it although their build scripts are not very helpful.

FOP -> PNG
FOP is XSL:FO renderer that can create PDFs and various graphics files. Could give very slick output, but not at all dynamic, quite slow and FO is not easy to use. Probably not one of the best ideas for normal rendering. See FOP at Apache.

Dynamic Swing GUI
There are plenty of XML->Swing converters. JDK 1.4 even includes one. Maybe we could write a OSIS->SwingXML converter in XSL and then render OSIS text in swing components. Could be very fancy. XSL could be complex.