index

BNCS Custom Control Library

Simple Controls

These are controls that don't do anything clever.

Control | Notes
bncs_control | Generic BNCS button/label
bncs_line | Line control
bncs_keyboard_ctrl | Keyboard Control
bncs_clock | A clock widget
bncs_lineedit | A line edit widget
bncs_listbox | A Listbox (single colum) widget
bncs_listview | A Listview (multi-column) widget

Smart Controls

These are controls that are data aware

Control | Notes
bncs_enum | Enumerated parameters smart button
bncs_range | Range parameters smart button
bncs_smart_string | String parameter smart button
bncs_instance | A control to display where this UI is targeted
uiHost | A control to load an external bncs_ui file as if it were a single control

Additional Information - smart button polling

Router Controls

Controls that understand BNCS routing

Control | Notes
bncs_sourcegrid | Rather confusingly called router source and destination control DEPRECATED
bncs_rtrNameGrid | Router name grid (source grid, paging grid).
bncs_rtrDestGrid | Router destination grid

Misc Controls

Control | Notes
bncs_ie | Simple wrapper for Internet Explorer

Rich Text

Rich text is available on bncs_control and those controls that wrap it up (range, enum etc.). The Rich Text Reference is here

Version Control

Version information here

Build: master 3586 0d983c63 Atos © 2018


bncs_clock

UIControls

BNCS Clock

Description

This is a control to allow you to include a clock in your panels.

You may configure the appearance of the clock (analog, digital or 7 segment), its style and colour and choose a time zone.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

The Type column refers to the parameters sent to particular configurations of this control.

Parameter | Value | Type | Notes
reset |  | Base | Used to reset all the parameters of this control back to their default state
return | any of the other settings | Base | Return a named parameter from this control e.g. send this to the control return=text will return a value of the text setting in the format text=This is the text
id | id of the button | Base | numeric or alphanumeric identifier for this button
clocktype | analog digital lcd | Base | How to draw the clock (lcd is a 7 segment display)
colour.text | Any QT colour | Base | Text colour / analog hour and minute hand colour
colour.background | Any QT colour | Base | Clock face colour / digital clock background colour
colour.seconds | Any QT colour | Analog | Colour of the analog clock seconds hand.
colour.ticks | Any QT colour | Analog | Colour of the tick marks on the analog clock face
font.face | Any installed font name | Digital | Font for the clock
font.size | Numeric | Digital | Font size
seconds | 0 or 1 ( 1: a second hand is shown, 0: it isn't ) | Analog | Include a second hand.
timezone | local or gmt | Base |
offset | numeric | Base | If timezone is GMT this adds (or subtracts) an offset in hours.
stylesheet | A stylesheet name | Base | Configure appearance


bncs_control

 alt text

BNCS Control

Description

This is an all-round control that can be used for most of the hard work of panel building. This control draws together a number of the features that are available in a number of other controls that have evolved over time.

This control can be used in Qt Designer directly but only the default presentation will appear. The full editing capabilities of this control are only available in the BNCS Visual Designer.

This control is "reskinable" in that the code required to draw it is separate from the button itself or it's settings.

Wherever possible don't explicitly set parameters - use the default or a stylesheet.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

Writing the same colour will not force a repaint to reduce flicker
Parameter | Value | Notes
reset | Used to reset all the parameters of this control back to their default state
return any of the button settings Return a named parameter from this control
e.g. send this to the control

return=text

will return a value of the text setting in the format

text=This is the text
colour.text
colour.background
colour.led 		Any valid Qt colour or nothing (zero length string). Set colour of the specified parameter.
e.g. the following two examples are equivalent:

colour.led=red
colour.led=#ff0000

Setting the value to zero length string (see example) sets the colour back to the default colour specified in the skin. This is the default for these settings.
e.g.

colour.background=
colour.text=

style label
button 		The fundamental style of this control - the major differences are the width of the border and whether the control "depresses" when clicked
labelstyle none
plain
lowered
raised
blackbox
whitebox 		The border for this control when the style is label.
e.g.

labelstyle=raised
notify.pressed
notify.released 		false / true
true / false 		Determines whether this control notifies on mouse press/release or on mouse enter/leave events.
notify.lostfocus true
false 		Determines whether the release event is used or discarded when it occurs outside the area of the button pressed. i.e. if you press a button, slide your finger off it then release do you get the notification?
doublepush false
true 		Whether this control requires two presses before emitting notification.
With this feature enabled a small box appears above the control telling the user that they should press the button again
pixmap <filename> Path to the background pixmap to display. This can be any valid Qt pixmap
e.g.

pixmap=a.png
pixmap.topLeft <filename> Fixed alignment pixmap with no scaling. This pixmap is shown on top of the background pixmap.

Path follows same rules as the background pixmap.

These 9 pixmaps and the background pixmaps are wholly independent

pixmap.top
pixmap.topRight
pixmap.left
pixmap.centre
pixmap.right
pixmap.bottomLeft
pixmap.bottom
pixmap.bottomRight
svg.data <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg> 		Valid SVG image data (which is basically an XML document). NOTE: support for SVGs in Qt3 is imperfect.
Cannot be used at the same time as svg.file.

Note: images (such as the example left) that do not specify a size in the top level <svg/> tag are assumed to be 1024 x 1024. Specify attributes:
width="200" height="200"
to set explicit dimensions if default is not appropriate

SVG is shown on top of all other pixmaps

svg.file <filename> A path to an SVG file.
Cannot be used at the same time as svg.data.

SVG is shown on top of all other pixmaps

text The text to write on this button. This text will always overlay a pixmap on this button if there is one.
Writing the same text will not force a repaint to reduce flicker
font.face The current font face.
If no font face is specified (the default) then the standard font face as defined in the skin is used.
font.size 10
-2 (see notes) 		The current font size to use.
If a font face is specified then this is the absolute point size used.
If no font face is specified then this value is the offset from the default skin font size.
e.g. this provides an absolute font/size

font.face=arial
font.size=12

e.g. this uses the standard font in a slightly smaller size (note the negative font size)

font.face=
font.size=-2
font.style bold
italic
underline
overline
strikeout 		The style of the font - this can be a combination of any of the settings (delimited)
e.g

font.style=bold,italic
textalign topleft
top
topright
right
bottomright
bottom
bottomleft
left
centre 		How to align the text on this button
pixmapalign (values as for textalign)
Default: top 		How to align the pixmap on this button
led.align (values as for textalign)
Default: topright 		How to align the led on this button
pixmapstretch true / false Whether the displayed bitmap should be scaled to fit the button.
Stretching bitmaps is usually a bad idea - it's slow and the bitmaps usually end up looking rough.
led | true / false | Whether an "LED" should be displayed.
led.size small
medium
large
background | true / false | Whether this control is a background button and should always appear behind other controls that sit on top of it
width | 0 | Sets the minimum width for this control (may be resized larger than this value)
height | 0 | Sets the maximum width for this control (may be resized larger than this value)
sizepolicy setminimum
asdesigned
shrinktofit 		This is what to do if the text/pixmap on this button exceeds the amount of available space to display it.

setminimum changes the size of the button to make it big enough for the text/pixmap to fit
asdesigned (or null entry) does nothing
shrinktofit reduces the size of the text and/or inserts new line characters to make the text fit.

Note: shrinktofit (or "smart" as it appears on the editor) only works with text that is not rotated.
stylesheet Stylesheet entry to use for this button
(the stylesheet entry is an external list of any combination of the above settings)
statesheet Statesheet entry to use for this button
(the statesheet entry is an external list of any combination of the above settings)

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
button | pressed released | The notifications are only made if they are enabled in the settings above. Pressed has to be specifically enabled. Released has to be specifically disabled.


bncs_edittext

BNCS Line Edit Control (bncs_lineedit)

Description

This is a simple line edit control.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

Note: at time of writing it is not possible to set font/size. Only colour entries from style/statesheets will be used.

Parameter | Value | Notes
reset |  | Used to reset all the parameters of this control back to their default state
return | all text | Return a named parameter from this control e.g. send this to the control return=text will return a value of the text setting in the format text=This is the text
stylesheet statesheet | stylesheet entry | Style/state entry
colour.background colour.text | any valid Qt colour |
notify.return_pressed notify.text_changed | true false | Whether to notify on the specified events value are: true false
initial_focus | false |
echomode | normal password | How to display text - either as normal characters or **** in password mode
insert | text | Insert the given text at the cursor position
backspace |  | backspace from the current cursor position
cursor.forward cursor.backward cursor.home cursor.end |  | Move the cursor
del |  | Delete the character at the current position

Notifications

There's a slight anomaly with notifications - both "text" and "value" command types are used - on is used for when the return button is pressed and the other when the text is changed.

text=<value> | notification when a character is pressed (if enabled)
value=released | notification when the return button is pressed (if enabled)


bncs_enum

BNCS Enum Control

Description

This is a Qt custom control to deal with enumerated parameters i.e. where a parameter can have only a fixed number of values. Examples of this are test pattern select or even just on/off values.

This is a smart button in that it connects direct to the network.

Internally control splits into two types – the enumerated list function (the basic operation of the control) and the “presentation” which may be a single button, multiple buttons, a listbox etc.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

The Type column refers to the parameters sent to particular configurations of this control.

Parameter | Value | Type | Notes
reset |  | Base | Used to reset all the parameters of this control back to their default state
return | any of the other settings | Base | Return a named parameter from this control e.g. send this to the control return=text will return a value of the text setting in the format text=This is the text
id | id of the button | Base | numeric or alphanumeric identifier for this button
name |  | Base | Optionally used to name the button
group |  | Base | Used as a means of grouping together buttons so that they may be directed to a new device
child.<id> | any appropriate setting | Base | Means of passing any message to a child parameter of this control. Use of this is not recommended - whilst you can poke values direct at the buttons (standard bncs_control) this might contradict the values passed around within the enum control.
style | (none) button label list popup_list | Base | What presentation to use for this button.
device | 0 | Base | BNCS device number
slot | 0 | Base | BNCS slot number index registered for=slot+offset
offset | 0 | Base | BNCS offset index registered for=slot+offset
instance |  | Base | BNCS instance Tells the button to use a specific instance, this overrides slot and offset, if a named parameter is used this will also look up the slot.
parameter |  | Base | BNCS parameter Targets the button at a parameter on the current instance, this can overrides slot, offset and slot.
state.<no>.caption state.<no>.value state.<no>.pixmap state.<no>.enabled state.<no>.style state.<no>.default |  | Base | This is the list of states that this control will work with. The <no> parameter is an arbitrary value which is simply a means of grouping and identifying individual states. Caption is the text to display for this state. Value is the thing returned from the network device in this state Pixmap is the name/path of the pixmap to display in for this state (this can be any valid Qt bitmap) Enabled is whether this is a state that we can write to – otherwise this state will be displayed but cannot be selected Default
notify.valuechanged | false or true | Base |
notify |  | Line |
defaultstyle | enum_deselected | Base |
width |  | Base |
height |  | Base |
doublepush | false or true | Button |
doublepush.list doublepush.button | false or true false or true | List | Whether the buttons are double push. Note: “button” refers to the button used to initiate a popup, whereas “list” refers to the buttons used for the individual elements. (version 4.5.12.0 onwards)
settodefault |  | Button Label |
nextstate |  | Button Label |
bistate | false or true | Button Label | true to enable bi-state functionality When button is pressed a value is set, when it is released, even if release is off the button, another value is set. (version 4.5.19.0 onwards)
bistate.press |  | Button Label | Value set for press when set to bistate. (replaces bistate_press)
bistate.release |  | Button Label | Value set for release when set to bistate. (replaces bistate_release)
navigate |  | Button |
navigatedest |  | Button |
stylesheet.button |  | Button |
buttontext | name none list | Button List |
stylesheet.list stylesheet.button |  | List |
deviceDescription |  | Base | Takes device description file and interprets it for this control.
value |  | Base | The current value in the infodriver slot.
penwidth |  | Line | The line width.
points |  | Line | An array of points that the line passes through e.g. 0,0,100,100 is a diagonal line from top left to bottom right.
colour |  | Line | The line colour.

Notifications

notify.valuechanged=<value> | Base
button=released | button line

Device Description

The format of the device description file entry is:

       <param name="FEC" slot="22" class="enum" style="popup_list" access="readonly">
              <state value="0" caption="1/2" style="enum_selected" msg=""/>
              <state value="1" caption="2/3" style="enum_selected" msg=""/>
       </param>

If the slot is 0 this indicates it is a complex type and the actual parameter is got at run time from instances and the complex instance data.

Custom Popup Editors

See here for notes on how this works


bncs_ie

BNCS IE Wrapper

Description

This is a very simple wrapper for a "legacy" version of Internet Explorer. Sadly this is not the same version as the Internet Explorer installed on that machine - indeed it works on machines that appear to not have Internet Explorer installed at all.

You can change the emulation version by changing registry entries. See here: http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation (apologies if this is an old link by the time you get to use it...such is the nature of embedding hard links like this).

Otherwise....for example....in my case - Internet Explorer 32bit running on Win64 you need to use the Wow6432Node part of the tree rather than the path that appears in the documentation:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION]
"bncs_vis_ed.exe"=dword:00002af9
"panelman.exe"=dword:00002af9

Commands

Command | Notes
homepage=<url> | Set the page is of the standard format you'd type into the address bar of a browser e.g.: homepage=http://bbc.co.uk/
notify.titleChange=false | Whether ths control should notify when the title of the displayed page has changed. For this component this is not normally visible since it does not have a title bar

Notifications

Notification | Notes
title=<page title> | This is the value as would appear on the caption of a browser for a windowed application


bncs_instance

BNCS Instance Viewer

Description

This is a simple control primarily designed for design time debugging.

This control shows the fields used in the "instances.xml" configuration file. This is a file key to the targeting of a UI at runtime.

Parameters

Parameter | Notes
reset | Resets the control to the default state
group | What UI group this control is part of
stylesheet | The stylesheet for this control
attribute | Which attribute in the instances.xml file to show on the button. Values can be: id alt_id location type ref composite Version 4.6.54 of this control fixed the above list rather than free-form attribute values to allow use of the cached instances information
instance | The instance

Example

Consider the following XML fragment:

<instance composite="no" id="Memory_RX1290" type="" ref="device=805,offset=0" alt_id="RX1290" />
<instance composite="no" location="" type="hydra" id="hydra_router" ref="device=100,offset=0" alt_id="Calrec Hydra" />

If this control is targeted at "hydra_router" then we can configure the control to show the alt_id field by specifying it in the "attribute" parameter.


bncs_keyboard

BNCS Keyboard

Description

This widget is a resizable keyboard for use in client control panels.

The keyboard can display the text as it is types either as plain text, password text or no display. The control can notify it's parent when a key is pressed and/or when return is pressed. The text field will get the hardware keyboard focus, but does not notify the user when this is used.

The control can be configured entirely at panel design time, if you want to change the settings at run time, for instance change the display option, this can be done by sending the relevant command from a script.

Settings

Any commands that are not recognised are passed on to all the individual buttons, as these are BNCS controls these will act accordingly, to set this at design time these entries need to be made via a style sheet. See the BNCS control documentation for further details on the commands that these buttons accept.

Parameter | Value | Notes
reset |  | Resets the control to the default settings
Stylesheet= |  | Sets the style sheet for the client buttons
showText | true false | Show or hide the text input
showPassword | false true | The text is displayed in password mode
notify.released | true false | Notify the parent when a character is released, the default is false. Note that this does not notify when keys are pressed on the hardware keyboard
notify.return | false true | Notify the parent when return is released
spacing | 5 | Set the spacing between the buttons in pixels
default |  | Sets the default text on the keyboard
text |  | Set the current text
exceptions |  | String of characters that will not be allowed (shown on the keyboard)
setFocus |  | The control will take the keyboard focus.
Enable | 1 0 | Enables the control, 0 will disable the control. - note that this is here for v4 compatibility, use the setEnabled() function in a v4.6 script.
Transparent | true false | Sets the background to transparent, the default is not transparent
keyboardType | Keypad Numpad HexNumpad | Selects the keyboard type
numpadLayout | Computer Phone |
allowNegativeValues | true false |
numpadValidation | IP Decimal Length None |
min | 0 |
max | 0 |
minLength | 0 |
maxLength | 0 |

Notifications

Parameter | Notes
Button.<char>=pressed | The character <char> has been pressed, 'a' may be replaced with space, back or tab as well as the other characters.
Button.return=pressed | Return has been pressed, this normally indicates that the user has finished inputting text.


bncs_line

BNCS Line

Description

BNCS Line can be used to draw lines on the dialog. The line control is most commonly used to link switches or showing the active signal paths.

Unlike other button types bncs_line has a mask which it "cuts" into the dialog and so many lines can overlap on the dialog without the usual rectangular

As the lines are created using XY coordinates delimited by comma’s‘”,”. With 0,0 being the Top Left corner of a line and 100,100 being the bottom right corner.

Settings

This is the list of commands which can be used on bncs_line.

Commands are in the format:

<parameter> = <value>

Default values are shown in bold

Parameter | Value | Notes
reset |  | Reset back to default values
return |  | Returns a newline delimited string of all the settings. Parameters at their default state are not returned
colour | #FF000 red dark green | Sets the colour of the line, can be colour HEX or colour name.
penwidth | 20 | Sets the width of the line in pixels
points | X1,Y1,X2,Y2...XnYn 0,0,0,100,100,0,100,100,50,100,50,0 | To dynamically set the line. X and Y coordinates passed in a string, with comma separation. Example: 0,0,0,100,100,100 – This would create and ‘L’ shape. 0,100,100,0 – This would create forward slash ‘/’.
stylesheet |  | Sets the style sheet of the bncs_line. e.g bncs_alarm
name |  | Sets the name of the bncs_line.
notify.pressed | false or true | Whether this control should notify the these events.
notify.released | false or true | Whether this control should notify the these events. Released event is sent depending up on the "lostfocus" setting below.
notify.lostfocus | false or true | If notify.lostfocus is true then released events are still generated when the mouse/finger is released outside of the area of the line. Sometimes this is desirable (when you don't want to do a particular action - so you drag your finger off) and others where you must have a "release" event for every "pressed" event.

Notifications

Notifications are of the format:

<parameter>=<value>

e.g.

button=pressed
Parameter | Value | Notes
button | pressed released | Whether the any part of this line control has been pressed or released - notification must be enabled to receive these notifications


bncs_listbox

BNCS Listbox Control

Description

This is a simple, single-selection listbox control with suitable wrapper for using with the BNCS Visual Designer.

This control is contained within bncs_ssmart.dll.

Wherever possible don’t explicitly set parameters – use the default or a stylesheet.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

Parameter | Value | Notes
reset | Used to reset all the parameters of this control back to their default state
return Return a named parameter from this control.
Possible values are:

return=selected

returns the text of the currently selected item or null string if nothing is currently selected

return=selectedindex

will return the value of the currently selected item or –1 if there is no item selected e.g.

selectedindex=12

To return a list of the items in a listbox use:

return=items

This returns a pipe delimited list of the items in the listbox e.g.

items=one|two|three
colour.text
colour.background 		Any valid Qt colour or nothing. Set colour of the specified parameter.
e.g. the following two examples are equivalent:

colour.led=red
colour.led=#ff0000

Setting the value to zero length string (see example) sets the colour back to the default colour specified in the skin. This is the default for these settings.
e.g.

colour.background=
colour.text=
notify.selection | true | Enables notification on the specified events
add
add.<id> 		The text to add to this list e.g.

add=hello

adds the text “hello” to the listbox – sorting according to the sort parameter.

add.2=hello

adds the text “hello” to the listbox as the third entry. The <id> parameter is irrelevant if sorting is set to “true”

selected.id
selected.text.<options>
selected=next
selected=previous
selected=none 		See below for text options Set the selected item. E.g.

selected.id=4

selects item 5 in the list

selected.text.exact=abc

selects the first instance of text “abc” in the listbox

remove.id
remove.text.<options>
remove 		See below for text options Remove item(s) from the list.
If an id is specified only that item is removed (indexed from 0)
if “text” is specified all items matching that text are removed – the <options> parameter specify the search criteria – see below.
If no sub parameter is specified the currently selected item is removed
e.g. “remove.id=0” removes the first item in the list
e.g. “remove.text=hello” removes the first instance of the text “hello” in the list
e.g. “remove.text.all=hello” removes all instances of the text “hello” in the list
e.g. “remove” just removes the currently selected item – if there is one.
replace.id
replace.text.<options>.<old text>=<new text> 		See below for text options Replace items in the list with the new value
e.g. "replace.id.0=blibble" changes the first item to be text "blibble"
e.g. "replace.text.exact.hello=goodbye" replaces the first instance of exactly the text "hello" with "goodbye"
clear | clear the contents of the listbox
sort true
false 		Whether to sort items alphabetically. Note this suffers the usual problem of this ordering defect:

ARC1
ARC10
ARC2
font.face The current font face.
If no font face is specified (the default) then the standard font face as defined in the skin is used.
font.size 10
–2
(see notes) 		The current font size to use.
If a font face is specified then this is the absolute point size used.
If no font face is specified then this value is the offset from the default skin font size.
e.g. this provides an absolute font/size

font.face=arial
font.size=12

e.g. this uses the standard font in a slightly smaller size (note the negative font size)

font.face=
font.size=-2
stylesheet Stylesheet entry to use for this button
(the stylesheet entry is an external list of any combination of the above settings)
columnMode single
singlev
multih
multiv
 Column Mode - whether single column, single row (singlev) or multiple scrolling horizontally (multih) or vertically (multiv)

Text search options

The default options are: case in-sensitive, substring search. These options can be combined.

Option | Notes
exact | The string must match exactly (not case sensitive however)
casesensitive | The search is case sensitive (i.e. don’t match “ABC” with “abc”)
contains | We may match only part of the string
begins | A string that begins with the search string
ends | A string that ends with the search string
all | This option is only valid for the remove command. This removes all instances of the found string rather than the default which is to remove the first instance

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
selection.<item id> | text value of current selection | The notifications are only made if they are enabled in the settings above.


bncs_listview

Description

This is a simple, single-selection listview control with suitable wrapper for using with the BNCS Visual Designer.

This control is contained within bncs_listview.dll.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Text Gets

Parameter | Return | Notes
selected | Row Text | Returns the text of the currently selected item or empty string if nothing is currently selected
selectedindex | Row Index, Starting at 0 | will return the value of the currently selected item or –1 if there is no item selected
count | Count of rows | Will return the number of the items in the listview
row.<value> | coloumn1;column2;column3; | Will return the text of the specified item (semicolon separated values of the cells) or empty string if the row doesn’t exist; e.g. row.3
column.<value> | row1;row2;row3;row4; | Will return the text of the specified column (semicolon separated values of the cells excluding the column header) or empty string if the column doesn’t exist; e.g. column.2
columns | header1;header2;header3; | Will return the semicolon separated list of the column header texts
columnWidth.<value> | Column Width as number | Will return the width of the specified column or -1 if it is not specified(means set automatically based on the cell contents); e.g. columnWidth.0
columnAlign.<value> | Qt::Top|Qt::Left | will return the align of the specified column (the alignment values are defined in the class Qt so Qt::Top|Qt::Left means that the cell texts are in the top left position); e.g. return=columnAlign.0 This may not work due to other extensions added
cell.<row>.<column> | Cell Text | Will return the text of the specified cell or empty string if the column or row doesn’t exist; e.g. return=cell.0.3
colour.text | Default Foreground Colour | Will return the text colour or empty string if the default colour is used, any cell that has an overridden colour can be gotten separately
colour.background | Default Background Colour | Will return the text colour or empty string if the default colour is used, any cell that has an overridden colour can be gotten separately
notify.selection | selected,changed,none | Will return the state of the selection change notification
notify.cell_selection | selected,changed,none | Will return the state of the cell selection change notification
font.face | font | Will return the current font face set or empty string if the default is used
font.size | font size | Will return the current font size or empty string if the default is used
stylesheet | stylesheet | Will return the style sheet of the control or empty string if it is not specified

Commands

Parameter Value Notes

Reset

Used to reset all the parameters of this control back to their default state

hideHeader

true, false

Hides/shows the listview header

enableSorting

true , false

Enables sorting so the user can sort columns by clicking on the column headers

enableColumnResize

true , false

Enables column resize so the user can modify the column width manually

enableColumnMoving

true , false

Sets whether the header sections can be moved

colour.text
colour.background

Any valid Qt colour or nothing.

Set colour of the specified parameter.

e.g. the following two examples are equivalent:

colour.led=red
colour.led=#ff0000

Setting the value to zero length string (see example) sets the colour back to the default colour specified in the skin. This is the default for these settings.

e.g.

colour.background=

colour.text=

notify.selection

true

Enables notification on the specified events

font.face

any valid font face

The current font face.

If no font face is specified (the default) then the standard font face as defined in the skin is used.

Font.size

e.g.:

10
–2
+3

The current font size to use.

If the value is signed than it is an offset from the default skin font size. Otherwise it is the absolute font size.

Font.style

Any combination of

bold, italic, underline, overline, strikeout

The current font style.

Stylesheet

Stylesheet entry to use for this listview

(the stylesheet entry is an external list of any combination of the above settings)

columnsWidth

Semicolon separated values

Semicolon separated list of column widths. -1 means automatic value based on the cell texts.

e.g.: “columnsWidth=25;-1;-1;50”

columnWidth.<column>

Sets the width of a specified column. -1 means automatic value based on the cell texts.

e.g.: “columnWidth.4=50”

columnsAlign

Semicolon separated values

Semicolon separated list of column alignments. If this parameter is not specified than then the alignment of the stylesheet will be used or ‘left’ if no alignment is defined in the stylesheet.

The alignment values are defined in the class Qt so Qt::Top|Qt::Left means that the cell texts are in the top left position).

e.g.: “columnsAlign=17;34” sets the first column alignment to top left, and the second column alignment to bottom right.

columnAlign.<column>

Sets the alignment for a specified column. – The alignment values are defined in the class Qt so Qt::Top|Qt::Left means that the cell texts are in the top left position).

e.g.: “columnAlign.2=17”

addColumn

Adds new column to the listview with the specified header text.

e.g.: “addColumn=New column”

renameColumn.<column>

Renames header text for a specified column.

e.g.: “renameColumn.0=Modified header”

removeColumn

Removes the specified column.

e.g.: “removeColumn=2”

Add

Semicolon separated values

Adds new item to the end of the listview. Sorting is switched off before adding.

The texts are separated by semicolon.

e.g. “add=ListView;control;is;nice!”

removeRow

Removes the specified row.

e.g.: “removeRow=2”

cell.<row>.<column>

Sets text for a specified cell.

e.g.: “cell.0.0=Top left cell”

row.<column>

Set text for a row

e.g: “row.0=Top Row C1;Top Row C2”

It will only change the row if it exists

selectRow

Selects a specified row.

e.g.: “selectRow=2”

clearSelection

Clears listview selection.

moveColumn

<from>;<to>

Moves a specified column to a new position.

e.g.: “moveColumn=0;3”

moveRow

<from>;<to>

Moves a specified row to a new position.

e.g.: “moveRow=2;1”

Sort

<column>

Or

<column>;<ascending>

Sorts the specified column. The default sorting is ascending.

e.g.:

“sort=2”

“sort=2;false”

Clear

Clears the contents of the listview.

Reset

Resets the default state:

Notifications

Parameter | Value | Notes
selection.<item id> | text value of current selection; the text of the cells are separated by ‘;’ | The notification can be set to notify on Selection, on Selection Changed.

Default values (those when a new listview is created or when a reset command issued) are shown in bold.

Note that the row and column indexes are from 0.


bncs_range

BNCS Range

Description

This is a control to deal with range parameters such as gain.

A "range" is defined as any number that can be accommodated in a variable type "double". Its range is "range is +/-1.7E308 with at least 15 digits of precision". This is slightly inefficient as everything is handled as a double even if it's only controlling a byte value, but handles just about all eventualities - even when numbers are expressed as exponentials such as Bit Error Rate e.g. 1e-4.

There are multiple presentations for this control - either up/down buttons, sliders, button, label or keypad. This makes it suitable for most range applications e.g. Video Gain, Receiver frequency.

This control can be used in Qt Designer directly but only the default presentation will appear. The full editing capabilities of this control are only available in the BNCS Visual Designer.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Settings

Parameter | Value | Type | Notes
reset | Base | Used to reset the control back to its default state
id | Base | numeric or alphanumeric identifier for this button
style bigupdown
updown
popup_bigupdown
popup_updown
button
label 		Base
return any of the other settings Base Return a named parameter from this control
e.g. send this to the control

return=text

will return a value of the text setting in the format

text=This is the text
device Base BNCS device number

This value is only returned if the instance parameter is not set

slot Base BNCS slot number

ndex registered for=slot+offset

This value is only returned if the instance parameter is not set

offset Base BNCS offset

index registered for=slot+offset

This value is only returned if the instance parameter is not set

instance Base BNCS instance

Tells the button to use a specific instance, this overrides slot and offset, if a named parameter is used this will also look up the slot.

parameter Base BNCS parameter

Targets the button at a parameter on the current instance, this can overrides slot, offset and slot.

min | 0 | Base | The minimum value of the range value on this control
Max | 100 | Base | The maximum value of the range value on this control
defaultvalue | 0 | Base | The default value of the range value on this control
step | 1 | Base | The small step size
bigstep | 10 | Base | The big step size
units Base The units

e.g 123.456MHz

inoffset | 0 | Base | What numeric offset is applied to get a display value before other calculations are applied.
outoffset | 0 | Base | What numeric offset is applied to get a display value after other calculations are applied.
multiplier | 1 | Base | What multiplier to use to get a display value
dp 0 Base The number of decimal places to display.

Note: setting this resets dp_sent to the same value (this is a backwards compatibility issue for when dp_sent did not exist as a separate parameter)

dp_sent
(version 4.5.11.0 onwards) 		0 Base The number of decimal places to send to the device

See note for "dp" parameter.

notify.valuechanged | false | Base | Whether to notify our parent that the value on this control has changed
width | 0 | Base | Minimum width of this control
height | 0 | Base | Maximum width of this control
colour.text
colour.background 		Button Colours used on this control

use any valid Qt colour

doublepush | false | Button | Whether the button should only activate on a double press
settodefault | false | Button | Whether activating this button should set the range to its default value
notify | false | Button | Whether the button should notify it has been released
notifyvaluechangerequested | false | Base | Whether this button should notify when it tries to set the value on a device
navigate | false | Button | Whether this button should navigate to the navigatedest when pressed
navigatedest | Button | The adjustable device to navigate to
showdefaultbutton | false | Up/Down | Whether to display the "set to default" button
autorepeat | true | Up/Down | Whether pressing and holding the button should increment the value
deviceDescription | Base | Takes device description file and interprets it for this control.
value | Base | The current value for the device
stylesheet.button
stylesheet.label 		Button/
Label

Set the stylesheet of the button or label
dismiss | base | closes ANY popup current (even if it wasn't one for this control)

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
value | <value> | current value of the range parameter
button | pressed |
valuechangerequested | <value> | This control has tried to write a new value to the device

Stylesheets

Version 4.6.13 and later requires the following stylesheet entries for default button state:

range_default | For when the incoming value is the same as the default value
range_notdefault | For when the incoming value is different from the default value

Device Description

The format of the device description file entry is:

<param name="BER" slot="26" class="range" style="label" access="readonly">
    <values min="0" max="0" step="0" bigstep="1" defaultvalue="0"/>
    <display inoffset="0" multiplier="0" outoffset="0" units="E-1" dp="1"/>
</param>

If the slot is 0 this indicates it is a complex type and the actual parameter is got at run time from instances and the complex instance data.

Custom Popup Editors

See here for notes on how this works

Developers Notes

This control has a number of different presentations - i.e. up/down button, keypad, single button etc.

There is a base control that deals with the fundamentals of the data type and maintains things like the min max, default, step etc. etc. It also has the connection to the network. This control has no screen presentation at all.

To make us of the control you require a "skin". This is one or many buttons that sit on the base control and provide the user interface. There can be many different types of "skin". The skins can have their own logic (eg. colouring the Default button when the value of the parameter is in the default state). The control could shed it's skin and use a completely different presentation if required.


bncs_rtrDestGrid

BNCS Destination Name Grid

Description

This control is similar to the bncs_sourcegrid component. This control solely includes the destination grid functionality.

Shown below is an example. Destinations are mapped onto buttons and their tallies displayed above (or optionally below).

The grid can be used supply parameters to other things or to make routes directly.

There are three route modes:

Mode | Notes
take | The source is written to the control on a take command and the crosspoint is made.
autotake.dest | When a source value is written to the control it is stored but nothing else happens. When the user selects a destination on this dest grid the route is made and the source value remains valid and may be routed again when the next destination is selected

Button Mapping

Buttons are mapped to router subscribers using an "upper" BNCS database (DB 2-9) or can be mapped manually.

An example database file section is shown here:

[Database_8]
1001=4,0,11,12,13,14,15,16,17,18,19,20,
1002=3,2,1,5,6,7,8,9,10,0,0,12,

This defines two pages of 12 buttons each. The first page has a full set of destinations for the indexes given except the second button which will be shown as disabled.

Typically you'd configure this control to pick these values up by setting mapping database to 8, having a mapping offset of 1000, set the page number at design time (or leave for runtime).

It is possible to set the destinations for this control manually without having to reference an external BNCS database by just providing them directly in the editor UI or at runtime with a "destmap" command

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

Parameter | Value | Notes
reset |  | Used to reset all the parameters of this control back to their default state
columns | 5 | The number of columns of buttons for this grid control
rows | 8 | The number of rows of buttons for this grid control
page | 1 | The page to select (added to the pageoffset value to determine the index within the database to use for this entry)
pageoffset | 0 | The page to select (added to the page value to determine the index within the database to use for this entry)
mapdb | 8 | The BNCS database number (2-9) to use for the button mapping information. In theory you could use database 0/1 but these are limited to 16 characters.
mapoffset | 1000 | The offset to apply to the index numbers in the map database
namesdb | 1 | Which database to use to get the names from (0-9). The default is "0" - sources.
namesoffset |  | The offset to apply to the index numbers in the names database
device | 0 | The BNCS device number of the router to control. This device number is used for both the names displayed and the button mapping information. This value is not used if the "instance" parameter is defined.
device.lock | 0 | The BNCS Device number for the lock infodriver. This value is not used if the "instance.lock" parameter is defined.
notify.pressed notify.released notify.name notify.tally notify.alltally notify.dest notify.lock | false true true false false false false | Whether to send notification messages for the relevant events.
stylesheet.selected stylesheet.deselected stylesheet.tally stylesheet.background | dest_selected dest_deselected | The stylesheets used for the various components of this button - there is no option to directly set the stylesheet of individual labels. It is suggested that you try and use the default entries.
sizepolicy | setminimum asdesigned shrinktofit | How to deal with text that doesn't fit on a button. You can either grow the size of the button until the text fits, leave it as designed (and might not fit), or shrink the text until it fits.
button.<buttonId>=released |  | A script may emulate the pressing of a button. The button is of the format: button_xxx where the xxx is the button number starting from 1 at top left and continuing in horizontal rows to bottom right.
instance |  | Instance name for the router
instance.lock |  | Instance name for the lock infodriver
buttonspacing.h | 10 | Horizontal button spacing
buttonspacing.v | 10 | Vertical button spacing
buttonspacing | 10 | Sets horizontal and vertical button spacing simultaneously
pixmap.database | 0 | The database to pick up pixmaps for the buttons. Valid entries are 2-9. A pixmap is a path as bncs_control would understand it. Extension is optional - if omitted default is ".png".This value writes the default (background) pixmap
pixmap.lock | /images/icon_lock.png | Path to pixmap to use when dest is locked. This value writes to the upper right pixmap and is independent of the background pixmap
tally_height | 20 | How high to make the label part of each destination
tally_single_line | false true | Whether to correct | characters in source names (used in BNCS to mean "new line") to spaces so that they don't overflow a single height tally.
tally_under | false true | Whether the tally label should appear above or below the button
source.<instance>=<index> |  | Source Value. What happens when this is written is dependent upon the "auto take mode". Instance value is optional and compared against the instance on this control. If they don't match then the source value is not accepted
autotake.dest | false | In autotake.dest the source value is stored and the crosspoint made when the destination is selected
mask |  | The text "mask" used when making crosspoints - exactly as supplied to the router crosspoint (RC) command
take.<dest_index>.<mask>=<source_index> |  | Initiates a router crosspoint for the currently selected destination and given source (unless autotake is enabled in which case it's ignored) mask is optional dest_index is ignored - it's provided so that this control can be used with others that pass index/mask in the same way
undo |  | Initiates a router cross point to undo the last take command
selected=<index> |  | If index is mapped on the page that is showing then it is highlighted and the current destination set appropriately. If the index is not mapped then the selection is removed and the current destination cleared.
destmap=<dest>,<dest>,<dest> |  | comma delimited list of destinations for this control to configure this control directly rather than point it at mapping database

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
button.<id> | pressed released | The notifications are only made if they are enabled in the settings above. Pressed has to be specifically enabled. Released has to be specifically disabled.
name | <router name> | router name is the value that appears on the depress-able button
dest | <router index> | index of the name that appears on the depress-able button
tally.<dest index> | <source index> |
lock.<dest index> | 0 1 |


bncs_rtrNameGrid

BNCS Router Name Grid

Description

This control is similar to the bncs_sourcegrid component. It's simpler and is only a router name grid (aka source grid) and does not include the destination grid functionality.

Button Mapping

Buttons are mapped to router subscribers using an "upper" BNCS database (DB 2-9).
An example ini file section is shown here:

[Database_8]
0001=4,0,11,12,13,14,15,16,17,18,19,20,
0002=3,2,1,5,6,7,8,9,10,0,0,12,11,

It is definable within the control which database of which is used and what index is used to select a comma delimited list of numbers. The list of numbers is then split and used to populate the array of buttons.
If a grid control is configured to have 16 buttons and set to look at entry 0001 above and set to show destination names then the top left button will show the destination 4 name, the top right button destination 12. The second row will start on the left with the destination 13 name etc. etc. There is only 12 numbers in this list so buttons 13-16 will be disabled (along with button 2 which is zero).

Edit Mode

Edit mode changes the operation of this control from "runtime" mode to "configure" mode.

Edit mode allows changes to the button mapping and naming - in edit mode additional commands become available and the action taken when a button is pressed changes.

Edit mode can be changed on the fly to allow in-panel editing.

There are two edit modes - they cannot be active at the same time as their operation is not compatible.

Map Edit Mode

In this mode buttons sending command "index=" presets the value in the control so that the next time a button is pressed this value is assigned to that button. The control continues to emit the notifications (if enabled) but does not show the button as selected.

Unlike runtime (where buttons disable if not mapped) no buttons are ever disabled in map edit mode.

Name Edit Mode

In this mode buttons select in the normal way. However if a "rename=" command is received the currently selected button changes name and all the other buttons disable (this is to indicate that "save" is required).

Buttons are enabled/disabled in the normal way (if there is nothing mapped then you cannot change the name anyway so the button must stay disabled).

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>
Parameter | Value | Notes
reset |  | Used to reset all the parameters of this control back to their default state
columns | 5 | The number of columns of buttons for this grid control
rows | 3 | The number of rows of buttons for this grid control
page | 1 | The page to select (added to the pageoffset value to determine the index within the database to use for this entry)
pageoffset | 0 | The page to select (added to the page value to determine the index within the database to use for this entry)
mapdb | 8 | The BNCS database number (2-9) to use for the button mapping information. In theory you could use database 0/1 but these are limited to 16 characters.
mapoffset |  | The offset to apply to the index numbers in the map database
namesdb | 0 | Which database to use to get the names from (0-9). The default is "0" - sources.
namesoffset |  | The offset to apply to the index numbers in the names database
instance.map |  | The instance to use for button mapping
instance |  | The instance to use for names
device.map | 0 | This device number is used for the mapping database. This value is not used if an "instance.map" name is specified
device | 0 | This device number is used for both the names displayed. This value is not used if an "instance" name is specified
notify.pressed | false | Whether to send notification messages for the relevant events.
notify.released | true | Whether to send notification messages for the relevant events.
notify.name | true | Whether to send notification messages for the relevant events.
notify.index | false | Whether to send notification messages for the relevant events.
stylesheet.selected | source_selected | The stylesheets used for the various components of this button - there is no option to directly set the stylesheet of individual labels.
stylesheet.deselected | source_deselected |
stylesheet.background |  |
sizepolicy | setminimum asdesigned shrinktofit | How to deal with text that doesn't fit on a button. See the bncs_control documentation for more information.
button.=released |  | A script may emulate the pressing of a button. The button is of the format: button_xxx where the xxx is the button number starting from 1 at top left and continuing in horizontal rows to bottom right.
pixmap.database | 0 | The database to pick up pixmaps for the buttons. Valid entries are 2-9.
buttonspacing.h | 10 | Horizontal button spacing
buttonspacing.v | 10 | Vertical button spacing
buttonspacing | 10 | Sets horizontal and vertical button spacing simultaneously
index | 0 | This command has two modes of operation: Runtime: If the supplied index is mapped on this control then it is selected, otherwise the selection is removed. Map edit mode: This sets the source to map next time a control is pressed
map_mode | false true | Whether this control is in map edit mode
rename_mode | false true | Whether this control is in rename edit mode
save |  | Edit mode only. Save the current changes to mapping and/or name change
cancel |  | Edit mode only. Revert any changes back to the configured state.
rename |  | Rename edit mode only. Change the name on the currently selected

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
button. | pressed released | The notifications are only made if they are enabled in the settings above. Pressed has to be specifically enabled. Released has to be specifically disabled.
name | <router name> | router name is the value that appears on the depress-able button
index | <router index> | index of the name that appears on the depress-able button


bncs_script

BNCS Script Control

Description

"Scripts" in V4.6 are user-written DLLs. They contain both XML dialog descriptions and C++ code that determines how the dialog descriptions are loaded and what happens to all the button events that they generated.

"Scripts" are very flexible in that they can be large top level panels or tiny one-button components used 100's of times on another dialog.

There are examples were script components host other script components which host other script components.....you get the idea!

Scripts can also be created on the fly - so you can build a dialog out of different script components depending on a particular route or device state.

Parameter passing follows the usual convention of = pairs and "script controls" interact in exactly the same way as all the other controls and can be used interchangeably with them in (practically) any quantity or combination

Edit Dialog

Item | Notes
ID | The identity of this control
Script path | The path to the directory containing the script DLL. This should only be the path to the directory containing the DLL. This is never a file-system absolute path and cannot begin with a drive letter. If the path starts with a "/" then the root is taken to be the panels folder of the current system (i.e. %CC_ROOT%/%CC_SYSTEM%/panels) If the path doesn't start with a "/" then it's taken to be relative to it's host
 | You can open the directory for the script path (disabled if the path does not exist)
 | You can open the Visual Studio project for the script path (disabled if a ".dsw" file does not exist in this path)
Instance | The named device to target this script to (whether it uses this value is entirely down to the script!)
Group | The group that determines how the instance value is determined
Stretch | Whether the dialogs displayed by this script are shown as-is or stretched to fit the size of the control
Stretch font | Whether (with the stretch feature enabled) to also attempt to stretch the fonts
Parameter / Value | Parameter value pairs - these are derived from what the script returns
Help (script) | If a ".chm" file (compiled HTML help file) exists in the same directory as the DLL then this button is enabled. Pressing it launches the help viewer
Help (host) | This help (but you knew that)


bncs_smart_string

BNCS Smart String

Description

This is a smart control to show the value of a string on a BNCS device

Commands

Command | Notes
style base Possible values
  • button
  • label
  • keyboard (not fully implemented)
  • lineedit (not fully implemented)
validation base
  • alphanumeric
  • numeric
  • alpha
  • regexp
defaultstring | base | not used...
name | base | not used....
id | base | unique identifier for this control
group | base | used for targeting
reset base reset the values back to the default state
(usually called by the editor rather than manually)
child.<id> | base | send the following value verbatim to the control <id>
value | base | set the value - either directly or make it the "preset" value
takepreset | base | when the control is in preset mode - take the current preset value
revertpreset | base | when the control is in preset mode - set back to null
presetmode base Values are
  • true
  • false
smartstringlength | base | for length validation - string length
regexp | base | for regexp validation
smartstringrestricted base Whether to validate string length. Values are:
  • true
  • false
lowercaseonly base Alpha validation only. Values are
  • true
  • false
uppercaseonly base Alpha validation only. Values are
  • true
  • false
numericfrom | base | Numeric validation only. Start of range
numericto | base | Numeric validation only. End of range
numericdecimals | base | Numeric validation only. Number of decimal places
device | base | BNCS device number
slot | base | BNCS slot number (resulting index is slot+offset)
offset | base | BNCS slot offset (resulting index is slot+offset)
instance | base | Instance parameter (BNCS device/offset looked up in instances configuration)
parameter | base | Parameter value - BNCS slot number looked up in specified instance type
notify | base | whether to notify on button pressed
defaultstyle | base
width | base | Set minimum width for this control
height | base | Set minimum height for this control
doublepush button/label Whether the button should be double push. Values are:
  • true
  • false
navigate.adjust
navigate.execute
navigate.popupscript 		button/label Whether to navigate when the button is pressed
navigatedest | button/label | This is the context for the operation specified in the navigate command
popupScriptParam | button/label | A free-form newline delimited list of parameter=value pairs to send to the popup script
colour.text
colour.background 		button/label The basic colours of this control
notify button/label Values
  • true
  • false
presetvalue | button/label | set the preset value - this is then written to the device when you send a takepreset command
dismiss | base | closes ANY popup current (even if it wasn't one for this control)

Notifications

Command | Notes
button=released |
notify.valuechanged=<value> |
valuechangerequested=<value> |

Custom Popup Editors

See here for notes on how this works


bncs_sourceGrid

BNCS Source Grid

This control is deprecated

Use destgrid or name grid instead

Description

This is an interim solution to router control smart button - it is not truly a super-smart as it hasn't got (and can't easily have) the full range of display options e.g. grid, popup grid from button/label etc.

The way sources and destinations are mapped onto buttons is the model devised for some of the earliest "mappable" BNCS routing systems and is not necessarily ideal for BNCSi.

This control can be used as a grid of source buttons, or as a grid of destination buttons with the router tallies displayed.

There are other options which allow a few additional labels to be displayed. The source for these labels is configurable to be either router databases or simple infodriver slots.

Button Mapping

Buttons are mapped to router subscribers using an "upper" BNCS database (DB 2-9).
An example ini file section is shown here:

[Database_8]
0001=4,0,11,12,13,14,15,16,17,18,19,20,
0002=3,2,1,5,6,7,8,9,10,0,0,12,11,

It is definable within the control which database of which is used and what index is used to select a comma delimited list of numbers. The list of numbers is then split and used to populate the array of buttons.
If a grid control is configured to have 16 buttons and set to look at entry 0001 above and set to show destination names then the top left button will show the destination 4 name, the top right button destination 12. The second row will start on the left with the destination 13 name etc. etc. There is only 12 numbers in this list so buttons 13-16 will be disabled (along with button 2 which is zero).

Lock Destinations

THIS FEATURE IS STILL INCLUDED FOR BACKWARDS COMPATIBILITY BUT SHOULD NOT BE USED. LOCKING USING ROUTER DATABASES IS PRONE TO DATA LOSS SINCE DEV_xxx.INI FILES ARE SYNCHRONISED WITH, BUT NOT UPDATED ON, THE SYSTEM SERVER

Enable this behaviour with setting the Enable tick box in the Lock Destinations section of the Appearance tab of the settings dialog, which results a entry in the corresponding bncs_ui file.
When enabled, the control looks for the [Controller] section of the router ini file, which contains the controller id-s of the router; thereafter looks the [Controller] section of the controller ini file. This file contains which destination ports are locked. The buttons belonging to the locked destination slots are displayed as disabled on the GUI, so they are grey, and the user of the Panel Manager couldn't have the possibility to change them.

Settings

You can pass any of the following settings to this control in the format:

<parameter>=<value>

Default values (those when a new button is created or when a reset command issued) are shown in bold.

Parameter | Value | Notes
reset |  | Used to reset all the parameters of this control back to their default state
columns | 3 | The number of columns of buttons for this grid control
rows | 3 | The number of rows of buttons for this grid control
page | 1 | The page to select (added to the pageoffset value to determine the index within the database to use for this entry)
pageoffset | 0 | The page to select (added to the page value to determine the index within the database to use for this entry)
mapdb | 8 | The BNCS database number (2-9) to use for the button mapping information. In theory you could use database 0/1 but these are limited to 16 characters.
namesdb | 0 | Which database to use to get the names from (0-9). The default is "0" - sources.
device | 0 | The BNCS device number of the router to control. This device number is used for both the names displayed and the button mapping information
notify.pressed notify.released notify.name notify.tally notify.index | false true true true false | Whether to send notification messages for the relevant events. Note: a tally notification is only sent if the tally label is selected as one of the multibuttons
stylesheet.selected stylesheet.deselected stylesheet.tally stylesheet.label | sourcegrid_selected sourcegrid_deselected sourcegrid_tally sourcegrid_label | The stylesheets used for the various components of this button - there is no option to directly set the stylesheet of individual labels. It is suggested that you try and use the default entries.
show.tally show.label.1 show.label.2 show.label.3 show.label.4 | false false false false false | Which of the additional buttons above and below the main button are displayed. This requires the multibutton option to be set to true
lockingenabled | false true | Whether the slots are checked in ini file for locking (SEE NOTE ABOVE)
multibutton | false true | Whether the additional buttons above and below the main button are displayed
tally_source | tally tally_db2 infodriver button_db2 | Where to get the information from to display on the "tally" label (this requires this option to have been enabled). The options are: tally - the source tally db0 name that is routed to this destination tally_db2 - the source tally db2 name that is routed to this destination infodriver - the contents of an infodriver slot the index of which is the same as the router index mapped to this button button_db2 - the database 2 entry of the button name
label_source | infodriver tally_db3456 button_db3456 | Where to get the information from to display in the label(s) beneath the button. The options are: infodriver - the contents of an infodriver slot the index of which is the same as the router index mapped to this button. There is a single infodriver slot for all the labels and the information is comma delimited. tally_db3456 - the database 3-6 entries for the tally source button_db3456 - the database 3-6 for the same index that's mapped to this button
tally_infodriver | 0 | The infodriver device number to use for the tally label display if infodriver is selected as the tally source
label_infodriver | 0 | The infodriver device number to use for the tally label display if infodriver is selected as the label source
sizepolicy | setminimum asdesigned shrinktofit | How to deal with text that doesn't fit on a button. See the bncs_control documentation for more information.
button.<buttonId>=released |  | A script may emulate the pressing of a button. The button is of the format: button_xxx where the xxx is the button number starting from 1 at top left and continuing in horizontal rows to bottom right.

Notifications

Notifications are also in the format:

<parameter> = <value>
Parameter | Value | Notes
button.<id> | pressed released | The notifications are only made if they are enabled in the settings above. Pressed has to be specifically enabled. Released has to be specifically disabled.
name | <router name> | router name is the value that appears on the depress-able button
index | <router index> | index of the name that appears on the depress-able button
tally | <tally name> | The value that appears on the tally of the button. This notification can occur when the currently selected button is changed or when the tally to the currently selected button changes


popupEditorGuide

Popup Editor Authoring Guide

Introduction

These are some notes on popup editors for the smart button types.

The idea was that the smart buttons wrap up commonly used functionality to make life easy...this means there are various configurable features that can be used to make UIs. Sometimes however these controls can't allow for every last edit-time option that may be required and it would be useful to create a custom editor.

The custom editor can be a DLL script or may simply be a bncs_ui dialog description with connections.

Writing The Script

Here's a typical design time editor (for the enum smart button). In the top right section I've selected the navigate option with "Popup Script" - below I've told it where to find the custom editor.

The path to the custom editor follows the same convention as panel loading. i.e. give it the name of the directory and it'll either load the DLL in that directory or if there isn't one the "bncs_ui" file. You can explicity set the path to a DLL or BNCS_UI file otherwise..... Paths starting with a slash are rooted in the system panels directory, otherwise they're relative to the directory of the panel the smart button is sitting on.

Path | Valid?
/myPanel | Yes
mySubPanel | Yes - a subdirectory off the current panel
../somethingHigherUp | Yes
c:\mySystem\panels\stuff | NO - contains an absolute path

Below the path is a number of parameter=value pairs. You can have as few or as many of these as you like - they're passed to the script/UI when it's created.

Things to note

Here's some handy things to know when you're writing DLL scripts for custom edtiors:

  • all the non-default values from the smart button get passed to the script - this may include instance, group ranges BUT NOT values which are at their default values. You have to have some knowledge of the default state of a smart button to set your default states the same (smart button docs define what the defaults are)
  • you may enter as many additional parameter=value pairs at design time as you like - these just get passed to the script as parent callbacks or to a bncs_ui as [parent] events
  • when all the parameters have been passed (from host and manually entered strings) then the control receives a parent callback of "__GO=__GO". This signifies that the control should create it's UI
  • for a DLL script YOU MUST set the size of it using the setSize() function - otherwise all you get is a small popup zit instead of the panel you expected

Using a bncs_ui file only without a script file

Sometimes all you want to do is give a custom layout to an editor. You can use just a plain ".bncs_ui" file as your custom editor.

For this to work you need to use connections to listen out for incoming configuration information (if that's necessary) and to send values back to the control to set the value.

Here's a simple set of connections:

The first line takes messages from our parent and simply passes them to a list control so that we can see what values we're being sent. You don't have to use these messages at all - but they're there if you want

Button1 and Button2 connection events send a value back to this UI's parent - they send a value= command which sets the value of whatever the host smart button is looking at.

Button3 can be used as a close/cancel button to close the popup.

Typically smart buttons accept "value" commands to set the new value, and "dismiss" to close the editor popup.

Notes

At the time of writing there is a fault that you cannot use the connections debugging when a popup UI is active.


Rich Text Reference

Rich text in BNCS controls is a bit like simple HTML. Rich text is always enclosed in <qt></qt> tags (this is the convention used by the underlying toolkit BNCS uses to draw rich text).

A simple example might be:

<qt><h1>Hello World!</h1></qt>

which would display as

Hello World!

Rich text should always attempt to be valid "XML" - i.e. tags should be closed (e.g. use <br/> not just <br>). Whilst the display of text is quite forgiving and doesn't have to be "valid XML" having properly formatted XML enables "pretty print" capability.

Structuring tags | Notes
<qt>...</qt> A Qt rich text document. It understands the following attributes:
  • bgcolor -- The background color, for example bgcolor="yellow" or bgcolor="#0000FF".
  • background -- The background pixmap, for example background="granite.xpm".
  • text -- The default text color, for example text="red".
<h1>...</h1> | A top-level heading.
<h2>...</h2> | A sublevel heading.
<h3>...</h3> | A sub-sublevel heading.
<p>...</p> | A left-aligned paragraph. Adjust the alignment with the align attribute. Possible values are left, right and center.
<center>...
</center> 		A centered paragraph.
<blockquote>...
</blockquote> 		An indented paragraph that is useful for quotes.
<ul>...</ul> | An unordered list. You can also pass a type argument to define the bullet style. The default is type=disc; other types are circle and square.
<ol>...</ol> | An ordered list. You can also pass a type argument to define the enumeration label style. The default is type="1"; other types are "a" and "A".
<li>...</li> | A list item. This tag can be used only within the context of <ol> or <ul>.
<pre>...</pre> | For larger chunks of code. Whitespaces in the contents are preserved. For small bits of code use the inline-style code.

The default character style bindings are:

Style tags | Notes
<em>...</em> | Emphasized. By default this is the same as <i>...</i> (italic).
<strong>...</strong> | Strong. By default this is the same as <b>...</b> (bold).
<i>...</i> | Italic font style.
<b>...</b> | Bold font style.
<u>...</u> | Underlined font style.
<s>...</s> | Strike out font style.
<big>...</big> | A larger font size.
<small>...</small> | A smaller font size.
<sub>...</sub> | Subscripted text
<sup>...</sup> | Superscripted text
<code>...</code> | Indicates code. By default this is the same as <tt>...</tt> (typewriter). For larger chunks of code use the block-tag <pre>.
<tt>...</tt> | Typewriter font style.
<font>...</font> Customizes the font size, family and text color. The tag understands the following attributes:
  • color -- The text color, for example color="red" or color="#FF0000".
  • size -- The logical size of the font. Logical sizes 1 to 7 are supported. The value may either be absolute (for example, size=3) or relative (size=-2). In the latter case the sizes are simply added.
  • face -- The family of the font, for example face=times.

Special elements are:

Special tags | Notes
<img src="myImage.png"/> | An image. The image tag also understands the attributes width and height that determine the size of the image. If the pixmap does not fit the specified size it will be scaled automatically.
<hr/> | A horizontal line.
<br/> | A line break.
<nobr>...</nobr> | No break. Prevents word wrap.

In addition, rich text supports simple HTML tables. A table consists of one or more rows each of which contains one or more cells. Cells are either data cells or header cells, depending on their content. Cells which span rows and columns are supported.

Table tags | Notes
<table>...</table> A table. Tables support the following attributes:
  • bgcolor -- The background color.
  • width -- The table width. This is either an absolute pixel width or a relative percentage of the table's width, for example width=80%.
  • border -- The width of the table border. The default is 0 (= no border).
  • cellspacing -- Additional space around the table cells. The default is 2.
  • cellpadding -- Additional space around the contents of table cells. The default is 1.
<tr>...</tr> A table row. This is only valid within a table. Rows support the following attribute:
  • bgcolor -- The background color.
<th>...</th> | A table header cell. Similar to td, but defaults to center alignment and a bold font.
<td>...</td> A table data cell. This is only valid within a tr. Cells support the following attributes:
  • bgcolor -- The background color.
  • width -- The cell width. This is either an absolute pixel width or a relative percentage of table's width, for example width=50%.
  • colspan -- Specifies how many columns this cell spans. The default is 1.
  • rowspan -- Specifies how many rows this cell spans. The default is 1.
  • align -- Alignment; possible values are left, right, and center. The default is left.
  • valign -- Vertical alignment; possible values are top, middle, and bottom. The default is middle.

Limitations

At time of writing richtext supports "smart size" but not rotation.

Copyright Atos 2012


smartButtonPolling

Smart Button Polling

Introduction

BNCS is a funny old Hector in that you have to be sympathetic to the network - i.e don't poll for "too much" at one time (noting that "too much" has and can never be strictly defined)

Top level panels are usually easy - they just poll for the things that they want to talk to...and occasionally you might just have to defer polling if you find you're polling lots of things simultaneously so that you don't hit the network "too hard".

Smart buttons have an issue....they are independent entities and don't know what anything else might be polling for. This is good when developing panels -smart buttons just work by themselves, but they aren't very "sympathetic" to the network. If you create 100 smart controls they'll each ask 100 questions - "gimme slot 1, gimmie slot 2, gimmie slot 3" etc. etc. rather than being able to go gang up and go "gimmie slots 1-100".

Sitting between the smart controls and CSI is a "shim" - this takes the work-load off CSI for multiple registrations. Some systems can have literally thousands of controls - each with their own registrations. The shim just remembers in an efficient way all these registrations (CSI has a maximum of 1000). The shim is in the ideal spot therefore to look at the poll requests and do two things:

  • aggregate multiple requests into one
  • check that the things that are requested actually arrives
Individual smart button requests | What hits the network
IP 101 1 1 IP 101 2 2 IP 101 3 3 | IP 101 1 3

Aggregation strategy

This is great we've just saved ourselves from clogging the network with two unnecessary commands (noting that some panels uses hundreds), and saved the driver from having to decode those individual commands. It's often the case that this is exactly what happens - panels do use range of slots in that way...but also common that you "miss a few out":

Individual smart button requests | What hits the network | Notes
IP 101 1 1 IP 101 2 2 IP 101 3 3 IP 101 6 6 IP 101 7 7 IP 101 8 8 | IP 101 1 3 IP 101 6 8 | slots 4 and 5 are missing...so don't bother asking
IP 101 1 1 IP 101 2 2 IP 101 3 3 IP 101 5 5 IP 101 6 6 IP 101 7 7 IP 101 8 8 | IP 101 1 8 | only slot 4 is missing...so just ask for the lot - the fact that we'll get slot 4 in our responses is offset by the fact that we saved a command outgoing

Key Points

  • poll aggregation/retry is a mechanism SOLELY for single-slot polls
  • there is no longer a direct relationship between sending an IP (or GP or RP) and that poll hitting the network
  • polls may continue to appear and be repeated automatically independently

Gotchas

Aggregation works on device and slot number - the type is taken to be the type of the first command. Consider the following example:

Individual smart button requests | What hits the network | Notes
RP 101 1 1 IP 101 2 2 IP 101 3 3 IP 101 6 6 IP 101 7 7 IP 101 8 8 | RP 101 1 3 IP 101 6 8 | The first block is started with a router poll - so this is what's used as the command on the network. The second block is started with a info poll

This is somewhat nonsensical thing to do - but has been seen!


uiHost

BNCS UI Host

This is a simple control to just load the specified ".bncs_ui" file as if it were a single control on the UI.

Targeting

This control can be targeted with it's own instance.

Parameters

If the UI specified has connections then the UI host will read these and search for [parent] in the sender/receiver fields - it will then use the values in these connections to populate the parameters field in the editor:

So...if the specified UI has these connections configured:

will result in these commands being visible in the editor of the panel on which this control is placed (the command "c" and "t" being taken from lines 1 and 2 in the example above)

and the following events (taken from line three above):


version

bncs_control Version History

Version | Date | Notes
1.00.01 |  | first version with resources/history 22/01/04
1.00.02 |  | adds instance passing to bncs_script_loader
1.00.03 |  | changes dcw to dll version rather than static lib
1.00.04 |  | changes to instance/group for bncs_script_loader
1.00.05 |  | adds instance browser functions to range/enum tidies polling to single go after 1mS delay (to allow to settle)
1.00.06 |  | fix to bncs_script_loader setcaption instance handling
1.00.07 |  | adds dobuild function to more incoming parameters
1.00.08 |  | adds info/router/gpi query functions to script class
1.00.09 |  | global settings class changed to cc_sys
1.00.10 | 100304 | adds text command to lineedit
1.00.11 | 220304 | adds autodelete( false ) around panels in script PD call
1.00.12 | 310304 | adds return values to the PS/PD/PP/PR calls in script helper
1.00.13 | 060404 | adds canNavigateAdjust call
1.00.14 | 130404 | rebuild to correct project options (no changes otherwise)
1.00.15 | 070504 | changes bncs_range instancing code in setCaption
1.00.16 | 230704 | corrects "id=" name setting function in bncs_range control which fixes could not set button id bug
1.00.17 | 260705 | corrects return value in bncs_control for colours.xxx navigateAdjust, NavigateExecute, navigateCanAdjust now cope with instances that have spaces corrects BNCS_WORKSTATION references to CC_WORKSTATION
1.00.18 | 020804 | corrects sourcegrid pixmap paths
1.00.19 | 250804 | corrects script helper return command (to allow for individual param return)
1.00.20 | 260804 | correct to script class to use return=all for edit dialog
4.5.0.0 | 011204 | build for Synergy
4.5.0.1 | 190105 | adds count call to listbox and also makes sure that the current item is visible in this list when it's selected.
4.5.1.0 | 020305 | Add setting and getting of value from range and enum controls - Done by Mark
4.5.2.0 | 150305 | Can now use GPIs and Routers with Smart buttons - Done by Mark
4.5.2.0 | 220305 | Parameter sotred by name, also accepts complex types - Done by Mark
4.5.4.0 | 060405 | Enum can now be a background button - Done by Mark
4.5.5.0 | 130405 | Scripts can now retarget a child panel - Done by Mark
4.5.5.0 | 140405 | Panels can now be targeted at instances with spaces - Done by Mark
4.5.6.1 | 100505 | Corrected PS targeting problem - Done by Mark
4.5.7.0 | 080605 | Setting values from script noe via CSI buffer - Done by Mark
4.5.8.0 | 270605 | Control now gets the type from the device description file.
4.5.8.1 | 210905 | minor fix to listbox so that sort timers are stopped and not run every time an entry is created
4.5.8.2 | 260905 | SPeeded up drawing of buttons, and some debug messages removed.
4.5.8.3 | 290905 | "Press again" popup minimum size related to text, and always appears, even if button at top of screen.
4.5.9.0 | 290905 | Enum_line can now notify, navigate and change slots
4.5.10.0 | 061005 | corrects parameters passed killTimer calls so that other (random) timers are not stopped removes also some redundant line mask drawing calls adds button.xxx=relased functionality to sourcegrid
4.5.10.1 | 101005 | Stopped problem with invalid bitpas caused by invalid size, still problems with >10,000 widgets though!
4.5.10.2 | 121005 | Found another timer that is killed.
4.5.10.3 | 131005 | Add an else to the kill other timers in the timer event.
4.5.11.0 | 191005 | uses up_big.bmp and down_big.bmp for the images on the big updown button, ensures these are present by copying existing up/down bitmaps if required
4.5.12.0 | 191005 | adds double push option to the enum list/buttons (both)
4.5.13.0 | 201005 | bncs_enum_line now draws lines direct rather than creating child bncs_line removes a number of layout managers that are not really needed on the smart buttons
4.5.14.0 | 201005 | removes decimal point formatting of range control paramters (so that they don't get cropped by the decimal point value used to display them...)
4.5.15.0 | 201005 | uses static function to get shim rather than creating a class
4.5.16.0 | 251005 | major reworking of the way that bncs_control works to save the number of widgets that get created adds also name parameter to range buttons and label for name in the popup (doesn't show this on the popup if no name is set)
4.5.16.1 | 311005 | Default button action is not to signal lost focus
4.5.16.2 | 311005 | Line now emits pressed, released and lostfocus if set. Masks used for mouserelease events in lines.
4.5.17.0 | 021105 | uses cached version of instance information (and device type) so speed up dev/offset/slot finding
4.5.18.0 | 091105 | Audio functions added here!
4.5.18.1 | 091105 | adds button edit functions to range button (doublepush/stylesheet) makes disable work on smart buttons
4.5.18.2 | 271105 | fixes I
4.5.18.3 | 010206 | Added a clock control
4.5.18.4 | 130206 | Added Smart String control
4.5.18.5 | 290306 | Restructured so that all enum, range and smartskin edit components derive from skin_base
4.5.18.6 | 170506 | If the text is only a '
4.5.18.7 | 220506 | Fix various problems introduced with the re-structuring
4.5.18.8 | 260606 | Audio function do not cause crash when on a machine with no audio now.
4.5.19.0 | 270606 | BiState functions added.
4.5.20.0 | 270606 | String added, but only for the label and button options
4.5.20.1 | 280606 | Fix added to stop holes appearing in panels
4.5.21.0 | 030706 | Keyboard can now have a transparent background
4.5.21.2 | 160806 | Fix range button released notifications
4.5.21.3 | 160806 | Fixed bug where enquiry for navigate returned true even if there was no typehandler for the device.
4.5.21.4 | 220806 | Re-instated enum state browser when double-clicking an entry - why was it removed???
4.5.21.5 | 240806 | Smart string group made to work, there wher 2 seperate strings for group, there is now only 1!
4.5.21.6 | 290806 | Fix so that the range control does nmot have holes in it.
4.5.21.7 | 050906 | Fix so that setting the name programatically on an enum button updates the text.
4.4.21.8 | 060906 | Fixed enum button so that when a new style is applied first the button stylesheet is applied to override other settings.
4.4.21.9 | 200906 | Fix so that the textGet navigatedest works on a simpleNavigate button, also fixed many other return values that were missing......
4.4.21.10 | 250906 | Enum button & label now remember to display no text.
4.4.21.11 | 260906 | Range was trying to access a non-existent child helper, checking now implemented.
4.4.21.12 | 021006 | Range mask cleared if there are no children, means that buttons and labels appear correctly.
4.4.21.13 | 021006 | Range popups now appear correctly....... As there were child controls the mask hid them.
4.4.21.14 | 041006 | Mask added to enum so that the space between the list controls is painted by the background.
4.4.21.15 | 051006 | Fix so that at design times changes between enum styles draw correctly.
4.4.21.16 | 101006 | Mask is now part of the bncs_skin_base, and handled by each class as appropriate.
4.4.21.17 | 021106 | Fixed tab order on the range settings edit page.
4.4.21.18 | 131106 | Added the ability to send "NOW" on infowrite commands.
4.4.21.19 | 131106 | Added the ability to send "NOW" on GS and RC commands
4.4.21.20 | 150106 | Got rid of all of the compiler warnings etc....
4.4.21.21 | 220106 | Fix to allow loading of multiple instances of component that are in the route of the panels directory.
4.4.21.22 | 060307 | Rebuilt with new decodeBncsString lib to allow null strings to be written i.e. IW 123 '' 1.
4.4.21.23 | 270307 | Enum values are now set to disabled if the device description says slot is readonly
4.4.21.24 | 290307 | There is a short delay before a range will repeat to allow the user to cnange the value easier.
4.4.21.25 | 260407 | Bistate now uses the bistate.press/release notation, was a bad day when done before obviously.
4.5.22.0 | 300407 | adds getIdList functionality and also curious version numbering scheme
4.5.23.0 | 191107 | fundamental button style now stored irrespective of style/statesheet entry
4.5.?.? | ??????? | multiple changes not recored here
4.6.0.0 | 281008 | reworked shim, removes bncs_config objects (speed enhancements)
4.6.0.1 | 071108 | sourcegrid now unregisters from shim before being destroyed
4.6.0.2 | 111108 | registration with zero device number fixed for script loader
4.6.0.3 | 141108 | adds handle to Tooltip
4.6.0.4 | 030309 | corrects gpi param order
4.6.0.5 | 060309 | adds description to the debug tooltips, also corrects sending of GPI values (bool cast of QString( "0" ) is 1).
4.6.1.x | 060409 | fix for historic memory leak (oops) and changes version numbering so last digit can be auto-incrememting build number
4.6.2.0 | 030809 | Added the ability to modify enum values via right button if it is allowed in g_pnlman.ini
4.6.2.1 | 030809 | controlMove(moves control to specfic co-ordinates) and controlPosition (gets controls position) added to BNCS script helper, and bncs script loader.
4.6.2.2-71 | 050809-250809 | More changes Help buttons added to different control types bncs_control settings changed to point at correct location for htmlhelp.h bncs_range_edit_style changed so the GUI displays correctly Do validation when setting value for the numpad control from outside (with textPut). This will bring the buttons to default state when clearing the entered value after pressing 'Ret'. Crash fixed. bncs_control modified to copy bncs_ssmart.chm to windows/lib location
4.6.2.72 | 280809 | Added the show browse dialog signal handlers to the controls
4.6.2.73 | 030909 | Fader control now shows its handle button in the overall style
4.6.2.74 | 110909 | Horizontal fader control added
4.6.2.75 | 241109 | Text Orientation feature added to control and range_fader
4.6.2.76 | 011209 | DB button control added
4.6.3.xx | 031209 | Now passes all parent params to navigate->popup script component
4.6.4.0 | 031209 | adds param list to popup script navigate event
4.6.5.0 | 071209 | any return from a script run by "Navigate->popup script" will cause the popup to close
4.6.6.0 | 101209 | allows return of slot parameter
4.6.7.0 | 141209 | changes to the way popup->script works - now scripts should send value=XXXX as hostNotify for the smart button to set the parameter NOT set it directly
4.6.8.0 |  | WHY NO VERSION HISTORY
4.6.9.0 |  | WHY NO VERSION HISTORY
4.6.10.0 |  | WHY NO VERSION HISTORY
4.6.11.0 | 250510 | corrections to restore direct device/offset/slot working when no instance/parameter is set (B'ism)
4.6.12.0 | 250510 | makes smart button dialog layouts consistent - fixes enabling/disabling of device/offset/slot
4.6.13.0 | 210610 | makes range button default a stylesheet not a hard coded value (range_default, range_notdefault)
4.6.14.0 | 240610 | hmm...not sure I like this but there is bizarre set of circumstances when you create a popup script on range/enum/string buttonswhen you may wish to defer creation of dialog until after all parameters have been set. This is OK except parameter list is freeform and optional. I have added an "end of parameters - go for it" command as the last thing that the incoming script receives This is of the form __GO=__GO. This just says "you've got all your params go for it! This only applies to scripts that are created as popup script items.
4.6.15.0 | 250610 | clarification of notification code - this previously would notify of a change but an immediate get of the value would return the last value not the current one
4.6.16.0 | 250610 | oops...change to correct error in last change
4.6.17.0 | 020710 | less stringent checking of popup param values ("value" is allowed to be null)
4.6.18.0 | 090710 | fix to smart string stuffed up from 4.6.15
4.6.19 | 240910 | script component only returns scaling parameters if not at default value adds rtrDestGrid and rtrNameGrid reorganises project (largely) into control type
4.6.20 | 280910 | fixes to rtrDestGrid to make routes, have take and undo etc adds global design time flag so that controls aren't disabled at design time (makes them hard to edit)
4.6.21 | 300910 | adds device type flag (can't get from device type 'cause default is infodriver and there is no need for device type otherwise for a router) fixes button push on label to select the button not the label moves the button layout back to the first tab
4.6.22 | 041010 | changes default for index on rtrNameGrid and rtrDestGrid from 0 to -1 (zero being an occasionally used "off" source).
4.6.23 | 081010 | fixes folder/vc project buttons in script loader and adds open help button
4.6.24 | 111010 | support for _events and _commands command passing to script_loader
4.6.25 | 191010 | adds option to set the index of a name grid (if there's that index mapped it's selected otherwise it'll deselect) also adds _events and _commands handlling
4.6.26 | 211010 | fix to tally_under default value (rtrdestgrid) and fix to rtrnamegrid deselection
4.6.27 | 211010 | adds host id for script loader
4.6.28 | 221010 | sets minimum height of enum popup buttons to 50 (this needs to be more sophisticated (bug 628) makes width and height commands for bncs_control actually do something useful (they didn't work properly before)
4.6.29 | 221010 | adds simple _events and _commands handling to enum and range
4.6.30 | 291010 | splits mapping and naming instances for rtrNameGrid
4.6.31 | 291010 | removes autotakesource mode from rtrDestGrid and changes "source" command to "take" and adds different "source" command fixes rtrNameGrid database change notification (now it has split instances)
4.6.32 | 081110 | adds "proper" editor to line edit (only allows setting of text and initial focus)
4.6.33 | 111110 | enhances line edit control to accept colours/stylesheets and switchable notifications
4.6.34 | 191110 | adds edit mode to the router name grid component
4.6.35 | 191110 | adds dirty command to rtrNameGrid, also further honing of dirty/disable functions
4.6.36 | 291110 | adds replace command to listbox
4.6.37 | 021210 | adds _commands and _events handling to the basic control
4.6.38 | 091210 | quick and dirty mods to allow non-VC scripts to load (shouldn't be a problem for existing code)
4.6.39 | 101210 | evolution of 4.6.38
4.6.40 | 010311 | blind fix of design time/background setting for windows 7
4.6.41 | 030311 | eyes open fix for design time/background setting for windows 7
4.6.42 | 120511 | fix to crop incoming index at 0 rather than -1 on router name grid
4.6.43 | 190511 | GREAT TWONK YATES - fix to script helper param ordering to get around issue with decodeBNCSString not liking quoted string at the start. Effect was getDev not working properly
4.6.44 | 170111 | crash fix for null string when doing textGet
4.6.45 | 060812 | removes background settings from bncs_control, bncs_enum and bncs_smart_string
4.6.46 | 251012 | removes double button=released notification for enum button
4.6.47 | 301012 | adds httpGet/httpPut support for scripts
4.6.48 | 131112 | allows setting of button name on enum popup (hor or ver) type. This also changes the title of the popup (it always did)
4.6.49 | 151112 | support for controlCreate in script helper
4.6.50 | 191112 | connects output of newly created widget using controlCreate command
4.6.51 | 201112 | allows null-string for panelpopup ui - it'll create a blank dialog and allow you to size it. This is useful when using createControl to dynamically create buttons
4.6.52 | 201112 | rich text option for all button types that use bncs_contro_funcs (most of 'em)
4.6.53 | 221112 | optimisation of rich text - now adheres to smart/fixed size options, copes with text values that contains CR/LF adds long overdue pixmap browser adds text editor field with pretty print
4.6.54 | 261112 | rich text docs & integration changes line edit design time representation to be a bncs_control/label so that it doesn't grab the keyboard shortcuts no longer forces penwidth to be a stylesheet item (I've never understood why it should have been forced to be) listbox reset now resets the colours back (previously undo didn't work 'cause reset only reset the internal states not the listbox control) bncs_instance now uses cached version of instances rather than loading instances each time uiHost now integrated with this control not separately - this allows use of instance browser etc.
4.6.55 | 141212 | fixes to lineedit/keyboard control following design-time changes of 4.6.54
4.6.56 | 141212 | small fix to start with null timer in smart string - fixes issue with non-registration of some controls
4.6.57 | 240113 | oops....sets the path to controls when they're created using the recent controlCreate script function
4.6.58 | 010213 | adds disabled startup option adds svg support to basic button....except svg support in Qt3 isn't very good - some work required in the editor but working
4.6.59 | 010213 | dynamic allocation of timer (not every button needs to allocate one)
4.6.60 | 040213 | tarts editors for svg path/data
4.6.61 | 040213 | bum bum bum bum bum....now forces screen update when svg data is changed on the fly (as runtime parameter)
4.6.62 | 040213 | SVG's don't fill the entire paint area when drawn 1:1 even when all the dimensions are correct and it should fit. Scale by 1.099 and it all just about fits nicely. This is horrid....but it appears to be a limitation of the SVG engine
4.6.63 | 070213 | UI host now passes parent events to the dialog so that incoming [parent] connections can work
4.6.64 | 120213 | UI host crash fix (passing values to non-existent child ui)
4.6.65 | 120213 | Removes some debug messages from paint (not carrying much of interest)
4.6.66 | 120213 | UI host now has scale feature. Fixes too for notify signal (duplicate signals in script_loader and bncs_runtime
4.6.67 | 150213 | fix to keyboard control and bncs_lineedit to allow text align to work tiny tiny fix to function signatures in scriptloader for void param lists
4.6.68 | 150213 | keyboard control better behaved when it comes to enabling/disabling excluded characters
4.6.69 | 080313 | adds panel initialise command
4.6.70 | 080313 | changes hierachy of layout managers so that the layout appears correctly when a panelInit is done - for some reason doing this gives bum information to the QVBoxLayout and it appears the wrong size when a later panelShow is done
4.6.71 | 110313 | QString handling of null string compared with zero length string didn't actually equal each other (bizarre, given that bncs_string had a similar issue)
4.6.72 | 110313 | Crashfix to writing null enum values
4.6.73 | 140313 | Allows bncs_ui files as well as dll for popup smart button editors
4.6.74 | 150313 | fix to allow dynamic setting of the enable state for enum controls so that it still displays the current state
4.6.75 | 180613 | removes duplicate notify(QString&) signals from ss_base and individual smart buttons (not that it seemed to be upsetting much) connects bncs_script_loader "panels" signal so that connections on panels may still use the [parent] so there is no difference in the way a .bncs_ui panel or scripted panel works fix to 4.6.70 relating to layout managers in enum buttons - the layout was being set before having items in it
4.6.76 | 210613 | fix to smart string - wasn't persisting the instance properly
4.6.77 | 240613 | adds 9 additional pixmaps per button topLeft, top, topRight, left, right, bottomLeft, bottom, bottomRight, centre. These are additional pixmaps to the exising single but are not scaled, and fixed position. changes lock pixmap on dest control to be (new) pixmap.topRight - it may be worth making this configurable
4.6.78 | 270613 | minor fix to bncs_listview editor and converts docs to html
4.6.79 | 090713 | change to bncs_rtrDestGrid so that lock is false on null string or start of value==0 but anything else (such as when there is a long lock-reason) is true
4.6.80 | 060913 | bncs_range_updown repeat time may (or may not) have fired - uninitialised timer identifier range will now accept comma "clarified" values e.g. 1,234,567.89 is translated to 1234567.89 range now uses the decimal places sent dp_sent to use as the format for the value changed/return value from a range control
4.6.81 | 090913 | listbox now uses ensureCurrentVisible() with next/previous selections
4.6.82 | 130913 | uninitialised timer in bncs_enum_list - causing occasional non-appearance of control
4.6.83 | 300913 | splits info/gpi/router poll/query commands into separate things - previously IP and IQ (etc) would both have just polled...I'm not sure why....
4.6.84 | 041013 | clears smart string value when retargeting bncs_instance control now has full bncs_control editor to set style, states, notifications etc fixes "next" in bncs_enum button mode when one of the states is null
4.6.85 | 071013 | now allows return of "name" parameter from smart button types
4.6.86 | 241013 | Fix to popup navigate destination so that popup controls the lifetime of the child widget properly and that the signals off it don't get connected multiple times
4.6.87 | 041113 | Now doesn't display the "extra" 9 fixed position pixmaps when the button is disabled Clears the pixmap values on the dest button when changing pages.
4.6.88 | 1113 | Added internal diagnostics for timers, timer allocation, caption setting. All left disabled. No features available to the user.
4.6.89 | 141113 | enum now clears current state if not targeted and won't target when only instance is valid but parameter not.
4.6.90 | 211113 | Changes to diagnostics for timers, timer allocation, caption setting. All left disabled. No features available to the user.
4.6.91 | 021213 | Deferred startup system modified so acts through common class. Currently still done based on timers. Could put actions in-line.
4.6.92 | 041213 | Deferred startup now does the actual start-up call in-line at the end of dcw's block of captions, rather than off a timer. Outside dcw it'll still use the timer.
4.6.93 | 091213 | small fix to ensure that the router name grid updates correctly when targeted with device rather than instance
4.6.94 | 091213 | fix to fader control to update the range on the fader when incoming min/max changes
4.6.95 | 091213 | fix to fader control to not use the multiplier internally
4.6.96 | 161213 | Changes to ensure that upsidedown faders (min>max) work properly for faders
4.6.97 | 140114 | ...my head hurts...schoolboy trig and now shrink to fit works with angled text - both vertical and arbitrary angles (vertical more efficient than arbitrary)
4.6.98 | 230114 | font scaling now tidied up...what a mucking fuddle - there are now two different mechanisms to scale fonts dependent on whether it's shrink to fit or the scripty dialog scaling
4.6.99 | 230114 | tiddly tiny fix to ensure that the multipler can't be zero (possibility of divide by zero error)
4.6.100 | 270114 | bncs_ie will now optionally send title change events
4.6.101 | 270114 | adds textGet handling for bncs_ie title param and fixes multiple notification (as incoming from the control itself) so that only changes are sent out
4.6.102 | 070214 | careless problem introduced reworking DLL-controls comms to allow for spaces - upshot was that PR didn't work
4.6.103 | 100214 | makes navigateCanExecute do something sensible (based entirely on the filename rather than applications.xml config)
4.6.104 | 140314 | Fixes a bug in ListView where using the Reset command adds an extra connection each time. So mulitple connections are send out on each click, Also added some new documentation for ListView
4.6.105 | 070414 | Removes deferredstartup debug messages removes unnecessary stop and restart of timer
4.6.106 | 110414 | slip of the fingers adding in conditional debug messages
4.6.107 | 130514 | fix to update the state of the default button if the default value changes
4.6.108 | 080714 | Changes caption enable to send a message to the host rather than try and force it ourselves
4.6.109 | 050914 | changes script loader path to use explicit path with DLL extention - it was found that Win2008r2 didn't work with inferred paths
4.6.110 | 201014 | More robust version of CM command handling
4.6.111 | 171114 | removes "browse" option on the base button as this feature was never implemented and was just obscuring the rest of the code fixes very long-standing (and rather obscure) crash when changing to enum-Line presentation when no previous style had been set doublepush had an odd interaction with the press notification - i.e. it didn't work if press was enabled. In fixing this I also incorporated a feature request so that press/release/focus settings can be used in all combinations alongside double push I do not know when you'd want double push with press AND release notifications (which only occur on the second operation within the timeout) but it now works as you might expect from the settings
4.6.112 | 181114 | cascades the edge masking code to the right place for different button presentations
4.6.113 | 271114 | Fixes long-standing bug with the enum control where the mask sometimes isn't calculated on change of style
4.6.114 | 281114 | The quest to lose 28 pixels
4.6.115 | 220115 | adds a one pixel downwards offset to centre aligned text to look subjectively better
4.6.116 | 220115 | adds multi-column mode to the listbox (H or V) also single column row mode (bit specialised that one...but whilst I was there....)
4.6.117 | 230115 | minor enhancements to make the listbox less frisky in moving about when updating items
4.6.118 | 270115 | the name grid control was not marking the state as dirty when assigning new sources - this was preventing it from saving
4.6.119 | 270115 | careless handling of = when setting params on a component meant you couldn't have = within the value itself
4.6.120 | 290115 | ui host now reads connection information of its configured UI so that you can populate a script like table with those senders/receivers that contain the [parent] keyword
4.6.121 | 160215 | bncs_listbox: force a recalculation of the layout when changing sort mode (otherwise you end upwith cropped names)
4.6.122 | 050315 | fix to loading of docs for deprecated bncs_sourceGrid
4.6.123 | 130315 | rtr dest grid & rtr name grid now supports databases 10-65535
4.6.124 | 240315 | clock now has leading zero (helps indicated it's a 24 hour clock)
4.6.125 | 270415 | clock widget now only writes to the display on change of value not every tick
4.6.126 | 180515 | navigateCanAdjust marginally more discerning in that it'll check that the typehandler entry exists AND has length - still undecided whether this should emulate the full functionality of panelman in checking what it'll load not just that it'll attempt to load
4.6.127 | 190515 | fix to notify function where undefined sub0 values would set the notify flag
4.6.128 | 190515 | light optimisation to 4.6.127
4.6.129 | 110615 | fix to long standing (end 2013) bug where enum controls did not de-register with previous targeting so if you changed slot only you were ok, but a change of device meant double revertives
4.6.130 | 180615 | Reinstates calculation of size for shrinking text when a control is resized (I'm not sure why it had been commented out...)
4.6.131 | 230615 | enum buttons now will dynamically update their display if state list is dynamically adjusted
4.6.132 | 250815 | Silly typo on database selector drop-downs (Soure instead of Source)
4.6.133 | 270815 | Correction for typo keyboard label: Keyborad --> Keyboard. Correction for "theitems" --> "the items". Correction of " is is " --> " is " in rtr Dest, Name & source grid doc.
4.6.134 | 040915 | Allows enableCaption (in script helper) to set a title
4.6.135 | 100915 | ui host now will not allow the picking up of the instance parameter within the param list of the control - only its own instance param
4.6.136 | 191015 | changes home-brew function for file-management for toolkit one to chase-down eroneous file-copying feature (range control "big" bitmaps)
4.6.137 | 021115 | allows editing of instance attribute in the instance viewer control
4.6.138 | 121115 | bncs_range control now uses the same tooltip code as enum
4.6.139 | 280616 | fixes manual mapping of dest grid (strangely nearly working, but only partially implemented)
4.6.140 | 140716 | won't try and label buttons when there is no router number set even if there is manual configuration
4.6.141 | 060916 | will use lua_loader for smart button popups
4.6.142 | 151216 | removes stylesheet editor from the stylesheet browser. This is faulty, incomplete, illconcieved and unlikely to be fixed/finished.
4.6.143 | 310117 | not a fix at all - but adds exception handling to deleting the Internet Explorer activeX control as it was found it's really quite flaky with anything that runs Javascript
4.6.144 | 020217 | adds control destroy to the script control
4.6.145 | 070217 | dynamic creation and destruction of controls now keeps the id list up to date
4.6.146 | 010317 | Adds textgets for the rtrNameGrid so scripted panels can use the information, rows and columns were the most needed additions.
4.6.147 | 180417 | now uses border size for popups from the stylesheet (if it supports that pixelmetric)
4.6.148 | 210417 | adjusts columns to fit on the script loader dialog
4.6.149 | 250417 | Doesn't redraw on updating text and colours when there is no change in the value
4.6.150 | 270417 | Change along similar lines to 4.6.149 but for font settings so that no change of font doesn't delete the old one or force an unnecessary update
4.6.151 | 170517 | "Can't load script" message now uses text colour from style so that it should always be different from the background
4.6.152 | 290817 | Small fix so that selecting item by index in a listbox is allowed if that item has focus (bz. bug 2882)
4.6.153 | 110917 | Dev. version (superseded)
4.6.154 | 190917 | fix to "disabled initially" and whilst I'm in there in the same bit of code, adds "hidden initially" feature to base control
4.6.155 | 200917 | Restores the way popups used to work when used with smart buttons to position at top-left of parent rather than at cursor position. This allows external triggers to do the popup regardless of where the cursor is
4.6.156 | 210917 | Enum, range and smart-string button now accept "button=pressed" to externally action the configured button event (e.g. popping up a custom script)
4.6.157 | 220917 | Fix to 4.6.155 because script components need to pop up at cursor position as otherwise it pops top left of the script not top left of the button that initiated the popup
4.6.158 | 121017 | BNCS_V6 IPC for 32k devices, 65k slots etc.
4.6.159 | 271017 | adds notify.lostfocus=true so that auto-repeat buttons don't end up spewing data
4.6.160 | 030118 | bugfix to 4.6.159
4.6.161 | 250118 | Fix to browse scripts to ignore all folders that start with a period
4.6.162 | 190218 | Sense of return value for a panel show when the targeting param was used was inexplicably inverted. This version corrects
4.6.163 | 010318 | bncs_listview "ensureItemVisible" call was technically correct, but by preference the item should be centred
4.6.164 | 060318 | Trivial fix to bncs_destgrid to ensure that button notifications are only connected once (previously would give double notifications)
4.6.165 | 230418 | Wow, one of those "how long has it been like that" moments. range control now able to use GPI and ROUTER devices from the device type to match string and enum types
4.6.166 | 240418 | Removes extended range support