Ribbon — version history
The Office-style ribbon: tabs, groups, buttons, menus, galleries, quick access toolbar, application menu, contextual tabs and key tips. Introduced in 1.0.
4.0 — October 2026 #
New #
- Removals under a control, without recreating it:
of_remove_menu_item,of_clear_menu,of_remove_combo_item,of_clear_combo,of_remove_gallery_item,of_remove_app_menu_item,of_remove_contextual_group— a "Recent files" list is updated in place. of_app_menu_item(address): the handle of an application menu entry (is_label,is_image,ib_enabled,ib_checked,ib_visible).- Cascading menus of any depth (
of_add_menu_item,of_add_menu_check), each level driven throughof_menu_item(address);of_add_menu_separatorandof_add_app_menu_separatoraccept the address of an entry: the line goes into its cascade. - Multi-letter key tips (
is_keytip = "FP"), typed one after the other (Backspace goes back one letter); the letter of a control in a collapsed group opens that group's panel. of_open("tab/group")opens the panel of a collapsed group;Downon a drop-down or split button opens its menu.- Item colors (
il_back_color…) andis_tooltipof a tab or a group are applied (a group's tooltip is shown on its title). - These finally read back the displayed value: a quick access toolbar handle,
il_colorof a color picker,ii_visible_items,is_keytipof a tab,il_colorof a contextual group,of_count()of a gallery. - Accessible names for the quick access toolbar buttons and the gallery tiles.
- A custom accent also repaints the checked buttons, the hover and the selections of the ribbon; contrasts reviewed in every theme.
[symbol=name]tag in rich text: eighteen monochrome glyphs that follow the text colour (clock,location,person,calendar,phone,mail,warning…); an unknown name stays as text.- Every native menu of the component (like every native menu of the library) lets the user type the first letters of an entry to jump to it, read through the keyboard layout; a menu with more than 500 entries only draws what is visible.
is_imageof a control (button, split, dropdown, check, colour picker, Quick Access Toolbar button) can be changed at any time and read back.id_min,id_maxandid_stepof a spinner can be changed at any time and read back; the value is brought back into the new range (withoutue_value_changed, likeid_value).
Fixed #
- In the panel of a collapsed group: a button raises
ue_clicked(address)(it wasue_menu_selected("", false)), a menu entry returns its full address, a disabled control no longer responds and a hidden entry no longer appears; a reduced large split button keeps its two parts (the command and the arrow). - An open menu stays open when the application updates the ribbon (another control hidden, a tab renamed, a tile added), and the choice made in it is reported.
- Picking in the list of a combo box raises a single
ue_combo_changed, with the choice (the text typed before used to overwrite it); the field shows the choice at once. EnterandEsctyped in the ribbon (combo box, spin box, focused button) no longer go to the window's default or cancel button;Escin a field restores the text from before typing.- Key tips: a hidden control no longer steals the letter of a visible one; a letter on a disabled control, with the ribbon minimized, closes the ribbon without running anything; the arrows skip disabled controls.
- With two ribbons in the same window,
Altgoes to the one closest to the focus. - A menu entry that carries the key of its control raises
ue_menu_selected, no longerue_clicked;of_menu_item(address)targets the entry the address names, even when a cascade carries the same key;of_ctx_group(k).il_colorcolors the banner and no longer a tab with the same name. as_from_keysofue_gallery_selection_changedis""when no tile was selected; a spin box with a decimal step displays0.3and not0.30000000000000004.of_remove_itemremoves a button of the quick access toolbar;of_clear()raisesue_selection_changed("")when a tab was active.n_pbt_menu2ribbonwrites code that compiles with the current API: adds by address, submenus of any depth, disabled and checked items carried over, a router forue_clicked,ue_toggledandue_menu_selected; a stock image (Save!) is left empty with a comment, a top-level item without a submenu becomes a one-button group.- In right-to-left reading, native menus hang from the right edge of their title and cascades open to the left (
Leftopens,Rightcloses). - Rich text: a closing tag closes its own tag only (
[b]A[i]B[/b]CleavesCin italics only), a]escaped byof_escape_markupright after a tag no longer breaks the formatting around it, and[picture=…]accepts a data URI and a file name containing a comma. - 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). - A decimal property (
id_…) is written and read back correctly whatever the machine's decimal separator. - 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. - A language set by
PBT_SetLanguageapplies from the very next order given to the component: a text of an event raised by that order no longer comes in the old language. - 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.- Typing a character with AltGr in a PowerBuilder field (the euro of a French keyboard, AltGr+E) no longer fires a
Ctrl+Altshortcut of that key, and AltGr pressed alone no longer hands the keyboard to the bar asAltdoes.
Behavior changes #
See the "Migrating from 3.0 to 4.0" guide, sections 11.1 to 11.5 and 11.16.
ib_veto_gallerydefaults tofalse: if you scriptedue_gallery_selection_changing, setib_veto_gallery = true.- An order of your code raises the same event as the gesture:
of_select_tabraisesue_selection_changed,ib_minimizedraisesue_minimized,of_select_gallery_itemraisesue_gallery_selection_changed— and, with the question turned on, asksue_gallery_selection_changingtoo and returns-4on a refusal. Nothing is raised when nothing changes. - The add methods return
-5for a key already taken, a key that contains|or starts with__, an unknown parent or a parent of another kind, and-2when the component is not created;of_select_tab(unknown or hidden tab),of_remove_*,of_select_gallery_itemon an unknown address andof_openon a quick access button return-5. - A removal or
of_clearfrees the handles of what goes away (IsValid()returnsfalse): ask for them again withof_tab,of_group,of_item,of_menu_item. - Rewriting
is_app_buttonrenames the button without emptying its menu;is_app_button = ""removes the button and its menu (without a label, the caption follows the language). - The key of a combo box choice is its label:
of_keys_atreturns"home/font/cb/Arial". - The keys produced by
n_pbt_menu2ribbonare theClassNameof each menu item (m_file/g1/m_open). of_countreturns alongandof_keys_attakes alongrank.- Rich text: a markup image on a network share (
[picture=\\server\share\x.png]) is no longer shown: go throughof_icon(), which embeds it.
3.0 — September 2026 #
New #
- The mouse wheel over the ribbon moves from one tab to the next, as in Office (without wrapping around; a combo box, a spin box or a gallery keep their own scrolling).
of_set_property,of_get_propertyandof_component_name: drive a property by its name (settings screen, saved configuration).
Fixed #
- Hover states stay readable in Office 2007, light and dark (arrows of drop-down buttons, pressed or open states).
- Group, control and menu entry handles are freed when the ribbon is destroyed and on its
of_reset(they stayed in memory and pointed to old content). - A color read back (
il_color, item colors) returns the color that was set (it returned0). - Rich text: a
[word]that is not a tag is shown as typed (report[final].pdf) instead of disappearing with the rest of the text.
Behavior changes #
See the "Migrating from 2.0 to 3.0" guide.
of_insert_tabcounts positions from 1.- An entry placed in a submenu returns its full address:
ue_menu_selectedreturns"home/clip/paste/more/pdf",ue_app_menu_selectedreturns"export/pdf";of_add_app_menu_itemaccepts a multi-level parent.
2.0 — September 2026 #
New #
ib_visibleon every menu entry: hiding is not disabling, the entry leaves the menu, shortcut included, and keeps its key.is_titleon a tab and a group (readable and writable);is_labelandis_imageon a menu entry;of_is_separator,of_is_header,of_is_checkabletell what an entry is.of_count,of_keys_atandof_hasat every level: tabs, groups, controls, entries.- The tooltip of an item reads back.
ue_script_error: a script error in the page reaches PowerBuilder with its message instead of being lost.
Fixed #
ib_checked/ib_enabledread back on a menu entry returned the state of the control carrying the menu.- The icon of a disabled button is grayed in compact mode; disabled buttons stay readable in Office 2007.
- A Windows path, or a text containing a quote, received in an event arrives intact (backslashes are no longer doubled, the text is no longer cut at the quote).
Behavior changes #
See the "Migrating from 1.0 to 2.0" guide, Ribbon section.
- The API is reshaped: an item is reached by its address (
"home/clipboard/paste", up to"home/clipboard/paste/special"for an entry), everything is built from the component (of_add_group("tab/group", …),of_add_button("tab/group/id", …)…) and the add methods return a code (long) instead of a handle; the handles (of_tab,of_group,of_item,of_menu_item,of_ctx_group) only carry properties. of_select_gallery_item(address)andof_open(address)move from the handle to the component; the cascade overload ofof_add_app_menu_itemis gone in favor of an address ("file/recent").- Events return the address in one argument:
ue_clicked(as_keys),ue_toggled(as_keys, ab_checked),ue_menu_selected(as_keys, ab_checked),ue_combo_changed(as_keys, as_text),ue_value_changed,ue_color_changed,ue_launcher(as_keys),ue_gallery_selection_changed(as_from_keys, as_keys)…
1.0 — August 2026 #
New #
- Tabs and groups, tabs inserted at a position, colored contextual tabs and groups,
of_select_tab/of_selected_key,ue_selection_changed. - Controls: large and small buttons, split and drop-down buttons, toggles, check boxes, combo boxes (editable or not), spin boxes, color pickers, tile galleries (choice cancellable through
ue_gallery_selection_changing), separators; menus with cascades, checkable entries, headers and separators. - Quick access toolbar and application menu (
is_app_button,ue_app_button,ue_app_menu_selected), with submenus. - Group launcher (
ue_launcher), collapsible ribbon (ib_minimized, chevron, double-click on a tab,ue_minimized). - Adaptive layout: groups collapse into a button that opens a panel when the window is narrow.
- Alt key tips (
is_keytip,ue_keytips), automatic height (ue_auto_height,ue_size_changed), simple and rich tooltips, colors per item and per state, Office, Fluent and Metro themes.