Tiles box — version history
A start-screen style tiles panel: grouped tiles in four sizes, colours, badges, animated tiles, collapsible groups and user reordering. Introduced in 1.0.
4.0 — October 2026 #
New #
- Reordering from the keyboard (with
ib_reorderable = true): Ctrl+Left / Right moves the focused tile within its group (in reading order), Ctrl+Up / Down sends it to the previous or next group; sameue_tile_movedandue_layout_changedas a mouse drag. - The tile size menu opens and works from the keyboard (arrows, Enter, Escape).
- Item colours (
il_back_color,il_text_color,il_accent…) set on a group paint its header (background, title, hover, accent line), never its tiles. of_tile(address).of_count()returns the number of faces added byof_add_live_item.- The Tab key stops once per group (on the last focused tile) and the arrows walk the tiles; arrows follow right-to-left reading order.
[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 #
of_get_layoutalways returned"", so a saved layout could never be restored: it now returns the whole layout (the same text asue_layout_changed), including each tile's size and visibility and each group's visibility.of_set_layoutfinds a tile by its group and key (an entry naming it under another group is ignored instead of moving a same-key tile from elsewhere) and returns-5on a text that is not JSON.of_add_grouprefuses (-5) a key already taken (the existing group used to be renamed);of_add_tile/of_insert_tilerefuse a taken key or a group never added (it used to be created under its key); an empty key or one containing/or|is refused too.of_move_tile,of_remove_tile,of_add_live_itemandof_clear_live_itemsreturn-5on a tile that does not exist,of_remove_groupon a group that does not exist;of_add_live_itemof an empty text returns-5instead of wipingis_live_text.- Setting
of_group(key).is_titleon a group never added no longer creates a visible group that could be neither filled nor removed. of_tile(""), or an address with one or three levels, no longer stops the application ("Array boundary exceeded"): it returns an inert handle that writes nothing and reads back empty.ib_enabled/ib_visibleof a group andii_badge_sizeread back the value in force (they returnedfalse,false,0).- A disabled group is inert: its header no longer collapses it nor raises
ue_group_toggled, and a dragged tile can no longer be dropped into it; a tile disabled or hidden during a drag cancels the drag. - Handles held after
of_remove_tile,of_remove_group,of_clear, or a tile dragged to another group are released; colours and tooltip follow a dragged tile and go away with what is removed (a tile recreated at the same address used to inherit them). - Keyboard focus and the size menu survive updates coming from PowerBuilder (a badge change); an arrow at the edge next to a smaller tile leaves the focus in place instead of jumping sideways; tile labels are read by screen readers without their markup.
- 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 right-click on an item raises only one event, the item's, no longer a second, component-level one.
- 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). - 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.
Behavior changes #
- The second argument of
ue_tile_movedis renamedas_to_key(it carries one key: the destination group), instead ofas_to_keys. il_badge_color:-1means not set (the theme's colour), like every other colour, and0is black; replaceil_badge_color = 0with-1.- Setting a group's
ib_collapsedfrom your code raisesue_group_toggled, like a click on its header (nothing when the group is already in that state). 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. - See the 3 → 4 migration guide, sections 11.3, 11.6 and 11.22.
3.0 — September 2026 #
New #
of_set_property,of_get_propertyandof_component_name: drive a property by its name (settings screen, saved configuration).
Fixed #
- The tiles of a disabled group are no longer reached by the Tab key, and Enter no longer fires them.
- A tile's colours read back through its handle (
il_back_color,il_text_color…) returned0(black), set or not: they now return the colour set, and-1for the theme's. - 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 #
- Positions count from 1:
of_insert_tile,of_move_tileand the index returned byue_tile_moved(2 → 3 migration guide, section 10.1).
2.0 — September 2026 #
New #
- A tile's text and icon can be changed and read back after it is added (
is_title,is_image; an empty image removes the icon). of_count,of_keys_atandof_hastell which groups the box contains, and which tiles each group contains.ue_script_error: a script error in the page reaches PowerBuilder with its message instead of being lost.
Behavior changes #
- Everything is done from the component with a
"group/tile"address:of_add_tile,of_insert_tile,of_move_tile,of_remove_tile,of_tile,of_add_live_item,of_clear_live_items; a group handle no longer adds anything. of_add_groupreturns alongcode instead of the group's handle; get the handle withof_group(as_key).- Events return the address in one argument:
ue_tile_clicked(as_keys),ue_tile_context(as_keys),ue_tile_resized(as_keys, as_size),ue_tile_moved(as_keys, as_to_keys, al_index),ue_group_toggled(as_key, ab_collapsed). - See the 1 → 2 migration guide, section 9.4 (Tiles box).
1.0 — August 2026 #
New #
- Tiles grouped under titled, collapsible groups (
of_add_group,ib_collapsed,ue_group_toggled), in four sizes (small, medium, wide, large), with vertical or horizontal scrolling (is_scroll). - Per tile: own colours, badge (
is_badge,il_badge_color), fixed overlay text (is_live_text) or animated faces (of_add_live_item), greyed and hidden states. - Mouse reordering between groups and resizing from a right-click menu (
ib_reorderable,ue_tile_moved,ue_tile_resized), with a layout to save and restore (of_get_layout,of_set_layout,ue_layout_changed). ue_tile_clickedandue_tile_context(right-click) to react to a tile.