bncs_vis_ed

BNCS Visual Editor

Overview

The BNCS Visual Editor bncs_vis_ed.exe is proprietary application specifically for development of BNCS user interfaces (UIs).

It's a UI editor so you can create and arrange buttons, labels and other visual elements but it's also configuration aware. You can build an entire BNCS application by dragging pre-configured UI components using configuration information defined about the "shape" of the system.

The BNCS Visual Editor is designed to work with BNCS UI files which have the (unimaginative) file extension ".bncs_ui".

Application Guide
Creating New Dialog Files
Connecting UI Components
Maintaining the toolbox button list
Manual Size/Position Dialog
Manual Settings Dialog
Import Settings Dialog

General Information

File Paths

"bncs_ui" files

Without going into a long-winded explanation - ".bncs_ui" files should always exist within the "usual project structure" for this type of system. They also must always be in a panels sub-folder

For example:

c:\bncs\mySystem\panels\

This consists of:

Element | Notes
root of one or more systems | c:\bncs
current system | mySystem
fixed sub-directory | panels

UI files always sit within their own sub-directory off \panels\ - this is so that you can keep all the things that you need with that UI in one place.

So, our first ".bncs_ui" file might be called:

c:\bncs\mySystem\panels\first\first.bncs_ui

It's significant that the file has the same name as the folder - this is how it's loaded at run-time - by folder name not filename. This is important if we decide later that a simple ".bncs_ui" is not enough for our application and we must create a script (C++ built DLL) perhaps with multiple ".bncs_ui" files.

UI Resources

UI resources such as other UIs, or bitmaps, scripts etc. then usually get loaded relative to the panels directory. This is so that you don't hard-code absolute paths into your application, but also to keep paths short.

For example the path to an image on disk might be:

c:\bncs\mySystem\panels\myPanel\background.png

but from a ".bncs_ui" file in the myPanel UI folder we can simply refer to it as (relative path):

background.png

If it's a shared image we can have a shared images location on disk:

c:\bncs\mySystem\panels\images\logo.png

and we refer to this like this:

\images\logo.png

Note: absolute paths aren't a good thing and won't work!

Button Names

Button names must be unique and the editor will not allow two of the same name.

If you copy/paste buttons, to aid in laying out buttons of similar type where each button has a numeric suffix the editor will take the suffix of the "source" button, increment it and make this the name of the pasted button - subject to it still being unique (it'll keep incrementing until it finds a unique name).

Occasionally of course you may want more than 10 (or even 100) buttons so for ease of use in panel scripts and when connecting buttons please ensure that the button identifiers have leading zeros. For example:

Source Button Name | Pasted/Cloned Button Name
source_1 | source_2
source_001 | source_002

Version Control

Version | Date | Author | Comments
1.0 | 27/02/2017 | David Yates | Conversion to markdown minor revisions
Build: bncs_4.7.5 5800 a1b48197a Atos|Syntel © 2021


appGuide

Operations

Create, Load Save a Panel

Create a new panel

Select File|New, or Ctrl+N, or the New File tool icon newFileIcon
The New File… dialog appears (Figure 1: New File dialog).

newFile
Figure 1: New File dialog

Select the icon corresponding to the size of dialog appropriate for your system.

Select OK. (Or double-click on the icon for the size of dialog you want).

An empty dialog background of the correct size will appear.

Save a Panel to a File

Select File|Save, or Ctrl+S, or the Save tool icon saveIcon. The panel will be saved to its associated file.

If no file has been selected, you’ll get the standard Windows ‘Save As’ dialog. Navigate to where you want to save the file and enter the name you want to use.

Save As is also available in the File menu to resave a panel into a file with a different name.

Load an Existing Panel File.

Select File|Open, or Ctrl+O, or the Open tool icon openIcon. The standard Windows Open dialog will appear. Navigate to the file you want to load. Single-click it and select OK or press Return or double-click it.

Recent Files

Up to ten of the most recently edited panel files are available from the File|Recent Files menu.

Basic Panel Editing

Add a New Control to your Panel

The available controls appear in the Configuration / Widgets window, which normally appears to the right of the dialog (Figure 2: Configuration / Widgets Window).
This is a dockable window so may be undocked from there and moved elsewhere.

widgets
Figure 2: Configuration / Widgets Window

Select the control you want and drag it onto your panel. When the first one is positioned there is usually a delay before it appears while the library loads. Subsequent controls usually appear immediately.
This window has three separate tabs, Buttons, By Name and By Type. The Buttons tab contains all the available fundamental control types – Button, Range, Enum, Script etc . The By Name and By Type tabs allow access to smart controls for device parameters, listed linearly (By Name) or in a hierarchy of instance within device type (By Type). In these latter two tabs the instance is selected in the upper pane and the parameters then appear in the lower pane, from where they may be dragged onto the dialog, where they will appear as the appropriate control type with all necessary parameters already set appropriately.

Basic Control Editing.

When a control is selected, eight blue spots, called ‘Edit Handles’, will appear on it (Figure 3: Selected Button showing Edit Handles). These may be used to resize the control, or move any of its corners.

edithandles
Figure 3: Selected Button showing Edit Handles

To move the whole control, click anywhere on it apart from on one of the handles and drag it to where you want it. The cursor keys will also move the selected control(s)

Multiple Selection

The mouse may be used to select multiple controls.
Either :
Press the left mouse button somewhere on the dialog background and hold the button down while dragging the selection box over all the controls you want to select.
Or:
Hold down the Shift key while selecting individual controls with the mouse. This is the way to select controls that are not adjacent so can’t be selected using the normal rectangular selection method using the mouse.
Selection is by touch, not containment. Any button that is wholly or partly within the selection box will be selected.

Editing Properties of Controls

To change anything other than the size or position of the control, you need its property editor dialog. To get this, either :
• Double click on the control
• Right-click on the control to get the context menu. Select ‘Properties’.
• ALT+Enter

Each different type of control has its own properties dialog. Each of these has a number of tabbed pages allowing you to edit all the control’s properties.
There are too many to display them all here, but a few are shown (Figure 4: Properties dialog for Generic Control, Figure 5: Properties dialog for Enum control)

props
Figure 4: Properties dialog for Generic Control

enumprops
Figure 5: Properties dialog for Enum control

The Control ID Viewer

The Control ID Viewer shows a list of all the controls on the current dialog.

You can activate it at View|View ID List or using the tool icon controlkd.

This shows the ID of each control on the panel and allows you to see, by selecting them, which is which.. It also allows the IDs to be changed, by double-clicking on them.

It is the only way of selecting individual items that are not visible because they are off-screen.
It is not possible to select multiple items using the ID Viewer.

Widget Count

The Control ID Viewer shows all your controls so you can count the number of controls from there.
Use Tools|Widget Count widgetcount or Ctrl+W to get a count of all objects and widgets on the Panel.

Common Editing Tools

A selection of editing tools is available, similar to those commonly found in Word processors and other applications.

Delete

Delete the selected control(s) using Edit|Delete, or the Delete key or delete tool icon, or the Delete entry in the context menu.

Cut and Paste

Standard Cut, Paste and Copy functionality is available, from the Edit menu, and from the toolbar and the usual keystrokes.

  • Cut - cut Remove selected controls from the dialog and copy to clipboard.
  • Copy - copy Copy selected controls from dialog to clipboard.
  • Paste - paste Paste the contents of the clipboard to the dialog.
    See Appendix A – The Clipboard for more information on the use of the clipboard.

Duplicate

To duplicate a control or a number of controls, select the control(s) you wish to duplicate and then use Layout|Duplicate, the tool icon dup , or the Duplicate entry in the context menu.

Undo

The program maintains a list of recent actions performed. You can undo to the previous state using Edit|Undo, or Ctrl+Z or the undo tool icon.

More Advanced Panel Editing – Alignment and Spacing tools

In order to produce smart looking panels, there are a number of tools to help get controls to line up with one another and to space them evenly on the panel.

The Grid

There is a grid to help with alignment of controls. If it is turned on you will see dots on the dialog background. The grid is spaced at ten pixel intervals. The interval is not changeable.
To turn it on or off, use Tools|Toggle Grid grid or Ctrl+G.
Note that all the spacing tools use the grid so you may find that attempting to stack some buttons leaves them irregularly spaced if the grid is turned on.

Alignment Tools – Left, right, top, bottom.

These tools allow you to align the edges of the controls, and also to adjust controls to have similar sizes.
Select more than one control.

Note that if you use the shift key to select individual controls, the Align tools will align the buttons to the edge of the first one selected, which will not necessarily be the one in the direction being aligned to. In this case you will notice that the first item selected has blue edit handles and all the others have black handles.

Select one of the Alignment tools, either in the Layout menu, the tool icons left right top bottom, or the Align submenu of the context menu.
All the controls will move to align their edges as appropriate for the tool selected. Controls will be moved, their sizes will not be affected.
For example, if you select Align Left, all but the leftmost control (or the first one selected) will move to the left so that their left edges are in line.

If we start with three buttons on a dialog, as in Figure 6: Three buttons, selected.

three
Figure 6: Three buttons, selected

Align Right will result as shown in Figure 7: Aligned Right.

alright
Figure 7: Aligned Right

Align Top will result as shown in Figure 8: Aligned Top

altop
Figure 8: Aligned Top

Align Bottom will result as shown in Figure 9: Aligned Bottom.

albottom
Figure 9: Aligned Bottom

Align Left will result as shown in Figure 10: Aligned Left.

alleft
Figure 10: Aligned Left

Size Matching Tools – H and V, Smallest and Largest

These tools allow you to resize controls so that they have the same size along the selected axis.
Select more than one control.

Select one of the Size tools, either in the Layout menu, the tool icons hsmall hbig vsmall vbig, or the Size submenu of the context menu.

All the controls will be resized as appropriate for the tool selected. Their sizes will be changed but their positions (the position of the top-left corner) will not be changed.
For example, if you select Size H Smallest, all but the narrowest control (measured horizontally) will be resized to be the size of the narrowest.

To show these tools in action we’ll start with some differently-sized buttons, shown in Figure 11: Two Buttons, selected.

twobut
Figure 11: Two Buttons, selected

Size H Smallest will result in the layout shown in Figure 12: Size H Smallest.

hsmall
Figure 12: Size H Smallest

Size H Largest will result in the layout shown in Figure 13: Size H Largest

hlarge
Figure 13: Size H Largest

Size V Smallest will result in the layout shown in Figure 14: Size V Smallest.

vsmall
Figure 14: Size V Smallest

Size V Largest will result in the layout shown in Figure 15: Size V Largest.

vlarge
Figure 15: Size V Largest

Centre controls in dialog – Horizontally or Vertically

These tools will position one or more controls centrally on the dialog.
Select one of the Centre tools from the Layout menu, the tool icons hdist vdist ,or the Align submenu of the context menu.
If several controls are selected for this action, they will be centred as a group, not individually.
Starting with the same three buttons as in Figure 6: Three buttons, selected, Centre Horizontally in Dialog will result in the layout shown in Figure 16: Centred Horizontally. Note the buttons retain their absolute spatial relationships with one-another, but that the whole group has been moved to be centred left to right.

hcemtre
Figure 16: Centred Horizontally

Starting with the same three buttons as in Figure 6: Three buttons, selected, Centre Vertically in Dialog will result in the layout shown in Figure 17: Centred Vertically. This time the buttons have been moved down so they are centred top to bottom.

vcemtre
Figure 17: Centred Vertically

Distribute – Horizontally or Vertically

The distribute tools will take a number of controls and distribute their positions along one axis.
Select one of the distribute tools from the Layout menu, the tool icons hdist vdist ,or the Align submenu of the context menu.

The controls at the ends of the selected axis keep their position and the others will get spaced along the axis. They maintain their order relative to each other but their distances from each other will normally change.
Starting with a slightly different set of three buttons as Figure 18: Three Buttons, unevenly spaced.

uneven
Figure 18: Three Buttons, unevenly spaced.

Distribute Horizontally will result in the layout shown in Figure 19: Distributed Horizontally. Note that only the horizontal position of the middle (on the horizontal axis) button has been changed.

hdist
Figure 19: Distributed Horizontally

Distribute Vertically will result in the layout shown in Figure 20: Distributed Vertically. Note that only the vertical position of the middle (on the vertical axis) button has been changed.

vdist
Figure 20: Distributed Vertically

Note that the order in which the controls are positioned depends on the initial origins of the controls, not their centres or any other property. Starting with three buttons of different widths, as shown in Figure 21: Three Buttons, different widths.

3x3
Figure 21: Three Buttons, different widths.

If we select Distribute Horizontally, the result is as in Figure 22: Three Buttons, different widths, Distributed Horizontally

3x3dist
Figure 22: Three Buttons, different widths, Distributed Horizontally
Note that the lower button is now second along the horizontal axis as, even though its centre was further to the right than that of the middle one, its origin is what counts here and that was to the left.

Stack to an Edge

The stack tools will take a number of controls and distribute their positions along one axis.
The Stack action differs from Distribute in that the controls are all moved so they are evenly spaced based on their sizes and all but the control nearest the relevant edge will be moved. Distribute will leave the controls at both ends of the axis and space all the others evenly in-between. Stack will only leave one at one end of the axis and will move all the others to a specific absolute spacing.

Starting with the set of three buttons as Figure 18: Three Buttons, unevenly spaced.
Stack Left will result in the layout shown in Figure 23: Stacked Left.

stackleft
Figure 23: Stacked Left

Stack Right will result in the layout shown in Figure 24: Stack Right.

stackright
Figure 24: Stack Right

Stack Top will result in the layout shown in Figure 25: Stack Top.

stacktop
Figure 25: Stack Top

Stack Bottom will result in the layout shown in Figure 26: Stack Bottom.

stackbottom
Figure 26: Stack Bottom

Note that as for the Distribute tool, the order in which the controls are positioned depends on the initial origins of the controls, not their centres or any other property.

Testing

To test your panel use Edit|Test or the tool icon test.

This runs your panel in PanelMan.
The panel needs to have been saved in a suitable directory before this can be done; you can’t just create a panel in the Visual Editor and test it without saving it.

Getting at the Other Bits

In order to write a script for your panel you need to run Microsoft Visual Studio 6. This may be done by navigating to the appropriate folder using Windows Explorer but tools are also available within the Visual Editor to do this.

Explorer

Select Tools|Open in Explorer or the tool icon explorer. A new window will open showing the folder containing your panel.
If you haven’t saved the panel, the Save As dialog will appear, inviting you to do so.

Visual Studio

To open your panel’s script in Visual Studio, or to get Visual Studio to create a script project, select Tools|Open/Create Visual Studio Proj, or select the tool icon visstudio.

If there is no project you’ll be prompted whether you want to create one.

Once the project exists, Visual Studio will open it.

Appendix A – The Clipboard

The clipboard used by cut and paste operations within this application is the standard Windows clipboard and is hence shared with other programs.
When the Visual Editor copies information to the clipboard it does so using the XML representation of the data. The structure and contents of this are beyond the scope of this document.
Because of this sharing it is possible to copy controls into another application, for example a text editor in order to diagnose problems (or simply out of curiosity ….). Conversely, with sufficient care and knowledge it is possible to copy into the Visual Editor information prepared outside it.

Appendix B - Configuration

The configuration of available controls will normally be done during the early stages of your project and will rarely be changed. Indeed it is likely that this configuration will not even change between projects.
Configuration of available controls is done in the config/vised/buttons.xml file in your project.
The file contains an XML description of which controls are available and in which libraries they are found. The structure and contents of this are beyond the scope of this document.

Version Control

Version | Date | Author | Comments
0.1 | 06/11/2006 | Richard Kerry | First Version
0.2 | 10/11/2006 | Richard Kerry | First publication.
0.3 | 19/12/2011 | Andrew Prince | New format
1.0 | 27/02/2017 | David Yates | Conversion to markdown minor revisions


buttons

Maintaining Toolbox Button List

The buttons toolbox in the visual editor takes its configuration from

%CC_ROOT%\%CC_SYSTEM%\config\vised\buttons.xml

This is a simple XML (which is actually similar to a normal ".bncs_ui" dialog description file).

Example

Three entries are shown:

<?xml version="1.0" ?>
<buttons>
    <control name="Button" class="bncs_control" w="100" h="40" >
        <setting value="style=button" />
    </control>
    <control name="Script" class="bncs_script_loader" />
    <control class="bncs_script_loader" name="adjust" w="80" h="40">
        <setting value="scriptname=/components/adjust" />
    </control>
</buttons>

Note that there are two entries for the same class. In this case one is an unconfigured script class - the other is the same class but given a particular context to do something useful.

The <control> entries should be fairly familar to anyone who's viewed the ".bncs_ui" file format - these are almost the same. Note however there is no x or y attribute to set the location of the control - this is set by the location of the cursor when the control is dropped. If you really want to drop a control at a specified location (sometimes you want to) then set the x and y values.

Width and height ("w" and "h") can be specified but is not compulsory. A default of 100 x 100 is used.

The name tag is the value used under the icon - it is freeform text.

The class tag must be exactly as the custom controls define it - usually with a "bncs_" prefix.

Each entry can have as many <setting value="....."/> tags as it likes - in the same way as a normal ".bncs_ui" control.

An entry in this list can be given a bitmap if you give it the same name as the displayed name - this should be a PNG file.


connections

UI Component Connections

Overview

The V4.x toolkit allows for many different UI components to be combined together to produce a solution. Often these components wrap up most if not all of the functionality required and all that's needed is to join together the output of one component to the input of another.

"UI Connections" gives the UI designer the option to make some connections between components without having to write any C++ script.

These connections are stored in the same XML file in which the UI layout is stored - the ".bncs_ui" file.

Parameter Passing

The connections engine makes more sense (excuses more things!) if you understand how parameter passing works in V4.x.

It's a simple text based system of parameter/value pairs - remembering this when dealing with connections is useful.

Sometimes it's not enough to simply pass incoming notification to outgoing command and we need to reformat the values as we go - you can see how this works below.

Parameters are passed as a single string "encoded" as command/value pairs.

<command>=<value>

e.g.

colour=red

Occasionally a single param alone is not enough of a description. It can be further qualified by a sub-command

<command>.<sub command>=<value>

e.g.

colour.background=red

You can have a number of sub commands (up to 32).

So for the previous example:

<command> is "colour"
<sub0> is "background"
<sub1> is "top"
<value> is "red"

Wildcard Matching

The UI connection rules allow for wildcard matching. This is similar to the wildcard matching used in Windows file system.

Character | Description | Example | Matches
* | match one or more characters in a string | dest_* | matches dest_1 dest_2 dest_100 but not destGrid
? | match exactly one character | dest_? | matches dest_1 dest_2 but not dest_10

Parameters that are supplied without wildcards are matched exactly.

Parameter rewriting

The "event" command/value sent from one component may not be in exactly the right format to be received by another. It's necessary therefore to allow for rewriting the notification.

This is done by simple text substitution. The following aliases are allowed:

Param | Description
[id] | The id of the control/component that generated this event
[id.<param>] | Get a value from the id of the control/component that generated the event. e.g. to get the text value from the sending control you'd put: [id.text] Note: not all controls/components support retrieval of each and every named parameter - explicit code is required for this to work and many don't explicitly implement it
["<buttonid>".<param>] | Get a value from a named control/component. e.g. to get the text value from a control called "button" you'd put: ["button".text] Note that the button id must be contained within quotes - this distinguishes it from other keywords or text replacement values Note: not all controls/components support retrieval of each and every named parameter - explicit code is required for this to work and many don't explicitly implement it
[intid] | The (first) integer part of the id - the connections engine tries to convert the id of the control to an integer removing characters from the beginning of the id until it finds a non-zero value. So....an id of "dest_123" will return a value of 123. An id of "dest_group456_123" will return 456.
[command] | The command part of the incoming event. For a notification of "button.1=released" this value is "button"
[subn] | Where n is a value 0-31. This is the sub-command parts of the incoming event For a notification of "button.1=released" the sub0 value is "1".
[value] | The value part of the incoming event For a notification of "button.1=released" this value is "released".

Configuring Connections

There is a edit time configuration dialog which is used to add/edit connections. This is accessed from the Visual Editor menus and toolbar.

There are 5 parameters required for all connections:

Param | Mandatory? | Wildcards? | Rewriting? | Notes
sender | Yes | Yes |  | What button ids to take events from - this may be explicitly specified controls or a pattern matched on a wildcard. This value can be [parent] which can be used when this UI is hosted without a DLL script. This value can be [startup] and this event is fired when the UI is created
receiver | Yes | Yes | Yes | What button ids to send commands to - this may be explicitly specified controls or a pattern matched on a wildcard. The usual rewriting rules apply to this parameter - so you can have a control called: source_1 matched by sender value of source_* and send the command string to a receiver of dest_[intid] which gets rewritten as dest_1 So in this case source_1 is connected to only dest_1, and the same rule connects source_999 to dest_999 This value can be [parent] in which case the notification is sent to the host of this UI. This is only valid for when a UI is hosted directly not when part of a DLL solution (i.e. in bncs_v45_host.exe or in the uiHost custom control)
event | Yes | Yes |  | What the event is that should be forwarded. This should be of the format <command>=<value> and should contain an equals sign. If a single * is specified in the connections dialog it is rewritten to be =
command | Yes | Yes...but...(see note) | Yes | What the command string is sent This can be a single * wildcard if you want to send whatever the incoming notification was verbatim.
name |  |  |  | Not absolutely required to work but useful as aide memoir as well as appearing in the connections debugger to show which connection was used

Other command options

In addition to sending a command to the destination controls the following options are also available:

Command | Description
[show] | Show the control
[hide] | Hide the control
[enable] | Set the control to the enabled state
[disable] | Set the control to the disabled state

This is the only entry that's permitted in the command field and no text is sent to the control

Editing Connections

Additional options are available for context sensitive editing of connections.

Right clicking on a control gives 3 connections options:

Menu Item | Description
Show what connects here | Opens the connections dialog with rows highlighted where the id of the control matches the receiver column
Show what we're connected to | Opens the connections dialog with rows highlighted where the id of the control matches the sender column
Connect to> | Opens a menu item with a list of the controls available on this dialog. Selecting a control opens the connections dialog with sender and receiver filled in but you still need to specify event and command

Examples

For the following connection (as taken from the ".bncs_ui" file):

<connection sender="sourcePage" receiver="sourceGrid" event="*=released" command="page=[sub0]" name="source paging"/>
  • This only connects notifications from a single control "sourcePage" to feed to another single control "sourceGrid" (i.e. there are no wildcards used).
  • The event is any that has a <value> of "released" - note that you need to specify the command part of the string as a wildcard. The value used here is entirely dependent upon the control being connected.
  • The command then is part hard-coded string and part text substitution. For an incoming notification of "button.5=pressed" the value "page=5" is sent. The value used here is entirely dependent upon the controls being used.
<connection sender="dest_*" receiver="dest_*" event="*=*" command="[command]=[value]" name="dest selection"/>
  • This connects controls that match "dest_*" back to themselves (this would be used where a control is part of a group and selecting one control needs to deselect all the others)
  • Any event will be forwarded - note you have to supply this in the format =
  • The command sent is then reconstituted <command>=<value>

Debugging

Connection activity may be debugged at runtime by right clicking on the dialog and selecting menu option. This option is only available where there are some connections configured (for efficiency "signals" of controls of each dialog are not automatically connected to the connections engine)

Right click debugging options at runtime are only available if the CC_DEVELOPER environment variable is set to true (use the bncs_inst_env.exe tool to set this).

Selecting Sender or Receiver cells within the connections dialog will select all those controls that match. Where wildcards are used multiple controls may be selected.

When to stop using connections

UI connections are really useful for joining together high level UI components but aren't the answer to everything.

Dave's handy tip is to stop using connections if you start having to create separate connections for each state of an event not just wiring the event up to the command of something else.

A Word Of Caution - Reserved Characters

In using wildcards and text replacement this mechanism isn't very good if the values you need to pass contain things like asterisks or square brackets in the data itself.

Developers note

The connections editor has certain limitations..... This editor is based on the Qt table which is OK but not fantastic...this makes this editor occasionally tedious to use....sorry.


File->New

Templates

The list of dialog templates in the File->New dialog is set by the files contained in the following subfolder:

config\vised\templates

so if your system root is c:\bncs then you'll find 'em here:

c:\bncs\config\vised\templates

These are just entirely normal BNCS UI files - if you need some more templates just copy a file to this folder and give it an appropriate name.

Note: The visual editor won't let you edit them direct from this location....

If there is a png file of the same name as the ".bncs_ui" file then this will be loaded as the icon. If not then a default is displayed.


Import Settings

Description

This is a means of importing settings from an external data source to configure controls on a UI.

This is intended for when you have very many controls that you have to target at different things - whilst you can manually go round opening the properties editor, changing the settings and then opening the next editor this can be tedious and error prone.

For example - take this trivial example:

The first column is the ID of the control we want to set, then there are three separate settings for each control for text, and text/background colour.

You simply copy this to the Windows clipboard - it gets copied from Excel as tab delimited text.

On selecting the Import Settings this dialog appears - it's a preview of the data that's been loaded:

This shows us the controls that we are importing data for and the settings that's going to be applied to each one.

Hitting OK will write the settings displayed to the controls listed and then leave the controls affected selected on the dialog.

If there is no control of a particular name then a message is displayed to that effect.

Note: The values sent are entirely free-form - this means that it's entirely up to the controls whether they understand the commands being sent. No error is shown if a control didn't understand a command - though it's usual to see a message in the debug output (using dbgview.exe for example).

The param=value pairs are all defined separately for each control - go and look in the documentation for that control for help.


Keyboard Shortcuts

Group | Key | Event
File | Ctrl + N | New File
File | Ctrl + O | Open File
File | F5 Reload | Current File
File | Ctrl + F4 | Close File
File | Ctrl + S | Save File
Edit | Alt + C | Edit Connections
Edit | Ctrl + Z | Undo
Edit | Ctrl + Y | Redo
Edit | Del | Delete
Edit | Ctrl + X | Cut
Edit | Ctrl + C | Copy
Edit | Ctrl + V | Paste
Edit | Ctrl + Enter | Edit Properties
Edit | Ctrl + D | Dialog Properties
Edit | Ctrl + T | Test Dialog
Layout | Ctrl + J | Align Left
Layout | Ctrl + K | Align Right
Layout | Ctrl + I | Align Top
Layout | Ctrl + M | Align Bottom
Layout | Ctrl + F | Pull Forwards
Layout | Ctrl + B | Push Backwards
Tools | Ctrl + W | Widget Count
Tools | Ctrl + P | Manual Size/Position
Tools | Ctrl + H | Manual Settings
Tools | Ctrl + G | Toggle Grid
Tools | Ctrl + I | Import Settings from clipboard


Manual Settings

Description

This is a means of manually entering settings to apply to all the selected controls.

Here's an example:

Of the controls selected they'll all receive each of the settings entered into the dialog.

Note: The values sent are entirely free-form - this means that it's entirely up to the controls whether they understand the commands being sent.


manualSizePosition

Manual Size/Position Dialog

Description

This is a means of manually entering size or position for one or more controls.

Here's an example:

Where settings are consistent between all the controls selected then those values are displayed in the size/position dialog. Where settings are different <multi> is displayed to indicate this. In the example above the controls are all the same size so the values 100/40 are shown for this. They're also aligned on the left edge - so the X value is the same, so the value is shown. As they're in a column the Y position is different for each control so this dialog can only show <multi>.

So in this example if you wanted to set the size of these controls to 30 pixels high then you'd enter 30 in the H value and hit OK - this then resizes just the height of the controls.

The result is:

The height, and X Y position of the controls is not changed.

In this example there are no shared values - size and position is different on each control:

So to line them up neatly at the top, whilst making them a consistent size we would overwrite the entries for Y, W and H:

and this would be the result: