IconView and ListView are complete IApplication implementations. Applications derive from them directly.
IconView
IconView suits a small number of items with XBM icons. A concrete derived class supplies its configuration:
1 | class ToolMenu final : public IconView { |
IconItemList is etl::vector<IconItem, MAX_ICONVIEW_ITEMS>. title, bitmap, and userData are non-owning pointers whose targets cover the IconView lifetime. AppLauncher is a ready-made use of IconView.
IconView computes its three visible slots, selector, scrolling, and progress bar from getDisplayWidth() and getDisplayHeight() using integer layout. The same layout adapts to display sizes beyond 128x64. The status text is composed through the shared fixed-buffer integer writer.
ListView
ListView suits settings, Boolean switches, integer values, and nested submenus. It is abstract; a derived class must implement onLoad() and onSave():
1 | class SettingsView final : public ListView { |
1 | bool soundEnabled = true; |
A ListItem may point to a submenu through nextList and nextListLength. PIXELUI_MAX_LISTVIEW_DEPTH limits the history stack. Every ListItem, submenu, title string, accessory target, and callback capture must outlive the ListView. toggle() lets ListView update a Boolean value directly. check() displays a Boolean value while the item callback owns its mutation. value() formats numeric state through PixelUIValue::Binding.
ListView keeps at most one active switch Animation, identified by its stable ListItem*. Inactive switch positions come directly from their Boolean values. Equal row numbers in a parent and child menu therefore maintain independent state. Item arrays remain at stable addresses throughout the ListView lifetime.
Long selected titles scroll automatically when the available width is insufficient, and accessories reserve layout space on the right. The array API requires a positive length and stable storage for the array, titles, and accessory targets throughout the ListView lifetime.



