zcatgui/src/panels/panels.zig
reugenio 75613ec23f refactor: Rename DataManager to ChangeNotifier in panels
- Rename data_manager.zig to change_notifier.zig
- Update exports in panels.zig
- Clarifies that ChangeNotifier is for panel communication,
  not application data management (which apps implement separately)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 19:30:09 +01:00

81 lines
3.4 KiB
Zig

//! Panels - Lego-style composable panel system
//!
//! This module provides:
//! - AutonomousPanel: Self-contained UI component
//! - Composite patterns: Vertical, Horizontal, Split, Tab, Grid
//! - ChangeNotifier: Observer pattern for panel communication
//! - Detail: Components for detail/edit panels (state machine, semaphore, buttons)
//!
//! Architecture based on Simifactu's Lego Panels system:
//! - Panels are autonomous (own state, UI, logic)
//! - Panels are reusable across windows
//! - Windows compose panels (not inheritance)
//! - Communication via ChangeNotifier (observer pattern)
const std = @import("std");
// =============================================================================
// Module imports
// =============================================================================
pub const panel = @import("panel.zig");
pub const composite = @import("composite.zig");
pub const change_notifier = @import("change_notifier.zig");
pub const detail = @import("detail/detail.zig");
// =============================================================================
// Panel types
// =============================================================================
pub const AutonomousPanel = panel.AutonomousPanel;
pub const PanelType = panel.PanelType;
pub const PanelState = panel.PanelState;
pub const BuildFn = panel.BuildFn;
pub const RefreshFn = panel.RefreshFn;
pub const DestroyFn = panel.DestroyFn;
pub const DataChangeFn = panel.DataChangeFn;
pub const createPanel = panel.createPanel;
// =============================================================================
// Composite types
// =============================================================================
pub const VerticalComposite = composite.VerticalComposite;
pub const HorizontalComposite = composite.HorizontalComposite;
pub const SplitComposite = composite.SplitComposite;
pub const SplitState = composite.SplitState;
pub const TabComposite = composite.TabComposite;
pub const TabState = composite.TabState;
pub const GridComposite = composite.GridComposite;
// =============================================================================
// ChangeNotifier types (for panel-to-panel communication)
// =============================================================================
pub const ChangeNotifier = change_notifier.ChangeNotifier;
pub const DataChange = change_notifier.DataChange;
pub const ChangeType = change_notifier.ChangeType;
pub const Observer = change_notifier.Observer;
pub const ObserverCallback = change_notifier.ObserverCallback;
pub const getChangeNotifier = change_notifier.getChangeNotifier;
pub const setChangeNotifier = change_notifier.setChangeNotifier;
// =============================================================================
// Detail Panel types (for edit/detail panels)
// =============================================================================
pub const DetailPanelState = detail.DetailPanelState;
pub const DetailPanelBase = detail.DetailPanelBase;
pub const EscapeResult = detail.EscapeResult;
pub const ActionButtonsResult = detail.ActionButtonsResult;
pub const NavButtonsResult = detail.NavButtonsResult;
pub const ActionButtonsOpts = detail.ActionButtonsOpts;
pub const NavButtonsOpts = detail.NavButtonsOpts;
// =============================================================================
// Tests
// =============================================================================
test {
std.testing.refAllDecls(@This());
}