This commit implements Phase 7 of the UIModule, adding advanced features that make the UI system production-ready. ## Phase 7.1 - UIScrollPanel New scrollable container widget with: - Vertical and horizontal scrolling (configurable) - Mouse wheel support with smooth scrolling - Drag-to-scroll functionality (drag content or scrollbar) - Interactive scrollbar with proportional thumb - Automatic content size calculation - Visibility culling for performance - Full styling support (colors, borders, scrollbar) Files added: - modules/UIModule/Widgets/UIScrollPanel.h - modules/UIModule/Widgets/UIScrollPanel.cpp - modules/UIModule/Core/UIContext.h (added mouseWheelDelta) - modules/UIModule/UIModule.cpp (mouse wheel event routing) ## Phase 7.2 - Tooltips Smart tooltip system with: - Hover delay (500ms default) - Automatic positioning with edge avoidance - Semi-transparent background with border - Per-widget tooltip text via JSON - Tooltip property on all UIWidget types - Renders on top of all UI elements Files added: - modules/UIModule/Core/UITooltip.h - modules/UIModule/Core/UITooltip.cpp - modules/UIModule/Core/UIWidget.h (added tooltip property) - modules/UIModule/Core/UITree.cpp (tooltip parsing) ## Tests Added comprehensive visual tests: - test_28_ui_scroll.cpp - ScrollPanel with 35+ items - test_29_ui_advanced.cpp - Tooltips on various widgets - assets/ui/test_scroll.json - ScrollPanel layout - assets/ui/test_tooltips.json - Tooltips layout ## Documentation - docs/UI_MODULE_PHASE7_COMPLETE.md - Complete Phase 7 docs - docs/PROMPT_UI_MODULE_PHASE6.md - Phase 6 & 7 prompt - Updated CMakeLists.txt for new files and tests ## UIModule Status UIModule is now feature-complete with: ✅ 9 widget types (Panel, Label, Button, Image, Slider, Checkbox, ProgressBar, TextInput, ScrollPanel) ✅ Flexible layout system (vertical, horizontal, stack, absolute) ✅ Theme and style system ✅ Complete event system ✅ Tooltips with smart positioning ✅ Hot-reload support ✅ Comprehensive tests (Phases 1-7) 🚀 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
201 lines
5.2 KiB
Markdown
201 lines
5.2 KiB
Markdown
# UIModule Phase 6 - Progress Report
|
|
|
|
## Date
|
|
2025-11-28
|
|
|
|
## Status: Phase 6 Core Implementation Complete ✅
|
|
|
|
### Completed Tasks
|
|
|
|
#### 1. UITextInput Widget (✅ Complete)
|
|
**Files Created**:
|
|
- `modules/UIModule/Widgets/UITextInput.h` - Header avec toutes les fonctionnalités
|
|
- `modules/UIModule/Widgets/UITextInput.cpp` - Implémentation complète
|
|
|
|
**Features Implemented**:
|
|
- ✅ Text input field with cursor
|
|
- ✅ Cursor blinking animation (500ms interval)
|
|
- ✅ Keyboard input handling:
|
|
- Printable characters insertion
|
|
- Backspace/Delete
|
|
- Arrow keys (Left/Right)
|
|
- Home/End
|
|
- Enter (submit)
|
|
- ✅ Input filtering:
|
|
- None (default)
|
|
- Alphanumeric
|
|
- Numeric (with `-` support)
|
|
- Float (numbers + `.` + `-`)
|
|
- NoSpaces
|
|
- ✅ Text properties:
|
|
- Max length
|
|
- Placeholder text
|
|
- Password mode (masking with `*`)
|
|
- ✅ Horizontal scroll for long text
|
|
- ✅ Focus states (Normal, Focused, Disabled)
|
|
- ✅ Styling system per state
|
|
|
|
#### 2. Focus Management (✅ Complete)
|
|
**Files Modified**:
|
|
- `modules/UIModule/UIModule.cpp` - Added focus handling
|
|
|
|
**Features**:
|
|
- ✅ Click to focus text input
|
|
- ✅ Focus state tracking in UIContext
|
|
- ✅ Automatic focus loss on previous widget
|
|
- ✅ Keyboard event routing to focused widget
|
|
- ✅ Events published:
|
|
- `ui:focus_gained` → {widgetId}
|
|
- `ui:focus_lost` → {widgetId}
|
|
- `ui:text_changed` → {widgetId, text}
|
|
- `ui:text_submit` → {widgetId, text} (on Enter)
|
|
|
|
#### 3. UITree Factory Registration (✅ Complete)
|
|
**Files Modified**:
|
|
- `modules/UIModule/Core/UITree.cpp` - Added textinput factory
|
|
|
|
**JSON Configuration Support**:
|
|
```json
|
|
{
|
|
"type": "textinput",
|
|
"id": "username_input",
|
|
"text": "",
|
|
"placeholder": "Enter username...",
|
|
"maxLength": 20,
|
|
"filter": "alphanumeric",
|
|
"passwordMode": false,
|
|
"onSubmit": "login:username",
|
|
"style": {
|
|
"bgColor": "0x222222FF",
|
|
"textColor": "0xFFFFFFFF",
|
|
"borderColor": "0x666666FF",
|
|
"focusBorderColor": "0x4488FFFF",
|
|
"fontSize": 16.0
|
|
}
|
|
}
|
|
```
|
|
|
|
### Remaining Tasks for Phase 6 Complete
|
|
|
|
#### High Priority
|
|
1. **Create Test Visual** (`test_27_ui_textinput.cpp`)
|
|
- SDL window setup
|
|
- Load UIModule + BgfxRenderer
|
|
- JSON layout with 4+ text inputs:
|
|
- Normal text input
|
|
- Password input
|
|
- Numeric only
|
|
- Alphanumeric with maxLength
|
|
- Event logging (text_changed, text_submit)
|
|
|
|
2. **Create JSON Layout** (`assets/ui/test_textinput.json`)
|
|
- Vertical layout with multiple inputs
|
|
- Labels for each input
|
|
- Submit button
|
|
|
|
3. **Build & Test**
|
|
```bash
|
|
cmake -DGROVE_BUILD_UI_MODULE=ON -DGROVE_BUILD_BGFX_RENDERER=ON -B build-bgfx
|
|
cmake --build build-bgfx --target UIModule -j4
|
|
cmake --build build-bgfx --target test_27_ui_textinput -j4
|
|
cd build-bgfx/tests
|
|
./test_27_ui_textinput
|
|
```
|
|
|
|
#### Medium Priority
|
|
4. **Add CMake Target**
|
|
- Add test_27_ui_textinput to tests/CMakeLists.txt
|
|
|
|
5. **Documentation**
|
|
- Create `docs/UI_MODULE_PHASE6_COMPLETE.md`
|
|
- Usage examples
|
|
- Event flow diagrams
|
|
|
|
### Known Limitations & TODOs
|
|
|
|
#### Text Input Limitations
|
|
- ❌ No text selection (mouse drag)
|
|
- ❌ No copy/paste (Ctrl+C/V)
|
|
- ❌ No click-to-position cursor
|
|
- ❌ Tab navigation between inputs
|
|
- ❌ Ctrl modifier not tracked in UIContext
|
|
|
|
#### Rendering Limitations
|
|
- ⚠️ Character width is approximated (CHAR_WIDTH = 8.0f)
|
|
- Real solution: Add `measureText()` to UIRenderer
|
|
- ⚠️ Border rendered as simple line
|
|
- Need proper border rendering in UIRenderer
|
|
|
|
#### Cursor Limitations
|
|
- Cursor positioning is approximate
|
|
- No smooth cursor movement animation
|
|
|
|
### Architecture Quality
|
|
|
|
✅ **Follows All Patterns**:
|
|
- Inherits from UIWidget
|
|
- Communication via IIO pub/sub
|
|
- JSON factory registration
|
|
- Hot-reload ready (state in member vars)
|
|
- Style system integration
|
|
|
|
✅ **Code Quality**:
|
|
- Clean separation of concerns
|
|
- Clear method names
|
|
- Documented public API
|
|
- Follows existing widget patterns (UIButton, UISlider)
|
|
|
|
### Performance Notes
|
|
|
|
- Cursor blink: Simple timer, no performance impact
|
|
- Text filtering: O(1) character check
|
|
- Scroll offset: Updated only on cursor move
|
|
- No allocations during typing (string ops reuse capacity)
|
|
|
|
### Next Steps After Phase 6
|
|
|
|
Once test is created and passing:
|
|
|
|
1. **Phase 7.1: UIScrollPanel**
|
|
- Scrollable container
|
|
- Mouse wheel support
|
|
- Scrollbar rendering
|
|
- Content clipping
|
|
|
|
2. **Phase 7.2: Tooltips**
|
|
- Hover delay (~500ms)
|
|
- Smart positioning
|
|
- Style configuration
|
|
|
|
3. **Phase 7.3+: Optional Advanced Features**
|
|
- Animations
|
|
- Data binding
|
|
- Drag & drop
|
|
|
|
### Files Summary
|
|
|
|
**Created** (2 files):
|
|
- `modules/UIModule/Widgets/UITextInput.h`
|
|
- `modules/UIModule/Widgets/UITextInput.cpp`
|
|
|
|
**Modified** (2 files):
|
|
- `modules/UIModule/UIModule.cpp` (added focus + keyboard routing)
|
|
- `modules/UIModule/Core/UITree.cpp` (added textinput factory)
|
|
|
|
**To Create** (2 files):
|
|
- `tests/visual/test_27_ui_textinput.cpp`
|
|
- `assets/ui/test_textinput.json`
|
|
|
|
### Estimated Completion Time
|
|
|
|
- Test creation: 30-60 min
|
|
- Testing & fixes: 30 min
|
|
- Documentation: 30 min
|
|
|
|
**Total Phase 6**: ~2-3 hours remaining
|
|
|
|
---
|
|
|
|
**Author**: Claude Code
|
|
**Session**: 2025-11-28
|