# listhelp -- Shared List/Dropdown Helper Library Shared infrastructure for list and dropdown widgets, built as `listhelp.lib` (DXE3 module). Provides dropdown arrow drawing, item measurement, keyboard navigation, popup rectangle calculation, and popup list painting. Used by: Dropdown, ComboBox, ListBox, ListView, TreeView. ## API Reference ### Dropdown Arrow Glyph ```c void widgetDrawDropdownArrow(DisplayT *d, const BlitOpsT *ops, int32_t centerX, int32_t centerY, uint32_t color); ``` Draws the small downward-pointing triangle glyph used on dropdown buttons. ### Item Measurement ```c int32_t widgetMaxItemLen(const char **items, int32_t count); ``` Scans an array of item strings and returns the length of the longest one. Used to size dropdown popups and list columns to fit their content. ### Keyboard Navigation ```c int32_t widgetNavigateIndex(int32_t key, int32_t current, int32_t count, int32_t pageSize); ``` Maps arrow key presses to index changes for list navigation. Handles Up, Down, Home, End, PageUp, and PageDown. Returns the new selected index, clamped to valid range. ### Popup Rectangle Calculation ```c void widgetDropdownPopupRect(WidgetT *w, const BitmapFontT *font, int32_t contentH, int32_t itemCount, int32_t *popX, int32_t *popY, int32_t *popW, int32_t *popH); ``` Computes the screen rectangle for a dropdown popup overlay. Positions the popup below the widget (or above if there is not enough room below). Limits height to `DROPDOWN_MAX_VISIBLE` items. ### Popup List Painting ```c void widgetPaintPopupList(DisplayT *d, const BlitOpsT *ops, const BitmapFontT *font, const ColorSchemeT *colors, int32_t popX, int32_t popY, int32_t popW, int32_t popH, const char **items, int32_t itemCount, int32_t hoverIdx, int32_t scrollPos); ``` Renders the popup overlay list with items, selection highlight, scroll position, and beveled border. Used by Dropdown and ComboBox for their popup overlays. ### Constants | Name | Value | Description | |------|-------|-------------| | `DROPDOWN_BTN_WIDTH` | 16 | Width of dropdown arrow button area | | `DROPDOWN_MAX_VISIBLE` | 8 | Maximum visible items in popup list | ## Exported Symbols Matches prefixes: `_widgetDraw*`, `_widgetDropdown*`, `_widgetMax*`, `_widgetNavigate*`, `_widgetPaint*`. ## Files | File | Description | |------|-------------| | `listHelp.h` | Public API header | | `listHelp.c` | Complete implementation | | `Makefile` | Builds `bin/libs/listhelp.lib` + dep file | ## Build ``` make # builds bin/libs/listhelp.lib + listhelp.dep make clean # removes objects, library, and dep file ``` Depends on: `libtasks.lib`, `libdvx.lib` (via listhelp.dep).