] [=;…]` | Open a display in a frame (with parameters) |
| `navigate back/forward/up/home/history ` | Frame history (`$` in the tooltip = target name) |
| `reload ` / `reload all` | Reload displays (keeps the session in the HTML display) |
| `zoom ` | 0 = fit, 1 = 100 %, 10–1000 = relative % |
| `toggleSize fullScreen [n]` / `toggleSize x,y,WxH` | Full screen / given size and back |
| `print frame|frameWithSetup|preview|setup|selectFrame` | Printing (desktop only) |
| `login`, `logout`, `exit`, `toolbar`, `statusline`, `playback record|view`, `shell client|server `, `lookfeel ` | |
| `help` | Listed in the readme but fails in R1.03: *Unrecognized keyword* (ISS-062) — do not use |
The installed status line also uses item types `displayName`, `playbackIndicator` and
`dateTime`, which the readme does not list (ISS-042).
- `` blocks translate labels per locale (key = item name + `.label`).
## 3. Opening displays in frames and layouts
| From | How |
|---|---|
| Button / component (Edit Module, *Actions* sheet → *Open display*) | Display, **Layout** (empty = current window), **Frame**, parameters; stored as `` with ``, ``, ``, `` |
| Menu / toolbar | `navigate to ` (current window only) |
| Login | User profile *Layout* and *Initial display* (Engineering Module, Authorization > Users); empty layout = `default` (from docs; not changed on the test system) |
| HTML display | URL `?d=&l=` |
| Script on a component | *Execute command* with `ACTION `, e.g. `ACTION toggleSize 50,50,710x520` |
Verified behaviour (desktop): a button with layout `CIENG_Operator` opened a **second window**
(1600 × 900, own menu/toolbar/frames); buttons without layout opened their display in the main
frame of the current window; **Back** returned. A button with layout `popup` opened a separate
window: always on top, only a close button, sized to the display (`fitFrames`), and minimised
together with the window that opened it — use popups only for small displays (faceplates,
setpoint dialogs).
## 4. Typical project layouts
- **Operator main window**: navigation frame + main frame `default` (+ tabs) + alarm banner,
project menu/toolbar, assigned to operators via the user profile *Layout*.
- **Kiosk / control-room screen**: `drawBorder="false"`, `alwaysOnTop="true"`,
`initialSize="screenSize"`, `closingAllowed="false"`, `minimizingAllowed="false"`.
`toggleSize fullScreen` covers the taskbar only when `alwaysOnTop="true"` (verified: with
`false` the title bar and taskbar stay).
- **Popups / faceplates**: small layout with one frame `default`, `initialSize="fitFrames"`,
`initialPosition="atCursor"`, `alwaysOnTop="true"`, `maximumOpen` > 1 for several faceplates
(factory: `popup`, `FixedPopup`, `ResizablePopup`, `faceplate`, `tuningpanel`, `Setpoint`,
`SelectMode`).
- **Several screens**: one layout per screen with `initialPosition="pixelsScreen2"` /
`centreScreen2`, or the dual-screen pattern of IM 36K10R30 §1.10.
## 5. HTML display differences
The browser window is the main layout (its size and window options are ignored); other layouts
open as windows inside the page; print, look-and-feel and the debug key are not supported; pick
the layout with `&l=`. Verified: `?d=CIENG_Tank&l=CIENG_Operator` showed the sample menu,
toolbar, navigation frame and banner.
## 6. Parameter reference: desktop vs web (tested 2026-10-02)
Test method: a marked test block in `Layouts.xml`; each layout started on the desktop with
`jwuipoi.cmd -layout ` (start options from the installed client: `-layout`, `-display`,
`-host`, `-port`, `-secure`, `-hide`, `-timeout`, `-readtimeout`, `-ssotoken`) and in the browser
with `?d=&l=`. Desktop windows checked with window captures, web pages in the
browser and in the web client code. "n/a" = the browser window is the main layout.
### 6.1 Frames
| Parameter | Desktop | Web |
|---|---|---|
| `rows`/`cols` in pixels | exact | exact |
| `fitDisplay` | fits the display | edge panel only; default 200 px (left/right) or 50 px (top) |
| `n*` fractions (`2*,1*`) | **not honoured** (sizes follow the displays, e.g. 800:88 px) | every `n*` becomes the *main* panel; two `n*` overwrite each other, only the last display shows |
| Divisions per frame set | any | first = top/left, last = bottom/right, `n*` = main; more do not fit |
| Nested `frame-set` | anywhere, several | **always placed in the parent's main panel**; two nested sets, or one in an edge position, break the page (stays on *Loading…*) |
| Frame `zoom` (`fitDisplay`, `stretchDisplay`, `n%`) | applied | ignored (always 100 %) |
| `borderStyle` | drawn | only with `drawBorder="true"`; every value except `none` becomes a 1 px line |
| `stackSize` | honoured | honoured; default when missing = 1 |
| `zoomingAllowed="false"` | `zoom` commands on that frame do nothing | zoom not supported at all |
| `scrollingAllowed` | scrollbars when the display is larger | panel overflow auto/hidden |
| `initialDisplay` of frame `default` | replaced by the user profile's initial display | replaced by `?d=` |
### 6.2 Window (``)
| Parameter | Desktop | Web |
|---|---|---|
| `title` | `$` → display **title** | `$` → display title or name; **missing `title` → tab shows "undefined"** and a script error |
| `icon` | title bar and taskbar | favicon |
| `drawBorder` | default **false** = no title bar and no border | frame borders only |
| `sizingAllowed`, `minimizingAllowed` | default **false** | n/a |
| `closingAllowed="false"` | close button still shown, closing is ignored; closing the last window ends the client | n/a |
| `alwaysOnTop` | topmost window | n/a |
| `initialPosition` `pixels`, `pixelsScreen1`, `centreScreen` | exact | n/a |
| `initialSize` `pixels` / `fitFrames` / `screenSize` / `desktopSize` | exact / wraps the display / whole screen incl. taskbar (same on one screen) | n/a |
| Defaults (nothing set) | borderless, at 0,0, sized to the display | works |
| `lookAndFeel` (Metal) | applied; adds a second (Metal) title bar inside the window | n/a |
### 6.3 Menu, toolbars, status line
| Item | Desktop | Web |
|---|---|---|
| `type="sub"` / `check` / `radio` | work (radio bullet, check tick) | **not shown** (items dropped) |
| `accelerator` | F11 works; F5 / ALT keys not confirmed | — |
| `$` in `tooltip` | resolved | resolved |
| Toolbar `position="top"` | shown | shown |
| Toolbar `left` / `right` | shown | **not shown** |
| Toolbar `bottom` | not seen (open) | not shown |
| Toolbar item `combo`, `editableCombo`, `dropdownList` | shown | shown |
| Status line, all 8 types | shown | shown |
### 6.4 Commands
| Command | Desktop | Web |
|---|---|---|
| `navigate to [zoom] [params]` | works, zoom applied | works, **zoom ignored** |
| `navigate back/forward/home/up/history/backList/forwardList` | work | work (`home` is added to the history) |
| `reload ` / `reload all` | work | work |
| `zoom ` (0, 1, 2, 0.5, 150) | work | not supported |
| `toggleSize fullScreen [n]` | work area (taskbar stays unless `alwaysOnTop`); again = back | browser full screen; screen number ignored |
| `toggleSize x,y,WxH` | works; again = back | not possible in a browser tab |
| `toolbar` (check) | hides/shows **all** toolbars; `toolbar false` behaves as a toggle too | no effect |
| `statusline` (check) | hides/shows (a piece of the date field stays painted) | no effect |
| `print …` | preview / setup dialogs open | disabled |
| `login` / `logout` / `exit` | — / — / closes | login disabled; logout, exit work |
| `shell client ` | runs on the client (Notepad opened) | sent to the server; `shell client ACTION ` runs a layout command |
| `lookfeel ` | — | no effect |
| `playback record` (check) / `view` | — | not supported (view disabled) |
| `help` | **error** *Unrecognized keyword* | — |
"—" = not checked yet.
## Verified (CI-Eng-Sample, 2026-10-01)
`layout.ps1` add / remove / add (removal identical to the original, backup kept); Operator
Interface restart required before the layout was found; desktop and web windows as described
above; F11 (`toggleSize fullScreen`) worked within the taskbar limits; after restarting the
Operator Interface the main window still used the factory `default` layout (Admin profile
unchanged).