From 3e2eebfd2c939a1dfece06d26d30bacc66fb5785 Mon Sep 17 00:00:00 2001 From: Tig Date: Thu, 29 May 2025 13:55:54 -0600 Subject: [PATCH] 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, 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 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> --- Examples/CommunityToolkitExample/LoginView.cs | 6 +- .../CommunityToolkitExample/LoginViewModel.cs | 6 +- Examples/CommunityToolkitExample/Program.cs | 3 +- Examples/CommunityToolkitExample/README.md | 4 +- Examples/Example/Example.cs | 4 +- Examples/NativeAot/Program.cs | 1 + Examples/ReactiveExample/LoginView.cs | 4 +- Examples/ReactiveExample/Program.cs | 1 + Examples/SelfContained/Program.cs | 1 + .../UICatalog/Properties/launchSettings.json | 15 +- Examples/UICatalog/Resources/config.json | 51 +- Examples/UICatalog/Scenarios/Adornments.cs | 22 +- .../UICatalog/Scenarios/AllViewsTester.cs | 85 +- .../Scenarios/AnsiRequestsScenario.cs | 18 +- Examples/UICatalog/Scenarios/Arrangement.cs | 92 +- Examples/UICatalog/Scenarios/Bars.cs | 2 +- Examples/UICatalog/Scenarios/Buttons.cs | 23 +- .../Scenarios/CharacterMap/CharacterMap.cs | 12 +- Examples/UICatalog/Scenarios/Clipping.cs | 2 +- .../Scenarios/CollectionNavigatorTester.cs | 2 +- Examples/UICatalog/Scenarios/ColorPicker.cs | 24 +- .../UICatalog/Scenarios/ComboBoxIteration.cs | 2 +- .../UICatalog/Scenarios/ComputedLayout.cs | 34 +- .../Scenarios/ConfigurationEditor.cs | 105 +- Examples/UICatalog/Scenarios/ContextMenus.cs | 2 +- Examples/UICatalog/Scenarios/Dialogs.cs | 2 +- Examples/UICatalog/Scenarios/DimAutoDemo.cs | 10 +- .../UICatalog/Scenarios/DynamicMenuBar.cs | 4 +- .../UICatalog/Scenarios/DynamicStatusBar.cs | 2 +- .../Scenarios/Editors/MarginEditor.cs | 51 - .../AdornmentEditor.cs | 11 +- .../AdornmentsEditor.cs | 2 + .../EditorsAndHelpers/AllViewsView.cs | 195 ++ .../ArrangementEditor.cs | 4 +- .../BorderEditor.cs | 0 .../DimEditor.cs | 6 +- .../EditorBase.cs | 12 +- .../EventLog.cs | 0 .../ExpanderButton.cs | 0 .../LayoutEditor.cs | 0 .../EditorsAndHelpers/MarginEditor.cs | 90 + .../PaddingEditor.cs | 0 .../PosEditor.cs | 4 +- .../EditorsAndHelpers/SchemeViewer.cs | 47 + .../EditorsAndHelpers/ThemeViewer.cs | 121 + .../EditorsAndHelpers/ViewPropertiesEditor.cs | 127 ++ .../ViewportSettingsEditor.cs | 61 +- .../EditorsAndHelpers/VisualRoleViewer.cs | 39 + .../UICatalog/Scenarios/GraphViewExample.cs | 18 +- Examples/UICatalog/Scenarios/HexEditor.cs | 24 +- Examples/UICatalog/Scenarios/InvertColors.cs | 57 - Examples/UICatalog/Scenarios/Keys.cs | 8 +- .../Scenarios/LineCanvasExperiment.cs | 12 +- Examples/UICatalog/Scenarios/LineDrawing.cs | 20 +- Examples/UICatalog/Scenarios/ListColumns.cs | 12 +- .../Scenarios/ListViewWithSelection.cs | 2 +- .../UICatalog/Scenarios/ListsAndCombos.cs | 6 +- Examples/UICatalog/Scenarios/Mazing.cs | 10 +- Examples/UICatalog/Scenarios/Menus.cs | 2 +- Examples/UICatalog/Scenarios/MessageBoxes.cs | 2 +- Examples/UICatalog/Scenarios/Mouse.cs | 14 +- .../UICatalog/Scenarios/MultiColouredTable.cs | 10 +- Examples/UICatalog/Scenarios/Navigation.cs | 12 +- .../UICatalog/Scenarios/NumericUpDownDemo.cs | 18 +- Examples/UICatalog/Scenarios/PosAlignDemo.cs | 20 +- Examples/UICatalog/Scenarios/Progress.cs | 6 +- .../UICatalog/Scenarios/ProgressBarStyles.cs | 32 +- .../UICatalog/Scenarios/RegionScenario.cs | 12 +- .../Scenarios/RuneWidthGreaterThanOne.cs | 2 +- Examples/UICatalog/Scenarios/ScrollBarDemo.cs | 4 +- Examples/UICatalog/Scenarios/Scrolling.cs | 186 +- Examples/UICatalog/Scenarios/ShadowStyles.cs | 29 +- Examples/UICatalog/Scenarios/Shortcuts.cs | 330 +-- Examples/UICatalog/Scenarios/SimpleDialog.cs | 59 - .../Scenarios/SingleBackgroundWorker.cs | 2 +- Examples/UICatalog/Scenarios/Sliders.cs | 412 ++-- Examples/UICatalog/Scenarios/Snake.cs | 11 +- .../UICatalog/Scenarios/SyntaxHighlighting.cs | 16 +- Examples/UICatalog/Scenarios/TableEditor.cs | 38 +- .../Scenarios/TextAlignmentAndDirection.cs | 66 +- .../Scenarios/TextEffectsScenario.cs | 6 +- .../UICatalog/Scenarios/TextFormatterDemo.cs | 6 +- .../{Text.cs => TextInputControls.cs} | 79 +- Examples/UICatalog/Scenarios/TextStyles.cs | 173 +- Examples/UICatalog/Scenarios/Themes.cs | 276 +++ Examples/UICatalog/Scenarios/Threading.cs | 4 +- Examples/UICatalog/Scenarios/Transparent.cs | 38 +- .../UICatalog/Scenarios/TreeViewFileSystem.cs | 17 +- Examples/UICatalog/Scenarios/TrueColors.cs | 27 +- .../UICatalog/Scenarios/ViewportSettings.cs | 25 +- .../Scenarios/VkeyPacketSimulator.cs | 8 +- .../Scenarios/WindowsAndFrameViews.cs | 32 +- Examples/UICatalog/Scenarios/Wizards.cs | 6 +- Examples/UICatalog/UICatalog.cs | 56 +- Examples/UICatalog/UICatalog.csproj | 8 +- .../UICatalog/UICatalogCommandLineOptions.cs | 2 + Examples/UICatalog/UICatalogTop.cs | 164 +- .../Application/Application.Driver.cs | 4 +- .../Application/Application.Initialization.cs | 34 +- .../Application/Application.Keyboard.cs | 18 +- Terminal.Gui/Application/Application.Mouse.cs | 68 +- .../Application/Application.Navigation.cs | 18 +- Terminal.Gui/Application/Application.Run.cs | 8 +- Terminal.Gui/Application/Application.cs | 2 +- Terminal.Gui/Application/ApplicationImpl.cs | 3 +- .../Application/ApplicationNavigation.cs | 1 + .../Application/ApplicationPopover.cs | 13 +- Terminal.Gui/Application/IPopover.cs | 10 +- Terminal.Gui/Application/PopoverBaseImpl.cs | 5 + .../{AppScope.cs => AppSettingsScope.cs} | 8 +- .../Configuration/AttributeJsonConverter.cs | 83 +- .../Configuration/ColorSchemeJsonConverter.cs | 112 - .../ConcurrentDictionaryJsonConverter.cs | 66 + Terminal.Gui/Configuration/ConfigLocations.cs | 50 +- Terminal.Gui/Configuration/ConfigProperty.cs | 546 ++++- .../Configuration/ConfigurationManager.cs | 1186 +++++----- .../ConfigurationManagerEventArgs.cs | 9 - ...ConfigurationManagerNotEnabledException.cs | 8 + .../ConfigurationPropertyAttribute.cs | 41 + Terminal.Gui/Configuration/DeepCloner.cs | 501 +++++ .../Configuration/DictionaryJsonConverter.cs | 14 +- .../Configuration/KeyCodeJsonConverter.cs | 29 +- .../Configuration/RuneJsonConverter.cs | 164 +- .../Configuration/SchemeJsonConverter.cs | 93 + Terminal.Gui/Configuration/SchemeManager.cs | 201 ++ Terminal.Gui/Configuration/Scope.cs | 185 +- .../Configuration/ScopeJsonConverter.cs | 133 +- .../SerializableConfigurationProperty.cs | 22 - Terminal.Gui/Configuration/SettingsScope.cs | 152 +- .../Configuration/SourceGenerationContext.cs | 32 +- Terminal.Gui/Configuration/SourcesManager.cs | 206 ++ Terminal.Gui/Configuration/ThemeManager.cs | 508 +++-- Terminal.Gui/Configuration/ThemeScope.cs | 8 +- Terminal.Gui/ConsoleDrivers/ConsoleDriver.cs | 4 +- .../ConsoleDrivers/EscSeqUtils/EscSeqUtils.cs | 2 + .../ConsoleDrivers/V2/ApplicationV2.cs | 2 - .../ConsoleDrivers/V2/ConsoleDriverFacade.cs | 2 +- Terminal.Gui/ConsoleDrivers/V2/NetOutput.cs | 4 +- .../ConsoleDrivers/V2/OutputBuffer.cs | 2 +- .../ConsoleDrivers/V2/WindowsOutput.cs | 4 +- .../WindowsDriver/WindowsConsole.cs | 6 + Terminal.Gui/Drawing/Attribute.cs | 215 +- Terminal.Gui/Drawing/Cell.cs | 6 +- .../Drawing/Color/AnsiColorNameResolver.cs | 4 +- .../Drawing/Color/Color.ColorExtensions.cs | 16 +- Terminal.Gui/Drawing/Color/Color.Operators.cs | 2 +- Terminal.Gui/Drawing/Color/Color.cs | 147 +- .../Drawing/Color/ColorScheme.Colors.cs | 266 --- Terminal.Gui/Drawing/Color/ColorScheme.cs | 114 - Terminal.Gui/Drawing/Color/ColorStrings.cs | 33 +- .../Color/MultiStandardColorNameResolver.cs | 189 +- Terminal.Gui/Drawing/Color/StandardColor.cs | 1252 +++++++++++ Terminal.Gui/Drawing/Color/StandardColors.cs | 91 + .../Color/StandardColorsNameResolver.cs | 20 + Terminal.Gui/Drawing/Color/W3cColor.cs | 777 ------- .../Drawing/Color/W3cColorNameResolver.cs | 110 - Terminal.Gui/Drawing/Glyphs.cs | 286 +-- Terminal.Gui/Drawing/LineCanvas/LineCanvas.cs | 4 +- Terminal.Gui/Drawing/Scheme.cs | 577 +++++ Terminal.Gui/Drawing/Schemes.cs | 34 + Terminal.Gui/Drawing/TextStyle.cs | 7 +- Terminal.Gui/Drawing/VisualRole.cs | 64 + Terminal.Gui/Drawing/VisualRoleEventArgs.cs | 29 + Terminal.Gui/FileServices/FileDialogStyle.cs | 4 +- Terminal.Gui/Input/Keyboard/Key.cs | 2 +- Terminal.Gui/ModuleInitializers.cs | 31 + Terminal.Gui/README.md | 5 +- Terminal.Gui/Resources/config.json | 1532 ++++++++----- .../Text/Autocomplete/AppendAutocomplete.cs | 13 +- .../Text/Autocomplete/AutocompleteBase.cs | 2 +- .../Text/Autocomplete/IAutocomplete.cs | 2 +- .../Text/Autocomplete/PopupAutocomplete.cs | 18 +- Terminal.Gui/{Views => Text}/NerdFonts.cs | 2 +- Terminal.Gui/Text/StringPropertyEventArgs.cs | 21 + Terminal.Gui/View/Adornment/Adornment.cs | 55 +- .../View/Adornment/Border.Arrangment.cs | 792 +++++++ Terminal.Gui/View/Adornment/Border.cs | 945 +------- Terminal.Gui/View/Adornment/Margin.cs | 114 +- Terminal.Gui/View/Adornment/Padding.cs | 13 - Terminal.Gui/View/Adornment/ShadowView.cs | 91 +- Terminal.Gui/View/SchemeEventArgs.cs | 21 + Terminal.Gui/View/View.Adornments.cs | 2 +- Terminal.Gui/View/View.Attribute.cs | 21 - Terminal.Gui/View/View.ColorScheme.cs | 211 -- Terminal.Gui/View/View.Content.cs | 82 +- Terminal.Gui/View/View.Diagnostics.cs | 3 - Terminal.Gui/View/View.Drawing.Attribute.cs | 116 + Terminal.Gui/View/View.Drawing.Clipping.cs | 12 +- Terminal.Gui/View/View.Drawing.Primitives.cs | 12 +- Terminal.Gui/View/View.Drawing.Scheme.cs | 177 ++ Terminal.Gui/View/View.Drawing.cs | 45 +- Terminal.Gui/View/View.Hierarchy.cs | 4 +- Terminal.Gui/View/View.Layout.cs | 189 +- Terminal.Gui/View/View.Mouse.cs | 233 +- Terminal.Gui/View/View.cs | 26 +- Terminal.Gui/View/ViewDiagnosticFlags.cs | 8 +- Terminal.Gui/View/ViewportSettings.cs | 2 + .../Views/AutocompleteFilepathContext.cs | 11 +- Terminal.Gui/Views/Bar.cs | 4 +- Terminal.Gui/Views/Button.cs | 6 +- Terminal.Gui/Views/CharMap/CharMap.cs | 115 +- Terminal.Gui/Views/CheckBox.cs | 2 +- Terminal.Gui/Views/{ => Color}/BBar.cs | 0 Terminal.Gui/Views/{ => Color}/ColorBar.cs | 8 +- .../Views/{ => Color}/ColorModelStrategy.cs | 0 .../Views/{ => Color}/ColorPicker.16.cs | 12 +- .../Views/{ => Color}/ColorPicker.Prompt.cs | 0 .../Views/{ => Color}/ColorPicker.Style.cs | 0 Terminal.Gui/Views/{ => Color}/ColorPicker.cs | 16 +- Terminal.Gui/Views/{ => Color}/GBar.cs | 0 Terminal.Gui/Views/{ => Color}/HueBar.cs | 0 Terminal.Gui/Views/{ => Color}/IColorBar.cs | 0 .../Views/{ => Color}/LightnessBar.cs | 0 Terminal.Gui/Views/{ => Color}/RBar.cs | 0 .../Views/{ => Color}/SaturationBar.cs | 0 Terminal.Gui/Views/{ => Color}/ValueBar.cs | 0 Terminal.Gui/Views/ComboBox.cs | 45 +- Terminal.Gui/Views/Dialog.cs | 41 +- Terminal.Gui/Views/FileDialog.cs | 44 +- Terminal.Gui/Views/FlagSelector.cs | 76 +- Terminal.Gui/Views/FrameView.cs | 6 +- Terminal.Gui/Views/GraphView/Annotations.cs | 9 +- Terminal.Gui/Views/GraphView/GraphView.cs | 4 +- Terminal.Gui/Views/HexView.cs | 79 +- .../Views/HistoryTextItemEventArgs.cs | 32 - Terminal.Gui/Views/LineView.cs | 2 +- Terminal.Gui/Views/ListView.cs | 30 +- Terminal.Gui/Views/Menu/MenuBarItemv2.cs | 6 +- Terminal.Gui/Views/Menu/MenuBarv2.cs | 265 +-- Terminal.Gui/Views/Menu/MenuItemv2.cs | 14 +- Terminal.Gui/Views/Menu/Menuv2.cs | 26 +- Terminal.Gui/Views/Menu/PopoverMenu.cs | 40 +- Terminal.Gui/Views/Menuv1/Menu.cs | 36 +- Terminal.Gui/Views/Menuv1/MenuBar.cs | 20 +- Terminal.Gui/Views/MessageBox.cs | 14 +- Terminal.Gui/Views/OptionSelector.cs | 74 +- Terminal.Gui/Views/ProgressBar.cs | 17 +- Terminal.Gui/Views/RadioGroup.cs | 16 +- Terminal.Gui/Views/ScrollBar/ScrollSlider.cs | 15 +- Terminal.Gui/Views/Shortcut.cs | 106 +- Terminal.Gui/Views/Slider.cs | 8 +- Terminal.Gui/Views/StatusBar.cs | 12 +- .../Views/TableView/CellColorGetterArgs.cs | 8 +- Terminal.Gui/Views/TableView/ColumnStyle.cs | 2 +- .../Views/TableView/RowColorGetterArgs.cs | 2 +- Terminal.Gui/Views/TableView/TableStyle.cs | 2 +- Terminal.Gui/Views/TableView/TableView.cs | 188 +- .../ContentsChangedEventArgs.cs | 0 .../Views/{ => TextInput}/DateField.cs | 0 Terminal.Gui/Views/TextInput/HistoryText.cs | 248 ++ .../TextInput/HistoryTextItemEventArgs.cs | 112 + .../Views/TextInput/ITextValidateProvider.cs | 66 + .../Views/TextInput/NetMaskedTextProvider.cs | 151 ++ .../Views/TextInput/TextEditingLineStatus.cs | 39 + .../Views/{ => TextInput}/TextField.cs | 163 +- Terminal.Gui/Views/TextInput/TextModel.cs | 1116 +++++++++ .../Views/TextInput/TextRegexProvider.cs | 151 ++ .../Views/TextInput/TextValidateField.cs | 369 +++ .../Views/{ => TextInput}/TextView.cs | 1986 +---------------- .../Views/{ => TextInput}/TimeField.cs | 0 .../Views/TextInput/WordWrapManager.cs | 421 ++++ Terminal.Gui/Views/TextValidateField.cs | 753 ------- Terminal.Gui/Views/TileView.cs | 10 +- Terminal.Gui/Views/Toplevel.cs | 3 +- Terminal.Gui/Views/TreeView/Branch.cs | 22 +- .../TreeView/DrawTreeViewLineEventArgs.cs | 2 +- Terminal.Gui/Views/TreeView/TreeView.cs | 35 +- Terminal.Gui/Views/Window.cs | 12 +- Terminal.Gui/Views/Wizard/Wizard.cs | 11 +- Terminal.sln.DotSettings | 2 + .../FluentTests/BasicFluentAssertionTests.cs | 13 +- .../UICatalog/ScenarioTests.cs | 47 +- Tests/StressTests/ApplicationStressTests.cs | 1 - Tests/StressTests/ScenariosStressTests.cs | 8 +- .../Application/ApplicationPopoverTests.cs | 53 + .../UnitTests/Application/ApplicationTests.cs | 71 +- Tests/UnitTests/Application/CursorTests.cs | 8 + .../Mouse/ApplicationMouseEnterLeaveTests.cs | 52 +- Tests/UnitTests/AutoInitShutdownAttribute.cs | 17 +- .../UnitTests/Configuration/AppScopeTests.cs | 127 +- .../AttributeJsonConverterTests.cs | 33 - .../ColorSchemeJsonConverterTests.cs | 59 - .../Configuration/ConfigPropertyTests.cs | 400 +++- .../Configuration/ConfigurationMangerTests.cs | 1096 ++++----- Tests/UnitTests/Configuration/GlyphTests.cs | 19 +- .../Configuration/KeyJsonConverterTests.cs | 108 +- .../Configuration/MemorySizeEstimator.cs | 253 +++ .../Configuration/SchemeManagerTests.cs | 489 ++++ .../Configuration/SettingsScopeTests.cs | 174 +- .../Configuration/ThemeManagerTests.cs | 284 +++ .../Configuration/ThemeScopeTests.cs | 119 +- Tests/UnitTests/Configuration/ThemeTests.cs | 191 +- .../ConsoleDrivers/V2/ApplicationV2Tests.cs | 31 +- Tests/UnitTests/Dialogs/DialogTests.cs | 457 ++-- Tests/UnitTests/Drawing/ThicknessTests.cs | 2 +- Tests/UnitTests/DriverAssert.cs | 60 +- Tests/UnitTests/Input/Keyboard/KeyTests.cs | 24 + .../Resources/ResourceManagerTests.cs | 44 +- .../TestRespondersDisposedAttribute.cs | 3 + Tests/UnitTests/Text/AutocompleteTests.cs | 18 +- Tests/UnitTests/UnitTests.csproj | 1 - .../View/Adornment/AdornmentSubViewTests.cs | 13 +- Tests/UnitTests/View/Adornment/BorderTests.cs | 42 +- Tests/UnitTests/View/Adornment/MarginTests.cs | 52 +- .../UnitTests/View/Adornment/PaddingTests.cs | 12 +- .../View/Adornment/ShadowStyleTests.cs | 8 +- .../UnitTests/View/Draw/ClearViewportTests.cs | 20 +- Tests/UnitTests/View/Draw/DrawTests.cs | 12 +- Tests/UnitTests/View/Draw/NeedsDrawTests.cs | 10 +- Tests/UnitTests/View/Layout/Dim.FillTests.cs | 9 +- .../GetViewsUnderLocationTests.cs} | 485 ++-- .../UnitTests/View/Layout/Pos.CombineTests.cs | 2 +- Tests/UnitTests/View/Layout/SetLayoutTests.cs | 7 +- Tests/UnitTests/View/Mouse/MouseTests.cs | 15 +- Tests/UnitTests/View/TextTests.cs | 10 +- Tests/UnitTests/View/ViewCommandTests.cs | 60 +- Tests/UnitTests/View/ViewTests.cs | 18 +- Tests/UnitTests/Views/ColorPickerTests.cs | 2 +- Tests/UnitTests/Views/ComboBoxTests.cs | 68 +- Tests/UnitTests/Views/FrameViewTests.cs | 8 +- Tests/UnitTests/Views/GraphViewTests.cs | 20 +- Tests/UnitTests/Views/HexViewTests.cs | 10 +- Tests/UnitTests/Views/LabelTests.cs | 14 +- Tests/UnitTests/Views/MenuBarTests.cs | 6 +- .../UnitTests/Views/Menuv1/MenuBarv1Tests.cs | 499 +---- Tests/UnitTests/Views/ShortcutTests.cs | 10 +- Tests/UnitTests/Views/StatusBarTests.cs | 6 +- Tests/UnitTests/Views/TabViewTests.cs | 2 +- Tests/UnitTests/Views/TableViewTests.cs | 464 ++-- Tests/UnitTests/Views/TextFieldTests.cs | 10 +- .../UnitTests/Views/TextValidateFieldTests.cs | 1 - Tests/UnitTests/Views/TextViewTests.cs | 76 +- Tests/UnitTests/Views/TileViewTests.cs | 18 +- Tests/UnitTests/Views/ToplevelTests.cs | 27 +- Tests/UnitTests/Views/TreeTableSourceTests.cs | 7 +- Tests/UnitTests/Views/TreeViewTests.cs | 28 +- Tests/UnitTests/Views/WindowTests.cs | 8 +- .../Application/ApplicationPopoverTests.cs | 31 +- .../AttributeJsonConverterTests.cs | 89 + .../Configuration/ColorJsonConverterTests.cs | 14 +- .../Configuration/ConfigPropertyTests.cs | 99 + .../Configuration/ConfigurationMangerTests.cs | 21 + .../ConfigurationPropertyAttributeTests.cs} | 19 +- .../Configuration/DeepClonerTests.cs | 673 ++++++ .../KeyCodeJsonConverterTests.cs | 0 .../Configuration/KeyJsonConverterTests.cs | 78 + .../Configuration/RuneJsonConverterTests.cs | 20 +- .../Configuration/SchemeJsonConverterTests.cs | 151 ++ .../Configuration/SchemeManagerTests.cs | 117 + .../Configuration/ScopeJsonConverterTests.cs | 33 + .../Configuration/ScopeTests.cs | 247 ++ .../Configuration/SettingsScopeTests.cs | 16 + .../Configuration/SourcesManagerTests.cs | 534 +++++ .../Configuration/ThemeScopeTests.cs | 48 + .../Drawing/AttributeTests.cs | 165 +- .../Drawing/CellTests.cs | 4 +- .../Color/AnsiColorNameResolverTests.cs | 60 +- .../MultiStandardColorNameResolverTests.cs | 276 +-- .../Color/StandardColorNameResolverTests.cs | 224 ++ .../Color/W3cColorNameResolverTests.cs | 150 -- .../Drawing/ColorSchemeTests.cs | 64 - ...Tests.GetAttributeForRoleAlgorithmTests.cs | 128 ++ .../Drawing/SchemeTests.cs | 165 ++ .../Input/Keyboard/KeyTests.cs | 16 - .../MockConsoleDriver.cs | 206 ++ Tests/UnitTestsParallelizable/TestSetup.cs | 2 +- .../View/Adornment/BorderArrangementTests.cs | 0 .../View/Adornment/MarginTests.cs | 66 + .../View/ColorSchemeTests.cs | 30 - .../View/Draw/NeedsDrawTests.cs | 22 +- .../View/Layout/GetViewsAtLocationTests.cs | 407 ++++ .../GetViewsUnderLocationForRootTests.cs | 334 +++ .../GetViewsUnderLocationTests.cs} | 10 +- .../View/Layout/ViewportTests.cs | 93 - .../View/SchemeTests.cs | 267 +++ .../Views/AllViewsTests.cs | 34 + .../Views/ShortcutTests.cs | 14 - docfx/docs/cancellable-work-pattern.md | 243 ++ docfx/docs/config.md | 378 +++- docfx/docs/drawing.md | 94 +- docfx/docs/index.md | 3 + docfx/docs/scheme.md | 97 + docfx/schemas/tui-config-schema.json | 681 ++++-- local_packages/Terminal.Gui.2.0.0.nupkg | Bin 843854 -> 856312 bytes local_packages/Terminal.Gui.2.0.0.snupkg | Bin 225881 -> 235522 bytes 385 files changed, 23471 insertions(+), 13662 deletions(-) delete mode 100644 Examples/UICatalog/Scenarios/Editors/MarginEditor.cs rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/AdornmentEditor.cs (95%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/AdornmentsEditor.cs (99%) create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/AllViewsView.cs rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/ArrangementEditor.cs (96%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/BorderEditor.cs (100%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/DimEditor.cs (95%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/EditorBase.cs (93%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/EventLog.cs (100%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/ExpanderButton.cs (100%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/LayoutEditor.cs (100%) create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/MarginEditor.cs rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/PaddingEditor.cs (100%) rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/PosEditor.cs (97%) create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/SchemeViewer.cs create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/ThemeViewer.cs create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/ViewPropertiesEditor.cs rename Examples/UICatalog/Scenarios/{Editors => EditorsAndHelpers}/ViewportSettingsEditor.cs (88%) create mode 100644 Examples/UICatalog/Scenarios/EditorsAndHelpers/VisualRoleViewer.cs delete mode 100644 Examples/UICatalog/Scenarios/InvertColors.cs delete mode 100644 Examples/UICatalog/Scenarios/SimpleDialog.cs rename Examples/UICatalog/Scenarios/{Text.cs => TextInputControls.cs} (87%) create mode 100644 Examples/UICatalog/Scenarios/Themes.cs rename Terminal.Gui/Configuration/{AppScope.cs => AppSettingsScope.cs} (71%) delete mode 100644 Terminal.Gui/Configuration/ColorSchemeJsonConverter.cs create mode 100644 Terminal.Gui/Configuration/ConcurrentDictionaryJsonConverter.cs create mode 100644 Terminal.Gui/Configuration/ConfigurationManagerNotEnabledException.cs create mode 100644 Terminal.Gui/Configuration/ConfigurationPropertyAttribute.cs create mode 100644 Terminal.Gui/Configuration/DeepCloner.cs create mode 100644 Terminal.Gui/Configuration/SchemeJsonConverter.cs create mode 100644 Terminal.Gui/Configuration/SchemeManager.cs delete mode 100644 Terminal.Gui/Configuration/SerializableConfigurationProperty.cs create mode 100644 Terminal.Gui/Configuration/SourcesManager.cs delete mode 100644 Terminal.Gui/Drawing/Color/ColorScheme.Colors.cs delete mode 100644 Terminal.Gui/Drawing/Color/ColorScheme.cs create mode 100644 Terminal.Gui/Drawing/Color/StandardColor.cs create mode 100644 Terminal.Gui/Drawing/Color/StandardColors.cs create mode 100644 Terminal.Gui/Drawing/Color/StandardColorsNameResolver.cs delete mode 100644 Terminal.Gui/Drawing/Color/W3cColor.cs delete mode 100644 Terminal.Gui/Drawing/Color/W3cColorNameResolver.cs create mode 100644 Terminal.Gui/Drawing/Scheme.cs create mode 100644 Terminal.Gui/Drawing/Schemes.cs create mode 100644 Terminal.Gui/Drawing/VisualRole.cs create mode 100644 Terminal.Gui/Drawing/VisualRoleEventArgs.cs create mode 100644 Terminal.Gui/ModuleInitializers.cs rename Terminal.Gui/{Views => Text}/NerdFonts.cs (99%) create mode 100644 Terminal.Gui/Text/StringPropertyEventArgs.cs create mode 100644 Terminal.Gui/View/Adornment/Border.Arrangment.cs create mode 100644 Terminal.Gui/View/SchemeEventArgs.cs delete mode 100644 Terminal.Gui/View/View.Attribute.cs delete mode 100644 Terminal.Gui/View/View.ColorScheme.cs create mode 100644 Terminal.Gui/View/View.Drawing.Attribute.cs create mode 100644 Terminal.Gui/View/View.Drawing.Scheme.cs rename Terminal.Gui/Views/{ => Color}/BBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/ColorBar.cs (94%) rename Terminal.Gui/Views/{ => Color}/ColorModelStrategy.cs (100%) rename Terminal.Gui/Views/{ => Color}/ColorPicker.16.cs (94%) rename Terminal.Gui/Views/{ => Color}/ColorPicker.Prompt.cs (100%) rename Terminal.Gui/Views/{ => Color}/ColorPicker.Style.cs (100%) rename Terminal.Gui/Views/{ => Color}/ColorPicker.cs (95%) rename Terminal.Gui/Views/{ => Color}/GBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/HueBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/IColorBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/LightnessBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/RBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/SaturationBar.cs (100%) rename Terminal.Gui/Views/{ => Color}/ValueBar.cs (100%) delete mode 100644 Terminal.Gui/Views/HistoryTextItemEventArgs.cs rename Terminal.Gui/Views/{ => TextInput}/ContentsChangedEventArgs.cs (100%) rename Terminal.Gui/Views/{ => TextInput}/DateField.cs (100%) create mode 100644 Terminal.Gui/Views/TextInput/HistoryText.cs create mode 100644 Terminal.Gui/Views/TextInput/HistoryTextItemEventArgs.cs create mode 100644 Terminal.Gui/Views/TextInput/ITextValidateProvider.cs create mode 100644 Terminal.Gui/Views/TextInput/NetMaskedTextProvider.cs create mode 100644 Terminal.Gui/Views/TextInput/TextEditingLineStatus.cs rename Terminal.Gui/Views/{ => TextInput}/TextField.cs (92%) create mode 100644 Terminal.Gui/Views/TextInput/TextModel.cs create mode 100644 Terminal.Gui/Views/TextInput/TextRegexProvider.cs create mode 100644 Terminal.Gui/Views/TextInput/TextValidateField.cs rename Terminal.Gui/Views/{ => TextInput}/TextView.cs (69%) rename Terminal.Gui/Views/{ => TextInput}/TimeField.cs (100%) create mode 100644 Terminal.Gui/Views/TextInput/WordWrapManager.cs delete mode 100644 Terminal.Gui/Views/TextValidateField.cs delete mode 100644 Tests/UnitTests/Configuration/AttributeJsonConverterTests.cs delete mode 100644 Tests/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs create mode 100644 Tests/UnitTests/Configuration/MemorySizeEstimator.cs create mode 100644 Tests/UnitTests/Configuration/SchemeManagerTests.cs create mode 100644 Tests/UnitTests/Configuration/ThemeManagerTests.cs create mode 100644 Tests/UnitTests/Input/Keyboard/KeyTests.cs rename Tests/UnitTests/View/{Mouse/GetViewsUnderMouseTests.cs => Layout/GetViewsUnderLocationTests.cs} (51%) create mode 100644 Tests/UnitTestsParallelizable/Configuration/AttributeJsonConverterTests.cs rename Tests/{UnitTests => UnitTestsParallelizable}/Configuration/ColorJsonConverterTests.cs (94%) create mode 100644 Tests/UnitTestsParallelizable/Configuration/ConfigPropertyTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/ConfigurationMangerTests.cs rename Tests/{UnitTests/Configuration/SerializableConfigurationPropertyTests.cs => UnitTestsParallelizable/Configuration/ConfigurationPropertyAttributeTests.cs} (86%) create mode 100644 Tests/UnitTestsParallelizable/Configuration/DeepClonerTests.cs rename Tests/{UnitTests => UnitTestsParallelizable}/Configuration/KeyCodeJsonConverterTests.cs (100%) create mode 100644 Tests/UnitTestsParallelizable/Configuration/KeyJsonConverterTests.cs rename Tests/{UnitTests => UnitTestsParallelizable}/Configuration/RuneJsonConverterTests.cs (88%) create mode 100644 Tests/UnitTestsParallelizable/Configuration/SchemeJsonConverterTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/SchemeManagerTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/ScopeJsonConverterTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/ScopeTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/SettingsScopeTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/SourcesManagerTests.cs create mode 100644 Tests/UnitTestsParallelizable/Configuration/ThemeScopeTests.cs create mode 100644 Tests/UnitTestsParallelizable/Drawing/Color/StandardColorNameResolverTests.cs delete mode 100644 Tests/UnitTestsParallelizable/Drawing/Color/W3cColorNameResolverTests.cs delete mode 100644 Tests/UnitTestsParallelizable/Drawing/ColorSchemeTests.cs create mode 100644 Tests/UnitTestsParallelizable/Drawing/SchemeTests.GetAttributeForRoleAlgorithmTests.cs create mode 100644 Tests/UnitTestsParallelizable/Drawing/SchemeTests.cs create mode 100644 Tests/UnitTestsParallelizable/MockConsoleDriver.cs create mode 100644 Tests/UnitTestsParallelizable/View/Adornment/BorderArrangementTests.cs create mode 100644 Tests/UnitTestsParallelizable/View/Adornment/MarginTests.cs delete mode 100644 Tests/UnitTestsParallelizable/View/ColorSchemeTests.cs create mode 100644 Tests/UnitTestsParallelizable/View/Layout/GetViewsAtLocationTests.cs create mode 100644 Tests/UnitTestsParallelizable/View/Layout/GetViewsUnderLocationForRootTests.cs rename Tests/UnitTestsParallelizable/View/{Mouse/GetViewsUnderMouseTests.cs => Layout/GetViewsUnderLocationTests.cs} (92%) create mode 100644 Tests/UnitTestsParallelizable/View/SchemeTests.cs create mode 100644 docfx/docs/cancellable-work-pattern.md create mode 100644 docfx/docs/scheme.md diff --git a/Examples/CommunityToolkitExample/LoginView.cs b/Examples/CommunityToolkitExample/LoginView.cs index a1ead6c33..4e2d505fe 100644 --- a/Examples/CommunityToolkitExample/LoginView.cs +++ b/Examples/CommunityToolkitExample/LoginView.cs @@ -47,7 +47,7 @@ internal partial class LoginView : IRecipient> { loginProgressLabel.Text = ViewModel.LoginProgressMessage; validationLabel.Text = ViewModel.ValidationMessage; - validationLabel.ColorScheme = ViewModel.ValidationColorScheme; + validationLabel.SetScheme (ViewModel.ValidationScheme); break; } case LoginActions.LoginProgress: @@ -58,11 +58,11 @@ internal partial class LoginView : IRecipient> case LoginActions.Validation: { validationLabel.Text = ViewModel.ValidationMessage; - validationLabel.ColorScheme = ViewModel.ValidationColorScheme; + validationLabel.SetScheme (ViewModel.ValidationScheme); break; } } - SetText(); + SetText (); // BUGBUG: This should not be needed: Application.LayoutAndDraw (); } diff --git a/Examples/CommunityToolkitExample/LoginViewModel.cs b/Examples/CommunityToolkitExample/LoginViewModel.cs index 8d48546bb..c2d624640 100644 --- a/Examples/CommunityToolkitExample/LoginViewModel.cs +++ b/Examples/CommunityToolkitExample/LoginViewModel.cs @@ -29,7 +29,7 @@ internal partial class LoginViewModel : ObservableObject private string _usernameLengthMessage; [ObservableProperty] - private ColorScheme? _validationColorScheme; + private Scheme? _validationScheme; [ObservableProperty] private string _validationMessage; @@ -107,14 +107,14 @@ internal partial class LoginViewModel : ObservableObject case LoginActions.Clear: LoginProgressMessage = message; ValidationMessage = INVALID_LOGIN_MESSAGE; - ValidationColorScheme = Colors.ColorSchemes ["Error"]; + ValidationScheme = SchemeManager.GetScheme ("Error"); break; case LoginActions.LoginProgress: LoginProgressMessage = message; break; case LoginActions.Validation: ValidationMessage = CanLogin ? VALID_LOGIN_MESSAGE : INVALID_LOGIN_MESSAGE; - ValidationColorScheme = CanLogin ? Colors.ColorSchemes ["Base"] : Colors.ColorSchemes ["Error"]; + ValidationScheme = CanLogin ? SchemeManager.GetScheme ("Base") : SchemeManager.GetScheme("Error"); break; } WeakReferenceMessenger.Default.Send (new Message { Value = loginAction }); diff --git a/Examples/CommunityToolkitExample/Program.cs b/Examples/CommunityToolkitExample/Program.cs index a9ababfec..a89b3848f 100644 --- a/Examples/CommunityToolkitExample/Program.cs +++ b/Examples/CommunityToolkitExample/Program.cs @@ -9,10 +9,11 @@ public static class Program private static void Main (string [] args) { + ConfigurationManager.Enable (ConfigLocations.All); Services = ConfigureServices (); Application.Init (); Application.Run (Services.GetRequiredService ()); - Application.Top?.Dispose(); + Application.Top?.Dispose (); Application.Shutdown (); } diff --git a/Examples/CommunityToolkitExample/README.md b/Examples/CommunityToolkitExample/README.md index c3a712868..908ae592b 100644 --- a/Examples/CommunityToolkitExample/README.md +++ b/Examples/CommunityToolkitExample/README.md @@ -115,7 +115,7 @@ private void SendMessage (LoginAction loginAction, string message = "") break; case LoginAction.Validation: ValidationMessage = CanLogin ? VALID_LOGIN_MESSAGE : INVALID_LOGIN_MESSAGE; - ValidationColorScheme = CanLogin ? Colors.ColorSchemes ["Base"] : Colors.ColorSchemes ["Error"]; + ValidationScheme = CanLogin ? Colors.Schemes ["Base"] : Colors.Schemes ["Error"]; break; } WeakReferenceMessenger.Default.Send (new Message { Value = loginAction }); @@ -144,7 +144,7 @@ public void Receive (Message message) case LoginAction.Validation: { validationLabel.Text = ViewModel.ValidationMessage; - validationLabel.ColorScheme = ViewModel.ValidationColorScheme; + validationLabel.Scheme = ViewModel.ValidationScheme; break; } } diff --git a/Examples/Example/Example.cs b/Examples/Example/Example.cs index 80d3de35d..549220848 100644 --- a/Examples/Example/Example.cs +++ b/Examples/Example/Example.cs @@ -3,11 +3,11 @@ // A simple Terminal.Gui example in C# - using C# 9.0 Top-level statements -using System; using Terminal.Gui; // Override the default configuration for the application to use the Light theme ConfigurationManager.RuntimeConfig = """{ "Theme": "Light" }"""; +ConfigurationManager.Enable(ConfigLocations.All); Application.Run ().Dispose (); @@ -21,7 +21,7 @@ Console.WriteLine ($@"Username: {ExampleWindow.UserName}"); // Defines a top-level window with border and title public class ExampleWindow : Window { - public static string UserName; + public static string UserName { get; set; } public ExampleWindow () { diff --git a/Examples/NativeAot/Program.cs b/Examples/NativeAot/Program.cs index 87bc2ae61..ff5636fdf 100644 --- a/Examples/NativeAot/Program.cs +++ b/Examples/NativeAot/Program.cs @@ -13,6 +13,7 @@ public static class Program [RequiresDynamicCode ("Calls Terminal.Gui.Application.Init(IConsoleDriver, String)")] private static void Main (string [] args) { + ConfigurationManager.Enable(ConfigLocations.All); Application.Init (); #region The code in this region is not intended for use in a native Aot self-contained. It's just here to make sure there is no functionality break with localization in Terminal.Gui using self-contained diff --git a/Examples/ReactiveExample/LoginView.cs b/Examples/ReactiveExample/LoginView.cs index 130aebb43..4cef902fd 100644 --- a/Examples/ReactiveExample/LoginView.cs +++ b/Examples/ReactiveExample/LoginView.cs @@ -96,8 +96,8 @@ public class LoginView : Window, IViewFor ViewModel .WhenAnyValue (x => x.IsValid) - .Select (valid => valid ? Colors.ColorSchemes ["Base"] : Colors.ColorSchemes ["Error"]) - .BindTo (validation, x => x.ColorScheme) + .Select (valid => valid ? SchemeManager.GetScheme ("Base") : SchemeManager.GetScheme ("Error")) + .BindTo (validation, x => x.GetScheme ()) .DisposeWith (_disposable); }) .AddControlAfter