Why do it ?
Lucy users can choose what formatting they want to show certain physical values in: for example, the user can choose to show speed in kilometers/hour or in knots, altitudes in meters or in feet, distances in kilometers or in miles, and so on. The default Lucy configuration contains some pre-defined units, but you may need to add another unit for your application.
How to do it ?
The TLcyMapEditUnitAddOn
adds the UI elements that allows users to switch formatting. The configuration file of that add-on allows removing certain
units and contains brief instructions for the addition of units. The type of unit determines which steps you need to take.
There is a distinction between formats related to distance, altitude and speed, formats related to lon-lat points, and date-time
formats.
Distances, altitudes and speed formats
The instructions for distances, altitudes and speeds are all very similar. For example, for distances the configuration file specifies:
# Distance units: must be a subset of those defined in TLcdDistanceUnit.getAllDistanceUnits. # When adding custom units below, it must be added to TLcdDistanceUnit using # TLcdDistanceUnit.addDistanceUnit before this add-on is plugged.
This article illustrates the addition of a distance unit by adding an option to show distances in centimeters:
-
Ensure that the unit is available before the
TLcyMapEditUnitAddOn
is plugged in.
The configuration file of theTLcyMapEditUnitAddOn
only allows the configuration of distance units registered withTLcdDistanceUnit
. The default distance units are listed as constants inTLcdDistanceUnit
. Because the centimeter unit is not available, we must create it first, and register it withTLcdDistanceUnit
.
You must complete the registration before theTLcyMapEditUnitAddOn
is plugged in, and you must register the unit only once for each JVM. A good place to call this code from is themain
method of your application.static{ TLcdDistanceUnit centimetreUnit = new TLcdDistanceUnit("Centimetre", "cm", 0.01); TLcdDistanceUnit.addDistanceUnit(centimetreUnit); }
This step is only needed for units that are not yet available.
-
Configure the unit in the configuration file of the
TLcyMapEditUnitAddOn
.
Add the extra unit to the configuration file of the TLcyMapEditUnitAddOn to make the unit available in the UI. You can do so by creating a custom configuration file that overrides and adds some properties:custom_map_units.cfg# Include all the options from the original configuration file includeConfig = lucy/map/map_units.cfg # Adjust the available distance units to include Centimetre # This is done by adding the name of the unit (Centimetre) to the list of possible distance_units TLcyMapEditUnitAddOn.distance_units=Centimetre, Metre, Kilometre, NauticalMile, MileUS, Feet # Configure the UI element which allows the user to choose the centimetre unit TLcyMapEditUnitAddOn.distance_units.Centimetre.menuBar.item=Edit, Distance unit, Centimetre TLcyMapEditUnitAddOn.distance_units.Centimetre.menuBar.groups=EditGroup, EditSubMenuGroup, UnitsGroup
Once the custom file is available, make sure that the
TLcyMapEditUnitAddOn
uses it by adjusting the corresponding entry in theaddons.xml
file.
Longitude-latitude point formats
You can add more lon-lat point formats by altering the configuration file, without writing any extra code. The TLcyMapEditUnitsAddOn_LonLatPointsFormats.cfg
file offers instructions for the addition of lon-lat point formats, and contains the configuration options for the default
formats.
As an illustration, we add a format that uses degrees only to display the point location. We use a custom configuration file that:
-
Defines the pattern used for the formatting of the points. The pattern must be a valid
TLcdLonLatPointFormat
pattern -
Adds our degrees-only format to the list of available formats
-
Configures the UI element corresponding to our degrees-only format
# Include all the options from the original configuration file includeConfig = lucy/map/map_units.cfg # Adjust the available lon lat point formats to include a format which only displays degrees # The degrees_only is our custom entries, the other entries are copied from the original configuration file TLcyMapEditUnitAddOn.LonLatPointFormats.formatNames = N_DDMMSS_E_DDDMMSS,\ N_DDMMSSss_E_DDDMMSSss,\ DDMMSS_N_DDDMMSS_E,\ DDMMSSss_N_DDDMMSSss_E, \ DDMMSS,\ DDMMSSss,\ DDdddddddd,\ DDMMmm,\ degrees_only # Pattern of our degrees only format TLcyMapEditUnitAddOn.LonLatPointFormats.degrees_only.pattern=Lat(+D),lon(+D) # Configuration of the UI element which allows the user to activate our degrees only format TLcyMapEditUnitAddOn.LonLatPointFormats.degrees_only.active_settable.menuBar.item=Edit, Point Format, Lat Lon, DD\u00b0\\,DDD\u00b0 TLcyMapEditUnitAddOn.LonLatPointFormats.degrees_only.active_settable.menuBar.groups=EditGroup, EditSubMenuGroup, DefaultGroup, DefaultGroup
Date-time formats
The steps for adding date-time formats are similar to the steps for adding lon-lat point formats. It is a matter of:
-
Defining the pattern in the configuration file. For date time formats, this must be a pattern accepted by
java.text.SimpleDateFormat
. -
Configuring the UI element for the format.
To find examples, see the properties starting with TLcyMapEditUnitAddOn.datetime_formats
in the map_units.cfg
file.
Duration Formats
To add a custom duration format, you follow the same steps as for the addition of a lon-lat format:
-
Define a pattern in the configuration file. This pattern must be accepted by the
TLcdDurationFormat
class. -
Add its name to the
TLcyMapEditUnitAddOn.DurationFormat.duration_formats
list. -
Configure the UI elements in the
TLcyMapEditUnitAddOn.DurationFormat.<pattern_name>.active_settable.menuBar.item
andTLcyMapEditUnitAddOn.DurationFormat.<pattern_name>.active_settable.menuBar.groups
properties.
You can use the default patterns located in the file TLcyMapEditUnitAddOn_DurationFormats.cfg
as examples.