Breadcrumb — version history
The breadcrumb bar: where the user is, and a way back to any level in one click. Introduced in 3.0.
4.0 — October 2026 #
New #
of_add_children(as_keys, as_child_keys[], as_texts[] {, as_images[]})adds a whole row of sibling branches in one call: a folder with 30,000 sub-folders no longer takes more than 20 seconds to open its menu.of_has(as_keys)accepts an address (or a bare key carried by a single segment) and searches among the segments.- 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.
OVERFLOW_SCROLL: the mouse wheel slides the strip, reversed in right-to-left reading.- The chevron that opens a menu and the "…" say to a screen reader that they open a menu, and whether it is open.
n_pbt_utils.of_dir_folders(as_dir, ref as_names[])lists the sub-folders of a folder as File Explorer shows them, sorted, in one pass, without changing the application's current folder;n_pbt_utils.of_dir_has_subfolders(as_dir, ab_include_hidden)can also count hidden and system folders and junctions.[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.
Fixed #
- Reading a handle at a deep address (
of_item("a/b/c").is_text) reads that segment; it read the last level only, and came back empty when the key was repeated. ii_max_visible = 1no longer folds away the current location.- Width-driven folding folds the middle first; the current location is only shortened as a last resort (down to one letter and "…"), then the first segment, and nothing overflows the bar any more, even a very narrow one.
OVERFLOW_SHRINKno longer caps every label at 12 characters when there is room: the middle gives way first, the first segment and the current location last.- Folding is measured again when the content changes width (separator, a chevron that appears or disappears, a segment enabled or disabled).
- A disabled segment is inert as a whole: its chevron no longer opens and it no longer accepts a drop.
- Enter on a segment clicks only that segment (it also pressed the window's default button); the focus stays on the same segment across a redraw.
- A redraw during typing no longer throws away the text being typed in the path field.
- The chevron no longer stays lit after an empty answer to
ue_children_needed, and a menu answer that arrives after the trail was rebuilt is ignored. - A file drop (
ib_allow_drop) raisesue_drop_filesalone (no moreue_drag_leavebefore it), with full paths beyond 260 characters;of_resetremoves the drop target (ib_allow_dropback tofalse). - A right-click on a segment raises only
ue_item_rclicked, no longer a second, component-level event. n_pbt_utils.of_dir_has_subfoldersno longer counts hidden or system folders and junctions by default (a trail would show a chevron with nothing visible behind it), and reads long paths.- The colours and tooltips of a segment follow it when segments are inserted or removed, leave with it when it is removed, and are shared by its bare key and its address.
- In right-to-left reading, native menus hang from the right edge of their title and cascades open to the left (
Leftopens,Rightcloses). - 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. - 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.- The application accent (
PBT_SetDefaultThemeAccent) survives a change of theme, is followed as long as the component has no accent of its own, and repaints everything derived from it (hover, pressed, selections); Windows high contrast is supported. - 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.
Behavior changes #
of_path()returns the address of the current location, whole — a hidden segment stays in it, and so do the first segments cut in the demo version:of_truncate(of_path())lands right, and the path field starts from the same address.of_keys_at(n)returns the segment's address (it returned the bare key).of_truncate,of_remove_item,of_clear_children,of_remove_childon an unknown address or an ambiguous bare key,of_add_childunder a missing segment or on a branch already taken, andof_add_item/of_insert_itemon an address that would land elsewhere return-5(they returned0and did nothing).- A handle kept after
of_clear,of_remove_item,of_truncate,of_clear_childrenorof_remove_childis released (IsValid()returnsfalse); after anof_insert_itemin the middle of the trail, ask again for the handles of the segments that follow. of_edit()withoutib_editablereturns-4(it returned0and nothing opened).- The path field: leaving it without changing anything, or switching to another application while typing, no longer raises
ue_path_entered(the text typed is kept); leaving it for another control of the application with a modified text validates it, like Enter. of_countreturns alongandof_keys_attakes alongrank.- See the 3 → 4 migration guide, sections 11.3, 11.12 and 11.41.
- 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 #
- First release: segments by key or address (
of_add_item,of_insert_item,of_remove_item,of_clear), andof_truncate, the gesture a breadcrumb exists for. A click reports (ue_item_clickedwith the full address) without cutting the trail: the application decides. - Sibling menus:
of_add_childputs branches under a segment, whose separator becomes a chevron;ue_child_clickedreturns the chosen branch's address, ready to go back intoof_add_item. Branch handlen_pbt_breadcrumb_child(of_child): text, icon, enabled, visible. - Branches on demand: a segment marked
ib_has_childrenshows its chevron with nothing behind it; opening it raisesue_children_needed, where the branches are added, and the menu opens when the event returns. - Typing the path:
ib_editable(click on the empty part of the bar,F2orof_edit()), field pre-filled with the address,ue_path_enteredon Enter;ii_edit_skipkeeps the first N segments out of the field and puts them back in front of the text typed. - Long paths:
is_overflow_mode(OVERFLOW_COLLAPSEinto a "…" menu,OVERFLOW_SCROLLfollowing the current location,OVERFLOW_SHRINK) andii_max_visible;is_separatorflips by itself in right-to-left languages. - Files dropped from File Explorer on a segment (
ib_allow_drop,ue_drop_files(as_keys, as_files[])), the targeted segment lighting up during the drag. - The bar reports the height it needs (
ue_auto_height); a segment with no text shows its icon alone; segment handlen_pbt_breadcrumb_item(of_item): text, icon, enabled, visible,ib_has_children. - Keyboard: arrows between segments, Down arrow opens the branches.
n_pbt_utils.of_dir_has_subfolders(as_dir)answers "at least one sub-folder?" without listing the folder, to mark a segment without reading it.ue_script_error: a script error in the page reaches PowerBuilder with its message instead of being lost.of_set_property,of_get_propertyandof_component_name: drive a property by its name (settings screen, saved configuration).of_count,of_keys_atandof_has: what the component holds can be asked, at every level.