Radial menu — version history
A radial context menu: commands laid out in a ring around the cursor, picked by their direction rather than by scanning a list. Introduced in 2.0.
4.0 — October 2026 #
New #
of_remove_item(as_keys)removes one branch and its sub-wheel without rebuilding the wheel; it returns-5when no branch lives at that address.- The pointed branch (mouse or keyboard) shows its whole label, above its neighbours: a long label is no longer cut with no way to read it.
- A branch's colours (
il_accent,il_back_color,il_text_color,il_back_color_hover,il_text_color_hover, throughof_item(address)) are drawn by the wheel — band, mark, pointed slice, label — and read back. - A wheel with more than eight branches tightens (smaller icon, one-line label) so labels do not overlap.
- Right-to-left reading: the ring turns the other way and the ← and → arrows swap.
- A custom accent (
il_theme_accentor the application accent) also repaints the pointed branch and its mark.
Fixed #
- A wheel now gives one answer only: a double-click, two quick Enter presses, or a click outside followed by a click on a branch used to pick twice, or to raise
ue_dismissedand thenue_item_selected. of_add_itemrefuses (-5) a parent that does not exist — a typo (exprot/pdf) used to hang the branch on the root —, an address already taken, an empty level (export/,/pdf) and a key containing|or starting with__.of_clearreleases the handles obtained throughof_item;of_key()on an address handle returns the key of the last level.- Keyboard: Esc goes back one level in a sub-wheel (it only closes the wheel at the root), Space and Backspace no longer leak into the application, and the arrows skip disabled branches.
- A branch whose sub-entries are all hidden stays on the wheel, disabled: it used to be picked as if it were a leaf.
- A wheel with no visible branch does not open:
ue_dismissedis raised. - The wheel opens on the cursor's monitor, at that monitor's display scale; a click in a corner of the window, outside the disc, counts as a click outside and goes through to the application.
- A branch removed, cleared, disabled or hidden while the wheel is open can no longer be picked (
ue_dismissed);of_clear,of_remove_itemandof_resetclose an open wheel. - A right-click elsewhere while a wheel is open raises
ue_dismissedfor the old wheel before opening the new one. - A branch with an empty label shows its key instead of an empty slice.
- A colour set through a handle on an address not yet added no longer colours the branch created at that address later, even after
of_clear. - The arrow announcing a sub-wheel is readable in light themes, and a disabled branch's arrow is no longer more visible than an active one's.
- Reading back
il_back_color_hoveroril_text_color_hoverof an item never coloured returns-1(the theme's colour), like the other item colours (it returned0, black). - Enter or Esc pressed in the component, when it does not use them, goes back to the window: the PowerBuilder
DefaultorCancelCommandButtonfires (the key was lost). - A disabled component (
ib_enabled = false) leaves the Tab order; enabled again (or afterof_reset), it takes its place back. - With no language chosen by the application, the component announces English to screen readers (it announced French).
is_theme_style,is_theme_modeandil_theme_accentread back the style and mode shown and the component's own accent (-1when it has none); an unknown or badly written value is ignored instead of leaving the component without a theme, and an axis left empty follows the application's theme.
Behavior changes #
of_itemwith a bare key (of_item("csv")) resolves to the full address of the only branch carrying it (colours included, handle released with its parent); when ambiguous or unknown, the handle changes nothing.of_showreturns along(0, or-2when the component is not created).of_show(-1, -1)opens the wheel at the point (-1, -1), like any negative coordinate; to open it at the cursor, callof_show().of_countreturns alongandof_keys_attakes alongrank.- See the 3 → 4 migration guide, section 11.37.
3.0 — September 2026 #
New #
of_set_property,of_get_propertyandof_component_name: drive a property by its name (settings screen, saved configuration).
Fixed #
- A branch's colours read back through its handle returned
0(black), set or not: they return the colour that was set, and-1for the theme's.
Behavior changes #
of_itemandof_add_itemfollow the full address:of_item("import/csv")orof_add_item("import/csv/x", …)target the branch at that address, no longer the firstcsvbranch found (2 → 3 migration guide, section 10.2).
2.0 — September 2026 #
New #
- First release: a wheel that opens when the right button is released (
of_show()from the right-click of the target control, orof_show(x, y)in screen coordinates) and is picked with a second click; the component itself takes no room in the window. - Branches are described by address (
of_add_item("export/pdf", "PDF"), with an icon + check overload): picking a parent branch replaces the wheel with its sub-wheel, and the hub becomes the way back. ue_item_selected(as_keys)returns the full address of the picked branch;ue_dismissed()says the wheel closed without a choice.ii_max_sectors(3 to 12, 8 by default): extra branches move under a last "More" branch that opens in turn, so none is ever lost.- Branch handle
n_pbt_radialmenu_item(of_item(address)):is_text,ib_enabled,ib_checked(thin arc under the band),ib_visible(the branch leaves the wheel without being deleted). - Keyboard navigation (arrows, Enter or Space to pick, ← to go back) and
of_count,of_keys_at,of_hasto know what the wheel contains. ue_script_error: a script error in the page reaches PowerBuilder with its message instead of being lost.