|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES | |||||||||
See:
Description
| Interface Summary | |
|---|---|
| Choice | Choice is the fundamental building block of the config system. |
| ConfigListener | ConfigListener. |
| MappedChoice<K,V> | MappedChoice is simply a Choice where there are a number of alternative options where each entry is a Map.Entry. |
| MultipleChoice | MultipleChoice is simply a Choice where there are a number of alternative options. |
| Class Summary | |
|---|---|
| AbstractReflectedChoice | A helper for when we need to be a choice created dynamically. |
| BooleanChoice | A class to convert between strings and objects of a type. |
| ChoiceFactory | Factory for the well known Choices. |
| ClassChoice | A class to convert between strings and objects of a type. |
| Config | Config is the core part of the configuration system; it is simply a
Collection of Choices. |
| ConfigEvent | An event indicating that an exception has happened. |
| DirectoryChoice | A class to convert between strings and objects of a type. |
| FileChoice | A class to convert between files and objects of a type. |
| FontChoice | A class to convert between strings and objects of a type. |
| IntOptionsChoice | A class to convert between strings and objects of a type. |
| MappedOptionsChoice | A class to convert between strings and objects of a type. |
| NumberChoice | A class to convert between strings and objects of a type. |
| PathChoice | A class to convert between strings and objects of a type. |
| StringArrayChoice | A class to convert between strings and objects of a type. |
| StringChoice | A type of Choice that converts between strings and objects. |
| StringOptionsChoice | A class to convert between strings and objects of a type. |
| Exception Summary | |
|---|---|
| ConfigException | Something went wrong while setting config options. |
| StartupException | Something in the startup config files failed to start properly. |
Config allows an application to separate the responsibilities of setting itself up, and providing a user interface from the real work that it needs to do.
Config is (mostly) all kept in a few packages in the util source tree. The design aims for the following goals:
There are a number of simple steps. First a config.xml file is needed to tell the config system what to configure and how.
<config> <!-- A configuration is a set of options ... --> <!-- The key is a dot separated name - Imaging this in a Mozilla tree or some nested tabs. --> <option key="Bibles.Sword.Base Directory" type="string"> <!-- The type (above) along with the introspect line configures what JavaBean methods will be called --> <introspect class="org.crosswire.jsword.book.sword.SwordBibleDriver" property="SwordDir"/> <!-- The tool-tip (or similar) describing what is going on --> <help>Where is the SWORD Project base directory.</help> </option> <!-- Another option, this time it is a boolean option which will show up as a tickbox --> <option key="Bibles.Display.Persistent Naming" level="advanced" type="boolean"> <introspect class="org.crosswire.jsword.passage.PassageUtil" property="PersistentNaming"/> <help>True if the passage editor re-writes the references to conform to its notation.</help> </option> <!-- Another type again this one for the look and feel. --> <!-- The reason for the helper class here is to alter windows that are not currently mapped --> <option key="Looks.Look and Feel" type="class"> <introspect class="org.crosswire.common.swing.LookAndFeelUtil" property="LookAndFeel"/> <help>The look and feel of the application</help> </option> <!-- When we have have an Enum style config option ... --> <option key="Bibles.Display.Book Case" level="advanced" type="int-options"> <introspect class="org.crosswire.jsword.passage.Books" property="Case"/> <help>What case should we use to display the references.</help> <alternative number="0" name="lower"/> <alternative number="1" name="Sentence"/> <alternative number="2" name="UPPER"/> <alternative number="3" name="mIXeD"/> </option> <!-- The options here are more complex and need to be provided as a string array by Java code (see below) --> <option key="Bibles.Default" type="string-options"> <introspect class="org.crosswire.jsword.book.Bibles" property="DefaultName"/> <help>Which of the available Bibles is the default.</help> <map name="biblenames"/> </option> <!-- This option is 'advanced' which means it is not visible to all users (see below) --> <option key="Advanced.Source Path" level="advanced" type="path"> <introspect class="org.crosswire.common.swing.DetailedExceptionPane" property="SourcePath"/> <help>The directories to search for source code in when investigating an exception.</help> </option> <!-- When the choice is very custom you can always do your own implementation --> <!-- This allows us to set users levels so not everyone gets asked hard questions --> <option key="Advanced.User Level" type="custom" class="org.crosswire.common.util.UserLevel$UserLevelChoice"> <help>How advanced is your knowledge of this program.</help> </option> <!-- There are other examples in config.xml --> </config>
Then you need to add the Java code:
// To load the config.xml file: Config config = new Config("Tool Shed Options"); Document xmlconfig = Project.resource().getDocument("config"); // Or whatever to get a JDOM Document config.add(xmlconfig); // To load a saved config config.setProperties(Project.resource().getProperties("desktop")); // Or however you get a Properties config.localToApplication(true); // And display it ... URL configurl = Project.resource().getPropertiesURL("desktop"); // URL of the Properties file to save to SwingConfig.showDialog(config, parentWind, configurl); // The code above needed help in setting up a string choice. This is how ... ChoiceFactory.getDataMap().put("biblenames", Bibles.getBibleNames());
There are more examples in org.crosswire.bibledesktop.desktop.OptionsAction.
|
Copyright ยจ 2003-2015 | |||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES | |||||||||