# BOY Changelog

- Version 3.2.10
- Version 3.2.9
- Version 3.1.4
- Version 3.1.3
- Version 3.1.2
- Version 3.1.1
- Version 3.1.0
- Version 1.2.0
- Version 1.1.0
- Version 1.0.6

## Version 3.2.10

- Support checkbox, dropdown and customzied cell editor in table widget.

## Version 3.2.9

- Add PVManager as an optional PV connection layer. It can be set from `Preferences->CSS Applications->Display->BOY->OPI Runtime->PV Connection Layer`. PVManager has lots of advantages such as better performance on array type of PV, update rate throttling, formula support and so on. With PVManager, there are some differences with Utility PV on local and simulated PV:
  - The default initial value of local pv such as `loc://fred` is null. To give an initial value such as 0 to the local pv, the syntax is `loc://fred(0)`. Note: this difference may break your existing OPIs that used uninitialized local PV!!!
  - Constant PV such as `1` or `"fred"` must be prefixed with `=`. For example, `=1` and `="fred"`.
  - `const://...` is not supported, please use `sim://const(...)`instead
  - Initial string value should be enclosed in quotes. For example: `loc://myPV("Hello, World!")`
  - Noise simulation pv only accepts three parameters: `sim://noise(minValue, maxValue, timeStep)`.
  - Arbitrary name noise simulation PV is not supported, for example: `sim://sfdsdf, sim://noise2` are not supported
  In most cases, BOY will automatically convert existing local PV names to new syntax for old OPIs except the PV names embedded in scripts. For more syntax details, please see `CSS online help -> CSS Core -> Process Variables`.
- Use `org.epics.vtype` value inside BOY instead of `org.csstudio.data.values.IValue`. Note: this change may break your customized widgets if the widgets have code handling IValue! See here for more details.
- Cache files from remote URL on local disk for two minutes to speed up the repeat loading of same file.
- Automatically scale font size to make text size fit the size of text widgets (Label, Text Update and Text Input). Note that this function doesn't work for "wrap words" Label and native Text Input.
- Add `Top Files` sub menu to file menu to open top OPIs and other files.
- Add `OPI Editor Perspective` context menu entry to OPI editor to open/reset OPI Editor Perspective
- Add `OPI Runtime Perspective` context menu entry to OPI Runtime to open/reset OPI Runtime Perspective
- Add `Open Navigator` context menu entry to OPI Runtime to open Navigator View.
- Shows null value border if one of the PVs on the widget has null value. If the null value PV is the main PV of the widget, the value displayed in the widget is meaningless.

- Spinner widget: up/down and page up/page down buttons increase/decrease the value for a set step/page in the text editor.
- Spinner widget: option for horizontal arrow buttons layout added.

- XY Graph widget: added getXBuffer and getYBuffer functions that can be used in scripts to retrive current axis values from the buffer.
- Allows to use script from opi search path.
- Shows index of PVs in Attach Script dialog for better scripting. The shown index corresponds to the index of "pvs" array in the script.

- Tank, Progress Bar, Thermometer supports "FillColor Alarm Sensitive" property.
- Spinner gains focus when the users click its text box so that users can change the value with up/down keys.
- Byte Monitor supports "Labels" property to describe the meaning of each bit.

- Rotated text in Text Update can be properly aligned inside the box.

- Support PV Name auto-complete. By default, it only supports history inputs, but a site may implement its own PV name provider. For more details, please see `CSS online help->CSS Core->Auto-Complete` (Primarily contributed by ITER).

- Add authentication support to WebOPI so that you can protect the whole site or only OPIs in a particular directory with password. You can provide user name and password either from preference file, LDAP server or Kerberos. See WebOPI helps for more details.

- Support searching OPI by text. Double click a search result entry will open the OPI file and select the widget (Only works if the default editor of the OPI file is OPI editor). (Contributed by ITER)

- Add a small square handle on top left of PV widget to allow editing PV Name directly on widget. Hover mouse on the handle will show PV Name as tooltip. Handle color could be gray or orange, which depends on if the PV name is empty or not.

- Add `Select Parent (Ctrl+R)` context menu to help selecting the parent container. For example, one can finally select the Display by hitting `Ctrl+R` multiple times.
- Add a feedback to Grouping Container widget to show if it is locked. Click the handle can lock/unlock the container.

- Add `Forward Colors` property to Grouping Container widget. If it is yes, it will forward background and foreground color to its children. This is useful for creating symbol from multiple graphics widgets shown as below. See Grouping Container Example in BOY Example.

- Changed the looking of Check Box and Radio Box to have modern style and feeling.

- Add `Dump PV List` context menu in Runtime to dump all PVs in the OPI including the ones for rules and scripts.

- Support launching an OPI from command line in dedicated position using "Position" macro.
- Add more ScriptUtil functions.
- Add Confirm Dialog option to Write PV Action.
- Add `Directory` option to file selector on Text Input widget, so it only selects directory in file dialog
- Removed Native Button widget and add `Style` property to Action Button widget to have native button
- Removed Native Text widget and add `Style` property to Text Input widget to have native text style.
- Automatically use native text for Text Input and Text Update (if they are not transparent) in WebOPI to improve performance.
- Highlight button color when mouse entered.
- Add a new predefined font `Fine Print`.

## Version 3.1.4 (2012-12-20)

- Add `hidden_widgets` preference entry, so unwanted widgets can be hidden from palette

## Version 3.1.3 (2012-12-11)

Note: This version has some new introduced bugs with macros which may result in some existing OPIs work improperly. These bugs has been fixed in Version 3.1.4.

- Add more properties to tab widget: `Horizontal Tabs`, `Minimum Tab Height`, `Active Tab` and `Enabled` to each tab. (Contributed by ITER)

- Add "Directory" option to "File Return Part" property of text input widget, which allows to select folder only.
- Add Rotation Angle, Flip Horizontal/Vertical properties to Image widget. It only has effect on static images. This is contributed by ITER.
- Add Copy action to rules dialog
- Add "Refresh OPI (F5)" context menu action for OPI Runtime so the OPI can be reloaded.

## Version 3.1.2 (2012-08-27)

- Add more features to Intensity Graph widget to support areaDetector or beamline experiment:
  - Support areaDetector RGB1 Mode
  - Support adding arbitrary number of Region of Interest(ROI)
  - Support profiling on single line
  - Support giving cursor label information on each pixel from script
  - Make more properties runtime configurable

- Add `Confirm Message` property to Text Input and Text widget. If the message is not empty, a confirm dialog will pop up before writing the new value to PV.

- Array widget: support multiple widgets on each element by embedding grouping container.

- Add `Next Focus` property to Text widget.
- XY Graph widget: Don't autoscale on invisible traces.
- Fix a drawing error on XYGraph widget and undersampling performance bug.(Contributed by Takashi Nakamoto from Cosylab)
- Enabled arrow key operations on ThumbWheel widget. Added new properties "Show Buttons" and "Focused Frame Color" to ThumbWheel widget.(Contributed by Takashi Nakamoto from Cosylab)
- Allow multiple selection in Input PVs table.
- Allow dragging text with a list of PV names to Input PVs table.

## Version 3.1.1 (2012-07-18)

- Add Native Button, Text widgets. Native widgets will have significantly better performance in WebOPI. They also support Tab key traversing. The native text widget can be used as either label, text update or text input.
  Tip:You can use context menu `Replace Widgets With...` as described below to easily replace old widgets with native widgets.

- Add `Replace Widgets With...` in context menu to replace selected widgets with other widgets. Common properties will be copied to the new widgets.
- Add Table widget. For more details, see Table.

  Example: Use table widget to show multiple PV values

- Add Array widget, which is great for reading/writing a waveform.

- Reworked BOY Examples to have better user experience and more demonstrations.

- Included the Symbol widgets provided by ITER. Symbol widgets can display/write On/Off states with On/Off color on a single image or on multiple images based on image names. It supports SVG, PNG and GIF format of images. SVG is vector image which can keep the same definition after it is resized. ITER also contributed more than 200 SVG and PNG symbol images to BOY, which can be imported to workspace from menu `File->Import...->BOY->BOY Symbol Library`

- XYGraph widget performance has been improved greatly by Takashi Nakamoto from CosyLab. Undersampling and drawing polyline tactics are used for line or dash line trace.
- Fixed the bug that zooming a widget with gradient (or 3D) effect resulted in ugly looking.

- Add alpha property to all shape widgets.

- Add gradient, background gradient start color, foreground gradient start color properties to Rectangle, Rounded Rectangle and Ellipse widgets.

- Support double clicking in Font, Color and File dialog to finish resource selection
- Add direct editing support to button, menu button, check box widgets, so now you can double click these widgets to input text directly in edit mode
- For macro color and font, both color/font name and value are saved in OPI file, so in case of color/font file is not available, use the saved value. This will make OPI function normally in most cases even color/font file is not available. Existing OPIs need to be re-saved to take use of this feature.
- Add more predefined fonts in BOY, so even if you don't have any font file set, you still have these macro fonts available: `Default` `Default Bold` `Header 1` `Header 2` `Header 3`. These predefined fonts will use system default font but with different styles and heights. These predefined fonts can be replaced from font file by defining the same font name.
- Allow to give a different menu text rather than using file name for top opi by appending a macro `Alias=The Menu Name`. It also allows to specify the top opi open position by appending a macro `Position`. The available positions are:
  - `Left`: Left View
  - `Right`: Right View
  - `Top`: Top View
  - `Bottom`: Bottom View
  - `Default_View`: Default View
  - `Detached`: Detached View

  If macro `Position` is not set or is not in one of above positions, it will be opened in editor area. For example:

      "/BOY Examples/main.opi", "macro1 = hello", "macro2 = hello2", "Alias=BOY Examples", "Position=Left" | "BOY Examples/1_2_WidgetExamples.opi"

- Add `Round Rectangle Background Style` Border.

- For XY Graph, always show full time stamp (date and time) on the start and end of an axis which is in time format. Optimized auto time format.
- Stop Autoscale on XYGraph whenever one of the Zoom buttons is toggled.
- OPI Probe is reworked to have better user experience. Add Array widget to probe OPI so Waveform PV can be probed. Probe OPI will be opened as detached view.

- WebOPI use system property `org.csstudio.rap.preference` to provide path to the preference file.
- Add `Buttons on Left` property to spinner widget.

- Support OPI Search Path, so BOY can run an OPI found on search path. See preferences

- Improve intensity graph performance significantly by accepting all basic array types and using nearest neighbor image scaling technique.
- Add `Sash Container` widget.

- Add `Auto Scale Widgets` property to display. If it is true, all widgets on this display may be scaled when display is resized. The old display property `Auto Zoom to Fit All` should be deprecated, because the advance graphics effects such as gradient cannot display correctly in zoom.
- Add trace visible property to XY Graph

- Hide status bar in compact mode

## Version 3.1.0 - 1/6/2012

- Support view OPI in Web Browser, including mobile device! See WebOPI

- Support connections between widgets

- OPI editor is separated to a plugin `org.csstudio.opibuilder.editor`, which allows you to install BOY in your RCP without OPI editor.
- Add a new option `Detached` to `Open OPI in View` action so the OPI will be opened in a detached view directly.

- Support Unicode in OPI, such as Chinese, Japanese...

- Allow embedding script text as part of an opi file

- Add an option "Hook all actions to mouse click event" to actions dialog
- Add a new widget `Image Boolean Indicator` for displaying on/off value by images

- Change the text input behavior with TextInput and Spinner widget, please read BOY manual for details
- Allow to write numeric array to PV from Text Input widget with format like `13 22 33 24`
- Add version check to OPI file. If it is opening an opi file created from newer version of BOY, a warning dialog will popup
- Allow customized widget hooking its own online help with BOY help system
- Keep border style in alarm status if the border style is one of the line styles, such as dash, dot, dash dot and so on. So now you are able to have a dash alarm border.

- Use border color for text color on Group Box Style border. This may affect the looking of some old OPIs which are using Group Box Style border.
- Solve the "floating" problem and improve the performance greatly with using native SWT widgets in BOY
- Allow minimum value higher than maximum value on scaled widgets, such as XYGraph, bar graph, gauge

- Add `Rotation Angle` property to text update and text input widget, so its text can be rotated to arbitrary angle

- Add two system predefined macros
  - $(DID): The unique ID of a display. It can help to create an unique local PV name dedicated to a display
  - $(DNAME): The name of a display
- Add GUIUtil in ScriptUtil
- Add a methods to ScriptUtil: executeEclipseCommand(id)
- Add a method to widget: widget.getMacroValue(macroName)
- Add example and document about how to call custom Java code from BOY script

- Support using macros in file path property
- Add a new option `Open in new Window` to `Open OPI` action
- An OPI view will automatically resize to the OPI size when it is detached
- Add "Auto" time format for XYGraph Axis, so its time format will be automatically calculated from its range
- Add "Boolean Label Position" property to boolean widgets such as boolean switch, image boolean button
- Show disabled graphic figures such as polyline, rectangle in gray
- Allow applying the Display properties value from schema file
- Fix a bug that the context help link for some widgets do not work
- Fix a bug related to the `crop` property of Image widget
- Add Login Dialog example

## Version 1.2.0 - 6/9/2011

- Support using Jython script in BOY

- Finish BOY online help which includes the help document for every widget. In OPI editor, press F1 to open context help view. Context help will automatically update to match the selected widget.

- Allow to open an OPI in view which can be detached as a standalone window
- Allow user to change the default properties value of widgets by using schema OPI
- Change `widgetController` to `widget`, `pvArray` to `pvs`. Add `display` object to script
- Add script method `display.getWidget(name)` to search a widget by name
- Add script methods `addChild()`, `addChildToRight()`, `addChildToBottom()`, `removeChildByName()` to container widget to support dynamic loading widget
- Add `FileUtil` class to help read/write XML/text file from script
- Support `widget` and `display` objects in scripts executed from Actions
- Add global hot key F8 to enter/exit compact mode, F11 to enter/exit full screen
- Add `Show Scrollbar` property to Label and Text Update widget
- Add `Wrap Words` property to Text Update widget
- Add `Multi-line Input` property to Text Input widget
- Make loading URL file as a background job so that CSS will not hangup if a URL resource is not available
- Re-organize BOY preference to three pages.
- Add an option to script execution: `Do not execute the script if error was detected`. By default, the script is allowed to execute again even error was detected
- Fix a bug that string value cannot be written to local PV from text input widget
- Fix a bug that some widget do not redraw itself when `enabled` properties changed
- Allow embedding `[\ascii-code]` in macros when inputting macros from command line. For example:

      css --launcher.openFile "<path_to_opi>/file1.opi macro1=A[\58]B, macro2=value2" "<path_to_opi2>/file2.opi"

  In above example, the value of macro1 is `A:B`.

## Version 1.1.0 - 2/18/2011

- Support opening OPI files from command line. For example:

      css --launcher.openFile "<path_to_opi>/file1.opi macro1=value1, macro2=value2" "<path_to_opi2>/file2.opi"

  If there is already a CSS instance running, it will open the OPIs in the running CSS. The option `--launcher.openFile` is not necessary if following lines were added to css.ini:

      --launcher.defaultAction
      openFile

  Note1: For Linux GTK, ":" is not allowed in macros. Instead using `[\58]`.
  Note2: To make this command line work for Linux machine, you may need to add follow lines to your css.ini which is under your CSS directory (this line should be added before `-vmargs`):

      -vm
      /path to/libjvm.so

  You may able to find the path to libjvm.so by using command `locate libjvm.so` See https://bugs.eclipse.org/bugs/show_bug.cgi?id=331122

- Add "Tree View" to Outline, which supports reordering and changing parent operations by Drag-and-Drop. It also supports other context menu actions such as copy, paste, delete, create group and so on

- Add "Grid Layout" widget. If a container or display contains such a widget, it will automatically layout widgets in grids
- Add "OPI Probe" to CSS context menu, so the PV names will be passed to the probe OPI
- Support orientation operation on all widgets
  - Flip Horizontal
  - Flip Vertical
  - Rotate Right 90 degree
  - Rotate Left 90 degree
- Better looking Tab widget
  - Allow icon on Tab
  - Add a new context menu entry Change Tab Index
  - Fix some bugs related to undo/redo

- Add two option for executing a script:
  - Skip execution triggered by PVs' first connection
  - Execute anyway even if some PVs are disconnected

- Show script input PVs' connectivity on border too
- Show PVs' disconnected information in tooltip
- Add a preference "Console Popup Level" to control when should the console popup
- Add "Scale Format" property to XYGraph Axis and other widgets with scale such as meter, gauge, knob, progress bar and so on, so that the numeric format on scale can be customized
- Add "Value Label Format" property to widgets with scale and value label, so that the numeric format of the value label can be customized.
- Add two properties to Display: "Auto Zoom to Fit All" and "Show Close Button".
- Add Lock/Unlock Children context menu entry to grouping container.
- Add Import BOY Example wizard, so user will be able to import BOY Examples from File->Import...
- If children are locked, scale children's size correspondingly when grouping container's size changed.
- Allow to paste widgets to a selected container
- Fix an unexpected behavior in drawing straight polyline
- Make "Show Macros" available to runtime
- Add Font property to most of widgets so border's font can be configured now

## Versin 1.0.6 - 11/12/2010

- Add three context menu entries for openning related display as in web browser: Open, Open in New Tab and Open in New Window.

- Remove the wrapping capability from TextUpdate? to improve its performance greatly.
- Improve the performance of cloning widgets.
- Use Display.asyncExec() in GUI Thread with flood control to get a more smooth GUI update.
- Memory usage optimization on Intensity Graph
- Handle NAN alarm limits
- Add Description to every widget action
- Add Virtual Linac Example
- Allow changing pv_value property in Rules. This will allow rules to output a calculation result to a PV widget.
- Remove Drag&Drop capability in Runtime because it would cause unintended change on running OPI.
- Fix a bug that scaled widgets' max property cannot be negative number.
- Fix a bug on Polyline which will cause high CPU usage.
- Fix a bug on Text Update format property which will cause no response on OPI.
- Fix a bug that wav file cannot be played on linux-x64.