Copilot f4b10511c0 Fixes #4495 - Adds SuperViewChanging event to View following Cancellable Work Pattern (#4503)
* Initial plan

* Add SuperViewChanging event infrastructure and tests

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Refactor SuperViewChanging to follow Cancellable Work Pattern with cancellation support

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Remove SuperViewChangingEventArgs class and use CancelEventArgs<View?> directly

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Simplified SuperViewChanged

* Refactor SuperView change to use CWP and event args

Refactored the handling of SuperView changes in the View hierarchy to use the Cancellable Work Pattern (CWP) and standardized event argument types. The SuperView property is now settable only via an internal SetSuperView method, which leverages CWP for property changes and cancellation.

- Updated OnSuperViewChanging to accept ValueChangingEventArgs<View?>.
- SuperViewChanging event now uses EventHandler<ValueChangingEventArgs<View?>>; cancellation is via e.Handled = true.
- OnSuperViewChanged and SuperViewChanged now use ValueChangedEventArgs<View?>.
- All SuperView assignments in Add, Remove, and RemoveAll now use SetSuperView, which returns a bool for cancellation.
- CWPPropertyHelper.ChangeProperty now accepts a sender parameter, passed to event handlers.
- All property changes in View now pass this as sender to ChangeProperty.
- Updated event handler signatures and overrides in MenuBar, StatusBar, TextField, and TextView.
- Updated unit tests to use new event args and cancellation pattern.
- Minor code cleanups and improved comments.

These changes modernize and standardize property change handling, improving API consistency, extensibility, and testability.

* Refactor subview removal and event arg types

Removed redundant index check when removing subviews in View.cs, simplifying the cleanup loop. Updated TextField.OnSuperViewChanged to use a non-nullable ValueChangedEventArgs<View> parameter, enforcing stricter type safety.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
Co-authored-by: Tig <tig@users.noreply.github.com>
2025-12-18 06:32:01 -07:00
2024-06-25 05:53:19 -07:00
2025-06-12 12:16:54 -06:00
2025-05-31 19:25:30 -06:00
2025-12-01 13:33:13 -07:00
2025-05-31 19:25:30 -06:00

Version codecov Downloads License Bugs

Terminal.Gui v2

Cross-platform UI toolkit for building sophisticated terminal UI (TUI) applications on Windows, macOS, and Linux/Unix.

logo

  • v2 Alpha (Current): NuGet Version - Recommended for new projects
  • v1 (Legacy): Version - Maintenance mode only

Important:

  • v1 is in maintenance mode - only critical bug fixes accepted
  • v2 Alpha is recommended for new projects - API is stable with comprehensive features
  • Breaking changes possible before Beta, but core architecture is solid

Sample app

Quick Start

Install the Terminal.Gui.Templates, create a new TUI app, and run it:

dotnet new --install Terminal.Gui.templates
dotnet new tui -n myproj
cd myproj
dotnet run

Press Esc to exit (the default QuitKey).

Run the comprehensive UI Catalog demo to explore all controls:

dotnet run --project Examples/UICatalog/UICatalog.csproj

Simple Example

using Terminal.Gui;

using IApplication app = Application.Create ();
app.Init ();

using Window window = new () { Title = "Hello World (Esc to quit)" };
Label label = new ()
{
    Text = "Hello, Terminal.Gui v2!",
    X = Pos.Center (),
    Y = Pos.Center ()
};
window.Add (label);

app.Run (window);

See the Examples directory for more.

Build Powerful Terminal Applications

Terminal.Gui enables building sophisticated console applications with modern UIs:

  • Rich Forms and Dialogs - Text fields, buttons, checkboxes, radio buttons, and data validation
  • Interactive Data Views - Tables, lists, and trees with sorting, filtering, and in-place editing
  • Visualizations - Charts, graphs, progress indicators, and color pickers with TrueColor support
  • Text Editors - Full-featured text editing with clipboard, undo/redo, and Unicode support
  • File Management - File and directory browsers with search and filtering
  • Wizards and Multi-Step Processes - Guided workflows with navigation and validation
  • System Monitoring Tools - Real-time dashboards with scrollable, resizable views
  • Configuration UIs - Settings editors with persistent themes and user preferences
  • Cross-Platform CLI Tools - Consistent experience on Windows, macOS, and Linux
  • Server Management Interfaces - SSH-compatible UIs for remote administration

See the Views Overview for available controls and What's New in v2 for architectural improvements.

Documentation

Comprehensive documentation is at gui-cs.github.io/Terminal.Gui.

Getting Started

Migration & Deep Dives

See the documentation index for all topics.

Installing

dotnet add package Terminal.Gui --version "2.0.0-alpha.*"

v2 Develop (Latest)

dotnet add package Terminal.Gui --version "2.0.0-develop.*"

v1 Legacy

dotnet add package Terminal.Gui --version "1.*"

Or use the Terminal.Gui.Templates.

Contributing

Contributions welcome! See CONTRIBUTING.md.

History

See gui-cs for project history and origins.

Languages
C# 99.4%
PowerShell 0.6%