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

4.2 KiB
Raw Permalink Blame History

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