Fixes #4057 - MASSIVE! Fully implements ColorScheme->Scheme + VisualRole + Colors.->SchemeManager. (#4062)

* touching publish.yml

* ColorScheme->Scheme

* ColorScheme->Scheme 2

* Prototype of GetAttributeForRole

* Badly broke CM

* Further Badly broke CM

* Refactored CM big-time. View still broken

* All unit test pass again. Tons added. CM is still WIP, but Schemes is not mostly refactored and working.

* Actually:
All unit test pass again.
Tons added.
CM is still WIP, but Schemes is not mostly refactored and working.

* Bug fixes.
DeepMemberWiseClone cleanup

* Further cleanup of Scope<T>, ConfigProperty, etc.

* Made ConfigManager thread safe.

* WIP: Broken

* WIP: new deep clone impl

* WIP: new deep clone impl is done. Now fixing CM

* WIP:
- config.md
- Working on AOT clean up
- Core CM is broken; but known.

* WIP

* Merged.
Removed CM from Application.Init

* WIP

* More WIP; Less broke

* All CM unit tests pass... Not sure if it actually works though

* All unit tests pass... Themes are broken though in UI Cat

* CM Ready for review?

* Fixed failures due to TextStyles PR

* Working on Scheme/Attribute

* Working on Scheme/Attribute 2

* Working on Scheme/Attribute 3

* Working on Scheme/Attribute 4

* Working on Scheme/Attribute 5

* Working on Scheme/Attribute 6

* Added test to show how awful memory usage is

* Improved schema. Updated config.json

* Nade Scope<T> concurrentdictionary and added test to prove

* Made Themes ConcrurrentDictionary. Added bunches of tests

* Code cleanup

* Code cleanup 2

* Code cleanup 3

* Tweaking Scheme

* ClearJsonErrors

* ClearJsonErrors2

* Updated Attribute API

* It all (mostly) works!

* Skip odd unit test

* Messed with Themes

* Theme tweaks

* Code reorg. New .md stuff

* Fixed Enabled. Added mock driver

* Fixed a bunch of View.Enabled related issues

* Scheme -> Get/SetScheme()

* Cleanup

* Cleanup2

* Broke something

* Fixed everything

* Made CM.Enable better

* Text Style Scenario

* Added comments

* Fixed UI Catalog Theme Changing

* Fixed more dynamic CM update stuff

* Warning cleanup

* New Default Theme

* fixed unit test

* Refactoring Scheme and Attribute to fix inheritance

* more unit tests

* ConfigProperty is not updating schemes correctly

* All unit tests pass.
Code cleanup

* All unit tests pass.
Code cleanup2

* Fixed unit tests

* Upgraded TextField and TextView

* Fixed TextView !Enabled bug

* More updates to TextView. More unit tests for SchemeManager

* Upgraded CharMap

* API docs

* Fixe HexView API

* upgrade HexView

* Fixed shortcut KeyView

* Fixed more bugs. Added new themes

* updated themes

* upgraded Border

* Fixed themes memory usage...mostly

* Fixed themes memory usage...mostly2

* Fixed themes memory usage...2

* Fixed themes memory usage...3

* Added new colors

* Fixed GetHardCodedConfig bug

* Added Themes Scenario - WIP

* Added Themes Scenario

* Tweaked Themes Scenario

* Code cleanup

* Fixed json schmea

* updated deepdives

* updated deepdives

* Tweaked Themes Scenario

* Made Schemes a concurrent dict

* Test cleanup

* Thread safe ConfigProperty tests

* trying to make things more thread safe

* more trying to make things more thread safe

* Fixing bugs in shadowview

* Fixing bugs in shadowview 2

* Refactored GetViewsUnderMouse to GetViewsUnderLocation etc...

* Fixed dupe unit tests?

* Added better description of layout and coordiantes to deep dive

* Added better description of layout and coordiantes to deep dive

* Modified tests that call v2.AddTimeout; they were returning true which means restart the timer!
This was causing mac/linux unit test failures.
I think

* Fixed auto scheme.
Broke TextView/TextField selection

* Realized Attribute.IsExplicitlySet is stupid; just use nullable

* Fixed Attribute. Simplified. MOre theme testing

* Updated themes again

* GetViewsUnderMouse to GetViewsUnderLocation broke TransparentMouse.

* Fixing mouseunder bugs

* rewriting...

* All working again.
Shadows are now slick as snot.
GetViewsUnderLocation is rewritten to actually work and be readable.
Tons more low-level unit tests.
Margin is now actually ViewportSettings.Transparent.

* Code cleanup

* Code cleanup

* Code cleanup of color apis

* Fixed Hover/Highlight

* Update Examples/UICatalog/Scenarios/AllViewsTester.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Examples/UICatalog/Scenarios/CharacterMap/CharacterMap.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Examples/UICatalog/Scenarios/Clipping.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fixed race condition?

* reverted

* Simplified Attribute API by removing events from SetAttributeForRole

* Removed recursion from GetViewsAtLocation

* Removed unneeded code

* Code clean up.
Fixed Scheme bug.

* reverted temporary disable

* Adjusted scheme algo

* Upgraded TextValidateField

* Fixed TextValidate bugs

* Tweaks

* Frameview rounded border by default

* API doc cleanup

* Readme fix

* Addressed tznind feeback

* Fixed more unit test issues by protecting Application statics from being set if Application.Initialized is not true

* Fixed more unit test issues by protecting Application statics from being set if Application.Initialized is not true 2

* cleanup

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Tig
2025-05-29 13:55:54 -06:00
committed by GitHub
parent 9c54ee41e5
commit 7422385457
386 changed files with 23600 additions and 13662 deletions

View File

@@ -0,0 +1,206 @@
#nullable enable
using System.Text;
using Terminal.Gui;
using Attribute = Terminal.Gui.Attribute;
using Color = Terminal.Gui.Color;
internal class MockConsoleDriver : IConsoleDriver
{
public event EventHandler<Attribute>? AttributeSet;
private IClipboard? _clipboard;
private Rectangle _screen;
private Region? _clip;
private int _col;
private int _cols;
private Cell [,]? _contents;
private int _left;
private int _row;
private int _rows;
private int _top;
private bool _supportsTrueColor;
private bool _force16Colors;
private Attribute _currentAttribute;
/// <inheritdoc />
public IClipboard? Clipboard => _clipboard;
/// <inheritdoc />
public Rectangle Screen => _screen;
/// <inheritdoc />
public Region? Clip
{
get => _clip;
set => _clip = value;
}
/// <inheritdoc />
public int Col => _col;
/// <inheritdoc />
public int Cols
{
get => _cols;
set => _cols = value;
}
/// <inheritdoc />
public Cell [,]? Contents
{
get => _contents;
set => _contents = value;
}
/// <inheritdoc />
public int Left
{
get => _left;
set => _left = value;
}
/// <inheritdoc />
public int Row => _row;
/// <inheritdoc />
public int Rows
{
get => _rows;
set => _rows = value;
}
/// <inheritdoc />
public int Top
{
get => _top;
set => _top = value;
}
/// <inheritdoc />
public bool SupportsTrueColor => _supportsTrueColor;
/// <inheritdoc />
public bool Force16Colors
{
get => _force16Colors;
set => _force16Colors = value;
}
/// <inheritdoc />
public Attribute CurrentAttribute
{
get => _currentAttribute;
set => _currentAttribute = value;
}
/// <inheritdoc />
public string GetVersionInfo () { return string.Empty; }
/// <inheritdoc />
public void WriteRaw (string ansi) { }
/// <inheritdoc />
public bool IsRuneSupported (Rune rune) { return true; }
/// <inheritdoc />
public bool IsValidLocation (Rune rune, int col, int row) { return true; }
/// <inheritdoc />
public void Move (int col, int row)
{
_col = col;
_row = row;
}
/// <inheritdoc />
public void AddRune (Rune rune) { }
/// <inheritdoc />
public void AddRune (char c) { }
/// <inheritdoc />
public void AddStr (string str) { }
/// <inheritdoc />
public void ClearContents () { }
/// <inheritdoc />
public event EventHandler<EventArgs>? ClearedContents;
/// <inheritdoc />
public void FillRect (Rectangle rect, Rune rune = default) { }
/// <inheritdoc />
public void FillRect (Rectangle rect, char c) { }
/// <inheritdoc />
public bool GetCursorVisibility (out CursorVisibility visibility)
{
visibility = CursorVisibility.Invisible;
return false;
}
/// <inheritdoc />
public void Refresh () { }
/// <inheritdoc />
public bool SetCursorVisibility (CursorVisibility visibility) { throw new NotImplementedException (); }
/// <inheritdoc />
public event EventHandler<SizeChangedEventArgs>? SizeChanged;
/// <inheritdoc />
public void Suspend () { }
/// <inheritdoc />
public void UpdateCursor () {}
/// <inheritdoc />
public MainLoop Init () { return null!; }
/// <inheritdoc />
public void End () { }
/// <inheritdoc />
/// <inheritdoc />
public Attribute SetAttribute (Attribute c)
{
Attribute oldAttribute = _currentAttribute;
_currentAttribute = c;
AttributeSet?.Invoke (this, c);
return oldAttribute;
}
/// <inheritdoc />
public Attribute GetAttribute ()
{
return _currentAttribute;
}
/// <inheritdoc />
public Attribute MakeColor (in Color foreground, in Color background) { throw new NotImplementedException (); }
/// <inheritdoc />
public event EventHandler<MouseEventArgs>? MouseEvent;
/// <inheritdoc />
public event EventHandler<Key>? KeyDown;
/// <inheritdoc />
public event EventHandler<Key>? KeyUp;
/// <inheritdoc />
public void SendKeys (char keyChar, ConsoleKey key, bool shift, bool alt, bool ctrl) { throw new NotImplementedException (); }
/// <inheritdoc />
public void QueueAnsiRequest (AnsiEscapeSequenceRequest request) { throw new NotImplementedException (); }
/// <inheritdoc />
public AnsiRequestScheduler GetRequestScheduler () { throw new NotImplementedException (); }
}