add plugin settings, per-tile refresh, settings menu, touch-friendly UI

- Plugin settings infrastructure in PluginManager with config/plugin_settings.cfg
  storage, manifest [settings] sections, CRUD API, plugin_setting_changed signal
- Per-tile refresh intervals: 100ms base tick, per-tile update_interval_ms
  metadata, dynamic tween durations clamped to refresh window
- Settings menu (PopupPanel) with General/Plugins/About tabs, plugin
  activation toggles, per-plugin settings cog buttons
- Plugin settings popup (PopupPanel) with dynamic UI from setting definitions
  (SpinBox/CheckBox/LineEdit), auto-save on change
- Modal behavior: exclusive = true on settings windows
- Touch-friendly sizing: enlarged close buttons, cog buttons, controls, spacing
- Red corner close button redesign with rounded corners, hover/pressed states
- Split system_monitor into local_system_monitor (CPU, Memory) and test plugins
- Plugin activation/deactivation with layout preservation
This commit is contained in:
Eric Smith 2026-05-21 12:47:25 -04:00
parent 12b45b2685
commit 57b36798b9
24 changed files with 1065 additions and 183 deletions

View file

@ -9,31 +9,40 @@ V Panel is a visually rich, real-time status monitoring dashboard built entirely
## Features
- **Animated splash screen** — Fullscreen splash with "V" and "Panel" text using Orbitron variable font. Font-size zoom animation via `tween_method` with overshoot (TRANS_BACK), then crossfades to dashboard with no black flash.
- **Responsive grid dashboard**Modules auto-arrange in a dynamic grid that adapts to window size. Drag-and-drop to rearrange.
- **Responsive grid dashboard**Fixed `grid_columns`/`grid_rows` (settable via @export). Square cells, centered layout. Drag-and-drop to rearrange.
- **Variable-size modules** — Modules can span multiple grid cells (1×1, 2×1, 2×2, etc.). Drag edges/corners to resize interactively.
- **Shader-based vial fill** — Each module uses a custom `vial_fill.gdshader` instead of progress bars. Features sum-of-sines water surface with edge-damped meniscus, wave distortion, ripple rings, swirl, HSV colour shifting, top-down lighting, sparkle effects, 3D subsurface scattering, gaussian surface foam, and wave-slope specular highlights.
- **Shader preset system** — Double-click any module to open a popup menu with 7 visual presets (Vivid Vial, Emerald Deep, Lava Flow, Neon Dream, Deep Purple, Rainbow Swirl, Frostbite). Presets control all visual shader parameters.
- **INI-based configuration** — Uses Godot's built-in `ConfigFile` class for human-friendly `.cfg` files. `config/default.cfg` for shipped defaults, `config/config.cfg` for user overrides (gitignored). Background color, module visibility, refresh interval, and theme are configurable.
- **Shader preset system** — Long-press (500ms) or double-click any module to open an action menu with 7 visual presets (Vivid Vial, Emerald Deep, Lava Flow, Neon Dream, Deep Purple, Rainbow Swirl, Frostbite).
- **Plugin architecture** — Tiles are defined as plugins under `plugins/*/plugin.cfg`. Each plugin declares metadata, tile definitions, and optional settings. Tile IDs scoped as `{plugin_id}/{tile_id}`.
- **Plugin settings** — Per-plugin configurable values stored in `config/plugin_settings.cfg`. Settings defined in manifest `[settings]` section (int/float/bool/string types with min/max constraints).
- **Per-tile refresh intervals** — Each tile has its own configurable refresh interval (default 1000ms). Base tick runs at 100ms, tiles refresh only when their interval elapses.
- **Animation scaling** — Tween durations dynamically clamp based on each tile's refresh interval to prevent animation from outlasting the update window.
- **Layout persistence** — Named layouts saved/restored as INI files in `config/layouts/`. Grid dimensions (columns/rows) stored per-layout. Auto-saves on drag/resize.
- **Settings menu** — Modal popup with General, Plugins, and About tabs. Plugin activation toggles, per-plugin settings popups with dynamic UI controls.
- **Plugin activation** — Plugins can be deactivated from Settings → Plugins tab. Deactivation saves layout, removes tiles. Reactivation places tiles at saved positions if cells are free.
- **INI-based configuration** — Uses Godot's built-in `ConfigFile` class for human-friendly `.cfg` files. `config/default.cfg` for shipped defaults, `config/config.cfg` for user overrides (gitignored).
- **Live system monitoring** — Reads CPU usage from `/proc/stat` and memory usage from `/proc/meminfo` on Linux. Extensible module system for adding new collectors.
- **Smooth animations** — All fill level transitions use tweens with cubic easing.
## Modules
| Module | Data Source | Description |
|--------|-------------|-------------|
| CPU | `/proc/stat` | Real-time CPU usage percentage |
| Memory | `/proc/meminfo` | Real-time memory usage percentage |
| Testing | N/A (cycles 0100%) | Shader visual testing with stepped fill levels |
| Module | Plugin | Data Source | Description |
|--------|--------|-------------|-------------|
| CPU | `local_system_monitor` | `/proc/stat` | Real-time CPU usage percentage |
| Memory | `local_system_monitor` | `/proc/meminfo` | Real-time memory usage percentage |
| Testing | `test` | N/A (cycles 0100%) | Shader visual testing with stepped fill levels |
## Controls
- **Drag module** — Click and drag to rearrange modules on the grid
- **Resize module** — Click and drag any edge or corner to resize (snaps to cell grid)
- **Shader presets** — Double-click a module to open the preset selection popup
- **Action menu** — Long-press (500ms hold) or double-click a module to open settings, info, remove, and theme presets
- **Add tile** — Long-press empty grid space to add new tiles
- **Settings** — Press ⚙ in action menu for settings menu with plugin management
## Project Status
Active development. Core framework, drag-and-drop with resize, CPU/memory collectors, shader-based vial fill with 3D surface effects, preset system, animated splash screen with crossfade transition, and INI-based config system are implemented. More system modules (disk, network) are planned.
Version 0.1.0-alpha. Plugin architecture, settings framework, layout persistence, per-tile refresh intervals, and animation scaling are implemented. More system modules (disk, network) are planned.
## License