V-Panel/README.md
Eric Smith 57b36798b9 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
2026-05-21 12:47:25 -04:00

49 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# V Panel
A fancy status monitor built with the Godot Engine. V stands for the Roman numeral 5 — a nod to my online handle, **Fifthdread**.
## Overview
V Panel is a visually rich, real-time status monitoring dashboard built entirely in Godot. Designed to be both functional and aesthetically polished, it serves as a showcase for Godot's UI capabilities outside of gaming — custom shaders, smooth animations, reactive layouts, and system integration.
## 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** — 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** — 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 | 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)
- **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
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
TBD