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> |
||
|---|---|---|
| .. | ||
| architecture | ||
| implementation | ||
| performance_reports | ||
| plans | ||
| coding_guidelines.md | ||
| PLAN_BGFX_RENDERER.md | ||
| PROMPT_UI_MODULE_PHASE6.md | ||
| README.md | ||
| UI_MODULE_PHASE2_COMPLETE.md | ||
| UI_MODULE_PHASE3_COMPLETE.md | ||
| UI_MODULE_PHASE6_PROGRESS.md | ||
| UI_MODULE_PHASE7_COMPLETE.md | ||
| USER_GUIDE.md | ||
GroveEngine Documentation
Overview
GroveEngine is a modular game engine architecture designed for distributed systems and hot-reload development. It provides a clean separation between business logic (modules) and infrastructure (engine, IO, scheduling).
Architecture Documents
Core Systems
-
Data Tree System - Unified config/data/runtime management
- IDataNode/IDataValue/IDataTree interfaces
- JSON backend implementation
- Hot-reload and persistence
- Distributed configuration synchronization
-
Modular Architecture - Module system design
- IModule interface and constraints
- IModuleSystem execution strategies
- Hot-reload workflow
- Claude Code optimization
-
Claude Code Integration - AI development workflow
- Micro-context development
- Hot-reload for rapid iteration
- Module development best practices
Quick Start
Creating a Module
#include <grove/IModule.h>
#include <grove/IDataNode.h>
class TankModule : public IModule {
private:
IIO* m_io;
int m_armor;
double m_speed;
public:
void setConfiguration(const IDataNode& config, IIO* io, ITaskScheduler* scheduler) override {
m_io = io;
m_armor = config.getInt("armor", 100);
m_speed = config.getDouble("speed", 5.0);
}
void process(const IDataNode& input) override {
// Game logic here
// Save state via IIO
auto state = createDataNode({
{"armor", m_armor},
{"speed", m_speed}
});
m_io->publish("save:tank:state", std::move(state));
}
std::unique_ptr<IDataNode> getState() override {
return createDataNode({
{"armor", m_armor},
{"speed", m_speed}
});
}
void setState(const IDataNode& state) override {
m_armor = state.getInt("armor", 100);
m_speed = state.getDouble("speed", 5.0);
}
std::string getType() const override { return "tank"; }
};
Using the Data Tree
#include <grove/DataTreeFactory.h>
// Create tree
auto tree = DataTreeFactory::create("json", "./gamedata");
// Access configuration (read-only)
auto configRoot = tree->getConfigRoot();
auto tankConfig = configRoot->getChild("tanks")->getChild("heavy");
int armor = tankConfig->getInt("armor");
// Access persistent data (read-write)
auto dataRoot = tree->getDataRoot();
auto progress = dataRoot->getChild("campaign")->getChild("progress");
progress->setData(createDataNode({{"level", 5}}));
tree->saveData();
// Hot-reload config
if (tree->reloadIfChanged()) {
// Config changed, refresh modules
}
Key Concepts
Module System
- Modules: 200-300 line business logic units
- IModuleSystem: Execution strategy (Sequential, Threaded, Distributed)
- Hot-reload: Replace modules without restarting
- State preservation: getState/setState for seamless updates
Data Management
- config/: Read-only game configuration (hot-reload, distributed)
- data/: Persistent player data (local saves)
- runtime/: Temporary state (never saved)
Communication
- IIO: Pub/sub messaging between modules
- ITaskScheduler: Delegate heavy computation
- Save pattern: Modules publish "save:*" messages, Engine persists
Distribution
- Coordinator: Master config with hot-reload
- Engines: Local replicas, synchronized config
- Isolation: Each Engine has independent data/
Design Principles
- Interface-based: Work with abstractions (IDataNode, not JsonDataNode)
- Backend-agnostic: Swap implementations without code changes
- Minimal coupling: Modules communicate only via IIO
- Hot-reload first: Development optimized for instant feedback
- Distribution-ready: Config sync, data isolation built-in
Project Status
Implemented ✅
- Complete IDataNode/IDataTree system
- JSON backend (JsonDataValue, JsonDataNode, JsonDataTree)
- Hot-reload for config files
- Save/load for persistent data
- Pattern matching and property queries
- SHA256 hashing for validation
In Progress 🚧
- Coordinator synchronization implementation
- Module system integration with DataTree
- Example modules and tests
Planned 📋
- Binary format backend
- Database backend
- Network synchronization protocol
- Schema validation
- Migration system
Contributing
When adding new features:
- Start with interface definition (.h file)
- Add documentation to this folder
- Implement concrete class
- Update architecture docs
- Write usage examples
Further Reading
Last Updated: 2025-10-28 Engine Version: 1.0.0