diff --git a/Documents/Help/Changelog.md b/Documents/Help/Changelog.md
index 844946550..a289b9bb9 100644
--- a/Documents/Help/Changelog.md
+++ b/Documents/Help/Changelog.md
@@ -5,6 +5,36 @@
=======
+## 2024-11-12 - Build 2411 - November 2024
+* Simplified TFM project configuration
+* RollBack [#1584](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1584), Disable the FadeValues property in VisualForm and move the FadeValues class to Extended. It was a V90 feature but is up for further development in V100.
+* New `KryptonPasswordTextBox` control
+* `Krypton.Toolkit.Suite.Extended.Outlook.Grid` is now deprecated, as it has now been absorbed into the standard toolkit
+* Implement [#404](https://github.com/Krypton-Suite/Extended-Toolkit/issues/404), Update 'ScottPlot' to v5
+* `KryptonMessageBoxExtended` now supports RTL reading
+* `Krypton.Toolkit.Suite.Extended.Toast` is now deprecated, as it has now been absorbed into the standard toolkit
+* `KryptonFormExtended` - `AllowFormIntegrate` property has now been removed to fall in line with the standard toolkit
+* Resolved [#446](https://github.com/Krypton-Suite/Extended-Toolkit/issues/446), Throwing exceptions using the Circularprogressbar control of The Ultimate 80.0 package during design
+* New `KryptonAboutExtendedToolkit` API
+* * Add support for .NET 9.0
+* Removed support for .NET 6 and 7, in accordance with their official release cadences
+* Updated standard toolkit to build `2411`
+
+=======
+
+## 2024-10-15 - Build 2410 (Patch 2) - October 2024
+* Enable 'SourceLink' for NuGet packages
+* Patch for `System.Private.Uri`, CVE-2019-081
+
+=======
+
+## 2024-06-24 - Build 2406 - June 2024
+
+* Updated standard toolkit to build `2406`
+* Updated version from `80.xx.xx.xxx` -> `85.xx.xx.xxx`
+
+=======
+
## 2023-11-14 - Build 2311 - November 2023
* New `KryptonToolkitExtendedPoweredByControl`, to be used in application 'About' dialogs
* Added the ability to specify the message text alignment in a `KryptonMessageboxExtended`
diff --git a/Documents/License/License.md b/Documents/License/License.md
index 159a9c459..793c70822 100644
--- a/Documents/License/License.md
+++ b/Documents/License/License.md
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2017 - 2023 Krypton Suite
+Copyright (c) 2017 - 2024 Krypton Suite
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/LICENSE b/LICENSE
index 159a9c459..793c70822 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2017 - 2023 Krypton Suite
+Copyright (c) 2017 - 2024 Krypton Suite
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/.editorconfig b/Source/.editorconfig
index 1e952f92e..096d5c87c 100644
--- a/Source/.editorconfig
+++ b/Source/.editorconfig
@@ -1,2 +1,97 @@
[*.cs]
-dotnet_diagnostic.CS8618.severity = None
\ No newline at end of file
+dotnet_diagnostic.CS8618.severity = None
+csharp_indent_labels = one_less_than_current
+csharp_using_directive_placement = outside_namespace:silent
+csharp_prefer_simple_using_statement = true:suggestion
+csharp_prefer_braces = true:silent
+csharp_style_namespace_declarations = block_scoped:silent
+csharp_style_prefer_method_group_conversion = true:silent
+csharp_style_prefer_top_level_statements = true:silent
+csharp_style_prefer_primary_constructors = true:suggestion
+csharp_prefer_system_threading_lock = true:suggestion
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_local_functions = false:silent
+csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
+csharp_style_throw_expression = true:suggestion
+csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
+csharp_style_prefer_tuple_swap = true:suggestion
+csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
+csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
+csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
+csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
+csharp_style_prefer_switch_expression = true:suggestion
+csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
+dotnet_diagnostic.WFO1000.severity = warning
+[*.{cs,vb}]
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+tab_width = 4
+indent_size = 4
+end_of_line = crlf
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+dotnet_style_prefer_auto_properties = true:silent
+dotnet_style_object_initializer = true:suggestion
+[*.{cs,vb}]
+#### Naming styles ####
+
+# Naming rules
+
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+
+dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+
+# Symbol specifications
+
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+# Naming styles
+
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+dotnet_style_prefer_conditional_expression_over_assignment = true:silent
+dotnet_style_prefer_conditional_expression_over_return = true:silent
+dotnet_style_predefined_type_for_locals_parameters_members = true:silent
+dotnet_style_predefined_type_for_member_access = true:silent
+dotnet_style_allow_multiple_blank_lines_experimental = true:silent
+dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
+dotnet_style_qualification_for_field = false:silent
+dotnet_style_qualification_for_property = false:silent
+dotnet_style_qualification_for_method = false:silent
diff --git a/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/VersionHistory.aml b/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/VersionHistory.aml
new file mode 100644
index 000000000..8ae2f1ae5
--- /dev/null
+++ b/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/VersionHistory.aml
@@ -0,0 +1,33 @@
+
+
+
+
+ The topics in this section describe the various changes made to the [TODO: Project Title] over the
+life of the project.
+
+
+
+ Version History
+
+ Select a version below to see a description of its changes.
+
+
+
+
+
+
+
+ [TODO: Add links to each specific version page]
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/v1.0.0.0.aml b/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/v1.0.0.0.aml
new file mode 100644
index 000000000..663753999
--- /dev/null
+++ b/Source/Documentation/Extended Toolkit API Documentation/Content/VersionHistory/v1.0.0.0.aml
@@ -0,0 +1,28 @@
+
+
+
+
+ Version [TODO: Version] was released on [TODO: Date].
+
+
+
+
+ Changes in This Release
+
+
+
+
+ [TODO: Add change items here]
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Documentation/Extended Toolkit API Documentation/Content/Welcome.aml b/Source/Documentation/Extended Toolkit API Documentation/Content/Welcome.aml
new file mode 100644
index 000000000..bb5c2f43c
--- /dev/null
+++ b/Source/Documentation/Extended Toolkit API Documentation/Content/Welcome.aml
@@ -0,0 +1,55 @@
+
+
+
+
+ This is a sample conceptual topic. You can use this as a starting point for adding more conceptual
+content to your help project.
+
+
+
+ Getting Started
+
+ To get started, add a documentation source to the project (a Visual Studio solution, project, or
+assembly and XML comments file). See the Getting Started topics in the Sandcastle Help
+File Builder's help file for more information. The following default items are included in this project:
+
+
+
+ ContentLayout.content - Use the content layout file to manage the
+conceptual content in the project and define its layout in the table of contents.
+
+
+
+ The .\media folder - Place images in this folder that you will reference
+from conceptual content using medialLink or mediaLinkInline
+elements. If you will not have any images in the file, you may remove this folder.
+
+
+
+ The .\icons folder - This contains a default logo for the help file. You
+may replace it or remove it and the folder if not wanted. If removed or if you change the file name, update
+the Transform Args project properties page by removing or changing the filename in the
+logoFile transform argument. Note that unlike images referenced from conceptual topics,
+the logo file should have its BuildAction property set to Content.
+
+
+
+ The .\Content folder - Use this to store your conceptual topics. You may
+name the files and organize them however you like. One suggestion is to lay the files out on disk as you have
+them in the content layout file as shown in this project but the choice is yours. Files can be added via the
+Solution Explorer or from within the content layout file editor. Files must appear in the content layout file
+in order to be compiled into the help file.
+
+
+
+ See the Conceptual Content topics in the Sandcastle Help File Builder's
+help file for more information. See the Sandcastle MAML Guide for details on Microsoft
+Assistance Markup Language (MAML) which is used to create these topics.
+
+
+
+
+
+
+
+
diff --git a/Source/Documentation/Extended Toolkit API Documentation/ContentLayout.content b/Source/Documentation/Extended Toolkit API Documentation/ContentLayout.content
new file mode 100644
index 000000000..4af5dffe9
--- /dev/null
+++ b/Source/Documentation/Extended Toolkit API Documentation/ContentLayout.content
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Documentation/Extended Toolkit API Documentation/Extended Toolkit API Documentation.shfbproj b/Source/Documentation/Extended Toolkit API Documentation/Extended Toolkit API Documentation.shfbproj
new file mode 100644
index 000000000..43446799e
--- /dev/null
+++ b/Source/Documentation/Extended Toolkit API Documentation/Extended Toolkit API Documentation.shfbproj
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+ v4.7.2
+
+ Debug
+ AnyCPU
+ 2.0
+ 6cfe23a2-844d-4ef5-8a75-35985b11cf34
+ 2017.9.26.0
+
+ Extended_Toolkit_API_Documentation
+ Extended_Toolkit_API_Documentation
+ Extended_Toolkit_API_Documentation
+
+ .NET Framework 4.8
+ .\Help\
+ Extended_Toolkit_API_Documentation
+ en-US
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Website
+ Standard
+ Default2022
+ True
+ True
+ False
+ False
+ OnlyWarningsAndErrors
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnBuildSuccess
+
+
\ No newline at end of file
diff --git a/Source/Documentation/Extended Toolkit API Documentation/icons/Help.png b/Source/Documentation/Extended Toolkit API Documentation/icons/Help.png
new file mode 100644
index 000000000..945e89fb9
Binary files /dev/null and b/Source/Documentation/Extended Toolkit API Documentation/icons/Help.png differ
diff --git a/Source/Krypton Toolkit/AutoUpdateCreator/AutoUpdateCreator.csproj b/Source/Krypton Toolkit/AutoUpdateCreator/AutoUpdateCreator.csproj
index 988099f68..66eb4e05e 100644
--- a/Source/Krypton Toolkit/AutoUpdateCreator/AutoUpdateCreator.csproj
+++ b/Source/Krypton Toolkit/AutoUpdateCreator/AutoUpdateCreator.csproj
@@ -16,74 +16,36 @@
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
diff --git a/Source/Krypton Toolkit/Directory.Build.props b/Source/Krypton Toolkit/Directory.Build.props
index a4c2fe162..86308726d 100644
--- a/Source/Krypton Toolkit/Directory.Build.props
+++ b/Source/Krypton Toolkit/Directory.Build.props
@@ -6,7 +6,7 @@
true
en
Peter Wagner (A.K.A Wagnerp) and Simon Coghlan (A.K.A Smurf-IV), et al.
- © Component Factory Pty Ltd, 2006 - 2016. Then modifications by Peter Wagner (aka Wagnerp) and Simon Coghlan (aka Smurf-IV) 2017 - 2023. All rights reserved.
+ © Component Factory Pty Ltd, 2006 - 2016. Then modifications by Peter Wagner (aka Wagnerp) and Simon Coghlan (aka Smurf-IV) 2017 - 2024. All rights reserved.
@@ -32,6 +32,8 @@
Get updates here: https://github.com/Krypton-Suite/Extended-Toolkit
git
https://github.com/Krypton-Suite/Extended-Toolkit
+ true
+ true
true
@@ -60,6 +62,8 @@
Get updates here: https://github.com/Krypton-Suite/Extended-Toolkit
git
https://github.com/Krypton-Suite/Extended-Toolkit
+ true
+ true
true
@@ -88,6 +92,8 @@
Get updates here: https://github.com/Krypton-Suite/Extended-Toolkit
git
https://github.com/Krypton-Suite/Extended-Toolkit
+ true
+ true
..\..\..\Bin\
diff --git a/Source/Krypton Toolkit/Directory.Build.targets b/Source/Krypton Toolkit/Directory.Build.targets
index d84a08d95..f0de03fe2 100644
--- a/Source/Krypton Toolkit/Directory.Build.targets
+++ b/Source/Krypton Toolkit/Directory.Build.targets
@@ -7,21 +7,21 @@
$([System.DateTime]::Now.get_DayOfYear().ToString())
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)-beta
+ 90.$(Minor).$(Build).$(Revision)-beta
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
preview
@@ -38,21 +38,21 @@
$([System.DateTime]::Now.get_DayOfYear().ToString())
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)-alpha
+ 90.$(Minor).$(Build).$(Revision)-alpha
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
preview
@@ -69,19 +69,19 @@
$([System.DateTime]::Now.get_DayOfYear().ToString())
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
preview
@@ -95,20 +95,20 @@
$([System.DateTime]::Now.get_DayOfYear().ToString())
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
- 80.$(Minor).$(Build).$(Revision)
+ 90.$(Minor).$(Build).$(Revision)
preview
@@ -122,7 +122,7 @@
true
en
Peter Wagner (A.K.A Wagnerp) and Simon Coghlan (A.K.A Smurf-IV), Phil Wright (A.K.A ComponentFactory)
- © Krypton Suite (Peter Wagner (Wagnerp) and Simon Coghlan (Smurf-IV)), 2017 - 2023. Component Factory Pty Ltd (Phil Wright), 2006 - 2016. All rights reserved.
+ © Krypton Suite (Peter Wagner (Wagnerp) and Simon Coghlan (Smurf-IV)), 2017 - 2024. Component Factory Pty Ltd (Phil Wright), 2006 - 2016. All rights reserved.
@@ -132,9 +132,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. $(Description)
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description)
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md
@@ -149,9 +149,9 @@
$(PackageId).Nightly
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. $(Description)
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description)
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md
@@ -166,9 +166,9 @@
$(PackageId).Lite
- An extension to the Standard Toolkit, which supports .NET Framework 4.8 and 4.8.1 and .NET 5 - 7. $(Description)
+ An extension to the Standard Toolkit, which supports .NET Framework 4.8 and 4.8.1 and .NET 8 - 9. $(Description)
- This package supports all .NET Framework versions starting .NET Framework 4.8 and 4.8.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.8 and 4.8.1 and .NET 8 - 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md
@@ -181,9 +181,9 @@
$(PackageId)
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. $(Description)
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description)
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md
diff --git a/Source/Krypton Toolkit/Examples/AdvancedDataGridView.Designer.cs b/Source/Krypton Toolkit/Examples/AdvancedDataGridView.Designer.cs
index 0b8d227a8..c778d924b 100644
--- a/Source/Krypton Toolkit/Examples/AdvancedDataGridView.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/AdvancedDataGridView.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class AdvancedDataGridView
{
@@ -98,7 +126,6 @@ private void InitializeComponent()
//
// kbtnApplySavedFilters
//
- this.kbtnApplySavedFilters.CornerRoundingRadius = -1F;
this.kbtnApplySavedFilters.Location = new System.Drawing.Point(1005, 72);
this.kbtnApplySavedFilters.Name = "kbtnApplySavedFilters";
this.kbtnApplySavedFilters.Size = new System.Drawing.Size(90, 25);
@@ -108,7 +135,6 @@ private void InitializeComponent()
//
// kbtnClearFilters
//
- this.kbtnClearFilters.CornerRoundingRadius = -1F;
this.kbtnClearFilters.Location = new System.Drawing.Point(669, 45);
this.kbtnClearFilters.Name = "kbtnClearFilters";
this.kbtnClearFilters.Size = new System.Drawing.Size(179, 25);
@@ -118,7 +144,6 @@ private void InitializeComponent()
//
// kbtnSaveFilters
//
- this.kbtnSaveFilters.CornerRoundingRadius = -1F;
this.kbtnSaveFilters.Location = new System.Drawing.Point(669, 13);
this.kbtnSaveFilters.Name = "kbtnSaveFilters";
this.kbtnSaveFilters.Size = new System.Drawing.Size(180, 25);
@@ -144,7 +169,6 @@ private void InitializeComponent()
//
// kcmbSortSaved
//
- this.kcmbSortSaved.CornerRoundingRadius = -1F;
this.kcmbSortSaved.DropDownWidth = 159;
this.kcmbSortSaved.IntegralHeight = false;
this.kcmbSortSaved.Location = new System.Drawing.Point(937, 39);
@@ -155,7 +179,6 @@ private void InitializeComponent()
//
// kcmbSavedFilters
//
- this.kcmbSavedFilters.CornerRoundingRadius = -1F;
this.kcmbSavedFilters.DropDownWidth = 159;
this.kcmbSavedFilters.IntegralHeight = false;
this.kcmbSavedFilters.Location = new System.Drawing.Point(937, 12);
@@ -218,7 +241,6 @@ private void InitializeComponent()
//
// kcmbMemoryTest
//
- this.kcmbMemoryTest.CornerRoundingRadius = -1F;
this.kcmbMemoryTest.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbMemoryTest.DropDownWidth = 121;
this.kcmbMemoryTest.IntegralHeight = false;
@@ -230,7 +252,6 @@ private void InitializeComponent()
//
// kbtnMemoryTest
//
- this.kbtnMemoryTest.CornerRoundingRadius = -1F;
this.kbtnMemoryTest.Location = new System.Drawing.Point(207, 12);
this.kbtnMemoryTest.Name = "kbtnMemoryTest";
this.kbtnMemoryTest.Size = new System.Drawing.Size(180, 25);
@@ -240,7 +261,6 @@ private void InitializeComponent()
//
// kbtnLoadRandomData
//
- this.kbtnLoadRandomData.CornerRoundingRadius = -1F;
this.kbtnLoadRandomData.Location = new System.Drawing.Point(13, 13);
this.kbtnLoadRandomData.Name = "kbtnLoadRandomData";
this.kbtnLoadRandomData.Size = new System.Drawing.Size(167, 25);
diff --git a/Source/Krypton Toolkit/Examples/AdvancedDataGridView.cs b/Source/Krypton Toolkit/Examples/AdvancedDataGridView.cs
index 6dbc55ea5..1c22c773f 100644
--- a/Source/Krypton Toolkit/Examples/AdvancedDataGridView.cs
+++ b/Source/Krypton Toolkit/Examples/AdvancedDataGridView.cs
@@ -1,12 +1,33 @@
-using System;
-using System.Collections.Generic;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using System.ComponentModel;
using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
using Krypton.Toolkit.Suite.Extended.AdvancedDataGridView;
@@ -308,7 +329,7 @@ private void kryptonAdvancedDataGridViewSearchToolBar1_Search(object sender, Adv
startRow = kadgvMain.CurrentCell.RowIndex + (endcol ? 1 : 0);
}
}
- DataGridViewCell c = kadgvMain.FindCell(
+ DataGridViewCell? c = kadgvMain.FindCell(
e.ValueToSearch,
e.ColumnToSearch != null ? e.ColumnToSearch.Name : null,
startRow,
diff --git a/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.Designer.cs b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.Designer.cs
new file mode 100644
index 000000000..da80a435f
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.Designer.cs
@@ -0,0 +1,630 @@
+namespace Examples
+{
+ partial class BasicToastNotificationTest
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BasicToastNotificationTest));
+ this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kbtnShow = new Krypton.Toolkit.KryptonButton();
+ this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge();
+ this.kryptonBorderEdge2 = new Krypton.Toolkit.KryptonBorderEdge();
+ this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel();
+ this.kcbtnBorderColor2 = new Krypton.Toolkit.KryptonColorButton();
+ this.kcbtnBorderColor1 = new Krypton.Toolkit.KryptonColorButton();
+ this.kryptonGroupBox3 = new Krypton.Toolkit.KryptonGroupBox();
+ this.klblStartLocationX = new Krypton.Toolkit.KryptonLabel();
+ this.kchkSetDefaultLocation = new Krypton.Toolkit.KryptonCheckBox();
+ this.klblStartLocation = new Krypton.Toolkit.KryptonLabel();
+ this.knudStartLocationY = new Krypton.Toolkit.KryptonNumericUpDown();
+ this.knudStartLocationX = new Krypton.Toolkit.KryptonNumericUpDown();
+ this.klblStartLocationY = new Krypton.Toolkit.KryptonLabel();
+ this.knudCountdownSeconds = new Krypton.Toolkit.KryptonNumericUpDown();
+ this.kryptonLabel5 = new Krypton.Toolkit.KryptonLabel();
+ this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox();
+ this.kchkEnableHyperLinks = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkUseRTL = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkReportLocation = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkShowCountDownSecondsOnProgressBar = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkIsDoNotShowAgainOptionChecked = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkUseDoNotShowAgainOptionThreeState = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkUseProgressBar = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkTopMost = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkShowCloseButton = new Krypton.Toolkit.KryptonCheckBox();
+ this.kchkUseFade = new Krypton.Toolkit.KryptonCheckBox();
+ this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox();
+ this.ktxtCustomIconPath = new Krypton.Toolkit.KryptonTextBox();
+ this.bsaBrowseIcon = new Krypton.Toolkit.ButtonSpecAny();
+ this.kcmbNotificationIconType = new Krypton.Toolkit.KryptonComboBox();
+ this.kcmbTitleAlignment = new Krypton.Toolkit.KryptonComboBox();
+ this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel();
+ this.krtbNotificationMessage = new Krypton.Toolkit.KryptonRichTextBox();
+ this.ktxtNotificationTitle = new Krypton.Toolkit.KryptonTextBox();
+ this.kbtnTestText = new Krypton.Toolkit.KryptonButton();
+ this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel();
+ this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ this.kryptonPanel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ this.kryptonPanel2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).BeginInit();
+ this.kryptonGroupBox3.Panel.SuspendLayout();
+ this.kryptonGroupBox3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit();
+ this.kryptonGroupBox2.Panel.SuspendLayout();
+ this.kryptonGroupBox2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit();
+ this.kryptonGroupBox1.Panel.SuspendLayout();
+ this.kryptonGroupBox1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kcmbNotificationIconType)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kcmbTitleAlignment)).BeginInit();
+ this.SuspendLayout();
+ //
+ // kryptonPanel1
+ //
+ this.kryptonPanel1.Controls.Add(this.kbtnShow);
+ this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1);
+ this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.kryptonPanel1.Location = new System.Drawing.Point(0, 646);
+ this.kryptonPanel1.Name = "kryptonPanel1";
+ this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate;
+ this.kryptonPanel1.Size = new System.Drawing.Size(889, 50);
+ this.kryptonPanel1.TabIndex = 1;
+ //
+ // kbtnShow
+ //
+ this.kbtnShow.Location = new System.Drawing.Point(776, 13);
+ this.kbtnShow.Name = "kbtnShow";
+ this.kbtnShow.Size = new System.Drawing.Size(90, 25);
+ this.kbtnShow.TabIndex = 1;
+ this.kbtnShow.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnShow.Values.Text = "Show";
+ this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click);
+ //
+ // kryptonBorderEdge1
+ //
+ this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary;
+ this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0);
+ this.kryptonBorderEdge1.Name = "kryptonBorderEdge1";
+ this.kryptonBorderEdge1.Size = new System.Drawing.Size(889, 1);
+ this.kryptonBorderEdge1.Text = "kryptonBorderEdge1";
+ //
+ // kryptonBorderEdge2
+ //
+ this.kryptonBorderEdge2.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary;
+ this.kryptonBorderEdge2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.kryptonBorderEdge2.Location = new System.Drawing.Point(0, 645);
+ this.kryptonBorderEdge2.Name = "kryptonBorderEdge2";
+ this.kryptonBorderEdge2.Size = new System.Drawing.Size(889, 1);
+ this.kryptonBorderEdge2.Text = "kryptonBorderEdge2";
+ //
+ // kryptonPanel2
+ //
+ this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor2);
+ this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor1);
+ this.kryptonPanel2.Controls.Add(this.kryptonGroupBox3);
+ this.kryptonPanel2.Controls.Add(this.knudCountdownSeconds);
+ this.kryptonPanel2.Controls.Add(this.kryptonLabel5);
+ this.kryptonPanel2.Controls.Add(this.kryptonGroupBox2);
+ this.kryptonPanel2.Controls.Add(this.kryptonGroupBox1);
+ this.kryptonPanel2.Controls.Add(this.kcmbTitleAlignment);
+ this.kryptonPanel2.Controls.Add(this.kryptonLabel3);
+ this.kryptonPanel2.Controls.Add(this.krtbNotificationMessage);
+ this.kryptonPanel2.Controls.Add(this.ktxtNotificationTitle);
+ this.kryptonPanel2.Controls.Add(this.kbtnTestText);
+ this.kryptonPanel2.Controls.Add(this.kryptonLabel2);
+ this.kryptonPanel2.Controls.Add(this.kryptonLabel1);
+ this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.kryptonPanel2.Location = new System.Drawing.Point(0, 0);
+ this.kryptonPanel2.Name = "kryptonPanel2";
+ this.kryptonPanel2.Size = new System.Drawing.Size(889, 645);
+ this.kryptonPanel2.TabIndex = 4;
+ //
+ // kcbtnBorderColor2
+ //
+ this.kcbtnBorderColor2.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle;
+ this.kcbtnBorderColor2.Location = new System.Drawing.Point(602, 165);
+ this.kcbtnBorderColor2.Name = "kcbtnBorderColor2";
+ this.kcbtnBorderColor2.Size = new System.Drawing.Size(166, 25);
+ this.kcbtnBorderColor2.TabIndex = 27;
+ this.kcbtnBorderColor2.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor2.Values.Image")));
+ this.kcbtnBorderColor2.Values.RoundedCorners = 8;
+ this.kcbtnBorderColor2.Values.Text = "Border Color 2";
+ this.kcbtnBorderColor2.SelectedColorChanged += new System.EventHandler(this.kcbtnBorderColor2_SelectedColorChanged);
+ //
+ // kcbtnBorderColor1
+ //
+ this.kcbtnBorderColor1.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle;
+ this.kcbtnBorderColor1.Location = new System.Drawing.Point(430, 165);
+ this.kcbtnBorderColor1.Name = "kcbtnBorderColor1";
+ this.kcbtnBorderColor1.Size = new System.Drawing.Size(166, 25);
+ this.kcbtnBorderColor1.TabIndex = 26;
+ this.kcbtnBorderColor1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor1.Values.Image")));
+ this.kcbtnBorderColor1.Values.RoundedCorners = 8;
+ this.kcbtnBorderColor1.Values.Text = "Border Color 1";
+ this.kcbtnBorderColor1.SelectedColorChanged += new System.EventHandler(this.kcbtnBorderColor1_SelectedColorChanged);
+ //
+ // kryptonGroupBox3
+ //
+ this.kryptonGroupBox3.Location = new System.Drawing.Point(430, 13);
+ this.kryptonGroupBox3.Name = "kryptonGroupBox3";
+ //
+ // kryptonGroupBox3.Panel
+ //
+ this.kryptonGroupBox3.Panel.Controls.Add(this.klblStartLocationX);
+ this.kryptonGroupBox3.Panel.Controls.Add(this.kchkSetDefaultLocation);
+ this.kryptonGroupBox3.Panel.Controls.Add(this.klblStartLocation);
+ this.kryptonGroupBox3.Panel.Controls.Add(this.knudStartLocationY);
+ this.kryptonGroupBox3.Panel.Controls.Add(this.knudStartLocationX);
+ this.kryptonGroupBox3.Panel.Controls.Add(this.klblStartLocationY);
+ this.kryptonGroupBox3.Size = new System.Drawing.Size(443, 146);
+ this.kryptonGroupBox3.TabIndex = 23;
+ //
+ // klblStartLocationX
+ //
+ this.klblStartLocationX.Enabled = false;
+ this.klblStartLocationX.Location = new System.Drawing.Point(12, 73);
+ this.klblStartLocationX.Name = "klblStartLocationX";
+ this.klblStartLocationX.Size = new System.Drawing.Size(20, 20);
+ this.klblStartLocationX.TabIndex = 23;
+ this.klblStartLocationX.Values.Text = "X:";
+ //
+ // kchkSetDefaultLocation
+ //
+ this.kchkSetDefaultLocation.Location = new System.Drawing.Point(12, 11);
+ this.kchkSetDefaultLocation.Name = "kchkSetDefaultLocation";
+ this.kchkSetDefaultLocation.Size = new System.Drawing.Size(133, 20);
+ this.kchkSetDefaultLocation.TabIndex = 22;
+ this.kchkSetDefaultLocation.Values.Text = "Set Default Location";
+ this.kchkSetDefaultLocation.CheckedChanged += new System.EventHandler(this.kchkSetDefaultLocation_CheckedChanged);
+ //
+ // klblStartLocation
+ //
+ this.klblStartLocation.Enabled = false;
+ this.klblStartLocation.Location = new System.Drawing.Point(12, 47);
+ this.klblStartLocation.Name = "klblStartLocation";
+ this.klblStartLocation.Size = new System.Drawing.Size(89, 20);
+ this.klblStartLocation.TabIndex = 18;
+ this.klblStartLocation.Values.Text = "Start Location:";
+ //
+ // knudStartLocationY
+ //
+ this.knudStartLocationY.Enabled = false;
+ this.knudStartLocationY.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationY.Location = new System.Drawing.Point(193, 73);
+ this.knudStartLocationY.Maximum = new decimal(new int[] {
+ 180,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationY.Minimum = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationY.Name = "knudStartLocationY";
+ this.knudStartLocationY.Size = new System.Drawing.Size(120, 22);
+ this.knudStartLocationY.TabIndex = 21;
+ this.knudStartLocationY.Value = new decimal(new int[] {
+ 60,
+ 0,
+ 0,
+ 0});
+ //
+ // knudStartLocationX
+ //
+ this.knudStartLocationX.Enabled = false;
+ this.knudStartLocationX.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationX.Location = new System.Drawing.Point(38, 73);
+ this.knudStartLocationX.Maximum = new decimal(new int[] {
+ 180,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationX.Minimum = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 0});
+ this.knudStartLocationX.Name = "knudStartLocationX";
+ this.knudStartLocationX.Size = new System.Drawing.Size(120, 22);
+ this.knudStartLocationX.TabIndex = 19;
+ this.knudStartLocationX.Value = new decimal(new int[] {
+ 60,
+ 0,
+ 0,
+ 0});
+ //
+ // klblStartLocationY
+ //
+ this.klblStartLocationY.Enabled = false;
+ this.klblStartLocationY.Location = new System.Drawing.Point(164, 73);
+ this.klblStartLocationY.Name = "klblStartLocationY";
+ this.klblStartLocationY.Size = new System.Drawing.Size(23, 20);
+ this.klblStartLocationY.TabIndex = 20;
+ this.klblStartLocationY.Values.Text = " Y:";
+ //
+ // knudCountdownSeconds
+ //
+ this.knudCountdownSeconds.Increment = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ this.knudCountdownSeconds.Location = new System.Drawing.Point(569, 206);
+ this.knudCountdownSeconds.Maximum = new decimal(new int[] {
+ 180,
+ 0,
+ 0,
+ 0});
+ this.knudCountdownSeconds.Minimum = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 0});
+ this.knudCountdownSeconds.Name = "knudCountdownSeconds";
+ this.knudCountdownSeconds.Size = new System.Drawing.Size(272, 22);
+ this.knudCountdownSeconds.TabIndex = 17;
+ this.knudCountdownSeconds.Value = new decimal(new int[] {
+ 60,
+ 0,
+ 0,
+ 0});
+ this.knudCountdownSeconds.ValueChanged += new System.EventHandler(this.knudCountdownSeconds_ValueChanged);
+ //
+ // kryptonLabel5
+ //
+ this.kryptonLabel5.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel;
+ this.kryptonLabel5.Location = new System.Drawing.Point(430, 206);
+ this.kryptonLabel5.Name = "kryptonLabel5";
+ this.kryptonLabel5.Size = new System.Drawing.Size(133, 20);
+ this.kryptonLabel5.TabIndex = 16;
+ this.kryptonLabel5.Values.Text = "Countdown Seconds:";
+ //
+ // kryptonGroupBox2
+ //
+ this.kryptonGroupBox2.Location = new System.Drawing.Point(124, 348);
+ this.kryptonGroupBox2.Name = "kryptonGroupBox2";
+ //
+ // kryptonGroupBox2.Panel
+ //
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkEnableHyperLinks);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkUseRTL);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkReportLocation);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkShowCountDownSecondsOnProgressBar);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkIsDoNotShowAgainOptionChecked);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkUseDoNotShowAgainOptionThreeState);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkUseProgressBar);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkDoNotShowAgain);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkTopMost);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkShowCloseButton);
+ this.kryptonGroupBox2.Panel.Controls.Add(this.kchkUseFade);
+ this.kryptonGroupBox2.Size = new System.Drawing.Size(300, 251);
+ this.kryptonGroupBox2.TabIndex = 8;
+ this.kryptonGroupBox2.Values.Heading = "Options";
+ //
+ // kchkEnableHyperLinks
+ //
+ this.kchkEnableHyperLinks.Location = new System.Drawing.Point(13, 202);
+ this.kchkEnableHyperLinks.Name = "kchkEnableHyperLinks";
+ this.kchkEnableHyperLinks.Size = new System.Drawing.Size(123, 20);
+ this.kchkEnableHyperLinks.TabIndex = 28;
+ this.kchkEnableHyperLinks.Values.Text = "Enable HyperLinks";
+ this.kchkEnableHyperLinks.CheckedChanged += new System.EventHandler(this.kchkEnableHyperLinks_CheckedChanged);
+ //
+ // kchkUseRTL
+ //
+ this.kchkUseRTL.Location = new System.Drawing.Point(157, 175);
+ this.kchkUseRTL.Name = "kchkUseRTL";
+ this.kchkUseRTL.Size = new System.Drawing.Size(67, 20);
+ this.kchkUseRTL.TabIndex = 27;
+ this.kchkUseRTL.Values.Text = "Use RTL";
+ this.kchkUseRTL.CheckedChanged += new System.EventHandler(this.kchkUseRTL_CheckedChanged);
+ //
+ // kchkReportLocation
+ //
+ this.kchkReportLocation.Location = new System.Drawing.Point(13, 175);
+ this.kchkReportLocation.Name = "kchkReportLocation";
+ this.kchkReportLocation.Size = new System.Drawing.Size(138, 20);
+ this.kchkReportLocation.TabIndex = 8;
+ this.kchkReportLocation.Values.Text = "Report toast location";
+ this.kchkReportLocation.CheckedChanged += new System.EventHandler(this.kchkReportLocation_CheckedChanged);
+ //
+ // kchkShowCountDownSecondsOnProgressBar
+ //
+ this.kchkShowCountDownSecondsOnProgressBar.Enabled = false;
+ this.kchkShowCountDownSecondsOnProgressBar.Location = new System.Drawing.Point(13, 148);
+ this.kchkShowCountDownSecondsOnProgressBar.Name = "kchkShowCountDownSecondsOnProgressBar";
+ this.kchkShowCountDownSecondsOnProgressBar.Size = new System.Drawing.Size(259, 20);
+ this.kchkShowCountDownSecondsOnProgressBar.TabIndex = 7;
+ this.kchkShowCountDownSecondsOnProgressBar.Values.Text = "Show count down seconds on progress bar";
+ this.kchkShowCountDownSecondsOnProgressBar.CheckedChanged += new System.EventHandler(this.kchkShowCountDownSecondsOnProgressBar_CheckedChanged);
+ //
+ // kchkIsDoNotShowAgainOptionChecked
+ //
+ this.kchkIsDoNotShowAgainOptionChecked.Enabled = false;
+ this.kchkIsDoNotShowAgainOptionChecked.Location = new System.Drawing.Point(13, 95);
+ this.kchkIsDoNotShowAgainOptionChecked.Name = "kchkIsDoNotShowAgainOptionChecked";
+ this.kchkIsDoNotShowAgainOptionChecked.Size = new System.Drawing.Size(224, 20);
+ this.kchkIsDoNotShowAgainOptionChecked.TabIndex = 6;
+ this.kchkIsDoNotShowAgainOptionChecked.Values.Text = "Is do not show again option checked";
+ this.kchkIsDoNotShowAgainOptionChecked.CheckedChanged += new System.EventHandler(this.kchkIsDoNotShowAgainOptionChecked_CheckedChanged);
+ //
+ // kchkUseDoNotShowAgainOptionThreeState
+ //
+ this.kchkUseDoNotShowAgainOptionThreeState.Enabled = false;
+ this.kchkUseDoNotShowAgainOptionThreeState.Location = new System.Drawing.Point(13, 68);
+ this.kchkUseDoNotShowAgainOptionThreeState.Name = "kchkUseDoNotShowAgainOptionThreeState";
+ this.kchkUseDoNotShowAgainOptionThreeState.Size = new System.Drawing.Size(250, 20);
+ this.kchkUseDoNotShowAgainOptionThreeState.TabIndex = 5;
+ this.kchkUseDoNotShowAgainOptionThreeState.Values.Text = "Use do not show again option ThreeState";
+ this.kchkUseDoNotShowAgainOptionThreeState.CheckedChanged += new System.EventHandler(this.kchkUseDoNotShowAgainOptionThreeState_CheckedChanged);
+ //
+ // kchkUseProgressBar
+ //
+ this.kchkUseProgressBar.Location = new System.Drawing.Point(13, 121);
+ this.kchkUseProgressBar.Name = "kchkUseProgressBar";
+ this.kchkUseProgressBar.Size = new System.Drawing.Size(116, 20);
+ this.kchkUseProgressBar.TabIndex = 4;
+ this.kchkUseProgressBar.Values.Text = "Use progress bar";
+ this.kchkUseProgressBar.CheckedChanged += new System.EventHandler(this.kchkUseProgressBar_CheckedChanged);
+ //
+ // kchkDoNotShowAgain
+ //
+ this.kchkDoNotShowAgain.Location = new System.Drawing.Point(93, 41);
+ this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain";
+ this.kchkDoNotShowAgain.Size = new System.Drawing.Size(197, 20);
+ this.kchkDoNotShowAgain.TabIndex = 3;
+ this.kchkDoNotShowAgain.Values.Text = "Show do not show again option";
+ this.kchkDoNotShowAgain.CheckedChanged += new System.EventHandler(this.kchkDoNotShowAgain_CheckedChanged);
+ //
+ // kchkTopMost
+ //
+ this.kchkTopMost.Location = new System.Drawing.Point(13, 41);
+ this.kchkTopMost.Name = "kchkTopMost";
+ this.kchkTopMost.Size = new System.Drawing.Size(76, 20);
+ this.kchkTopMost.TabIndex = 2;
+ this.kchkTopMost.Values.Text = "Top Most";
+ this.kchkTopMost.CheckedChanged += new System.EventHandler(this.kchkTopMost_CheckedChanged);
+ //
+ // kchkShowCloseButton
+ //
+ this.kchkShowCloseButton.Location = new System.Drawing.Point(93, 14);
+ this.kchkShowCloseButton.Name = "kchkShowCloseButton";
+ this.kchkShowCloseButton.Size = new System.Drawing.Size(126, 20);
+ this.kchkShowCloseButton.TabIndex = 1;
+ this.kchkShowCloseButton.Values.Text = "Show Close Button";
+ this.kchkShowCloseButton.CheckedChanged += new System.EventHandler(this.kchkShowCloseButton_CheckedChanged);
+ //
+ // kchkUseFade
+ //
+ this.kchkUseFade.Enabled = false;
+ this.kchkUseFade.Location = new System.Drawing.Point(13, 14);
+ this.kchkUseFade.Name = "kchkUseFade";
+ this.kchkUseFade.Size = new System.Drawing.Size(73, 20);
+ this.kchkUseFade.TabIndex = 0;
+ this.kchkUseFade.Values.Text = "Use Fade";
+ //
+ // kryptonGroupBox1
+ //
+ this.kryptonGroupBox1.Location = new System.Drawing.Point(124, 235);
+ this.kryptonGroupBox1.Name = "kryptonGroupBox1";
+ //
+ // kryptonGroupBox1.Panel
+ //
+ this.kryptonGroupBox1.Panel.Controls.Add(this.ktxtCustomIconPath);
+ this.kryptonGroupBox1.Panel.Controls.Add(this.kcmbNotificationIconType);
+ this.kryptonGroupBox1.Size = new System.Drawing.Size(300, 106);
+ this.kryptonGroupBox1.TabIndex = 7;
+ this.kryptonGroupBox1.Values.Heading = "Icon";
+ //
+ // ktxtCustomIconPath
+ //
+ this.ktxtCustomIconPath.ButtonSpecs.Add(this.bsaBrowseIcon);
+ this.ktxtCustomIconPath.Enabled = false;
+ this.ktxtCustomIconPath.Location = new System.Drawing.Point(13, 42);
+ this.ktxtCustomIconPath.Name = "ktxtCustomIconPath";
+ this.ktxtCustomIconPath.Size = new System.Drawing.Size(235, 24);
+ this.ktxtCustomIconPath.TabIndex = 1;
+ //
+ // bsaBrowseIcon
+ //
+ this.bsaBrowseIcon.Text = "...";
+ this.bsaBrowseIcon.UniqueName = "7d9ab43ed4574cfdbde5e50de62f081e";
+ //
+ // kcmbNotificationIconType
+ //
+ this.kcmbNotificationIconType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.kcmbNotificationIconType.DropDownWidth = 235;
+ this.kcmbNotificationIconType.IntegralHeight = false;
+ this.kcmbNotificationIconType.Location = new System.Drawing.Point(13, 13);
+ this.kcmbNotificationIconType.Name = "kcmbNotificationIconType";
+ this.kcmbNotificationIconType.Size = new System.Drawing.Size(235, 22);
+ this.kcmbNotificationIconType.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
+ this.kcmbNotificationIconType.TabIndex = 0;
+ this.kcmbNotificationIconType.SelectedIndexChanged += new System.EventHandler(this.kcmbNotificationIconType_SelectedIndexChanged);
+ //
+ // kcmbTitleAlignment
+ //
+ this.kcmbTitleAlignment.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.kcmbTitleAlignment.DropDownWidth = 300;
+ this.kcmbTitleAlignment.IntegralHeight = false;
+ this.kcmbTitleAlignment.Location = new System.Drawing.Point(124, 206);
+ this.kcmbTitleAlignment.Name = "kcmbTitleAlignment";
+ this.kcmbTitleAlignment.Size = new System.Drawing.Size(300, 22);
+ this.kcmbTitleAlignment.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
+ this.kcmbTitleAlignment.TabIndex = 6;
+ //
+ // kryptonLabel3
+ //
+ this.kryptonLabel3.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel;
+ this.kryptonLabel3.Location = new System.Drawing.Point(13, 206);
+ this.kryptonLabel3.Name = "kryptonLabel3";
+ this.kryptonLabel3.Size = new System.Drawing.Size(104, 20);
+ this.kryptonLabel3.TabIndex = 5;
+ this.kryptonLabel3.Values.Text = "Title Alignment:";
+ //
+ // krtbNotificationMessage
+ //
+ this.krtbNotificationMessage.Location = new System.Drawing.Point(124, 42);
+ this.krtbNotificationMessage.Name = "krtbNotificationMessage";
+ this.krtbNotificationMessage.Size = new System.Drawing.Size(300, 158);
+ this.krtbNotificationMessage.TabIndex = 4;
+ this.krtbNotificationMessage.Text = "Enter the notification message here...";
+ this.krtbNotificationMessage.TextChanged += new System.EventHandler(this.krtbNotificationMessage_TextChanged);
+ //
+ // ktxtNotificationTitle
+ //
+ this.ktxtNotificationTitle.Location = new System.Drawing.Point(124, 13);
+ this.ktxtNotificationTitle.Name = "ktxtNotificationTitle";
+ this.ktxtNotificationTitle.Size = new System.Drawing.Size(300, 23);
+ this.ktxtNotificationTitle.TabIndex = 3;
+ this.ktxtNotificationTitle.Text = "Put the notification title here";
+ //
+ // kbtnTestText
+ //
+ this.kbtnTestText.Location = new System.Drawing.Point(13, 91);
+ this.kbtnTestText.Name = "kbtnTestText";
+ this.kbtnTestText.Size = new System.Drawing.Size(88, 80);
+ this.kbtnTestText.TabIndex = 2;
+ this.kbtnTestText.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnTestText.Values.Text = "Use\r\nTest\r\nText";
+ this.kbtnTestText.Click += new System.EventHandler(this.kbtnTestText_Click);
+ //
+ // kryptonLabel2
+ //
+ this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel;
+ this.kryptonLabel2.Location = new System.Drawing.Point(13, 40);
+ this.kryptonLabel2.Name = "kryptonLabel2";
+ this.kryptonLabel2.Size = new System.Drawing.Size(64, 20);
+ this.kryptonLabel2.TabIndex = 1;
+ this.kryptonLabel2.Values.Text = "Message:";
+ //
+ // kryptonLabel1
+ //
+ this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel;
+ this.kryptonLabel1.Location = new System.Drawing.Point(13, 13);
+ this.kryptonLabel1.Name = "kryptonLabel1";
+ this.kryptonLabel1.Size = new System.Drawing.Size(40, 20);
+ this.kryptonLabel1.TabIndex = 0;
+ this.kryptonLabel1.Values.Text = "Title:";
+ //
+ // BasicToastNotificationTest
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(889, 696);
+ this.Controls.Add(this.kryptonPanel2);
+ this.Controls.Add(this.kryptonBorderEdge2);
+ this.Controls.Add(this.kryptonPanel1);
+ this.Name = "BasicToastNotificationTest";
+ this.Text = "BasicToastNotificationTest";
+ this.Load += new System.EventHandler(this.BasicToastNotificationTest_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ this.kryptonPanel1.ResumeLayout(false);
+ this.kryptonPanel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ this.kryptonPanel2.ResumeLayout(false);
+ this.kryptonPanel2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).EndInit();
+ this.kryptonGroupBox3.Panel.ResumeLayout(false);
+ this.kryptonGroupBox3.Panel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).EndInit();
+ this.kryptonGroupBox3.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit();
+ this.kryptonGroupBox2.Panel.ResumeLayout(false);
+ this.kryptonGroupBox2.Panel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit();
+ this.kryptonGroupBox2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit();
+ this.kryptonGroupBox1.Panel.ResumeLayout(false);
+ this.kryptonGroupBox1.Panel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit();
+ this.kryptonGroupBox1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.kcmbNotificationIconType)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kcmbTitleAlignment)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private KryptonPanel kryptonPanel1;
+ private KryptonButton kbtnShow;
+ private KryptonBorderEdge kryptonBorderEdge1;
+ private KryptonBorderEdge kryptonBorderEdge2;
+ private KryptonPanel kryptonPanel2;
+ private KryptonRichTextBox krtbNotificationMessage;
+ private KryptonTextBox ktxtNotificationTitle;
+ private KryptonButton kbtnTestText;
+ private KryptonLabel kryptonLabel2;
+ private KryptonLabel kryptonLabel1;
+ private KryptonGroupBox kryptonGroupBox1;
+ private KryptonTextBox ktxtCustomIconPath;
+ private KryptonComboBox kcmbNotificationIconType;
+ private KryptonComboBox kcmbTitleAlignment;
+ private KryptonLabel kryptonLabel3;
+ private KryptonGroupBox kryptonGroupBox2;
+ private KryptonCheckBox kchkShowCloseButton;
+ private KryptonCheckBox kchkUseFade;
+ private ButtonSpecAny bsaBrowseIcon;
+ private KryptonCheckBox kchkDoNotShowAgain;
+ private KryptonCheckBox kchkTopMost;
+ private KryptonCheckBox kchkUseDoNotShowAgainOptionThreeState;
+ private KryptonCheckBox kchkUseProgressBar;
+ private KryptonCheckBox kchkIsDoNotShowAgainOptionChecked;
+ private KryptonCheckBox kchkShowCountDownSecondsOnProgressBar;
+ private KryptonCheckBox kchkReportLocation;
+ private KryptonColorButton kcbtnBorderColor2;
+ private KryptonColorButton kcbtnBorderColor1;
+ private KryptonGroupBox kryptonGroupBox3;
+ private KryptonLabel klblStartLocationX;
+ private KryptonCheckBox kchkSetDefaultLocation;
+ private KryptonLabel klblStartLocation;
+ private KryptonNumericUpDown knudStartLocationY;
+ private KryptonNumericUpDown knudStartLocationX;
+ private KryptonLabel klblStartLocationY;
+ private KryptonNumericUpDown knudCountdownSeconds;
+ private KryptonLabel kryptonLabel5;
+ private KryptonCheckBox kchkUseRTL;
+ private KryptonCheckBox kchkEnableHyperLinks;
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.cs b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.cs
new file mode 100644
index 000000000..73170a67b
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.cs
@@ -0,0 +1,277 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Examples
+{
+ public partial class BasicToastNotificationTest : KryptonForm
+ {
+ #region Instance Fields
+
+ private bool _showCloseBox;
+ private bool _topMost;
+ private bool _useFade;
+ private bool _reportToastLocation;
+ private bool _showDoNotShowAgainOption;
+ private bool _enableHyperLinks;
+ private KryptonUseRTLLayout _useRtlReading;
+ private Color _borderColor1;
+ private Color _borderColor2;
+ private PaletteRelativeAlign _titleAlignment;
+ private Font _contentFont;
+ private Font _titleFont;
+ private int _countDownSeconds;
+ private KryptonToastNotificationIcon _notificationIcon;
+ private string _notificationTitleText;
+ private string _notificationContentText;
+
+ #endregion
+
+ #region Constants
+
+ private const string SEED_TEXT = @"MIT License
+
+Copyright (c) 2017 - 2024 Krypton Suite
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the ""Software""), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.";
+
+ #endregion
+
+ public BasicToastNotificationTest()
+ {
+ InitializeComponent();
+ }
+
+ private void BasicToastNotificationTest_Load(object sender, EventArgs e)
+ {
+ // Set defaults
+ _showCloseBox = false;
+ _topMost = true;
+ _useFade = false;
+ _reportToastLocation = false;
+ _showDoNotShowAgainOption = false;
+ _enableHyperLinks = true;
+ _titleAlignment = PaletteRelativeAlign.Inherit;
+ _countDownSeconds = 60;
+ _notificationIcon = KryptonToastNotificationIcon.Information;
+ _notificationTitleText = ktxtNotificationTitle.Text;
+ _notificationContentText = krtbNotificationMessage.Text;
+ _borderColor1 = Color.Empty;
+ _borderColor2 = Color.Empty;
+ _useRtlReading = KryptonUseRTLLayout.No;
+
+ kcbtnBorderColor1.SelectedColor = Color.Empty;
+ kcbtnBorderColor2.SelectedColor = Color.Empty;
+
+ foreach (var value in Enum.GetValues(typeof(KryptonToastNotificationIcon)))
+ {
+ kcmbNotificationIconType.Items.Add(value.ToString());
+ }
+
+ kcmbNotificationIconType.SelectedIndex = 8;
+
+ foreach (var value in Enum.GetValues(typeof(PaletteRelativeAlign)))
+ {
+ kcmbTitleAlignment.Items.Add(value.ToString());
+ }
+
+ kcmbTitleAlignment.SelectedIndex = 3;
+
+ //knudStartLocationX.Maximum = GraphicsExtensions.GetWorkingArea().Width;
+
+ //knudStartLocationX.Value = GraphicsExtensions.GetWorkingArea().Width - Width - 5;
+
+ //knudStartLocationY.Maximum = GraphicsExtensions.GetWorkingArea().Height;
+
+ //knudStartLocationY.Value = GraphicsExtensions.GetWorkingArea().Height - Height - 5;
+ }
+
+ private void kbtnShow_Click(object sender, EventArgs e)
+ {
+ Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonBasicToastNotificationData notificationData = new Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonBasicToastNotificationData()
+ {
+ CountDownSeconds = _countDownSeconds,
+ CustomImage = null,
+ NotificationContent = _notificationContentText,
+ NotificationTitle = _notificationTitleText,
+ NotificationContentFont = _contentFont,
+ NotificationTitleFont = _titleFont,
+ NotificationIcon = _notificationIcon,
+ EnableHyperLinks = _enableHyperLinks,
+ NotificationLocation = null,
+ ShowDoNotShowAgainOption = _showDoNotShowAgainOption,
+ TopMost = _topMost,
+ UseFade = _useFade,
+ ShowCloseButton = _showCloseBox,
+ ReportToastLocation = _reportToastLocation,
+ TitleAlignment = _titleAlignment,
+ BorderColor1 = _borderColor1,
+ BorderColor2 = _borderColor2,
+ UseRtlReading = _useRtlReading
+ };
+
+ Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonBasicToastNotificationData notificationDataWithLocation = new Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonBasicToastNotificationData()
+ {
+ CountDownSeconds = _countDownSeconds,
+ CustomImage = null,
+ NotificationContent = _notificationContentText,
+ NotificationTitle = _notificationTitleText,
+ NotificationContentFont = _contentFont,
+ NotificationTitleFont = _titleFont,
+ NotificationIcon = _notificationIcon,
+ NotificationLocation = new Point((int)knudStartLocationX.Value, (int)knudStartLocationY.Value),
+ TitleAlignment = _titleAlignment,
+ TopMost = _topMost,
+ UseFade = _useFade,
+ ShowCloseButton = _showCloseBox,
+ EnableHyperLinks = _enableHyperLinks
+ };
+
+ if (kchkUseProgressBar.Checked)
+ {
+ Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonToastNotification.ShowBasicProgressBarNotification(notificationData);
+ }
+ else
+ {
+ Krypton.Toolkit.Suite.Extended.ToastNotification.KryptonToastNotification.ShowBasicToastNotification(notificationData);
+ }
+ }
+
+ private void kchkShowCloseButton_CheckedChanged(object sender, EventArgs e)
+ {
+ _showCloseBox = kchkShowCloseButton.Checked;
+ }
+
+ private void kchkTopMost_CheckedChanged(object sender, EventArgs e)
+ {
+ _topMost = kchkTopMost.Checked;
+ }
+
+ private void kchkDoNotShowAgain_CheckedChanged(object sender, EventArgs e)
+ {
+ _showDoNotShowAgainOption = kchkDoNotShowAgain.Checked;
+ }
+
+ private void kchkUseDoNotShowAgainOptionThreeState_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kchkIsDoNotShowAgainOptionChecked_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kchkUseProgressBar_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kchkShowCountDownSecondsOnProgressBar_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kchkReportLocation_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kchkUseRTL_CheckedChanged(object sender, EventArgs e)
+ {
+ _useRtlReading = kchkUseRTL.Checked ? KryptonUseRTLLayout.Yes : KryptonUseRTLLayout.No;
+ }
+
+ private void kchkSetDefaultLocation_CheckedChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void kcbtnBorderColor1_SelectedColorChanged(object sender, ColorEventArgs e)
+ {
+
+ }
+
+ private void kcbtnBorderColor2_SelectedColorChanged(object sender, ColorEventArgs e)
+ {
+
+ }
+
+ private void kbtnTestText_Click(object sender, EventArgs e)
+ {
+ krtbNotificationMessage.Text = SEED_TEXT;
+ }
+
+ private void knudCountdownSeconds_ValueChanged(object sender, EventArgs e)
+ {
+ _countDownSeconds = Convert.ToInt32(knudCountdownSeconds.Value);
+ }
+
+ private void kchkEnableHyperLinks_CheckedChanged(object sender, EventArgs e)
+ {
+ _enableHyperLinks = kchkEnableHyperLinks.Checked;
+ }
+
+ private void krtbNotificationMessage_TextChanged(object sender, EventArgs e)
+ {
+ _notificationContentText = krtbNotificationMessage.Text;
+ }
+
+ private void kcmbNotificationIconType_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ _notificationIcon = (KryptonToastNotificationIcon)Enum.Parse(typeof(KryptonToastNotificationIcon),
+ kcmbNotificationIconType.Text);
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.resx b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.resx
new file mode 100644
index 000000000..85104d505
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/BasicToastNotificationTest.resx
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
+ DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj
+ AAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
+ DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj
+ AAAAAElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ButtonItems.Designer.cs b/Source/Krypton Toolkit/Examples/ButtonItems.Designer.cs
index a842ef2b6..2466ee1de 100644
--- a/Source/Krypton Toolkit/Examples/ButtonItems.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ButtonItems.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ButtonItems
{
@@ -72,7 +100,6 @@ private void InitializeComponent()
this.kryptonDialogButtonExtended1.AcceptButtonBackColour2 = System.Drawing.Color.Green;
this.kryptonDialogButtonExtended1.AcceptButtonTextColour1 = System.Drawing.Color.Empty;
this.kryptonDialogButtonExtended1.AcceptButtonTextColour2 = System.Drawing.Color.Empty;
- this.kryptonDialogButtonExtended1.CornerRoundingRadius = -1F;
this.kryptonDialogButtonExtended1.DenyButtonBackColour1 = System.Drawing.Color.Red;
this.kryptonDialogButtonExtended1.DenyButtonBackColour2 = System.Drawing.Color.Red;
this.kryptonDialogButtonExtended1.DenyButtonTextColour1 = System.Drawing.Color.Empty;
@@ -89,7 +116,6 @@ private void InitializeComponent()
//
// kryptonYesDialogButton1
//
- this.kryptonYesDialogButton1.CornerRoundingRadius = -1F;
this.kryptonYesDialogButton1.DialogResult = System.Windows.Forms.DialogResult.Yes;
this.kryptonYesDialogButton1.Location = new System.Drawing.Point(112, 10);
this.kryptonYesDialogButton1.Name = "kryptonYesDialogButton1";
@@ -111,7 +137,6 @@ private void InitializeComponent()
//
this.kryptonuacButtonVersion21.AutoSize = true;
this.kryptonuacButtonVersion21.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.kryptonuacButtonVersion21.CornerRoundingRadius = -1F;
this.kryptonuacButtonVersion21.CustomShieldSize = new System.Drawing.Size(0, 0);
this.kryptonuacButtonVersion21.ExtraArguments = null;
this.kryptonuacButtonVersion21.Location = new System.Drawing.Point(141, 37);
@@ -127,7 +152,6 @@ private void InitializeComponent()
// kryptonuacButtonVersion11
//
this.kryptonuacButtonVersion11.AssemblyToElevate = null;
- this.kryptonuacButtonVersion11.CornerRoundingRadius = -1F;
this.kryptonuacButtonVersion11.Location = new System.Drawing.Point(10, 37);
this.kryptonuacButtonVersion11.Name = "kryptonuacButtonVersion11";
this.kryptonuacButtonVersion11.Size = new System.Drawing.Size(116, 23);
@@ -138,7 +162,6 @@ private void InitializeComponent()
// kryptonSplitButton1
//
this.kryptonSplitButton1.AutoSize = true;
- this.kryptonSplitButton1.CornerRoundingRadius = -1F;
this.kryptonSplitButton1.Location = new System.Drawing.Point(465, 10);
this.kryptonSplitButton1.Name = "kryptonSplitButton1";
this.kryptonSplitButton1.ProcessPath = null;
@@ -150,7 +173,6 @@ private void InitializeComponent()
//
// kryptonokDialogButton1
//
- this.kryptonokDialogButton1.CornerRoundingRadius = -1F;
this.kryptonokDialogButton1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.kryptonokDialogButton1.Location = new System.Drawing.Point(30, 10);
this.kryptonokDialogButton1.Name = "kryptonokDialogButton1";
@@ -161,7 +183,6 @@ private void InitializeComponent()
//
// kryptonnoDialogButton1
//
- this.kryptonnoDialogButton1.CornerRoundingRadius = -1F;
this.kryptonnoDialogButton1.DialogResult = System.Windows.Forms.DialogResult.No;
this.kryptonnoDialogButton1.Location = new System.Drawing.Point(195, 10);
this.kryptonnoDialogButton1.Name = "kryptonnoDialogButton1";
@@ -172,7 +193,6 @@ private void InitializeComponent()
//
// kryptonCommandLinkVersion21
//
- this.kryptonCommandLinkVersion21.CornerRoundingRadius = -1F;
this.kryptonCommandLinkVersion21.Location = new System.Drawing.Point(230, 152);
this.kryptonCommandLinkVersion21.Name = "kryptonCommandLinkVersion21";
this.kryptonCommandLinkVersion21.ProcessToElevate = null;
@@ -202,7 +222,6 @@ private void InitializeComponent()
//
// kryptonCancelDialogButton1
//
- this.kryptonCancelDialogButton1.CornerRoundingRadius = -1F;
this.kryptonCancelDialogButton1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kryptonCancelDialogButton1.Location = new System.Drawing.Point(277, 10);
this.kryptonCancelDialogButton1.Name = "kryptonCancelDialogButton1";
@@ -216,7 +235,6 @@ private void InitializeComponent()
this.kryptonBrowseButton1.AutoSize = true;
this.kryptonBrowseButton1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.kryptonBrowseButton1.BrowseButtonAction = Krypton.Toolkit.Suite.Extended.Buttons.BrowseButtonAction.SaveFile;
- this.kryptonBrowseButton1.CornerRoundingRadius = -1F;
this.kryptonBrowseButton1.DialogFilter = null;
this.kryptonBrowseButton1.DialogTitle = null;
this.kryptonBrowseButton1.ExtensionList = null;
diff --git a/Source/Krypton Toolkit/Examples/ButtonItems.cs b/Source/Krypton Toolkit/Examples/ButtonItems.cs
index 502e3204e..006d051f1 100644
--- a/Source/Krypton Toolkit/Examples/ButtonItems.cs
+++ b/Source/Krypton Toolkit/Examples/ButtonItems.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class ButtonItems : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/CalendarItems.Designer.cs b/Source/Krypton Toolkit/Examples/CalendarItems.Designer.cs
index fbf64039a..e28126c55 100644
--- a/Source/Krypton Toolkit/Examples/CalendarItems.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/CalendarItems.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class CalendarItems
{
diff --git a/Source/Krypton Toolkit/Examples/CalendarItems.cs b/Source/Krypton Toolkit/Examples/CalendarItems.cs
index 1be852ee2..292f44c89 100644
--- a/Source/Krypton Toolkit/Examples/CalendarItems.cs
+++ b/Source/Krypton Toolkit/Examples/CalendarItems.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class CalendarItems : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.Designer.cs b/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.Designer.cs
new file mode 100644
index 000000000..6d2ae94b3
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.Designer.cs
@@ -0,0 +1,214 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
+{
+ partial class CheckBoxComboBoxTest
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ Krypton.Toolkit.Suite.Extended.Controls.KryptonCheckBoxProperties kryptonCheckBoxProperties1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonCheckBoxProperties();
+ this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kbtnCheckItem5 = new Krypton.Toolkit.KryptonButton();
+ this.kbtnCheckDDDD = new Krypton.Toolkit.KryptonButton();
+ this.kbtnCheckInserted = new Krypton.Toolkit.KryptonButton();
+ this.kbtnClear = new Krypton.Toolkit.KryptonButton();
+ this.kbtnCheckItem1 = new Krypton.Toolkit.KryptonButton();
+ this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel();
+ this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel();
+ this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel();
+ this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel();
+ this.kccmbManual = new Krypton.Toolkit.Suite.Extended.Controls.KryptonCheckBoxComboBox();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ this.kryptonPanel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kccmbManual)).BeginInit();
+ this.SuspendLayout();
+ //
+ // kryptonPanel1
+ //
+ this.kryptonPanel1.Controls.Add(this.kccmbManual);
+ this.kryptonPanel1.Controls.Add(this.kbtnCheckItem5);
+ this.kryptonPanel1.Controls.Add(this.kbtnCheckDDDD);
+ this.kryptonPanel1.Controls.Add(this.kbtnCheckInserted);
+ this.kryptonPanel1.Controls.Add(this.kbtnClear);
+ this.kryptonPanel1.Controls.Add(this.kbtnCheckItem1);
+ this.kryptonPanel1.Controls.Add(this.kryptonLabel4);
+ this.kryptonPanel1.Controls.Add(this.kryptonLabel3);
+ this.kryptonPanel1.Controls.Add(this.kryptonLabel2);
+ this.kryptonPanel1.Controls.Add(this.kryptonLabel1);
+ this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
+ this.kryptonPanel1.Name = "kryptonPanel1";
+ this.kryptonPanel1.Size = new System.Drawing.Size(475, 252);
+ this.kryptonPanel1.TabIndex = 0;
+ //
+ // kbtnCheckItem5
+ //
+ this.kbtnCheckItem5.Location = new System.Drawing.Point(171, 202);
+ this.kbtnCheckItem5.Name = "kbtnCheckItem5";
+ this.kbtnCheckItem5.Size = new System.Drawing.Size(124, 25);
+ this.kbtnCheckItem5.TabIndex = 13;
+ this.kbtnCheckItem5.Values.Text = "! Check \"Item 5\"";
+ this.kbtnCheckItem5.Click += new System.EventHandler(this.kbtnCheckItem5_Click);
+ //
+ // kbtnCheckDDDD
+ //
+ this.kbtnCheckDDDD.Location = new System.Drawing.Point(171, 147);
+ this.kbtnCheckDDDD.Name = "kbtnCheckDDDD";
+ this.kbtnCheckDDDD.Size = new System.Drawing.Size(124, 25);
+ this.kbtnCheckDDDD.TabIndex = 12;
+ this.kbtnCheckDDDD.Values.Text = "! Check \"DDDD\"";
+ this.kbtnCheckDDDD.Click += new System.EventHandler(this.kbtnCheckDDDD_Click);
+ //
+ // kbtnCheckInserted
+ //
+ this.kbtnCheckInserted.Location = new System.Drawing.Point(171, 93);
+ this.kbtnCheckInserted.Name = "kbtnCheckInserted";
+ this.kbtnCheckInserted.Size = new System.Drawing.Size(124, 25);
+ this.kbtnCheckInserted.TabIndex = 11;
+ this.kbtnCheckInserted.Values.Text = "! Check \"Inserted\"";
+ this.kbtnCheckInserted.Click += new System.EventHandler(this.kbtnCheckInserted_Click);
+ //
+ // kbtnClear
+ //
+ this.kbtnClear.Location = new System.Drawing.Point(302, 39);
+ this.kbtnClear.Name = "kbtnClear";
+ this.kbtnClear.Size = new System.Drawing.Size(158, 25);
+ this.kbtnClear.TabIndex = 10;
+ this.kbtnClear.Values.Text = "Clear && Repopulate";
+ this.kbtnClear.Click += new System.EventHandler(this.kbtnClear_Click);
+ //
+ // kbtnCheckItem1
+ //
+ this.kbtnCheckItem1.Location = new System.Drawing.Point(171, 39);
+ this.kbtnCheckItem1.Name = "kbtnCheckItem1";
+ this.kbtnCheckItem1.Size = new System.Drawing.Size(124, 25);
+ this.kbtnCheckItem1.TabIndex = 9;
+ this.kbtnCheckItem1.Values.Text = "! Check \"Item 1\"";
+ this.kbtnCheckItem1.Click += new System.EventHandler(this.kbtnCheckItem1_Click);
+ //
+ // kryptonLabel4
+ //
+ this.kryptonLabel4.Location = new System.Drawing.Point(13, 175);
+ this.kryptonLabel4.Name = "kryptonLabel4";
+ this.kryptonLabel4.Size = new System.Drawing.Size(282, 20);
+ this.kryptonLabel4.TabIndex = 8;
+ this.kryptonLabel4.Values.Text = "A different look. Accessed via CheckBoxProperties";
+ //
+ // kryptonLabel3
+ //
+ this.kryptonLabel3.Location = new System.Drawing.Point(13, 121);
+ this.kryptonLabel3.Name = "kryptonLabel3";
+ this.kryptonLabel3.Size = new System.Drawing.Size(233, 20);
+ this.kryptonLabel3.TabIndex = 7;
+ this.kryptonLabel3.Values.Text = "Populated using a DataTable DataSource";
+ //
+ // kryptonLabel2
+ //
+ this.kryptonLabel2.Location = new System.Drawing.Point(13, 67);
+ this.kryptonLabel2.Name = "kryptonLabel2";
+ this.kryptonLabel2.Size = new System.Drawing.Size(243, 20);
+ this.kryptonLabel2.TabIndex = 6;
+ this.kryptonLabel2.Values.Text = "Populated using a custom IList DataSource";
+ //
+ // kryptonLabel1
+ //
+ this.kryptonLabel1.Location = new System.Drawing.Point(13, 13);
+ this.kryptonLabel1.Name = "kryptonLabel1";
+ this.kryptonLabel1.Size = new System.Drawing.Size(248, 20);
+ this.kryptonLabel1.TabIndex = 5;
+ this.kryptonLabel1.Values.Text = "Populated Manually using ComboBox.Items";
+ //
+ // kccmbManual
+ //
+ kryptonCheckBoxProperties1.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.kccmbManual.CheckBoxProperties = kryptonCheckBoxProperties1;
+ this.kccmbManual.DisplayMemberSingleItem = "";
+ this.kccmbManual.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.kccmbManual.Location = new System.Drawing.Point(13, 40);
+ this.kccmbManual.Name = "kccmbManual";
+ this.kccmbManual.Size = new System.Drawing.Size(152, 21);
+ this.kccmbManual.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
+ this.kccmbManual.TabIndex = 1;
+ //
+ // CheckBoxComboBoxTest
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(475, 252);
+ this.Controls.Add(this.kryptonPanel1);
+ this.Name = "CheckBoxComboBoxTest";
+ this.Text = "CheckBoxComboBoxTest";
+ this.Load += new System.EventHandler(this.CheckBoxComboBoxTest_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ this.kryptonPanel1.ResumeLayout(false);
+ this.kryptonPanel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kccmbManual)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private KryptonPanel kryptonPanel1;
+ private KryptonLabel kryptonLabel1;
+ private KryptonLabel kryptonLabel2;
+ private KryptonLabel kryptonLabel3;
+ private KryptonLabel kryptonLabel4;
+ private KryptonButton kbtnCheckItem1;
+ private KryptonButton kbtnClear;
+ private KryptonButton kbtnCheckInserted;
+ private KryptonButton kbtnCheckDDDD;
+ private KryptonButton kbtnCheckItem5;
+ private Krypton.Toolkit.Suite.Extended.Controls.KryptonCheckBoxComboBox kccmbManual;
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.cs b/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.cs
new file mode 100644
index 000000000..c57ab6848
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.cs
@@ -0,0 +1,145 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+using System.Data;
+
+using Krypton.Toolkit.Suite.Extended.Controls;
+
+namespace Examples
+{
+ public partial class CheckBoxComboBoxTest : KryptonForm
+ {
+ private StatusList _statusList;
+
+ private ListSelectionWrapper _statusSelections;
+
+ public CheckBoxComboBoxTest()
+ {
+ InitializeComponent();
+ }
+
+ private void CheckBoxComboBoxTest_Load(object sender, EventArgs e)
+ {
+ PopulateManualCombo();
+
+ #region POPULATED USING A CUSTOM "IList" DATASOURCE
+
+ _statusList = new StatusList();
+
+ _statusList.Add(new Status(1, "New"));
+ _statusList.Add(new Status(2, "Loaded"));
+ _statusList.Add(new Status(3, "Inserted"));
+ Status UpdatedStatus = new Status(4, "Updated");
+ _statusList.Add(UpdatedStatus);
+ _statusList.Add(new Status(5, "Deleted"));
+
+ _statusSelections = new ListSelectionWrapper(_statusList, "Name");
+
+ //kcbcmbIListDataSource.DataSource = _statusSelections;
+ //kcbcmbIListDataSource.DisplayMemberSingleItem = "Name";
+ //kcbcmbIListDataSource.DisplayMember = "NameConcatenated";
+ //kcbcmbIListDataSource.ValueMember = "Selected";
+
+ //kcbcmbIListDataSource.CheckBoxItems[3].DataBindings.DefaultDataSourceUpdateMode
+ // = DataSourceUpdateMode.OnPropertyChanged;
+ //kcbcmbIListDataSource.DataBindings.DefaultDataSourceUpdateMode
+ // = DataSourceUpdateMode.OnPropertyChanged;
+
+ _statusSelections.FindObjectWithItem(UpdatedStatus).Selected = true;
+
+ #endregion
+
+ #region POPULATED USING A DATATABLE
+
+ DataTable DT = new DataTable("TEST TABLE FOR DEMO PURPOSES");
+ DT.Columns.AddRange(
+ new DataColumn[]
+ {
+ new DataColumn("Id", typeof(int)),
+ new DataColumn("SomePropertyOrColumnName", typeof(string)),
+ new DataColumn("Description", typeof(string)),
+ });
+ DT.Rows.Add(1, "AAAA", "AAAAA");
+ DT.Rows.Add(2, "BBBB", "BBBBB");
+ DT.Rows.Add(3, "CCCC", "CCCCC");
+ DT.Rows.Add(3, "DDDD", "DDDDD");
+
+ //kcbcmbDataTableDataSource.DataSource =
+ // new ListSelectionWrapper(
+ // DT.Rows,
+ // "SomePropertyOrColumnName" // "SomePropertyOrColumnName" will populate the Name on ObjectSelectionWrapper.
+ // );
+ //kcbcmbDataTableDataSource.DisplayMemberSingleItem = "Name";
+ //kcbcmbDataTableDataSource.DisplayMember = "NameConcatenated";
+ //kcbcmbDataTableDataSource.ValueMember = "Selected";
+
+ #endregion
+ }
+
+ private void PopulateManualCombo()
+ {
+ kccmbManual.Items.Add("Item 1");
+ kccmbManual.Items.Add("Item 2");
+ kccmbManual.Items.Add("Item 3");
+ kccmbManual.Items.Add("Item 4");
+ kccmbManual.Items.Add("Item 5");
+ kccmbManual.Items.Add("Item 6");
+ kccmbManual.Items.Add("Item 7");
+ kccmbManual.Items.Add("Item 8");
+
+ kccmbManual.CheckBoxItems[1].Checked = true;
+ }
+
+ private void kbtnCheckItem1_Click(object sender, EventArgs e)
+ {
+ kccmbManual.CheckBoxItems["Item 1"].Checked = !kccmbManual.CheckBoxItems["Item 1"].Checked;
+ }
+
+ private void kbtnCheckItem5_Click(object sender, EventArgs e)
+ {
+ //kcbcmbStyle.CheckBoxItems["Item 5"].Checked = !kcbcmbStyle.CheckBoxItems["Item 5"].Checked;
+ }
+
+ private void kbtnCheckDDDD_Click(object sender, EventArgs e)
+ {
+ //kcbcmbDataTableDataSource.CheckBoxItems["DDDD"].Checked = !kcbcmbDataTableDataSource.CheckBoxItems["DDDD"].Checked;
+ }
+
+ private void kbtnCheckInserted_Click(object sender, EventArgs e)
+ {
+ //kcbcmbIListDataSource.CheckBoxItems["Inserted"].Checked = !kcbcmbIListDataSource.CheckBoxItems["Inserted"].Checked;
+ }
+
+ private void kbtnClear_Click(object sender, EventArgs e)
+ {
+ kccmbManual.Clear();
+
+ PopulateManualCombo();
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Examples/OutlookGridExample.resx b/Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.resx
similarity index 100%
rename from Source/Krypton Toolkit/Examples/OutlookGridExample.resx
rename to Source/Krypton Toolkit/Examples/CheckBoxComboBoxTest.resx
diff --git a/Source/Krypton Toolkit/Examples/CheckSumExample.Designer.cs b/Source/Krypton Toolkit/Examples/CheckSumExample.Designer.cs
index 908f4f2f9..4d2cf820c 100644
--- a/Source/Krypton Toolkit/Examples/CheckSumExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/CheckSumExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class CheckSumExample
{
@@ -48,7 +76,6 @@ private void InitializeComponent()
//
// kryptonButton2
//
- this.kryptonButton2.CornerRoundingRadius = -1F;
this.kryptonButton2.Location = new System.Drawing.Point(165, 13);
this.kryptonButton2.Name = "kryptonButton2";
this.kryptonButton2.Size = new System.Drawing.Size(146, 25);
@@ -58,7 +85,6 @@ private void InitializeComponent()
//
// kryptonButton1
//
- this.kryptonButton1.CornerRoundingRadius = -1F;
this.kryptonButton1.Location = new System.Drawing.Point(13, 13);
this.kryptonButton1.Name = "kryptonButton1";
this.kryptonButton1.Size = new System.Drawing.Size(146, 25);
diff --git a/Source/Krypton Toolkit/Examples/CheckSumExample.cs b/Source/Krypton Toolkit/Examples/CheckSumExample.cs
index 37b1d8982..bd6809995 100644
--- a/Source/Krypton Toolkit/Examples/CheckSumExample.cs
+++ b/Source/Krypton Toolkit/Examples/CheckSumExample.cs
@@ -1,4 +1,32 @@
-using Krypton.Toolkit.Suite.Extended.CheckSum.Tools;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+using Krypton.Toolkit.Suite.Extended.CheckSum.Tools;
namespace Examples
{
diff --git a/Source/Krypton Toolkit/Examples/CircularProgressBarExample.Designer.cs b/Source/Krypton Toolkit/Examples/CircularProgressBarExample.Designer.cs
index 0bef4aea8..3c82a3d4e 100644
--- a/Source/Krypton Toolkit/Examples/CircularProgressBarExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/CircularProgressBarExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class CircularProgressBarExample
{
@@ -138,7 +166,7 @@ private void InitializeComponent()
//
// circularProgressBar1
//
- this.circularProgressBar1.AnimationFunction = WinFormAnimation.KnownAnimationFunctions.Linear;
+ this.circularProgressBar1.AnimationFunction = WinFormAnimation_NET5.KnownAnimationFunctions.Linear;
this.circularProgressBar1.AnimationSpeed = 500;
this.circularProgressBar1.BackColor = System.Drawing.Color.Transparent;
this.circularProgressBar1.FirstValueColour = System.Drawing.Color.Red;
diff --git a/Source/Krypton Toolkit/Examples/CircularProgressBarExample.cs b/Source/Krypton Toolkit/Examples/CircularProgressBarExample.cs
index b73a958d0..4c3ba6f3f 100644
--- a/Source/Krypton Toolkit/Examples/CircularProgressBarExample.cs
+++ b/Source/Krypton Toolkit/Examples/CircularProgressBarExample.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class CircularProgressBarExample : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/Classes/DataGridViewSetup.cs b/Source/Krypton Toolkit/Examples/Classes/DataGridViewSetup.cs
index b4d2ac7fa..dfdd08d1c 100644
--- a/Source/Krypton Toolkit/Examples/Classes/DataGridViewSetup.cs
+++ b/Source/Krypton Toolkit/Examples/Classes/DataGridViewSetup.cs
@@ -1,12 +1,31 @@
-using System.Collections;
-using System.Xml.Linq;
-using System.Xml.XPath;
-
-using Krypton.Toolkit.Suite.Extended.Outlook.Grid;
-#pragma warning disable CS8600
-#pragma warning disable CS8602
-#pragma warning disable CS8604
-
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public class DataGridViewSetup
@@ -24,6 +43,7 @@ public class DataGridViewSetup
#region Implementaton
+ /*
public void SetupDataGridView(KryptonOutlookGrid grid, bool restoreIfPossible)
{
if (File.Exists($"{Application.StartupPath}/grid.xml") & restoreIfPossible)
@@ -350,24 +370,8 @@ private DataGridViewColumn SetupColumn(SandBoxGridColumn colType)
default:
throw new Exception("Unknown Column Type !! TODO improve that !");
}
- }
+ }*/
#endregion
}
-}
-
-public class TypeConverter
-{
- public static string ProcessType(string FullQualifiedName)
- {
- //Translate types here to accomodate code changes, namespaces and version
- //Select Case FullQualifiedName
- // Case "OutlookGridAlphabeticGroup, Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e12f297423986ef5",
- // "OutlookGridAlphabeticGroup, Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null"
- // 'Change with new version or namespace or both !
- // FullQualifiedName = "TestMe, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null"
- // Exit Select
- //End Select
- return FullQualifiedName;
- }
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/DataTableWrapper.cs b/Source/Krypton Toolkit/Examples/Classes/DataTableWrapper.cs
new file mode 100644
index 000000000..b90ae0fc9
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/DataTableWrapper.cs
@@ -0,0 +1,39 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+using System.Data;
+
+using Krypton.Toolkit.Suite.Extended.Controls;
+
+namespace Examples
+{
+ public class DataTableWrapper : ListSelectionWrapper
+ {
+ public DataTableWrapper(DataTable dataTable, string usePropertyAsDisplayName) : base(dataTable.Rows, false, usePropertyAsDisplayName) { }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/Enumerations.cs b/Source/Krypton Toolkit/Examples/Classes/Enumerations.cs
deleted file mode 100644
index a439b20d7..000000000
--- a/Source/Krypton Toolkit/Examples/Classes/Enumerations.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-namespace Examples
-{
- public enum SandBoxGridColumn
- {
- ColumnCustomerID = 0,
- ColumnCustomerName = 1,
- ColumnAddress = 2,
- ColumnCity = 3,
- ColumnCountry = 4,
- ColumnOrderDate = 5,
- ColumnProduct = 6,
- ColumnPrice = 7,
- SatisfactionColumn = 8,
- ColumnToken = 9
- }
-
- public enum LoadState
- {
- Before,
- After
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/LoadState.cs b/Source/Krypton Toolkit/Examples/Classes/LoadState.cs
new file mode 100644
index 000000000..24c299a4a
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/LoadState.cs
@@ -0,0 +1,35 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples;
+
+public enum LoadState
+{
+ Before,
+ After
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/OutlookGridPriceGroup.cs b/Source/Krypton Toolkit/Examples/Classes/OutlookGridPriceGroup.cs
index 31ef54ad6..e18f26c97 100644
--- a/Source/Krypton Toolkit/Examples/Classes/OutlookGridPriceGroup.cs
+++ b/Source/Krypton Toolkit/Examples/Classes/OutlookGridPriceGroup.cs
@@ -1,6 +1,32 @@
-using System.Globalization;
-
-using Krypton.Toolkit.Suite.Extended.Outlook.Grid;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+using System.Globalization;
namespace Examples
{
@@ -9,9 +35,9 @@ public class OutlookGridPriceGroup : OutlookGridDefaultGroup
private int _priceCode;
private string _currency;
- private object val;
+ private object? _val;
- private const int noPrice = 999999;
+ private const int NO_PRICE = 999999;
public OutlookGridPriceGroup() : base()
{
AllowHiddenWhenGrouped = false;
@@ -31,10 +57,7 @@ public OutlookGridPriceGroup(IOutlookGridGroup? parentGroup) : base(parentGroup)
///
/// Gets or sets the displayed text.
///
- public override string Text
- {
- get { return string.Format("{0}: {1} ({2})", Column.DataGridViewColumn.HeaderText, GetPriceString(_priceCode), ItemCount == 1 ? OneItemText : ItemCount.ToString() + XxxItemsText); }
- }
+ public override string Text => $"{Column.DataGridViewColumn.HeaderText}: {GetPriceString(_priceCode)} ({(ItemCount == 1 ? OneItemText : ItemCount.ToString() + XxxItemsText)})";
private int GetPriceCode(decimal price)
{
@@ -114,20 +137,20 @@ private string GetPriceString(int priceCode)
///
/// Gets or sets the Alphabetic value
///
- public override object Value
+ public override object? Value
{
- get { return val; }
+ get => _val;
set
{
- if (object.ReferenceEquals(value, DBNull.Value) || value == null)
+ if (ReferenceEquals(value, DBNull.Value) || value == null)
{
- _priceCode = noPrice;
- val = _priceCode;
+ _priceCode = NO_PRICE;
+ _val = _priceCode;
}
else
{
_priceCode = GetPriceCode(decimal.Parse(value.ToString()));
- val = _priceCode;
+ _val = _priceCode;
}
}
}
@@ -143,7 +166,7 @@ public override object Clone()
OutlookGridPriceGroup gr = new OutlookGridPriceGroup(this.ParentGroup);
gr.Column = this.Column;
- gr.Value = this.val;
+ gr.Value = this._val;
gr.Collapsed = this.Collapsed;
gr.Height = this.Height;
gr.GroupImage = this.GroupImage;
@@ -167,10 +190,10 @@ public override object Clone()
///
///
///
- public override int CompareTo(object obj)
+ public override int CompareTo(object? obj)
{
int orderModifier = (Column.SortDirection == SortOrder.Ascending ? 1 : -1);
- int priceOther = 0;
+ int priceOther;
if (obj is OutlookGridPriceGroup)
{
@@ -178,7 +201,7 @@ public override int CompareTo(object obj)
}
else
{
- priceOther = noPrice;
+ priceOther = NO_PRICE;
}
return _priceCode.CompareTo(priceOther) * orderModifier;
}
diff --git a/Source/Krypton Toolkit/Examples/Classes/SandBoxGridColumn.cs b/Source/Krypton Toolkit/Examples/Classes/SandBoxGridColumn.cs
new file mode 100644
index 000000000..57bb9826d
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/SandBoxGridColumn.cs
@@ -0,0 +1,44 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
+{
+ public enum SandBoxGridColumn
+ {
+ ColumnCustomerID = 0,
+ ColumnCustomerName = 1,
+ ColumnAddress = 2,
+ ColumnCity = 3,
+ ColumnCountry = 4,
+ ColumnOrderDate = 5,
+ ColumnProduct = 6,
+ ColumnPrice = 7,
+ SatisfactionColumn = 8,
+ ColumnToken = 9
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/StaticInfos.cs b/Source/Krypton Toolkit/Examples/Classes/StaticInfos.cs
index aa01cd928..037a2cdc1 100644
--- a/Source/Krypton Toolkit/Examples/Classes/StaticInfos.cs
+++ b/Source/Krypton Toolkit/Examples/Classes/StaticInfos.cs
@@ -1,4 +1,32 @@
-namespace Examples;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples;
public static class StaticInfos
{
diff --git a/Source/Krypton Toolkit/Examples/Classes/Status.cs b/Source/Krypton Toolkit/Examples/Classes/Status.cs
new file mode 100644
index 000000000..43b87788c
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/Status.cs
@@ -0,0 +1,62 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
+{
+ ///
+ /// Class used for demo purposes. This could be anything listed in a CheckBoxComboBox.
+ ///
+ public class Status
+ {
+ public Status(int id, string name)
+ {
+ _id = id;
+ _name = name;
+ }
+
+ private int _id;
+ private string _name;
+
+ public int Id
+ {
+ get => _id;
+ set => _id = value;
+ }
+ public string Name
+ {
+ get => _name;
+ set => _name = value;
+ }
+
+ ///
+ /// Now used to return the Name.
+ ///
+ ///
+ public override string ToString() => Name;
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/StatusList.cs b/Source/Krypton Toolkit/Examples/Classes/StatusList.cs
new file mode 100644
index 000000000..f0afd8e8f
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/StatusList.cs
@@ -0,0 +1,37 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples;
+
+///
+/// Class used for demo purposes. A list of "Status".
+/// This represents the custom "IList" datasource of anything listed in a CheckBoxComboBox.
+///
+public class StatusList : List
+{
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Classes/TypeConverter.cs b/Source/Krypton Toolkit/Examples/Classes/TypeConverter.cs
new file mode 100644
index 000000000..0035c37fd
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Classes/TypeConverter.cs
@@ -0,0 +1,43 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+public class TypeConverter
+{
+ public static string ProcessType(string fullQualifiedName)
+ {
+ //Translate types here to accomodate code changes, namespaces and version
+ //Select Case FullQualifiedName
+ // Case "OutlookGridAlphabeticGroup, Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e12f297423986ef5",
+ // "OutlookGridAlphabeticGroup, Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null"
+ // 'Change with new version or namespace or both !
+ // FullQualifiedName = "TestMe, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null"
+ // Exit Select
+ //End Select
+ return fullQualifiedName;
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.Designer.cs b/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.Designer.cs
index df0408e10..29920d5ca 100644
--- a/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class CoreColourDialogExamples
{
@@ -61,7 +89,6 @@ private void InitializeComponent()
//
// kryptonButton1
//
- this.kryptonButton1.CornerRoundingRadius = -1F;
this.kryptonButton1.Location = new System.Drawing.Point(13, 13);
this.kryptonButton1.Name = "kryptonButton1";
this.kryptonButton1.Size = new System.Drawing.Size(250, 25);
@@ -70,7 +97,6 @@ private void InitializeComponent()
//
// kryptonButton2
//
- this.kryptonButton2.CornerRoundingRadius = -1F;
this.kryptonButton2.Location = new System.Drawing.Point(13, 44);
this.kryptonButton2.Name = "kryptonButton2";
this.kryptonButton2.Size = new System.Drawing.Size(250, 25);
@@ -79,7 +105,6 @@ private void InitializeComponent()
//
// kryptonButton3
//
- this.kryptonButton3.CornerRoundingRadius = -1F;
this.kryptonButton3.Location = new System.Drawing.Point(13, 75);
this.kryptonButton3.Name = "kryptonButton3";
this.kryptonButton3.Size = new System.Drawing.Size(250, 25);
@@ -88,7 +113,6 @@ private void InitializeComponent()
//
// kryptonButton4
//
- this.kryptonButton4.CornerRoundingRadius = -1F;
this.kryptonButton4.Location = new System.Drawing.Point(13, 106);
this.kryptonButton4.Name = "kryptonButton4";
this.kryptonButton4.Size = new System.Drawing.Size(250, 25);
@@ -97,7 +121,6 @@ private void InitializeComponent()
//
// kryptonButton5
//
- this.kryptonButton5.CornerRoundingRadius = -1F;
this.kryptonButton5.Location = new System.Drawing.Point(13, 137);
this.kryptonButton5.Name = "kryptonButton5";
this.kryptonButton5.Size = new System.Drawing.Size(250, 25);
@@ -106,7 +129,6 @@ private void InitializeComponent()
//
// kryptonButton6
//
- this.kryptonButton6.CornerRoundingRadius = -1F;
this.kryptonButton6.Location = new System.Drawing.Point(13, 168);
this.kryptonButton6.Name = "kryptonButton6";
this.kryptonButton6.Size = new System.Drawing.Size(250, 25);
@@ -115,7 +137,6 @@ private void InitializeComponent()
//
// kryptonButton7
//
- this.kryptonButton7.CornerRoundingRadius = -1F;
this.kryptonButton7.Location = new System.Drawing.Point(13, 199);
this.kryptonButton7.Name = "kryptonButton7";
this.kryptonButton7.Size = new System.Drawing.Size(250, 25);
@@ -124,7 +145,6 @@ private void InitializeComponent()
//
// kryptonButton8
//
- this.kryptonButton8.CornerRoundingRadius = -1F;
this.kryptonButton8.Location = new System.Drawing.Point(13, 230);
this.kryptonButton8.Name = "kryptonButton8";
this.kryptonButton8.Size = new System.Drawing.Size(250, 25);
@@ -133,7 +153,6 @@ private void InitializeComponent()
//
// kryptonButton9
//
- this.kryptonButton9.CornerRoundingRadius = -1F;
this.kryptonButton9.Location = new System.Drawing.Point(13, 261);
this.kryptonButton9.Name = "kryptonButton9";
this.kryptonButton9.Size = new System.Drawing.Size(250, 25);
diff --git a/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.cs b/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.cs
index f064f671d..46fc7fcfd 100644
--- a/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.cs
+++ b/Source/Krypton Toolkit/Examples/CoreColourDialogExamples.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class CoreColourDialogExamples : KryptonForm
diff --git a/Source/Krypton Toolkit/Examples/CoreDialogExamples.Designer.cs b/Source/Krypton Toolkit/Examples/CoreDialogExamples.Designer.cs
index 72b318266..b5bf9d870 100644
--- a/Source/Krypton Toolkit/Examples/CoreDialogExamples.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/CoreDialogExamples.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class CoreDialogExamples
{
@@ -45,7 +73,6 @@ private void InitializeComponent()
//
// kbtnColourDialogExamples
//
- this.kbtnColourDialogExamples.CornerRoundingRadius = -1F;
this.kbtnColourDialogExamples.Location = new System.Drawing.Point(12, 12);
this.kbtnColourDialogExamples.Name = "kbtnColourDialogExamples";
this.kbtnColourDialogExamples.Size = new System.Drawing.Size(154, 25);
diff --git a/Source/Krypton Toolkit/Examples/CoreDialogExamples.cs b/Source/Krypton Toolkit/Examples/CoreDialogExamples.cs
index 56c8edcb4..eae99b31b 100644
--- a/Source/Krypton Toolkit/Examples/CoreDialogExamples.cs
+++ b/Source/Krypton Toolkit/Examples/CoreDialogExamples.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class CoreDialogExamples : KryptonForm
diff --git a/Source/Krypton Toolkit/Examples/DialogExamples.Designer.cs b/Source/Krypton Toolkit/Examples/DialogExamples.Designer.cs
index a069126a3..a789d2ec3 100644
--- a/Source/Krypton Toolkit/Examples/DialogExamples.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/DialogExamples.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class DialogExamples
{
@@ -35,7 +63,6 @@ private void InitializeComponent()
this.kbtnRun = new Krypton.Toolkit.KryptonButton();
this.kbtnCheckSum = new Krypton.Toolkit.KryptonButton();
this.kbtnException = new Krypton.Toolkit.KryptonButton();
- this.kbtnAbout = new Krypton.Toolkit.KryptonButton();
((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
this.kryptonPanel1.SuspendLayout();
this.SuspendLayout();
@@ -47,7 +74,6 @@ private void InitializeComponent()
this.kryptonPanel1.Controls.Add(this.kbtnRun);
this.kryptonPanel1.Controls.Add(this.kbtnCheckSum);
this.kryptonPanel1.Controls.Add(this.kbtnException);
- this.kryptonPanel1.Controls.Add(this.kbtnAbout);
this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
this.kryptonPanel1.Name = "kryptonPanel1";
@@ -56,8 +82,7 @@ private void InitializeComponent()
//
// kbtnTextToSpeech
//
- this.kbtnTextToSpeech.CornerRoundingRadius = -1F;
- this.kbtnTextToSpeech.Location = new System.Drawing.Point(240, 38);
+ this.kbtnTextToSpeech.Location = new System.Drawing.Point(125, 38);
this.kbtnTextToSpeech.Name = "kbtnTextToSpeech";
this.kbtnTextToSpeech.Size = new System.Drawing.Size(109, 22);
this.kbtnTextToSpeech.TabIndex = 8;
@@ -66,8 +91,7 @@ private void InitializeComponent()
//
// kbtnSplash
//
- this.kbtnSplash.CornerRoundingRadius = -1F;
- this.kbtnSplash.Location = new System.Drawing.Point(125, 38);
+ this.kbtnSplash.Location = new System.Drawing.Point(10, 38);
this.kbtnSplash.Name = "kbtnSplash";
this.kbtnSplash.Size = new System.Drawing.Size(109, 22);
this.kbtnSplash.TabIndex = 7;
@@ -76,8 +100,7 @@ private void InitializeComponent()
//
// kbtnRun
//
- this.kbtnRun.CornerRoundingRadius = -1F;
- this.kbtnRun.Location = new System.Drawing.Point(10, 38);
+ this.kbtnRun.Location = new System.Drawing.Point(240, 10);
this.kbtnRun.Name = "kbtnRun";
this.kbtnRun.Size = new System.Drawing.Size(109, 22);
this.kbtnRun.TabIndex = 6;
@@ -86,8 +109,7 @@ private void InitializeComponent()
//
// kbtnCheckSum
//
- this.kbtnCheckSum.CornerRoundingRadius = -1F;
- this.kbtnCheckSum.Location = new System.Drawing.Point(240, 10);
+ this.kbtnCheckSum.Location = new System.Drawing.Point(125, 10);
this.kbtnCheckSum.Name = "kbtnCheckSum";
this.kbtnCheckSum.Size = new System.Drawing.Size(109, 22);
this.kbtnCheckSum.TabIndex = 4;
@@ -96,24 +118,13 @@ private void InitializeComponent()
//
// kbtnException
//
- this.kbtnException.CornerRoundingRadius = -1F;
- this.kbtnException.Location = new System.Drawing.Point(125, 10);
+ this.kbtnException.Location = new System.Drawing.Point(10, 10);
this.kbtnException.Name = "kbtnException";
this.kbtnException.Size = new System.Drawing.Size(109, 22);
this.kbtnException.TabIndex = 3;
this.kbtnException.Values.Text = "Exception";
this.kbtnException.Click += new System.EventHandler(this.kbtnException_Click);
//
- // kbtnAbout
- //
- this.kbtnAbout.CornerRoundingRadius = -1F;
- this.kbtnAbout.Location = new System.Drawing.Point(10, 10);
- this.kbtnAbout.Name = "kbtnAbout";
- this.kbtnAbout.Size = new System.Drawing.Size(109, 22);
- this.kbtnAbout.TabIndex = 0;
- this.kbtnAbout.Values.Text = "About";
- this.kbtnAbout.Click += new System.EventHandler(this.kbtnAbout_Click);
- //
// DialogExamples
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -141,6 +152,5 @@ private void InitializeComponent()
private KryptonButton kbtnRun;
private KryptonButton kbtnCheckSum;
private KryptonButton kbtnException;
- private KryptonButton kbtnAbout;
}
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/DialogExamples.cs b/Source/Krypton Toolkit/Examples/DialogExamples.cs
index 147fb2c48..0f05e850e 100644
--- a/Source/Krypton Toolkit/Examples/DialogExamples.cs
+++ b/Source/Krypton Toolkit/Examples/DialogExamples.cs
@@ -1,19 +1,34 @@
-using System;
-using System.CodeDom;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-using Krypton.Toolkit.Suite.Extended.Dialogs;
-
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Examples.Properties;
+using Krypton.Toolkit.Suite.Extended.Dialogs;
using Krypton.Toolkit.Suite.Extended.Specialised.Dialogs;
namespace Examples
@@ -25,15 +40,6 @@ public DialogExamples()
InitializeComponent();
}
- private void kbtnAbout_Click(object sender, EventArgs e)
- {
- Assembly asm = Assembly.GetExecutingAssembly();
-
- KryptonAboutDialog aboutDialog = new KryptonAboutDialog(Resources.Stable, asm);
-
- aboutDialog.ShowDialog();
- }
-
private void kbtnException_Click(object sender, EventArgs e)
{
//KryptonExceptionCaptureDialog exceptionCaptureDialog = new KryptonExceptionCaptureDialog();
diff --git a/Source/Krypton Toolkit/Examples/DockExtenderExample.Designer.cs b/Source/Krypton Toolkit/Examples/DockExtenderExample.Designer.cs
index dad1d23ba..cf8b1d256 100644
--- a/Source/Krypton Toolkit/Examples/DockExtenderExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/DockExtenderExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class DockExtenderExample
{
@@ -219,14 +247,9 @@ private void InitializeComponent()
this.kryptonListView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.kryptonListView1.FullRowSelect = true;
this.kryptonListView1.HideSelection = false;
- this.kryptonListView1.ItemStyle = Krypton.Toolkit.ButtonStyle.ListItem;
this.kryptonListView1.Location = new System.Drawing.Point(252, 49);
this.kryptonListView1.Name = "kryptonListView1";
- this.kryptonListView1.OwnerDraw = true;
this.kryptonListView1.Size = new System.Drawing.Size(624, 232);
- this.kryptonListView1.StateCommon.Item.Content.ShortText.MultiLine = Krypton.Toolkit.InheritBool.True;
- this.kryptonListView1.StateCommon.Item.Content.ShortText.MultiLineH = Krypton.Toolkit.PaletteRelativeAlign.Center;
- this.kryptonListView1.StateCommon.Item.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center;
this.kryptonListView1.TabIndex = 7;
this.kryptonListView1.View = System.Windows.Forms.View.SmallIcon;
//
@@ -249,7 +272,6 @@ private void InitializeComponent()
//
// kbtnLeftClose
//
- this.kbtnLeftClose.CornerRoundingRadius = -1F;
this.kbtnLeftClose.Dock = System.Windows.Forms.DockStyle.Fill;
this.kbtnLeftClose.Location = new System.Drawing.Point(230, 3);
this.kbtnLeftClose.Name = "kbtnLeftClose";
@@ -288,7 +310,6 @@ private void InitializeComponent()
//
// kbtnBottomClose
//
- this.kbtnBottomClose.CornerRoundingRadius = -1F;
this.kbtnBottomClose.Dock = System.Windows.Forms.DockStyle.Fill;
this.kbtnBottomClose.Location = new System.Drawing.Point(607, 3);
this.kbtnBottomClose.Name = "kbtnBottomClose";
diff --git a/Source/Krypton Toolkit/Examples/DockExtenderExample.cs b/Source/Krypton Toolkit/Examples/DockExtenderExample.cs
index 1675696e7..9ec7e4c7d 100644
--- a/Source/Krypton Toolkit/Examples/DockExtenderExample.cs
+++ b/Source/Krypton Toolkit/Examples/DockExtenderExample.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.Dock.Extender;
namespace Examples
diff --git a/Source/Krypton Toolkit/Examples/Examples.csproj b/Source/Krypton Toolkit/Examples/Examples.csproj
index b1c6b8955..7670b83c3 100644
--- a/Source/Krypton Toolkit/Examples/Examples.csproj
+++ b/Source/Krypton Toolkit/Examples/Examples.csproj
@@ -2,11 +2,12 @@
WinExe
- net48;net6.0-windows
+ net48;net8.0-windows
enable
true
enable
..\..\..\Bin\Examples\
+ preview
@@ -17,11 +18,6 @@
-
-
- Always
-
-
Always
@@ -50,9 +46,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
@@ -91,17 +100,17 @@
-
-
+
-
+
+
diff --git a/Source/Krypton Toolkit/Examples/Examples.licenseheader b/Source/Krypton Toolkit/Examples/Examples.licenseheader
new file mode 100644
index 000000000..19d849e41
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/Examples.licenseheader
@@ -0,0 +1,29 @@
+extensions: .cs
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.Designer.cs b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.Designer.cs
index 73c7fce07..01b5e357f 100644
--- a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ExtendedControlExamples
{
@@ -29,19 +57,20 @@ protected override void Dispose(bool disposing)
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
+ System.Security.SecureString secureString3 = new System.Security.SecureString();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExtendedControlExamples));
- System.Security.SecureString secureString1 = new System.Security.SecureString();
this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kryptonValidationBox1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonValidationBox();
+ this.kryptonStarRatingControl1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonStarRatingControl();
+ this.kryptonSecureTextBox1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonSecureTextBox();
+ this.kryptonProgressBarExtended1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonProgressBarExtended();
+ this.kryptonProgressBarExtendedVersion11 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonProgressBarExtendedVersion1();
+ this.kryptonMarqueeLabel1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonMarqueeLabel();
+ this.kkcv2Test = new Krypton.Toolkit.Suite.Extended.Controls.KryptonKnobControlVersion2();
+ this.kkcv1Test = new Krypton.Toolkit.Suite.Extended.Controls.KryptonKnobControlVersion1();
this.kryptonBorderedLabel1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonBorderedLabel();
this.circularPictureBox1 = new Krypton.Toolkit.Suite.Extended.Controls.CircularPictureBox();
- this.kkcv1Test = new Krypton.Toolkit.Suite.Extended.Controls.KryptonKnobControlVersion1();
- this.kkcv2Test = new Krypton.Toolkit.Suite.Extended.Controls.KryptonKnobControlVersion2();
- this.kryptonMarqueeLabel1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonMarqueeLabel();
- this.kryptonProgressBarExtendedVersion11 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonProgressBarExtendedVersion1();
- this.kryptonProgressBarExtended1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonProgressBarExtended();
- this.kryptonSecureTextBox1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonSecureTextBox();
- this.kryptonStarRatingControl1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonStarRatingControl();
- this.kryptonValidationBox1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonValidationBox();
+ this.kryptonPasswordTextBox1 = new Krypton.Toolkit.Suite.Extended.Controls.KryptonPasswordTextBox();
((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
this.kryptonPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.circularPictureBox1)).BeginInit();
@@ -49,6 +78,7 @@ private void InitializeComponent()
//
// kryptonPanel1
//
+ this.kryptonPanel1.Controls.Add(this.kryptonPasswordTextBox1);
this.kryptonPanel1.Controls.Add(this.kryptonValidationBox1);
this.kryptonPanel1.Controls.Add(this.kryptonStarRatingControl1);
this.kryptonPanel1.Controls.Add(this.kryptonSecureTextBox1);
@@ -65,48 +95,71 @@ private void InitializeComponent()
this.kryptonPanel1.Size = new System.Drawing.Size(1123, 684);
this.kryptonPanel1.TabIndex = 0;
//
- // kryptonBorderedLabel1
+ // kryptonValidationBox1
//
- this.kryptonBorderedLabel1.BackColor = System.Drawing.Color.Transparent;
- this.kryptonBorderedLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(177)))), ((int)(((byte)(192)))), ((int)(((byte)(214)))));
- this.kryptonBorderedLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel;
- this.kryptonBorderedLabel1.Location = new System.Drawing.Point(275, 13);
- this.kryptonBorderedLabel1.Name = "kryptonBorderedLabel1";
- this.kryptonBorderedLabel1.Size = new System.Drawing.Size(139, 20);
- this.kryptonBorderedLabel1.TabIndex = 1;
- this.kryptonBorderedLabel1.Values.Text = "kryptonBorderedLabel1";
+ this.kryptonValidationBox1.IntermediateColour = System.Drawing.Color.Empty;
+ this.kryptonValidationBox1.Location = new System.Drawing.Point(601, 112);
+ this.kryptonValidationBox1.ModifyBackgroundColour = false;
+ this.kryptonValidationBox1.Name = "kryptonValidationBox1";
+ this.kryptonValidationBox1.Size = new System.Drawing.Size(264, 23);
+ this.kryptonValidationBox1.TabIndex = 9;
+ this.kryptonValidationBox1.Text = "kryptonValidationBox1";
+ this.kryptonValidationBox1.UseAccessibilityColours = false;
+ this.kryptonValidationBox1.UseIntermediateColour = false;
+ this.kryptonValidationBox1.ValidateEntry = false;
//
- // circularPictureBox1
+ // kryptonStarRatingControl1
//
- this.circularPictureBox1.BackColor = System.Drawing.Color.Transparent;
- this.circularPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("circularPictureBox1.Image")));
- this.circularPictureBox1.Location = new System.Drawing.Point(13, 13);
- this.circularPictureBox1.Name = "circularPictureBox1";
- this.circularPictureBox1.Size = new System.Drawing.Size(256, 256);
- this.circularPictureBox1.TabIndex = 0;
- this.circularPictureBox1.TabStop = false;
+ this.kryptonStarRatingControl1.CurrentStarValue = 0;
+ this.kryptonStarRatingControl1.FirstColour = System.Drawing.Color.Red;
+ this.kryptonStarRatingControl1.FirstColourQuantity = 2;
+ this.kryptonStarRatingControl1.Location = new System.Drawing.Point(420, 211);
+ this.kryptonStarRatingControl1.Name = "kryptonStarRatingControl1";
+ this.kryptonStarRatingControl1.SecondColour = System.Drawing.Color.Blue;
+ this.kryptonStarRatingControl1.SecondColourQuantity = 1;
+ this.kryptonStarRatingControl1.Size = new System.Drawing.Size(75, 15);
+ this.kryptonStarRatingControl1.StarCount = 5;
+ this.kryptonStarRatingControl1.StartSize = 15;
+ this.kryptonStarRatingControl1.TabIndex = 8;
+ this.kryptonStarRatingControl1.ThirdColour = System.Drawing.Color.Green;
+ this.kryptonStarRatingControl1.ThirdColourQuantity = 2;
//
- // kkcv1Test
+ // kryptonSecureTextBox1
//
- this.kkcv1Test.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
- this.kkcv1Test.ImeMode = System.Windows.Forms.ImeMode.On;
- this.kkcv1Test.KnobIndicatorBorderColour = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(232)))), ((int)(((byte)(246)))));
- this.kkcv1Test.KnobIndicatorColourBegin = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(206)))), ((int)(((byte)(230)))));
- this.kkcv1Test.KnobIndicatorColourEnd = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(206)))), ((int)(((byte)(230)))));
- this.kkcv1Test.LargeChange = 20;
- this.kkcv1Test.Location = new System.Drawing.Point(276, 40);
- this.kkcv1Test.Maximum = 100;
- this.kkcv1Test.Minimum = 0;
- this.kkcv1Test.Name = "kkcv1Test";
- this.kkcv1Test.ShowLargeScale = true;
- this.kkcv1Test.ShowSmallScale = true;
- this.kkcv1Test.Size = new System.Drawing.Size(91, 91);
- this.kkcv1Test.SizeLargeScaleMarker = 6;
- this.kkcv1Test.SizeSmallScaleMarker = 3;
- this.kkcv1Test.SmallChange = 5;
- this.kkcv1Test.TabIndex = 2;
- this.kkcv1Test.Value = 0;
- this.kkcv1Test.ValueChanged += new Krypton.Toolkit.Suite.Extended.Controls.ValueChangedEventHandler(this.kkcv1Test_ValueChanged);
+ this.kryptonSecureTextBox1.Location = new System.Drawing.Point(601, 82);
+ this.kryptonSecureTextBox1.Name = "kryptonSecureTextBox1";
+ this.kryptonSecureTextBox1.PasswordChar = '●';
+ this.kryptonSecureTextBox1.SecuredText = secureString3;
+ this.kryptonSecureTextBox1.Size = new System.Drawing.Size(264, 23);
+ this.kryptonSecureTextBox1.TabIndex = 7;
+ this.kryptonSecureTextBox1.Text = "kryptonSecureTextBox1";
+ this.kryptonSecureTextBox1.UseSystemPasswordChar = true;
+ //
+ // kryptonProgressBarExtended1
+ //
+ this.kryptonProgressBarExtended1.Location = new System.Drawing.Point(601, 52);
+ this.kryptonProgressBarExtended1.Name = "kryptonProgressBarExtended1";
+ this.kryptonProgressBarExtended1.Size = new System.Drawing.Size(264, 23);
+ this.kryptonProgressBarExtended1.TabIndex = 6;
+ this.kryptonProgressBarExtended1.Text = "0%";
+ //
+ // kryptonProgressBarExtendedVersion11
+ //
+ this.kryptonProgressBarExtendedVersion11.BackColor = System.Drawing.Color.Transparent;
+ this.kryptonProgressBarExtendedVersion11.Location = new System.Drawing.Point(601, 13);
+ this.kryptonProgressBarExtendedVersion11.Name = "kryptonProgressBarExtendedVersion11";
+ this.kryptonProgressBarExtendedVersion11.Size = new System.Drawing.Size(264, 32);
+ this.kryptonProgressBarExtendedVersion11.TabIndex = 5;
+ //
+ // kryptonMarqueeLabel1
+ //
+ this.kryptonMarqueeLabel1.Location = new System.Drawing.Point(276, 211);
+ this.kryptonMarqueeLabel1.Name = "kryptonMarqueeLabel1";
+ this.kryptonMarqueeLabel1.Size = new System.Drawing.Size(137, 20);
+ this.kryptonMarqueeLabel1.Speed = 1;
+ this.kryptonMarqueeLabel1.TabIndex = 4;
+ this.kryptonMarqueeLabel1.Values.Text = "kryptonMarqueeLabel1";
+ this.kryptonMarqueeLabel1.YOffset = 0;
//
// kkcv2Test
//
@@ -134,72 +187,54 @@ private void InitializeComponent()
this.kkcv2Test.Value = 0;
this.kkcv2Test.ValueChanged += new Krypton.Toolkit.Suite.Extended.Controls.ValueChangedEventHandler(this.kkcv2Test_ValueChanged);
//
- // kryptonMarqueeLabel1
- //
- this.kryptonMarqueeLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel;
- this.kryptonMarqueeLabel1.Location = new System.Drawing.Point(276, 211);
- this.kryptonMarqueeLabel1.Name = "kryptonMarqueeLabel1";
- this.kryptonMarqueeLabel1.Size = new System.Drawing.Size(137, 20);
- this.kryptonMarqueeLabel1.Speed = 1;
- this.kryptonMarqueeLabel1.TabIndex = 4;
- this.kryptonMarqueeLabel1.Values.Text = "kryptonMarqueeLabel1";
- this.kryptonMarqueeLabel1.YOffset = 0;
- //
- // kryptonProgressBarExtendedVersion11
- //
- this.kryptonProgressBarExtendedVersion11.BackColor = System.Drawing.Color.Transparent;
- this.kryptonProgressBarExtendedVersion11.Location = new System.Drawing.Point(601, 13);
- this.kryptonProgressBarExtendedVersion11.Name = "kryptonProgressBarExtendedVersion11";
- this.kryptonProgressBarExtendedVersion11.Size = new System.Drawing.Size(264, 32);
- this.kryptonProgressBarExtendedVersion11.TabIndex = 5;
- //
- // kryptonProgressBarExtendedVersion21
+ // kkcv1Test
//
- this.kryptonProgressBarExtended1.Location = new System.Drawing.Point(601, 52);
- this.kryptonProgressBarExtended1.Name = "kryptonProgressBarExtended1";
- this.kryptonProgressBarExtended1.Size = new System.Drawing.Size(264, 23);
- this.kryptonProgressBarExtended1.TabIndex = 6;
- this.kryptonProgressBarExtended1.Text = "0%";
+ this.kkcv1Test.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
+ this.kkcv1Test.ImeMode = System.Windows.Forms.ImeMode.On;
+ this.kkcv1Test.KnobIndicatorBorderColour = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(232)))), ((int)(((byte)(246)))));
+ this.kkcv1Test.KnobIndicatorColourBegin = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(206)))), ((int)(((byte)(230)))));
+ this.kkcv1Test.KnobIndicatorColourEnd = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(206)))), ((int)(((byte)(230)))));
+ this.kkcv1Test.LargeChange = 20;
+ this.kkcv1Test.Location = new System.Drawing.Point(276, 40);
+ this.kkcv1Test.Maximum = 100;
+ this.kkcv1Test.Minimum = 0;
+ this.kkcv1Test.Name = "kkcv1Test";
+ this.kkcv1Test.ShowLargeScale = true;
+ this.kkcv1Test.ShowSmallScale = true;
+ this.kkcv1Test.Size = new System.Drawing.Size(91, 91);
+ this.kkcv1Test.SizeLargeScaleMarker = 6;
+ this.kkcv1Test.SizeSmallScaleMarker = 3;
+ this.kkcv1Test.SmallChange = 5;
+ this.kkcv1Test.TabIndex = 2;
+ this.kkcv1Test.Value = 0;
+ this.kkcv1Test.ValueChanged += new Krypton.Toolkit.Suite.Extended.Controls.ValueChangedEventHandler(this.kkcv1Test_ValueChanged);
//
- // kryptonSecureTextBox1
+ // kryptonBorderedLabel1
//
- this.kryptonSecureTextBox1.Location = new System.Drawing.Point(601, 82);
- this.kryptonSecureTextBox1.Name = "kryptonSecureTextBox1";
- this.kryptonSecureTextBox1.PasswordChar = '●';
- this.kryptonSecureTextBox1.SecuredText = secureString1;
- this.kryptonSecureTextBox1.Size = new System.Drawing.Size(264, 23);
- this.kryptonSecureTextBox1.TabIndex = 7;
- this.kryptonSecureTextBox1.Text = "kryptonSecureTextBox1";
- this.kryptonSecureTextBox1.UseSystemPasswordChar = true;
+ this.kryptonBorderedLabel1.BackColor = System.Drawing.Color.Transparent;
+ this.kryptonBorderedLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(177)))), ((int)(((byte)(192)))), ((int)(((byte)(214)))));
+ this.kryptonBorderedLabel1.Location = new System.Drawing.Point(275, 13);
+ this.kryptonBorderedLabel1.Name = "kryptonBorderedLabel1";
+ this.kryptonBorderedLabel1.Size = new System.Drawing.Size(139, 20);
+ this.kryptonBorderedLabel1.TabIndex = 1;
+ this.kryptonBorderedLabel1.Values.Text = "kryptonBorderedLabel1";
//
- // kryptonStarRatingControl1
+ // circularPictureBox1
//
- this.kryptonStarRatingControl1.CurrentStarValue = 0;
- this.kryptonStarRatingControl1.FirstColour = System.Drawing.Color.Red;
- this.kryptonStarRatingControl1.FirstColourQuantity = 2;
- this.kryptonStarRatingControl1.Location = new System.Drawing.Point(420, 211);
- this.kryptonStarRatingControl1.Name = "kryptonStarRatingControl1";
- this.kryptonStarRatingControl1.SecondColour = System.Drawing.Color.Blue;
- this.kryptonStarRatingControl1.SecondColourQuantity = 1;
- this.kryptonStarRatingControl1.Size = new System.Drawing.Size(75, 15);
- this.kryptonStarRatingControl1.StarCount = 5;
- this.kryptonStarRatingControl1.StartSize = 15;
- this.kryptonStarRatingControl1.TabIndex = 8;
- this.kryptonStarRatingControl1.ThirdColour = System.Drawing.Color.Green;
- this.kryptonStarRatingControl1.ThirdColourQuantity = 2;
+ this.circularPictureBox1.BackColor = System.Drawing.Color.Transparent;
+ this.circularPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("circularPictureBox1.Image")));
+ this.circularPictureBox1.Location = new System.Drawing.Point(13, 13);
+ this.circularPictureBox1.Name = "circularPictureBox1";
+ this.circularPictureBox1.Size = new System.Drawing.Size(256, 256);
+ this.circularPictureBox1.TabIndex = 0;
+ this.circularPictureBox1.TabStop = false;
//
- // kryptonValidationBox1
+ // kryptonPasswordTextBox1
//
- this.kryptonValidationBox1.IntermediateColour = System.Drawing.Color.Empty;
- this.kryptonValidationBox1.Location = new System.Drawing.Point(601, 112);
- this.kryptonValidationBox1.ModifyBackgroundColour = false;
- this.kryptonValidationBox1.Name = "kryptonValidationBox1";
- this.kryptonValidationBox1.Size = new System.Drawing.Size(264, 23);
- this.kryptonValidationBox1.TabIndex = 9;
- this.kryptonValidationBox1.Text = "kryptonValidationBox1";
- this.kryptonValidationBox1.UseAccessibilityColours = false;
- this.kryptonValidationBox1.UseIntermediateColour = false;
- this.kryptonValidationBox1.ValidateEntry = false;
+ this.kryptonPasswordTextBox1.Location = new System.Drawing.Point(601, 142);
+ this.kryptonPasswordTextBox1.Name = "kryptonPasswordTextBox1";
+ this.kryptonPasswordTextBox1.Size = new System.Drawing.Size(264, 23);
+ this.kryptonPasswordTextBox1.TabIndex = 10;
//
// ExtendedControlExamples
//
@@ -230,5 +265,6 @@ private void InitializeComponent()
private Krypton.Toolkit.Suite.Extended.Controls.KryptonSecureTextBox kryptonSecureTextBox1;
private Krypton.Toolkit.Suite.Extended.Controls.KryptonStarRatingControl kryptonStarRatingControl1;
private Krypton.Toolkit.Suite.Extended.Controls.KryptonValidationBox kryptonValidationBox1;
+ private Krypton.Toolkit.Suite.Extended.Controls.KryptonPasswordTextBox kryptonPasswordTextBox1;
}
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.cs b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.cs
index d46a19dd5..bb8613ca3 100644
--- a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.cs
+++ b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class ExtendedControlExamples : KryptonForm
diff --git a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.resx b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.resx
index e20eb9893..2a7456649 100644
--- a/Source/Krypton Toolkit/Examples/ExtendedControlExamples.resx
+++ b/Source/Krypton Toolkit/Examples/ExtendedControlExamples.resx
@@ -165,7 +165,7 @@
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
- 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEgAACxIB0t1+/AAAHopJREFUeF7tnfmPHOlZ
+ 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEQAACxEBf2RfkQAAHopJREFUeF7tnfmPHOlZ
x/PnIIHgByQSEhSQkLJRgiKEgpJdEMnyAyBFiGwOVkQJEJIAySIlZMNGSfaId+1dH+tjfI7tscdje2Y8
932fnstz+L728G5e6tv22/10zdPT3W8dXce3pI/s6beq3nq76/28V9X7foQbN27cuHHjxo0bN26534wx
rR7cuHFL+fabZdP6JFvXtnnHlDL/ux4PCCGp477HljEPez8w4/uv1iYB75DHmd87we2uh2b+6IaZObxG
diff --git a/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.Designer.cs b/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.Designer.cs
index d52ad0c74..d8b0559f2 100644
--- a/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ExternalThemeSelectorChooser
{
@@ -47,7 +75,6 @@ private void InitializeComponent()
//
// kbtnXMLThemes
//
- this.kbtnXMLThemes.CornerRoundingRadius = -1F;
this.kbtnXMLThemes.Location = new System.Drawing.Point(13, 44);
this.kbtnXMLThemes.Name = "kbtnXMLThemes";
this.kbtnXMLThemes.Size = new System.Drawing.Size(250, 25);
@@ -57,7 +84,6 @@ private void InitializeComponent()
//
// kbtnBinaryThemes
//
- this.kbtnBinaryThemes.CornerRoundingRadius = -1F;
this.kbtnBinaryThemes.Location = new System.Drawing.Point(13, 13);
this.kbtnBinaryThemes.Name = "kbtnBinaryThemes";
this.kbtnBinaryThemes.Size = new System.Drawing.Size(250, 25);
diff --git a/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.cs b/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.cs
index 7bc2a2ab3..ea4bb8173 100644
--- a/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.cs
+++ b/Source/Krypton Toolkit/Examples/ExternalThemeSelectorChooser.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.Theme.Switcher;
namespace Examples
diff --git a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.Designer.cs b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.Designer.cs
index 7f729d58e..2be45f178 100644
--- a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class FloatingMenuToolbarAdvancedExample
{
diff --git a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.cs b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.cs
index dfd04a56d..99913af32 100644
--- a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.cs
+++ b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarAdvancedExample.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class FloatingMenuToolbarAdvancedExample : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.Designer.cs b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.Designer.cs
index 67a0ca4bc..8d902eb70 100644
--- a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class FloatingMenuToolbarExampleMain
{
@@ -48,7 +76,6 @@ private void InitializeComponent()
//
// kryptonButton2
//
- this.kryptonButton2.CornerRoundingRadius = -1F;
this.kryptonButton2.Location = new System.Drawing.Point(13, 44);
this.kryptonButton2.Name = "kryptonButton2";
this.kryptonButton2.Size = new System.Drawing.Size(281, 25);
@@ -58,7 +85,6 @@ private void InitializeComponent()
//
// kbtnFloatingAdvanced
//
- this.kbtnFloatingAdvanced.CornerRoundingRadius = -1F;
this.kbtnFloatingAdvanced.Location = new System.Drawing.Point(13, 13);
this.kbtnFloatingAdvanced.Name = "kbtnFloatingAdvanced";
this.kbtnFloatingAdvanced.Size = new System.Drawing.Size(281, 25);
diff --git a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.cs b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.cs
index 744bfe776..7fc1f186c 100644
--- a/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.cs
+++ b/Source/Krypton Toolkit/Examples/FloatingMenuToolbarExampleMain.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class FloatingMenuToolbarExampleMain : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/Form1.Designer.cs b/Source/Krypton Toolkit/Examples/Form1.Designer.cs
index 354c2b670..bab2dc80e 100644
--- a/Source/Krypton Toolkit/Examples/Form1.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/Form1.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class Form1
{
diff --git a/Source/Krypton Toolkit/Examples/Form1.cs b/Source/Krypton Toolkit/Examples/Form1.cs
index 2e18a970c..fde94ccb2 100644
--- a/Source/Krypton Toolkit/Examples/Form1.cs
+++ b/Source/Krypton Toolkit/Examples/Form1.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class Form1 : Form
diff --git a/Source/Krypton Toolkit/Examples/Form2.Designer.cs b/Source/Krypton Toolkit/Examples/Form2.Designer.cs
index e6ce47395..e47239d2d 100644
--- a/Source/Krypton Toolkit/Examples/Form2.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/Form2.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class Form2
{
diff --git a/Source/Krypton Toolkit/Examples/Form2.cs b/Source/Krypton Toolkit/Examples/Form2.cs
index 34ad82ae9..5919a2039 100644
--- a/Source/Krypton Toolkit/Examples/Form2.cs
+++ b/Source/Krypton Toolkit/Examples/Form2.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class Form2 : Form
diff --git a/Source/Krypton Toolkit/Examples/GlobalUsings.cs b/Source/Krypton Toolkit/Examples/GlobalUsings.cs
index 032ac4be7..461c74d6c 100644
--- a/Source/Krypton Toolkit/Examples/GlobalUsings.cs
+++ b/Source/Krypton Toolkit/Examples/GlobalUsings.cs
@@ -1,3 +1,32 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+
// Global using directives
global using Krypton.Toolkit;
diff --git a/Source/Krypton Toolkit/Examples/KryptonFormExtended1.Designer.cs b/Source/Krypton Toolkit/Examples/KryptonFormExtended1.Designer.cs
index e6d92780b..da9b1d700 100644
--- a/Source/Krypton Toolkit/Examples/KryptonFormExtended1.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonFormExtended1.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class KryptonFormExtended1
{
@@ -46,7 +74,6 @@ private void InitializeComponent()
//
// kbtnCloseButton
//
- this.kbtnCloseButton.CornerRoundingRadius = -1F;
this.kbtnCloseButton.Location = new System.Drawing.Point(346, 214);
this.kbtnCloseButton.Name = "kbtnCloseButton";
this.kbtnCloseButton.Size = new System.Drawing.Size(172, 22);
diff --git a/Source/Krypton Toolkit/Examples/KryptonFormExtended1.cs b/Source/Krypton Toolkit/Examples/KryptonFormExtended1.cs
index 40177e089..6793e33df 100644
--- a/Source/Krypton Toolkit/Examples/KryptonFormExtended1.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonFormExtended1.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class KryptonFormExtended1 : KryptonFormExtended
{
diff --git a/Source/Krypton Toolkit/Examples/KryptonFormExtended2.Designer.cs b/Source/Krypton Toolkit/Examples/KryptonFormExtended2.Designer.cs
index d365f1bc3..fa9a52e04 100644
--- a/Source/Krypton Toolkit/Examples/KryptonFormExtended2.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonFormExtended2.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class KryptonFormExtended2
{
diff --git a/Source/Krypton Toolkit/Examples/KryptonFormExtended2.cs b/Source/Krypton Toolkit/Examples/KryptonFormExtended2.cs
index c826e54f3..bc93506b4 100644
--- a/Source/Krypton Toolkit/Examples/KryptonFormExtended2.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonFormExtended2.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class KryptonFormExtended2 : KryptonFormExtended
diff --git a/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.Designer.cs b/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.Designer.cs
index db4db02cb..301f142ac 100644
--- a/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class KryptonInputBoxExtendedExample
{
@@ -88,7 +116,6 @@ private void InitializeComponent()
// kbtnQuickTest
//
this.kbtnQuickTest.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnQuickTest.CornerRoundingRadius = -1F;
this.kbtnQuickTest.Location = new System.Drawing.Point(556, 13);
this.kbtnQuickTest.Name = "kbtnQuickTest";
this.kbtnQuickTest.Size = new System.Drawing.Size(136, 25);
@@ -99,7 +126,6 @@ private void InitializeComponent()
// kbtnShow
//
this.kbtnShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnShow.CornerRoundingRadius = -1F;
this.kbtnShow.Location = new System.Drawing.Point(698, 13);
this.kbtnShow.Name = "kbtnShow";
this.kbtnShow.Size = new System.Drawing.Size(90, 25);
@@ -151,7 +177,6 @@ private void InitializeComponent()
//
// kbtnButtonTypeface
//
- this.kbtnButtonTypeface.CornerRoundingRadius = -1F;
this.kbtnButtonTypeface.Location = new System.Drawing.Point(424, 131);
this.kbtnButtonTypeface.Name = "kbtnButtonTypeface";
this.kbtnButtonTypeface.Size = new System.Drawing.Size(111, 25);
@@ -160,7 +185,6 @@ private void InitializeComponent()
//
// kbtnPromptTypeface
//
- this.kbtnPromptTypeface.CornerRoundingRadius = -1F;
this.kbtnPromptTypeface.Location = new System.Drawing.Point(637, 131);
this.kbtnPromptTypeface.Name = "kbtnPromptTypeface";
this.kbtnPromptTypeface.Size = new System.Drawing.Size(111, 25);
@@ -169,7 +193,6 @@ private void InitializeComponent()
//
// kbtnCueTypeface
//
- this.kbtnCueTypeface.CornerRoundingRadius = -1F;
this.kbtnCueTypeface.Location = new System.Drawing.Point(541, 131);
this.kbtnCueTypeface.Name = "kbtnCueTypeface";
this.kbtnCueTypeface.Size = new System.Drawing.Size(90, 25);
@@ -179,7 +202,6 @@ private void InitializeComponent()
//
// kryptonComboBox5
//
- this.kryptonComboBox5.CornerRoundingRadius = -1F;
this.kryptonComboBox5.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonComboBox5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kryptonComboBox5.DropDownWidth = 261;
@@ -192,7 +214,6 @@ private void InitializeComponent()
//
// kcmbWrappedTextAlignment
//
- this.kcmbWrappedTextAlignment.CornerRoundingRadius = -1F;
this.kcmbWrappedTextAlignment.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kcmbWrappedTextAlignment.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbWrappedTextAlignment.DropDownWidth = 261;
@@ -206,7 +227,6 @@ private void InitializeComponent()
//
// kcmbTextAlignment
//
- this.kcmbTextAlignment.CornerRoundingRadius = -1F;
this.kcmbTextAlignment.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kcmbTextAlignment.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbTextAlignment.DropDownWidth = 261;
@@ -220,7 +240,6 @@ private void InitializeComponent()
//
// kcmbFocusedButton
//
- this.kcmbFocusedButton.CornerRoundingRadius = -1F;
this.kcmbFocusedButton.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kcmbFocusedButton.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbFocusedButton.DropDownWidth = 261;
@@ -270,7 +289,6 @@ private void InitializeComponent()
//
// kcmbButtonType
//
- this.kcmbButtonType.CornerRoundingRadius = -1F;
this.kcmbButtonType.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kcmbButtonType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbButtonType.DropDownWidth = 261;
diff --git a/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.cs b/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.cs
index 7e9711297..3a455a970 100644
--- a/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonInputBoxExtendedExample.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.InputBox;
using KryptonInputBoxResponseType = Krypton.Toolkit.Suite.Extended.InputBox.KryptonInputBoxResponseType;
diff --git a/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.Designer.cs b/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.Designer.cs
index 5782f397a..c246b4d3c 100644
--- a/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class KryptonProgressBarExtendedExamples
{
diff --git a/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.cs b/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.cs
index bd136df2b..35bcb1947 100644
--- a/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonProgressBarExtendedExamples.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class KryptonProgressBarExtendedExamples : KryptonForm
diff --git a/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.Designer.cs b/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.Designer.cs
index 7b4cd7f06..e92841b5b 100644
--- a/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class KryptonRibbonExtendedExample
{
diff --git a/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.cs b/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.cs
index ca761460f..58af8c281 100644
--- a/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.cs
+++ b/Source/Krypton Toolkit/Examples/KryptonRibbonExtendedExample.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class KryptonRibbonExtendedExample : KryptonForm
diff --git a/Source/Krypton Toolkit/Examples/MainWindow.Designer.cs b/Source/Krypton Toolkit/Examples/MainWindow.Designer.cs
index 1994967f3..9b6bcc9db 100644
--- a/Source/Krypton Toolkit/Examples/MainWindow.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/MainWindow.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class MainWindow
{
@@ -30,6 +58,8 @@ private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kbtnCheckBoxComboBoxExample = new Krypton.Toolkit.KryptonButton();
+ this.kbtnProgressBars = new Krypton.Toolkit.KryptonButton();
this.kbtnMemoryBoxExample = new Krypton.Toolkit.KryptonButton();
this.kbtnRibbonExtended = new Krypton.Toolkit.KryptonButton();
this.kbtnThemeTools = new Krypton.Toolkit.KryptonButton();
@@ -42,7 +72,6 @@ private void InitializeComponent()
this.kbtnKryptonFormExtendedExample = new Krypton.Toolkit.KryptonButton();
this.kbtnFloating = new Krypton.Toolkit.KryptonButton();
this.kbtnNotificationExample = new Krypton.Toolkit.KryptonButton();
- this.kbtnOutlookGrid = new Krypton.Toolkit.KryptonButton();
this.kryptonButton7 = new Krypton.Toolkit.KryptonButton();
this.kbtnExtendedControls = new Krypton.Toolkit.KryptonButton();
this.kryptonButton5 = new Krypton.Toolkit.KryptonButton();
@@ -52,13 +81,15 @@ private void InitializeComponent()
this.kbtnCircularProgressBarItem = new Krypton.Toolkit.KryptonButton();
this.ktnToolStripItems = new Krypton.Toolkit.KryptonButton();
this.kbtnButtonItems = new Krypton.Toolkit.KryptonButton();
- this.kbtnProgressBars = new Krypton.Toolkit.KryptonButton();
+ this.kbtnControls = new Krypton.Toolkit.KryptonButton();
((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
this.kryptonPanel1.SuspendLayout();
this.SuspendLayout();
//
// kryptonPanel1
//
+ this.kryptonPanel1.Controls.Add(this.kbtnControls);
+ this.kryptonPanel1.Controls.Add(this.kbtnCheckBoxComboBoxExample);
this.kryptonPanel1.Controls.Add(this.kbtnProgressBars);
this.kryptonPanel1.Controls.Add(this.kbtnMemoryBoxExample);
this.kryptonPanel1.Controls.Add(this.kbtnRibbonExtended);
@@ -72,7 +103,6 @@ private void InitializeComponent()
this.kryptonPanel1.Controls.Add(this.kbtnKryptonFormExtendedExample);
this.kryptonPanel1.Controls.Add(this.kbtnFloating);
this.kryptonPanel1.Controls.Add(this.kbtnNotificationExample);
- this.kryptonPanel1.Controls.Add(this.kbtnOutlookGrid);
this.kryptonPanel1.Controls.Add(this.kryptonButton7);
this.kryptonPanel1.Controls.Add(this.kbtnExtendedControls);
this.kryptonPanel1.Controls.Add(this.kryptonButton5);
@@ -85,15 +115,36 @@ private void InitializeComponent()
this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
this.kryptonPanel1.Name = "kryptonPanel1";
- this.kryptonPanel1.Size = new System.Drawing.Size(620, 390);
+ this.kryptonPanel1.Size = new System.Drawing.Size(626, 396);
this.kryptonPanel1.TabIndex = 0;
//
+ // kbtnCheckBoxComboBoxExample
+ //
+ this.kbtnCheckBoxComboBoxExample.Location = new System.Drawing.Point(10, 70);
+ this.kbtnCheckBoxComboBoxExample.Name = "kbtnCheckBoxComboBoxExample";
+ this.kbtnCheckBoxComboBoxExample.Size = new System.Drawing.Size(134, 22);
+ this.kbtnCheckBoxComboBoxExample.TabIndex = 23;
+ this.kbtnCheckBoxComboBoxExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnCheckBoxComboBoxExample.Values.Text = "CheckBox ComboBox Example";
+ this.kbtnCheckBoxComboBoxExample.Click += new System.EventHandler(this.kbtnCheckBoxComboBoxExample_Click);
+ //
+ // kbtnProgressBars
+ //
+ this.kbtnProgressBars.Location = new System.Drawing.Point(281, 154);
+ this.kbtnProgressBars.Name = "kbtnProgressBars";
+ this.kbtnProgressBars.Size = new System.Drawing.Size(134, 22);
+ this.kbtnProgressBars.TabIndex = 22;
+ this.kbtnProgressBars.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnProgressBars.Values.Text = "ProgressBar Examples";
+ this.kbtnProgressBars.Click += new System.EventHandler(this.kbtnProgressBars_Click);
+ //
// kbtnMemoryBoxExample
//
this.kbtnMemoryBoxExample.Location = new System.Drawing.Point(127, 154);
this.kbtnMemoryBoxExample.Name = "kbtnMemoryBoxExample";
this.kbtnMemoryBoxExample.Size = new System.Drawing.Size(148, 22);
this.kbtnMemoryBoxExample.TabIndex = 21;
+ this.kbtnMemoryBoxExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnMemoryBoxExample.Values.Text = "MemoryBox Example";
this.kbtnMemoryBoxExample.Click += new System.EventHandler(this.kbtnMemoryBoxExample_Click);
//
@@ -103,6 +154,7 @@ private void InitializeComponent()
this.kbtnRibbonExtended.Name = "kbtnRibbonExtended";
this.kbtnRibbonExtended.Size = new System.Drawing.Size(111, 22);
this.kbtnRibbonExtended.TabIndex = 20;
+ this.kbtnRibbonExtended.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnRibbonExtended.Values.Text = "Ribbon Extended";
this.kbtnRibbonExtended.Click += new System.EventHandler(this.kbtnRibbonExtended_Click);
//
@@ -112,6 +164,7 @@ private void InitializeComponent()
this.kbtnThemeTools.Name = "kbtnThemeTools";
this.kbtnThemeTools.Size = new System.Drawing.Size(111, 22);
this.kbtnThemeTools.TabIndex = 19;
+ this.kbtnThemeTools.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnThemeTools.Values.Text = "Theme Tools";
this.kbtnThemeTools.Click += new System.EventHandler(this.kbtnThemeTools_Click);
//
@@ -121,6 +174,7 @@ private void InitializeComponent()
this.kbtnDockExtenderExample.Name = "kbtnDockExtenderExample";
this.kbtnDockExtenderExample.Size = new System.Drawing.Size(188, 22);
this.kbtnDockExtenderExample.TabIndex = 18;
+ this.kbtnDockExtenderExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnDockExtenderExample.Values.Text = "Dock Extender Example";
this.kbtnDockExtenderExample.Click += new System.EventHandler(this.kbtnDockExtenderExample_Click);
//
@@ -130,6 +184,7 @@ private void InitializeComponent()
this.kbtnAdvancedDataGridExample.Name = "kbtnAdvancedDataGridExample";
this.kbtnAdvancedDataGridExample.Size = new System.Drawing.Size(188, 22);
this.kbtnAdvancedDataGridExample.TabIndex = 17;
+ this.kbtnAdvancedDataGridExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnAdvancedDataGridExample.Values.Text = "Advanced Data Grid Example";
this.kbtnAdvancedDataGridExample.Click += new System.EventHandler(this.kbtnAdvancedDataGridExample_Click);
//
@@ -139,6 +194,7 @@ private void InitializeComponent()
this.kbtnTreeGridView2Example.Name = "kbtnTreeGridView2Example";
this.kbtnTreeGridView2Example.Size = new System.Drawing.Size(150, 22);
this.kbtnTreeGridView2Example.TabIndex = 16;
+ this.kbtnTreeGridView2Example.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnTreeGridView2Example.Values.Text = "TreeGridView 2 Example";
this.kbtnTreeGridView2Example.Click += new System.EventHandler(this.kbtnTreeGridView2Example_Click);
//
@@ -148,6 +204,7 @@ private void InitializeComponent()
this.kbtnTreeGridViewExample.Name = "kbtnTreeGridViewExample";
this.kbtnTreeGridViewExample.Size = new System.Drawing.Size(150, 22);
this.kbtnTreeGridViewExample.TabIndex = 15;
+ this.kbtnTreeGridViewExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnTreeGridViewExample.Values.Text = "TreeGridView Example";
this.kbtnTreeGridViewExample.Click += new System.EventHandler(this.kbtnTreeGridViewExample_Click);
//
@@ -157,6 +214,7 @@ private void InitializeComponent()
this.kbtnInputBoxExamples.Name = "kbtnInputBoxExamples";
this.kbtnInputBoxExamples.Size = new System.Drawing.Size(150, 22);
this.kbtnInputBoxExamples.TabIndex = 14;
+ this.kbtnInputBoxExamples.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnInputBoxExamples.Values.Text = "InputBox Examples";
this.kbtnInputBoxExamples.Click += new System.EventHandler(this.kbtnInputBoxExamples_Click);
//
@@ -166,6 +224,7 @@ private void InitializeComponent()
this.kbtnDialogExamples.Name = "kbtnDialogExamples";
this.kbtnDialogExamples.Size = new System.Drawing.Size(109, 22);
this.kbtnDialogExamples.TabIndex = 13;
+ this.kbtnDialogExamples.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnDialogExamples.Values.Text = "Dialog Examples";
this.kbtnDialogExamples.Click += new System.EventHandler(this.kbtnDialogExamples_Click);
//
@@ -175,6 +234,7 @@ private void InitializeComponent()
this.kbtnKryptonFormExtendedExample.Name = "kbtnKryptonFormExtendedExample";
this.kbtnKryptonFormExtendedExample.Size = new System.Drawing.Size(203, 25);
this.kbtnKryptonFormExtendedExample.TabIndex = 12;
+ this.kbtnKryptonFormExtendedExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnKryptonFormExtendedExample.Values.Text = "Krypton Form Extended Example";
this.kbtnKryptonFormExtendedExample.Click += new System.EventHandler(this.kbtnKryptonFormExtendedExample_Click);
//
@@ -184,6 +244,7 @@ private void InitializeComponent()
this.kbtnFloating.Name = "kbtnFloating";
this.kbtnFloating.Size = new System.Drawing.Size(110, 22);
this.kbtnFloating.TabIndex = 11;
+ this.kbtnFloating.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnFloating.Values.Text = "Floating Toolbars";
this.kbtnFloating.Click += new System.EventHandler(this.kbtnFloating_Click);
//
@@ -193,25 +254,17 @@ private void InitializeComponent()
this.kbtnNotificationExample.Name = "kbtnNotificationExample";
this.kbtnNotificationExample.Size = new System.Drawing.Size(162, 25);
this.kbtnNotificationExample.TabIndex = 10;
+ this.kbtnNotificationExample.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnNotificationExample.Values.Text = "Notification Example";
this.kbtnNotificationExample.Click += new System.EventHandler(this.kbtnNotificationExample_Click);
//
- // kbtnOutlookGrid
- //
- this.kbtnOutlookGrid.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.kbtnOutlookGrid.Location = new System.Drawing.Point(10, 67);
- this.kbtnOutlookGrid.Name = "kbtnOutlookGrid";
- this.kbtnOutlookGrid.Size = new System.Drawing.Size(127, 25);
- this.kbtnOutlookGrid.TabIndex = 9;
- this.kbtnOutlookGrid.Values.Text = "OutlookGrid Example";
- this.kbtnOutlookGrid.Click += new System.EventHandler(this.kbtnOutlookGrid_Click);
- //
// kryptonButton7
//
this.kryptonButton7.Location = new System.Drawing.Point(261, 38);
this.kryptonButton7.Name = "kryptonButton7";
this.kryptonButton7.Size = new System.Drawing.Size(109, 22);
this.kryptonButton7.TabIndex = 8;
+ this.kryptonButton7.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kryptonButton7.Values.Text = "MessageBox";
this.kryptonButton7.Click += new System.EventHandler(this.kryptonButton7_Click);
//
@@ -221,6 +274,7 @@ private void InitializeComponent()
this.kbtnExtendedControls.Name = "kbtnExtendedControls";
this.kbtnExtendedControls.Size = new System.Drawing.Size(109, 22);
this.kbtnExtendedControls.TabIndex = 7;
+ this.kbtnExtendedControls.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnExtendedControls.Values.Text = "Controls Items";
this.kbtnExtendedControls.Click += new System.EventHandler(this.kbtnExtendedControls_Click);
//
@@ -230,6 +284,7 @@ private void InitializeComponent()
this.kryptonButton5.Name = "kryptonButton5";
this.kryptonButton5.Size = new System.Drawing.Size(130, 22);
this.kryptonButton5.TabIndex = 6;
+ this.kryptonButton5.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kryptonButton5.Values.Text = "Compression Items";
//
// kryptonButton4
@@ -238,6 +293,7 @@ private void InitializeComponent()
this.kryptonButton4.Name = "kryptonButton4";
this.kryptonButton4.Size = new System.Drawing.Size(109, 22);
this.kryptonButton4.TabIndex = 5;
+ this.kryptonButton4.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kryptonButton4.Values.Text = "ComboBox Items";
//
// kbtnCheckSum
@@ -246,6 +302,7 @@ private void InitializeComponent()
this.kbtnCheckSum.Name = "kbtnCheckSum";
this.kbtnCheckSum.Size = new System.Drawing.Size(109, 22);
this.kbtnCheckSum.TabIndex = 4;
+ this.kbtnCheckSum.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnCheckSum.Values.Text = "CheckSum Tools";
this.kbtnCheckSum.Click += new System.EventHandler(this.kbtnCheckSum_Click);
//
@@ -255,6 +312,7 @@ private void InitializeComponent()
this.kbtnCalendarItems.Name = "kbtnCalendarItems";
this.kbtnCalendarItems.Size = new System.Drawing.Size(109, 22);
this.kbtnCalendarItems.TabIndex = 3;
+ this.kbtnCalendarItems.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnCalendarItems.Values.Text = "Calendar Items";
this.kbtnCalendarItems.Click += new System.EventHandler(this.kbtnCalendarItems_Click);
//
@@ -264,6 +322,7 @@ private void InitializeComponent()
this.kbtnCircularProgressBarItem.Name = "kbtnCircularProgressBarItem";
this.kbtnCircularProgressBarItem.Size = new System.Drawing.Size(134, 22);
this.kbtnCircularProgressBarItem.TabIndex = 2;
+ this.kbtnCircularProgressBarItem.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnCircularProgressBarItem.Values.Text = "Circular ProgressBar";
this.kbtnCircularProgressBarItem.Click += new System.EventHandler(this.kbtnCircularProgressBarItem_Click);
//
@@ -273,6 +332,7 @@ private void InitializeComponent()
this.ktnToolStripItems.Name = "ktnToolStripItems";
this.ktnToolStripItems.Size = new System.Drawing.Size(110, 22);
this.ktnToolStripItems.TabIndex = 1;
+ this.ktnToolStripItems.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.ktnToolStripItems.Values.Text = "Tool Strip Items";
this.ktnToolStripItems.Click += new System.EventHandler(this.ktnToolStripItems_Click);
//
@@ -282,23 +342,25 @@ private void InitializeComponent()
this.kbtnButtonItems.Name = "kbtnButtonItems";
this.kbtnButtonItems.Size = new System.Drawing.Size(109, 22);
this.kbtnButtonItems.TabIndex = 0;
+ this.kbtnButtonItems.Values.DropDownArrowColor = System.Drawing.Color.Empty;
this.kbtnButtonItems.Values.Text = "Button Items";
this.kbtnButtonItems.Click += new System.EventHandler(this.kbtnButtonItems_Click);
//
- // kbtnProgressBars
+ // kbtnControls
//
- this.kbtnProgressBars.Location = new System.Drawing.Point(281, 154);
- this.kbtnProgressBars.Name = "kbtnProgressBars";
- this.kbtnProgressBars.Size = new System.Drawing.Size(134, 22);
- this.kbtnProgressBars.TabIndex = 22;
- this.kbtnProgressBars.Values.Text = "ProgressBar Examples";
- this.kbtnProgressBars.Click += new System.EventHandler(this.kbtnProgressBars_Click);
+ this.kbtnControls.Location = new System.Drawing.Point(421, 154);
+ this.kbtnControls.Name = "kbtnControls";
+ this.kbtnControls.Size = new System.Drawing.Size(162, 25);
+ this.kbtnControls.TabIndex = 24;
+ this.kbtnControls.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnControls.Values.Text = "Controls";
+ this.kbtnControls.Click += new System.EventHandler(this.kbtnControls_Click);
//
// MainWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(620, 390);
+ this.ClientSize = new System.Drawing.Size(626, 396);
this.Controls.Add(this.kryptonPanel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "MainWindow";
@@ -321,7 +383,6 @@ private void InitializeComponent()
private Krypton.Toolkit.KryptonButton kryptonButton5;
private Krypton.Toolkit.KryptonButton kryptonButton4;
private Krypton.Toolkit.KryptonButton kryptonButton7;
- private Krypton.Toolkit.KryptonButton kbtnOutlookGrid;
private Krypton.Toolkit.KryptonButton kbtnNotificationExample;
private Krypton.Toolkit.KryptonButton kbtnFloating;
private KryptonButton kbtnKryptonFormExtendedExample;
@@ -335,5 +396,7 @@ private void InitializeComponent()
private KryptonButton kbtnRibbonExtended;
private KryptonButton kbtnMemoryBoxExample;
private KryptonButton kbtnProgressBars;
+ private KryptonButton kbtnCheckBoxComboBoxExample;
+ private KryptonButton kbtnControls;
}
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/MainWindow.cs b/Source/Krypton Toolkit/Examples/MainWindow.cs
index c8aa07df7..f9c38a4b3 100644
--- a/Source/Krypton Toolkit/Examples/MainWindow.cs
+++ b/Source/Krypton Toolkit/Examples/MainWindow.cs
@@ -1,3 +1,31 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class MainWindow : KryptonForm
@@ -9,91 +37,77 @@ public MainWindow()
private void kbtnButtonItems_Click(object sender, EventArgs e)
{
- ButtonItems buttonItems = new ButtonItems();
+ var buttonItems = new ButtonItems();
buttonItems.Show();
}
private void ktnToolStripItems_Click(object sender, EventArgs e)
{
- ToolStripItems tsi = new ToolStripItems();
+ var tsi = new ToolStripItems();
tsi.Show();
}
private void kbtnCalendarItems_Click(object sender, EventArgs e)
{
- CalendarItems calendar = new CalendarItems();
+ var calendar = new CalendarItems();
calendar.Show();
}
private void kbtnCircularProgressBarItem_Click(object sender, EventArgs e)
{
- CircularProgressBarExample circularProgressBar = new CircularProgressBarExample();
+ var circularProgressBar = new CircularProgressBarExample();
circularProgressBar.Show();
}
private void kbtnCheckSum_Click(object sender, EventArgs e)
{
- CheckSumExample checkSum = new CheckSumExample();
+ var checkSum = new CheckSumExample();
checkSum.Show();
}
private void kbtnExtendedControls_Click(object sender, EventArgs e)
{
- ExtendedControlExamples extendedControlExamples = new ExtendedControlExamples();
+ var extendedControlExamples = new ExtendedControlExamples();
extendedControlExamples.Show();
}
private void kryptonButton7_Click(object sender, EventArgs e)
{
- MessageBoxExample messageBoxExample = new MessageBoxExample();
+ var messageBoxExample = new MessageBoxExample();
messageBoxExample.Show();
}
- private void kbtnOutlookGrid_Click(object sender, EventArgs e)
- {
- OutlookGridExample outlookGridExample = new OutlookGridExample();
-
- outlookGridExample.Show();
- }
-
- private void kbtnNotificationExample_Click(object sender, EventArgs e)
- {
- NotificationExample notificationExample = new NotificationExample();
-
- notificationExample.Show();
- }
-
private void kbtnFloating_Click(object sender, EventArgs e)
{
- FloatingMenuToolbarExampleMain floating = new FloatingMenuToolbarExampleMain();
+ var floating = new FloatingMenuToolbarExampleMain();
floating.Show();
}
private void kbtnKryptonFormExtendedExample_Click(object sender, EventArgs e)
{
- KryptonFormExtended1 kryptonFormExtended = new KryptonFormExtended1();
+ var kryptonFormExtended = new KryptonFormExtended1();
kryptonFormExtended.Show();
}
private void kbtnDialogExamples_Click(object sender, EventArgs e)
{
- DialogExamples dialogExamples = new DialogExamples();
+ var dialogExamples = new DialogExamples();
dialogExamples.Show();
}
private void kbtnInputBoxExamples_Click(object sender, EventArgs e)
{
- KryptonInputBoxExtendedExample example = new KryptonInputBoxExtendedExample();
+ var example = new KryptonInputBoxExtendedExample();
example.Show();
}
@@ -107,21 +121,21 @@ private void kbtnTreeGridViewExample_Click(object sender, EventArgs e)
private void kbtnTreeGridView2Example_Click(object sender, EventArgs e)
{
- TreeGridViewAdvancedExample treeGridViewAdvanced = new TreeGridViewAdvancedExample();
+ var treeGridViewAdvanced = new TreeGridViewAdvancedExample();
treeGridViewAdvanced.Show();
}
private void kbtnAdvancedDataGridExample_Click(object sender, EventArgs e)
{
- AdvancedDataGridView advancedDataGrid = new AdvancedDataGridView();
+ var advancedDataGrid = new AdvancedDataGridView();
advancedDataGrid.Show();
}
private void kbtnDockExtenderExample_Click(object sender, EventArgs e)
{
- DockExtenderExample dockExtenderExample = new DockExtenderExample();
+ var dockExtenderExample = new DockExtenderExample();
dockExtenderExample.Show();
}
@@ -135,23 +149,44 @@ private void kbtnThemeTools_Click(object sender, EventArgs e)
private void kbtnRibbonExtended_Click(object sender, EventArgs e)
{
- KryptonRibbonExtendedExample ribbonExtendedExample = new KryptonRibbonExtendedExample();
+ var ribbonExtendedExample = new KryptonRibbonExtendedExample();
ribbonExtendedExample.Show();
}
private void kbtnMemoryBoxExample_Click(object sender, EventArgs e)
{
- MemoryBoxExample memoryBoxExample = new MemoryBoxExample();
+ var memoryBoxExample = new MemoryBoxExample();
memoryBoxExample.Show();
}
private void kbtnProgressBars_Click(object sender, EventArgs e)
{
- KryptonProgressBarExtendedExamples progressBarExtendedExamples = new KryptonProgressBarExtendedExamples();
+ var progressBarExtendedExamples = new KryptonProgressBarExtendedExamples();
progressBarExtendedExamples.Show();
}
+
+ private void kbtnCheckBoxComboBoxExample_Click(object sender, EventArgs e)
+ {
+ var example = new CheckBoxComboBoxTest();
+
+ example.Show();
+ }
+
+ private void kbtnNotificationExample_Click(object sender, EventArgs e)
+ {
+ var toasts = new ToastNotificationMenu();
+
+ toasts.Show();
+ }
+
+ private void kbtnControls_Click(object sender, EventArgs e)
+ {
+ var controls = new ExtendedControlExamples();
+
+ controls.Show();
+ }
}
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/MemoryBoxExample.Designer.cs b/Source/Krypton Toolkit/Examples/MemoryBoxExample.Designer.cs
index 31da2dd92..60066b799 100644
--- a/Source/Krypton Toolkit/Examples/MemoryBoxExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/MemoryBoxExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class MemoryBoxExample
{
diff --git a/Source/Krypton Toolkit/Examples/MemoryBoxExample.cs b/Source/Krypton Toolkit/Examples/MemoryBoxExample.cs
index 1db84da78..8610210c8 100644
--- a/Source/Krypton Toolkit/Examples/MemoryBoxExample.cs
+++ b/Source/Krypton Toolkit/Examples/MemoryBoxExample.cs
@@ -1,4 +1,32 @@
-using Krypton.Toolkit.Suite.Extended.Memory.Box;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+using Krypton.Toolkit.Suite.Extended.Memory.Box;
using Microsoft.WindowsAPICodePack.Dialogs;
@@ -11,7 +39,7 @@ public partial class MemoryBoxExample : KryptonForm
private const string SEED_TEXT = @"/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the ""Software""), to deal
diff --git a/Source/Krypton Toolkit/Examples/MessageBoxExample.Designer.cs b/Source/Krypton Toolkit/Examples/MessageBoxExample.Designer.cs
index 457fa29b4..0d632b9cf 100644
--- a/Source/Krypton Toolkit/Examples/MessageBoxExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/MessageBoxExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class MessageBoxExample
{
@@ -31,6 +59,13 @@ private void InitializeComponent()
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MessageBoxExample));
this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kryptonGroupBox5 = new Krypton.Toolkit.KryptonGroupBox();
+ this.kcbRtlReading = new Krypton.Toolkit.KryptonCheckBox();
+ this.kcbRightAlign = new Krypton.Toolkit.KryptonCheckBox();
+ this.kryptonGroupBox4 = new Krypton.Toolkit.KryptonGroupBox();
+ this.kcbOptionalCheckBoxChecked = new Krypton.Toolkit.KryptonCheckBox();
+ this.ktxtOptionalCheckBoxText = new Krypton.Toolkit.KryptonTextBox();
+ this.kcbShowOptionalCheckBox = new Krypton.Toolkit.KryptonCheckBox();
this.kmbFillText = new Krypton.Toolkit.KryptonButton();
this.kbtnShow = new Krypton.Toolkit.KryptonButton();
this.kryptonGroupBox3 = new Krypton.Toolkit.KryptonGroupBox();
@@ -43,7 +78,6 @@ private void InitializeComponent()
this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel();
this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel();
this.kcmbMessageContentType = new Krypton.Toolkit.KryptonComboBox();
- this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox();
this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox();
this.kryptonComboBox3 = new Krypton.Toolkit.KryptonComboBox();
this.ktxtCustomButtonFourText = new Krypton.Toolkit.KryptonTextBox();
@@ -65,18 +99,21 @@ private void InitializeComponent()
this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel();
this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components);
this.kbtnFillText = new Krypton.Toolkit.KryptonButton();
- this.kryptonGroupBox4 = new Krypton.Toolkit.KryptonGroupBox();
- this.kcbShowOptionalCheckBox = new Krypton.Toolkit.KryptonCheckBox();
- this.ktxtOptionalCheckBoxText = new Krypton.Toolkit.KryptonTextBox();
- this.kcbOptionalCheckBoxChecked = new Krypton.Toolkit.KryptonCheckBox();
((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
this.kryptonPanel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5.Panel)).BeginInit();
+ this.kryptonGroupBox5.Panel.SuspendLayout();
+ this.kryptonGroupBox5.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).BeginInit();
+ this.kryptonGroupBox4.Panel.SuspendLayout();
+ this.kryptonGroupBox4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).BeginInit();
this.kryptonGroupBox3.Panel.SuspendLayout();
this.kryptonGroupBox3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.kcmbMessageContentType)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit();
this.kryptonGroupBox2.Panel.SuspendLayout();
@@ -95,19 +132,15 @@ private void InitializeComponent()
this.groupBoxIcon.Panel.SuspendLayout();
this.groupBoxIcon.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.kcmbMessageBoxIcon)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).BeginInit();
- this.kryptonGroupBox4.Panel.SuspendLayout();
- this.kryptonGroupBox4.SuspendLayout();
this.SuspendLayout();
//
// kryptonPanel1
//
+ this.kryptonPanel1.Controls.Add(this.kryptonGroupBox5);
this.kryptonPanel1.Controls.Add(this.kryptonGroupBox4);
this.kryptonPanel1.Controls.Add(this.kmbFillText);
this.kryptonPanel1.Controls.Add(this.kbtnShow);
this.kryptonPanel1.Controls.Add(this.kryptonGroupBox3);
- this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1);
this.kryptonPanel1.Controls.Add(this.kryptonGroupBox2);
this.kryptonPanel1.Controls.Add(this.kryptonGroupBox1);
this.kryptonPanel1.Controls.Add(this.groupBoxIcon);
@@ -118,9 +151,75 @@ private void InitializeComponent()
this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
this.kryptonPanel1.Name = "kryptonPanel1";
- this.kryptonPanel1.Size = new System.Drawing.Size(1577, 429);
+ this.kryptonPanel1.Size = new System.Drawing.Size(1585, 437);
this.kryptonPanel1.TabIndex = 0;
//
+ // kryptonGroupBox5
+ //
+ this.kryptonGroupBox5.Location = new System.Drawing.Point(412, 306);
+ this.kryptonGroupBox5.Name = "kryptonGroupBox5";
+ //
+ // kryptonGroupBox5.Panel
+ //
+ this.kryptonGroupBox5.Panel.Controls.Add(this.kcbRtlReading);
+ this.kryptonGroupBox5.Panel.Controls.Add(this.kcbRightAlign);
+ this.kryptonGroupBox5.Size = new System.Drawing.Size(423, 63);
+ this.kryptonGroupBox5.TabIndex = 19;
+ this.kryptonGroupBox5.Values.Heading = "Options";
+ //
+ // kcbRtlReading
+ //
+ this.kcbRtlReading.Location = new System.Drawing.Point(214, 3);
+ this.kcbRtlReading.Name = "kcbRtlReading";
+ this.kcbRtlReading.Size = new System.Drawing.Size(197, 20);
+ this.kcbRtlReading.TabIndex = 2;
+ this.kcbRtlReading.Values.Text = "MessageBoxOptions.RtlReading";
+ //
+ // kcbRightAlign
+ //
+ this.kcbRightAlign.Location = new System.Drawing.Point(13, 3);
+ this.kcbRightAlign.Name = "kcbRightAlign";
+ this.kcbRightAlign.Size = new System.Drawing.Size(195, 20);
+ this.kcbRightAlign.TabIndex = 1;
+ this.kcbRightAlign.Values.Text = "MessageBoxOptions.RightAlign";
+ //
+ // kryptonGroupBox4
+ //
+ this.kryptonGroupBox4.Location = new System.Drawing.Point(721, 182);
+ this.kryptonGroupBox4.Name = "kryptonGroupBox4";
+ //
+ // kryptonGroupBox4.Panel
+ //
+ this.kryptonGroupBox4.Panel.Controls.Add(this.kcbOptionalCheckBoxChecked);
+ this.kryptonGroupBox4.Panel.Controls.Add(this.ktxtOptionalCheckBoxText);
+ this.kryptonGroupBox4.Panel.Controls.Add(this.kcbShowOptionalCheckBox);
+ this.kryptonGroupBox4.Size = new System.Drawing.Size(311, 118);
+ this.kryptonGroupBox4.TabIndex = 18;
+ //
+ // kcbOptionalCheckBoxChecked
+ //
+ this.kcbOptionalCheckBoxChecked.Location = new System.Drawing.Point(16, 63);
+ this.kcbOptionalCheckBoxChecked.Name = "kcbOptionalCheckBoxChecked";
+ this.kcbOptionalCheckBoxChecked.Size = new System.Drawing.Size(189, 20);
+ this.kcbOptionalCheckBoxChecked.TabIndex = 2;
+ this.kcbOptionalCheckBoxChecked.Values.Text = "Is optional checkbox checked?";
+ //
+ // ktxtOptionalCheckBoxText
+ //
+ this.ktxtOptionalCheckBoxText.Location = new System.Drawing.Point(16, 33);
+ this.ktxtOptionalCheckBoxText.Name = "ktxtOptionalCheckBoxText";
+ this.ktxtOptionalCheckBoxText.Size = new System.Drawing.Size(277, 23);
+ this.ktxtOptionalCheckBoxText.TabIndex = 1;
+ this.ktxtOptionalCheckBoxText.Text = "kryptonTextBox2";
+ //
+ // kcbShowOptionalCheckBox
+ //
+ this.kcbShowOptionalCheckBox.Location = new System.Drawing.Point(16, 6);
+ this.kcbShowOptionalCheckBox.Name = "kcbShowOptionalCheckBox";
+ this.kcbShowOptionalCheckBox.Size = new System.Drawing.Size(160, 20);
+ this.kcbShowOptionalCheckBox.TabIndex = 0;
+ this.kcbShowOptionalCheckBox.Values.Text = "Show Optional CheckBox";
+ //
// kmbFillText
//
this.kmbFillText.Location = new System.Drawing.Point(13, 66);
@@ -133,7 +232,7 @@ private void InitializeComponent()
// kbtnShow
//
this.kbtnShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnShow.Location = new System.Drawing.Point(1475, 392);
+ this.kbtnShow.Location = new System.Drawing.Point(1483, 400);
this.kbtnShow.Name = "kbtnShow";
this.kbtnShow.Size = new System.Drawing.Size(90, 25);
this.kbtnShow.TabIndex = 16;
@@ -174,7 +273,7 @@ private void InitializeComponent()
this.ktxtHyperlinkDestination.CueHint.CueHintText = "Enter a URL or resource path here...";
this.ktxtHyperlinkDestination.Location = new System.Drawing.Point(16, 37);
this.ktxtHyperlinkDestination.Name = "ktxtHyperlinkDestination";
- this.ktxtHyperlinkDestination.Size = new System.Drawing.Size(277, 24);
+ this.ktxtHyperlinkDestination.Size = new System.Drawing.Size(277, 26);
this.ktxtHyperlinkDestination.TabIndex = 6;
this.ktxtHyperlinkDestination.TextChanged += new System.EventHandler(this.ktxtHyperlinkDestination_TextChanged);
//
@@ -271,7 +370,7 @@ private void InitializeComponent()
//
this.kcmbMessageContentType.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kcmbMessageContentType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kcmbMessageContentType.DropDownWidth = 247;
+ this.kcmbMessageContentType.DropDownWidth = 277;
this.kcmbMessageContentType.IntegralHeight = false;
this.kcmbMessageContentType.Location = new System.Drawing.Point(16, 6);
this.kcmbMessageContentType.Name = "kcmbMessageContentType";
@@ -280,17 +379,6 @@ private void InitializeComponent()
this.kcmbMessageContentType.TabIndex = 2;
this.kcmbMessageContentType.SelectedIndexChanged += new System.EventHandler(this.kcmbMessageContentType_SelectedIndexChanged);
//
- // kryptonThemeComboBox1
- //
- this.kryptonThemeComboBox1.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.kryptonThemeComboBox1.DropDownWidth = 311;
- this.kryptonThemeComboBox1.IntegralHeight = false;
- this.kryptonThemeComboBox1.Location = new System.Drawing.Point(404, 13);
- this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1";
- this.kryptonThemeComboBox1.Size = new System.Drawing.Size(311, 21);
- this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
- this.kryptonThemeComboBox1.TabIndex = 14;
- //
// kryptonGroupBox2
//
this.kryptonGroupBox2.Location = new System.Drawing.Point(404, 40);
@@ -314,7 +402,7 @@ private void InitializeComponent()
//
this.kryptonComboBox3.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonComboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kryptonComboBox3.DropDownWidth = 247;
+ this.kryptonComboBox3.DropDownWidth = 270;
this.kryptonComboBox3.IntegralHeight = false;
this.kryptonComboBox3.Location = new System.Drawing.Point(21, 205);
this.kryptonComboBox3.Name = "kryptonComboBox3";
@@ -334,7 +422,7 @@ private void InitializeComponent()
//
this.kryptonComboBox4.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonComboBox4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kryptonComboBox4.DropDownWidth = 247;
+ this.kryptonComboBox4.DropDownWidth = 270;
this.kryptonComboBox4.IntegralHeight = false;
this.kryptonComboBox4.Location = new System.Drawing.Point(21, 148);
this.kryptonComboBox4.Name = "kryptonComboBox4";
@@ -354,7 +442,7 @@ private void InitializeComponent()
//
this.kryptonComboBox2.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kryptonComboBox2.DropDownWidth = 247;
+ this.kryptonComboBox2.DropDownWidth = 270;
this.kryptonComboBox2.IntegralHeight = false;
this.kryptonComboBox2.Location = new System.Drawing.Point(21, 91);
this.kryptonComboBox2.Name = "kryptonComboBox2";
@@ -374,7 +462,7 @@ private void InitializeComponent()
//
this.kryptonComboBox1.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kryptonComboBox1.DropDownWidth = 247;
+ this.kryptonComboBox1.DropDownWidth = 270;
this.kryptonComboBox1.IntegralHeight = false;
this.kryptonComboBox1.Location = new System.Drawing.Point(21, 34);
this.kryptonComboBox1.Name = "kryptonComboBox1";
@@ -434,7 +522,7 @@ private void InitializeComponent()
this.kryptonTextBox1.Enabled = false;
this.kryptonTextBox1.Location = new System.Drawing.Point(12, 35);
this.kryptonTextBox1.Name = "kryptonTextBox1";
- this.kryptonTextBox1.Size = new System.Drawing.Size(256, 24);
+ this.kryptonTextBox1.Size = new System.Drawing.Size(256, 26);
this.kryptonTextBox1.TabIndex = 1;
//
// bsaBrowse
@@ -492,6 +580,10 @@ private void InitializeComponent()
this.kryptonLabel1.TabIndex = 0;
this.kryptonLabel1.Values.Text = "Caption:";
//
+ // kryptonManager1
+ //
+ this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.SparkleOrange;
+ //
// kbtnFillText
//
this.kbtnFillText.Location = new System.Drawing.Point(13, 66);
@@ -500,48 +592,11 @@ private void InitializeComponent()
this.kbtnFillText.TabIndex = 17;
this.kbtnFillText.Values.Text = "Fill Text";
//
- // kryptonGroupBox4
- //
- this.kryptonGroupBox4.Location = new System.Drawing.Point(721, 182);
- this.kryptonGroupBox4.Name = "kryptonGroupBox4";
- //
- // kryptonGroupBox4.Panel
- //
- this.kryptonGroupBox4.Panel.Controls.Add(this.kcbOptionalCheckBoxChecked);
- this.kryptonGroupBox4.Panel.Controls.Add(this.ktxtOptionalCheckBoxText);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kcbShowOptionalCheckBox);
- this.kryptonGroupBox4.Size = new System.Drawing.Size(311, 118);
- this.kryptonGroupBox4.TabIndex = 18;
- //
- // kcbShowOptionalCheckBox
- //
- this.kcbShowOptionalCheckBox.Location = new System.Drawing.Point(16, 6);
- this.kcbShowOptionalCheckBox.Name = "kcbShowOptionalCheckBox";
- this.kcbShowOptionalCheckBox.Size = new System.Drawing.Size(160, 20);
- this.kcbShowOptionalCheckBox.TabIndex = 0;
- this.kcbShowOptionalCheckBox.Values.Text = "Show Optional CheckBox";
- //
- // ktxtOptionalCheckBoxText
- //
- this.ktxtOptionalCheckBoxText.Location = new System.Drawing.Point(16, 33);
- this.ktxtOptionalCheckBoxText.Name = "ktxtOptionalCheckBoxText";
- this.ktxtOptionalCheckBoxText.Size = new System.Drawing.Size(277, 23);
- this.ktxtOptionalCheckBoxText.TabIndex = 1;
- this.ktxtOptionalCheckBoxText.Text = "kryptonTextBox2";
- //
- // kcbOptionalCheckBoxChecked
- //
- this.kcbOptionalCheckBoxChecked.Location = new System.Drawing.Point(16, 63);
- this.kcbOptionalCheckBoxChecked.Name = "kcbOptionalCheckBoxChecked";
- this.kcbOptionalCheckBoxChecked.Size = new System.Drawing.Size(189, 20);
- this.kcbOptionalCheckBoxChecked.TabIndex = 2;
- this.kcbOptionalCheckBoxChecked.Values.Text = "Is optional checkbox checked?";
- //
// MessageBoxExample
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1577, 429);
+ this.ClientSize = new System.Drawing.Size(1585, 437);
this.Controls.Add(this.kryptonPanel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.MaximizeBox = false;
@@ -551,13 +606,22 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5.Panel)).EndInit();
+ this.kryptonGroupBox5.Panel.ResumeLayout(false);
+ this.kryptonGroupBox5.Panel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5)).EndInit();
+ this.kryptonGroupBox5.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).EndInit();
+ this.kryptonGroupBox4.Panel.ResumeLayout(false);
+ this.kryptonGroupBox4.Panel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).EndInit();
+ this.kryptonGroupBox4.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).EndInit();
this.kryptonGroupBox3.Panel.ResumeLayout(false);
this.kryptonGroupBox3.Panel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).EndInit();
this.kryptonGroupBox3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.kcmbMessageContentType)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit();
this.kryptonGroupBox2.Panel.ResumeLayout(false);
this.kryptonGroupBox2.Panel.PerformLayout();
@@ -578,11 +642,6 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.groupBoxIcon)).EndInit();
this.groupBoxIcon.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.kcmbMessageBoxIcon)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).EndInit();
- this.kryptonGroupBox4.Panel.ResumeLayout(false);
- this.kryptonGroupBox4.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).EndInit();
- this.kryptonGroupBox4.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -605,7 +664,6 @@ private void InitializeComponent()
private Krypton.Toolkit.KryptonTextBox ktxtCustomButtonTwoText;
private Krypton.Toolkit.KryptonComboBox kryptonComboBox1;
private Krypton.Toolkit.KryptonTextBox ktxtCustomButtonOneText;
- private KryptonThemeComboBox kryptonThemeComboBox1;
private KryptonComboBox kcmbMessageBoxIcon;
private KryptonTextBox kryptonTextBox1;
private KryptonComboBox kcmbMessageBoxButtons;
@@ -628,5 +686,8 @@ private void InitializeComponent()
private KryptonCheckBox kcbShowOptionalCheckBox;
private KryptonTextBox ktxtOptionalCheckBoxText;
private KryptonCheckBox kcbOptionalCheckBoxChecked;
+ private KryptonGroupBox kryptonGroupBox5;
+ private KryptonCheckBox kcbRightAlign;
+ private KryptonCheckBox kcbRtlReading;
}
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/MessageBoxExample.cs b/Source/Krypton Toolkit/Examples/MessageBoxExample.cs
index e524ea787..c75df4496 100644
--- a/Source/Krypton Toolkit/Examples/MessageBoxExample.cs
+++ b/Source/Krypton Toolkit/Examples/MessageBoxExample.cs
@@ -1,4 +1,31 @@
-using Krypton.Toolkit.Suite.Extended.Core;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.Developer.Utilities;
using Krypton.Toolkit.Suite.Extended.Messagebox;
@@ -9,10 +36,12 @@ namespace Examples
{
public partial class MessageBoxExample : KryptonForm
{
+ #region Static Fields
+
private static string SEED_TEXT = @"/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the ""Software""), to deal
@@ -34,11 +63,45 @@ public partial class MessageBoxExample : KryptonForm
*
*/";
+ #endregion
+
+ #region Instance Fields
+
+ #region Standard Options
+
+ private bool _showCloseBox;
+
+ private string _caption;
+
+ private string _message;
+
+ private KryptonMessageBoxDefaultButton _defaultButton = KryptonMessageBoxDefaultButton.Button1;
+
+ private ExtendedKryptonMessageBoxIcon _icon = ExtendedKryptonMessageBoxIcon.Information;
+
+ private KryptonMessageBoxButtons _button = KryptonMessageBoxButtons.OK;
+
+ private MessageBoxOptions _options = 0;
+
+ private ContentAlignment _messageTextAlignment = ContentAlignment.MiddleLeft;
+
+ private Image _customImage;
+
+ #endregion
+
+ #endregion
+
+ #region Identity
+
public MessageBoxExample()
{
InitializeComponent();
}
+ #endregion
+
+ #region Implementation
+
private void MessageBoxExample_Load(object sender, EventArgs e)
{
foreach (string value in Enum.GetNames(typeof(ExtendedKryptonMessageBoxIcon)))
@@ -144,14 +207,16 @@ private void kryptonButton1_Click(object sender, EventArgs e)
private void kbtnShow_Click(object sender, EventArgs e)
{
- DialogResult result = KryptonMessageBoxExtended.Show(ktxtMessageContent.Text, ktxtCaption.Text, ExtendedMessageBoxButtons.OK,
- ExtendedKryptonMessageBoxIcon.Information, kcbShowOptionalCheckBox.Checked, kcbOptionalCheckBoxChecked.Checked,
- ktxtOptionalCheckBoxText.Text, null);
+ //KryptonMessageBoxExtended.Show(this, _message, _caption, _button, _icon, _defaultButton, _options);
- if (result == DialogResult.OK)
- {
- MessageBox.Show($@"{KryptonMessageBoxExtended.ReturnCheckBoxCheckedValue()}");
- }
+ //DialogResult result = KryptonMessageBoxExtended.Show(_message, _caption, _button, _icon, _defaultButton, _options);
+
+ //if (result == DialogResult.OK)
+ //{
+ // MessageBox.Show($@"{KryptonMessageBoxExtended.ReturnCheckBoxCheckedValue()}");
+ //}
}
+
+ #endregion
}
}
diff --git a/Source/Krypton Toolkit/Examples/NaviBarExample.Designer.cs b/Source/Krypton Toolkit/Examples/NaviBarExample.Designer.cs
index 2551c7e75..26474cc09 100644
--- a/Source/Krypton Toolkit/Examples/NaviBarExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/NaviBarExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class NaviBarExample
{
diff --git a/Source/Krypton Toolkit/Examples/NaviBarExample.cs b/Source/Krypton Toolkit/Examples/NaviBarExample.cs
index f143329af..c702e280d 100644
--- a/Source/Krypton Toolkit/Examples/NaviBarExample.cs
+++ b/Source/Krypton Toolkit/Examples/NaviBarExample.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class NaviBarExample : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/NotificationExample.Designer.cs b/Source/Krypton Toolkit/Examples/NotificationExample.Designer.cs
deleted file mode 100644
index 3232142b8..000000000
--- a/Source/Krypton Toolkit/Examples/NotificationExample.Designer.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-namespace Examples
-{
- partial class NotificationExample
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- this.kryptonToastNotificationPopup1 = new Krypton.Toolkit.Suite.Extended.Notifications.KryptonToastNotificationPopup();
- this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
- this.kbtnShowToastNotification = new Krypton.Toolkit.KryptonButton();
- this.ktnmTest = new Krypton.Toolkit.Suite.Extended.Toast.KryptonToastNotificationManager();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
- this.kryptonPanel1.SuspendLayout();
- this.SuspendLayout();
- //
- // kryptonToastNotificationPopup1
- //
- this.kryptonToastNotificationPopup1.ContentFont = new System.Drawing.Font("Tahoma", 8F);
- this.kryptonToastNotificationPopup1.ContentText = null;
- this.kryptonToastNotificationPopup1.Image = null;
- this.kryptonToastNotificationPopup1.IsRightToLeft = false;
- this.kryptonToastNotificationPopup1.OptionsMenu = null;
- this.kryptonToastNotificationPopup1.Size = new System.Drawing.Size(400, 100);
- this.kryptonToastNotificationPopup1.TitleFont = new System.Drawing.Font("Segoe UI", 9F);
- this.kryptonToastNotificationPopup1.TitleText = null;
- //
- // kryptonPanel1
- //
- this.kryptonPanel1.Controls.Add(this.kbtnShowToastNotification);
- this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
- this.kryptonPanel1.Name = "kryptonPanel1";
- this.kryptonPanel1.Size = new System.Drawing.Size(360, 184);
- this.kryptonPanel1.TabIndex = 0;
- //
- // kbtnShowToastNotification
- //
- this.kbtnShowToastNotification.CornerRoundingRadius = -1F;
- this.kbtnShowToastNotification.Location = new System.Drawing.Point(13, 13);
- this.kbtnShowToastNotification.Name = "kbtnShowToastNotification";
- this.kbtnShowToastNotification.Size = new System.Drawing.Size(335, 25);
- this.kbtnShowToastNotification.TabIndex = 0;
- this.kbtnShowToastNotification.Values.Text = "Show Toast Notification";
- this.kbtnShowToastNotification.Click += new System.EventHandler(this.kbtnShowToastNotification_Click);
- //
- // ktnmTest
- //
- this.ktnmTest.ContentAreaType = Krypton.Toolkit.Suite.Extended.Toast.ToastNotificationContentAreaType.WrappedLabel;
- this.ktnmTest.ContentText = "This is a sample notification.";
- this.ktnmTest.DismissText = "&Dismiss";
- this.ktnmTest.IconType = Krypton.Toolkit.Suite.Extended.Toast.IconType.Information;
- this.ktnmTest.RightToLeftSupport = Krypton.Toolkit.Suite.Extended.Toast.RightToLeftSupport.LeftToRight;
- this.ktnmTest.Title = "Sample Notification";
- this.ktnmTest.UserResponsePromptAlignHorizontal = Krypton.Toolkit.PaletteRelativeAlign.Center;
- this.ktnmTest.UserResponsePromptAlignVertical = Krypton.Toolkit.PaletteRelativeAlign.Center;
- this.ktnmTest.UserResponsePromptColour = System.Drawing.Color.Gray;
- this.ktnmTest.UserResponsePromptFont = new System.Drawing.Font("Segoe UI", 8.25F);
- //
- // NotificationExample
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(360, 184);
- this.Controls.Add(this.kryptonPanel1);
- this.Name = "NotificationExample";
- this.Text = "NotificationExample";
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
- this.kryptonPanel1.ResumeLayout(false);
- this.ResumeLayout(false);
-
- }
-
- #endregion
- private Krypton.Toolkit.Suite.Extended.Notifications.KryptonToastNotificationPopup kryptonToastNotificationPopup1;
- private Krypton.Toolkit.KryptonPanel kryptonPanel1;
- private Krypton.Toolkit.KryptonButton kbtnShowToastNotification;
- private Krypton.Toolkit.Suite.Extended.Toast.KryptonToastNotificationManager ktnmTest;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/NotificationExample.cs b/Source/Krypton Toolkit/Examples/NotificationExample.cs
deleted file mode 100644
index ca15dc100..000000000
--- a/Source/Krypton Toolkit/Examples/NotificationExample.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace Examples
-{
- public partial class NotificationExample : KryptonForm
- {
- public NotificationExample()
- {
- InitializeComponent();
- }
-
- private void kbtnShowToastNotification_Click(object sender, EventArgs e)
- {
- ktnmTest.DisplayNotificationToast();
- }
- }
-}
diff --git a/Source/Krypton Toolkit/Examples/NotificationExample.resx b/Source/Krypton Toolkit/Examples/NotificationExample.resx
deleted file mode 100644
index b31874dc0..000000000
--- a/Source/Krypton Toolkit/Examples/NotificationExample.resx
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 119, 17
-
-
- 17, 17
-
-
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/OutlookGridExample.Designer.cs b/Source/Krypton Toolkit/Examples/OutlookGridExample.Designer.cs
deleted file mode 100644
index bfdd56bbe..000000000
--- a/Source/Krypton Toolkit/Examples/OutlookGridExample.Designer.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-namespace Examples
-{
- partial class OutlookGridExample
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- Krypton.Toolkit.Suite.Extended.Outlook.Grid.OutlookGridGroupCollection outlookGridGroupCollection1 = new Krypton.Toolkit.Suite.Extended.Outlook.Grid.OutlookGridGroupCollection();
- this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
- this.kryptonHeaderGroup1 = new Krypton.Toolkit.KryptonHeaderGroup();
- this.buttonSpecHeaderGroup1 = new Krypton.Toolkit.ButtonSpecHeaderGroup();
- this.buttonSpecHeaderGroup2 = new Krypton.Toolkit.ButtonSpecHeaderGroup();
- this.buttonSpecHeaderGroup3 = new Krypton.Toolkit.ButtonSpecHeaderGroup();
- this.kryptonOutlookGridGroupBox2 = new Krypton.Toolkit.Suite.Extended.Outlook.Grid.KryptonOutlookGridGroupBox();
- this.kogExample = new Krypton.Toolkit.Suite.Extended.Outlook.Grid.KryptonOutlookGrid();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
- this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1.Panel)).BeginInit();
- this.kryptonHeaderGroup1.Panel.SuspendLayout();
- this.kryptonHeaderGroup1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kogExample)).BeginInit();
- this.SuspendLayout();
- //
- // kryptonPanel1
- //
- this.kryptonPanel1.Controls.Add(this.kryptonHeaderGroup1);
- this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
- this.kryptonPanel1.Name = "kryptonPanel1";
- this.kryptonPanel1.Size = new System.Drawing.Size(800, 450);
- this.kryptonPanel1.TabIndex = 1;
- //
- // kryptonHeaderGroup1
- //
- this.kryptonHeaderGroup1.ButtonSpecs.AddRange(new Krypton.Toolkit.ButtonSpecHeaderGroup[] {
- this.buttonSpecHeaderGroup1,
- this.buttonSpecHeaderGroup2,
- this.buttonSpecHeaderGroup3});
- this.kryptonHeaderGroup1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kryptonHeaderGroup1.HeaderVisibleSecondary = false;
- this.kryptonHeaderGroup1.Location = new System.Drawing.Point(0, 0);
- this.kryptonHeaderGroup1.Name = "kryptonHeaderGroup1";
- //
- // kryptonHeaderGroup1.Panel
- //
- this.kryptonHeaderGroup1.Panel.Controls.Add(this.kryptonOutlookGridGroupBox2);
- this.kryptonHeaderGroup1.Panel.Controls.Add(this.kogExample);
- this.kryptonHeaderGroup1.Size = new System.Drawing.Size(800, 450);
- this.kryptonHeaderGroup1.TabIndex = 3;
- this.kryptonHeaderGroup1.ValuesPrimary.Heading = "Options";
- this.kryptonHeaderGroup1.ValuesPrimary.Image = null;
- //
- // buttonSpecHeaderGroup1
- //
- this.buttonSpecHeaderGroup1.Text = "Load config";
- this.buttonSpecHeaderGroup1.UniqueName = "57942eb9436944db83b334a0bf2f2362";
- this.buttonSpecHeaderGroup1.Click += new System.EventHandler(this.buttonSpecHeaderGroup1_Click);
- //
- // buttonSpecHeaderGroup2
- //
- this.buttonSpecHeaderGroup2.Text = "Save config";
- this.buttonSpecHeaderGroup2.UniqueName = "d7f140c9902041c8ba2ab10fda344b9b";
- this.buttonSpecHeaderGroup2.Click += new System.EventHandler(this.buttonSpecHeaderGroup2_Click);
- //
- // buttonSpecHeaderGroup3
- //
- this.buttonSpecHeaderGroup3.Text = "Toggle all nodes";
- this.buttonSpecHeaderGroup3.UniqueName = "b3b0035890fc444783d157625034a3cb";
- this.buttonSpecHeaderGroup3.Click += new System.EventHandler(this.buttonSpecHeaderGroup3_Click);
- //
- // kryptonOutlookGridGroupBox2
- //
- this.kryptonOutlookGridGroupBox2.AllowDrop = true;
- this.kryptonOutlookGridGroupBox2.Dock = System.Windows.Forms.DockStyle.Top;
- this.kryptonOutlookGridGroupBox2.Location = new System.Drawing.Point(0, 0);
- this.kryptonOutlookGridGroupBox2.Name = "kryptonOutlookGridGroupBox2";
- this.kryptonOutlookGridGroupBox2.Size = new System.Drawing.Size(798, 46);
- this.kryptonOutlookGridGroupBox2.TabIndex = 0;
- //
- // kogExample
- //
- this.kogExample.AllowDrop = true;
- this.kogExample.AllowUserToAddRows = false;
- this.kogExample.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kogExample.FillMode = Krypton.Toolkit.Suite.Extended.Outlook.Grid.FillMode.GroupsOnly;
- this.kogExample.GroupCollection = outlookGridGroupCollection1;
- this.kogExample.Location = new System.Drawing.Point(0, 0);
- this.kogExample.Name = "kogExample";
- this.kogExample.PreviousSelectedGroupRow = -1;
- this.kogExample.ShowLines = false;
- this.kogExample.Size = new System.Drawing.Size(798, 418);
- this.kogExample.TabIndex = 2;
- this.kogExample.GroupImageClick += new System.EventHandler(this.kogExample_GroupImageClick);
- this.kogExample.Resize += new System.EventHandler(this.kogExample_Resize);
- //
- // OutlookGridExample
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
- this.Controls.Add(this.kryptonPanel1);
- this.Name = "OutlookGridExample";
- this.Text = "OutlookGridExample";
- this.Load += new System.EventHandler(this.OutlookGridExample_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
- this.kryptonPanel1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1.Panel)).EndInit();
- this.kryptonHeaderGroup1.Panel.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1)).EndInit();
- this.kryptonHeaderGroup1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kogExample)).EndInit();
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private Krypton.Toolkit.KryptonPanel kryptonPanel1;
- private Krypton.Toolkit.Suite.Extended.Outlook.Grid.KryptonOutlookGrid kogExample;
- private Krypton.Toolkit.KryptonHeaderGroup kryptonHeaderGroup1;
- private Krypton.Toolkit.Suite.Extended.Outlook.Grid.KryptonOutlookGridGroupBox kryptonOutlookGridGroupBox2;
- private Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroup1;
- private Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroup2;
- private Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroup3;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/OutlookGridExample.cs b/Source/Krypton Toolkit/Examples/OutlookGridExample.cs
deleted file mode 100644
index 95ca3d9a4..000000000
--- a/Source/Krypton Toolkit/Examples/OutlookGridExample.cs
+++ /dev/null
@@ -1,260 +0,0 @@
-using System.Globalization;
-using System.Xml;
-
-using Krypton.Toolkit.Suite.Extended.Developer.Utilities;
-using Krypton.Toolkit.Suite.Extended.Outlook.Grid;
-#pragma warning disable CS0219
-#pragma warning disable CS8603
-#pragma warning disable CS8602
-
-namespace Examples
-{
- public partial class OutlookGridExample : KryptonForm
- {
- private static Random rand = new Random();
-
- public OutlookGridExample()
- {
- InitializeComponent();
- }
-
- #region Implementation
-
- DateTime GetRandomDate(DateTime dtStart, DateTime dtEnd)
- {
- int cdayRange = (dtEnd - dtStart).Days;
-
- return dtStart.AddDays(rand.NextDouble() * cdayRange);
- }
-
- private void LoadData()
- {
- string? fileName = null;
-
- //Setup Rows
- OutlookGridRow row = new OutlookGridRow();
- List l = new List();
- kogExample.SuspendLayout();
- kogExample.ClearInternalRows();
- kogExample.FillMode = FillMode.GroupsAndNodes;
-
- List tokensList = new List();
- tokensList.Add(new Token("Best seller", Color.Orange, Color.Black));
- tokensList.Add(new Token("New", Color.LightGreen, Color.Black));
- tokensList.Add(null);
- tokensList.Add(null);
- tokensList.Add(null);
-
- Random random = new Random();
- //.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
-
- //OpenFileDialog ofd = new OpenFileDialog();
-
- //if (ofd.ShowDialog() == DialogResult.OK)
- //{
- // fileName = Path.GetFullPath(ofd.FileName);
- //}
-
- XmlDocument doc = new XmlDocument();
-
- try
- {
- doc.Load("invoices.xml");
-
- IFormatProvider culture = new CultureInfo("en-US", true);
- foreach (XmlNode customer in doc.SelectNodes("//invoice")) //TODO for instead foreach for perfs...
- {
- try
- {
- row = new OutlookGridRow();
- row.CreateCells(kogExample, new object[]
- {
- customer["CustomerID"].InnerText,
- customer["CustomerName"].InnerText,
- customer["Address"].InnerText,
- customer["City"].InnerText,
- new TextAndImage(customer["Country"].InnerText, GetFlag(customer["Country"].InnerText)),
- DateTime.Parse(customer["OrderDate"].InnerText, culture),
- customer["ProductName"].InnerText,
- double.Parse(customer["Price"].InnerText,
- CultureInfo.InvariantCulture), //We put a float the formatting in design does the rest
- (double) random.Next(101) / 100,
- tokensList[random.Next(5)]
- });
- if (random.Next(2) == 1)
- {
- //Sub row
- OutlookGridRow row2 = new OutlookGridRow();
- row2.CreateCells(kogExample, new object[]
- {
- $"{customer["CustomerID"].InnerText} 2",
- $"{customer["CustomerName"].InnerText} 2",
- $"{customer["Address"].InnerText}2",
- $"{customer["City"].InnerText} 2",
- new TextAndImage(customer["Country"].InnerText, GetFlag(customer["Country"].InnerText)),
- DateTime.Now,
- $"{customer["ProductName"].InnerText} 2",
- (double) random.Next(1000),
- (double) random.Next(101) / 100,
- tokensList[random.Next(5)]
- });
- row.Nodes.Add(row2);
- ((KryptonDataGridViewTreeTextCell)row2.Cells[1])
- .UpdateStyle(); //Important : after added to the parent node
- }
-
- l.Add(row);
- ((KryptonDataGridViewTreeTextCell)row.Cells[1])
- .UpdateStyle(); //Important : after added to the rows list
- }
- catch (Exception ex)
- {
- MessageBox.Show($"Gasp...Something went wrong ! {ex.Message}", "Error", MessageBoxButtons.OK,
- MessageBoxIcon.Error);
- }
- }
-
-
-
- kogExample.ResumeLayout();
- kogExample.AssignRows(l);
- kogExample.ForceRefreshGroupBox();
- kogExample.Fill();
- }
- catch (Exception e)
- {
- ExceptionCapture.CaptureException(e);
- }
-
- }
-
- private Image GetFlag(string country)
- {
- //Icons from http://365icon.com/icon-styles/ethnic/classic2/
-
- switch (country)
- {
- case "France":
- return Properties.Resources.fr;
- case "Germany":
- return Properties.Resources.de;
- case "Argentina":
- return Properties.Resources.ar;
- case "Austria":
- return Properties.Resources.au;
- case "Belgium":
- return Properties.Resources.be;
- case "Brazil":
- return Properties.Resources.br;
- case "Canada":
- return Properties.Resources.ca;
- case "Denmark":
- return Properties.Resources.dk;
- case "Finland":
- return Properties.Resources.fi;
- case "Ireland":
- return Properties.Resources.ie;
- case "Italy":
- return Properties.Resources.it;
- case "Mexico":
- return Properties.Resources.mx;
- case "Norway":
- return Properties.Resources.no;
- case "Poland":
- return Properties.Resources.pl;
- case "Portugal":
- return Properties.Resources.pt;
- case "Spain":
- return Properties.Resources.es;
- case "Sweden":
- return Properties.Resources.se;
- case "Switzerland":
- return Properties.Resources.ch;
- case "UK":
- return Properties.Resources.gb;
- case "USA":
- return Properties.Resources.us;
- case "Venezuela":
- return Properties.Resources.ve;
- default:
- return null;
- }
- }
-
- #endregion
-
- private void OutlookGridExample_Load(object sender, EventArgs e)
- {
- kogExample.GroupBox = kryptonOutlookGridGroupBox2;
-
- kogExample.RegisterGroupBoxEvents();
-
- DataGridViewSetup setup = new DataGridViewSetup();
-
- setup.SetupDataGridView(kogExample, true);
-
- kogExample.ShowLines = true;
-
- LoadData();
- }
-
- private void kogExample_Resize(object sender, EventArgs e)
- {
- int preferredTotalWidth = 1;
-
- //Calculate the total preferred width
- foreach (DataGridViewColumn c in kogExample.Columns)
- {
- preferredTotalWidth += Math.Min(c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true), 250);
- }
-
- if (kogExample.Width > preferredTotalWidth)
- {
- kogExample.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
- kogExample.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
- }
- else
- {
- kogExample.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
- foreach (DataGridViewColumn c in kogExample.Columns)
- {
- c.Width = Math.Min(c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true), 250);
- }
- }
- }
-
- private void kogExample_GroupImageClick(object sender, OutlookGridGroupImageEventArgs e)
- {
- MessageBox.Show($"Group Image clicked for group row : {e.Row.Group.Text}");
- }
-
- private void buttonSpecHeaderGroup1_Click(object sender, EventArgs e)
- {
- DataGridViewSetup setup = new DataGridViewSetup();
- setup.SetupDataGridView(this.kogExample, true);
- LoadData();
-
- }
-
- private void buttonSpecHeaderGroup2_Click(object sender, EventArgs e)
- {
- kogExample.PersistConfiguration($"{Application.StartupPath}/grid.xml", StaticInfos.GRIDCONFIG_VERSION.ToString());
- }
-
- bool expand = true;
-
- private void buttonSpecHeaderGroup3_Click(object sender, EventArgs e)
- {
- if (expand)
- {
- kogExample.ExpandAllNodes();
- }
- else
- {
- kogExample.CollapseAllNodes();
- }
-
- expand = !expand;
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/Program.cs b/Source/Krypton Toolkit/Examples/Program.cs
index 8a0756d51..02225e2c0 100644
--- a/Source/Krypton Toolkit/Examples/Program.cs
+++ b/Source/Krypton Toolkit/Examples/Program.cs
@@ -1,3 +1,31 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
internal static class Program
diff --git a/Source/Krypton Toolkit/Examples/Properties/Resources.Designer.cs b/Source/Krypton Toolkit/Examples/Properties/Resources.Designer.cs
index 3df08d1fa..5c8bf0002 100644
--- a/Source/Krypton Toolkit/Examples/Properties/Resources.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/Properties/Resources.Designer.cs
@@ -1,4 +1,33 @@
-//------------------------------------------------------------------------------
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+
+//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
diff --git a/Source/Krypton Toolkit/Examples/ThemeTools.Designer.cs b/Source/Krypton Toolkit/Examples/ThemeTools.Designer.cs
index dcee573be..e07844cec 100644
--- a/Source/Krypton Toolkit/Examples/ThemeTools.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ThemeTools.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ThemeTools
{
@@ -47,7 +75,6 @@ private void InitializeComponent()
//
// kbtnThemeSelector
//
- this.kbtnThemeSelector.CornerRoundingRadius = -1F;
this.kbtnThemeSelector.Location = new System.Drawing.Point(13, 43);
this.kbtnThemeSelector.Name = "kbtnThemeSelector";
this.kbtnThemeSelector.Size = new System.Drawing.Size(250, 25);
@@ -57,7 +84,6 @@ private void InitializeComponent()
//
// kbtnExternalThemeSelector
//
- this.kbtnExternalThemeSelector.CornerRoundingRadius = -1F;
this.kbtnExternalThemeSelector.Location = new System.Drawing.Point(13, 12);
this.kbtnExternalThemeSelector.Name = "kbtnExternalThemeSelector";
this.kbtnExternalThemeSelector.Size = new System.Drawing.Size(250, 25);
diff --git a/Source/Krypton Toolkit/Examples/ThemeTools.cs b/Source/Krypton Toolkit/Examples/ThemeTools.cs
index 7ccd1366c..53876d618 100644
--- a/Source/Krypton Toolkit/Examples/ThemeTools.cs
+++ b/Source/Krypton Toolkit/Examples/ThemeTools.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.Theme.Switcher;
namespace Examples
diff --git a/Source/Krypton Toolkit/Examples/ToastExample.Designer.cs b/Source/Krypton Toolkit/Examples/ToastExample.Designer.cs
deleted file mode 100644
index 63978ef7e..000000000
--- a/Source/Krypton Toolkit/Examples/ToastExample.Designer.cs
+++ /dev/null
@@ -1,753 +0,0 @@
-namespace Examples
-{
- partial class ToastExample
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ToastExample));
- this.kryptonToastNotificationManager1 = new Krypton.Toolkit.Suite.Extended.Toast.KryptonToastNotificationManager();
- this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
- this.kryptonGroupBox5 = new Krypton.Toolkit.KryptonGroupBox();
- this.kbtnAttachCommand = new Krypton.Toolkit.KryptonButton();
- this.kcmbActionButtonLocation = new Krypton.Toolkit.KryptonComboBox();
- this.kryptonLabel6 = new Krypton.Toolkit.KryptonLabel();
- this.kcbOpenProcessInExplorer = new Krypton.Toolkit.KryptonCheckBox();
- this.kbbProcessPath = new Krypton.Toolkit.Suite.Extended.Controls.KryptonBrowseBox();
- this.kryptonTextBox2 = new Krypton.Toolkit.KryptonTextBox();
- this.kcbActionType = new Krypton.Toolkit.KryptonComboBox();
- this.kryptonLabel5 = new Krypton.Toolkit.KryptonLabel();
- this.kryptonCheckBox4 = new Krypton.Toolkit.KryptonCheckBox();
- this.kbtnShow = new Krypton.Toolkit.KryptonButton();
- this.kryptonGroupBox4 = new Krypton.Toolkit.KryptonGroupBox();
- this.kcmbUserResponseTextAlignVertical = new Krypton.Toolkit.KryptonComboBox();
- this.kcmbUserResponseTextAlignHorizontal = new Krypton.Toolkit.KryptonComboBox();
- this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel();
- this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel();
- this.kbtnUserResponseFont = new Krypton.Toolkit.KryptonButton();
- this.kcolUserResponseColour = new Krypton.Toolkit.KryptonColorButton();
- this.ktxtPromptText = new Krypton.Toolkit.KryptonTextBox();
- this.kchkUseUserResponse = new Krypton.Toolkit.KryptonCheckBox();
- this.kryptonGroupBox3 = new Krypton.Toolkit.KryptonGroupBox();
- this.krbRightToLeft = new Krypton.Toolkit.KryptonRadioButton();
- this.krbLeftToRight = new Krypton.Toolkit.KryptonRadioButton();
- this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox();
- this.krbContentAreaTypeMultilinedTextBox = new Krypton.Toolkit.KryptonRadioButton();
- this.krbContentAreaTypeRichTextBox = new Krypton.Toolkit.KryptonRadioButton();
- this.krbContentAreaTypeWrappedLabel = new Krypton.Toolkit.KryptonRadioButton();
- this.krbContentAreaTypeLabel = new Krypton.Toolkit.KryptonRadioButton();
- this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox();
- this.krbIconTypeWindowsLogo = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeWarning = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeInformation = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeStop = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeShield = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeOk = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeNone = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeHand = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeExclamation = new Krypton.Toolkit.KryptonRadioButton();
- this.kbbIconTypeCustomPath = new Krypton.Toolkit.Suite.Extended.Controls.KryptonBrowseBox();
- this.krbIconTypeError = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeAsterisk = new Krypton.Toolkit.KryptonRadioButton();
- this.krbIconTypeCustom = new Krypton.Toolkit.KryptonRadioButton();
- this.krtbToastContent = new Krypton.Toolkit.KryptonRichTextBox();
- this.ktxtToastTitle = new Krypton.Toolkit.KryptonTextBox();
- this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel();
- this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
- this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5.Panel)).BeginInit();
- this.kryptonGroupBox5.Panel.SuspendLayout();
- this.kryptonGroupBox5.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbActionButtonLocation)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcbActionType)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).BeginInit();
- this.kryptonGroupBox4.Panel.SuspendLayout();
- this.kryptonGroupBox4.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbUserResponseTextAlignVertical)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbUserResponseTextAlignHorizontal)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).BeginInit();
- this.kryptonGroupBox3.Panel.SuspendLayout();
- this.kryptonGroupBox3.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit();
- this.kryptonGroupBox2.Panel.SuspendLayout();
- this.kryptonGroupBox2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit();
- this.kryptonGroupBox1.Panel.SuspendLayout();
- this.kryptonGroupBox1.SuspendLayout();
- this.SuspendLayout();
- //
- // kryptonToastNotificationManager1
- //
- this.kryptonToastNotificationManager1.ActionButtonLocation = Krypton.Toolkit.Suite.Extended.Toast.ActionButtonLocation.Left;
- this.kryptonToastNotificationManager1.ActionType = Krypton.Toolkit.Suite.Extended.Toast.ActionType.Default;
- this.kryptonToastNotificationManager1.ContentAreaType = Krypton.Toolkit.Suite.Extended.Toast.ToastNotificationContentAreaType.WrappedLabel;
- this.kryptonToastNotificationManager1.ContentTypeface = new System.Drawing.Font("Segoe UI", 8.25F);
- this.kryptonToastNotificationManager1.DefaultNotificationButton = Krypton.Toolkit.Suite.Extended.Toast.DefaultNotificationButton.DismissButton;
- this.kryptonToastNotificationManager1.DismissText = "&Dismiss";
- this.kryptonToastNotificationManager1.HeaderTypeface = new System.Drawing.Font("Segoe UI", 12F);
- this.kryptonToastNotificationManager1.IconType = Krypton.Toolkit.Suite.Extended.Toast.IconType.None;
- this.kryptonToastNotificationManager1.RightToLeftSupport = Krypton.Toolkit.Suite.Extended.Toast.RightToLeftSupport.LeftToRight;
- this.kryptonToastNotificationManager1.ToastNotificationSound = Krypton.Toolkit.Suite.Extended.Toast.ToastNotificationSystemSounds.None;
- this.kryptonToastNotificationManager1.UserResponsePromptAlignHorizontal = Krypton.Toolkit.PaletteRelativeAlign.Center;
- this.kryptonToastNotificationManager1.UserResponsePromptAlignVertical = Krypton.Toolkit.PaletteRelativeAlign.Center;
- this.kryptonToastNotificationManager1.UserResponsePromptColour = System.Drawing.Color.Gray;
- this.kryptonToastNotificationManager1.UserResponsePromptFont = new System.Drawing.Font("Segoe UI", 8.25F);
- //
- // kryptonPanel1
- //
- this.kryptonPanel1.Controls.Add(this.kryptonGroupBox5);
- this.kryptonPanel1.Controls.Add(this.kbtnShow);
- this.kryptonPanel1.Controls.Add(this.kryptonGroupBox4);
- this.kryptonPanel1.Controls.Add(this.kryptonGroupBox3);
- this.kryptonPanel1.Controls.Add(this.kryptonGroupBox2);
- this.kryptonPanel1.Controls.Add(this.kryptonGroupBox1);
- this.kryptonPanel1.Controls.Add(this.krtbToastContent);
- this.kryptonPanel1.Controls.Add(this.ktxtToastTitle);
- this.kryptonPanel1.Controls.Add(this.kryptonLabel2);
- this.kryptonPanel1.Controls.Add(this.kryptonLabel1);
- this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
- this.kryptonPanel1.Name = "kryptonPanel1";
- this.kryptonPanel1.Size = new System.Drawing.Size(1446, 730);
- this.kryptonPanel1.TabIndex = 0;
- //
- // kryptonGroupBox5
- //
- this.kryptonGroupBox5.Location = new System.Drawing.Point(377, 199);
- this.kryptonGroupBox5.Name = "kryptonGroupBox5";
- //
- // kryptonGroupBox5.Panel
- //
- this.kryptonGroupBox5.Panel.Controls.Add(this.kbtnAttachCommand);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kcmbActionButtonLocation);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kryptonLabel6);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kcbOpenProcessInExplorer);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kbbProcessPath);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kryptonTextBox2);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kcbActionType);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kryptonLabel5);
- this.kryptonGroupBox5.Panel.Controls.Add(this.kryptonCheckBox4);
- this.kryptonGroupBox5.Size = new System.Drawing.Size(413, 250);
- this.kryptonGroupBox5.TabIndex = 12;
- this.kryptonGroupBox5.Values.Heading = "Action Button";
- //
- // kbtnAttachCommand
- //
- this.kbtnAttachCommand.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnAttachCommand.CornerRoundingRadius = -1F;
- this.kbtnAttachCommand.Enabled = false;
- this.kbtnAttachCommand.Location = new System.Drawing.Point(14, 179);
- this.kbtnAttachCommand.Name = "kbtnAttachCommand";
- this.kbtnAttachCommand.Size = new System.Drawing.Size(162, 25);
- this.kbtnAttachCommand.TabIndex = 12;
- this.kbtnAttachCommand.Values.Text = "Att&ach Action Command";
- this.kbtnAttachCommand.Click += new System.EventHandler(this.kbtnAttachCommand_Click);
- //
- // kcmbActionButtonLocation
- //
- this.kcmbActionButtonLocation.CornerRoundingRadius = -1F;
- this.kcmbActionButtonLocation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kcmbActionButtonLocation.DropDownWidth = 290;
- this.kcmbActionButtonLocation.IntegralHeight = false;
- this.kcmbActionButtonLocation.Items.AddRange(new object[] {
- "Default",
- "Dismiss",
- "LaunchProcess",
- "Open"});
- this.kcmbActionButtonLocation.Location = new System.Drawing.Point(159, 153);
- this.kcmbActionButtonLocation.Name = "kcmbActionButtonLocation";
- this.kcmbActionButtonLocation.Size = new System.Drawing.Size(235, 21);
- this.kcmbActionButtonLocation.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
- this.kcmbActionButtonLocation.TabIndex = 7;
- this.kcmbActionButtonLocation.TextChanged += new System.EventHandler(this.kcmbActionButtonLocation_TextChanged);
- //
- // kryptonLabel6
- //
- this.kryptonLabel6.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel6.Location = new System.Drawing.Point(14, 153);
- this.kryptonLabel6.Name = "kryptonLabel6";
- this.kryptonLabel6.Size = new System.Drawing.Size(149, 20);
- this.kryptonLabel6.TabIndex = 6;
- this.kryptonLabel6.Values.Text = "Action Button Location:";
- //
- // kcbOpenProcessInExplorer
- //
- this.kcbOpenProcessInExplorer.Location = new System.Drawing.Point(14, 127);
- this.kcbOpenProcessInExplorer.Name = "kcbOpenProcessInExplorer";
- this.kcbOpenProcessInExplorer.Size = new System.Drawing.Size(160, 20);
- this.kcbOpenProcessInExplorer.TabIndex = 5;
- this.kcbOpenProcessInExplorer.Values.Text = "&Open process in explorer";
- //
- // kbbProcessPath
- //
- this.kbbProcessPath.LargeResetImage = ((System.Drawing.Image)(resources.GetObject("kbbProcessPath.LargeResetImage")));
- this.kbbProcessPath.Location = new System.Drawing.Point(14, 96);
- this.kbbProcessPath.Name = "kbbProcessPath";
- this.kbbProcessPath.ResetText = null;
- this.kbbProcessPath.ResetTextToolTipDescription = null;
- this.kbbProcessPath.ResetTextToolTipHeading = null;
- this.kbbProcessPath.ShowResetButton = true;
- this.kbbProcessPath.Size = new System.Drawing.Size(380, 24);
- this.kbbProcessPath.SmallResetImage = ((System.Drawing.Image)(resources.GetObject("kbbProcessPath.SmallResetImage")));
- this.kbbProcessPath.TabIndex = 4;
- this.kbbProcessPath.Text = "kryptonBrowseBox2";
- //
- // kryptonTextBox2
- //
- this.kryptonTextBox2.CueHint.CueHintText = "Action button text...";
- this.kryptonTextBox2.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.kryptonTextBox2.Location = new System.Drawing.Point(14, 67);
- this.kryptonTextBox2.Name = "kryptonTextBox2";
- this.kryptonTextBox2.Size = new System.Drawing.Size(380, 23);
- this.kryptonTextBox2.TabIndex = 3;
- //
- // kcbActionType
- //
- this.kcbActionType.CornerRoundingRadius = -1F;
- this.kcbActionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kcbActionType.DropDownWidth = 290;
- this.kcbActionType.IntegralHeight = false;
- this.kcbActionType.Items.AddRange(new object[] {
- "Default",
- "Dismiss",
- "LaunchProcess",
- "Open"});
- this.kcbActionType.Location = new System.Drawing.Point(104, 40);
- this.kcbActionType.Name = "kcbActionType";
- this.kcbActionType.Size = new System.Drawing.Size(290, 21);
- this.kcbActionType.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
- this.kcbActionType.TabIndex = 2;
- this.kcbActionType.TextChanged += new System.EventHandler(this.kcbActionType_TextChanged);
- //
- // kryptonLabel5
- //
- this.kryptonLabel5.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel5.Location = new System.Drawing.Point(14, 40);
- this.kryptonLabel5.Name = "kryptonLabel5";
- this.kryptonLabel5.Size = new System.Drawing.Size(83, 20);
- this.kryptonLabel5.TabIndex = 1;
- this.kryptonLabel5.Values.Text = "Action Type:";
- //
- // kryptonCheckBox4
- //
- this.kryptonCheckBox4.Location = new System.Drawing.Point(14, 13);
- this.kryptonCheckBox4.Name = "kryptonCheckBox4";
- this.kryptonCheckBox4.Size = new System.Drawing.Size(132, 20);
- this.kryptonCheckBox4.TabIndex = 0;
- this.kryptonCheckBox4.Values.Text = "Show Action &Button";
- //
- // kbtnShow
- //
- this.kbtnShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnShow.CornerRoundingRadius = -1F;
- this.kbtnShow.Location = new System.Drawing.Point(1272, 693);
- this.kbtnShow.Name = "kbtnShow";
- this.kbtnShow.Size = new System.Drawing.Size(162, 25);
- this.kbtnShow.TabIndex = 11;
- this.kbtnShow.Values.Text = "Sh&ow";
- this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click);
- //
- // kryptonGroupBox4
- //
- this.kryptonGroupBox4.Location = new System.Drawing.Point(377, 13);
- this.kryptonGroupBox4.Name = "kryptonGroupBox4";
- //
- // kryptonGroupBox4.Panel
- //
- this.kryptonGroupBox4.Panel.Controls.Add(this.kcmbUserResponseTextAlignVertical);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kcmbUserResponseTextAlignHorizontal);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kryptonLabel4);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kryptonLabel3);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kbtnUserResponseFont);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kcolUserResponseColour);
- this.kryptonGroupBox4.Panel.Controls.Add(this.ktxtPromptText);
- this.kryptonGroupBox4.Panel.Controls.Add(this.kchkUseUserResponse);
- this.kryptonGroupBox4.Size = new System.Drawing.Size(413, 179);
- this.kryptonGroupBox4.TabIndex = 7;
- this.kryptonGroupBox4.Values.Heading = "User Response";
- //
- // kcmbUserResponseTextAlignVertical
- //
- this.kcmbUserResponseTextAlignVertical.CornerRoundingRadius = -1F;
- this.kcmbUserResponseTextAlignVertical.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kcmbUserResponseTextAlignVertical.DropDownWidth = 235;
- this.kcmbUserResponseTextAlignVertical.Enabled = false;
- this.kcmbUserResponseTextAlignVertical.IntegralHeight = false;
- this.kcmbUserResponseTextAlignVertical.Items.AddRange(new object[] {
- "Inherit",
- "Near",
- "Center",
- "Far"});
- this.kcmbUserResponseTextAlignVertical.Location = new System.Drawing.Point(159, 123);
- this.kcmbUserResponseTextAlignVertical.Name = "kcmbUserResponseTextAlignVertical";
- this.kcmbUserResponseTextAlignVertical.Size = new System.Drawing.Size(235, 21);
- this.kcmbUserResponseTextAlignVertical.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
- this.kcmbUserResponseTextAlignVertical.TabIndex = 9;
- //
- // kcmbUserResponseTextAlignHorizontal
- //
- this.kcmbUserResponseTextAlignHorizontal.CornerRoundingRadius = -1F;
- this.kcmbUserResponseTextAlignHorizontal.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.kcmbUserResponseTextAlignHorizontal.DropDownWidth = 235;
- this.kcmbUserResponseTextAlignHorizontal.Enabled = false;
- this.kcmbUserResponseTextAlignHorizontal.IntegralHeight = false;
- this.kcmbUserResponseTextAlignHorizontal.Items.AddRange(new object[] {
- "Inherit",
- "Near",
- "Center",
- "Far"});
- this.kcmbUserResponseTextAlignHorizontal.Location = new System.Drawing.Point(159, 96);
- this.kcmbUserResponseTextAlignHorizontal.Name = "kcmbUserResponseTextAlignHorizontal";
- this.kcmbUserResponseTextAlignHorizontal.Size = new System.Drawing.Size(235, 21);
- this.kcmbUserResponseTextAlignHorizontal.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near;
- this.kcmbUserResponseTextAlignHorizontal.TabIndex = 8;
- //
- // kryptonLabel4
- //
- this.kryptonLabel4.Enabled = false;
- this.kryptonLabel4.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel4.Location = new System.Drawing.Point(14, 123);
- this.kryptonLabel4.Name = "kryptonLabel4";
- this.kryptonLabel4.Size = new System.Drawing.Size(121, 20);
- this.kryptonLabel4.TabIndex = 7;
- this.kryptonLabel4.Values.Text = "Text Align Vertical:";
- //
- // kryptonLabel3
- //
- this.kryptonLabel3.Enabled = false;
- this.kryptonLabel3.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel3.Location = new System.Drawing.Point(14, 96);
- this.kryptonLabel3.Name = "kryptonLabel3";
- this.kryptonLabel3.Size = new System.Drawing.Size(138, 20);
- this.kryptonLabel3.TabIndex = 6;
- this.kryptonLabel3.Values.Text = "Text Align Horizontal:";
- //
- // kbtnUserResponseFont
- //
- this.kbtnUserResponseFont.CornerRoundingRadius = -1F;
- this.kbtnUserResponseFont.Enabled = false;
- this.kbtnUserResponseFont.Location = new System.Drawing.Point(216, 64);
- this.kbtnUserResponseFont.Name = "kbtnUserResponseFont";
- this.kbtnUserResponseFont.Size = new System.Drawing.Size(178, 25);
- this.kbtnUserResponseFont.TabIndex = 5;
- this.kbtnUserResponseFont.Values.Text = "User Response &Font";
- //
- // kcolUserResponseColour
- //
- this.kcolUserResponseColour.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle;
- this.kcolUserResponseColour.Enabled = false;
- this.kcolUserResponseColour.Location = new System.Drawing.Point(14, 64);
- this.kcolUserResponseColour.Name = "kcolUserResponseColour";
- this.kcolUserResponseColour.SelectedColor = System.Drawing.Color.Gray;
- this.kcolUserResponseColour.Size = new System.Drawing.Size(195, 25);
- this.kcolUserResponseColour.TabIndex = 4;
- this.kcolUserResponseColour.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolUserResponseColour.Values.Image")));
- this.kcolUserResponseColour.Values.RoundedCorners = 8;
- this.kcolUserResponseColour.Values.Text = "User Response &Colour";
- //
- // ktxtPromptText
- //
- this.ktxtPromptText.CueHint.CueHintText = "Enter a answer here...";
- this.ktxtPromptText.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.ktxtPromptText.Enabled = false;
- this.ktxtPromptText.Location = new System.Drawing.Point(14, 34);
- this.ktxtPromptText.Name = "ktxtPromptText";
- this.ktxtPromptText.Size = new System.Drawing.Size(380, 23);
- this.ktxtPromptText.TabIndex = 3;
- //
- // kchkUseUserResponse
- //
- this.kchkUseUserResponse.Location = new System.Drawing.Point(14, 8);
- this.kchkUseUserResponse.Name = "kchkUseUserResponse";
- this.kchkUseUserResponse.Size = new System.Drawing.Size(127, 20);
- this.kchkUseUserResponse.TabIndex = 0;
- this.kchkUseUserResponse.Values.Text = "Use User Response";
- this.kchkUseUserResponse.CheckedChanged += new System.EventHandler(this.kchkUseUserResponse_CheckedChanged);
- //
- // kryptonGroupBox3
- //
- this.kryptonGroupBox3.Location = new System.Drawing.Point(13, 523);
- this.kryptonGroupBox3.Name = "kryptonGroupBox3";
- //
- // kryptonGroupBox3.Panel
- //
- this.kryptonGroupBox3.Panel.Controls.Add(this.krbRightToLeft);
- this.kryptonGroupBox3.Panel.Controls.Add(this.krbLeftToRight);
- this.kryptonGroupBox3.Size = new System.Drawing.Size(357, 66);
- this.kryptonGroupBox3.TabIndex = 6;
- this.kryptonGroupBox3.Values.Heading = "Right to Left Support";
- //
- // krbRightToLeft
- //
- this.krbRightToLeft.Location = new System.Drawing.Point(109, 11);
- this.krbRightToLeft.Name = "krbRightToLeft";
- this.krbRightToLeft.Size = new System.Drawing.Size(90, 20);
- this.krbRightToLeft.TabIndex = 3;
- this.krbRightToLeft.Values.Text = "R&ight to Left";
- //
- // krbLeftToRight
- //
- this.krbLeftToRight.Checked = true;
- this.krbLeftToRight.Location = new System.Drawing.Point(13, 11);
- this.krbLeftToRight.Name = "krbLeftToRight";
- this.krbLeftToRight.Size = new System.Drawing.Size(90, 20);
- this.krbLeftToRight.TabIndex = 2;
- this.krbLeftToRight.Values.Text = "&Left to Right";
- //
- // kryptonGroupBox2
- //
- this.kryptonGroupBox2.Location = new System.Drawing.Point(13, 392);
- this.kryptonGroupBox2.Name = "kryptonGroupBox2";
- //
- // kryptonGroupBox2.Panel
- //
- this.kryptonGroupBox2.Panel.Controls.Add(this.krbContentAreaTypeMultilinedTextBox);
- this.kryptonGroupBox2.Panel.Controls.Add(this.krbContentAreaTypeRichTextBox);
- this.kryptonGroupBox2.Panel.Controls.Add(this.krbContentAreaTypeWrappedLabel);
- this.kryptonGroupBox2.Panel.Controls.Add(this.krbContentAreaTypeLabel);
- this.kryptonGroupBox2.Size = new System.Drawing.Size(357, 98);
- this.kryptonGroupBox2.TabIndex = 5;
- this.kryptonGroupBox2.Values.Heading = "Content Area Type";
- //
- // krbContentAreaTypeMultilinedTextBox
- //
- this.krbContentAreaTypeMultilinedTextBox.Location = new System.Drawing.Point(13, 41);
- this.krbContentAreaTypeMultilinedTextBox.Name = "krbContentAreaTypeMultilinedTextBox";
- this.krbContentAreaTypeMultilinedTextBox.Size = new System.Drawing.Size(124, 20);
- this.krbContentAreaTypeMultilinedTextBox.TabIndex = 4;
- this.krbContentAreaTypeMultilinedTextBox.Values.Text = "Multilined TextBox";
- this.krbContentAreaTypeMultilinedTextBox.CheckedChanged += new System.EventHandler(this.ChangeContentAreaType_CheckedChanged);
- //
- // krbContentAreaTypeRichTextBox
- //
- this.krbContentAreaTypeRichTextBox.Location = new System.Drawing.Point(201, 15);
- this.krbContentAreaTypeRichTextBox.Name = "krbContentAreaTypeRichTextBox";
- this.krbContentAreaTypeRichTextBox.Size = new System.Drawing.Size(92, 20);
- this.krbContentAreaTypeRichTextBox.TabIndex = 3;
- this.krbContentAreaTypeRichTextBox.Values.Text = "Rich TextBox";
- this.krbContentAreaTypeRichTextBox.CheckedChanged += new System.EventHandler(this.ChangeContentAreaType_CheckedChanged);
- //
- // krbContentAreaTypeWrappedLabel
- //
- this.krbContentAreaTypeWrappedLabel.Location = new System.Drawing.Point(80, 15);
- this.krbContentAreaTypeWrappedLabel.Name = "krbContentAreaTypeWrappedLabel";
- this.krbContentAreaTypeWrappedLabel.Size = new System.Drawing.Size(105, 20);
- this.krbContentAreaTypeWrappedLabel.TabIndex = 2;
- this.krbContentAreaTypeWrappedLabel.Values.Text = "Wrapped Label";
- this.krbContentAreaTypeWrappedLabel.CheckedChanged += new System.EventHandler(this.ChangeContentAreaType_CheckedChanged);
- //
- // krbContentAreaTypeLabel
- //
- this.krbContentAreaTypeLabel.Location = new System.Drawing.Point(13, 15);
- this.krbContentAreaTypeLabel.Name = "krbContentAreaTypeLabel";
- this.krbContentAreaTypeLabel.Size = new System.Drawing.Size(51, 20);
- this.krbContentAreaTypeLabel.TabIndex = 1;
- this.krbContentAreaTypeLabel.CheckedChanged += new System.EventHandler(this.ChangeContentAreaType_CheckedChanged);
- //
- // kryptonGroupBox1
- //
- this.kryptonGroupBox1.Location = new System.Drawing.Point(13, 182);
- this.kryptonGroupBox1.Name = "kryptonGroupBox1";
- //
- // kryptonGroupBox1.Panel
- //
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeWindowsLogo);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeWarning);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeInformation);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeStop);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeShield);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeOk);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeNone);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeHand);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeExclamation);
- this.kryptonGroupBox1.Panel.Controls.Add(this.kbbIconTypeCustomPath);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeError);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeAsterisk);
- this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconTypeCustom);
- this.kryptonGroupBox1.Size = new System.Drawing.Size(357, 203);
- this.kryptonGroupBox1.TabIndex = 4;
- this.kryptonGroupBox1.Values.Heading = "Icon Type";
- //
- // krbIconTypeWindowsLogo
- //
- this.krbIconTypeWindowsLogo.Location = new System.Drawing.Point(234, 42);
- this.krbIconTypeWindowsLogo.Name = "krbIconTypeWindowsLogo";
- this.krbIconTypeWindowsLogo.Size = new System.Drawing.Size(104, 20);
- this.krbIconTypeWindowsLogo.TabIndex = 12;
- this.krbIconTypeWindowsLogo.Values.Text = "Windows Logo";
- this.krbIconTypeWindowsLogo.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeWarning
- //
- this.krbIconTypeWarning.Location = new System.Drawing.Point(234, 16);
- this.krbIconTypeWarning.Name = "krbIconTypeWarning";
- this.krbIconTypeWarning.Size = new System.Drawing.Size(69, 20);
- this.krbIconTypeWarning.TabIndex = 11;
- this.krbIconTypeWarning.Values.Text = "Warning";
- this.krbIconTypeWarning.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeInformation
- //
- this.krbIconTypeInformation.Location = new System.Drawing.Point(149, 120);
- this.krbIconTypeInformation.Name = "krbIconTypeInformation";
- this.krbIconTypeInformation.Size = new System.Drawing.Size(87, 20);
- this.krbIconTypeInformation.TabIndex = 10;
- this.krbIconTypeInformation.Values.Text = "Information";
- this.krbIconTypeInformation.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeStop
- //
- this.krbIconTypeStop.Location = new System.Drawing.Point(149, 94);
- this.krbIconTypeStop.Name = "krbIconTypeStop";
- this.krbIconTypeStop.Size = new System.Drawing.Size(48, 20);
- this.krbIconTypeStop.TabIndex = 9;
- this.krbIconTypeStop.Values.Text = "Stop";
- this.krbIconTypeStop.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeShield
- //
- this.krbIconTypeShield.Location = new System.Drawing.Point(149, 68);
- this.krbIconTypeShield.Name = "krbIconTypeShield";
- this.krbIconTypeShield.Size = new System.Drawing.Size(56, 20);
- this.krbIconTypeShield.TabIndex = 8;
- this.krbIconTypeShield.Values.Text = "Shield";
- this.krbIconTypeShield.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeOk
- //
- this.krbIconTypeOk.Location = new System.Drawing.Point(149, 42);
- this.krbIconTypeOk.Name = "krbIconTypeOk";
- this.krbIconTypeOk.Size = new System.Drawing.Size(38, 20);
- this.krbIconTypeOk.TabIndex = 7;
- this.krbIconTypeOk.Values.Text = "Ok";
- this.krbIconTypeOk.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeNone
- //
- this.krbIconTypeNone.Location = new System.Drawing.Point(149, 16);
- this.krbIconTypeNone.Name = "krbIconTypeNone";
- this.krbIconTypeNone.Size = new System.Drawing.Size(52, 20);
- this.krbIconTypeNone.TabIndex = 6;
- this.krbIconTypeNone.Values.Text = "None";
- this.krbIconTypeNone.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeHand
- //
- this.krbIconTypeHand.Location = new System.Drawing.Point(13, 120);
- this.krbIconTypeHand.Name = "krbIconTypeHand";
- this.krbIconTypeHand.Size = new System.Drawing.Size(52, 20);
- this.krbIconTypeHand.TabIndex = 5;
- this.krbIconTypeHand.Values.Text = "Hand";
- this.krbIconTypeHand.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeExclamation
- //
- this.krbIconTypeExclamation.Location = new System.Drawing.Point(13, 94);
- this.krbIconTypeExclamation.Name = "krbIconTypeExclamation";
- this.krbIconTypeExclamation.Size = new System.Drawing.Size(88, 20);
- this.krbIconTypeExclamation.TabIndex = 4;
- this.krbIconTypeExclamation.Values.Text = "Exclamation";
- this.krbIconTypeExclamation.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // kbbIconTypeCustomPath
- //
- this.kbbIconTypeCustomPath.CueHint.CueHintText = "Enter custom icon path...";
- this.kbbIconTypeCustomPath.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.kbbIconTypeCustomPath.LargeResetImage = ((System.Drawing.Image)(resources.GetObject("kbbIconTypeCustomPath.LargeResetImage")));
- this.kbbIconTypeCustomPath.Location = new System.Drawing.Point(13, 146);
- this.kbbIconTypeCustomPath.Name = "kbbIconTypeCustomPath";
- this.kbbIconTypeCustomPath.ResetText = null;
- this.kbbIconTypeCustomPath.ResetTextToolTipDescription = null;
- this.kbbIconTypeCustomPath.ResetTextToolTipHeading = null;
- this.kbbIconTypeCustomPath.ShowResetButton = true;
- this.kbbIconTypeCustomPath.Size = new System.Drawing.Size(325, 24);
- this.kbbIconTypeCustomPath.SmallResetImage = ((System.Drawing.Image)(resources.GetObject("kbbIconTypeCustomPath.SmallResetImage")));
- this.kbbIconTypeCustomPath.TabIndex = 3;
- //
- // krbIconTypeError
- //
- this.krbIconTypeError.Location = new System.Drawing.Point(13, 68);
- this.krbIconTypeError.Name = "krbIconTypeError";
- this.krbIconTypeError.Size = new System.Drawing.Size(49, 20);
- this.krbIconTypeError.TabIndex = 2;
- this.krbIconTypeError.Values.Text = "Error";
- this.krbIconTypeError.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeAsterisk
- //
- this.krbIconTypeAsterisk.Location = new System.Drawing.Point(13, 16);
- this.krbIconTypeAsterisk.Name = "krbIconTypeAsterisk";
- this.krbIconTypeAsterisk.Size = new System.Drawing.Size(65, 20);
- this.krbIconTypeAsterisk.TabIndex = 1;
- this.krbIconTypeAsterisk.Values.Text = "Asterisk";
- this.krbIconTypeAsterisk.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krbIconTypeCustom
- //
- this.krbIconTypeCustom.Location = new System.Drawing.Point(13, 42);
- this.krbIconTypeCustom.Name = "krbIconTypeCustom";
- this.krbIconTypeCustom.Size = new System.Drawing.Size(64, 20);
- this.krbIconTypeCustom.TabIndex = 0;
- this.krbIconTypeCustom.Values.Text = "Custom";
- this.krbIconTypeCustom.CheckedChanged += new System.EventHandler(this.ChangeIconType_CheckedChanged);
- //
- // krtbToastContent
- //
- this.krtbToastContent.Location = new System.Drawing.Point(109, 43);
- this.krtbToastContent.Name = "krtbToastContent";
- this.krtbToastContent.Size = new System.Drawing.Size(261, 132);
- this.krtbToastContent.TabIndex = 3;
- this.krtbToastContent.Text = "This is an example notification to demonstrate what the toast notification is cap" +
- "able of.";
- //
- // ktxtToastTitle
- //
- this.ktxtToastTitle.Location = new System.Drawing.Point(108, 13);
- this.ktxtToastTitle.Name = "ktxtToastTitle";
- this.ktxtToastTitle.Size = new System.Drawing.Size(262, 23);
- this.ktxtToastTitle.TabIndex = 2;
- this.ktxtToastTitle.Text = "Test Notification";
- //
- // kryptonLabel2
- //
- this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel2.Location = new System.Drawing.Point(13, 43);
- this.kryptonLabel2.Name = "kryptonLabel2";
- this.kryptonLabel2.Size = new System.Drawing.Size(89, 20);
- this.kryptonLabel2.TabIndex = 1;
- this.kryptonLabel2.Values.Text = "Content Text:";
- //
- // kryptonLabel1
- //
- this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl;
- this.kryptonLabel1.Location = new System.Drawing.Point(62, 13);
- this.kryptonLabel1.Name = "kryptonLabel1";
- this.kryptonLabel1.Size = new System.Drawing.Size(40, 20);
- this.kryptonLabel1.TabIndex = 0;
- this.kryptonLabel1.Values.Text = "Title:";
- //
- // ToastExample
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1446, 730);
- this.Controls.Add(this.kryptonPanel1);
- this.Name = "ToastExample";
- this.Text = "ToastExample";
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
- this.kryptonPanel1.ResumeLayout(false);
- this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5.Panel)).EndInit();
- this.kryptonGroupBox5.Panel.ResumeLayout(false);
- this.kryptonGroupBox5.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox5)).EndInit();
- this.kryptonGroupBox5.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kcmbActionButtonLocation)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcbActionType)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4.Panel)).EndInit();
- this.kryptonGroupBox4.Panel.ResumeLayout(false);
- this.kryptonGroupBox4.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox4)).EndInit();
- this.kryptonGroupBox4.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kcmbUserResponseTextAlignVertical)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbUserResponseTextAlignHorizontal)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3.Panel)).EndInit();
- this.kryptonGroupBox3.Panel.ResumeLayout(false);
- this.kryptonGroupBox3.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox3)).EndInit();
- this.kryptonGroupBox3.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit();
- this.kryptonGroupBox2.Panel.ResumeLayout(false);
- this.kryptonGroupBox2.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit();
- this.kryptonGroupBox2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit();
- this.kryptonGroupBox1.Panel.ResumeLayout(false);
- this.kryptonGroupBox1.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit();
- this.kryptonGroupBox1.ResumeLayout(false);
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private Krypton.Toolkit.Suite.Extended.Toast.KryptonToastNotificationManager kryptonToastNotificationManager1;
- private Krypton.Toolkit.KryptonPanel kryptonPanel1;
- private Krypton.Toolkit.KryptonRichTextBox krtbToastContent;
- private Krypton.Toolkit.KryptonTextBox ktxtToastTitle;
- private Krypton.Toolkit.KryptonLabel kryptonLabel2;
- private Krypton.Toolkit.KryptonLabel kryptonLabel1;
- private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox3;
- private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox2;
- private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox1;
- private Krypton.Toolkit.Suite.Extended.Controls.KryptonBrowseBox kbbIconTypeCustomPath;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeError;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeAsterisk;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeCustom;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeHand;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeExclamation;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeWindowsLogo;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeWarning;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeInformation;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeStop;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeShield;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeOk;
- private Krypton.Toolkit.KryptonRadioButton krbIconTypeNone;
- private Krypton.Toolkit.KryptonRadioButton krbContentAreaTypeMultilinedTextBox;
- private Krypton.Toolkit.KryptonRadioButton krbContentAreaTypeRichTextBox;
- private Krypton.Toolkit.KryptonRadioButton krbContentAreaTypeWrappedLabel;
- private Krypton.Toolkit.KryptonRadioButton krbContentAreaTypeLabel;
- private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox4;
- private Krypton.Toolkit.KryptonCheckBox kchkUseUserResponse;
- private Krypton.Toolkit.KryptonTextBox ktxtPromptText;
- private Krypton.Toolkit.KryptonButton kbtnShow;
- private Krypton.Toolkit.KryptonComboBox kcmbUserResponseTextAlignVertical;
- private Krypton.Toolkit.KryptonComboBox kcmbUserResponseTextAlignHorizontal;
- private Krypton.Toolkit.KryptonLabel kryptonLabel4;
- private Krypton.Toolkit.KryptonLabel kryptonLabel3;
- private Krypton.Toolkit.KryptonButton kbtnUserResponseFont;
- private Krypton.Toolkit.KryptonColorButton kcolUserResponseColour;
- private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox5;
- private Krypton.Toolkit.KryptonTextBox kryptonTextBox2;
- private Krypton.Toolkit.KryptonComboBox kcbActionType;
- private Krypton.Toolkit.KryptonLabel kryptonLabel5;
- private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox4;
- private Krypton.Toolkit.Suite.Extended.Controls.KryptonBrowseBox kbbProcessPath;
- private Krypton.Toolkit.KryptonCheckBox kcbOpenProcessInExplorer;
- private Krypton.Toolkit.KryptonRadioButton krbRightToLeft;
- private Krypton.Toolkit.KryptonRadioButton krbLeftToRight;
- private Krypton.Toolkit.KryptonComboBox kcmbActionButtonLocation;
- private Krypton.Toolkit.KryptonLabel kryptonLabel6;
- private Krypton.Toolkit.KryptonButton kbtnAttachCommand;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ToastExample.cs b/Source/Krypton Toolkit/Examples/ToastExample.cs
deleted file mode 100644
index 11bcbc19b..000000000
--- a/Source/Krypton Toolkit/Examples/ToastExample.cs
+++ /dev/null
@@ -1,228 +0,0 @@
-using Krypton.Toolkit.Suite.Extended.Toast;
-
-namespace Examples
-{
- public partial class ToastExample : KryptonForm
- {
- #region Instance Fields
-
- private ActionType _actionType = ActionType.Default;
-
- private ActionButtonLocation _actionButtonLocation = ActionButtonLocation.Left;
-
- private DefaultNotificationButton _defaultNotificationButton = DefaultNotificationButton.None;
-
- private Krypton.Toolkit.Suite.Extended.Toast.IconType _iconType = Krypton.Toolkit.Suite.Extended.Toast.IconType.None;
-
- private RightToLeftSupport _rightToLeftSupport = RightToLeftSupport.LeftToRight;
-
- private ToastNotificationSystemSounds _systemSounds = ToastNotificationSystemSounds.None;
-
- private ToastNotificationContentAreaType _contentAreaType = ToastNotificationContentAreaType.Label;
-
- private PaletteRelativeAlign _userResponsePromptAlignHorizontal;
-
- private PaletteRelativeAlign _userResponsePromptAlignVertical;
-
- private KryptonCommand _actionButtonCommand = null;
-
- #endregion
-
- public ToastExample()
- {
- InitializeComponent();
- }
-
- #region Setters & Getters
-
- /// Sets the ActionType to value.
- /// The value of the ActionType.
- public void SetActionType(ActionType value) => _actionType = value;
-
- /// Gets the ActionType value.
- /// The value of the ActionType.
- public ActionType GetActionType() => _actionType;
-
- /// Sets the ActionButtonLocation to value.
- /// The value of the ActionButtonLocation.
- public void SetActionButtonLocation(ActionButtonLocation value) => _actionButtonLocation = value;
-
- /// Gets the ActionButtonLocation value.
- /// The value of the ActionButtonLocation.
- public ActionButtonLocation GetActionButtonLocation() => _actionButtonLocation;
-
- /// Sets the DefaultNotificationButton to value.
- /// The value of the DefaultNotificationButton.
- public void SetDefaultNotificationButton(DefaultNotificationButton value) => _defaultNotificationButton = value;
-
- /// Gets the DefaultNotificationButton value.
- /// The value of the DefaultNotificationButton.
- public DefaultNotificationButton GetDefaultNotificationButton() => _defaultNotificationButton;
-
- /// Sets the IconType to value.
- /// The value of the IconType.
- public void SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType value) => _iconType = value;
-
- /// Gets the IconType value.
- /// The value of the IconType.
- public Krypton.Toolkit.Suite.Extended.Toast.IconType GetIconType() => _iconType;
-
- /// Sets the RightToLeftSupport to value.
- /// The value of the RightToLeftSupport.
- public void SetRightToLeftSupport(RightToLeftSupport value) => _rightToLeftSupport = value;
-
- /// Gets the RightToLeftSupport value.
- /// The value of the RightToLeftSupport.
- public RightToLeftSupport GetRightToLeftSupport() => _rightToLeftSupport;
-
- /// Sets the ToastNotificationSystemSounds to value.
- /// The value of the ToastNotificationSystemSounds.
- public void SetToastNotificationSystemSounds(ToastNotificationSystemSounds value) => _systemSounds = value;
-
- /// Gets the ToastNotificationSystemSounds value.
- /// The value of the ToastNotificationSystemSounds.
- public ToastNotificationSystemSounds GetToastNotificationSystemSounds() => _systemSounds;
-
- /// Sets the ToastNotificationContentAreaType to value.
- /// The value of the ToastNotificationContentAreaType.
- public void SetToastNotificationContentAreaType(ToastNotificationContentAreaType value) => _contentAreaType = value;
-
- /// Gets the ToastNotificationContentAreaType value.
- /// The value of the ToastNotificationContentAreaType.
- public ToastNotificationContentAreaType GetToastNotificationContentAreaType() => _contentAreaType;
-
- /// Sets the UserResponsePromptAlignHorizontal to value.
- /// The value of the UserResponsePromptAlignHorizontal.
- public void SetUserResponsePromptAlignHorizontal(PaletteRelativeAlign value) => _userResponsePromptAlignHorizontal = value;
-
- /// Gets the UserResponsePromptAlignHorizontal value.
- /// The value of the UserResponsePromptAlignHorizontal.
- public PaletteRelativeAlign GetUserResponsePromptAlignHorizontal() => _userResponsePromptAlignHorizontal;
-
- /// Sets the UserResponsePromptAlignVertical to value.
- /// The value of the UserResponsePromptAlignVertical.
- public void SetUserResponsePromptAlignVertical(PaletteRelativeAlign value) => _userResponsePromptAlignVertical = value;
-
- /// Gets the UserResponsePromptAlignVertical value.
- /// The value of the UserResponsePromptAlignVertical.
- public PaletteRelativeAlign GetUserResponsePromptAlignVertical() => _userResponsePromptAlignVertical;
-
- #endregion
-
- #region Methods
-
- private void EnableUserResponseUI(bool enabled)
- {
- ktxtPromptText.Enabled = enabled;
-
- kcolUserResponseColour.Enabled = enabled;
-
- kbtnUserResponseFont.Enabled = enabled;
-
- kryptonLabel3.Enabled = enabled;
-
- kcmbUserResponseTextAlignHorizontal.Enabled = enabled;
-
- kryptonLabel4.Enabled = enabled;
-
- kcmbUserResponseTextAlignVertical.Enabled = enabled;
- }
-
- #endregion
-
- private void ChangeIconType_CheckedChanged(object sender, EventArgs e)
- {
- kbbIconTypeCustomPath.Enabled = krbIconTypeCustom.Checked;
-
- if (krbIconTypeAsterisk.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Asterisk);
- }
- else if (krbIconTypeCustom.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Custom);
- }
- else if (krbIconTypeError.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Error);
- }
- else if (krbIconTypeExclamation.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Exclamation);
- }
- else if (krbIconTypeHand.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Hand);
- }
- else if (krbIconTypeNone.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.None);
- }
- else if (krbIconTypeOk.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Ok);
- }
- else if (krbIconTypeShield.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Shield);
- }
- else if (krbIconTypeStop.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Stop);
- }
- else if (krbIconTypeInformation.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Information);
- }
- else if (krbIconTypeWarning.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.Warning);
- }
- else if (krbIconTypeWindowsLogo.Checked)
- {
- SetIconType(Krypton.Toolkit.Suite.Extended.Toast.IconType.WindowsLogo);
- }
- }
-
- private void ChangeContentAreaType_CheckedChanged(object sender, EventArgs e)
- {
- if (krbContentAreaTypeLabel.Checked)
- {
- SetToastNotificationContentAreaType(ToastNotificationContentAreaType.Label);
- }
- else if (krbContentAreaTypeMultilinedTextBox.Checked)
- {
- SetToastNotificationContentAreaType(ToastNotificationContentAreaType.MultiLinedTextBox);
- }
- else if (krbContentAreaTypeRichTextBox.Checked)
- {
- SetToastNotificationContentAreaType(ToastNotificationContentAreaType.RichTextBox);
- }
- else if (krbContentAreaTypeWrappedLabel.Checked)
- {
- SetToastNotificationContentAreaType(ToastNotificationContentAreaType.WrappedLabel);
- }
- }
-
- private void kcmbActionButtonLocation_TextChanged(object sender, EventArgs e) => SetActionButtonLocation((ActionButtonLocation)Enum.Parse(typeof(ActionButtonLocation), kcmbActionButtonLocation.Text));
-
- private void kcbActionType_TextChanged(object sender, EventArgs e) => SetActionType((ActionType)Enum.Parse(typeof(ActionType), kcbActionType.Text));
-
- private void kbtnShow_Click(object sender, EventArgs e)
- {
- KryptonToastNotificationManager manager = new()
- {
-
- };
-
- manager.DisplayNotificationToast();
- }
-
- private void kchkUseUserResponse_CheckedChanged(object sender, EventArgs e) => EnableUserResponseUI(kchkUseUserResponse.Checked);
-
- private void kbtnAttachCommand_Click(object sender, EventArgs e)
- {
- _actionButtonCommand = new();
- }
- }
-}
diff --git a/Source/Krypton Toolkit/Examples/ToastExample.resx b/Source/Krypton Toolkit/Examples/ToastExample.resx
deleted file mode 100644
index 9951ccccf..000000000
--- a/Source/Krypton Toolkit/Examples/ToastExample.resx
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVhSURBVFhHvZZraJtlFMdfKAyEgW16Sy9JL2mTJWlu
- TS9Jb0naBrvqREWc+GFtKVtx7JMoOhxFbWthHzamMCwMXbdVh4JfnHSu4mAXWcXN2k2YrIN1c1acUhC0
- m9tyPP/HPfF50mxZp/jhR96T93nP/zznnOdiEFGSa4s/rxhrmdUoLy/fzr+rLRaLkQlVD2hGOoFMVFZW
- Gn6//7rL5brEgYQhUmopvSuqHtCMdAKZqLZXG9FoNBEKh8jr9d62VdmGrVbrqnTiQNUDmpFOIBN2u93o
- jHcm2jvaqaW1hQK1AXKsccyUlZU5hGipjqoHNCOdQCaQgY7OjgQHQSASjVBDYwO5a9xLFRUVL4iS/FcB
- WKwWV3lF+aDNZjteXV39B4uTx+Oh5pZm4iBEAPiNxWIUbgqTz+ejquqqI1ySkpLSEgOoekAz0okCFq7i
- Zju4xrlGOK2rr6PGUKMQgXg0FhXCKrH2mChJMBgkbtDfuEGfe6AMlJWXrWfhpUAgQGi01rZWkWYIoO73
- AmPaIm3U2NhINTU1xJOYUPWAZqSKc7pfcbvdoqYQxkzhdKUg4Hg8TvsOjH+h6gHNUMV55k9zI4lUy1k/
- EJEI9fT20LnzZxfZb5eqBzRDiqPmPPMbcuZIowT13fnWTjr+5THisYL4I3FtjATfDr42SFcWLp/hcdb7
- 3gn9Af9nwbqgaDA4kfT09dCZ2dNLPGaYCWMs94fBM02o4wBSv39iHwLcwzxUUlJiFBUVaXpAM+CQl4zV
- 4/UkQqGQCECyaWAj/fTLwlc8xoFxEu5ug98n1LHrHl9HJ6dPXOf3m3BWFBUXGWazWaDqAc2AQ146Q9jN
- sMSampsEkViEvr94/hi/z5LCEu4Vg8ck5NiB5wdo7tKFK/wuiGVnLjIbhebCJKoe0Aw4jMYic1jnCABg
- 6Q2/OXSD35mkqApvuQaPS6BZd+zagSxN8f+m4uLiv0ULdVQ9oBlwWN9Qf5MR3Q/QCxMfHHhfFVXhihlc
- 79uHJj9BvV9nspDqgsICo6BgOaoe0Aw4rPHUEALACgDckDRz7psOKZgKttdvv5u5ys+PotEwy3TCElUP
- aAYvvyxuQBGAxOvz0tiedx5OFZYgzfxrRYdDIL8g/56oekAz2FFWuCkk0i5BRjgTTlVUJT+fHd8hLz8v
- I6oe0Aw4XP/sMzexCmqDtQIEwFvwYKqwJC+PHafCQtwD+dyIt7hEJOHl+IOqBzQDDl96+cV5n98nLhYA
- JXF73Iuc6rRlSBcAsuFwOMZxXLvcLoHT6aT+jf2/q3pAM+Dw8NTkGM4ABAH4mkXsjCptlROp4iA3N1cn
- LxcbTpzHi+xJP3h+b/zd+zqMHH39fWLmaECAgOCQN5VRFlilBmDKNSVBANyIXXwv/BV3B9XH2u61OBO6
- VT2gGdLpyVMnjvo5ajgAiB4O+XgmrutZrnFLMgDTHfG8XDMvwTFeSWR32EXQ8ns8f/Txh/M8PkvVA5oh
- nTJVu8d238KHEAd4RhB8HSO+bCIbCyz4NXOE+2OW9wARoBRXv9s2+Co2qS70h6oHNEMJAGwZGnlDNBCc
- SJwupxDhu54oC99yiFNOaDgEqI7H8+Ytm2nh2o+7sEcgW6oe0IyUAMDo3v17RQ1lN0sQiIC7G7/p3o9u
- H8XMDzJZEM/JydH0gGYowiq906dP/bmhd8M/ohl48qkn6POjU+JskDPPzskWqHpAM1KEVVzMJG5BI6Mj
- 1P1Y9zLRzngHbd22lT49fAjC00wLNqQcU05S/N8EIAkyuA3NMnT56jxdnJ+DILjAvM3EsecnZ52to+oB
- zeCPV8pqxoSjF7sfNqG7CUtUPbDsj/8XMv4C4EU4InvAOU4AAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ8SURBVDhPdZJNaBNREMcfFAIFofnaTbJJdpNsNnTz
- 0SbSbLKbbL6gxUvxUMRbq5TGU1EJngTxUMWLp+LBS0FBISAFsVoiCAqpFhEvOXi1FRT0UFAoKJZx5km2
- Vujhz+PNx2/mzRsWjUaPlazILBaP3VcU5cT/PgDgYpFo5Fipqsoy2QykM+mPCKpT4tB3CIigYSh0YDUj
- oSbWNU37kcvloGyWoVQuQTaXBbTfjspRF8U6gHA4zIXJrng8voLVDgonCzypUq1Ao9ngsioW5At5SKVS
- A1mW0w5AkiRePakl13ITWLFcBrtm86Rmq+mI7gRcOL/wfWPzSekIIBaLtahd0zR58vLFZdja7sO3va9g
- 2zbUG3Wo1WuwemeVbBuoMQdA7VuWtTVVnOIV2heWKGgTZei6zopGEWZOzUDvRY/s17AYL+oAaHDFUvGn
- UTKA9Kz39B1OnIWkEFNiCps7MweDD4M9TJ6m2GAwyAKBwCEApzpCb6dkGt6bt69boVCIiaLIwpEw2/28
- 8x6TZQKKAZHbSQ4AnSOmZQI9gUCzp2czFCAIAk9A/yhVRNtoIBhoYwdtvJ91AFJYYvPn5n/RF9HSZCey
- 64IoML/f74hg+MXXcUcAnwdVu9p3AEhlD7sPtqk6LYuaVAHbvesX/GM+n48ALqx6Fbfy97g+DqTuo+5z
- B4CB1Ob05c4lDtDTOiQSCcD3A85iBzvkVSmROuxc6dBvVB2A1+vlQ/n0ZffezVs3OISCtZQGuFz8HCaT
- H+PWjgzR7XFzCFJdqJVX/ZcHi0uLMJmf5N3QSXeyk5/iPF7PPwC3m8vj8fCBYYCBeozaR1G7dNLdID/F
- UfxfALA//kaIMNcH69EAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
- DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVhSURBVFhHvZZraJtlFMdfKAyEgW16Sy9JL2mTJWlu
- TS9Jb0naBrvqREWc+GFtKVtx7JMoOhxFbWthHzamMCwMXbdVh4JfnHSu4mAXWcXN2k2YrIN1c1acUhC0
- m9tyPP/HPfF50mxZp/jhR96T93nP/zznnOdiEFGSa4s/rxhrmdUoLy/fzr+rLRaLkQlVD2hGOoFMVFZW
- Gn6//7rL5brEgYQhUmopvSuqHtCMdAKZqLZXG9FoNBEKh8jr9d62VdmGrVbrqnTiQNUDmpFOIBN2u93o
- jHcm2jvaqaW1hQK1AXKsccyUlZU5hGipjqoHNCOdQCaQgY7OjgQHQSASjVBDYwO5a9xLFRUVL4iS/FcB
- WKwWV3lF+aDNZjteXV39B4uTx+Oh5pZm4iBEAPiNxWIUbgqTz+ejquqqI1ySkpLSEgOoekAz0okCFq7i
- Zju4xrlGOK2rr6PGUKMQgXg0FhXCKrH2mChJMBgkbtDfuEGfe6AMlJWXrWfhpUAgQGi01rZWkWYIoO73
- AmPaIm3U2NhINTU1xJOYUPWAZqSKc7pfcbvdoqYQxkzhdKUg4Hg8TvsOjH+h6gHNUMV55k9zI4lUy1k/
- EJEI9fT20LnzZxfZb5eqBzRDiqPmPPMbcuZIowT13fnWTjr+5THisYL4I3FtjATfDr42SFcWLp/hcdb7
- 3gn9Af9nwbqgaDA4kfT09dCZ2dNLPGaYCWMs94fBM02o4wBSv39iHwLcwzxUUlJiFBUVaXpAM+CQl4zV
- 4/UkQqGQCECyaWAj/fTLwlc8xoFxEu5ug98n1LHrHl9HJ6dPXOf3m3BWFBUXGWazWaDqAc2AQ146Q9jN
- sMSampsEkViEvr94/hi/z5LCEu4Vg8ck5NiB5wdo7tKFK/wuiGVnLjIbhebCJKoe0Aw4jMYic1jnCABg
- 6Q2/OXSD35mkqApvuQaPS6BZd+zagSxN8f+m4uLiv0ULdVQ9oBlwWN9Qf5MR3Q/QCxMfHHhfFVXhihlc
- 79uHJj9BvV9nspDqgsICo6BgOaoe0Aw4rPHUEALACgDckDRz7psOKZgKttdvv5u5ys+PotEwy3TCElUP
- aAYvvyxuQBGAxOvz0tiedx5OFZYgzfxrRYdDIL8g/56oekAz2FFWuCkk0i5BRjgTTlVUJT+fHd8hLz8v
- I6oe0Aw4XP/sMzexCmqDtQIEwFvwYKqwJC+PHafCQtwD+dyIt7hEJOHl+IOqBzQDDl96+cV5n98nLhYA
- JXF73Iuc6rRlSBcAsuFwOMZxXLvcLoHT6aT+jf2/q3pAM+Dw8NTkGM4ABAH4mkXsjCptlROp4iA3N1cn
- LxcbTpzHi+xJP3h+b/zd+zqMHH39fWLmaECAgOCQN5VRFlilBmDKNSVBANyIXXwv/BV3B9XH2u61OBO6
- VT2gGdLpyVMnjvo5ajgAiB4O+XgmrutZrnFLMgDTHfG8XDMvwTFeSWR32EXQ8ns8f/Txh/M8PkvVA5oh
- nTJVu8d238KHEAd4RhB8HSO+bCIbCyz4NXOE+2OW9wARoBRXv9s2+Co2qS70h6oHNEMJAGwZGnlDNBCc
- SJwupxDhu54oC99yiFNOaDgEqI7H8+Ytm2nh2o+7sEcgW6oe0IyUAMDo3v17RQ1lN0sQiIC7G7/p3o9u
- H8XMDzJZEM/JydH0gGYowiq906dP/bmhd8M/ohl48qkn6POjU+JskDPPzskWqHpAM1KEVVzMJG5BI6Mj
- 1P1Y9zLRzngHbd22lT49fAjC00wLNqQcU05S/N8EIAkyuA3NMnT56jxdnJ+DILjAvM3EsecnZ52to+oB
- zeCPV8pqxoSjF7sfNqG7CUtUPbDsj/8XMv4C4EU4InvAOU4AAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
- dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ8SURBVDhPdZJNaBNREMcfFAIFofnaTbJJdpNsNnTz
- 0SbSbLKbbL6gxUvxUMRbq5TGU1EJngTxUMWLp+LBS0FBISAFsVoiCAqpFhEvOXi1FRT0UFAoKJZx5km2
- Vujhz+PNx2/mzRsWjUaPlazILBaP3VcU5cT/PgDgYpFo5Fipqsoy2QykM+mPCKpT4tB3CIigYSh0YDUj
- oSbWNU37kcvloGyWoVQuQTaXBbTfjspRF8U6gHA4zIXJrng8voLVDgonCzypUq1Ao9ngsioW5At5SKVS
- A1mW0w5AkiRePakl13ITWLFcBrtm86Rmq+mI7gRcOL/wfWPzSekIIBaLtahd0zR58vLFZdja7sO3va9g
- 2zbUG3Wo1WuwemeVbBuoMQdA7VuWtTVVnOIV2heWKGgTZei6zopGEWZOzUDvRY/s17AYL+oAaHDFUvGn
- UTKA9Kz39B1OnIWkEFNiCps7MweDD4M9TJ6m2GAwyAKBwCEApzpCb6dkGt6bt69boVCIiaLIwpEw2/28
- 8x6TZQKKAZHbSQ4AnSOmZQI9gUCzp2czFCAIAk9A/yhVRNtoIBhoYwdtvJ91AFJYYvPn5n/RF9HSZCey
- 64IoML/f74hg+MXXcUcAnwdVu9p3AEhlD7sPtqk6LYuaVAHbvesX/GM+n48ALqx6Fbfy97g+DqTuo+5z
- B4CB1Ob05c4lDtDTOiQSCcD3A85iBzvkVSmROuxc6dBvVB2A1+vlQ/n0ZffezVs3OISCtZQGuFz8HCaT
- H+PWjgzR7XFzCFJdqJVX/ZcHi0uLMJmf5N3QSXeyk5/iPF7PPwC3m8vj8fCBYYCBeozaR1G7dNLdID/F
- UfxfALA//kaIMNcH69EAAAAASUVORK5CYII=
-
-
-
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ToastNotificationMenu.Designer.cs b/Source/Krypton Toolkit/Examples/ToastNotificationMenu.Designer.cs
new file mode 100644
index 000000000..ba8bd2a2a
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/ToastNotificationMenu.Designer.cs
@@ -0,0 +1,101 @@
+namespace Examples
+{
+ partial class ToastNotificationMenu
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel();
+ this.kbtnQuickNotificationTest = new Krypton.Toolkit.KryptonButton();
+ this.kbtnUserInputNotification = new Krypton.Toolkit.KryptonButton();
+ this.kbtnBasicNotification = new Krypton.Toolkit.KryptonButton();
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ this.kryptonPanel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // kryptonPanel1
+ //
+ this.kryptonPanel1.Controls.Add(this.kbtnQuickNotificationTest);
+ this.kryptonPanel1.Controls.Add(this.kbtnUserInputNotification);
+ this.kryptonPanel1.Controls.Add(this.kbtnBasicNotification);
+ this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.kryptonPanel1.Location = new System.Drawing.Point(0, 0);
+ this.kryptonPanel1.Name = "kryptonPanel1";
+ this.kryptonPanel1.Size = new System.Drawing.Size(320, 229);
+ this.kryptonPanel1.TabIndex = 1;
+ //
+ // kbtnQuickNotificationTest
+ //
+ this.kbtnQuickNotificationTest.Location = new System.Drawing.Point(13, 75);
+ this.kbtnQuickNotificationTest.Name = "kbtnQuickNotificationTest";
+ this.kbtnQuickNotificationTest.Size = new System.Drawing.Size(291, 25);
+ this.kbtnQuickNotificationTest.TabIndex = 2;
+ this.kbtnQuickNotificationTest.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnQuickNotificationTest.Values.Text = "Quick Notification Test";
+ //
+ // kbtnUserInputNotification
+ //
+ this.kbtnUserInputNotification.Location = new System.Drawing.Point(13, 44);
+ this.kbtnUserInputNotification.Name = "kbtnUserInputNotification";
+ this.kbtnUserInputNotification.Size = new System.Drawing.Size(291, 25);
+ this.kbtnUserInputNotification.TabIndex = 1;
+ this.kbtnUserInputNotification.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnUserInputNotification.Values.Text = "User Input Notification";
+ //
+ // kbtnBasicNotification
+ //
+ this.kbtnBasicNotification.Location = new System.Drawing.Point(13, 13);
+ this.kbtnBasicNotification.Name = "kbtnBasicNotification";
+ this.kbtnBasicNotification.Size = new System.Drawing.Size(291, 25);
+ this.kbtnBasicNotification.TabIndex = 0;
+ this.kbtnBasicNotification.Values.DropDownArrowColor = System.Drawing.Color.Empty;
+ this.kbtnBasicNotification.Values.Text = "Basic Notification";
+ this.kbtnBasicNotification.Click += new System.EventHandler(this.kbtnBasicNotification_Click);
+ //
+ // ToastNotificationMenu
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(320, 229);
+ this.Controls.Add(this.kryptonPanel1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
+ this.MaximizeBox = false;
+ this.Name = "ToastNotificationMenu";
+ this.Text = "ToastNotificationMenu";
+ ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ this.kryptonPanel1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private KryptonPanel kryptonPanel1;
+ private KryptonButton kbtnQuickNotificationTest;
+ private KryptonButton kbtnUserInputNotification;
+ private KryptonButton kbtnBasicNotification;
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Examples/ToastNotificationMenu.cs b/Source/Krypton Toolkit/Examples/ToastNotificationMenu.cs
new file mode 100644
index 000000000..4be31d637
--- /dev/null
+++ b/Source/Krypton Toolkit/Examples/ToastNotificationMenu.cs
@@ -0,0 +1,56 @@
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Examples
+{
+ public partial class ToastNotificationMenu : KryptonForm
+ {
+ public ToastNotificationMenu()
+ {
+ InitializeComponent();
+ }
+
+ private void kbtnBasicNotification_Click(object sender, EventArgs e)
+ {
+ var basicNotification = new BasicToastNotificationTest();
+
+ basicNotification.Show();
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/UX/PlotViewer.resx b/Source/Krypton Toolkit/Examples/ToastNotificationMenu.resx
similarity index 100%
rename from Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/UX/PlotViewer.resx
rename to Source/Krypton Toolkit/Examples/ToastNotificationMenu.resx
diff --git a/Source/Krypton Toolkit/Examples/ToolBoxExample.Designer.cs b/Source/Krypton Toolkit/Examples/ToolBoxExample.Designer.cs
index 55a0c8fa6..44d62110d 100644
--- a/Source/Krypton Toolkit/Examples/ToolBoxExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ToolBoxExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ToolBoxExample
{
diff --git a/Source/Krypton Toolkit/Examples/ToolBoxExample.cs b/Source/Krypton Toolkit/Examples/ToolBoxExample.cs
index 87c6460e1..3c4d9e01b 100644
--- a/Source/Krypton Toolkit/Examples/ToolBoxExample.cs
+++ b/Source/Krypton Toolkit/Examples/ToolBoxExample.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class ToolBoxExample : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/ToolStripItems.Designer.cs b/Source/Krypton Toolkit/Examples/ToolStripItems.Designer.cs
index c0129b3a8..335528b8b 100644
--- a/Source/Krypton Toolkit/Examples/ToolStripItems.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/ToolStripItems.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class ToolStripItems
{
diff --git a/Source/Krypton Toolkit/Examples/ToolStripItems.cs b/Source/Krypton Toolkit/Examples/ToolStripItems.cs
index 728bc83f9..fa28f5526 100644
--- a/Source/Krypton Toolkit/Examples/ToolStripItems.cs
+++ b/Source/Krypton Toolkit/Examples/ToolStripItems.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
public partial class ToolStripItems : KryptonForm
{
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.Designer.cs b/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.Designer.cs
index 4cf43a83c..f7eb51ee0 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class TreeGridViewAdvancedExample
{
@@ -57,7 +85,6 @@ private void InitializeComponent()
//
// kbtnDataSource
//
- this.kbtnDataSource.CornerRoundingRadius = -1F;
this.kbtnDataSource.Location = new System.Drawing.Point(576, 41);
this.kbtnDataSource.Name = "kbtnDataSource";
this.kbtnDataSource.Size = new System.Drawing.Size(212, 31);
@@ -67,7 +94,6 @@ private void InitializeComponent()
//
// kryptonThemeComboBox1
//
- this.kryptonThemeComboBox1.CornerRoundingRadius = -1F;
this.kryptonThemeComboBox1.CueHint.Padding = new System.Windows.Forms.Padding(0);
this.kryptonThemeComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kryptonThemeComboBox1.DropDownWidth = 212;
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.cs b/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.cs
index 5605ef1e9..827667a47 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewAdvancedExample.cs
@@ -1,13 +1,31 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using Krypton.Toolkit.Suite.Extended.TreeGridView;
#pragma warning disable CS8602
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.Designer.cs b/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.Designer.cs
index b4cef5f39..2429379d2 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class TreeGridViewDataSourceExample
{
@@ -153,11 +181,7 @@ private void InitializeComponent()
//
// kryptonPropertyGrid1
//
- this.kryptonPropertyGrid1.CategoryForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
this.kryptonPropertyGrid1.Font = new System.Drawing.Font("Segoe UI", 9F);
- this.kryptonPropertyGrid1.HelpBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(187)))), ((int)(((byte)(206)))), ((int)(((byte)(230)))));
- this.kryptonPropertyGrid1.HelpForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
- this.kryptonPropertyGrid1.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(179)))), ((int)(((byte)(196)))), ((int)(((byte)(216)))));
this.kryptonPropertyGrid1.Location = new System.Drawing.Point(607, 9);
this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1";
this.kryptonPropertyGrid1.SelectedObject = this.kryptonTreeGridView1;
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.cs b/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.cs
index cdd13b087..dd30857fd 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewDataSourceExample.cs
@@ -1,12 +1,32 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
namespace Examples
{
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewExample.Designer.cs b/Source/Krypton Toolkit/Examples/TreeGridViewExample.Designer.cs
index 8405ea208..3174db325 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class TreeGridViewExample
{
diff --git a/Source/Krypton Toolkit/Examples/TreeGridViewExample.cs b/Source/Krypton Toolkit/Examples/TreeGridViewExample.cs
index 1c0449911..cc6737b92 100644
--- a/Source/Krypton Toolkit/Examples/TreeGridViewExample.cs
+++ b/Source/Krypton Toolkit/Examples/TreeGridViewExample.cs
@@ -1,13 +1,33 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
using System.Data;
using System.Data.SQLite;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
namespace Examples
{
diff --git a/Source/Krypton Toolkit/Examples/WizardExample.Designer.cs b/Source/Krypton Toolkit/Examples/WizardExample.Designer.cs
index eeca8834c..ebf334796 100644
--- a/Source/Krypton Toolkit/Examples/WizardExample.Designer.cs
+++ b/Source/Krypton Toolkit/Examples/WizardExample.Designer.cs
@@ -1,4 +1,32 @@
-namespace Examples
+#region MIT License
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
+namespace Examples
{
partial class WizardExample
{
diff --git a/Source/Krypton Toolkit/Examples/WizardExample.cs b/Source/Krypton Toolkit/Examples/WizardExample.cs
index 0f9d2aae5..5194b8e92 100644
--- a/Source/Krypton Toolkit/Examples/WizardExample.cs
+++ b/Source/Krypton Toolkit/Examples/WizardExample.cs
@@ -1,6 +1,31 @@
-using Krypton.Toolkit.Suite.Extended.TreeGridView;
-using Krypton.Toolkit.Suite.Extended.Wizard;
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2017 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#endregion
namespace Examples
{
public partial class WizardExample : KryptonForm
diff --git a/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - Dev.sln b/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - Dev.sln
new file mode 100644
index 000000000..1a580e81c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - Dev.sln
@@ -0,0 +1,834 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31825.309
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repository Items", "Repository Items", "{5D85B551-9AFC-4E96-93C3-D8D81B69971F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build System", "Build System", "{87BE2145-50BE-4A57-9C79-FCE5A64F6065}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\build.cmd = ..\..\build.cmd
+ ..\..\build.proj = ..\..\build.proj
+ ..\..\debug.cmd = ..\..\debug.cmd
+ ..\..\debug.proj = ..\..\debug.proj
+ ..\..\purge.cmd = ..\..\purge.cmd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Markdown", "Markdown", "{A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Documents\Help\Changelog.md = ..\..\Documents\Help\Changelog.md
+ ..\..\Documents\Examples\Examples.md = ..\..\Documents\Examples\Examples.md
+ ..\..\Documents\Modules\NuGet Package Information.md = ..\..\Documents\Modules\NuGet Package Information.md
+ ..\..\Documents\Help\Prerequisites.md = ..\..\Documents\Help\Prerequisites.md
+ ..\..\README.md = ..\..\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{6B01F113-016E-445F-BE5E-80BA7144B928}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ToggleSwich.bmp = ..\..\Assets\ToggleSwich.bmp
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{404EC0E7-92CB-4E90-80F7-440A4F5D772C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\Examples\CircularProgressBar.png = ..\..\Assets\Examples\CircularProgressBar.png
+ ..\..\Assets\Examples\CommandLinks.png = ..\..\Assets\Examples\CommandLinks.png
+ ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png
+ ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png
+ ..\..\Assets\Examples\FloatableToolStrip.png = ..\..\Assets\Examples\FloatableToolStrip.png
+ ..\..\Assets\Examples\FlotableMenuStrip.png = ..\..\Assets\Examples\FlotableMenuStrip.png
+ ..\..\Assets\Examples\KryptonColourMixer.png = ..\..\Assets\Examples\KryptonColourMixer.png
+ ..\..\Assets\Examples\KryptonColourWheel.png = ..\..\Assets\Examples\KryptonColourWheel.png
+ ..\..\Assets\Examples\KryptonInputBoxExtended.png = ..\..\Assets\Examples\KryptonInputBoxExtended.png
+ ..\..\Assets\Examples\KryptonKnobControl.png = ..\..\Assets\Examples\KryptonKnobControl.png
+ ..\..\Assets\Examples\KryptonPaletteColourShader.png = ..\..\Assets\Examples\KryptonPaletteColourShader.png
+ ..\..\Assets\Examples\KryptonPropertyGrid.png = ..\..\Assets\Examples\KryptonPropertyGrid.png
+ ..\..\Assets\Examples\KryptonScrollBars.png = ..\..\Assets\Examples\KryptonScrollBars.png
+ ..\..\Assets\Examples\KryptonThemeSelector.png = ..\..\Assets\Examples\KryptonThemeSelector.png
+ ..\..\Assets\Examples\KryptonToastNotificationV1.png = ..\..\Assets\Examples\KryptonToastNotificationV1.png
+ ..\..\Assets\Examples\KryptonToggleSwitch.png = ..\..\Assets\Examples\KryptonToggleSwitch.png
+ ..\..\Assets\Examples\KryptonViewBar.png = ..\..\Assets\Examples\KryptonViewBar.png
+ ..\..\Assets\Examples\TreeViews.png = ..\..\Assets\Examples\TreeViews.png
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ICO", "ICO", "{734B2F67-D055-44B2-818A-FE569C479937}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JPEG", "JPEG", "{15346861-5444-49D7-9686-3835EE271259}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{5E13A5BB-407A-46A5-95A8-9DA57FB21C6C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\License\LICENSE.md = ..\..\Assets\License\LICENSE.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package Icon", "Package Icon", "{6EFEF411-B16C-4DEA-992F-9CA767EB1265}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png = ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png
+ ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png = ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PNG", "PNG", "{F96630C5-2A89-44D5-BED6-99609A6D716A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PSD", "PSD", "{247BBF4E-22B0-49CC-981B-0420AD7FF4E8}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\PSD\Command Link Button.psd = ..\..\Assets\PSD\Command Link Button.psd
+ ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd
+ ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd
+ ..\..\Assets\PSD\PE Icon 512 x 512.psd = ..\..\Assets\PSD\PE Icon 512 x 512.psd
+ ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd = ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd
+ ..\..\Assets\PSD\ToggleSwich.psd = ..\..\Assets\PSD\ToggleSwich.psd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{071034AA-BFA3-4325-B763-E95A2E05EF4D}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico = ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "256 x 256", "256 x 256", "{378BEE59-0131-4497-80B8-69B3124325D7}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico = ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico
+ ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico = ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{69F98672-EBB9-4B12-BD04-45AEF3C37FC6}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg = ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Arrows", "Arrows", "{0451E883-C718-4679-962F-E2825B1513B2}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\PSD\Arrows\Arrow-1.psd = ..\..\Assets\PSD\Arrows\Arrow-1.psd
+ ..\..\Assets\PSD\Arrows\Arrow-2.psd = ..\..\Assets\PSD\Arrows\Arrow-2.psd
+ ..\..\Assets\PSD\Arrows\Arrow-3.psd = ..\..\Assets\PSD\Arrows\Arrow-3.psd
+ ..\..\Assets\PSD\Arrows\Arrow-4.psd = ..\..\Assets\PSD\Arrows\Arrow-4.psd
+ ..\..\Assets\PSD\Arrows\Template.psd = ..\..\Assets\PSD\Arrows\Template.psd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FDDE0872-007C-4945-9D20-C9011C37204B}"
+ ProjectSection(SolutionItems) = preProject
+ .editorconfig = .editorconfig
+ .nuspec = .nuspec
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Core 2022", "Krypton.Toolkit.Suite.Extended.Core\Krypton.Toolkit.Suite.Extended.Core 2022.csproj", "{E68C45C0-418B-4CFC-97C0-282798B38B37}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Common 2022", "Krypton.Toolkit.Suite.Extended.Common\Krypton.Toolkit.Suite.Extended.Common 2022.csproj", "{57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Developer.Utilities\Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022.csproj", "{58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing 2022", "Krypton.Toolkit.Suite.Extended.Drawing\Krypton.Toolkit.Suite.Extended.Drawing 2022.csproj", "{9CB33D7B-BF7E-4221-859D-5E61E24772E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Effects 2022", "Krypton.Toolkit.Suite.Extended.Effects\Krypton.Toolkit.Suite.Extended.Effects 2022.csproj", "{B47A7562-B3B5-4521-91DB-E5CC4CC986E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Global.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Global.Utilities\Krypton.Toolkit.Suite.Extended.Global.Utilities 2022.csproj", "{B9A5A472-F747-4C87-B5E9-C5A05DB17827}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Language.Model 2022", "Krypton.Toolkit.Suite.Extended.Language.Model\Krypton.Toolkit.Suite.Extended.Language.Model 2022.csproj", "{81BCFC34-220F-43A8-A58B-8F9E123C72E1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Resources 2022", "Krypton.Toolkit.Suite.Extended.Resources\Krypton.Toolkit.Suite.Extended.Resources 2022.csproj", "{4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Settings 2022", "Krypton.Toolkit.Suite.Extended.Settings\Krypton.Toolkit.Suite.Extended.Settings 2022.csproj", "{C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tools 2022", "Krypton.Toolkit.Suite.Extended.Tools\Krypton.Toolkit.Suite.Extended.Tools 2022.csproj", "{CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Utilities\Krypton.Toolkit.Suite.Extended.Utilities 2022.csproj", "{E66AA060-36AC-4C48-98B5-41701F5524A6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Explorer 2022", "Krypton.Toolkit.Suite.Extended.File.Explorer\Krypton.Toolkit.Suite.Extended.File.Explorer 2022.csproj", "{1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Gages 2022", "Krypton.Toolkit.Suite.Extended.Gages\Krypton.Toolkit.Suite.Extended.Gages 2022.csproj", "{7E1B169E-AD04-4C98-9971-DC7F450BF610}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022", "Krypton.Toolkit.Suite.Extended.Palette.Selectors\Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022.csproj", "{4545427A-2FD5-441A-A35E-F09F2AB1B20D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.TaskDialogs 2022", "Krypton.Toolkit.Suite.Extended.TaskDialogs\Krypton.Toolkit.Suite.Extended.TaskDialogs 2022.csproj", "{116CDDE3-823F-486E-B0AC-2F0FE810A7EF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generic", "Generic", "{4696C160-BC97-414A-8D30-B09A2CA76085}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Directory.Build.props = ..\..\Directory.Build.props
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generate Packages", "Generate Packages", "{9ACA6117-D269-4425-8500-6BC57560DEB2}"
+ ProjectSection(SolutionItems) = preProject
+ Directory.Build.props = Directory.Build.props
+ Directory.Build.targets = Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Miscellaneous", "Miscellaneous", "{241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51}"
+ ProjectSection(SolutionItems) = preProject
+ ..\.editorconfig = ..\.editorconfig
+ Directory.Build.props = Directory.Build.props
+ Directory.Build.targets = Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{0703388D-5FBE-4345-94B0-5FA9FD043079}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Shared 2022", "Krypton.Toolkit.Suite.Extended.Shared\Krypton.Toolkit.Suite.Extended.Shared 2022.csproj", "{0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{5DB6B467-9257-42D3-B81F-380B5D537C04}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Schemas", "Schemas", "{1AD413AC-FAD3-4F79-A948-4FB66AF10685}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec
+ ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Themes 2022", "Krypton.Toolkit.Suite.Extended.Themes\Krypton.Toolkit.Suite.Extended.Themes 2022.csproj", "{A58A93DE-0CBF-495B-8D29-761B1143AD32}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{BA86BDC7-D11C-4E74-875C-B284E740B599}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Documents\License\License.md = ..\..\Documents\License\License.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projects to Work On", "Projects to Work On", "{ADF53878-BE1F-43A3-A890-E11190BE5465}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.PDF 2022", "Krypton.Toolkit.Suite.Extended.PDF\Krypton.Toolkit.Suite.Extended.PDF 2022.csproj", "{A59A87BE-E92A-4717-92DC-A2286EE812EC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples", "Examples\Examples.csproj", "{744D6A50-F8DB-4D5F-B571-34B0597E03B8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022", "Krypton.Toolkit.Suite.Extended.Scintilla.NET\Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022.csproj", "{BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022", "Krypton.Toolkit.Suite.Extended.CheckSum.Tools\Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj", "{26A8A753-BC4B-4E42-B124-8EA3FA64303F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022", "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar\Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj", "{7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.ComboBox 2022", "Krypton.Toolkit.Suite.Extended.ComboBox\Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj", "{253E37F3-A36F-4D96-B22E-1D50C31C0D2D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Controls 2022", "Krypton.Toolkit.Suite.Extended.Controls\Krypton.Toolkit.Suite.Extended.Controls 2022.csproj", "{C4D0363C-6CA9-4D47-B896-D287C1E6BD11}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022", "Krypton.Toolkit.Suite.Extended.Data.Visualisation\Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj", "{558D7C96-4E2D-4679-8D1A-508E734855D8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Dialogs\Krypton.Toolkit.Suite.Extended.Dialogs 2022.csproj", "{3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dock.Extender 2022", "Krypton.Toolkit.Suite.Extended.Dock.Extender\Krypton.Toolkit.Suite.Extended.Dock.Extender 2022.csproj", "{AA363B11-8B13-4333-85E1-8623D21E1202}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Error.Reporting 2022", "Krypton.Toolkit.Suite.Extended.Error.Reporting\Krypton.Toolkit.Suite.Extended.Error.Reporting 2022.csproj", "{3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Copier 2022", "Krypton.Toolkit.Suite.Extended.File.Copier\Krypton.Toolkit.Suite.Extended.File.Copier 2022.csproj", "{14542128-1DF0-44DB-9365-1FF39324B317}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022", "Krypton.Toolkit.Suite.Extended.Floating.Toolbars\Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022.csproj", "{4804A209-411D-43E5-B104-77D6A19131E2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Messagebox 2022", "Krypton.Toolkit.Suite.Extended.Messagebox\Krypton.Toolkit.Suite.Extended.Messagebox 2022.csproj", "{FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Memory.Box 2022", "Krypton.Toolkit.Suite.Extended.Memory.Box\Krypton.Toolkit.Suite.Extended.Memory.Box 2022.csproj", "{4C448625-CBCB-4147-9288-659906B17C28}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navi.Suite 2022", "Krypton.Toolkit.Suite.Extended.Navi.Suite\Krypton.Toolkit.Suite.Extended.Navi.Suite 2022.csproj", "{AA7EBA51-F1BA-4A45-9344-22F4E173109A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navigator 2022", "Krypton.Toolkit.Suite.Extended.Navigator\Krypton.Toolkit.Suite.Extended.Navigator 2022.csproj", "{65DDD9BE-D9BB-456A-97D4-D0B75607F657}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Networking 2022", "Krypton.Toolkit.Suite.Extended.Networking\Krypton.Toolkit.Suite.Extended.Networking 2022.csproj", "{B9D53724-D2C8-4067-8146-15C04533BAE3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Notifications 2022", "Krypton.Toolkit.Suite.Extended.Notifications\Krypton.Toolkit.Suite.Extended.Notifications 2022.csproj", "{A7DFFED4-3872-491C-B560-C8E4E4733A4D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Outlook.Grid 2022", "Krypton.Toolkit.Suite.Extended.Outlook.Grid\Krypton.Toolkit.Suite.Extended.Outlook.Grid 2022.csproj", "{9B5D60B1-765A-4793-92C4-23E8F8A76A77}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Drawing.Utilities\Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022.csproj", "{F33622D3-84D1-4C58-9241-45243882739C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.IO 2022", "Krypton.Toolkit.Suite.Extended.IO\Krypton.Toolkit.Suite.Extended.IO 2022.csproj", "{62253CD1-5FFB-4B07-82E9-00C978A96478}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater\Krypton.Toolkit.Suite.Extended.Software.Updater 2022.csproj", "{A5FA199B-9AA4-4061-AE07-3036A115AA24}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs\Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022.csproj", "{2C946C86-12F4-40A3-B964-09C71DA3B845}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater.Core\Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022.csproj", "{5C2389E8-1198-48D2-BDCC-44F74BE6B294}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZipExtractor", "ZipExtractor\ZipExtractor.csproj", "{1126FD6E-8A3E-4C93-AABB-06073B27EB75}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{4985A154-8526-4CB0-A7DC-B39736C4A8AC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoUpdateCreator", "AutoUpdateCreator\AutoUpdateCreator.csproj", "{975DA9CB-501F-442E-8339-AF625C7A5DA4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub", "GitHub", "{5D204922-259D-4140-B115-F01EDF031B5A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Issue Templates", "Issue Templates", "{362F24FA-1AA0-4821-A539-C5A863D39B8B}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\.github\ISSUE_TEMPLATE\bug_report.md = ..\..\.github\ISSUE_TEMPLATE\bug_report.md
+ ..\..\.github\ISSUE_TEMPLATE\feature-request.md = ..\..\.github\ISSUE_TEMPLATE\feature-request.md
+ ..\..\.github\ISSUE_TEMPLATE\other-issues.md = ..\..\.github\ISSUE_TEMPLATE\other-issues.md
+ ..\..\.github\ISSUE_TEMPLATE\post-a-question.md = ..\..\.github\ISSUE_TEMPLATE\post-a-question.md
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Docking 2022", "..\..\..\Standard-Toolkit\Source\Krypton Components\Krypton.Docking\Krypton.Docking 2022.csproj", "{8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Navigator 2022", "..\..\..\Standard-Toolkit\Source\Krypton Components\Krypton.Navigator\Krypton.Navigator 2022.csproj", "{39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Ribbon 2022", "..\..\..\Standard-Toolkit\Source\Krypton Components\Krypton.Ribbon\Krypton.Ribbon 2022.csproj", "{B48CAFB1-659A-4898-8004-3F909B788E56}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit 2022", "..\..\..\Standard-Toolkit\Source\Krypton Components\Krypton.Toolkit\Krypton.Toolkit 2022.csproj", "{76250480-3D16-4CC7-9F38-18EA880B8150}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Workspace 2022", "..\..\..\Standard-Toolkit\Source\Krypton Components\Krypton.Workspace\Krypton.Workspace 2022.csproj", "{3CD6AC31-4080-4E66-B3C5-91068408765A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Canary|Any CPU = Canary|Any CPU
+ Debug|Any CPU = Debug|Any CPU
+ Installer|Any CPU = Installer|Any CPU
+ Nightly|Any CPU = Nightly|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.Build.0 = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.Build.0 = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Installer|Any CPU.ActiveCfg = Canary|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Installer|Any CPU.Build.0 = Canary|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.Build.0 = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Installer|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Installer|Any CPU.Build.0 = Nightly|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.Build.0 = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.Build.0 = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Installer|Any CPU.ActiveCfg = Canary|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Installer|Any CPU.Build.0 = Canary|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.Build.0 = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.Build.0 = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Installer|Any CPU.ActiveCfg = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Installer|Any CPU.Build.0 = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Installer|Any CPU.Build.0 = Installer|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F8E1B19-EFA1-4BC2-AEB3-8985B07A6A2B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Installer|Any CPU.Build.0 = Installer|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39E6D9FC-E30F-4F4A-9EAC-F1234226FE2E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Installer|Any CPU.Build.0 = Installer|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B48CAFB1-659A-4898-8004-3F909B788E56}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Installer|Any CPU.Build.0 = Installer|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76250480-3D16-4CC7-9F38-18EA880B8150}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Installer|Any CPU.ActiveCfg = Installer|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Installer|Any CPU.Build.0 = Installer|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3CD6AC31-4080-4E66-B3C5-91068408765A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {87BE2145-50BE-4A57-9C79-FCE5A64F6065} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {6B01F113-016E-445F-BE5E-80BA7144B928} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {404EC0E7-92CB-4E90-80F7-440A4F5D772C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {734B2F67-D055-44B2-818A-FE569C479937} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {15346861-5444-49D7-9686-3835EE271259} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {5E13A5BB-407A-46A5-95A8-9DA57FB21C6C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {6EFEF411-B16C-4DEA-992F-9CA767EB1265} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {F96630C5-2A89-44D5-BED6-99609A6D716A} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {247BBF4E-22B0-49CC-981B-0420AD7FF4E8} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {071034AA-BFA3-4325-B763-E95A2E05EF4D} = {734B2F67-D055-44B2-818A-FE569C479937}
+ {378BEE59-0131-4497-80B8-69B3124325D7} = {734B2F67-D055-44B2-818A-FE569C479937}
+ {69F98672-EBB9-4B12-BD04-45AEF3C37FC6} = {15346861-5444-49D7-9686-3835EE271259}
+ {0451E883-C718-4679-962F-E2825B1513B2} = {247BBF4E-22B0-49CC-981B-0420AD7FF4E8}
+ {E68C45C0-418B-4CFC-97C0-282798B38B37} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {E66AA060-36AC-4C48-98B5-41701F5524A6} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {4696C160-BC97-414A-8D30-B09A2CA76085} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
+ {9ACA6117-D269-4425-8500-6BC57560DEB2} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
+ {241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {5DB6B467-9257-42D3-B81F-380B5D537C04} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {1AD413AC-FAD3-4F79-A948-4FB66AF10685} = {5DB6B467-9257-42D3-B81F-380B5D537C04}
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {BA86BDC7-D11C-4E74-875C-B284E740B599} = {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8} = {0703388D-5FBE-4345-94B0-5FA9FD043079}
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {558D7C96-4E2D-4679-8D1A-508E734855D8} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {AA363B11-8B13-4333-85E1-8623D21E1202} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {14542128-1DF0-44DB-9365-1FF39324B317} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {4804A209-411D-43E5-B104-77D6A19131E2} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {4C448625-CBCB-4147-9288-659906B17C28} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {B9D53724-D2C8-4067-8146-15C04533BAE3} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {9B5D60B1-765A-4793-92C4-23E8F8A76A77} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {F33622D3-84D1-4C58-9241-45243882739C} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {62253CD1-5FFB-4B07-82E9-00C978A96478} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {2C946C86-12F4-40A3-B964-09C71DA3B845} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
+ {5D204922-259D-4140-B115-F01EDF031B5A} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {362F24FA-1AA0-4821-A539-C5A863D39B8B} = {5D204922-259D-4140-B115-F01EDF031B5A}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A7CE7732-0982-4703-8EFD-7715D569BAB5}
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - NuGet.sln b/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - NuGet.sln
new file mode 100644
index 000000000..52eee1093
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022 - NuGet.sln
@@ -0,0 +1,902 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31825.309
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repository Items", "Repository Items", "{5D85B551-9AFC-4E96-93C3-D8D81B69971F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build System", "Build System", "{87BE2145-50BE-4A57-9C79-FCE5A64F6065}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\build.cmd = ..\..\build.cmd
+ ..\..\build.proj = ..\..\build.proj
+ ..\..\debug.cmd = ..\..\debug.cmd
+ ..\..\debug.proj = ..\..\debug.proj
+ ..\..\purge.cmd = ..\..\purge.cmd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Markdown", "Markdown", "{A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Documents\Help\Changelog.md = ..\..\Documents\Help\Changelog.md
+ ..\..\Documents\Examples\Examples.md = ..\..\Documents\Examples\Examples.md
+ ..\..\Documents\Modules\NuGet Package Information.md = ..\..\Documents\Modules\NuGet Package Information.md
+ ..\..\Documents\Help\Prerequisites.md = ..\..\Documents\Help\Prerequisites.md
+ ..\..\README.md = ..\..\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{6B01F113-016E-445F-BE5E-80BA7144B928}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ToggleSwich.bmp = ..\..\Assets\ToggleSwich.bmp
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{404EC0E7-92CB-4E90-80F7-440A4F5D772C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\Examples\CircularProgressBar.png = ..\..\Assets\Examples\CircularProgressBar.png
+ ..\..\Assets\Examples\CommandLinks.png = ..\..\Assets\Examples\CommandLinks.png
+ ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png
+ ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png
+ ..\..\Assets\Examples\FloatableToolStrip.png = ..\..\Assets\Examples\FloatableToolStrip.png
+ ..\..\Assets\Examples\FlotableMenuStrip.png = ..\..\Assets\Examples\FlotableMenuStrip.png
+ ..\..\Assets\Examples\KryptonColourMixer.png = ..\..\Assets\Examples\KryptonColourMixer.png
+ ..\..\Assets\Examples\KryptonColourWheel.png = ..\..\Assets\Examples\KryptonColourWheel.png
+ ..\..\Assets\Examples\KryptonInputBoxExtended.png = ..\..\Assets\Examples\KryptonInputBoxExtended.png
+ ..\..\Assets\Examples\KryptonKnobControl.png = ..\..\Assets\Examples\KryptonKnobControl.png
+ ..\..\Assets\Examples\KryptonPaletteColourShader.png = ..\..\Assets\Examples\KryptonPaletteColourShader.png
+ ..\..\Assets\Examples\KryptonPropertyGrid.png = ..\..\Assets\Examples\KryptonPropertyGrid.png
+ ..\..\Assets\Examples\KryptonScrollBars.png = ..\..\Assets\Examples\KryptonScrollBars.png
+ ..\..\Assets\Examples\KryptonThemeSelector.png = ..\..\Assets\Examples\KryptonThemeSelector.png
+ ..\..\Assets\Examples\KryptonToastNotificationV1.png = ..\..\Assets\Examples\KryptonToastNotificationV1.png
+ ..\..\Assets\Examples\KryptonToggleSwitch.png = ..\..\Assets\Examples\KryptonToggleSwitch.png
+ ..\..\Assets\Examples\KryptonViewBar.png = ..\..\Assets\Examples\KryptonViewBar.png
+ ..\..\Assets\Examples\TreeViews.png = ..\..\Assets\Examples\TreeViews.png
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ICO", "ICO", "{734B2F67-D055-44B2-818A-FE569C479937}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JPEG", "JPEG", "{15346861-5444-49D7-9686-3835EE271259}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{5E13A5BB-407A-46A5-95A8-9DA57FB21C6C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\License\LICENSE.md = ..\..\Assets\License\LICENSE.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package Icon", "Package Icon", "{6EFEF411-B16C-4DEA-992F-9CA767EB1265}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png = ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png
+ ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png = ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PNG", "PNG", "{F96630C5-2A89-44D5-BED6-99609A6D716A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PSD", "PSD", "{247BBF4E-22B0-49CC-981B-0420AD7FF4E8}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\PSD\Command Link Button.psd = ..\..\Assets\PSD\Command Link Button.psd
+ ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd
+ ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd
+ ..\..\Assets\PSD\PE Icon 512 x 512.psd = ..\..\Assets\PSD\PE Icon 512 x 512.psd
+ ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd = ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd
+ ..\..\Assets\PSD\ToggleSwich.psd = ..\..\Assets\PSD\ToggleSwich.psd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{071034AA-BFA3-4325-B763-E95A2E05EF4D}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico = ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "256 x 256", "256 x 256", "{378BEE59-0131-4497-80B8-69B3124325D7}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico = ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico
+ ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico = ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{69F98672-EBB9-4B12-BD04-45AEF3C37FC6}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg = ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Arrows", "Arrows", "{0451E883-C718-4679-962F-E2825B1513B2}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\PSD\Arrows\Arrow-1.psd = ..\..\Assets\PSD\Arrows\Arrow-1.psd
+ ..\..\Assets\PSD\Arrows\Arrow-2.psd = ..\..\Assets\PSD\Arrows\Arrow-2.psd
+ ..\..\Assets\PSD\Arrows\Arrow-3.psd = ..\..\Assets\PSD\Arrows\Arrow-3.psd
+ ..\..\Assets\PSD\Arrows\Arrow-4.psd = ..\..\Assets\PSD\Arrows\Arrow-4.psd
+ ..\..\Assets\PSD\Arrows\Template.psd = ..\..\Assets\PSD\Arrows\Template.psd
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FDDE0872-007C-4945-9D20-C9011C37204B}"
+ ProjectSection(SolutionItems) = preProject
+ .editorconfig = .editorconfig
+ .nuspec = .nuspec
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Core 2022", "Krypton.Toolkit.Suite.Extended.Core\Krypton.Toolkit.Suite.Extended.Core 2022.csproj", "{E68C45C0-418B-4CFC-97C0-282798B38B37}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Common 2022", "Krypton.Toolkit.Suite.Extended.Common\Krypton.Toolkit.Suite.Extended.Common 2022.csproj", "{57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Developer.Utilities\Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022.csproj", "{58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing 2022", "Krypton.Toolkit.Suite.Extended.Drawing\Krypton.Toolkit.Suite.Extended.Drawing 2022.csproj", "{9CB33D7B-BF7E-4221-859D-5E61E24772E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Effects 2022", "Krypton.Toolkit.Suite.Extended.Effects\Krypton.Toolkit.Suite.Extended.Effects 2022.csproj", "{B47A7562-B3B5-4521-91DB-E5CC4CC986E3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Global.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Global.Utilities\Krypton.Toolkit.Suite.Extended.Global.Utilities 2022.csproj", "{B9A5A472-F747-4C87-B5E9-C5A05DB17827}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Language.Model 2022", "Krypton.Toolkit.Suite.Extended.Language.Model\Krypton.Toolkit.Suite.Extended.Language.Model 2022.csproj", "{81BCFC34-220F-43A8-A58B-8F9E123C72E1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Resources 2022", "Krypton.Toolkit.Suite.Extended.Resources\Krypton.Toolkit.Suite.Extended.Resources 2022.csproj", "{4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Settings 2022", "Krypton.Toolkit.Suite.Extended.Settings\Krypton.Toolkit.Suite.Extended.Settings 2022.csproj", "{C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tools 2022", "Krypton.Toolkit.Suite.Extended.Tools\Krypton.Toolkit.Suite.Extended.Tools 2022.csproj", "{CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Utilities\Krypton.Toolkit.Suite.Extended.Utilities 2022.csproj", "{E66AA060-36AC-4C48-98B5-41701F5524A6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Explorer 2022", "Krypton.Toolkit.Suite.Extended.File.Explorer\Krypton.Toolkit.Suite.Extended.File.Explorer 2022.csproj", "{1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Gages 2022", "Krypton.Toolkit.Suite.Extended.Gages\Krypton.Toolkit.Suite.Extended.Gages 2022.csproj", "{7E1B169E-AD04-4C98-9971-DC7F450BF610}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022", "Krypton.Toolkit.Suite.Extended.Palette.Selectors\Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022.csproj", "{4545427A-2FD5-441A-A35E-F09F2AB1B20D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.TaskDialogs 2022", "Krypton.Toolkit.Suite.Extended.TaskDialogs\Krypton.Toolkit.Suite.Extended.TaskDialogs 2022.csproj", "{116CDDE3-823F-486E-B0AC-2F0FE810A7EF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Theme.Switcher 2022", "Krypton.Toolkit.Suite.Extended.Theme.Switcher\Krypton.Toolkit.Suite.Extended.Theme.Switcher 2022.csproj", "{062AB625-3AAB-46ED-891D-E7103D1F7EBE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Toggle.Switch 2022", "Krypton.Toolkit.Suite.Extended.Toggle.Switch\Krypton.Toolkit.Suite.Extended.Toggle.Switch 2022.csproj", "{3804493B-31D2-4D70-89EF-EDED205037EC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tool.Box 2022", "Krypton.Toolkit.Suite.Extended.Tool.Box\Krypton.Toolkit.Suite.Extended.Tool.Box 2022.csproj", "{66B492AC-74E6-4951-9376-47B4B7BA43EB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tool.Strip.Items 2022", "Krypton.Toolkit.Suite.Extended.Tool.Strip.Items\Krypton.Toolkit.Suite.Extended.Tool.Strip.Items 2022.csproj", "{8FD6FEBA-B906-4C66-9A8D-E370B961162C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Wizard 2022", "Krypton.Toolkit.Suite.Extended.Wizard\Krypton.Toolkit.Suite.Extended.Wizard 2022.csproj", "{6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.DataGridView 2022", "Krypton.Toolkit.Suite.Extended.DataGridView\Krypton.Toolkit.Suite.Extended.DataGridView 2022.csproj", "{A55B5F11-F812-4FF4-900C-B12601B34E52}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.TreeGridView 2022", "Krypton.Toolkit.Suite.Extended.TreeGridView\Krypton.Toolkit.Suite.Extended.TreeGridView 2022.csproj", "{34F32E4D-79EF-4447-A585-B1A79BF1C3C3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Compression 2022", "Krypton.Toolkit.Suite.Extended.Compression\Krypton.Toolkit.Suite.Extended.Compression 2022.csproj", "{18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Forms 2022", "Krypton.Toolkit.Suite.Extended.Forms\Krypton.Toolkit.Suite.Extended.Forms 2022.csproj", "{EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generic", "Generic", "{4696C160-BC97-414A-8D30-B09A2CA76085}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Directory.Build.props = ..\..\Directory.Build.props
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generate Packages", "Generate Packages", "{9ACA6117-D269-4425-8500-6BC57560DEB2}"
+ ProjectSection(SolutionItems) = preProject
+ Directory.Build.props = Directory.Build.props
+ Directory.Build.targets = Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.InputBox 2022", "Krypton.Toolkit.Suite.Extended.InputBox\Krypton.Toolkit.Suite.Extended.InputBox 2022.csproj", "{2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Panels 2022", "Krypton.Toolkit.Suite.Extended.Panels\Krypton.Toolkit.Suite.Extended.Panels 2022.csproj", "{335DD135-6475-46D5-A7DB-EA329224D59E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Miscellaneous", "Miscellaneous", "{241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51}"
+ ProjectSection(SolutionItems) = preProject
+ ..\.editorconfig = ..\.editorconfig
+ Directory.Build.props = Directory.Build.props
+ Directory.Build.targets = Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView 2022", "Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView\Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView 2022.csproj", "{CB1E8B1F-E019-498A-8E4E-117012F6368C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Ribbon 2022", "Krypton.Toolkit.Suite.Extended.Ribbon\Krypton.Toolkit.Suite.Extended.Ribbon 2022.csproj", "{9FCE31CF-18F7-4F24-8B73-799B3CB19D57}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{0703388D-5FBE-4345-94B0-5FA9FD043079}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Shared 2022", "Krypton.Toolkit.Suite.Extended.Shared\Krypton.Toolkit.Suite.Extended.Shared 2022.csproj", "{0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{5DB6B467-9257-42D3-B81F-380B5D537C04}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Schemas", "Schemas", "{1AD413AC-FAD3-4F79-A948-4FB66AF10685}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec
+ ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Themes 2022", "Krypton.Toolkit.Suite.Extended.Themes\Krypton.Toolkit.Suite.Extended.Themes 2022.csproj", "{A58A93DE-0CBF-495B-8D29-761B1143AD32}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Buttons 2022", "Krypton.Toolkit.Suite.Extended.Buttons\Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj", "{A7C0B094-539C-4283-AA9A-3959749886B7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354} = {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Calendar 2022", "Krypton.Toolkit.Suite.Extended.Calendar\Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj", "{BE3A7DFA-3616-4840-B9CC-09E96CC894B4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{BA86BDC7-D11C-4E74-875C-B284E740B599}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\Documents\License\License.md = ..\..\Documents\License\License.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projects to Work On", "Projects to Work On", "{ADF53878-BE1F-43A3-A890-E11190BE5465}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.PDF 2022", "Krypton.Toolkit.Suite.Extended.PDF\Krypton.Toolkit.Suite.Extended.PDF 2022.csproj", "{A59A87BE-E92A-4717-92DC-A2286EE812EC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples", "Examples\Examples.csproj", "{744D6A50-F8DB-4D5F-B571-34B0597E03B8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F} = {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022", "Krypton.Toolkit.Suite.Extended.AdvancedDataGridView\Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj", "{5E23D530-6349-4786-AA2D-F1DD9CC1586E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022", "Krypton.Toolkit.Suite.Extended.Scintilla.NET\Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022.csproj", "{BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022", "Krypton.Toolkit.Suite.Extended.CheckSum.Tools\Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj", "{26A8A753-BC4B-4E42-B124-8EA3FA64303F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022", "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar\Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj", "{7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.ComboBox 2022", "Krypton.Toolkit.Suite.Extended.ComboBox\Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj", "{253E37F3-A36F-4D96-B22E-1D50C31C0D2D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Controls 2022", "Krypton.Toolkit.Suite.Extended.Controls\Krypton.Toolkit.Suite.Extended.Controls 2022.csproj", "{C4D0363C-6CA9-4D47-B896-D287C1E6BD11}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022", "Krypton.Toolkit.Suite.Extended.Data.Visualisation\Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj", "{558D7C96-4E2D-4679-8D1A-508E734855D8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Dialogs\Krypton.Toolkit.Suite.Extended.Dialogs 2022.csproj", "{3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dock.Extender 2022", "Krypton.Toolkit.Suite.Extended.Dock.Extender\Krypton.Toolkit.Suite.Extended.Dock.Extender 2022.csproj", "{AA363B11-8B13-4333-85E1-8623D21E1202}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Error.Reporting 2022", "Krypton.Toolkit.Suite.Extended.Error.Reporting\Krypton.Toolkit.Suite.Extended.Error.Reporting 2022.csproj", "{3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Copier 2022", "Krypton.Toolkit.Suite.Extended.File.Copier\Krypton.Toolkit.Suite.Extended.File.Copier 2022.csproj", "{14542128-1DF0-44DB-9365-1FF39324B317}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022", "Krypton.Toolkit.Suite.Extended.Floating.Toolbars\Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022.csproj", "{4804A209-411D-43E5-B104-77D6A19131E2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Messagebox 2022", "Krypton.Toolkit.Suite.Extended.Messagebox\Krypton.Toolkit.Suite.Extended.Messagebox 2022.csproj", "{FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Memory.Box 2022", "Krypton.Toolkit.Suite.Extended.Memory.Box\Krypton.Toolkit.Suite.Extended.Memory.Box 2022.csproj", "{4C448625-CBCB-4147-9288-659906B17C28}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navi.Suite 2022", "Krypton.Toolkit.Suite.Extended.Navi.Suite\Krypton.Toolkit.Suite.Extended.Navi.Suite 2022.csproj", "{AA7EBA51-F1BA-4A45-9344-22F4E173109A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navigator 2022", "Krypton.Toolkit.Suite.Extended.Navigator\Krypton.Toolkit.Suite.Extended.Navigator 2022.csproj", "{65DDD9BE-D9BB-456A-97D4-D0B75607F657}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Networking 2022", "Krypton.Toolkit.Suite.Extended.Networking\Krypton.Toolkit.Suite.Extended.Networking 2022.csproj", "{B9D53724-D2C8-4067-8146-15C04533BAE3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Notifications 2022", "Krypton.Toolkit.Suite.Extended.Notifications\Krypton.Toolkit.Suite.Extended.Notifications 2022.csproj", "{A7DFFED4-3872-491C-B560-C8E4E4733A4D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Drawing.Utilities\Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022.csproj", "{F33622D3-84D1-4C58-9241-45243882739C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.IO 2022", "Krypton.Toolkit.Suite.Extended.IO\Krypton.Toolkit.Suite.Extended.IO 2022.csproj", "{62253CD1-5FFB-4B07-82E9-00C978A96478}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater\Krypton.Toolkit.Suite.Extended.Software.Updater 2022.csproj", "{A5FA199B-9AA4-4061-AE07-3036A115AA24}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs\Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022.csproj", "{2C946C86-12F4-40A3-B964-09C71DA3B845}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater.Core\Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022.csproj", "{5C2389E8-1198-48D2-BDCC-44F74BE6B294}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZipExtractor", "ZipExtractor\ZipExtractor.csproj", "{1126FD6E-8A3E-4C93-AABB-06073B27EB75}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{4985A154-8526-4CB0-A7DC-B39736C4A8AC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoUpdateCreator", "AutoUpdateCreator\AutoUpdateCreator.csproj", "{975DA9CB-501F-442E-8339-AF625C7A5DA4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub", "GitHub", "{5D204922-259D-4140-B115-F01EDF031B5A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Issue Templates", "Issue Templates", "{362F24FA-1AA0-4821-A539-C5A863D39B8B}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\.github\ISSUE_TEMPLATE\bug_report.md = ..\..\.github\ISSUE_TEMPLATE\bug_report.md
+ ..\..\.github\ISSUE_TEMPLATE\feature-request.md = ..\..\.github\ISSUE_TEMPLATE\feature-request.md
+ ..\..\.github\ISSUE_TEMPLATE\other-issues.md = ..\..\.github\ISSUE_TEMPLATE\other-issues.md
+ ..\..\.github\ISSUE_TEMPLATE\post-a-question.md = ..\..\.github\ISSUE_TEMPLATE\post-a-question.md
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Debug.Tools 2022", "Krypton.Toolkit.Suite.Extended.Debug.Tools\Krypton.Toolkit.Suite.Extended.Debug.Tools 2022.csproj", "{DDC3EC31-7D14-47BD-9DAF-24AF5B032354}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.MessageDialog", "Krypton.Toolkit.Suite.Extended.MessageDialog\Krypton.Toolkit.Suite.Extended.MessageDialog.csproj", "{B93429BE-5941-40A4-89F8-C14109959886}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.ToastNotification 2022", "Krypton.Toolkit.Suite.Extended.ToastNotification\Krypton.Toolkit.Suite.Extended.ToastNotification 2022.csproj", "{9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{74E3A6CE-ED3C-41EF-B5AC-814D289DCDE5}"
+EndProject
+Project("{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}") = "Extended Toolkit API Documentation", "..\Documentation\Extended Toolkit API Documentation\Extended Toolkit API Documentation.shfbproj", "{6CFE23A2-844D-4EF5-8A75-35985B11CF34}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Canary|Any CPU = Canary|Any CPU
+ Debug|Any CPU = Debug|Any CPU
+ Nightly|Any CPU = Nightly|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.Build.0 = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3804493B-31D2-4D70-89EF-EDED205037EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A55B5F11-F812-4FF4-900C-B12601B34E52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {335DD135-6475-46D5-A7DB-EA329224D59E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7C0B094-539C-4283-AA9A-3959749886B7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.Build.0 = Debug|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.Build.0 = Debug|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.Build.0 = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.Build.0 = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B93429BE-5941-40A4-89F8-C14109959886}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Canary|Any CPU.Build.0 = Canary|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {87BE2145-50BE-4A57-9C79-FCE5A64F6065} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {6B01F113-016E-445F-BE5E-80BA7144B928} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {404EC0E7-92CB-4E90-80F7-440A4F5D772C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {734B2F67-D055-44B2-818A-FE569C479937} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {15346861-5444-49D7-9686-3835EE271259} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {5E13A5BB-407A-46A5-95A8-9DA57FB21C6C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {6EFEF411-B16C-4DEA-992F-9CA767EB1265} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {F96630C5-2A89-44D5-BED6-99609A6D716A} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {247BBF4E-22B0-49CC-981B-0420AD7FF4E8} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {071034AA-BFA3-4325-B763-E95A2E05EF4D} = {734B2F67-D055-44B2-818A-FE569C479937}
+ {378BEE59-0131-4497-80B8-69B3124325D7} = {734B2F67-D055-44B2-818A-FE569C479937}
+ {69F98672-EBB9-4B12-BD04-45AEF3C37FC6} = {15346861-5444-49D7-9686-3835EE271259}
+ {0451E883-C718-4679-962F-E2825B1513B2} = {247BBF4E-22B0-49CC-981B-0420AD7FF4E8}
+ {E68C45C0-418B-4CFC-97C0-282798B38B37} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {9CB33D7B-BF7E-4221-859D-5E61E24772E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {B47A7562-B3B5-4521-91DB-E5CC4CC986E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {B9A5A472-F747-4C87-B5E9-C5A05DB17827} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {81BCFC34-220F-43A8-A58B-8F9E123C72E1} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {E66AA060-36AC-4C48-98B5-41701F5524A6} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {7E1B169E-AD04-4C98-9971-DC7F450BF610} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {4545427A-2FD5-441A-A35E-F09F2AB1B20D} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {116CDDE3-823F-486E-B0AC-2F0FE810A7EF} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {062AB625-3AAB-46ED-891D-E7103D1F7EBE} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {3804493B-31D2-4D70-89EF-EDED205037EC} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {66B492AC-74E6-4951-9376-47B4B7BA43EB} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {8FD6FEBA-B906-4C66-9A8D-E370B961162C} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {A55B5F11-F812-4FF4-900C-B12601B34E52} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {34F32E4D-79EF-4447-A585-B1A79BF1C3C3} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {4696C160-BC97-414A-8D30-B09A2CA76085} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
+ {9ACA6117-D269-4425-8500-6BC57560DEB2} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
+ {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {335DD135-6475-46D5-A7DB-EA329224D59E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {CB1E8B1F-E019-498A-8E4E-117012F6368C} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {9FCE31CF-18F7-4F24-8B73-799B3CB19D57} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {5DB6B467-9257-42D3-B81F-380B5D537C04} = {6B01F113-016E-445F-BE5E-80BA7144B928}
+ {1AD413AC-FAD3-4F79-A948-4FB66AF10685} = {5DB6B467-9257-42D3-B81F-380B5D537C04}
+ {A58A93DE-0CBF-495B-8D29-761B1143AD32} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {A7C0B094-539C-4283-AA9A-3959749886B7} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {BE3A7DFA-3616-4840-B9CC-09E96CC894B4} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {BA86BDC7-D11C-4E74-875C-B284E740B599} = {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}
+ {A59A87BE-E92A-4717-92DC-A2286EE812EC} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {744D6A50-F8DB-4D5F-B571-34B0597E03B8} = {0703388D-5FBE-4345-94B0-5FA9FD043079}
+ {5E23D530-6349-4786-AA2D-F1DD9CC1586E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {26A8A753-BC4B-4E42-B124-8EA3FA64303F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {253E37F3-A36F-4D96-B22E-1D50C31C0D2D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {C4D0363C-6CA9-4D47-B896-D287C1E6BD11} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {558D7C96-4E2D-4679-8D1A-508E734855D8} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {AA363B11-8B13-4333-85E1-8623D21E1202} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {14542128-1DF0-44DB-9365-1FF39324B317} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {4804A209-411D-43E5-B104-77D6A19131E2} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {4C448625-CBCB-4147-9288-659906B17C28} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {AA7EBA51-F1BA-4A45-9344-22F4E173109A} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {65DDD9BE-D9BB-456A-97D4-D0B75607F657} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {B9D53724-D2C8-4067-8146-15C04533BAE3} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {A7DFFED4-3872-491C-B560-C8E4E4733A4D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {F33622D3-84D1-4C58-9241-45243882739C} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {62253CD1-5FFB-4B07-82E9-00C978A96478} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {A5FA199B-9AA4-4061-AE07-3036A115AA24} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
+ {2C946C86-12F4-40A3-B964-09C71DA3B845} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {5C2389E8-1198-48D2-BDCC-44F74BE6B294} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {1126FD6E-8A3E-4C93-AABB-06073B27EB75} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
+ {975DA9CB-501F-442E-8339-AF625C7A5DA4} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
+ {5D204922-259D-4140-B115-F01EDF031B5A} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
+ {362F24FA-1AA0-4821-A539-C5A863D39B8B} = {5D204922-259D-4140-B115-F01EDF031B5A}
+ {DDC3EC31-7D14-47BD-9DAF-24AF5B032354} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
+ {B93429BE-5941-40A4-89F8-C14109959886} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {9622B3B8-E6FA-4DC6-A151-826AA0C90CE7} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
+ {6CFE23A2-844D-4EF5-8A75-35985B11CF34} = {74E3A6CE-ED3C-41EF-B5AC-814D289DCDE5}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A7CE7732-0982-4703-8EFD-7715D569BAB5}
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022.sln b/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022.sln
deleted file mode 100644
index 673c17598..000000000
--- a/Source/Krypton Toolkit/Krypton Toolkit Suite Extended 2022 - VS2022.sln
+++ /dev/null
@@ -1,875 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31825.309
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repository Items", "Repository Items", "{5D85B551-9AFC-4E96-93C3-D8D81B69971F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build System", "Build System", "{87BE2145-50BE-4A57-9C79-FCE5A64F6065}"
- ProjectSection(SolutionItems) = preProject
- ..\..\build.cmd = ..\..\build.cmd
- ..\..\build.proj = ..\..\build.proj
- ..\..\debug.cmd = ..\..\debug.cmd
- ..\..\debug.proj = ..\..\debug.proj
- ..\..\purge.cmd = ..\..\purge.cmd
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Markdown", "Markdown", "{A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Documents\Help\Changelog.md = ..\..\Documents\Help\Changelog.md
- ..\..\Documents\Examples\Examples.md = ..\..\Documents\Examples\Examples.md
- ..\..\Documents\Modules\NuGet Package Information.md = ..\..\Documents\Modules\NuGet Package Information.md
- ..\..\Documents\Help\Prerequisites.md = ..\..\Documents\Help\Prerequisites.md
- ..\..\README.md = ..\..\README.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{6B01F113-016E-445F-BE5E-80BA7144B928}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\ToggleSwich.bmp = ..\..\Assets\ToggleSwich.bmp
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{404EC0E7-92CB-4E90-80F7-440A4F5D772C}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\Examples\CircularProgressBar.png = ..\..\Assets\Examples\CircularProgressBar.png
- ..\..\Assets\Examples\CommandLinks.png = ..\..\Assets\Examples\CommandLinks.png
- ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox1.png
- ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png = ..\..\Assets\Examples\ExtendedKryptonMessageBox2.png
- ..\..\Assets\Examples\FloatableToolStrip.png = ..\..\Assets\Examples\FloatableToolStrip.png
- ..\..\Assets\Examples\FlotableMenuStrip.png = ..\..\Assets\Examples\FlotableMenuStrip.png
- ..\..\Assets\Examples\KryptonColourMixer.png = ..\..\Assets\Examples\KryptonColourMixer.png
- ..\..\Assets\Examples\KryptonColourWheel.png = ..\..\Assets\Examples\KryptonColourWheel.png
- ..\..\Assets\Examples\KryptonInputBoxExtended.png = ..\..\Assets\Examples\KryptonInputBoxExtended.png
- ..\..\Assets\Examples\KryptonKnobControl.png = ..\..\Assets\Examples\KryptonKnobControl.png
- ..\..\Assets\Examples\KryptonPaletteColourShader.png = ..\..\Assets\Examples\KryptonPaletteColourShader.png
- ..\..\Assets\Examples\KryptonPropertyGrid.png = ..\..\Assets\Examples\KryptonPropertyGrid.png
- ..\..\Assets\Examples\KryptonScrollBars.png = ..\..\Assets\Examples\KryptonScrollBars.png
- ..\..\Assets\Examples\KryptonThemeSelector.png = ..\..\Assets\Examples\KryptonThemeSelector.png
- ..\..\Assets\Examples\KryptonToastNotificationV1.png = ..\..\Assets\Examples\KryptonToastNotificationV1.png
- ..\..\Assets\Examples\KryptonToggleSwitch.png = ..\..\Assets\Examples\KryptonToggleSwitch.png
- ..\..\Assets\Examples\KryptonViewBar.png = ..\..\Assets\Examples\KryptonViewBar.png
- ..\..\Assets\Examples\TreeViews.png = ..\..\Assets\Examples\TreeViews.png
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ICO", "ICO", "{734B2F67-D055-44B2-818A-FE569C479937}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JPEG", "JPEG", "{15346861-5444-49D7-9686-3835EE271259}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{5E13A5BB-407A-46A5-95A8-9DA57FB21C6C}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\License\LICENSE.md = ..\..\Assets\License\LICENSE.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package Icon", "Package Icon", "{6EFEF411-B16C-4DEA-992F-9CA767EB1265}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png = ..\..\Assets\Package Icon\Canary_Icon_128_x_128.png
- ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png = ..\..\Assets\Package Icon\Stable_Icon_128_x_128.png
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PNG", "PNG", "{F96630C5-2A89-44D5-BED6-99609A6D716A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PSD", "PSD", "{247BBF4E-22B0-49CC-981B-0420AD7FF4E8}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\PSD\Command Link Button.psd = ..\..\Assets\PSD\Command Link Button.psd
- ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Canary.psd
- ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd = ..\..\Assets\PSD\Main Icon 512 x 512 Nightly.psd
- ..\..\Assets\PSD\PE Icon 512 x 512.psd = ..\..\Assets\PSD\PE Icon 512 x 512.psd
- ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd = ..\..\Assets\PSD\Square Design 512 x 512 Orange.psd
- ..\..\Assets\PSD\ToggleSwich.psd = ..\..\Assets\PSD\ToggleSwich.psd
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{071034AA-BFA3-4325-B763-E95A2E05EF4D}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico = ..\..\Assets\ICO\48 x 48\KR 48 x 48 Orange.ico
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "256 x 256", "256 x 256", "{378BEE59-0131-4497-80B8-69B3124325D7}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico = ..\..\Assets\ICO\256 x 256\KR 256 x 256 Orange.ico
- ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico = ..\..\Assets\ICO\256 x 256\PE Icon 256 x 256.ico
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "48 x 48", "48 x 48", "{69F98672-EBB9-4B12-BD04-45AEF3C37FC6}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg = ..\..\Assets\JPEG\48 x 48\Logo Stable.jpg
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Arrows", "Arrows", "{0451E883-C718-4679-962F-E2825B1513B2}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\PSD\Arrows\Arrow-1.psd = ..\..\Assets\PSD\Arrows\Arrow-1.psd
- ..\..\Assets\PSD\Arrows\Arrow-2.psd = ..\..\Assets\PSD\Arrows\Arrow-2.psd
- ..\..\Assets\PSD\Arrows\Arrow-3.psd = ..\..\Assets\PSD\Arrows\Arrow-3.psd
- ..\..\Assets\PSD\Arrows\Arrow-4.psd = ..\..\Assets\PSD\Arrows\Arrow-4.psd
- ..\..\Assets\PSD\Arrows\Template.psd = ..\..\Assets\PSD\Arrows\Template.psd
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FDDE0872-007C-4945-9D20-C9011C37204B}"
- ProjectSection(SolutionItems) = preProject
- .editorconfig = .editorconfig
- .nuspec = .nuspec
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Core 2022", "Krypton.Toolkit.Suite.Extended.Core\Krypton.Toolkit.Suite.Extended.Core 2022.csproj", "{E68C45C0-418B-4CFC-97C0-282798B38B37}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Common 2022", "Krypton.Toolkit.Suite.Extended.Common\Krypton.Toolkit.Suite.Extended.Common 2022.csproj", "{57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Developer.Utilities\Krypton.Toolkit.Suite.Extended.Developer.Utilities 2022.csproj", "{58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing 2022", "Krypton.Toolkit.Suite.Extended.Drawing\Krypton.Toolkit.Suite.Extended.Drawing 2022.csproj", "{9CB33D7B-BF7E-4221-859D-5E61E24772E3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Effects 2022", "Krypton.Toolkit.Suite.Extended.Effects\Krypton.Toolkit.Suite.Extended.Effects 2022.csproj", "{B47A7562-B3B5-4521-91DB-E5CC4CC986E3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Global.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Global.Utilities\Krypton.Toolkit.Suite.Extended.Global.Utilities 2022.csproj", "{B9A5A472-F747-4C87-B5E9-C5A05DB17827}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Language.Model 2022", "Krypton.Toolkit.Suite.Extended.Language.Model\Krypton.Toolkit.Suite.Extended.Language.Model 2022.csproj", "{81BCFC34-220F-43A8-A58B-8F9E123C72E1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Resources 2022", "Krypton.Toolkit.Suite.Extended.Resources\Krypton.Toolkit.Suite.Extended.Resources 2022.csproj", "{4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Settings 2022", "Krypton.Toolkit.Suite.Extended.Settings\Krypton.Toolkit.Suite.Extended.Settings 2022.csproj", "{C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tools 2022", "Krypton.Toolkit.Suite.Extended.Tools\Krypton.Toolkit.Suite.Extended.Tools 2022.csproj", "{CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Utilities\Krypton.Toolkit.Suite.Extended.Utilities 2022.csproj", "{E66AA060-36AC-4C48-98B5-41701F5524A6}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Explorer 2022", "Krypton.Toolkit.Suite.Extended.File.Explorer\Krypton.Toolkit.Suite.Extended.File.Explorer 2022.csproj", "{1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Gages 2022", "Krypton.Toolkit.Suite.Extended.Gages\Krypton.Toolkit.Suite.Extended.Gages 2022.csproj", "{7E1B169E-AD04-4C98-9971-DC7F450BF610}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022", "Krypton.Toolkit.Suite.Extended.Palette.Selectors\Krypton.Toolkit.Suite.Extended.Palette.Selectors 2022.csproj", "{4545427A-2FD5-441A-A35E-F09F2AB1B20D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.TaskDialogs 2022", "Krypton.Toolkit.Suite.Extended.TaskDialogs\Krypton.Toolkit.Suite.Extended.TaskDialogs 2022.csproj", "{116CDDE3-823F-486E-B0AC-2F0FE810A7EF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Theme.Switcher 2022", "Krypton.Toolkit.Suite.Extended.Theme.Switcher\Krypton.Toolkit.Suite.Extended.Theme.Switcher 2022.csproj", "{062AB625-3AAB-46ED-891D-E7103D1F7EBE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Toggle.Switch 2022", "Krypton.Toolkit.Suite.Extended.Toggle.Switch\Krypton.Toolkit.Suite.Extended.Toggle.Switch 2022.csproj", "{3804493B-31D2-4D70-89EF-EDED205037EC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tool.Box 2022", "Krypton.Toolkit.Suite.Extended.Tool.Box\Krypton.Toolkit.Suite.Extended.Tool.Box 2022.csproj", "{66B492AC-74E6-4951-9376-47B4B7BA43EB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Tool.Strip.Items 2022", "Krypton.Toolkit.Suite.Extended.Tool.Strip.Items\Krypton.Toolkit.Suite.Extended.Tool.Strip.Items 2022.csproj", "{8FD6FEBA-B906-4C66-9A8D-E370B961162C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Wizard 2022", "Krypton.Toolkit.Suite.Extended.Wizard\Krypton.Toolkit.Suite.Extended.Wizard 2022.csproj", "{6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.DataGridView 2022", "Krypton.Toolkit.Suite.Extended.DataGridView\Krypton.Toolkit.Suite.Extended.DataGridView 2022.csproj", "{A55B5F11-F812-4FF4-900C-B12601B34E52}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.TreeGridView 2022", "Krypton.Toolkit.Suite.Extended.TreeGridView\Krypton.Toolkit.Suite.Extended.TreeGridView 2022.csproj", "{34F32E4D-79EF-4447-A585-B1A79BF1C3C3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Compression 2022", "Krypton.Toolkit.Suite.Extended.Compression\Krypton.Toolkit.Suite.Extended.Compression 2022.csproj", "{18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Forms 2022", "Krypton.Toolkit.Suite.Extended.Forms\Krypton.Toolkit.Suite.Extended.Forms 2022.csproj", "{EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generic", "Generic", "{4696C160-BC97-414A-8D30-B09A2CA76085}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Directory.Build.props = ..\..\Directory.Build.props
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Generate Packages", "Generate Packages", "{9ACA6117-D269-4425-8500-6BC57560DEB2}"
- ProjectSection(SolutionItems) = preProject
- Directory.Build.props = Directory.Build.props
- Directory.Build.targets = Directory.Build.targets
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.InputBox 2022", "Krypton.Toolkit.Suite.Extended.InputBox\Krypton.Toolkit.Suite.Extended.InputBox 2022.csproj", "{2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Panels 2022", "Krypton.Toolkit.Suite.Extended.Panels\Krypton.Toolkit.Suite.Extended.Panels 2022.csproj", "{335DD135-6475-46D5-A7DB-EA329224D59E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Toast 2022", "Krypton.Toolkit.Suite.Extended.Toast\Krypton.Toolkit.Suite.Extended.Toast 2022.csproj", "{97917447-2353-4D4D-935F-CF9279F1464F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Miscellaneous", "Miscellaneous", "{241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51}"
- ProjectSection(SolutionItems) = preProject
- ..\.editorconfig = ..\.editorconfig
- Directory.Build.props = Directory.Build.props
- Directory.Build.targets = Directory.Build.targets
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView 2022", "Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView\Krypton.Toolkit.Suite.Extended.VirtualTreeColumnView 2022.csproj", "{CB1E8B1F-E019-498A-8E4E-117012F6368C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Ribbon 2022", "Krypton.Toolkit.Suite.Extended.Ribbon\Krypton.Toolkit.Suite.Extended.Ribbon 2022.csproj", "{9FCE31CF-18F7-4F24-8B73-799B3CB19D57}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{0703388D-5FBE-4345-94B0-5FA9FD043079}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Shared 2022", "Krypton.Toolkit.Suite.Extended.Shared\Krypton.Toolkit.Suite.Extended.Shared 2022.csproj", "{0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{5DB6B467-9257-42D3-B81F-380B5D537C04}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Schemas", "Schemas", "{1AD413AC-FAD3-4F79-A948-4FB66AF10685}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.Lite.nuspec
- ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec = ..\..\Assets\NuGet\Schemas\Krypton.Toolkit.Suite.Extended.nuspec
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Themes 2022", "Krypton.Toolkit.Suite.Extended.Themes\Krypton.Toolkit.Suite.Extended.Themes 2022.csproj", "{A58A93DE-0CBF-495B-8D29-761B1143AD32}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Buttons 2022", "Krypton.Toolkit.Suite.Extended.Buttons\Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj", "{A7C0B094-539C-4283-AA9A-3959749886B7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Calendar 2022", "Krypton.Toolkit.Suite.Extended.Calendar\Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj", "{BE3A7DFA-3616-4840-B9CC-09E96CC894B4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "License", "License", "{BA86BDC7-D11C-4E74-875C-B284E740B599}"
- ProjectSection(SolutionItems) = preProject
- ..\..\Documents\License\License.md = ..\..\Documents\License\License.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projects to Work On", "Projects to Work On", "{ADF53878-BE1F-43A3-A890-E11190BE5465}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.PDF 2022", "Krypton.Toolkit.Suite.Extended.PDF\Krypton.Toolkit.Suite.Extended.PDF 2022.csproj", "{A59A87BE-E92A-4717-92DC-A2286EE812EC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples", "Examples\Examples.csproj", "{744D6A50-F8DB-4D5F-B571-34B0597E03B8}"
- ProjectSection(ProjectDependencies) = postProject
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F} = {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022", "Krypton.Toolkit.Suite.Extended.AdvancedDataGridView\Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj", "{5E23D530-6349-4786-AA2D-F1DD9CC1586E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022", "Krypton.Toolkit.Suite.Extended.Scintilla.NET\Krypton.Toolkit.Suite.Extended.Scintilla.NET 2022.csproj", "{BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022", "Krypton.Toolkit.Suite.Extended.CheckSum.Tools\Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj", "{26A8A753-BC4B-4E42-B124-8EA3FA64303F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022", "Krypton.Toolkit.Suite.Extended.Circular.ProgressBar\Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj", "{7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.ComboBox 2022", "Krypton.Toolkit.Suite.Extended.ComboBox\Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj", "{253E37F3-A36F-4D96-B22E-1D50C31C0D2D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Controls 2022", "Krypton.Toolkit.Suite.Extended.Controls\Krypton.Toolkit.Suite.Extended.Controls 2022.csproj", "{C4D0363C-6CA9-4D47-B896-D287C1E6BD11}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022", "Krypton.Toolkit.Suite.Extended.Data.Visualisation\Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj", "{558D7C96-4E2D-4679-8D1A-508E734855D8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Dialogs\Krypton.Toolkit.Suite.Extended.Dialogs 2022.csproj", "{3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Dock.Extender 2022", "Krypton.Toolkit.Suite.Extended.Dock.Extender\Krypton.Toolkit.Suite.Extended.Dock.Extender 2022.csproj", "{AA363B11-8B13-4333-85E1-8623D21E1202}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Error.Reporting 2022", "Krypton.Toolkit.Suite.Extended.Error.Reporting\Krypton.Toolkit.Suite.Extended.Error.Reporting 2022.csproj", "{3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.File.Copier 2022", "Krypton.Toolkit.Suite.Extended.File.Copier\Krypton.Toolkit.Suite.Extended.File.Copier 2022.csproj", "{14542128-1DF0-44DB-9365-1FF39324B317}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022", "Krypton.Toolkit.Suite.Extended.Floating.Toolbars\Krypton.Toolkit.Suite.Extended.Floating.Toolbars 2022.csproj", "{4804A209-411D-43E5-B104-77D6A19131E2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Messagebox 2022", "Krypton.Toolkit.Suite.Extended.Messagebox\Krypton.Toolkit.Suite.Extended.Messagebox 2022.csproj", "{FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Memory.Box 2022", "Krypton.Toolkit.Suite.Extended.Memory.Box\Krypton.Toolkit.Suite.Extended.Memory.Box 2022.csproj", "{4C448625-CBCB-4147-9288-659906B17C28}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navi.Suite 2022", "Krypton.Toolkit.Suite.Extended.Navi.Suite\Krypton.Toolkit.Suite.Extended.Navi.Suite 2022.csproj", "{AA7EBA51-F1BA-4A45-9344-22F4E173109A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Navigator 2022", "Krypton.Toolkit.Suite.Extended.Navigator\Krypton.Toolkit.Suite.Extended.Navigator 2022.csproj", "{65DDD9BE-D9BB-456A-97D4-D0B75607F657}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Networking 2022", "Krypton.Toolkit.Suite.Extended.Networking\Krypton.Toolkit.Suite.Extended.Networking 2022.csproj", "{B9D53724-D2C8-4067-8146-15C04533BAE3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Notifications 2022", "Krypton.Toolkit.Suite.Extended.Notifications\Krypton.Toolkit.Suite.Extended.Notifications 2022.csproj", "{A7DFFED4-3872-491C-B560-C8E4E4733A4D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Outlook.Grid 2022", "Krypton.Toolkit.Suite.Extended.Outlook.Grid\Krypton.Toolkit.Suite.Extended.Outlook.Grid 2022.csproj", "{9B5D60B1-765A-4793-92C4-23E8F8A76A77}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022", "Krypton.Toolkit.Suite.Extended.Drawing.Utilities\Krypton.Toolkit.Suite.Extended.Drawing.Utilities 2022.csproj", "{F33622D3-84D1-4C58-9241-45243882739C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.IO 2022", "Krypton.Toolkit.Suite.Extended.IO\Krypton.Toolkit.Suite.Extended.IO 2022.csproj", "{62253CD1-5FFB-4B07-82E9-00C978A96478}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater\Krypton.Toolkit.Suite.Extended.Software.Updater 2022.csproj", "{A5FA199B-9AA4-4061-AE07-3036A115AA24}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022", "Krypton.Toolkit.Suite.Extended.Specialised.Dialogs\Krypton.Toolkit.Suite.Extended.Specialised.Dialogs 2022.csproj", "{2C946C86-12F4-40A3-B964-09C71DA3B845}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022", "Krypton.Toolkit.Suite.Extended.Software.Updater.Core\Krypton.Toolkit.Suite.Extended.Software.Updater.Core 2022.csproj", "{5C2389E8-1198-48D2-BDCC-44F74BE6B294}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZipExtractor", "ZipExtractor\ZipExtractor.csproj", "{1126FD6E-8A3E-4C93-AABB-06073B27EB75}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{4985A154-8526-4CB0-A7DC-B39736C4A8AC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoUpdateCreator", "AutoUpdateCreator\AutoUpdateCreator.csproj", "{975DA9CB-501F-442E-8339-AF625C7A5DA4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub", "GitHub", "{5D204922-259D-4140-B115-F01EDF031B5A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Issue Templates", "Issue Templates", "{362F24FA-1AA0-4821-A539-C5A863D39B8B}"
- ProjectSection(SolutionItems) = preProject
- ..\..\.github\ISSUE_TEMPLATE\bug_report.md = ..\..\.github\ISSUE_TEMPLATE\bug_report.md
- ..\..\.github\ISSUE_TEMPLATE\feature-request.md = ..\..\.github\ISSUE_TEMPLATE\feature-request.md
- ..\..\.github\ISSUE_TEMPLATE\other-issues.md = ..\..\.github\ISSUE_TEMPLATE\other-issues.md
- ..\..\.github\ISSUE_TEMPLATE\post-a-question.md = ..\..\.github\ISSUE_TEMPLATE\post-a-question.md
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Canary|Any CPU = Canary|Any CPU
- Debug|Any CPU = Debug|Any CPU
- Nightly|Any CPU = Nightly|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E68C45C0-418B-4CFC-97C0-282798B38B37}.Release|Any CPU.Build.0 = Release|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870}.Release|Any CPU.Build.0 = Release|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4}.Release|Any CPU.Build.0 = Release|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3}.Release|Any CPU.Build.0 = Release|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3}.Release|Any CPU.Build.0 = Release|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827}.Release|Any CPU.Build.0 = Release|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1}.Release|Any CPU.Build.0 = Release|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E}.Release|Any CPU.Build.0 = Release|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC}.Release|Any CPU.Build.0 = Release|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9}.Release|Any CPU.Build.0 = Release|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E66AA060-36AC-4C48-98B5-41701F5524A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B}.Release|Any CPU.Build.0 = Release|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7E1B169E-AD04-4C98-9971-DC7F450BF610}.Release|Any CPU.Build.0 = Release|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D}.Release|Any CPU.Build.0 = Release|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF}.Release|Any CPU.Build.0 = Release|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE}.Release|Any CPU.Build.0 = Release|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3804493B-31D2-4D70-89EF-EDED205037EC}.Release|Any CPU.Build.0 = Release|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {66B492AC-74E6-4951-9376-47B4B7BA43EB}.Release|Any CPU.Build.0 = Release|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C}.Release|Any CPU.Build.0 = Release|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F}.Release|Any CPU.Build.0 = Release|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A55B5F11-F812-4FF4-900C-B12601B34E52}.Release|Any CPU.Build.0 = Release|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3}.Release|Any CPU.Build.0 = Release|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC}.Release|Any CPU.Build.0 = Release|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0}.Release|Any CPU.Build.0 = Release|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB}.Release|Any CPU.Build.0 = Release|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {335DD135-6475-46D5-A7DB-EA329224D59E}.Release|Any CPU.Build.0 = Release|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {97917447-2353-4D4D-935F-CF9279F1464F}.Release|Any CPU.Build.0 = Release|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CB1E8B1F-E019-498A-8E4E-117012F6368C}.Release|Any CPU.Build.0 = Release|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3}.Release|Any CPU.Build.0 = Release|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Canary|Any CPU.Build.0 = Debug|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A58A93DE-0CBF-495B-8D29-761B1143AD32}.Release|Any CPU.Build.0 = Release|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A7C0B094-539C-4283-AA9A-3959749886B7}.Release|Any CPU.Build.0 = Release|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4}.Release|Any CPU.Build.0 = Release|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Canary|Any CPU.Build.0 = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Nightly|Any CPU.Build.0 = Debug|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A59A87BE-E92A-4717-92DC-A2286EE812EC}.Release|Any CPU.Build.0 = Release|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Canary|Any CPU.Build.0 = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.ActiveCfg = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Nightly|Any CPU.Build.0 = Debug|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8}.Release|Any CPU.Build.0 = Release|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E}.Release|Any CPU.Build.0 = Release|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.ActiveCfg = Debug|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Canary|Any CPU.Build.0 = Debug|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F}.Release|Any CPU.Build.0 = Release|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F}.Release|Any CPU.Build.0 = Release|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27}.Release|Any CPU.Build.0 = Release|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D}.Release|Any CPU.Build.0 = Release|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11}.Release|Any CPU.Build.0 = Release|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {558D7C96-4E2D-4679-8D1A-508E734855D8}.Release|Any CPU.Build.0 = Release|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E}.Release|Any CPU.Build.0 = Release|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AA363B11-8B13-4333-85E1-8623D21E1202}.Release|Any CPU.Build.0 = Release|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B}.Release|Any CPU.Build.0 = Release|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {14542128-1DF0-44DB-9365-1FF39324B317}.Release|Any CPU.Build.0 = Release|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4804A209-411D-43E5-B104-77D6A19131E2}.Release|Any CPU.Build.0 = Release|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03}.Release|Any CPU.Build.0 = Release|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4C448625-CBCB-4147-9288-659906B17C28}.Release|Any CPU.Build.0 = Release|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A}.Release|Any CPU.Build.0 = Release|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657}.Release|Any CPU.Build.0 = Release|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B9D53724-D2C8-4067-8146-15C04533BAE3}.Release|Any CPU.Build.0 = Release|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D}.Release|Any CPU.Build.0 = Release|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77}.Release|Any CPU.Build.0 = Release|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F33622D3-84D1-4C58-9241-45243882739C}.Release|Any CPU.Build.0 = Release|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {62253CD1-5FFB-4B07-82E9-00C978A96478}.Release|Any CPU.Build.0 = Release|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A5FA199B-9AA4-4061-AE07-3036A115AA24}.Release|Any CPU.Build.0 = Release|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2C946C86-12F4-40A3-B964-09C71DA3B845}.Release|Any CPU.Build.0 = Release|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294}.Release|Any CPU.Build.0 = Release|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75}.Release|Any CPU.Build.0 = Release|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.ActiveCfg = Canary|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Canary|Any CPU.Build.0 = Canary|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.ActiveCfg = Nightly|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Nightly|Any CPU.Build.0 = Nightly|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {975DA9CB-501F-442E-8339-AF625C7A5DA4}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {87BE2145-50BE-4A57-9C79-FCE5A64F6065} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
- {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
- {6B01F113-016E-445F-BE5E-80BA7144B928} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
- {404EC0E7-92CB-4E90-80F7-440A4F5D772C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {734B2F67-D055-44B2-818A-FE569C479937} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {15346861-5444-49D7-9686-3835EE271259} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {5E13A5BB-407A-46A5-95A8-9DA57FB21C6C} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {6EFEF411-B16C-4DEA-992F-9CA767EB1265} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {F96630C5-2A89-44D5-BED6-99609A6D716A} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {247BBF4E-22B0-49CC-981B-0420AD7FF4E8} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {071034AA-BFA3-4325-B763-E95A2E05EF4D} = {734B2F67-D055-44B2-818A-FE569C479937}
- {378BEE59-0131-4497-80B8-69B3124325D7} = {734B2F67-D055-44B2-818A-FE569C479937}
- {69F98672-EBB9-4B12-BD04-45AEF3C37FC6} = {15346861-5444-49D7-9686-3835EE271259}
- {0451E883-C718-4679-962F-E2825B1513B2} = {247BBF4E-22B0-49CC-981B-0420AD7FF4E8}
- {E68C45C0-418B-4CFC-97C0-282798B38B37} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {57DA94A4-FA2D-4B83-A84F-FE4A4AAA9870} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {58E921DB-43E2-4743-A6B3-3DF9ED09F5D4} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {9CB33D7B-BF7E-4221-859D-5E61E24772E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {B47A7562-B3B5-4521-91DB-E5CC4CC986E3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {B9A5A472-F747-4C87-B5E9-C5A05DB17827} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {81BCFC34-220F-43A8-A58B-8F9E123C72E1} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {4B57DCA9-277B-4AB1-B297-7EC8311EEE1E} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {C996C6FF-AC18-4C5C-BEB0-E5D48D7CF3FC} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {CA2FB62E-F7EE-45F4-BA59-15CB110D22F9} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {E66AA060-36AC-4C48-98B5-41701F5524A6} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {1ED17EC9-8959-4FE1-BC33-48CEFEA7373B} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {7E1B169E-AD04-4C98-9971-DC7F450BF610} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {4545427A-2FD5-441A-A35E-F09F2AB1B20D} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {116CDDE3-823F-486E-B0AC-2F0FE810A7EF} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {062AB625-3AAB-46ED-891D-E7103D1F7EBE} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {3804493B-31D2-4D70-89EF-EDED205037EC} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {66B492AC-74E6-4951-9376-47B4B7BA43EB} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {8FD6FEBA-B906-4C66-9A8D-E370B961162C} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {6353C3DA-7BCE-4D1E-844D-70A4B8401E7F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {A55B5F11-F812-4FF4-900C-B12601B34E52} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {34F32E4D-79EF-4447-A585-B1A79BF1C3C3} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {18DE1F27-6D6B-44E2-BA62-7A1005EEB8CC} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {EE0904D6-72EF-4107-A286-CB5EEC2A5CE0} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {4696C160-BC97-414A-8D30-B09A2CA76085} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
- {9ACA6117-D269-4425-8500-6BC57560DEB2} = {87BE2145-50BE-4A57-9C79-FCE5A64F6065}
- {2AEC1C12-E8A8-4715-8B8D-9DB405C06FBB} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {335DD135-6475-46D5-A7DB-EA329224D59E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {97917447-2353-4D4D-935F-CF9279F1464F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {241C9BD1-CB7D-4AF0-8FDB-3BCB4C98AF51} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
- {CB1E8B1F-E019-498A-8E4E-117012F6368C} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {9FCE31CF-18F7-4F24-8B73-799B3CB19D57} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {0F113F6F-775D-456D-93F7-B0D3BFEF8FB3} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {5DB6B467-9257-42D3-B81F-380B5D537C04} = {6B01F113-016E-445F-BE5E-80BA7144B928}
- {1AD413AC-FAD3-4F79-A948-4FB66AF10685} = {5DB6B467-9257-42D3-B81F-380B5D537C04}
- {A58A93DE-0CBF-495B-8D29-761B1143AD32} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {A7C0B094-539C-4283-AA9A-3959749886B7} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {BE3A7DFA-3616-4840-B9CC-09E96CC894B4} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {BA86BDC7-D11C-4E74-875C-B284E740B599} = {A7A69BC2-7682-43FB-8E7C-C42FDAA2A215}
- {A59A87BE-E92A-4717-92DC-A2286EE812EC} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {744D6A50-F8DB-4D5F-B571-34B0597E03B8} = {0703388D-5FBE-4345-94B0-5FA9FD043079}
- {5E23D530-6349-4786-AA2D-F1DD9CC1586E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {BE0F9864-6A7F-4712-B5C4-C33267EB1C1F} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {26A8A753-BC4B-4E42-B124-8EA3FA64303F} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {7A73097A-73B3-4EE5-9D57-1B25AF2A1A27} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {253E37F3-A36F-4D96-B22E-1D50C31C0D2D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {C4D0363C-6CA9-4D47-B896-D287C1E6BD11} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {558D7C96-4E2D-4679-8D1A-508E734855D8} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {3DBA5DAE-5FDB-4FEF-BE41-4E394006E66E} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {AA363B11-8B13-4333-85E1-8623D21E1202} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {3F9CBC70-3EFC-4CCD-B986-CEFD8CEB3D1B} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {14542128-1DF0-44DB-9365-1FF39324B317} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {4804A209-411D-43E5-B104-77D6A19131E2} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {FD3FD0D6-EB4A-4E16-BF30-C7B57BF6EA03} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {4C448625-CBCB-4147-9288-659906B17C28} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {AA7EBA51-F1BA-4A45-9344-22F4E173109A} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {65DDD9BE-D9BB-456A-97D4-D0B75607F657} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {B9D53724-D2C8-4067-8146-15C04533BAE3} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {A7DFFED4-3872-491C-B560-C8E4E4733A4D} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {9B5D60B1-765A-4793-92C4-23E8F8A76A77} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {F33622D3-84D1-4C58-9241-45243882739C} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {62253CD1-5FFB-4B07-82E9-00C978A96478} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {A5FA199B-9AA4-4061-AE07-3036A115AA24} = {ADF53878-BE1F-43A3-A890-E11190BE5465}
- {2C946C86-12F4-40A3-B964-09C71DA3B845} = {252CCB85-EC69-4B0F-9ACB-4C37AE3F54B5}
- {5C2389E8-1198-48D2-BDCC-44F74BE6B294} = {726DC0AA-2B0D-4EAC-BB7A-7C49AE13A390}
- {1126FD6E-8A3E-4C93-AABB-06073B27EB75} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
- {975DA9CB-501F-442E-8339-AF625C7A5DA4} = {4985A154-8526-4CB0-A7DC-B39736C4A8AC}
- {5D204922-259D-4140-B115-F01EDF031B5A} = {5D85B551-9AFC-4E96-93C3-D8D81B69971F}
- {362F24FA-1AA0-4821-A539-C5A863D39B8B} = {5D204922-259D-4140-B115-F01EDF031B5A}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {A7CE7732-0982-4703-8EFD-7715D569BAB5}
- EndGlobalSection
-EndGlobal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventArgs.cs
index 2a61e9f49..f4ca2f5dc 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventArgs.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -68,7 +68,7 @@ namespace Krypton.Toolkit.Suite.Extended.AdvancedDataGridView
public class AdvancedDataGridViewSearchToolBarSearchEventArgs : EventArgs
{
public string ValueToSearch { get; private set; }
- public DataGridViewColumn ColumnToSearch { get; private set; }
+ public DataGridViewColumn? ColumnToSearch { get; private set; }
public bool CaseSensitive { get; private set; }
public bool WholeWord { get; private set; }
public bool FromBegin { get; private set; }
@@ -79,7 +79,7 @@ public class AdvancedDataGridViewSearchToolBarSearchEventArgs : EventArgs
/// if set to true [case].
/// if set to true [whole].
/// if set to true [from begin].
- public AdvancedDataGridViewSearchToolBarSearchEventArgs(string value, DataGridViewColumn column, bool @case, bool whole, bool fromBegin)
+ public AdvancedDataGridViewSearchToolBarSearchEventArgs(string value, DataGridViewColumn? column, bool @case, bool whole, bool fromBegin)
{
ValueToSearch = value;
ColumnToSearch = column;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventHandler.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventHandler.cs
index 936868749..90699bfda 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventHandler.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/AdvancedDataGridViewSearchToolBarSearchEventHandler.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventArgs.cs
index 20346eb66..97f920caf 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventArgs.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventHandler.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventHandler.cs
index a3042772d..21e59987b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventHandler.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/ColumnHeaderCellEventHandler.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridView.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridView.cs
index 8c8b55938..ae8a8ce33 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridView.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridView.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -64,6 +64,8 @@
#endregion
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
+using DebugUtilities = Krypton.Toolkit.Suite.Extended.Debug.Tools.DebugUtilities;
+
namespace Krypton.Toolkit.Suite.Extended.AdvancedDataGridView
{
[DesignerCategory("code")]
@@ -71,14 +73,14 @@ public class KryptonAdvancedDataGridView : KryptonDataGridView
{
#region Instance Fields
- private List _sortOrderList = new List();
- private List _filterOrderList = new List();
- private List _filteredColumns = new List();
+ private readonly List _sortOrderList = new List();
+ private readonly List _filterOrderList = new List();
+ private readonly List _filteredColumns = new List();
private List _menuStripToDispose = new List();
- private bool _loadedFilter = false;
- private string? _sortString = null;
- private string? _filterString = null;
+ private bool _loadedFilter;
+ private string? _sortString;
+ private string? _filterString;
private bool _sortStringChangedInvokeBeforeDatasourceUpdate = true;
private bool _filterStringChangedInvokeBeforeDatasourceUpdate = true;
@@ -125,6 +127,7 @@ public FilterEventArgs()
#region Identity
+ /// Initializes a new instance of the class.
public KryptonAdvancedDataGridView()
{
//System.Windows.Forms.RightToLeft = System.Windows.Forms.RightToLeft.No;
@@ -237,10 +240,10 @@ public static IDictionary LoadTranslationsFromFile(string filena
Dictionary translations =
new JavaScriptSerializer().Deserialize>(jsontext);
#else
- Dictionary translations =
+ Dictionary? translations =
JsonSerializer.Deserialize>(jsontext);
#endif
- foreach (KeyValuePair translation in translations)
+ foreach (KeyValuePair translation in translations!)
{
if (!ret.ContainsKey(translation.Key) && Translations.ContainsKey(translation.Key))
{
@@ -250,7 +253,7 @@ public static IDictionary LoadTranslationsFromFile(string filena
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -289,14 +292,8 @@ public void SetDoubleBuffered()
///
public bool SortStringChangedInvokeBeforeDatasourceUpdate
{
- get
- {
- return _sortStringChangedInvokeBeforeDatasourceUpdate;
- }
- set
- {
- _sortStringChangedInvokeBeforeDatasourceUpdate = value;
- }
+ get => _sortStringChangedInvokeBeforeDatasourceUpdate;
+ set => _sortStringChangedInvokeBeforeDatasourceUpdate = value;
}
///
@@ -304,14 +301,8 @@ public bool SortStringChangedInvokeBeforeDatasourceUpdate
///
public bool FilterStringChangedInvokeBeforeDatasourceUpdate
{
- get
- {
- return _filterStringChangedInvokeBeforeDatasourceUpdate;
- }
- set
- {
- _filterStringChangedInvokeBeforeDatasourceUpdate = value;
- }
+ get => _filterStringChangedInvokeBeforeDatasourceUpdate;
+ set => _filterStringChangedInvokeBeforeDatasourceUpdate = value;
}
///
@@ -325,7 +316,7 @@ public void DisableFilterAndSort(DataGridViewColumn column)
KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
- if (cell.FilterAndSortEnabled == true && (cell.SortString.Length > 0 || cell.FilterString.Length > 0))
+ if (cell.FilterAndSortEnabled && (cell.SortString!.Length > 0 || cell.FilterString!.Length > 0))
{
CleanFilter(true);
cell.FilterAndSortEnabled = false;
@@ -353,7 +344,7 @@ public void EnableFilterAndSort(DataGridViewColumn column)
KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
- if (!cell.FilterAndSortEnabled && (cell.FilterString.Length > 0 || cell.SortString.Length > 0))
+ if (!cell.FilterAndSortEnabled && (cell.FilterString!.Length > 0 || cell.SortString!.Length > 0))
{
CleanFilter(true);
}
@@ -369,9 +360,9 @@ public void EnableFilterAndSort(DataGridViewColumn column)
{
column.SortMode = DataGridViewColumnSortMode.Programmatic;
cell = new KryptonColumnHeaderCell(column.HeaderCell, true);
- cell.SortChanged += new ColumnHeaderCellEventHandler(Cell_SortChanged);
- cell.FilterChanged += new ColumnHeaderCellEventHandler(Cell_FilterChanged);
- cell.FilterPopup += new ColumnHeaderCellEventHandler(Cell_FilterPopup);
+ cell.SortChanged += Cell_SortChanged;
+ cell.FilterChanged += Cell_FilterChanged;
+ cell.FilterPopup += Cell_FilterPopup;
column.MinimumWidth = cell.MinimumSize.Width;
if (ColumnHeadersHeight < cell.MinimumSize.Height)
{
@@ -691,14 +682,8 @@ public void SetMenuStripFilterNotInLogic(bool enabled)
///
public bool FilterAndSortEnabled
{
- get
- {
- return _filterAndSortEnabled;
- }
- set
- {
- _filterAndSortEnabled = value;
- }
+ get => _filterAndSortEnabled;
+ set => _filterAndSortEnabled = value;
}
private bool _filterAndSortEnabled = true;
@@ -712,10 +697,7 @@ public bool FilterAndSortEnabled
///
public string? SortString
{
- get
- {
- return (!String.IsNullOrEmpty(_sortString) ? _sortString : "");
- }
+ get => !string.IsNullOrEmpty(_sortString) ? _sortString : string.Empty;
private set
{
string? old = value;
@@ -805,7 +787,7 @@ public void SortDescending(DataGridViewColumn column)
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.SortDESC();
@@ -822,7 +804,7 @@ public void CleanSort(DataGridViewColumn column, bool fireEvent)
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null && FilterableCells.Contains(cell))
{
cell.CleanSort();
@@ -888,10 +870,7 @@ public void CleanSort()
///
public string? FilterString
{
- get
- {
- return (!String.IsNullOrEmpty(_filterString) ? _filterString : "");
- }
+ get => !String.IsNullOrEmpty(_filterString) ? _filterString : "";
private set
{
string? old = value;
@@ -961,7 +940,7 @@ public void SetFilterDateAndTimeEnabled(DataGridViewColumn column, bool enabled)
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.IsFilterDateAndTimeEnabled = enabled;
@@ -978,7 +957,7 @@ public void SetFilterEnabled(DataGridViewColumn column, bool enabled)
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.SetFilterEnabled(enabled);
@@ -995,7 +974,7 @@ public void SetChecklistTextFilterRemoveNodesOnSearchMode(DataGridViewColumn col
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.SetChecklistTextFilterRemoveNodesOnSearchMode(enabled);
@@ -1012,7 +991,7 @@ public void CleanFilter(DataGridViewColumn column, bool fireEvent)
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.CleanFilter();
@@ -1077,7 +1056,7 @@ public void SetTextFilterRemoveNodesOnSearch(DataGridViewColumn column, bool ena
{
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.DoesTextFilterRemoveNodesOnSearch = enabled;
@@ -1088,12 +1067,12 @@ public void SetTextFilterRemoveNodesOnSearch(DataGridViewColumn column, bool ena
///
/// Get the text filter search nodes behaviour
///
- public Nullable GetTextFilterRemoveNodesOnSearch(DataGridViewColumn column)
+ public bool? GetTextFilterRemoveNodesOnSearch(DataGridViewColumn column)
{
- Nullable ret = null;
+ bool? ret = null;
if (Columns.Contains(column))
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
ret = cell.DoesTextFilterRemoveNodesOnSearch;
@@ -1117,9 +1096,9 @@ public Nullable GetTextFilterRemoveNodesOnSearch(DataGridViewColumn column
///
///
///
- public DataGridViewCell FindCell(string valueToFind, string columnName, int rowIndex, int columnIndex, bool isWholeWordSearch, bool isCaseSensitive)
+ public DataGridViewCell? FindCell(string valueToFind, string columnName, int rowIndex, int columnIndex, bool isWholeWordSearch, bool isCaseSensitive)
{
- if (valueToFind != null && RowCount > 0 && ColumnCount > 0 && (columnName == null || (Columns.Contains(columnName) && Columns[columnName].Visible)))
+ if (valueToFind != null && RowCount > 0 && ColumnCount > 0 && (columnName == null || (Columns.Contains(columnName) && Columns[columnName]!.Visible)))
{
rowIndex = Math.Max(0, rowIndex);
@@ -1130,7 +1109,7 @@ public DataGridViewCell FindCell(string valueToFind, string columnName, int rowI
if (columnName != null)
{
- int c = Columns[columnName].Index;
+ int c = Columns[columnName]!.Index;
if (columnIndex > c)
{
rowIndex++;
@@ -1138,13 +1117,13 @@ public DataGridViewCell FindCell(string valueToFind, string columnName, int rowI
for (int r = rowIndex; r < RowCount; r++)
{
- string value = Rows[r].Cells[c].FormattedValue.ToString();
+ string? value = Rows[r].Cells[c].FormattedValue!.ToString();
if (!isCaseSensitive)
{
- value = value.ToLower();
+ value = value?.ToLower();
}
- if ((!isWholeWordSearch && value.Contains(valueToFind)) || value.Equals(valueToFind))
+ if ((!isWholeWordSearch && value!.Contains(valueToFind)) || value!.Equals(valueToFind))
{
return Rows[r].Cells[c];
}
@@ -1163,13 +1142,13 @@ public DataGridViewCell FindCell(string valueToFind, string columnName, int rowI
continue;
}
- string value = Rows[r].Cells[c].FormattedValue.ToString();
+ string? value = Rows[r].Cells[c].FormattedValue!.ToString();
if (!isCaseSensitive)
{
- value = value.ToLower();
+ value = value?.ToLower();
}
- if ((!isWholeWordSearch && value.Contains(valueToFind)) || value.Equals(valueToFind))
+ if ((!isWholeWordSearch && value!.Contains(valueToFind)) || value!.Equals(valueToFind))
{
return Rows[r].Cells[c];
}
@@ -1212,15 +1191,10 @@ public void ShowMenuStrip(DataGridViewColumn column)
///
/// Get all columns
///
- private IEnumerable FilterableCells
- {
- get
- {
- return from DataGridViewColumn c in Columns
- where c.HeaderCell != null && c.HeaderCell is KryptonColumnHeaderCell
- select (c.HeaderCell as KryptonColumnHeaderCell);
- }
- }
+ private IEnumerable FilterableCells =>
+ from DataGridViewColumn c in Columns
+ where c.HeaderCell != null && c.HeaderCell is KryptonColumnHeaderCell
+ select c.HeaderCell as KryptonColumnHeaderCell;
#endregion
@@ -1235,9 +1209,9 @@ protected override void OnColumnAdded(DataGridViewColumnEventArgs e)
{
e.Column.SortMode = DataGridViewColumnSortMode.Programmatic;
KryptonColumnHeaderCell cell = new KryptonColumnHeaderCell(e.Column.HeaderCell, FilterAndSortEnabled);
- cell.SortChanged += new ColumnHeaderCellEventHandler(Cell_SortChanged);
- cell.FilterChanged += new ColumnHeaderCellEventHandler(Cell_FilterChanged);
- cell.FilterPopup += new ColumnHeaderCellEventHandler(Cell_FilterPopup);
+ cell.SortChanged += Cell_SortChanged;
+ cell.FilterChanged += Cell_FilterChanged;
+ cell.FilterPopup += Cell_FilterPopup;
e.Column.MinimumWidth = cell.MinimumSize.Width;
if (ColumnHeadersHeight < cell.MinimumSize.Height)
{
@@ -1259,7 +1233,7 @@ protected override void OnColumnRemoved(DataGridViewColumnEventArgs e)
_filterOrderList.Remove(e.Column.Name);
_sortOrderList.Remove(e.Column.Name);
- KryptonColumnHeaderCell cell = e.Column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = e.Column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
cell.SortChanged -= Cell_SortChanged;
@@ -1340,18 +1314,18 @@ protected override void OnCellValueChanged(DataGridViewCellEventArgs e)
/// Build the complete Filter string
///
///
- private string? BuildFilterString()
+ private string BuildFilterString()
{
StringBuilder sb = new StringBuilder("");
string appx = "";
foreach (string filterOrder in _filterOrderList)
{
- DataGridViewColumn column = Columns[filterOrder];
+ DataGridViewColumn? column = Columns[filterOrder];
if (column != null)
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
if (cell.FilterAndSortEnabled && cell.ActiveFilterType != MenuStrip.FilterType.None)
@@ -1436,18 +1410,18 @@ private void Cell_FilterChanged(object sender, ColumnHeaderCellEventArgs e)
/// Build the complete Sort string
///
///
- private string? BuildSortString()
+ private string BuildSortString()
{
StringBuilder sb = new StringBuilder("");
string appx = "";
foreach (string sortOrder in _sortOrderList)
{
- DataGridViewColumn column = Columns[sortOrder];
+ DataGridViewColumn? column = Columns[sortOrder];
if (column != null)
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
if (cell.FilterAndSortEnabled && cell.ActiveSortType != MenuStrip.SortType.None)
@@ -1494,7 +1468,7 @@ protected override void OnHandleDestroyed(EventArgs e)
{
foreach (DataGridViewColumn column in Columns)
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
if (cell != null)
{
@@ -1518,9 +1492,9 @@ protected override void OnDataSourceChanged(EventArgs e)
{
foreach (DataGridViewColumn column in Columns)
{
- KryptonColumnHeaderCell cell = column.HeaderCell as KryptonColumnHeaderCell;
+ KryptonColumnHeaderCell? cell = column.HeaderCell as KryptonColumnHeaderCell;
- _menuStripToDispose = _menuStripToDispose.Where(f => f != cell.MenuStrip).ToList();
+ _menuStripToDispose = _menuStripToDispose.Where(f => f != cell!.MenuStrip).ToList();
}
foreach (MenuStrip menuStrip in _menuStripToDispose)
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridViewSearchToolBar.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridViewSearchToolBar.cs
index 60daaf169..b795f36d8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridViewSearchToolBar.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonAdvancedDataGridViewSearchToolBar.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -64,6 +64,7 @@
#endregion
//#pragma warning disable
+// ReSharper disable InconsistentNaming
namespace Krypton.Toolkit.Suite.Extended.AdvancedDataGridView
{
[DesignerCategory("code")]
@@ -74,7 +75,7 @@ public partial class KryptonAdvancedDataGridViewSearchToolBar : ToolStrip
///
/// Required designer variable.
///
- private IContainer components = null;
+ private IContainer? components = null;
///
/// Clean up any resources being used.
@@ -83,7 +84,7 @@ public partial class KryptonAdvancedDataGridViewSearchToolBar : ToolStrip
protected override void Dispose(bool disposing)
{
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
- if (disposing && (components != null))
+ if (disposing && components != null)
{
components.Dispose();
}
@@ -239,16 +240,16 @@ private void InitializeComponent()
#region public events
- public event AdvancedDataGridViewSearchToolBarSearchEventHandler Search;
+ public event AdvancedDataGridViewSearchToolBarSearchEventHandler? Search;
#endregion
#region class properties
- private DataGridViewColumnCollection _columnsList = null;
+ private DataGridViewColumnCollection? _columnsList;
- private const bool ButtonCloseEnabled = false;
+ private const bool BUTTON_CLOSE_ENABLED = false;
#endregion
@@ -304,12 +305,12 @@ public KryptonAdvancedDataGridViewSearchToolBar()
RefreshComponentTranslations();
//set default values
- if (!ButtonCloseEnabled)
+ if (!BUTTON_CLOSE_ENABLED)
{
Items.RemoveAt(0);
}
- comboBox_columns.SelectedIndex = 0;
+ comboBox_columns!.SelectedIndex = 0;
// Use Krypton
RenderMode = ToolStripRenderMode.ManagerRenderMode;
@@ -324,7 +325,7 @@ public KryptonAdvancedDataGridViewSearchToolBar()
/// Set translation dictionary
///
///
- public static void SetTranslations(IDictionary translations)
+ public static void SetTranslations(IDictionary? translations)
{
//set localization strings
if (translations != null)
@@ -362,13 +363,15 @@ public static IDictionary LoadTranslationsFromFile(string filena
//deserialize the file
try
{
- string jsontext = File.ReadAllText(filename);
+ string jsonText = File.ReadAllText(filename);
#if NETFRAMEWORK
- Dictionary translations = new JavaScriptSerializer().Deserialize>(jsontext);
+ Dictionary translations =
+ new JavaScriptSerializer().Deserialize>(jsonText);
#else
- Dictionary translations = JsonSerializer.Deserialize>(jsontext);
+ Dictionary? translations =
+ JsonSerializer.Deserialize>(jsonText);
#endif
- foreach (KeyValuePair translation in translations)
+ foreach (KeyValuePair translation in translations!)
{
if (!ret.ContainsKey(translation.Key) && Translations.ContainsKey(translation.Key))
{
@@ -376,7 +379,10 @@ public static IDictionary LoadTranslationsFromFile(string filena
}
}
}
- catch { }
+ catch
+ {
+ // Nothing to do
+ }
}
//add default translations if not in files
@@ -434,14 +440,14 @@ void button_search_Click(object sender, EventArgs e)
{
if (textBox_search.TextLength > 0 && textBox_search.Text != textBox_search.ToolTipText && Search != null)
{
- DataGridViewColumn c = null;
+ DataGridViewColumn? c = null;
if (comboBox_columns.SelectedIndex > 0 && _columnsList != null && _columnsList.GetColumnCount(DataGridViewElementStates.Visible) > 0)
{
- DataGridViewColumn[] cols = _columnsList.Cast().Where(col => col.Visible).ToArray();
+ DataGridViewColumn?[] cols = _columnsList.Cast().Where(col => col.Visible).ToArray();
if (cols.Length == comboBox_columns.Items.Count - 1)
{
- if (cols[comboBox_columns.SelectedIndex - 1].HeaderText == comboBox_columns.SelectedItem.ToString())
+ if (cols[comboBox_columns.SelectedIndex - 1]!.HeaderText == comboBox_columns.SelectedItem.ToString())
{
c = cols[comboBox_columns.SelectedIndex - 1];
}
@@ -702,7 +708,7 @@ private void GetResizeBoxSize(int width, ref int w1, ref int w2)
protected override void OnPaint(PaintEventArgs e)
{
//check if translations are changed and update components
- if (!((_translationsRefreshComponentTranslationsCheck == Translations) || (_translationsRefreshComponentTranslationsCheck.Count == Translations.Count && !_translationsRefreshComponentTranslationsCheck.Except(Translations).Any())))
+ if (!(_translationsRefreshComponentTranslationsCheck == Translations || (_translationsRefreshComponentTranslationsCheck.Count == Translations.Count && !_translationsRefreshComponentTranslationsCheck.Except(Translations).Any())))
{
_translationsRefreshComponentTranslationsCheck = Translations;
RefreshComponentTranslations();
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonColumnHeaderCell.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonColumnHeaderCell.cs
index 95bbcb5d9..11dc2f9b1 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonColumnHeaderCell.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/KryptonColumnHeaderCell.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -64,7 +64,6 @@
#endregion
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
-#pragma warning disable CS8600, CS8622, CS8602
namespace Krypton.Toolkit.Suite.Extended.AdvancedDataGridView
{
internal class KryptonColumnHeaderCell : DataGridViewColumnHeaderCell
@@ -168,10 +167,7 @@ public KryptonColumnHeaderCell(DataGridViewColumnHeaderCell oldCell, bool filter
///
public bool FilterAndSortEnabled
{
- get
- {
- return _filterEnabled;
- }
+ get => _filterEnabled;
set
{
if (!value)
@@ -184,12 +180,12 @@ public bool FilterAndSortEnabled
{
_filterEnabled = value;
bool refreshed = false;
- if (MenuStrip.FilterString.Length > 0)
+ if (MenuStrip.FilterString!.Length > 0)
{
MenuStrip_FilterChanged(this, new EventArgs());
refreshed = true;
}
- if (MenuStrip.SortString.Length > 0)
+ if (MenuStrip.SortString!.Length > 0)
{
MenuStrip_SortChanged(this, new EventArgs());
refreshed = true;
@@ -345,28 +341,17 @@ public string? FilterString
///
/// Get the Minimum size
///
- public Size MinimumSize
- {
- get
- {
- return new Size(_filterButtonImageSize.Width + _filterButtonMargin.Left + _filterButtonMargin.Right,
- _filterButtonImageSize.Height + _filterButtonMargin.Bottom + _filterButtonMargin.Top);
- }
- }
+ public Size MinimumSize =>
+ new(_filterButtonImageSize.Width + _filterButtonMargin.Left + _filterButtonMargin.Right,
+ _filterButtonImageSize.Height + _filterButtonMargin.Bottom + _filterButtonMargin.Top);
///
/// Get or Set the Sort enabled status
///
public bool IsSortEnabled
{
- get
- {
- return MenuStrip.IsSortEnabled;
- }
- set
- {
- MenuStrip.IsSortEnabled = value;
- }
+ get => MenuStrip.IsSortEnabled;
+ set => MenuStrip.IsSortEnabled = value;
}
///
@@ -374,14 +359,8 @@ public bool IsSortEnabled
///
public bool IsFilterEnabled
{
- get
- {
- return MenuStrip.IsFilterEnabled;
- }
- set
- {
- MenuStrip.IsFilterEnabled = value;
- }
+ get => MenuStrip.IsFilterEnabled;
+ set => MenuStrip.IsFilterEnabled = value;
}
///
@@ -389,14 +368,8 @@ public bool IsFilterEnabled
///
public bool IsFilterChecklistEnabled
{
- get
- {
- return MenuStrip.IsFilterChecklistEnabled;
- }
- set
- {
- MenuStrip.IsFilterChecklistEnabled = value;
- }
+ get => MenuStrip.IsFilterChecklistEnabled;
+ set => MenuStrip.IsFilterChecklistEnabled = value;
}
///
@@ -404,14 +377,8 @@ public bool IsFilterChecklistEnabled
///
public bool IsFilterDateAndTimeEnabled
{
- get
- {
- return MenuStrip.IsFilterDateAndTimeEnabled;
- }
- set
- {
- MenuStrip.IsFilterDateAndTimeEnabled = value;
- }
+ get => MenuStrip.IsFilterDateAndTimeEnabled;
+ set => MenuStrip.IsFilterDateAndTimeEnabled = value;
}
///
@@ -419,14 +386,8 @@ public bool IsFilterDateAndTimeEnabled
///
public bool IsMenuStripFilterNOTINLogicEnabled
{
- get
- {
- return MenuStrip.IsFilterNotinLogicEnabled;
- }
- set
- {
- MenuStrip.IsFilterNotinLogicEnabled = value;
- }
+ get => MenuStrip.IsFilterNotinLogicEnabled;
+ set => MenuStrip.IsFilterNotinLogicEnabled = value;
}
///
@@ -434,14 +395,8 @@ public bool IsMenuStripFilterNOTINLogicEnabled
///
public bool DoesTextFilterRemoveNodesOnSearch
{
- get
- {
- return MenuStrip.DoesTextFilterRemoveNodesOnSearch;
- }
- set
- {
- MenuStrip.DoesTextFilterRemoveNodesOnSearch = value;
- }
+ get => MenuStrip.DoesTextFilterRemoveNodesOnSearch;
+ set => MenuStrip.DoesTextFilterRemoveNodesOnSearch = value;
}
///
@@ -449,14 +404,8 @@ public bool DoesTextFilterRemoveNodesOnSearch
///
public int TextFilterTextChangedDelayNodes
{
- get
- {
- return MenuStrip.TextFilterTextChangedDelayNodes;
- }
- set
- {
- MenuStrip.TextFilterTextChangedDelayNodes = value;
- }
+ get => MenuStrip.TextFilterTextChangedDelayNodes;
+ set => MenuStrip.TextFilterTextChangedDelayNodes = value;
}
///
@@ -743,7 +692,7 @@ protected override void Paint(
///
private Rectangle GetFilterBounds(bool withOffset = true)
{
- Rectangle cell = DataGridView.GetCellDisplayRectangle(ColumnIndex, -1, false);
+ Rectangle cell = DataGridView!.GetCellDisplayRectangle(ColumnIndex, -1, false);
Point p = new Point(
(withOffset ? cell.Right : cell.Width) - _filterButtonImageSize.Width - _filterButtonMargin.Right,
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/MenuStrip.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/MenuStrip.cs
index 8bb305e8a..06baa7bc5 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/MenuStrip.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/MenuStrip.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -65,9 +65,6 @@
using Timer = System.Windows.Forms.Timer;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
-#pragma warning disable CS8602
-
-#pragma warning disable CS8625, CS8622
namespace Krypton.Toolkit.Suite.Extended.AdvancedDataGridView
{
[DesignerCategory("code")]
@@ -86,7 +83,7 @@ internal partial class MenuStrip : ContextMenuStrip
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
- if (disposing && (components != null))
+ if (disposing && components != null)
{
components.Dispose();
}
@@ -482,10 +479,10 @@ public enum SortType : byte
private FilterType _activeFilterType = FilterType.None;
private SortType _activeSortType = SortType.None;
- private TreeNodeItemSelector[] _loadedNodes = new TreeNodeItemSelector[] { };
- private TreeNodeItemSelector[] _startingNodes = new TreeNodeItemSelector[] { };
- private TreeNodeItemSelector[] _removedNodes = new TreeNodeItemSelector[] { };
- private TreeNodeItemSelector[] _removedsessionNodes = new TreeNodeItemSelector[] { };
+ private TreeNodeItemSelector?[] _loadedNodes = new TreeNodeItemSelector?[] { };
+ private TreeNodeItemSelector?[] _startingNodes = new TreeNodeItemSelector[] { };
+ private TreeNodeItemSelector?[] _removedNodes = new TreeNodeItemSelector[] { };
+ private TreeNodeItemSelector?[] _removedsessionNodes = new TreeNodeItemSelector[] { };
private string? _sortString = null;
private string? _filterString = null;
private static Point _resizeStartPoint = new Point(1, 1);
@@ -717,37 +714,19 @@ private static ImageList GetCheckListStateImages()
///
public int MaxChecklistNodes
{
- get
- {
- return _maxChecklistNodes;
- }
- set
- {
- _maxChecklistNodes = value;
- }
+ get => _maxChecklistNodes;
+ set => _maxChecklistNodes = value;
}
///
/// Get the current MenuStripSortType type
///
- public SortType ActiveSortType
- {
- get
- {
- return _activeSortType;
- }
- }
+ public SortType ActiveSortType => _activeSortType;
///
/// Get the current MenuStripFilterType type
///
- public FilterType ActiveFilterType
- {
- get
- {
- return _activeFilterType;
- }
- }
+ public FilterType ActiveFilterType => _activeFilterType;
///
/// Get the DataType for the MenuStrip Filter
@@ -789,14 +768,8 @@ public FilterType ActiveFilterType
///
public bool DoesTextFilterRemoveNodesOnSearch
{
- get
- {
- return _checkTextFilterRemoveNodesOnSearch;
- }
- set
- {
- _checkTextFilterRemoveNodesOnSearch = value;
- }
+ get => _checkTextFilterRemoveNodesOnSearch;
+ set => _checkTextFilterRemoveNodesOnSearch = value;
}
///
@@ -804,14 +777,8 @@ public bool DoesTextFilterRemoveNodesOnSearch
///
public int TextFilterTextChangedDelayNodes
{
- get
- {
- return _textFilterTextChangedDelayNodes;
- }
- set
- {
- _textFilterTextChangedDelayNodes = value;
- }
+ get => _textFilterTextChangedDelayNodes;
+ set => _textFilterTextChangedDelayNodes = value;
}
///
@@ -819,14 +786,8 @@ public int TextFilterTextChangedDelayNodes
///
public int TextFilterTextChangedDelayMs
{
- get
- {
- return _textFilterTextChangedDelayMs;
- }
- set
- {
- _textFilterTextChangedDelayMs = value;
- }
+ get => _textFilterTextChangedDelayMs;
+ set => _textFilterTextChangedDelayMs = value;
}
#endregion
@@ -856,7 +817,7 @@ public void SetFilterEnabled(bool enabled)
IsFilterEnabled = enabled;
_cancelFilterMenuItem.Enabled = enabled;
- _customFilterLastFiltersListMenuItem.Enabled = (enabled && DataType != typeof(bool));
+ _customFilterLastFiltersListMenuItem.Enabled = enabled && DataType != typeof(bool);
_buttonFilter.Enabled = enabled;
_buttonUndofilter.Enabled = enabled;
_checkList.Enabled = enabled;
@@ -1065,13 +1026,10 @@ public void SortDesc()
///
public string? SortString
{
- get
- {
- return (!String.IsNullOrEmpty(_sortString) ? _sortString : "");
- }
+ get => !String.IsNullOrEmpty(_sortString) ? _sortString : "";
private set
{
- _cancelSortMenuItem.Enabled = (value != null && value.Length > 0);
+ _cancelSortMenuItem.Enabled = value != null && value.Length > 0;
_sortString = value;
}
}
@@ -1097,13 +1055,10 @@ public void CleanSort()
///
public string? FilterString
{
- get
- {
- return (!String.IsNullOrEmpty(_filterString) ? _filterString : "");
- }
+ get => !String.IsNullOrEmpty(_filterString) ? _filterString : "";
private set
{
- _cancelFilterMenuItem.Enabled = (value != null && value.Length > 0);
+ _cancelFilterMenuItem.Enabled = value != null && value.Length > 0;
_filterString = value;
}
}
@@ -1173,7 +1128,7 @@ private void ChecklistReloadNodes()
_checkList.BeginUpdate();
_checkList.Nodes.Clear();
int nodecount = 0;
- foreach (TreeNodeItemSelector node in _loadedNodes)
+ foreach (TreeNodeItemSelector? node in _loadedNodes)
{
if (node.NodeType == TreeNodeItemSelector.CustomNodeType.Default)
{
@@ -1250,17 +1205,17 @@ private void SetCheckListFilter()
if (_loadedNodes.Length > 2 || selectAllNode == null)
{
string filter = BuildNodesFilterString(
- (IsFilterNotinLogicEnabled && (DataType != typeof(DateTime) && DataType != typeof(TimeSpan) && DataType != typeof(bool)) ?
+ IsFilterNotinLogicEnabled && DataType != typeof(DateTime) && DataType != typeof(TimeSpan) && DataType != typeof(bool) ?
_loadedNodes.AsParallel().Cast().Where(
n => n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectAll
- && n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectEmpty
- && n.CheckState == CheckState.Unchecked
+ && n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectEmpty
+ && n.CheckState == CheckState.Unchecked
) :
_loadedNodes.AsParallel().Cast().Where(
n => n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectAll
- && n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectEmpty
- && n.CheckState != CheckState.Unchecked
- ))
+ && n.NodeType != TreeNodeItemSelector.CustomNodeType.SelectEmpty
+ && n.CheckState != CheckState.Unchecked
+ )
);
if (filter.Length > 0)
@@ -1329,11 +1284,11 @@ private string BuildNodesFilterString(IEnumerable nodes)
{
foreach (TreeNodeItemSelector n in nodes)
{
- if (n.Checked && (n.Nodes.AsParallel().Cast().Where(sn => sn.CheckState != CheckState.Unchecked).Count() == 0))
+ if (n.Checked && n.Nodes.AsParallel().Cast().Where(sn => sn.CheckState != CheckState.Unchecked).Count() == 0)
{
DateTime dt = (DateTime)n.Value;
sb.Append(
- $"'{Convert.ToString((IsFilterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'{appx}");
+ $"'{Convert.ToString(IsFilterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'{appx}");
}
else if (n.CheckState != CheckState.Unchecked && n.Nodes.Count > 0)
{
@@ -1349,7 +1304,7 @@ private string BuildNodesFilterString(IEnumerable nodes)
{
foreach (TreeNodeItemSelector n in nodes)
{
- if (n.Checked && (n.Nodes.AsParallel().Cast().Where(sn => sn.CheckState != CheckState.Unchecked).Count() == 0))
+ if (n.Checked && n.Nodes.AsParallel().Cast().Where(sn => sn.CheckState != CheckState.Unchecked).Count() == 0)
{
TimeSpan ts = (TimeSpan)n.Value;
sb.Append(
@@ -1628,10 +1583,10 @@ private void CheckFilterButtonEnabled()
///
///
///
- private bool HasNodesChecked(TreeNodeItemSelector[] nodes)
+ private bool HasNodesChecked(TreeNodeItemSelector?[] nodes)
{
bool state = false;
- if (!String.IsNullOrEmpty(_checkTextFilter.Text))
+ if (!string.IsNullOrEmpty(_checkTextFilter.Text))
{
state = nodes.Any(n => n.CheckState == CheckState.Checked && n.Text.ToLower().Contains(_checkTextFilter.Text.ToLower()));
}
@@ -1647,7 +1602,7 @@ private bool HasNodesChecked(TreeNodeItemSelector[] nodes)
foreach (TreeNodeItemSelector node in nodes)
{
- foreach (TreeNodeItemSelector nodesel in node.Nodes)
+ foreach (TreeNodeItemSelector nodesel in node!.Nodes)
{
state = HasNodesChecked(new TreeNodeItemSelector[] { nodesel });
if (state)
@@ -1668,7 +1623,7 @@ private bool HasNodesChecked(TreeNodeItemSelector[] nodes)
/// Check
///
///
- private void NodeCheckChange(TreeNodeItemSelector node)
+ private void NodeCheckChange(TreeNodeItemSelector? node)
{
if (node.CheckState == CheckState.Checked)
{
@@ -1695,7 +1650,7 @@ private void NodeCheckChange(TreeNodeItemSelector node)
//refresh nodes
CheckState state = UpdateNodesCheckState(ChecklistNodes());
- GetSelectAllNode().CheckState = state;
+ GetSelectAllNode()!.CheckState = state;
}
}
@@ -1704,11 +1659,11 @@ private void NodeCheckChange(TreeNodeItemSelector node)
///
///
///
- private void SetNodesCheckState(TreeNodeItemSelector[] nodes, bool isChecked)
+ private void SetNodesCheckState(TreeNodeItemSelector?[] nodes, bool isChecked)
{
foreach (TreeNodeItemSelector node in nodes)
{
- node.Checked = isChecked;
+ node!.Checked = isChecked;
if (node.Nodes != null && node.Nodes.Count > 0)
{
foreach (TreeNodeItemSelector subnode in node.Nodes)
@@ -1757,14 +1712,7 @@ private CheckState UpdateNodesCheckState(TreeNodeCollection nodes)
}
}
- if (isAllNodesSomeCheckState)
- {
- return result;
- }
- else
- {
- return CheckState.Indeterminate;
- }
+ return isAllNodesSomeCheckState ? result : CheckState.Indeterminate;
}
///
@@ -1826,13 +1774,13 @@ private CheckState UpdateNodesCheckState(TreeNodeCollection nodes)
///
/// Duplicate Nodes
///
- private static TreeNodeItemSelector[] DuplicateNodes(TreeNodeItemSelector[] nodes)
+ private static TreeNodeItemSelector?[] DuplicateNodes(TreeNodeItemSelector?[] nodes)
{
- TreeNodeItemSelector[] ret = new TreeNodeItemSelector[nodes.Length];
+ TreeNodeItemSelector?[] ret = new TreeNodeItemSelector[nodes.Length];
int i = 0;
- foreach (TreeNodeItemSelector n in nodes)
+ foreach (TreeNodeItemSelector? n in nodes)
{
- ret[i] = n.Clone();
+ ret[i] = n?.Clone();
i++;
}
return ret;
@@ -1883,10 +1831,10 @@ private void CheckList_KeyDown(object sender, KeyEventArgs e)
///
private void CheckList_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
- TreeNodeItemSelector n = e.Node as TreeNodeItemSelector;
+ TreeNodeItemSelector? n = e.Node as TreeNodeItemSelector;
//set the new node check status
SetNodesCheckState(_loadedNodes, false);
- n.CheckState = CheckState.Unchecked;
+ n!.CheckState = CheckState.Unchecked;
NodeCheckChange(n);
//set filter button enabled
CheckFilterButtonEnabled();
@@ -1950,7 +1898,7 @@ private void UnCheckCustomFilters()
{
for (int i = 2; i < _customFilterLastFiltersListMenuItem.DropDownItems.Count; i++)
{
- (_customFilterLastFiltersListMenuItem.DropDownItems[i] as ToolStripMenuItem).Checked = false;
+ ((_customFilterLastFiltersListMenuItem.DropDownItems[i] as ToolStripMenuItem)!).Checked = false;
}
}
@@ -1984,14 +1932,14 @@ private void SetCustomFilter(int filtersMenuItemIndex)
//uncheck other preset
for (int i = 3; i < _customFilterLastFiltersListMenuItem.DropDownItems.Count; i++)
{
- (_customFilterLastFiltersListMenuItem.DropDownItems[i] as ToolStripMenuItem).Checked = false;
+ ((_customFilterLastFiltersListMenuItem.DropDownItems[i] as ToolStripMenuItem)!).Checked = false;
}
- (_customFilterLastFiltersListMenuItem.DropDownItems[2] as ToolStripMenuItem).Checked = true;
+ ((_customFilterLastFiltersListMenuItem.DropDownItems[2] as ToolStripMenuItem)!).Checked = true;
_activeFilterType = FilterType.Custom;
//get Filter string
- string oldfilter = FilterString;
+ string? oldfilter = FilterString;
FilterString = filterstring;
//set CheckList nodes
@@ -2019,7 +1967,7 @@ private void SetCustomFilter(int filtersMenuItemIndex)
///
private void CancelFilterMenuItem_Click(object sender, EventArgs e)
{
- string oldfilter = FilterString;
+ string? oldfilter = FilterString;
//clean Filter
CleanFilter();
@@ -2038,9 +1986,9 @@ private void CancelFilterMenuItem_Click(object sender, EventArgs e)
///
private void CancelFilterMenuItem_MouseEnter(object sender, EventArgs e)
{
- if ((sender as ToolStripMenuItem).Enabled)
+ if (((sender as ToolStripMenuItem)!).Enabled)
{
- (sender as ToolStripMenuItem).Select();
+ ((sender as ToolStripMenuItem)!).Select();
}
}
@@ -2113,9 +2061,9 @@ private void CustomFilterMenuItem_Click(object sender, EventArgs e)
///
private void CustomFilterLastFiltersListMenuItem_MouseEnter(object sender, EventArgs e)
{
- if ((sender as ToolStripMenuItem).Enabled)
+ if (((sender as ToolStripMenuItem)!).Enabled)
{
- (sender as ToolStripMenuItem).Select();
+ ((sender as ToolStripMenuItem)!).Select();
}
}
@@ -2124,7 +2072,7 @@ private void CustomFilterLastFiltersListMenuItem_MouseEnter(object sender, Event
///
///
///
- private void CustomFilterLastFiltersListMenuItem_Paint(Object sender, PaintEventArgs e)
+ private void CustomFilterLastFiltersListMenuItem_Paint(object sender, PaintEventArgs e)
{
Rectangle rect = new Rectangle(_customFilterLastFiltersListMenuItem.Width - 12, 7, 10, 10);
ControlPaint.DrawMenuGlyph(e.Graphics, rect, MenuGlyph.Arrow, Color.Black, Color.Transparent);
@@ -2138,7 +2086,7 @@ private void CustomFilterLastFiltersListMenuItem_Paint(Object sender, PaintEvent
private void CustomFilterLastFilter1MenuItem_VisibleChanged(object sender, EventArgs e)
{
_toolStripSeparator2MenuItem.Visible = !_customFilterLastFilter1MenuItem.Visible;
- (sender as ToolStripMenuItem).VisibleChanged -= CustomFilterLastFilter1MenuItem_VisibleChanged;
+ ((sender as ToolStripMenuItem)!).VisibleChanged -= CustomFilterLastFilter1MenuItem_VisibleChanged;
}
///
@@ -2148,11 +2096,11 @@ private void CustomFilterLastFilter1MenuItem_VisibleChanged(object sender, Event
///
private void CustomFilterLastFilterMenuItem_Click(object sender, EventArgs e)
{
- ToolStripMenuItem menuitem = sender as ToolStripMenuItem;
+ ToolStripMenuItem? menuitem = sender as ToolStripMenuItem;
for (int i = 2; i < _customFilterLastFiltersListMenuItem.DropDownItems.Count; i++)
{
- if (_customFilterLastFiltersListMenuItem.DropDownItems[i].Text == menuitem.Text && _customFilterLastFiltersListMenuItem.DropDownItems[i].Tag.ToString() == menuitem.Tag.ToString())
+ if (_customFilterLastFiltersListMenuItem.DropDownItems[i].Text == menuitem?.Text && _customFilterLastFiltersListMenuItem.DropDownItems[i].Tag.ToString() == menuitem.Tag.ToString())
{
//set current filter preset as active
SetCustomFilter(i);
@@ -2168,8 +2116,8 @@ private void CustomFilterLastFilterMenuItem_Click(object sender, EventArgs e)
///
private void CustomFilterLastFilterMenuItem_TextChanged(object sender, EventArgs e)
{
- (sender as ToolStripMenuItem).Available = true;
- (sender as ToolStripMenuItem).TextChanged -= CustomFilterLastFilterMenuItem_TextChanged;
+ ((sender as ToolStripMenuItem)!).Available = true;
+ ((sender as ToolStripMenuItem)!).TextChanged -= CustomFilterLastFilterMenuItem_TextChanged;
}
///
@@ -2237,7 +2185,7 @@ private void CheckTextFilterHandleTextChanged(string text)
}
for (int i = _loadedNodes.Length - 1; i >= 0; i--)
{
- TreeNodeItemSelector node = _loadedNodes[i];
+ TreeNodeItemSelector? node = _loadedNodes[i];
if (node.Text == allnode.Text)
{
node.CheckState = CheckState.Indeterminate;
@@ -2272,12 +2220,12 @@ private void CheckTextFilterHandleTextChanged(string text)
{
for (int i = _loadedNodes.Length - 1; i >= 0; i--)
{
- TreeNodeItemSelector node = _loadedNodes[i];
+ TreeNodeItemSelector? node = _loadedNodes[i];
if (!(node.Text == allnode.Text || node.Text == nullnode.Text))
{
if (!node.Text.ToLower().Contains(text))
{
- _removedNodes = _removedNodes.Concat(new TreeNodeItemSelector[] { node }).ToArray();
+ _removedNodes = _removedNodes.Concat(new TreeNodeItemSelector?[] { node }).ToArray();
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/TreeNodeItemSelector.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/TreeNodeItemSelector.cs
index 4fc4b30a7..32e55c78e 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/TreeNodeItemSelector.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Toolkit/TreeNodeItemSelector.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -115,7 +115,7 @@ private TreeNodeItemSelector(String text, object value, CheckState state, Custom
/// Clone a Node
///
///
- public new TreeNodeItemSelector Clone()
+ public new TreeNodeItemSelector? Clone()
{
TreeNodeItemSelector? n = new TreeNodeItemSelector(Text, Value, _checkState, NodeType)
{
@@ -163,14 +163,8 @@ private TreeNodeItemSelector(String text, object value, CheckState state, Custom
///
public new bool Checked
{
- get
- {
- return _checkState == CheckState.Checked;
- }
- set
- {
- CheckState = (value == true ? CheckState.Checked : CheckState.Unchecked);
- }
+ get => _checkState == CheckState.Checked;
+ set => CheckState = value == true ? CheckState.Checked : CheckState.Unchecked;
}
///
@@ -178,10 +172,7 @@ private TreeNodeItemSelector(String text, object value, CheckState state, Custom
///
public CheckState CheckState
{
- get
- {
- return _checkState;
- }
+ get => _checkState;
set
{
_checkState = value;
@@ -253,7 +244,7 @@ public static TreeNodeItemSelector CreateNode(string text, object value, CheckSt
/// Add a child Node to this Node
///
///
- protected void AddChild(TreeNodeItemSelector child)
+ protected void AddChild(TreeNodeItemSelector? child)
{
child.Parent = this;
Nodes.Add(child);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Visuals/Filtering/FormCustomFilter.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Visuals/Filtering/FormCustomFilter.cs
index 7dc1a1a34..be786038b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Visuals/Filtering/FormCustomFilter.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Controls Visuals/Filtering/FormCustomFilter.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -150,15 +150,15 @@ public FormCustomFilter(Type dataType, bool filterDateAndTimeEnabled)
{
DateTimeFormatInfo dt = Thread.CurrentThread.CurrentCulture.DateTimeFormat;
- ((_valControl1 as DateTimePicker)!).CustomFormat = $@"{dt.ShortDatePattern} HH:mm";
- ((_valControl2 as DateTimePicker)!).CustomFormat = $@"{dt.ShortDatePattern} HH:mm";
- ((_valControl1 as DateTimePicker)!).Format = DateTimePickerFormat.Custom;
- ((_valControl2 as DateTimePicker)!).Format = DateTimePickerFormat.Custom;
+ (_valControl1 as DateTimePicker)!.CustomFormat = $@"{dt.ShortDatePattern} HH:mm";
+ (_valControl2 as DateTimePicker)!.CustomFormat = $@"{dt.ShortDatePattern} HH:mm";
+ (_valControl1 as DateTimePicker)!.Format = DateTimePickerFormat.Custom;
+ (_valControl2 as DateTimePicker)!.Format = DateTimePickerFormat.Custom;
}
else
{
- ((_valControl1 as DateTimePicker)!).Format = DateTimePickerFormat.Short;
- ((_valControl2 as DateTimePicker)!).Format = DateTimePickerFormat.Short;
+ (_valControl1 as DateTimePicker)!.Format = DateTimePickerFormat.Short;
+ (_valControl2 as DateTimePicker)!.Format = DateTimePickerFormat.Short;
}
comboBox_filterType.Items.AddRange(new[] {
@@ -284,41 +284,41 @@ private void FormCustomFilter_Load(object sender, EventArgs e)
if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewEquals.ToString()])
{
filterString =
- $"Convert([{{0}}], 'System.String') LIKE '%{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}%'";
+ $"Convert([{{0}}], 'System.String') LIKE '%{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}%'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewEarlierThan.ToString()])
{
filterString +=
- $"< '{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'";
+ $"< '{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewEarlierThanOrEqualTo.ToString()])
{
filterString +=
- $"<= '{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'";
+ $"<= '{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewLaterThan.ToString()])
{
filterString +=
- $"> '{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'";
+ $"> '{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewLaterThanOrEqualTo.ToString()])
{
filterString +=
- $">= '{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'";
+ $">= '{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewBetween.ToString()])
{
DateTime dt1 = ((DateTimePicker)control2).Value;
dt1 = new(dt1.Year, dt1.Month, dt1.Day, dt1.Hour, dt1.Minute, 0);
filterString +=
- $">= '{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}'";
+ $">= '{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}'";
filterString +=
- $" AND {column}<= '{Convert.ToString((filterDateAndTimeEnabled ? dt1 : dt1.Date), CultureInfo.CurrentCulture)}'";
+ $" AND {column}<= '{Convert.ToString(filterDateAndTimeEnabled ? dt1 : dt1.Date, CultureInfo.CurrentCulture)}'";
}
else if (filterTypeConditionText == KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewDoesNotEqual.ToString()])
{
filterString =
- $"Convert([{{0}}], 'System.String') NOT LIKE '%{Convert.ToString((filterDateAndTimeEnabled ? dt : dt.Date), CultureInfo.CurrentCulture)}%'";
+ $"Convert([{{0}}], 'System.String') NOT LIKE '%{Convert.ToString(filterDateAndTimeEnabled ? dt : dt.Date, CultureInfo.CurrentCulture)}%'";
}
break;
@@ -464,8 +464,8 @@ private void button_cancel_Click(object sender, EventArgs e)
private void button_ok_Click(object sender, EventArgs e)
{
- if (_valControl1 != null && _valControl2 != null && ((_valControl1.Visible && _valControl1.Tag != null && ((bool)_valControl1.Tag)) ||
- (_valControl2.Visible && _valControl2.Tag != null && ((bool)_valControl2.Tag))))
+ if (_valControl1 != null && _valControl2 != null && ((_valControl1.Visible && _valControl1.Tag != null && (bool)_valControl1.Tag) ||
+ (_valControl2.Visible && _valControl2.Tag != null && (bool)_valControl2.Tag)))
{
button_ok.Enabled = false;
return;
@@ -510,8 +510,8 @@ private void comboBox_filterType_SelectedIndexChanged(object sender, EventArgs e
if (_valControl1 != null)
{
button_ok.Enabled =
- !(_valControl1.Visible && _valControl1.Tag != null && ((bool)_valControl1.Tag)) ||
- (_valControl2.Visible && _valControl2.Tag != null && ((bool)_valControl2.Tag));
+ !(_valControl1.Visible && _valControl1.Tag != null && (bool)_valControl1.Tag) ||
+ (_valControl2.Visible && _valControl2.Tag != null && (bool)_valControl2.Tag);
}
}
}
@@ -541,30 +541,30 @@ private void valControl_TextChanged(object sender, EventArgs e)
{
case FilterType.Integer:
long val;
- hasErrors = !(long.TryParse(((sender as TextBox)!).Text, out val));
+ hasErrors = !long.TryParse((sender as TextBox)!.Text, out val);
break;
case FilterType.Float:
double val1;
- hasErrors = !(double.TryParse(((sender as TextBox)!).Text, out val1));
+ hasErrors = !double.TryParse((sender as TextBox)!.Text, out val1);
break;
}
- ((sender as Control)!).Tag = hasErrors || ((sender as TextBox)!).Text.Length == 0;
+ (sender as Control)!.Tag = hasErrors || (sender as TextBox)!.Text.Length == 0;
- if (hasErrors && ((sender as TextBox)!).Text.Length > 0)
+ if (hasErrors && (sender as TextBox)!.Text.Length > 0)
{
- ep.SetError(((sender as Control)!), KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewInvalidValue.ToString()]);
+ ep.SetError((sender as Control)!, KryptonAdvancedDataGridView.Translations[TranslationKey.KryptonAdvancedDataGridViewInvalidValue.ToString()]);
}
else
{
- ep.SetError(((sender as Control)!), "");
+ ep.SetError((sender as Control)!, "");
}
if (_valControl1 != null && _valControl2 != null)
{
- button_ok.Enabled = !(_valControl1.Visible && _valControl1.Tag != null && ((bool)_valControl1.Tag)) ||
- (_valControl2.Visible && _valControl2.Tag != null && ((bool)_valControl2.Tag));
+ button_ok.Enabled = !(_valControl1.Visible && _valControl1.Tag != null && (bool)_valControl1.Tag) ||
+ (_valControl2.Visible && _valControl2.Tag != null && (bool)_valControl2.Tag);
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/FilterType.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/FilterType.cs
index 14d580f72..d937a8b00 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/FilterType.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/FilterType.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/TranslationKey.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/TranslationKey.cs
index ac19f0c77..22c7065d9 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/TranslationKey.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Enumerations/TranslationKey.cs
@@ -40,7 +40,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Globals/GlobalDeclarations.cs
index f52c8432d..fb14f6d0c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj
index b5f1fe0f0..a140b7b2b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package implements the advanced data grid view controls.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package implements the advanced data grid view controls.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,44 +69,36 @@
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
@@ -130,6 +110,7 @@
enable
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView.licenseheader
index b15f2d6dd..145513ab7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView/Krypton.Toolkit.Suite.Extended.AdvancedDataGridView.licenseheader
@@ -41,7 +41,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/GlobalMethods.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/GlobalMethods.cs
index b34b153a3..d28fbe5ec 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/GlobalMethods.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/GlobalMethods.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -126,9 +126,7 @@ public bool CheckIfTargetPlatformIsSupported(bool useLegacyVistaSupport = false)
}
catch (Exception exc)
{
- //ExceptionCapture.CaptureException(exc, "Exception Thrown", MessageBoxButtons.OK, KryptonMessageBoxIcon.Error, "GlobalMethods", "CheckIfTargetPlatformIsSupported(bool useLegacyVistaSupport = false)");
-
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
SetIsTargetPlatformSupported(false);
}
@@ -155,7 +153,7 @@ public bool IsTargetPlatformRunningIn64BITMode()
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
SetIsTargetPlatform64BIT(false);
}
@@ -175,7 +173,7 @@ public bool AreAssemblies64BIT()
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
SetIsAssemblies64BIT(false);
}
@@ -247,7 +245,7 @@ private string HKLM_GetString(string path, string key)
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
return string.Empty;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/NativeMethods.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/NativeMethods.cs
index 063b678b0..c44d90512 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/NativeMethods.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/NativeMethods.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/PlatformHelper.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/PlatformHelper.cs
index 65d6681e1..f0b99131d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/PlatformHelper.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/PlatformHelper.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -40,8 +40,8 @@ static PlatformHelper()
PlatformHelper.Win32NT = Environment.OSVersion.Platform == PlatformID.Win32NT;
PlatformHelper.XpOrHigher = PlatformHelper.Win32NT && Environment.OSVersion.Version.Major >= 5;
PlatformHelper.VistaOrHigher = PlatformHelper.Win32NT && Environment.OSVersion.Version.Major >= 6;
- PlatformHelper.SevenOrHigher = PlatformHelper.Win32NT && (Environment.OSVersion.Version >= new Version(6, 1));
- PlatformHelper.EightOrHigher = PlatformHelper.Win32NT && (Environment.OSVersion.Version >= new Version(6, 2, 9200));
+ PlatformHelper.SevenOrHigher = PlatformHelper.Win32NT && Environment.OSVersion.Version >= new Version(6, 1);
+ PlatformHelper.EightOrHigher = PlatformHelper.Win32NT && Environment.OSVersion.Version >= new Version(6, 2, 9200);
PlatformHelper.VisualStylesEnabled = VisualStyleInformation.IsEnabledByUser;
SystemEvents.UserPreferenceChanged += (s, e) =>
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/UACSecurity.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/UACSecurity.cs
index 90b57e697..3ab445631 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/UACSecurity.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Utilities/UACSecurity.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -36,7 +36,7 @@ public static class UACSecurity
#endregion
#region Constants
- internal const int BCM_FIRST = 0x1600, BCM_SETSHIELD = (BCM_FIRST + 0x000C);
+ internal const int BCM_FIRST = 0x1600, BCM_SETSHIELD = BCM_FIRST + 0x000C;
#endregion
#region Methods
@@ -80,7 +80,7 @@ internal static void RestartElevated()
}
catch (Win32Exception ex)
{
- ExceptionCapture.CaptureException(ex);
+ DebugUtilities.NotImplemented(ex.ToString());
return; //If cancelled, do nothing
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/CommandLinkTextValues.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/CommandLinkTextValues.cs
index c33fb396f..5f15b50ac 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/CommandLinkTextValues.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/CommandLinkTextValues.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/ImageValue.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/ImageValue.cs
index 2a8ef2749..6f1a8b1d6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/ImageValue.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/ImageValue.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -78,9 +78,8 @@ public Image Image
/// Gets a value indicating if all values are default.
///
[Browsable(false)]
- public override bool IsDefault => ((Image == defaultImage) &&
- (ImageTransparentColor == Color.Empty)
- );
+ public override bool IsDefault => Image == defaultImage &&
+ ImageTransparentColor == Color.Empty;
#endregion
@@ -126,8 +125,8 @@ public string GetLongText()
[Localizable(true)]
[Category("Visuals")]
[Description("Image transparent color.")]
- [RefreshPropertiesAttribute(RefreshProperties.All)]
- [KryptonDefaultColorAttribute()]
+ [RefreshProperties(RefreshProperties.All)]
+ [KryptonDefaultColor()]
public Color ImageTransparentColor
{
get => _transparent;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/MainTextValue.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/MainTextValue.cs
index 8eb07e3cf..9a07764a7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/MainTextValue.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/MainTextValue.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/SubscriptTextValue.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/SubscriptTextValue.cs
index 8075c9deb..6ae75afa8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/SubscriptTextValue.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/Values/SubscriptTextValue.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/View Draw/ViewDrawCommandLinkButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/View Draw/ViewDrawCommandLinkButton.cs
index be52547d2..6cd08b7f3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/View Draw/ViewDrawCommandLinkButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Classes/View Draw/ViewDrawCommandLinkButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,509 +27,509 @@
namespace Krypton.Toolkit.Suite.Extended.Buttons
{
- ///
- /// View element that can draw a CommandLinkButton.
- ///
- public class ViewDrawCommandLinkButton : ViewComposite
- {
- #region Instance Fields
-
- private IPaletteTriple _paletteDisabled;
- private IPaletteTriple _paletteNormal;
- private IPaletteTriple _paletteTracking;
- private IPaletteTriple _palettePressed;
- private IPaletteTriple _paletteCheckedNormal;
- private IPaletteTriple _paletteCheckedTracking;
- private IPaletteTriple _paletteCheckedPressed;
- private readonly ViewDrawCanvas _drawCanvas;
- private readonly ViewDrawContent _drawContent;
- private readonly ViewDrawContent _drawImageContent;
- private readonly ViewLayoutCenter _drawImage;
- private bool _forcePaletteUpdate;
- #endregion
-
- #region Identity
-
- ///
- /// Initialize a new instance of the ViewDrawButton class.
- ///
- /// Palette source for the disabled state.
- /// Palette source for the normal state.
- /// Palette source for the tracking state.
- /// Palette source for the pressed state.
- /// Palette source for metric values.
- ///
- ///
- /// Visual orientation of the content.
- /// Use mnemonics.
- public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled,
- IPaletteTriple paletteNormal,
- IPaletteTriple paletteTracking,
- IPaletteTriple palettePressed,
- IPaletteMetric paletteMetric,
- ImageValue imageValue, CommandLinkTextValues commandLinkTextValues,
- VisualOrientation orientation,
- bool useMnemonic)
- : this(paletteDisabled, paletteNormal, paletteTracking, palettePressed,
- paletteNormal, paletteTracking, palettePressed, paletteMetric,
- imageValue, commandLinkTextValues, orientation, useMnemonic)
- {
- }
-
- ///
- /// Initialize a new instance of the ViewDrawButton class.
- ///
- /// Palette source for the disabled state.
- /// Palette source for the normal state.
- /// Palette source for the tracking state.
- /// Palette source for the pressed state.
- /// Palette source for the normal checked state.
- /// Palette source for the tracking checked state.
- /// Palette source for the pressed checked state.
- /// Palette source for metric values.
- ///
- ///
- /// Visual orientation of the content.
- /// Use mnemonics.
- public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled,
- IPaletteTriple paletteNormal,
- IPaletteTriple paletteTracking,
- IPaletteTriple palettePressed,
- IPaletteTriple paletteCheckedNormal,
- IPaletteTriple paletteCheckedTracking,
- IPaletteTriple paletteCheckedPressed,
- IPaletteMetric paletteMetric,
- ImageValue imageValue, CommandLinkTextValues commandLinkTextValues,
- VisualOrientation orientation,
- bool useMnemonic)
- {
- // Remember the source information
- _paletteDisabled = paletteDisabled;
- _paletteNormal = paletteNormal;
- _paletteTracking = paletteTracking;
- _palettePressed = palettePressed;
- _paletteCheckedNormal = paletteCheckedNormal;
- _paletteCheckedTracking = paletteCheckedTracking;
- _paletteCheckedPressed = paletteCheckedPressed;
- CurrentPalette = _paletteNormal;
-
- // Default to not being checked
- Checked = false;
- AllowUncheck = true;
-
- // Create the drop down view
- _drawImageContent = new(_paletteNormal.PaletteContent, imageValue, orientation);
- _drawImage = new(paletteMetric, PaletteMetricPadding.BarPaddingOnly,
- orientation, _drawImageContent);
-
- // Our view contains background and border with content inside
- _drawContent = new(_paletteNormal.PaletteContent, commandLinkTextValues, orientation)
- {
- // Pass the mnemonic default to the content view
- UseMnemonic = useMnemonic
- };
-
- // Use a docker layout to organize the contents of the canvas
- LayoutDocker = new()
- {
- { _drawContent, ViewDockStyle.Left },
- { _drawImage, ViewDockStyle.Left }
- };
- LayoutDocker.Tag = this;
-
-
- _drawCanvas = new(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder, paletteMetric,
- PaletteMetricPadding.BarPaddingTabs, orientation)
- {
+ ///
+ /// View element that can draw a CommandLinkButton.
+ ///
+ public class ViewDrawCommandLinkButton : ViewComposite
+ {
+ #region Instance Fields
+
+ private IPaletteTriple _paletteDisabled;
+ private IPaletteTriple _paletteNormal;
+ private IPaletteTriple _paletteTracking;
+ private IPaletteTriple _palettePressed;
+ private IPaletteTriple _paletteCheckedNormal;
+ private IPaletteTriple _paletteCheckedTracking;
+ private IPaletteTriple _paletteCheckedPressed;
+ private readonly ViewDrawCanvas _drawCanvas;
+ private readonly ViewDrawContent _drawContent;
+ private readonly ViewDrawContent _drawImageContent;
+ private readonly ViewLayoutCenter _drawImage;
+ private bool _forcePaletteUpdate;
+ #endregion
+
+ #region Identity
+
+ ///
+ /// Initialize a new instance of the ViewDrawButton class.
+ ///
+ /// Palette source for the disabled state.
+ /// Palette source for the normal state.
+ /// Palette source for the tracking state.
+ /// Palette source for the pressed state.
+ /// Palette source for metric values.
+ ///
+ ///
+ /// Visual orientation of the content.
+ /// Use mnemonics.
+ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled,
+ IPaletteTriple paletteNormal,
+ IPaletteTriple paletteTracking,
+ IPaletteTriple palettePressed,
+ IPaletteMetric paletteMetric,
+ ImageValue imageValue, CommandLinkTextValues commandLinkTextValues,
+ VisualOrientation orientation,
+ bool useMnemonic)
+ : this(paletteDisabled, paletteNormal, paletteTracking, palettePressed,
+ paletteNormal, paletteTracking, palettePressed, paletteMetric,
+ imageValue, commandLinkTextValues, orientation, useMnemonic)
+ {
+ }
+
+ ///
+ /// Initialize a new instance of the ViewDrawButton class.
+ ///
+ /// Palette source for the disabled state.
+ /// Palette source for the normal state.
+ /// Palette source for the tracking state.
+ /// Palette source for the pressed state.
+ /// Palette source for the normal checked state.
+ /// Palette source for the tracking checked state.
+ /// Palette source for the pressed checked state.
+ /// Palette source for metric values.
+ ///
+ ///
+ /// Visual orientation of the content.
+ /// Use mnemonics.
+ public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled,
+ IPaletteTriple paletteNormal,
+ IPaletteTriple paletteTracking,
+ IPaletteTriple palettePressed,
+ IPaletteTriple paletteCheckedNormal,
+ IPaletteTriple paletteCheckedTracking,
+ IPaletteTriple paletteCheckedPressed,
+ IPaletteMetric paletteMetric,
+ ImageValue imageValue, CommandLinkTextValues commandLinkTextValues,
+ VisualOrientation orientation,
+ bool useMnemonic)
+ {
+ // Remember the source information
+ _paletteDisabled = paletteDisabled;
+ _paletteNormal = paletteNormal;
+ _paletteTracking = paletteTracking;
+ _palettePressed = palettePressed;
+ _paletteCheckedNormal = paletteCheckedNormal;
+ _paletteCheckedTracking = paletteCheckedTracking;
+ _paletteCheckedPressed = paletteCheckedPressed;
+ CurrentPalette = _paletteNormal;
+
+ // Default to not being checked
+ Checked = false;
+ AllowUncheck = true;
+
+ // Create the drop down view
+ _drawImageContent = new(_paletteNormal.PaletteContent, imageValue, orientation);
+ _drawImage = new(paletteMetric, PaletteMetricPadding.BarPaddingOnly,
+ orientation, _drawImageContent);
+
+ // Our view contains background and border with content inside
+ _drawContent = new(_paletteNormal.PaletteContent, commandLinkTextValues, orientation)
+ {
+ // Pass the mnemonic default to the content view
+ UseMnemonic = useMnemonic
+ };
+
+ // Use a docker layout to organize the contents of the canvas
+ LayoutDocker = new()
+ {
+ { _drawContent, ViewDockStyle.Left },
+ { _drawImage, ViewDockStyle.Left }
+ };
+ LayoutDocker.Tag = this;
+
+
+ _drawCanvas = new(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder, paletteMetric,
+ PaletteMetricPadding.BarPaddingTabs, orientation)
+ {
// Place the content inside the canvas
LayoutDocker
- };
-
- // Place the canvas inside ourself
- Add(_drawCanvas);
- }
-
- ///
- /// Obtains the String representation of this instance.
- ///
- /// User readable name of the instance.
- public override string ToString()
- {
- // Return the class name and instance identifier
- return $"ViewDrawButton:{Id}";
- }
- #endregion
-
- #region LayoutDocker
- ///
- /// Gets access to the contained layout docker.
- ///
- public ViewLayoutDocker LayoutDocker { get; }
-
- #endregion
-
- #region CurrentPalette
- ///
- /// Gets access to the currently selected palette.
- ///
- public IPaletteTriple CurrentPalette { get; private set; }
-
- #endregion
-
- #region ButtonValues
- ///
- /// Gets and sets the source for button values.
- ///
- public IContentValues ButtonValues
- {
- get => _drawContent.Values;
- set => _drawContent.Values = value;
- }
- #endregion
-
- #region DrawTabBorder
- ///
- /// Gets and sets if the border should be drawn as a tab border.
- ///
- public bool DrawTabBorder
- {
- get => _drawCanvas.DrawTabBorder;
- set => _drawCanvas.DrawTabBorder = value;
- }
- #endregion
-
- #region TabBorderStyle
- ///
- /// Gets and sets the tab border style of the button.
- ///
- public TabBorderStyle TabBorderStyle
- {
- get => _drawCanvas.TabBorderStyle;
- set => _drawCanvas.TabBorderStyle = value;
- }
- #endregion
-
- #region Enabled
- ///
- /// Gets and sets the enabled state of the element.
- ///
- public override bool Enabled
- {
- get => base.Enabled;
-
- set
- {
- base.Enabled = value;
-
- if (Enabled && (ElementState == PaletteState.Disabled))
- {
- ElementState = Checked ? PaletteState.CheckedNormal : PaletteState.Normal;
- }
-
- // Pass on the new state to the child elements
- _drawCanvas.Enabled = value;
- _drawContent.Enabled = value;
- _drawImageContent.Enabled = value;
- }
- }
- #endregion
-
- #region Orientation
- ///
- /// Gets and sets the visual orientation.
- ///
- public virtual VisualOrientation Orientation
- {
- get => _drawCanvas.Orientation;
- set => SetOrientation(value, value);
- }
-
- ///
- /// Set the orientation of the two button components.
- ///
- /// Orientation of the button border and background..
- /// Orientation of the button contents.
- public void SetOrientation(VisualOrientation borderBackOrient,
- VisualOrientation contentOrient)
- {
- _drawCanvas.Orientation = borderBackOrient;
- _drawContent.Orientation = contentOrient;
- }
- #endregion
-
- #region UseMnemonic
- ///
- /// Gets and sets usage of mnemonics.
- ///
- public bool UseMnemonic
- {
- get => _drawContent.UseMnemonic;
- set => _drawContent.UseMnemonic = value;
- }
- #endregion
-
- #region Checked
- ///
- /// Gets and sets the checked state.
- ///
- public bool Checked { get; set; }
-
- #endregion
-
- #region AllowUncheck
- ///
- /// Gets and sets the allow uncheck state.
- ///
- public bool AllowUncheck { get; set; }
-
- #endregion
-
- #region DrawButtonComposition
- ///
- /// Gets and sets the composition usage of the button.
- ///
- public bool DrawButtonComposition
- {
- get => _drawCanvas.DrawCanvasOnComposition;
- set => _drawCanvas.DrawCanvasOnComposition = value;
- }
- #endregion
-
- #region TestForFocusCues
- ///
- /// Gets and sets the use of focus cues for deciding if focus rects are allowed.
- ///
- public bool TestForFocusCues
- {
- get => _drawContent.TestForFocusCues;
- set => _drawContent.TestForFocusCues = value;
- }
- #endregion
-
- #region Palettes
- ///
- /// Update the source palettes for non-checked drawing.
- ///
- /// Palette source for the disabled state.
- /// Palette source for the normal state.
- /// Palette source for the tracking state.
- /// Palette source for the pressed state.
- public void SetPalettes(IPaletteTriple paletteDisabled,
- IPaletteTriple paletteNormal,
- IPaletteTriple paletteTracking,
- IPaletteTriple palettePressed)
- {
- Debug.Assert(paletteDisabled != null);
- Debug.Assert(paletteNormal != null);
- Debug.Assert(paletteTracking != null);
- Debug.Assert(palettePressed != null);
-
- // Remember the new palette settings
- _paletteDisabled = paletteDisabled;
- _paletteNormal = paletteNormal;
- _paletteTracking = paletteTracking;
- _palettePressed = palettePressed;
-
- // Must force update of palettes to use latest ones provided
- _forcePaletteUpdate = true;
- }
-
- ///
- /// Update the source palettes for checked state drawing.
- ///
- /// Palette source for the normal checked state.
- /// Palette source for the tracking checked state.
- /// Palette source for the pressed checked state.
- public void SetCheckedPalettes(IPaletteTriple paletteCheckedNormal,
- IPaletteTriple paletteCheckedTracking,
- IPaletteTriple paletteCheckedPressed)
- {
- Debug.Assert(paletteCheckedNormal != null);
- Debug.Assert(paletteCheckedTracking != null);
- Debug.Assert(paletteCheckedPressed != null);
-
- // Remember the new palette settings
- _paletteCheckedNormal = paletteCheckedNormal;
- _paletteCheckedTracking = paletteCheckedTracking;
- _paletteCheckedPressed = paletteCheckedPressed;
-
- // Must force update of palettes to use latest ones provided
- _forcePaletteUpdate = true;
- }
- #endregion
-
- #region Eval
- ///
- /// Evaluate the need for drawing transparent areas.
- ///
- /// Evaluation context.
- /// True if transparent areas exist; otherwise false.
- public override bool EvalTransparentPaint(ViewContext context)
- {
- Debug.Assert(context != null);
-
- // Ensure that child elements have correct palette state
- CheckPaletteState(context);
-
- // Ask the renderer to evaluate the given palette
- return _drawCanvas.EvalTransparentPaint(context);
- }
- #endregion
-
- #region Layout
- ///
- /// Discover the preferred size of the element.
- ///
- /// Layout context.
- public override Size GetPreferredSize(ViewLayoutContext context)
- {
- Debug.Assert(context != null);
- Debug.Assert(_drawCanvas != null);
-
- // Ensure that child elements have correct palette state
- CheckPaletteState(context);
-
- // Delegate work to the child canvas
- return _drawCanvas.GetPreferredSize(context);
- }
-
- ///
- /// Perform a layout of the elements.
- ///
- /// Layout context.
- ///
- public override void Layout(ViewLayoutContext context)
- {
- Debug.Assert(context != null);
-
- // Validate incoming reference
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
-
- // We take on all the available display area
- ClientRectangle = context.DisplayRectangle;
-
- // Ensure that child elements have correct palette state
- CheckPaletteState(context);
-
- // Let base class perform usual processing
- base.Layout(context);
-
-
- }
- #endregion
-
- #region Paint
- ///
- /// Perform a render of the elements.
- ///
- /// Rendering context.
- public override void Render(RenderContext context)
- {
- Debug.Assert(context != null);
-
- // Ensure that child elements have correct palette state
- CheckPaletteState(context);
-
- // Let base class perform standard rendering
- base.Render(context);
- }
- #endregion
-
- #region Protected
- ///
- /// Check that the palette and state are correct.
- ///
- /// Reference to the view context.
- protected virtual void CheckPaletteState(ViewContext context)
- {
- // Default to using this element calculated state
- PaletteState buttonState = State;
-
- // If the actual control is not enabled, force to disabled state
- if (!IsFixed && !context.Control.Enabled)
- {
- buttonState = PaletteState.Disabled;
- }
-
- // Apply the checked state if not fixed
- if (!IsFixed && Checked)
- {
- // Is the checked button allowed to become unchecked
- if (AllowUncheck)
- {
- // Show feedback on tracking and pressed
- switch (buttonState)
- {
- case PaletteState.Normal:
- buttonState = PaletteState.CheckedNormal;
- break;
- case PaletteState.Tracking:
- buttonState = PaletteState.CheckedTracking;
- break;
- case PaletteState.Pressed:
- buttonState = PaletteState.CheckedPressed;
- break;
- }
- }
- else
- {
- // Always use the normal state as user cannot uncheck the button
- buttonState = PaletteState.CheckedNormal;
- }
- }
-
- // If the child elements are not in correct state
- if (_forcePaletteUpdate || (_drawCanvas.ElementState != buttonState))
- {
- // No longer need to force the palettes to be updated
- _forcePaletteUpdate = false;
-
- // Switch the child elements over to correct state
- _drawCanvas.ElementState = buttonState;
- _drawContent.ElementState = buttonState;
- _drawImageContent.ElementState = buttonState;
-
- // Push the correct palettes into them
- switch (buttonState)
- {
- case PaletteState.Disabled:
- CurrentPalette = _paletteDisabled;
- break;
- case PaletteState.Normal:
- CurrentPalette = _paletteNormal;
- break;
- case PaletteState.CheckedNormal:
- CurrentPalette = _paletteCheckedNormal;
- break;
- case PaletteState.Pressed:
- CurrentPalette = _palettePressed;
- break;
- case PaletteState.CheckedPressed:
- CurrentPalette = _paletteCheckedPressed;
- break;
- case PaletteState.Tracking:
- CurrentPalette = _paletteTracking;
- break;
- case PaletteState.CheckedTracking:
- CurrentPalette = _paletteCheckedTracking;
- break;
- default:
- // Should never happen!
- Debug.Assert(false);
- break;
- }
-
- // Update with the correct palettes
- _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder);
-
- _drawContent.SetPalette(CurrentPalette.PaletteContent);
- //_drawImageContent.SetPalette(CurrentPalette.PaletteContent);
- }
- }
- #endregion
-
- }
+ };
+
+ // Place the canvas inside ourself
+ Add(_drawCanvas);
+ }
+
+ ///
+ /// Obtains the String representation of this instance.
+ ///
+ /// User readable name of the instance.
+ public override string ToString()
+ {
+ // Return the class name and instance identifier
+ return $"ViewDrawButton:{Id}";
+ }
+ #endregion
+
+ #region LayoutDocker
+ ///
+ /// Gets access to the contained layout docker.
+ ///
+ public ViewLayoutDocker LayoutDocker { get; }
+
+ #endregion
+
+ #region CurrentPalette
+ ///
+ /// Gets access to the currently selected palette.
+ ///
+ public IPaletteTriple CurrentPalette { get; private set; }
+
+ #endregion
+
+ #region ButtonValues
+ ///
+ /// Gets and sets the source for button values.
+ ///
+ public IContentValues ButtonValues
+ {
+ get => _drawContent.Values;
+ set => _drawContent.Values = value;
+ }
+ #endregion
+
+ #region DrawTabBorder
+ ///
+ /// Gets and sets if the border should be drawn as a tab border.
+ ///
+ public bool DrawTabBorder
+ {
+ get => _drawCanvas.DrawTabBorder;
+ set => _drawCanvas.DrawTabBorder = value;
+ }
+ #endregion
+
+ #region TabBorderStyle
+ ///
+ /// Gets and sets the tab border style of the button.
+ ///
+ public TabBorderStyle TabBorderStyle
+ {
+ get => _drawCanvas.TabBorderStyle;
+ set => _drawCanvas.TabBorderStyle = value;
+ }
+ #endregion
+
+ #region Enabled
+ ///
+ /// Gets and sets the enabled state of the element.
+ ///
+ public override bool Enabled
+ {
+ get => base.Enabled;
+
+ set
+ {
+ base.Enabled = value;
+
+ if (Enabled && ElementState == PaletteState.Disabled)
+ {
+ ElementState = Checked ? PaletteState.CheckedNormal : PaletteState.Normal;
+ }
+
+ // Pass on the new state to the child elements
+ _drawCanvas.Enabled = value;
+ _drawContent.Enabled = value;
+ _drawImageContent.Enabled = value;
+ }
+ }
+ #endregion
+
+ #region Orientation
+ ///
+ /// Gets and sets the visual orientation.
+ ///
+ public virtual VisualOrientation Orientation
+ {
+ get => _drawCanvas.Orientation;
+ set => SetOrientation(value, value);
+ }
+
+ ///
+ /// Set the orientation of the two button components.
+ ///
+ /// Orientation of the button border and background..
+ /// Orientation of the button contents.
+ public void SetOrientation(VisualOrientation borderBackOrient,
+ VisualOrientation contentOrient)
+ {
+ _drawCanvas.Orientation = borderBackOrient;
+ _drawContent.Orientation = contentOrient;
+ }
+ #endregion
+
+ #region UseMnemonic
+ ///
+ /// Gets and sets usage of mnemonics.
+ ///
+ public bool UseMnemonic
+ {
+ get => _drawContent.UseMnemonic;
+ set => _drawContent.UseMnemonic = value;
+ }
+ #endregion
+
+ #region Checked
+ ///
+ /// Gets and sets the checked state.
+ ///
+ public bool Checked { get; set; }
+
+ #endregion
+
+ #region AllowUncheck
+ ///
+ /// Gets and sets the allow uncheck state.
+ ///
+ public bool AllowUncheck { get; set; }
+
+ #endregion
+
+ #region DrawButtonComposition
+ ///
+ /// Gets and sets the composition usage of the button.
+ ///
+ public bool DrawButtonComposition
+ {
+ get => _drawCanvas.DrawCanvasOnComposition;
+ set => _drawCanvas.DrawCanvasOnComposition = value;
+ }
+ #endregion
+
+ #region TestForFocusCues
+ ///
+ /// Gets and sets the use of focus cues for deciding if focus rects are allowed.
+ ///
+ public bool TestForFocusCues
+ {
+ get => _drawContent.TestForFocusCues;
+ set => _drawContent.TestForFocusCues = value;
+ }
+ #endregion
+
+ #region Palettes
+ ///
+ /// Update the source palettes for non-checked drawing.
+ ///
+ /// Palette source for the disabled state.
+ /// Palette source for the normal state.
+ /// Palette source for the tracking state.
+ /// Palette source for the pressed state.
+ public void SetPalettes(IPaletteTriple paletteDisabled,
+ IPaletteTriple paletteNormal,
+ IPaletteTriple paletteTracking,
+ IPaletteTriple palettePressed)
+ {
+ System.Diagnostics.Debug.Assert(paletteDisabled != null);
+ System.Diagnostics.Debug.Assert(paletteNormal != null);
+ System.Diagnostics.Debug.Assert(paletteTracking != null);
+ System.Diagnostics.Debug.Assert(palettePressed != null);
+
+ // Remember the new palette settings
+ _paletteDisabled = paletteDisabled!;
+ _paletteNormal = paletteNormal!;
+ _paletteTracking = paletteTracking!;
+ _palettePressed = palettePressed!;
+
+ // Must force update of palettes to use latest ones provided
+ _forcePaletteUpdate = true;
+ }
+
+ ///
+ /// Update the source palettes for checked state drawing.
+ ///
+ /// Palette source for the normal checked state.
+ /// Palette source for the tracking checked state.
+ /// Palette source for the pressed checked state.
+ public void SetCheckedPalettes(IPaletteTriple paletteCheckedNormal,
+ IPaletteTriple paletteCheckedTracking,
+ IPaletteTriple paletteCheckedPressed)
+ {
+ System.Diagnostics.Debug.Assert(paletteCheckedNormal != null);
+ System.Diagnostics.Debug.Assert(paletteCheckedTracking != null);
+ System.Diagnostics.Debug.Assert(paletteCheckedPressed != null);
+
+ // Remember the new palette settings
+ _paletteCheckedNormal = paletteCheckedNormal;
+ _paletteCheckedTracking = paletteCheckedTracking;
+ _paletteCheckedPressed = paletteCheckedPressed;
+
+ // Must force update of palettes to use latest ones provided
+ _forcePaletteUpdate = true;
+ }
+ #endregion
+
+ #region Eval
+ ///
+ /// Evaluate the need for drawing transparent areas.
+ ///
+ /// Evaluation context.
+ /// True if transparent areas exist; otherwise false.
+ public override bool EvalTransparentPaint(ViewContext context)
+ {
+ System.Diagnostics.Debug.Assert(context != null);
+
+ // Ensure that child elements have correct palette state
+ CheckPaletteState(context);
+
+ // Ask the renderer to evaluate the given palette
+ return _drawCanvas.EvalTransparentPaint(context);
+ }
+ #endregion
+
+ #region Layout
+ ///
+ /// Discover the preferred size of the element.
+ ///
+ /// Layout context.
+ public override Size GetPreferredSize(ViewLayoutContext context)
+ {
+ System.Diagnostics.Debug.Assert(context != null);
+ System.Diagnostics.Debug.Assert(_drawCanvas != null);
+
+ // Ensure that child elements have correct palette state
+ CheckPaletteState(context);
+
+ // Delegate work to the child canvas
+ return _drawCanvas.GetPreferredSize(context);
+ }
+
+ ///
+ /// Perform a layout of the elements.
+ ///
+ /// Layout context.
+ ///
+ public override void Layout(ViewLayoutContext context)
+ {
+ System.Diagnostics.Debug.Assert(context != null);
+
+ // Validate incoming reference
+ if (context == null)
+ {
+ throw new ArgumentNullException(nameof(context));
+ }
+
+ // We take on all the available display area
+ ClientRectangle = context.DisplayRectangle;
+
+ // Ensure that child elements have correct palette state
+ CheckPaletteState(context);
+
+ // Let base class perform usual processing
+ base.Layout(context);
+
+
+ }
+ #endregion
+
+ #region Paint
+ ///
+ /// Perform a render of the elements.
+ ///
+ /// Rendering context.
+ public override void Render(RenderContext context)
+ {
+ System.Diagnostics.Debug.Assert(context != null);
+
+ // Ensure that child elements have correct palette state
+ CheckPaletteState(context);
+
+ // Let base class perform standard rendering
+ base.Render(context);
+ }
+ #endregion
+
+ #region Protected
+ ///
+ /// Check that the palette and state are correct.
+ ///
+ /// Reference to the view context.
+ protected virtual void CheckPaletteState(ViewContext context)
+ {
+ // Default to using this element calculated state
+ PaletteState buttonState = State;
+
+ // If the actual control is not enabled, force to disabled state
+ if (!IsFixed && !context.Control.Enabled)
+ {
+ buttonState = PaletteState.Disabled;
+ }
+
+ // Apply the checked state if not fixed
+ if (!IsFixed && Checked)
+ {
+ // Is the checked button allowed to become unchecked
+ if (AllowUncheck)
+ {
+ // Show feedback on tracking and pressed
+ switch (buttonState)
+ {
+ case PaletteState.Normal:
+ buttonState = PaletteState.CheckedNormal;
+ break;
+ case PaletteState.Tracking:
+ buttonState = PaletteState.CheckedTracking;
+ break;
+ case PaletteState.Pressed:
+ buttonState = PaletteState.CheckedPressed;
+ break;
+ }
+ }
+ else
+ {
+ // Always use the normal state as user cannot uncheck the button
+ buttonState = PaletteState.CheckedNormal;
+ }
+ }
+
+ // If the child elements are not in correct state
+ if (_forcePaletteUpdate || _drawCanvas.ElementState != buttonState)
+ {
+ // No longer need to force the palettes to be updated
+ _forcePaletteUpdate = false;
+
+ // Switch the child elements over to correct state
+ _drawCanvas.ElementState = buttonState;
+ _drawContent.ElementState = buttonState;
+ _drawImageContent.ElementState = buttonState;
+
+ // Push the correct palettes into them
+ switch (buttonState)
+ {
+ case PaletteState.Disabled:
+ CurrentPalette = _paletteDisabled;
+ break;
+ case PaletteState.Normal:
+ CurrentPalette = _paletteNormal;
+ break;
+ case PaletteState.CheckedNormal:
+ CurrentPalette = _paletteCheckedNormal;
+ break;
+ case PaletteState.Pressed:
+ CurrentPalette = _palettePressed;
+ break;
+ case PaletteState.CheckedPressed:
+ CurrentPalette = _paletteCheckedPressed;
+ break;
+ case PaletteState.Tracking:
+ CurrentPalette = _paletteTracking;
+ break;
+ case PaletteState.CheckedTracking:
+ CurrentPalette = _paletteCheckedTracking;
+ break;
+ default:
+ // Should never happen!
+ System.Diagnostics.Debug.Assert(false);
+ break;
+ }
+
+ // Update with the correct palettes
+ _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder);
+
+ _drawContent.SetPalette(CurrentPalette.PaletteContent);
+ //_drawImageContent.SetPalette(CurrentPalette.PaletteContent);
+ }
+ }
+ #endregion
+
+ }
}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion1.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion1.cs
index 32ce6c8b1..a4efeb531 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion1.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion1.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -25,7 +25,6 @@
*/
#endregion
-#pragma warning disable CS0618
namespace Krypton.Toolkit.Suite.Extended.Buttons
{
///
@@ -37,7 +36,8 @@ namespace Krypton.Toolkit.Suite.Extended.Buttons
[ToolboxItem(true), ToolboxBitmap(typeof(KryptonButton), "ToolboxBitmaps.CommandLinkButton.bmp"), DefaultEvent("Click"),
DefaultProperty("Heading"), Designer(typeof(KryptonCommandLinkButtonDesigner)), DesignerCategory("code"),
ClassInterface(ClassInterfaceType.AutoDispatch), DisplayName("Krypton Command Link"),
- Description("A Krypton Command Link Button."), ComVisible(true)]
+ Description("A Krypton Command Link Button."), ComVisible(true),
+ Obsolete(@"Use versions that are supported in the Standard Toolkit.")]
public class KryptonCommandLinkButton : VisualSimpleBase, IButtonControl
{
#region Instance Fields
@@ -268,7 +268,7 @@ public ButtonStyle ButtonStyle
private bool ShouldSerializeButtonStyle()
{
- return (ButtonStyle != ButtonStyle.Command);
+ return ButtonStyle != ButtonStyle.Command;
}
private void ResetButtonStyle()
@@ -442,7 +442,7 @@ public virtual IKryptonCommand KryptonCommand
/// true if the control should behave as a default button; otherwise false.
public void NotifyDefault(bool value)
{
- if (!ViewDrawButton.IsFixed && (_isDefault != value))
+ if (!ViewDrawButton.IsFixed && _isDefault != value)
{
// Remember new default status
_isDefault = value;
@@ -669,7 +669,7 @@ protected override void OnClick(EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion2.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion2.cs
index 98fbc3cc5..f2a9ae158 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion2.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Command Links/KryptonCommandLinkVersion2.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -174,7 +174,7 @@ protected override void OnClick(EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonCancelDialogButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonCancelDialogButton.cs
index 6bb40154d..348bb89d2 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonCancelDialogButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonCancelDialogButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -55,13 +55,13 @@ private void KryptonCancelDialogButton_TextChanged(object sender, EventArgs e)
{
if (Text == Name)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ Text = KryptonManager.Strings.GeneralStrings.Cancel;
}
}
private void KryptonCancelDialogButton_ParentChanged(object sender, EventArgs e)
{
- Control parent = Parent;
+ Control? parent = Parent;
while (!(Parent is KryptonForm) && parent != null)
{
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonNODialogButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonNODialogButton.cs
index 6dead5dbc..d8dd14207 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonNODialogButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonNODialogButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -53,7 +53,7 @@ public KryptonNODialogButton()
private void KryptonNODialogButton_ParentChanged(object sender, EventArgs e)
{
- Control parent = Parent;
+ Control? parent = Parent;
while (!(Parent is KryptonForm) && parent != null)
{
@@ -72,7 +72,7 @@ private void KryptonNODialogButton_TextChanged(object sender, EventArgs e)
{
if (Text == Name)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ Text = KryptonManager.Strings.GeneralStrings.No;
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonOKDialogButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonOKDialogButton.cs
index 156bd5e1f..a9d44fff0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonOKDialogButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonOKDialogButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -55,13 +55,13 @@ private void KryptonOKDialogButton_TextChanged(object sender, EventArgs e)
{
if (Text == Name)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ Text = KryptonManager.Strings.GeneralStrings.OK;
}
}
private void KryptonOKDialogButton_ParentChanged(object sender, EventArgs e)
{
- Control parent = Parent;
+ Control? parent = Parent;
while (!(Parent is KryptonForm) && parent != null)
{
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonYesDialogButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonYesDialogButton.cs
index e3ecf33fe..12c31cbf3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonYesDialogButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Dialog Buttons/KryptonYesDialogButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -55,13 +55,13 @@ private void KryptonYesDialogButton_TextChanged(object sender, EventArgs e)
{
if (Text == Name)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
+ Text = KryptonManager.Strings.GeneralStrings.Yes;
}
}
private void KryptonYesDialogButton_ParentChanged(object sender, EventArgs e)
{
- Control parent = Parent;
+ Control? parent = Parent;
while (!(Parent is KryptonForm) && parent != null)
{
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonBrowseButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonBrowseButton.cs
index c11b5c9b5..1f3b11a20 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonBrowseButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonBrowseButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonDialogButtonExtended.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonDialogButtonExtended.cs
index 68b424d5d..3ce895853 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonDialogButtonExtended.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonDialogButtonExtended.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -149,81 +149,81 @@ private void ChangeText(KryptonButtonBuiltInDisplayString displayString, string
switch (displayString)
{
case KryptonButtonBuiltInDisplayString.Abort:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Abort;
+ Text = KryptonManager.Strings.GeneralStrings.Abort;
DialogResult = DialogResult.Abort;
SetDenyButton(true);
break;
case KryptonButtonBuiltInDisplayString.Apply:
- Text = KryptonLanguageManager.CustomToolkitStrings.Apply;
+ Text = KryptonManager.Strings.CustomStrings.Apply;
SetAcceptButton(true);
break;
case KryptonButtonBuiltInDisplayString.Cancel:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ Text = KryptonManager.Strings.GeneralStrings.Cancel;
DialogResult = DialogResult.Cancel;
SetDenyButton(false);
break;
case KryptonButtonBuiltInDisplayString.Collapse:
- Text = KryptonLanguageManager.CustomToolkitStrings.Collapse;
+ Text = KryptonManager.Strings.CustomStrings.Collapse;
break;
case KryptonButtonBuiltInDisplayString.Continue:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Continue;
+ Text = KryptonManager.Strings.GeneralStrings.Continue;
SetAcceptButton(true);
break;
case KryptonButtonBuiltInDisplayString.Close:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Close;
+ Text = KryptonManager.Strings.GeneralStrings.Close;
DialogResult = DialogResult.Cancel;
SetDenyButton(true);
break;
case KryptonButtonBuiltInDisplayString.Yes:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
+ Text = KryptonManager.Strings.GeneralStrings.Yes;
DialogResult = DialogResult.Yes;
SetAcceptButton(true);
break;
case KryptonButtonBuiltInDisplayString.No:
- Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ Text = KryptonManager.Strings.GeneralStrings.No;
DialogResult = DialogResult.No;
SetDenyButton(true);
break;
case KryptonButtonBuiltInDisplayString.Ok:
- Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ Text = KryptonManager.Strings.GeneralStrings.OK;
DialogResult = DialogResult.OK;
SetAcceptButton(true);
break;
case KryptonButtonBuiltInDisplayString.Retry:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
+ Text = KryptonManager.Strings.GeneralStrings.Retry;
DialogResult = DialogResult.Retry;
break;
case KryptonButtonBuiltInDisplayString.Ignore:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore;
+ Text = KryptonManager.Strings.GeneralStrings.Ignore;
DialogResult = DialogResult.Ignore;
break;
case KryptonButtonBuiltInDisplayString.Help:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Help;
+ Text = KryptonManager.Strings.GeneralStrings.Help;
break;
case KryptonButtonBuiltInDisplayString.TryAgain:
- Text = KryptonLanguageManager.GeneralToolkitStrings.TryAgain;
+ Text = KryptonManager.Strings.GeneralStrings.TryAgain;
break;
case KryptonButtonBuiltInDisplayString.Expand:
- Text = KryptonLanguageManager.CustomToolkitStrings.Expand;
+ Text = KryptonManager.Strings.CustomStrings.Expand;
break;
case KryptonButtonBuiltInDisplayString.Today:
- Text = KryptonLanguageManager.GeneralToolkitStrings.Today;
+ Text = KryptonManager.Strings.GeneralStrings.Today;
break;
}
@@ -242,63 +242,63 @@ private void ChangeButtonText(string buttonText)
///
private KryptonButtonBuiltInDisplayString ReturnDisplayString(string buttonText)
{
- if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Abort)
+ if (buttonText == KryptonManager.Strings.GeneralStrings.Abort)
{
return KryptonButtonBuiltInDisplayString.Abort;
}
- else if (buttonText == KryptonLanguageManager.CustomToolkitStrings.Apply)
+ else if (buttonText == KryptonManager.Strings.CustomStrings.Apply)
{
return KryptonButtonBuiltInDisplayString.Apply;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Cancel)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Cancel)
{
return KryptonButtonBuiltInDisplayString.Cancel;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Close)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Close)
{
return KryptonButtonBuiltInDisplayString.Close;
}
- else if (buttonText == KryptonLanguageManager.CustomToolkitStrings.Collapse)
+ else if (buttonText == KryptonManager.Strings.CustomStrings.Collapse)
{
return KryptonButtonBuiltInDisplayString.Collapse;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Continue)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Continue)
{
return KryptonButtonBuiltInDisplayString.Continue;
}
- else if (buttonText == KryptonLanguageManager.CustomToolkitStrings.Expand)
+ else if (buttonText == KryptonManager.Strings.CustomStrings.Expand)
{
return KryptonButtonBuiltInDisplayString.Expand;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Help)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Help)
{
return KryptonButtonBuiltInDisplayString.Help;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Ignore)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Ignore)
{
return KryptonButtonBuiltInDisplayString.Ignore;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.No)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.No)
{
return KryptonButtonBuiltInDisplayString.No;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.OK)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.OK)
{
return KryptonButtonBuiltInDisplayString.Ok;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Retry)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Retry)
{
return KryptonButtonBuiltInDisplayString.Retry;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Today)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Today)
{
return KryptonButtonBuiltInDisplayString.Today;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.TryAgain)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.TryAgain)
{
return KryptonButtonBuiltInDisplayString.TryAgain;
}
- else if (buttonText == KryptonLanguageManager.GeneralToolkitStrings.Yes)
+ else if (buttonText == KryptonManager.Strings.GeneralStrings.Yes)
{
return KryptonButtonBuiltInDisplayString.Yes;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonViewButtons.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonViewButtons.cs
index 9f61e39c7..b4405e215 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonViewButtons.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/General/KryptonViewButtons.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -42,7 +42,7 @@ public partial class KryptonViewButtons : UserControl
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
- if (disposing && (components != null))
+ if (disposing && components != null)
{
components.Dispose();
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Internal/InternalKryptonButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Internal/InternalKryptonButton.cs
index 705a48912..db6758820 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Internal/InternalKryptonButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Internal/InternalKryptonButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -124,24 +124,10 @@ public InternalKryptonButton()
_useAsDialogButton = false;
_useAsUACElevationButton = false;
-
- // Set `CornerRoundingRadius' to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE' (-1)
- CornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE;
}
#endregion
#region Public
- /// Gets or sets the corner rounding radius.
- /// The corner rounding radius.
- [Category(@"Visuals")]
- [Description(@"Gets or sets the corner rounding radius.")]
- [DefaultValue(-1)]
- public float CornerRoundingRadius
- {
- get => StateCommon.Border.Rounding;
-
- set => StateCommon.Border.Rounding = value;
- }
///
/// Gets and sets the automatic resize of the control to fit contents.
@@ -397,7 +383,7 @@ public virtual IKryptonCommand KryptonCommand
/// true if the control should behave as a default button; otherwise false.
public void NotifyDefault(bool value)
{
- if (!ViewDrawButton.IsFixed && (_isDefault != value))
+ if (!ViewDrawButton.IsFixed && _isDefault != value)
{
// Remember new default status
_isDefault = value;
@@ -637,43 +623,43 @@ protected override bool ProcessMnemonic(char charCode)
///
protected override void ContextMenuClosed() => _buttonController.RemoveFixed();
- protected override void OnPaint(PaintEventArgs e)
+ protected override void OnPaint(PaintEventArgs? e)
{
if (_useAsDialogButton)
{
if (DialogResult == DialogResult.Abort)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Abort;
+ Text = KryptonManager.Strings.GeneralStrings.Abort;
}
if (DialogResult == DialogResult.Cancel)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ Text = KryptonManager.Strings.GeneralStrings.Cancel;
}
if (DialogResult == DialogResult.OK)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ Text = KryptonManager.Strings.GeneralStrings.OK;
}
if (DialogResult == DialogResult.Yes)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
+ Text = KryptonManager.Strings.GeneralStrings.Yes;
}
if (DialogResult == DialogResult.No)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ Text = KryptonManager.Strings.GeneralStrings.No;
}
if (DialogResult == DialogResult.Retry)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
+ Text = KryptonManager.Strings.GeneralStrings.Retry;
}
if (DialogResult == DialogResult.Ignore)
{
- Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore;
+ Text = KryptonManager.Strings.GeneralStrings.Ignore;
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Split Button/KryptonSplitButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Split Button/KryptonSplitButton.cs
index 2401037f1..56af3a37d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Split Button/KryptonSplitButton.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/Split Button/KryptonSplitButton.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -208,7 +208,7 @@ protected override void OnPaint(PaintEventArgs e)
int internalBorder = BORDER_SIZE;
- Rectangle focusRectangle = new(internalBorder, internalBorder, bounds.Width - _dropDownRectangle.Width - internalBorder, bounds.Height - (internalBorder * 2));
+ Rectangle focusRectangle = new(internalBorder, internalBorder, bounds.Width - _dropDownRectangle.Width - internalBorder, bounds.Height - internalBorder * 2);
PaletteBase palette = KryptonManager.CurrentGlobalPalette;
@@ -261,7 +261,7 @@ private static void PaintArrow(Graphics graphics, Rectangle rectangle)
{
Point midPoint = new(Convert.ToInt32(rectangle.Left + rectangle.Width / 2), Convert.ToInt32(rectangle.Top + rectangle.Height / 2));
- midPoint.X += (rectangle.Width % 2);
+ midPoint.X += rectangle.Width % 2;
Point[] arrow = new Point[] { new(midPoint.X - 2, midPoint.Y - 1), new(midPoint.X + 3, midPoint.Y - 1), new(midPoint.X, midPoint.Y + 2) };
@@ -305,7 +305,7 @@ private void KryptonContextMenu_Closed(object sender, ToolStripDropDownClosedEve
//if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
//{
- _skipNextOpen = (_dropDownRectangle.Contains(PointToClient(Cursor.Position)));
+ _skipNextOpen = _dropDownRectangle.Contains(PointToClient(Cursor.Position));
//}
}
@@ -319,7 +319,7 @@ private void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEve
if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
{
- _skipNextOpen = (_dropDownRectangle.Contains(PointToClient(Cursor.Position)));
+ _skipNextOpen = _dropDownRectangle.Contains(PointToClient(Cursor.Position));
}
}
#endregion
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion1.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion1.cs
index 23254038e..785174a89 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion1.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion1.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion2.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion2.cs
index 754ec00fe..c1cb435e3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion2.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Controls Toolkit/UAC Buttons/KryptonUACButtonVersion2.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonActionList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonActionList.cs
index 973a3ce5c..7535d8688 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonActionList.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonActionList.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonDesigner.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonDesigner.cs
index 10b817e7c..ef184efa5 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonDesigner.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/Command Links/KryptonCommandLinkButtonDesigner.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedActionList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedActionList.cs
index df17a9f6c..a64f13066 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedActionList.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedActionList.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -201,7 +201,7 @@ public Font StateCommonShortTextFont
/// Gets or sets the font.
/// The font.
- public Font StateCommonLongTextFont
+ public Font? StateCommonLongTextFont
{
get => _button.StateCommon.Content.LongText.Font;
@@ -218,7 +218,7 @@ public Font StateCommonLongTextFont
/// Gets or sets the corner radius.
/// The corner radius.
- [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)]
+ [DefaultValue(-1)]
public float StateCommonCornerRoundingRadius
{
get => _button.StateCommon.Border.Rounding;
@@ -239,15 +239,15 @@ public float StateCommonCornerRoundingRadius
[DefaultValue(false)]
public bool UseAsUACElevatedButton
{
- get => _button.UseAsUACElevationButton;
+ get => _button.Values.UseAsUACElevationButton;
set
{
- if (_button.UseAsUACElevationButton != value)
+ if (_button.Values.UseAsUACElevationButton != value)
{
- _service.OnComponentChanged(_button, null, _button.UseAsUACElevationButton, value);
+ _service.OnComponentChanged(_button, null, _button.Values.UseAsUACElevationButton, value);
- _button.UseAsUACElevationButton = value;
+ _button.Values.UseAsUACElevationButton = value;
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedDesigner.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedDesigner.cs
index 9ba0c7f54..f86fe51d1 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedDesigner.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/General/KryptonDialogButtonExtendedDesigner.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonActionList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonActionList.cs
index e9d8a49fd..3ebaaffc8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonActionList.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonActionList.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonDesigner.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonDesigner.cs
index 407b35d94..a5780ed8b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonDesigner.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Designers/UAC Elevation/KryptonUACButtonDesigner.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/BrowseButtonAction.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/BrowseButtonAction.cs
index c8ba83d1b..55491f4cd 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/BrowseButtonAction.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/BrowseButtonAction.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/KryptonButtonBuiltInDisplayString.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/KryptonButtonBuiltInDisplayString.cs
index 691b6829b..b83a65ba2 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/KryptonButtonBuiltInDisplayString.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/KryptonButtonBuiltInDisplayString.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/UACShieldSize.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/UACShieldSize.cs
index 85a769765..278f206e4 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/UACShieldSize.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Enumerations/UACShieldSize.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/General/OwnerWindowChangedEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/General/OwnerWindowChangedEventArgs.cs
index 50d804c77..ec9415d1f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/General/OwnerWindowChangedEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/General/OwnerWindowChangedEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/UAC Elevation/ExecuteProcessAsAdministratorEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/UAC Elevation/ExecuteProcessAsAdministratorEventArgs.cs
index 1b8f3be5b..7d03b7288 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/UAC Elevation/ExecuteProcessAsAdministratorEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Events/UAC Elevation/ExecuteProcessAsAdministratorEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -104,7 +104,7 @@ private void ElevateProcessWithAdministrativeRights(object objectToElevate, stri
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -138,7 +138,7 @@ public void ElevateProcessWithAdministrativeRights(string processName, string ar
}
catch (Win32Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
return;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Globals/GlobalDeclarations.cs
index 2960c902a..9a46f3eff 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -42,7 +42,7 @@
global using System.Windows.Forms.VisualStyles;
global using Krypton.Toolkit.Suite.Extended.Core;
-global using Krypton.Toolkit.Suite.Extended.Developer.Utilities;
+global using Krypton.Toolkit.Suite.Extended.Debug.Tools;
global using Krypton.Toolkit.Suite.Extended.Shared;
global using Microsoft.Win32;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton - Backup.Toolkit.Suite.Extended.Buttons 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton - Backup.Toolkit.Suite.Extended.Buttons 2022.csproj
new file mode 100644
index 000000000..549b54daf
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton - Backup.Toolkit.Suite.Extended.Buttons 2022.csproj
@@ -0,0 +1,189 @@
+
+
+
+
+
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
+
+
+
+
+
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
+
+
+
+
+
+ library
+ Krypton.Toolkit.Suite.Extended.Buttons
+ Krypton.Toolkit.Suite.Extended.Buttons
+
+ false
+ true
+ en
+ Debug;Release;Nightly;Canary
+ preview
+ enable
+ 6
+ true
+
+
+
+
+
+
+ Krypton.Toolkit.Suite.Extended.Buttons.Canary
+
+
+
+
+
+ Krypton.Toolkit.Suite.Extended.Buttons.Nightly
+
+
+
+
+
+ Krypton.Toolkit.Suite.Extended.Buttons
+
+
+
+
+ Krypton.Toolkit.Suite.Extended.Buttons
+
+
+
+
+
+
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package holds extensions to the KryptonButton controls.
+
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
+ Also, all libraries are included targeting each specific framework version for performance purposes.
+
+ To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ 4.0.0.0
+ True
+
+
+ True
+ 5.0.0.0
+ True
+
+
+ True
+ 6.0.0.0
+ True
+
+
+
+
+
+
+ ..\..\..\Bin\$(configuration)\Krypton.Toolkit.Suite.Extended.Buttons\Krypton.Toolkit.Suite.Extended.Buttons.xml
+ ..\..\..\Bin\$(configuration)\Krypton.Toolkit.Suite.Extended.Buttons\
+ True
+ True
+ StrongKrypton.snk
+ enable
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj
index 34eab00b9..e01ddb2f8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -69,9 +57,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package holds extensions to the KryptonButton controls.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package holds extensions to the KryptonButton controls.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -79,82 +67,44 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
-
+
-
+
@@ -187,6 +137,7 @@
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Buttons/Krypton.Toolkit.Suite.Extended.Buttons.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarColourTable.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarColourTable.cs
index 050dcb79c..a79a87bca 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarColourTable.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarColourTable.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -56,7 +56,7 @@ public static Color FromHex(string hexadecimal)
hexadecimal = hexadecimal.Substring(1);
}
- if (hexadecimal.Length < 3 || hexadecimal.Length > 6)
+ if (hexadecimal.Length is < 3 or > 6)
{
throw new Exception("Hexadecimal value not valid!");
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDay.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDay.cs
index ae81bc5e2..135a3813b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDay.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDay.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -298,7 +298,7 @@ internal void UpdateHighlights()
{
for (int i = 0; i < TimeUnits.Length; i++)
{
- TimeUnits[i].SetHighlighted(TimeUnits[i].CheckHighlighted());
+ TimeUnits[i]?.SetHighlighted(TimeUnits[i]!.CheckHighlighted());
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDayTop.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDayTop.cs
index d852a90d6..857e49f1f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDayTop.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarDayTop.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarHighlightRange.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarHighlightRange.cs
index 8c2be9cd0..8681eefc6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarHighlightRange.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarHighlightRange.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItem.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItem.cs
index 8a96935a3..c132f1001 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItem.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItem.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemAlternative.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemAlternative.cs
index 60e2c95b9..c89a49af9 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemAlternative.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemAlternative.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemCollection.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemCollection.cs
index ffed0e1a0..1d47708c0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemCollection.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarItemCollection.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarKryptonRenderer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarKryptonRenderer.cs
index 4584f3595..cd2ed00ff 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarKryptonRenderer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarKryptonRenderer.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarProfessionalRenderer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarProfessionalRenderer.cs
index 6cfc83ef7..93e9afd1d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarProfessionalRenderer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarProfessionalRenderer.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarRenderer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarRenderer.cs
index 4151e9911..969bc5e4b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarRenderer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarRenderer.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -40,7 +40,7 @@ public class CalendarRenderer
#region Types
///
- /// Possible corners to pass to the method
+ /// Possible corners to pass to the method
///
[Flags()]
public enum Corners
@@ -483,7 +483,7 @@ public GraphicsPath ItemRectangle(CalendarRendererItemBoundsEventArgs evtData, R
evtData.Item != null &&
(evtData.Item.Bounds.Top != evtData.Item.MinuteStartTop ||
evtData.Item.Bounds.Bottom != evtData.Item.MinuteEndTop) &&
- (evtData.Item.MinuteEndTop != 0 && evtData.Item.MinuteStartTop != 0) &&
+ evtData.Item.MinuteEndTop != 0 && evtData.Item.MinuteStartTop != 0 &&
!evtData.Item.IsOnDayTop && evtData.Calendar.DaysMode == CalendarDaysMode.Expanded)
{
/*
@@ -661,7 +661,7 @@ public void PerformLayout(bool performItemsLayout)
if (unit != null)
{
- if (Calendar.TimeUnitsOffset * -1 >= (j + 1))
+ if (Calendar.TimeUnitsOffset * -1 >= j + 1)
{
unit.SetVisible(false);
}
@@ -1683,7 +1683,7 @@ public virtual void OnDrawItems(CalendarRendererEventArgs e)
new CalendarRendererItemEventArgs(e, item),
rects[i],
i == 0 && !item.IsOpenStart,
- (i == rects.Count - 1) && !item.IsOpenEnd);
+ i == rects.Count - 1 && !item.IsOpenEnd);
OnDrawItemShadow(evt);
}
@@ -1735,7 +1735,7 @@ public virtual void OnDrawItems(CalendarRendererEventArgs e)
new CalendarRendererItemEventArgs(e, item),
rects[i],
i == 0 && !item.IsOpenStart,
- (i == rects.Count - 1) && !item.IsOpenEnd);
+ i == rects.Count - 1 && !item.IsOpenEnd);
if (e.Graphics != null)
{
@@ -1769,7 +1769,7 @@ public virtual void OnDrawItem(CalendarRendererItemEventArgs e)
e,
rects[i],
i == 0 && !e.Item.IsOpenStart,
- (i == rects.Count - 1) && !e.Item.IsOpenEnd);
+ i == rects.Count - 1 && !e.Item.IsOpenEnd);
//OnDrawItemShadow(evt);
@@ -1922,11 +1922,11 @@ public virtual void OnDrawItemContent(CalendarRendererItemBoundsEventArgs e)
{
case CalendarItemImageAlign.North:
case CalendarItemImageAlign.South:
- imageBounds.X = e.Item.Bounds.X + ((e.Item.Bounds.Width - imageBounds.Width) / 2);
+ imageBounds.X = e.Item.Bounds.X + (e.Item.Bounds.Width - imageBounds.Width) / 2;
break;
case CalendarItemImageAlign.East:
case CalendarItemImageAlign.West:
- imageBounds.Y = e.Item.Bounds.Y + ((e.Item.Bounds.Height - imageBounds.Height) / 2);
+ imageBounds.Y = e.Item.Bounds.Y + (e.Item.Bounds.Height - imageBounds.Height) / 2;
break;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSelectableElement.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSelectableElement.cs
index 81e511b2c..119338f14 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSelectableElement.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSelectableElement.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSystemRenderer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSystemRenderer.cs
index 74104ff94..b93d25aa8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSystemRenderer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarSystemRenderer.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeScaleUnit.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeScaleUnit.cs
index 79d4ca90a..52ad17fb3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeScaleUnit.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeScaleUnit.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeSpan.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeSpan.cs
index b0cc05860..e38eeeae6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeSpan.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarTimeSpan.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarWeek.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarWeek.cs
index 910cba68f..1b2ca1593 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarWeek.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/CalendarWeek.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/ColourTable.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/ColourTable.cs
index 1b5168dbb..25a7a7a49 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/ColourTable.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/ColourTable.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -208,17 +208,17 @@ public static Color GetDarkColour(Color c, byte d)
byte g = 0;
byte b = 0;
- if ((c.R > d))
+ if (c.R > d)
{
r = (byte)(c.R - d);
}
- if ((c.G > d))
+ if (c.G > d)
{
g = (byte)(c.G - d);
}
- if ((c.B > d))
+ if (c.B > d)
{
b = (byte)(c.B - d);
}
@@ -232,17 +232,17 @@ public static Color GetLightColour(Color c, byte d)
byte g = 255;
byte b = 255;
- if (((int)c.R + (int)d <= 255))
+ if ((int)c.R + (int)d <= 255)
{
r = (byte)(c.R + d);
}
- if (((int)c.G + (int)d <= 255))
+ if ((int)c.G + (int)d <= 255)
{
g = (byte)(c.G + d);
}
- if (((int)c.B + (int)d <= 255))
+ if ((int)c.B + (int)d <= 255)
{
b = (byte)(c.B + d);
}
@@ -263,7 +263,7 @@ public static Color CheckColourFromNameRGB(string inputColour)
{
//named color (string)?
Color NamedColor = Color.FromName(inputColour);
- if ((NamedColor.A == 0 & NamedColor.R == 0 & NamedColor.G == 0 & NamedColor.B == 0))
+ if (NamedColor.A == 0 & NamedColor.R == 0 & NamedColor.G == 0 & NamedColor.B == 0)
{
//is an array?
int r = 0;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewDay.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewDay.cs
index 2f72b857a..319e37006 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewDay.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewDay.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -90,7 +90,7 @@ public MonthView MonthView
///
/// Gets a value indicating if the day instance is visible on the calendar
///
- public bool Visible => !(Grayed && (Date > MonthView.ViewStart && Date < MonthView.ViewEnd));
+ public bool Visible => !(Grayed && Date > MonthView.ViewStart && Date < MonthView.ViewEnd);
#endregion
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewMonth.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewMonth.cs
index d781e10a5..00cce80a9 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewMonth.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Classes/MonthViewMonth.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -61,7 +61,7 @@ internal MonthViewMonth(MonthView monthView, DateTime date)
_monthview = monthView;
_date = date;
- int preDays = (new int[] { 0, 1, 2, 3, 4, 5, 6 })[(int)date.DayOfWeek] - (int)MonthView.FirstDayOfWeek;
+ int preDays = new int[] { 0, 1, 2, 3, 4, 5, 6 }[(int)date.DayOfWeek] - (int)MonthView.FirstDayOfWeek;
days = new MonthViewDay?[6 * 7];
DateTime curDate = date.AddDays(-preDays);
DayHeaders = new string[7];
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendar.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendar.cs
index 66878c018..2a89b42ac 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendar.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendar.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -1087,10 +1087,7 @@ public bool ViewIntersects(CalendarItemAlternative item)
protected override bool IsInputKey(Keys keyData)
{
if (
- keyData == Keys.Down ||
- keyData == Keys.Up ||
- keyData == Keys.Right ||
- keyData == Keys.Left)
+ keyData is Keys.Down or Keys.Up or Keys.Right or Keys.Left)
{
return true;
}
@@ -1339,7 +1336,7 @@ private void TextBox_KeyDown(object sender, KeyEventArgs e)
///
private void UpdateDaysAndWeeks()
{
- TimeSpan span = (new DateTime(ViewEnd.Year, ViewEnd.Month, ViewEnd.Day, 23, 59, 59)).Subtract(ViewStart.Date);
+ TimeSpan span = new DateTime(ViewEnd.Year, ViewEnd.Month, ViewEnd.Day, 23, 59, 59).Subtract(ViewStart.Date);
int preDays = 0;
span = span.Add(new TimeSpan(0, 0, 0, 1, 0));
@@ -1351,7 +1348,7 @@ private void UpdateDaysAndWeeks()
if (span.Days > MaximumFullDays)
{
SetDaysMode(CalendarDaysMode.Short);
- preDays = (new[] { 0, 1, 2, 3, 4, 5, 6 })[(int)ViewStart.DayOfWeek] - (int)FirstDayOfWeek;
+ preDays = new[] { 0, 1, 2, 3, 4, 5, 6 }[(int)ViewStart.DayOfWeek] - (int)FirstDayOfWeek;
span = span.Add(new TimeSpan(preDays, 0, 0, 0));
while (span.Days % 7 != 0)
@@ -1438,7 +1435,7 @@ private void UpdateSelectionElements()
bool reached = false;
for (int i = unitStart.Day.Index; !reached; i++)
{
- for (int j = (i == unitStart.Day.Index ? unitStart.Index : 0); i < Days.Length && j < Days[i]!.TimeUnits.Length; j++)
+ for (int j = i == unitStart.Day.Index ? unitStart.Index : 0; i < Days.Length && j < Days[i]!.TimeUnits.Length; j++)
{
CalendarTimeScaleUnit? unit = Days[i]!.TimeUnits[j];
if (unit != null)
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendarTextBox.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendarTextBox.cs
index 51a3a9e92..94e53f6eb 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendarTextBox.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/KryptonCalendarTextBox.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/MonthView.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/MonthView.cs
index aa5162a2a..d10030592 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/MonthView.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Controls/MonthView.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -561,7 +561,7 @@ private void SetBackwardButtonSelected(bool selected)
///
private void SelectWeek(DateTime hit)
{
- int preDays = (new int[] { 0, 1, 2, 3, 4, 5, 6 })[(int)hit.DayOfWeek] - (int)FirstDayOfWeek;
+ int preDays = new int[] { 0, 1, 2, 3, 4, 5, 6 }[(int)hit.DayOfWeek] - (int)FirstDayOfWeek;
_selectionStart = hit.AddDays(-preDays);
SelectionEnd = SelectionStart.AddDays(6);
@@ -573,7 +573,7 @@ private void SelectWeek(DateTime hit)
///
private void SelectWorkWeek(DateTime hit)
{
- int preDays = (new int[] { 0, 1, 2, 3, 4, 5, 6 })[(int)hit.DayOfWeek] - (int)WorkWeekStart;
+ int preDays = new int[] { 0, 1, 2, 3, 4, 5, 6 }[(int)hit.DayOfWeek] - (int)WorkWeekStart;
_selectionStart = hit.AddDays(-preDays);
SelectionEnd = SelectionStart.AddDays(Math.Abs(WorkWeekStart - WorkWeekEnd));
@@ -658,8 +658,8 @@ private void UpdateMonths()
int calendarsX = Convert.ToInt32(Math.Max(Math.Floor((double)ClientSize.Width / (double)(MonthSize.Width + gapping)), 1.0));
int calendarsY = Convert.ToInt32(Math.Max(Math.Floor((double)ClientSize.Height / (double)(MonthSize.Height + gapping)), 1.0));
int calendars = calendarsX * calendarsY;
- int monthsWidth = (calendarsX * MonthSize.Width) + (calendarsX - 1) * gapping;
- int monthsHeight = (calendarsY * MonthSize.Height) + (calendarsY - 1) * gapping;
+ int monthsWidth = calendarsX * MonthSize.Width + (calendarsX - 1) * gapping;
+ int monthsHeight = calendarsY * MonthSize.Height + (calendarsY - 1) * gapping;
int startX = (ClientSize.Width - monthsWidth) / 2;
int startY = (ClientSize.Height - monthsHeight) / 2;
int curX = startX;
@@ -879,7 +879,7 @@ protected override void OnPaint(PaintEventArgs e)
MonthViewBoxEventArgs evtDay = new MonthViewBoxEventArgs(e.Graphics, day.Bounds, day.Date.Day.ToString(),
StringAlignment.Far,
- day.Grayed ? DayGrayedText : (day.Selected ? DaySelectedTextColour : ForeColor),
+ day.Grayed ? DayGrayedText : day.Selected ? DaySelectedTextColour : ForeColor,
day.Selected ? DaySelectedBackgroundColour : DayBackgroundColour);
if (day.Date.Equals(DateTime.Now.Date))
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarDaysMode.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarDaysMode.cs
index 47c362b06..d1c294521 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarDaysMode.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarDaysMode.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarItemImageAlign.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarItemImageAlign.cs
index a6fb5960e..16ce3cd97 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarItemImageAlign.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarItemImageAlign.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarTimeScale.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarTimeScale.cs
index 259622004..616594011 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarTimeScale.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Enumerations/CalendarTimeScale.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarDayEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarDayEventArgs.cs
index 2c55c44b4..18fd2e4c8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarDayEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarDayEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemCancelEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemCancelEventArgs.cs
index 2608d310b..2a45ba06e 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemCancelEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemCancelEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemEventArgs.cs
index b549c6b0c..c992de314 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarItemEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarLoadEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarLoadEventArgs.cs
index 3e15532fd..8f1d5c881 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarLoadEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarLoadEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererBoxEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererBoxEventArgs.cs
index 0b1af805a..3adfd9539 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererBoxEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererBoxEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererDayEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererDayEventArgs.cs
index 4b3db7e58..4e6878d14 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererDayEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererDayEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererEventArgs.cs
index 54a0e6e6e..e4647b03f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemBoundsEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemBoundsEventArgs.cs
index 6da739c3e..4a194b4ba 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemBoundsEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemBoundsEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemEventArgs.cs
index 2447948fe..6a80cd594 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererItemEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererTimeUnitEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererTimeUnitEventArgs.cs
index 920da4021..fff8c4672 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererTimeUnitEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/CalendarRendererTimeUnitEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewBoxEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewBoxEventArgs.cs
index 59e2e9a29..9c6795ca6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewBoxEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewBoxEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewMontEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewMontEventArgs.cs
index aaa9ed3f6..921a53701 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewMontEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Events/MonthViewMontEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Globals/GlobalDeclarations.cs
index 78c55c7b1..c916f92b0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ICalendarSelectableElement.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ICalendarSelectableElement.cs
index f0156e13e..8726a1adb 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ICalendarSelectableElement.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ICalendarSelectableElement.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ISelectableElement.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ISelectableElement.cs
index 644fad374..fb88ef573 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ISelectableElement.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Interfaces/ISelectableElement.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj
index f6a101efd..520e78a3c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -69,9 +57,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package implements a KryptonCalendar control.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package implements a KryptonCalendar control.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -79,74 +67,36 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Calendar/Krypton.Toolkit.Suite.Extended.Calendar.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HashingHelpers.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HashingHelpers.cs
index 42f8b720f..1e2a021f7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HashingHelpers.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HashingHelpers.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,27 +34,27 @@ public class HashingHelpers
#if !NETCOREAPP3_1_OR_GREATER
public static SupportedHashAlgorithims ReturnHashType(string hashType)
{
- if (hashType == @"MD-5" || hashType == @"md-5" || hashType == @"MD5" || hashType == @"md5")
+ if (hashType is @"MD-5" or @"md-5" or @"MD5" or @"md5")
{
return SupportedHashAlgorithims.MD5;
}
- else if (hashType == @"SHA-1" || hashType == @"sha-1" || hashType == @"SHA1" || hashType == @"sha1")
+ else if (hashType is @"SHA-1" or @"sha-1" or @"SHA1" or @"sha1")
{
return SupportedHashAlgorithims.SHA1;
}
- else if (hashType == @"SHA-256" || hashType == @"sha-256" || hashType == @"SHA256" || hashType == @"sha256")
+ else if (hashType is @"SHA-256" or @"sha-256" or @"SHA256" or @"sha256")
{
return SupportedHashAlgorithims.SHA256;
}
- else if (hashType == @"SHA-384" || hashType == @"sha-384" || hashType == @"SHA384" || hashType == @"sha384")
+ else if (hashType is @"SHA-384" or @"sha-384" or @"SHA384" or @"sha384")
{
return SupportedHashAlgorithims.SHA384;
}
- else if (hashType == @"SHA-512" || hashType == @"sha-512" || hashType == @"SHA512" || hashType == @"sha512")
+ else if (hashType is @"SHA-512" or @"sha-512" or @"SHA512" or @"sha512")
{
return SupportedHashAlgorithims.SHA512;
}
- else if (hashType == @"RIPEMD-160" || hashType == @"ripemd-160" || hashType == @"RIPEMD160" || hashType == @"ripemd160")
+ else if (hashType is @"RIPEMD-160" or @"ripemd-160" or @"RIPEMD160" or @"ripemd160")
{
return SupportedHashAlgorithims.RIPEMD160;
}
@@ -64,23 +64,23 @@ public static SupportedHashAlgorithims ReturnHashType(string hashType)
#else
public static SafeNETCoreAndNewerSupportedHashAlgorithims ReturnHashType(string hashType)
{
- if (hashType == @"MD-5" || hashType == @"md-5" || hashType == @"MD5" || hashType == @"md5")
+ if (hashType is @"MD-5" or @"md-5" or @"MD5" or @"md5")
{
return SafeNETCoreAndNewerSupportedHashAlgorithims.MD5;
}
- else if (hashType == @"SHA-1" || hashType == @"sha-1" || hashType == @"SHA1" || hashType == @"sha1")
+ else if (hashType is @"SHA-1" or @"sha-1" or @"SHA1" or @"sha1")
{
return SafeNETCoreAndNewerSupportedHashAlgorithims.SHA1;
}
- else if (hashType == @"SHA-256" || hashType == @"sha-256" || hashType == @"SHA256" || hashType == @"sha256")
+ else if (hashType is @"SHA-256" or @"sha-256" or @"SHA256" or @"sha256")
{
return SafeNETCoreAndNewerSupportedHashAlgorithims.SHA256;
}
- else if (hashType == @"SHA-384" || hashType == @"sha-384" || hashType == @"SHA384" || hashType == @"sha384")
+ else if (hashType is @"SHA-384" or @"sha-384" or @"SHA384" or @"sha384")
{
return SafeNETCoreAndNewerSupportedHashAlgorithims.SHA384;
}
- else if (hashType == @"SHA-512" || hashType == @"sha-512" || hashType == @"SHA512" || hashType == @"sha512")
+ else if (hashType is @"SHA-512" or @"sha-512" or @"SHA512" or @"sha512")
{
return SafeNETCoreAndNewerSupportedHashAlgorithims.SHA512;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HelperMethods.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HelperMethods.cs
index 83b0a03f8..c8d22dce2 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HelperMethods.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Classes/HelperMethods.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Toolkit/KryptonBrowseBox.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Toolkit/KryptonBrowseBox.cs
index 437883a3f..ee04a7ba9 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Toolkit/KryptonBrowseBox.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Toolkit/KryptonBrowseBox.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonComputeFileCheckSum.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonComputeFileCheckSum.cs
index a9b7f205b..7f2a4ad67 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonComputeFileCheckSum.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonComputeFileCheckSum.cs
@@ -18,7 +18,7 @@ public KryptonComputeFileCheckSum(bool? useAPICodePackFeatures)
CancelButton = kbtnCancel;
- kbtnCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_useAPICodePackFeatures = useAPICodePackFeatures ?? true;
@@ -247,7 +247,7 @@ private void CalculateHash()
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -308,7 +308,7 @@ private void kbtnCalculate_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
@@ -348,7 +348,7 @@ private void kbtnCancel_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
}
@@ -358,7 +358,7 @@ private void kbtnCancel_Click(object sender, EventArgs e)
private void bgwMD5_DoWork(object sender, DoWorkEventArgs e)
{
- string filePath = e.Argument.ToString();
+ string? filePath = e.Argument?.ToString();
byte[] buffer;
@@ -366,28 +366,31 @@ private void bgwMD5_DoWork(object sender, DoWorkEventArgs e)
long size, totalBytesRead = 0;
- using (Stream file = File.OpenRead(filePath))
+ if (filePath != null)
{
- size = file.Length;
-
- using (HashAlgorithm hasher = MD5.Create())
+ using (Stream file = File.OpenRead(filePath))
{
- do
+ size = file.Length;
+
+ using (HashAlgorithm hasher = MD5.Create())
{
- buffer = new byte[4096];
+ do
+ {
+ buffer = new byte[4096];
- bytesRead = file.Read(buffer, 0, buffer.Length);
+ bytesRead = file.Read(buffer, 0, buffer.Length);
- totalBytesRead += bytesRead;
+ totalBytesRead += bytesRead;
- hasher.TransformBlock(buffer, 0, bytesRead, null, 0);
+ hasher.TransformBlock(buffer, 0, bytesRead, null, 0);
- bgwMD5.ReportProgress((int)((double)totalBytesRead / size * 100));
- } while (bytesRead != 0);
+ bgwMD5.ReportProgress((int)((double)totalBytesRead / size * 100));
+ } while (bytesRead != 0);
- hasher.TransformFinalBlock(buffer, 0, 0);
+ hasher.TransformFinalBlock(buffer, 0, 0);
- e.Result = HashingHelpers.BuildMD5HashString(hasher.Hash);
+ e.Result = HashingHelpers.BuildMD5HashString(hasher.Hash);
+ }
}
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonVerifyFileCheckSum.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonVerifyFileCheckSum.cs
index 340b38abf..57f66e0fe 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonVerifyFileCheckSum.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Controls Visuals/KryptonVerifyFileCheckSum.cs
@@ -1,4 +1,6 @@
-namespace Krypton.Toolkit.Suite.Extended.CheckSum.Tools
+// ToDo: Add license
+
+namespace Krypton.Toolkit.Suite.Extended.CheckSum.Tools
{
public partial class KryptonVerifyFileCheckSum : KryptonForm
{
@@ -20,7 +22,7 @@ public KryptonVerifyFileCheckSum(bool? useAPICodePackFeatures)
CancelButton = kbtnCancel;
- kbtnCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_useAPICodePackFeatures = useAPICodePackFeatures ?? true;
@@ -104,7 +106,7 @@ private void CalculateHash()
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -165,7 +167,7 @@ private void kbtnCalculate_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
@@ -208,7 +210,7 @@ private void kbtnCancel_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
}
@@ -236,7 +238,7 @@ private void ImportCheckSumFromFile(string filePath)
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SafeNETCoreAndNewerSupportedHashAlgorithims.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SafeNETCoreAndNewerSupportedHashAlgorithims.cs
index 2b413cf27..d68c582be 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SafeNETCoreAndNewerSupportedHashAlgorithims.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SafeNETCoreAndNewerSupportedHashAlgorithims.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SupportedHashAlgorithims.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SupportedHashAlgorithims.cs
index acc7b98b1..3d40d1831 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SupportedHashAlgorithims.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Enumerations/SupportedHashAlgorithims.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Globals/GlobalDeclarations.cs
index 7266400fc..373adbff3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,7 +34,7 @@
global using System.Windows.Forms;
global using Krypton.Toolkit.Suite.Extended.CheckSum.Tools.Properties;
-global using Krypton.Toolkit.Suite.Extended.Developer.Utilities;
+global using Krypton.Toolkit.Suite.Extended.Debug.Tools;
global using Microsoft.WindowsAPICodePack.Dialogs;
global using Microsoft.WindowsAPICodePack.Taskbar;
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj
index 341636346..1b64f967f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/Krypton.Toolkit.Suite.Extended.CheckSum.Tools 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package holds utilities to compute and verify checksums.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package holds utilities to compute and verify checksums.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,74 +69,36 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
@@ -178,6 +128,7 @@
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonComputeFileCheckSumOld.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonComputeFileCheckSumOld.cs
index a55884334..83f3306b1 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonComputeFileCheckSumOld.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonComputeFileCheckSumOld.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -79,15 +79,15 @@ private void InitializeComponent()
this.bgSHA512Hash = new System.ComponentModel.BackgroundWorker();
this.bgRIPEMD160Hash = new System.ComponentModel.BackgroundWorker();
this.statusStrip1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1.Panel).BeginInit();
this.kryptonGroupBox1.Panel.SuspendLayout();
this.kryptonGroupBox1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbAlgorithimType)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbAlgorithimType).BeginInit();
this.SuspendLayout();
//
// statusStrip1
@@ -141,7 +141,6 @@ private void InitializeComponent()
//
// kbtnSaveToFile
//
- this.kbtnSaveToFile.CornerRoundingRadius = -1F;
this.kbtnSaveToFile.Enabled = false;
this.kbtnSaveToFile.Location = new System.Drawing.Point(507, 12);
this.kbtnSaveToFile.Name = "kbtnSaveToFile";
@@ -152,7 +151,6 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.CornerRoundingRadius = -1F;
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new System.Drawing.Point(603, 12);
this.kbtnCancel.Name = "kbtnCancel";
@@ -190,7 +188,7 @@ private void InitializeComponent()
this.kbbFilePath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;
this.kbbFilePath.CueHint.CueHintText = "Type a file path here...";
this.kbbFilePath.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.kbbFilePath.LargeResetImage = ((System.Drawing.Image)(resources.GetObject("kbbFilePath.LargeResetImage")));
+ this.kbbFilePath.LargeResetImage = (System.Drawing.Image)resources.GetObject("kbbFilePath.LargeResetImage");
this.kbbFilePath.Location = new System.Drawing.Point(82, 12);
this.kbbFilePath.Name = "kbbFilePath";
this.kbbFilePath.ResetText = null;
@@ -198,7 +196,7 @@ private void InitializeComponent()
this.kbbFilePath.ResetTextToolTipHeading = null;
this.kbbFilePath.ShowResetButton = true;
this.kbbFilePath.Size = new System.Drawing.Size(614, 24);
- this.kbbFilePath.SmallResetImage = ((System.Drawing.Image)(resources.GetObject("kbbFilePath.SmallResetImage")));
+ this.kbbFilePath.SmallResetImage = (System.Drawing.Image)resources.GetObject("kbbFilePath.SmallResetImage");
this.kbbFilePath.TabIndex = 11;
//
// kryptonGroupBox1
@@ -217,18 +215,17 @@ private void InitializeComponent()
//
this.kwlHash.AutoSize = false;
this.kwlHash.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kwlHash.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.kwlHash.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
+ this.kwlHash.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, (byte)0);
+ this.kwlHash.ForeColor = System.Drawing.Color.FromArgb((int)(byte)30, (int)(byte)57, (int)(byte)91);
this.kwlHash.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl;
this.kwlHash.Location = new System.Drawing.Point(0, 0);
this.kwlHash.Name = "kwlHash";
this.kwlHash.Size = new System.Drawing.Size(680, 71);
- this.kwlHash.StateCommon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kwlHash.StateCommon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kwlHash.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// kbtnCompute
//
- this.kbtnCompute.CornerRoundingRadius = -1F;
this.kbtnCompute.Enabled = false;
this.kbtnCompute.Location = new System.Drawing.Point(255, 59);
this.kbtnCompute.Name = "kbtnCompute";
@@ -239,7 +236,6 @@ private void InitializeComponent()
//
// kcmbAlgorithimType
//
- this.kcmbAlgorithimType.CornerRoundingRadius = -1F;
this.kcmbAlgorithimType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbAlgorithimType.DropDownWidth = 121;
this.kcmbAlgorithimType.Enabled = false;
@@ -333,17 +329,17 @@ private void InitializeComponent()
this.Text = "Calculate CheckSum";
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1.Panel).EndInit();
this.kryptonGroupBox1.Panel.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1).EndInit();
this.kryptonGroupBox1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kcmbAlgorithimType)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbAlgorithimType).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -385,7 +381,7 @@ private void kbtnCompute_Click(object sender, EventArgs e)
}
catch (Exception ex)
{
- ExceptionCapture.CaptureException(ex);
+ DebugUtilities.NotImplemented(ex.ToString());
}
}
@@ -401,7 +397,7 @@ private void CalculateHash()
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -441,7 +437,7 @@ private void kbtnCancel_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
}
@@ -807,7 +803,7 @@ private void SaveHashToFile(string text, bool toUpper)
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -831,7 +827,7 @@ private void WriteToFile(string fileName, string text, bool toUpper)
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonVarifyFileCheckSumOld.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonVarifyFileCheckSumOld.cs
index aac814d55..e9318827c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonVarifyFileCheckSumOld.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.CheckSum.Tools/UX/KryptonVarifyFileCheckSumOld.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -96,20 +96,20 @@ private void InitializeComponent()
this.bgSHA1Hash = new System.ComponentModel.BackgroundWorker();
this.bgMD5Hash = new System.ComponentModel.BackgroundWorker();
this.kbbFilePath = new Krypton.Toolkit.Suite.Extended.CheckSum.Tools.KryptonBrowseBox();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox2).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox2.Panel).BeginInit();
this.kryptonGroupBox2.Panel.SuspendLayout();
this.kryptonGroupBox2.SuspendLayout();
this.cmsCheckSumValidation.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1.Panel).BeginInit();
this.kryptonGroupBox1.Panel.SuspendLayout();
this.kryptonGroupBox1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbAlgorithimType)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbAlgorithimType).BeginInit();
this.ss.SuspendLayout();
this.SuspendLayout();
//
@@ -128,7 +128,6 @@ private void InitializeComponent()
//
// kbtnValidate
//
- this.kbtnValidate.CornerRoundingRadius = -1F;
this.kbtnValidate.Enabled = false;
this.kbtnValidate.Location = new System.Drawing.Point(511, 13);
this.kbtnValidate.Name = "kbtnValidate";
@@ -139,7 +138,6 @@ private void InitializeComponent()
//
// kbtnImportHash
//
- this.kbtnImportHash.CornerRoundingRadius = -1F;
this.kbtnImportHash.Enabled = false;
this.kbtnImportHash.Location = new System.Drawing.Point(13, 13);
this.kbtnImportHash.Name = "kbtnImportHash";
@@ -150,7 +148,6 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.CornerRoundingRadius = -1F;
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new System.Drawing.Point(607, 13);
this.kbtnCancel.Name = "kbtnCancel";
@@ -203,7 +200,7 @@ private void InitializeComponent()
this.ktxtVarifyCheckSum.Location = new System.Drawing.Point(6, 23);
this.ktxtVarifyCheckSum.Name = "ktxtVarifyCheckSum";
this.ktxtVarifyCheckSum.Size = new System.Drawing.Size(665, 24);
- this.ktxtVarifyCheckSum.StateCommon.Content.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.ktxtVarifyCheckSum.StateCommon.Content.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.ktxtVarifyCheckSum.TabIndex = 0;
this.ktxtVarifyCheckSum.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.ktxtVarifyCheckSum.TextChanged += new System.EventHandler(this.ktxtVarifyCheckSum_TextChanged);
@@ -253,18 +250,17 @@ private void InitializeComponent()
//
this.kwlCalculatedCheckSum.AutoSize = false;
this.kwlCalculatedCheckSum.Dock = System.Windows.Forms.DockStyle.Fill;
- this.kwlCalculatedCheckSum.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.kwlCalculatedCheckSum.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91)))));
+ this.kwlCalculatedCheckSum.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, (byte)0);
+ this.kwlCalculatedCheckSum.ForeColor = System.Drawing.Color.FromArgb((int)(byte)30, (int)(byte)57, (int)(byte)91);
this.kwlCalculatedCheckSum.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl;
this.kwlCalculatedCheckSum.Location = new System.Drawing.Point(0, 0);
this.kwlCalculatedCheckSum.Name = "kwlCalculatedCheckSum";
this.kwlCalculatedCheckSum.Size = new System.Drawing.Size(680, 71);
- this.kwlCalculatedCheckSum.StateCommon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kwlCalculatedCheckSum.StateCommon.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kwlCalculatedCheckSum.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// kbtnCompute
//
- this.kbtnCompute.CornerRoundingRadius = -1F;
this.kbtnCompute.Enabled = false;
this.kbtnCompute.Location = new System.Drawing.Point(256, 63);
this.kbtnCompute.Name = "kbtnCompute";
@@ -275,7 +271,6 @@ private void InitializeComponent()
//
// kcmbAlgorithimType
//
- this.kcmbAlgorithimType.CornerRoundingRadius = -1F;
this.kcmbAlgorithimType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbAlgorithimType.DropDownWidth = 121;
this.kcmbAlgorithimType.Enabled = false;
@@ -387,7 +382,7 @@ private void InitializeComponent()
this.kbbFilePath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;
this.kbbFilePath.CueHint.CueHintText = "Type a file path here...";
this.kbbFilePath.CueHint.Padding = new System.Windows.Forms.Padding(0);
- this.kbbFilePath.LargeResetImage = ((System.Drawing.Image)(resources.GetObject("kbbFilePath.LargeResetImage")));
+ this.kbbFilePath.LargeResetImage = (System.Drawing.Image)resources.GetObject("kbbFilePath.LargeResetImage");
this.kbbFilePath.Location = new System.Drawing.Point(83, 13);
this.kbbFilePath.Name = "kbbFilePath";
this.kbbFilePath.ResetText = null;
@@ -395,7 +390,7 @@ private void InitializeComponent()
this.kbbFilePath.ResetTextToolTipHeading = null;
this.kbbFilePath.ShowResetButton = true;
this.kbbFilePath.Size = new System.Drawing.Size(614, 24);
- this.kbbFilePath.SmallResetImage = ((System.Drawing.Image)(resources.GetObject("kbbFilePath.SmallResetImage")));
+ this.kbbFilePath.SmallResetImage = (System.Drawing.Image)resources.GetObject("kbbFilePath.SmallResetImage");
this.kbbFilePath.TabIndex = 12;
//
// KryptonVarifyFileCheckSum
@@ -411,23 +406,23 @@ private void InitializeComponent()
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Text = "Varify File CheckSum";
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox2.Panel).EndInit();
this.kryptonGroupBox2.Panel.ResumeLayout(false);
this.kryptonGroupBox2.Panel.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox2).EndInit();
this.kryptonGroupBox2.ResumeLayout(false);
this.cmsCheckSumValidation.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1.Panel).EndInit();
this.kryptonGroupBox1.Panel.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonGroupBox1).EndInit();
this.kryptonGroupBox1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kcmbAlgorithimType)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbAlgorithimType).EndInit();
this.ss.ResumeLayout(false);
this.ss.PerformLayout();
this.ResumeLayout(false);
@@ -747,7 +742,7 @@ private void kbtnCompute_Click(object sender, EventArgs e)
}
catch (Exception ex)
{
- ExceptionCapture.CaptureException(ex);
+ DebugUtilities.NotImplemented(ex.ToString());
}
}
@@ -782,7 +777,7 @@ private void kbtnImportHash_Click(object sender, EventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
@@ -829,7 +824,7 @@ private void CalculateHash()
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Controls/CircularProgressBar.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Controls/CircularProgressBar.cs
index 5094388f3..f8fa6f2f4 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Controls/CircularProgressBar.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Controls/CircularProgressBar.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -25,6 +25,8 @@
*/
#endregion
+using DebugUtilities = Krypton.Toolkit.Suite.Extended.Debug.Tools.DebugUtilities;
+
namespace Krypton.Toolkit.Suite.Extended.Circular.ProgressBar
{
/// The circular progress bar windows form control.
@@ -34,7 +36,7 @@ namespace Krypton.Toolkit.Suite.Extended.Circular.ProgressBar
public class CircularProgressBar : System.Windows.Forms.ProgressBar
{
#region Variables
- private readonly Animator _animator;
+ private readonly Animator? _animator;
private int? _animatedStartAngle;
private float? _animatedValue;
private AnimationFunctions.Function _animationFunction;
@@ -270,7 +272,7 @@ public CircularProgressBar()
Size = new Size(320, 320);
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint += new EventHandler(OnPalettePaint);
}
@@ -333,7 +335,7 @@ protected virtual void InitialiseContinues(bool firstTime)
_lastValue = Value;
- _animator.Stop();
+ _animator?.Stop();
_animatedStartAngle = null;
if (AnimationSpeed <= 0)
@@ -344,7 +346,7 @@ protected virtual void InitialiseContinues(bool firstTime)
return;
}
- _animator.Paths =
+ _animator!.Paths =
new Path(_animatedValue ?? Value, Value, (ulong)AnimationSpeed, CustomAnimationFunction).ToArray();
_animator.Repeat = false;
_animator.Play(
@@ -371,14 +373,14 @@ protected virtual void InitialiseContinues(bool firstTime)
protected virtual void InitialiseMarquee(bool firstTime)
{
if (!firstTime &&
- (_animator.ActivePath == null ||
+ (_animator?.ActivePath == null ||
_animator.ActivePath.Duration == (ulong)MarqueeAnimationSpeed &&
_animator.ActivePath.Function == CustomAnimationFunction))
{
return;
}
- _animator.Stop();
+ _animator?.Stop();
_animatedValue = null;
if (AnimationSpeed <= 0)
@@ -389,7 +391,7 @@ protected virtual void InitialiseMarquee(bool firstTime)
return;
}
- _animator.Paths = new Path(0, 359, (ulong)MarqueeAnimationSpeed, CustomAnimationFunction).ToArray();
+ _animator!.Paths = new Path(0, 359, (ulong)MarqueeAnimationSpeed, CustomAnimationFunction).ToArray();
_animator.Repeat = true;
_animator.Play(
new SafeInvoker(
@@ -429,7 +431,7 @@ protected virtual void RecreateBackgroundBrush()
{
lock (this)
{
- _backBrush?.Dispose();
+ _backBrush.Dispose();
_backBrush = new SolidBrush(BackColor);
if (BackColor.A == 255)
@@ -679,7 +681,7 @@ protected override void OnPaint(PaintEventArgs e)
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
@@ -734,13 +736,13 @@ private void InitialiseKrypton()
private void OnGlobalPaletteChanged(object sender, EventArgs e)
{
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint -= new EventHandler(OnPalettePaint);
}
_palette = KryptonManager.CurrentGlobalPalette;
_paletteRedirect.Target = _palette;
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint += new EventHandler(OnPalettePaint);
InitialiseKrypton();
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Events/ValueChangedEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Events/ValueChangedEventArgs.cs
index 76b8595e4..c4e035cb2 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Events/ValueChangedEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Events/ValueChangedEventArgs.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Globals/GlobalDeclarations.cs
index 2082cd5ca..85247aa3f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj
index 717cc1952..da3476815 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package holds the circular progressbar control.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package holds the circular progressbar control.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,74 +69,36 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
@@ -184,6 +134,7 @@
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.CircularProgress.Bar.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.CircularProgress.Bar.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.CircularProgress.Bar.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Circular.ProgressBar/Krypton.Toolkit.Suite.Extended.CircularProgress.Bar.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Classes/Internal/WIN32.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Classes/Internal/WIN32.cs
index 04b1a7b95..c71e37a8a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Classes/Internal/WIN32.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Classes/Internal/WIN32.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,38 +27,38 @@
namespace Krypton.Toolkit.Suite.Extended.ComboBox
{
- internal class WIN32
+ internal class Win32
{
/*
* GetWindow() Constants
*/
- public const int GW_HWNDFIRST = 0;
- public const int GW_HWNDLAST = 1;
- public const int GW_HWNDNEXT = 2;
- public const int GW_HWNDPREV = 3;
- public const int GW_OWNER = 4;
- public const int GW_CHILD = 5;
-
- public const int WM_NCCALCSIZE = 0x83;
- public const int WM_WINDOWPOSCHANGING = 0x46;
- public const int WM_PAINT = 0xF;
- public const int WM_CREATE = 0x1;
- public const int WM_NCCREATE = 0x81;
- public const int WM_NCPAINT = 0x85;
- public const int WM_PRINT = 0x317;
- public const int WM_DESTROY = 0x2;
- public const int WM_SHOWWINDOW = 0x18;
- public const int WM_SHARED_MENU = 0x1E2;
- public const int WH_CALLWNDPROC = 4;
- public const int WM_PARENTNOTIFY = 0x210;
- public const int WM_HSCROLL = 0x114;
- public const int WM_NCHITTEST = 0x84;
- public const int WM_ERASEBKGND = 0x0014; // WM_ERASEBKGND message
-
- public const int HC_ACTION = 0;
- public const int GWL_WNDPROC = -4;
-
- public WIN32()
+ public const int GwHwndfirst = 0;
+ public const int GwHwndlast = 1;
+ public const int GwHwndnext = 2;
+ public const int GwHwndprev = 3;
+ public const int GwOwner = 4;
+ public const int GwChild = 5;
+
+ public const int WmNccalcsize = 0x83;
+ public const int WmWindowposchanging = 0x46;
+ public const int WmPaint = 0xF;
+ public const int WmCreate = 0x1;
+ public const int WmNccreate = 0x81;
+ public const int WmNcpaint = 0x85;
+ public const int WmPrint = 0x317;
+ public const int WmDestroy = 0x2;
+ public const int WmShowwindow = 0x18;
+ public const int WmSharedMenu = 0x1E2;
+ public const int WhCallwndproc = 4;
+ public const int WmParentnotify = 0x210;
+ public const int WmHscroll = 0x114;
+ public const int WmNchittest = 0x84;
+ public const int WmErasebkgnd = 0x0014; // WM_ERASEBKGND message
+
+ public const int HcAction = 0;
+ public const int GwlWndproc = -4;
+
+ public Win32()
{
//
// TODO: Add constructor logic here
@@ -73,7 +73,7 @@ public WIN32()
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]
- public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
+ public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
@@ -89,7 +89,7 @@ IntPtr hWndNewNext // handle to next window
public static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgnclip, uint fdwOptions);
[DllImport("user32.dll")]
- public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);
+ public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDc);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
@@ -108,13 +108,13 @@ IntPtr hWndNewNext // handle to next window
public static extern bool IsWindowVisible(IntPtr hwnd);
[DllImport("user32", CharSet = CharSet.Auto)]
- public static extern int GetClientRect(IntPtr hwnd, ref RECT lpRect);
+ public static extern int GetClientRect(IntPtr hwnd, ref Rect lpRect);
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern int GetClientRect(IntPtr hwnd, [In, Out] ref Rectangle rect);
[DllImport("user32", CharSet = CharSet.Auto)]
- public static extern bool MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
+ public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, bool bRepaint);
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool UpdateWindow(IntPtr hwnd);
@@ -141,7 +141,7 @@ IntPtr hWndNewNext // handle to next window
public static extern int SetWindowTheme(IntPtr hWnd, int pszSubAppName, int pszSubIdList);
[StructLayout(LayoutKind.Sequential)]
- public struct RECT
+ public struct Rect
{
public int Left;
public int Top;
@@ -150,7 +150,7 @@ public struct RECT
}
[StructLayout(LayoutKind.Sequential)]
- public struct WINDOWPOS
+ public struct Windowpos
{
public IntPtr hwnd;
public IntPtr hwndAfter;
@@ -162,10 +162,10 @@ public struct WINDOWPOS
}
[StructLayout(LayoutKind.Sequential)]
- public struct NCCALCSIZE_PARAMS
+ public struct NccalcsizeParams
{
- public RECT rgc;
- public WINDOWPOS wndpos;
+ public Rect rgc;
+ public Windowpos wndpos;
}
}
@@ -174,215 +174,215 @@ public struct NCCALCSIZE_PARAMS
///
public enum Msgs
{
- WM_NULL = 0x0000,
- WM_CREATE = 0x0001,
- WM_DESTROY = 0x0002,
- WM_MOVE = 0x0003,
- WM_SIZE = 0x0005,
- WM_ACTIVATE = 0x0006,
- WM_SETFOCUS = 0x0007,
- WM_KILLFOCUS = 0x0008,
- WM_ENABLE = 0x000A,
- WM_SETREDRAW = 0x000B,
- WM_SETTEXT = 0x000C,
- WM_GETTEXT = 0x000D,
- WM_GETTEXTLENGTH = 0x000E,
- WM_PAINT = 0x000F,
- WM_CLOSE = 0x0010,
- WM_QUERYENDSESSION = 0x0011,
- WM_QUIT = 0x0012,
- WM_QUERYOPEN = 0x0013,
- WM_ERASEBKGND = 0x0014,
- WM_SYSCOLORCHANGE = 0x0015,
- WM_ENDSESSION = 0x0016,
- WM_SHOWWINDOW = 0x0018,
- WM_WININICHANGE = 0x001A,
- WM_SETTINGCHANGE = 0x001A,
- WM_DEVMODECHANGE = 0x001B,
- WM_ACTIVATEAPP = 0x001C,
- WM_FONTCHANGE = 0x001D,
- WM_TIMECHANGE = 0x001E,
- WM_CANCELMODE = 0x001F,
- WM_SETCURSOR = 0x0020,
- WM_MOUSEACTIVATE = 0x0021,
- WM_CHILDACTIVATE = 0x0022,
- WM_QUEUESYNC = 0x0023,
- WM_GETMINMAXINFO = 0x0024,
- WM_PAINTICON = 0x0026,
- WM_ICONERASEBKGND = 0x0027,
- WM_NEXTDLGCTL = 0x0028,
- WM_SPOOLERSTATUS = 0x002A,
- WM_DRAWITEM = 0x002B,
- WM_MEASUREITEM = 0x002C,
- WM_DELETEITEM = 0x002D,
- WM_VKEYTOITEM = 0x002E,
- WM_CHARTOITEM = 0x002F,
- WM_SETFONT = 0x0030,
- WM_GETFONT = 0x0031,
- WM_SETHOTKEY = 0x0032,
- WM_GETHOTKEY = 0x0033,
- WM_QUERYDRAGICON = 0x0037,
- WM_COMPAREITEM = 0x0039,
- WM_GETOBJECT = 0x003D,
- WM_COMPACTING = 0x0041,
- WM_COMMNOTIFY = 0x0044,
- WM_WINDOWPOSCHANGING = 0x0046,
- WM_WINDOWPOSCHANGED = 0x0047,
- WM_POWER = 0x0048,
- WM_COPYDATA = 0x004A,
- WM_CANCELJOURNAL = 0x004B,
- WM_NOTIFY = 0x004E,
- WM_INPUTLANGCHANGEREQUEST = 0x0050,
- WM_INPUTLANGCHANGE = 0x0051,
- WM_TCARD = 0x0052,
- WM_HELP = 0x0053,
- WM_USERCHANGED = 0x0054,
- WM_NOTIFYFORMAT = 0x0055,
- WM_CONTEXTMENU = 0x007B,
- WM_STYLECHANGING = 0x007C,
- WM_STYLECHANGED = 0x007D,
- WM_DISPLAYCHANGE = 0x007E,
- WM_GETICON = 0x007F,
- WM_SETICON = 0x0080,
- WM_NCCREATE = 0x0081,
- WM_NCDESTROY = 0x0082,
- WM_NCCALCSIZE = 0x0083,
- WM_NCHITTEST = 0x0084,
- WM_NCPAINT = 0x0085,
- WM_NCACTIVATE = 0x0086,
- WM_GETDLGCODE = 0x0087,
- WM_SYNCPAINT = 0x0088,
- WM_NCMOUSEMOVE = 0x00A0,
- WM_NCLBUTTONDOWN = 0x00A1,
- WM_NCLBUTTONUP = 0x00A2,
- WM_NCLBUTTONDBLCLK = 0x00A3,
- WM_NCRBUTTONDOWN = 0x00A4,
- WM_NCRBUTTONUP = 0x00A5,
- WM_NCRBUTTONDBLCLK = 0x00A6,
- WM_NCMBUTTONDOWN = 0x00A7,
- WM_NCMBUTTONUP = 0x00A8,
- WM_NCMBUTTONDBLCLK = 0x00A9,
- WM_NCXBUTTONDOWN = 0x00AB,
- WM_NCXBUTTONUP = 0x00AC,
- WM_KEYDOWN = 0x0100,
- WM_KEYUP = 0x0101,
- WM_CHAR = 0x0102,
- WM_DEADCHAR = 0x0103,
- WM_SYSKEYDOWN = 0x0104,
- WM_SYSKEYUP = 0x0105,
- WM_SYSCHAR = 0x0106,
- WM_SYSDEADCHAR = 0x0107,
- WM_KEYLAST = 0x0108,
- WM_IME_STARTCOMPOSITION = 0x010D,
- WM_IME_ENDCOMPOSITION = 0x010E,
- WM_IME_COMPOSITION = 0x010F,
- WM_IME_KEYLAST = 0x010F,
- WM_INITDIALOG = 0x0110,
- WM_COMMAND = 0x0111,
- WM_SYSCOMMAND = 0x0112,
- WM_TIMER = 0x0113,
- WM_HSCROLL = 0x0114,
- WM_VSCROLL = 0x0115,
- WM_INITMENU = 0x0116,
- WM_INITMENUPOPUP = 0x0117,
- WM_MENUSELECT = 0x011F,
- WM_MENUCHAR = 0x0120,
- WM_ENTERIDLE = 0x0121,
- WM_MENURBUTTONUP = 0x0122,
- WM_MENUDRAG = 0x0123,
- WM_MENUGETOBJECT = 0x0124,
- WM_UNINITMENUPOPUP = 0x0125,
- WM_MENUCOMMAND = 0x0126,
- WM_CTLCOLORMSGBOX = 0x0132,
- WM_CTLCOLOREDIT = 0x0133,
- WM_CTLCOLORLISTBOX = 0x0134,
- WM_CTLCOLORBTN = 0x0135,
- WM_CTLCOLORDLG = 0x0136,
- WM_CTLCOLORSCROLLBAR = 0x0137,
- WM_CTLCOLORSTATIC = 0x0138,
- WM_MOUSEMOVE = 0x0200,
- WM_LBUTTONDOWN = 0x0201,
- WM_LBUTTONUP = 0x0202,
- WM_LBUTTONDBLCLK = 0x0203,
- WM_RBUTTONDOWN = 0x0204,
- WM_RBUTTONUP = 0x0205,
- WM_RBUTTONDBLCLK = 0x0206,
- WM_MBUTTONDOWN = 0x0207,
- WM_MBUTTONUP = 0x0208,
- WM_MBUTTONDBLCLK = 0x0209,
- WM_MOUSEWHEEL = 0x020A,
- WM_XBUTTONDOWN = 0x020B,
- WM_XBUTTONUP = 0x020C,
- WM_XBUTTONDBLCLK = 0x020D,
- WM_PARENTNOTIFY = 0x0210,
- WM_ENTERMENULOOP = 0x0211,
- WM_EXITMENULOOP = 0x0212,
- WM_NEXTMENU = 0x0213,
- WM_SIZING = 0x0214,
- WM_CAPTURECHANGED = 0x0215,
- WM_MOVING = 0x0216,
- WM_DEVICECHANGE = 0x0219,
- WM_MDICREATE = 0x0220,
- WM_MDIDESTROY = 0x0221,
- WM_MDIACTIVATE = 0x0222,
- WM_MDIRESTORE = 0x0223,
- WM_MDINEXT = 0x0224,
- WM_MDIMAXIMIZE = 0x0225,
- WM_MDITILE = 0x0226,
- WM_MDICASCADE = 0x0227,
- WM_MDIICONARRANGE = 0x0228,
- WM_MDIGETACTIVE = 0x0229,
- WM_MDISETMENU = 0x0230,
- WM_ENTERSIZEMOVE = 0x0231,
- WM_EXITSIZEMOVE = 0x0232,
- WM_DROPFILES = 0x0233,
- WM_MDIREFRESHMENU = 0x0234,
- WM_IME_SETCONTEXT = 0x0281,
- WM_IME_NOTIFY = 0x0282,
- WM_IME_CONTROL = 0x0283,
- WM_IME_COMPOSITIONFULL = 0x0284,
- WM_IME_SELECT = 0x0285,
- WM_IME_CHAR = 0x0286,
- WM_IME_REQUEST = 0x0288,
- WM_IME_KEYDOWN = 0x0290,
- WM_IME_KEYUP = 0x0291,
- WM_MOUSEHOVER = 0x02A1,
- WM_MOUSELEAVE = 0x02A3,
- WM_CUT = 0x0300,
- WM_COPY = 0x0301,
- WM_PASTE = 0x0302,
- WM_CLEAR = 0x0303,
- WM_UNDO = 0x0304,
- WM_RENDERFORMAT = 0x0305,
- WM_RENDERALLFORMATS = 0x0306,
- WM_DESTROYCLIPBOARD = 0x0307,
- WM_DRAWCLIPBOARD = 0x0308,
- WM_PAINTCLIPBOARD = 0x0309,
- WM_VSCROLLCLIPBOARD = 0x030A,
- WM_SIZECLIPBOARD = 0x030B,
- WM_ASKCBFORMATNAME = 0x030C,
- WM_CHANGECBCHAIN = 0x030D,
- WM_HSCROLLCLIPBOARD = 0x030E,
- WM_QUERYNEWPALETTE = 0x030F,
- WM_PALETTEISCHANGING = 0x0310,
- WM_PALETTECHANGED = 0x0311,
- WM_HOTKEY = 0x0312,
- WM_PRINT = 0x0317,
- WM_PRINTCLIENT = 0x0318,
- WM_HANDHELDFIRST = 0x0358,
- WM_HANDHELDLAST = 0x035F,
- WM_AFXFIRST = 0x0360,
- WM_AFXLAST = 0x037F,
- WM_PENWINFIRST = 0x0380,
- WM_PENWINLAST = 0x038F,
- WM_APP = 0x8000,
- WM_USER = 0x0400,
+ WmNull = 0x0000,
+ WmCreate = 0x0001,
+ WmDestroy = 0x0002,
+ WmMove = 0x0003,
+ WmSize = 0x0005,
+ WmActivate = 0x0006,
+ WmSetfocus = 0x0007,
+ WmKillfocus = 0x0008,
+ WmEnable = 0x000A,
+ WmSetredraw = 0x000B,
+ WmSettext = 0x000C,
+ WmGettext = 0x000D,
+ WmGettextlength = 0x000E,
+ WmPaint = 0x000F,
+ WmClose = 0x0010,
+ WmQueryendsession = 0x0011,
+ WmQuit = 0x0012,
+ WmQueryopen = 0x0013,
+ WmErasebkgnd = 0x0014,
+ WmSyscolorchange = 0x0015,
+ WmEndsession = 0x0016,
+ WmShowwindow = 0x0018,
+ WmWininichange = 0x001A,
+ WmSettingchange = 0x001A,
+ WmDevmodechange = 0x001B,
+ WmActivateapp = 0x001C,
+ WmFontchange = 0x001D,
+ WmTimechange = 0x001E,
+ WmCancelmode = 0x001F,
+ WmSetcursor = 0x0020,
+ WmMouseactivate = 0x0021,
+ WmChildactivate = 0x0022,
+ WmQueuesync = 0x0023,
+ WmGetminmaxinfo = 0x0024,
+ WmPainticon = 0x0026,
+ WmIconerasebkgnd = 0x0027,
+ WmNextdlgctl = 0x0028,
+ WmSpoolerstatus = 0x002A,
+ WmDrawitem = 0x002B,
+ WmMeasureitem = 0x002C,
+ WmDeleteitem = 0x002D,
+ WmVkeytoitem = 0x002E,
+ WmChartoitem = 0x002F,
+ WmSetfont = 0x0030,
+ WmGetfont = 0x0031,
+ WmSethotkey = 0x0032,
+ WmGethotkey = 0x0033,
+ WmQuerydragicon = 0x0037,
+ WmCompareitem = 0x0039,
+ WmGetobject = 0x003D,
+ WmCompacting = 0x0041,
+ WmCommnotify = 0x0044,
+ WmWindowposchanging = 0x0046,
+ WmWindowposchanged = 0x0047,
+ WmPower = 0x0048,
+ WmCopydata = 0x004A,
+ WmCanceljournal = 0x004B,
+ WmNotify = 0x004E,
+ WmInputlangchangerequest = 0x0050,
+ WmInputlangchange = 0x0051,
+ WmTcard = 0x0052,
+ WmHelp = 0x0053,
+ WmUserchanged = 0x0054,
+ WmNotifyformat = 0x0055,
+ WmContextmenu = 0x007B,
+ WmStylechanging = 0x007C,
+ WmStylechanged = 0x007D,
+ WmDisplaychange = 0x007E,
+ WmGeticon = 0x007F,
+ WmSeticon = 0x0080,
+ WmNccreate = 0x0081,
+ WmNcdestroy = 0x0082,
+ WmNccalcsize = 0x0083,
+ WmNchittest = 0x0084,
+ WmNcpaint = 0x0085,
+ WmNcactivate = 0x0086,
+ WmGetdlgcode = 0x0087,
+ WmSyncpaint = 0x0088,
+ WmNcmousemove = 0x00A0,
+ WmNclbuttondown = 0x00A1,
+ WmNclbuttonup = 0x00A2,
+ WmNclbuttondblclk = 0x00A3,
+ WmNcrbuttondown = 0x00A4,
+ WmNcrbuttonup = 0x00A5,
+ WmNcrbuttondblclk = 0x00A6,
+ WmNcmbuttondown = 0x00A7,
+ WmNcmbuttonup = 0x00A8,
+ WmNcmbuttondblclk = 0x00A9,
+ WmNcxbuttondown = 0x00AB,
+ WmNcxbuttonup = 0x00AC,
+ WmKeydown = 0x0100,
+ WmKeyup = 0x0101,
+ WmChar = 0x0102,
+ WmDeadchar = 0x0103,
+ WmSyskeydown = 0x0104,
+ WmSyskeyup = 0x0105,
+ WmSyschar = 0x0106,
+ WmSysdeadchar = 0x0107,
+ WmKeylast = 0x0108,
+ WmImeStartcomposition = 0x010D,
+ WmImeEndcomposition = 0x010E,
+ WmImeComposition = 0x010F,
+ WmImeKeylast = 0x010F,
+ WmInitdialog = 0x0110,
+ WmCommand = 0x0111,
+ WmSyscommand = 0x0112,
+ WmTimer = 0x0113,
+ WmHscroll = 0x0114,
+ WmVscroll = 0x0115,
+ WmInitmenu = 0x0116,
+ WmInitmenupopup = 0x0117,
+ WmMenuselect = 0x011F,
+ WmMenuchar = 0x0120,
+ WmEnteridle = 0x0121,
+ WmMenurbuttonup = 0x0122,
+ WmMenudrag = 0x0123,
+ WmMenugetobject = 0x0124,
+ WmUninitmenupopup = 0x0125,
+ WmMenucommand = 0x0126,
+ WmCtlcolormsgbox = 0x0132,
+ WmCtlcoloredit = 0x0133,
+ WmCtlcolorlistbox = 0x0134,
+ WmCtlcolorbtn = 0x0135,
+ WmCtlcolordlg = 0x0136,
+ WmCtlcolorscrollbar = 0x0137,
+ WmCtlcolorstatic = 0x0138,
+ WmMousemove = 0x0200,
+ WmLbuttondown = 0x0201,
+ WmLbuttonup = 0x0202,
+ WmLbuttondblclk = 0x0203,
+ WmRbuttondown = 0x0204,
+ WmRbuttonup = 0x0205,
+ WmRbuttondblclk = 0x0206,
+ WmMbuttondown = 0x0207,
+ WmMbuttonup = 0x0208,
+ WmMbuttondblclk = 0x0209,
+ WmMousewheel = 0x020A,
+ WmXbuttondown = 0x020B,
+ WmXbuttonup = 0x020C,
+ WmXbuttondblclk = 0x020D,
+ WmParentnotify = 0x0210,
+ WmEntermenuloop = 0x0211,
+ WmExitmenuloop = 0x0212,
+ WmNextmenu = 0x0213,
+ WmSizing = 0x0214,
+ WmCapturechanged = 0x0215,
+ WmMoving = 0x0216,
+ WmDevicechange = 0x0219,
+ WmMdicreate = 0x0220,
+ WmMdidestroy = 0x0221,
+ WmMdiactivate = 0x0222,
+ WmMdirestore = 0x0223,
+ WmMdinext = 0x0224,
+ WmMdimaximize = 0x0225,
+ WmMditile = 0x0226,
+ WmMdicascade = 0x0227,
+ WmMdiiconarrange = 0x0228,
+ WmMdigetactive = 0x0229,
+ WmMdisetmenu = 0x0230,
+ WmEntersizemove = 0x0231,
+ WmExitsizemove = 0x0232,
+ WmDropfiles = 0x0233,
+ WmMdirefreshmenu = 0x0234,
+ WmImeSetcontext = 0x0281,
+ WmImeNotify = 0x0282,
+ WmImeControl = 0x0283,
+ WmImeCompositionfull = 0x0284,
+ WmImeSelect = 0x0285,
+ WmImeChar = 0x0286,
+ WmImeRequest = 0x0288,
+ WmImeKeydown = 0x0290,
+ WmImeKeyup = 0x0291,
+ WmMousehover = 0x02A1,
+ WmMouseleave = 0x02A3,
+ WmCut = 0x0300,
+ WmCopy = 0x0301,
+ WmPaste = 0x0302,
+ WmClear = 0x0303,
+ WmUndo = 0x0304,
+ WmRenderformat = 0x0305,
+ WmRenderallformats = 0x0306,
+ WmDestroyclipboard = 0x0307,
+ WmDrawclipboard = 0x0308,
+ WmPaintclipboard = 0x0309,
+ WmVscrollclipboard = 0x030A,
+ WmSizeclipboard = 0x030B,
+ WmAskcbformatname = 0x030C,
+ WmChangecbchain = 0x030D,
+ WmHscrollclipboard = 0x030E,
+ WmQuerynewpalette = 0x030F,
+ WmPaletteischanging = 0x0310,
+ WmPalettechanged = 0x0311,
+ WmHotkey = 0x0312,
+ WmPrint = 0x0317,
+ WmPrintclient = 0x0318,
+ WmHandheldfirst = 0x0358,
+ WmHandheldlast = 0x035F,
+ WmAfxfirst = 0x0360,
+ WmAfxlast = 0x037F,
+ WmPenwinfirst = 0x0380,
+ WmPenwinlast = 0x038F,
+ WmApp = 0x8000,
+ WmUser = 0x0400,
// For Windows XP Balloon messages from the System Notification Area
- NIN_BALLOONSHOW = 0x0402,
- NIN_BALLOONHIDE = 0x0403,
- NIN_BALLOONTIMEOUT = 0x0404,
- NIN_BALLOONUSERCLICK = 0x0405
+ NinBalloonshow = 0x0402,
+ NinBalloonhide = 0x0403,
+ NinBalloontimeout = 0x0404,
+ NinBalloonuserclick = 0x0405
}
#region SubClass Classing Handler Class
@@ -390,23 +390,23 @@ internal class SubClass : System.Windows.Forms.NativeWindow
{
public delegate int SubClassWndProcEventHandler(ref System.Windows.Forms.Message m);
public event SubClassWndProcEventHandler SubClassedWndProc;
- private bool IsSubClassed = false;
+ private bool _isSubClassed = false;
- public SubClass(IntPtr Handle, bool _SubClass)
+ public SubClass(IntPtr handle, bool subClass)
{
- base.AssignHandle(Handle);
- this.IsSubClassed = _SubClass;
+ base.AssignHandle(handle);
+ this._isSubClassed = subClass;
}
public bool SubClassed
{
- get => this.IsSubClassed;
- set => this.IsSubClassed = value;
+ get => this._isSubClassed;
+ set => this._isSubClassed = value;
}
protected override void WndProc(ref Message m)
{
- if (this.IsSubClassed)
+ if (this._isSubClassed)
{
if (OnSubClassedWndProc(ref m) != 0)
{
@@ -422,30 +422,30 @@ public void CallDefaultWndProc(ref Message m)
}
#region HiWord Message Cracker
- public int HiWord(int Number)
+ public int HiWord(int number)
{
- return ((Number >> 16) & 0xffff);
+ return (number >> 16) & 0xffff;
}
#endregion
#region LoWord Message Cracker
- public int LoWord(int Number)
+ public int LoWord(int number)
{
- return (Number & 0xffff);
+ return number & 0xffff;
}
#endregion
#region MakeLong Message Cracker
- public int MakeLong(int LoWord, int HiWord)
+ public int MakeLong(int loWord, int hiWord)
{
- return (HiWord << 16) | (LoWord & 0xffff);
+ return (hiWord << 16) | (loWord & 0xffff);
}
#endregion
#region MakeLParam Message Cracker
- public IntPtr MakeLParam(int LoWord, int HiWord)
+ public IntPtr MakeLParam(int loWord, int hiWord)
{
- return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
+ return (IntPtr)((hiWord << 16) | (loWord & 0xffff));
}
#endregion
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Controls Toolkit/KryptonComboBoxTree.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Controls Toolkit/KryptonComboBoxTree.cs
index 0569a8545..6d305009a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Controls Toolkit/KryptonComboBoxTree.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Controls Toolkit/KryptonComboBoxTree.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -25,7 +25,6 @@
*/
#endregion
-#pragma warning disable CS8622
namespace Krypton.Toolkit.Suite.Extended.ComboBox
{
public delegate void NodeSelectEventHandler();
@@ -37,40 +36,40 @@ namespace Krypton.Toolkit.Suite.Extended.ComboBox
public sealed class KryptonComboBoxTree : Control
{
#region Private Fields
- private KryptonPanel pnlBack;
- private Panel pnlTree;
- private KryptonComboBox combobox;
- private KryptonTreeView tvTreeView;
- private LabelEx lblSizingGrip;
- private Form frmTreeView;
+ private KryptonPanel _pnlBack;
+ private Panel _pnlTree;
+ private KryptonComboBox _combobox;
+ private KryptonTreeView _tvTreeView;
+ private LabelEx _lblSizingGrip;
+ private Form _frmTreeView;
private string _branchSeparator;
private bool _absoluteChildrenSelectableOnly;
- private Point DragOffset;
+ private Point _dragOffset;
#endregion
#region Public Properties
[Browsable(true), Description("Gets the TreeView Nodes collection"), Category("TreeView"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor(typeof(TreeNodeCollection), typeof(TreeNodeCollection))]
- public TreeNodeCollection Nodes => tvTreeView.Nodes;
+ public TreeNodeCollection Nodes => _tvTreeView.Nodes;
[Browsable(true), Description("Gets or sets the TreeView's Selected Node"), Category("TreeView")]
public TreeNode SelectedNode
{
set
{
- tvTreeView.SelectedNode = value;
+ _tvTreeView.SelectedNode = value;
TreeViewNodeSelect(null, null);
}
- get => tvTreeView.SelectedNode;
+ get => _tvTreeView.SelectedNode;
}
[Browsable(false)]
- public KryptonComboBox ComboBox { get => combobox; set => combobox = value; }
+ public KryptonComboBox ComboBox { get => _combobox; set => _combobox = value; }
[Browsable(true), Description("Gets or sets the TreeView's Selected Node"), Category("TreeView")]
- public ImageList? Imagelist { get => tvTreeView.ImageList; set => tvTreeView.ImageList = value; }
+ public ImageList? Imagelist { get => _tvTreeView.ImageList; set => _tvTreeView.ImageList = value; }
[Browsable(true), Description("Gets or sets the separator for the selected node's value"), Category("Appearance")]
public string BranchSeparator
@@ -96,50 +95,50 @@ public KryptonComboBoxTree()
InitializeComponent();
// Initializing Controls
- pnlBack = new KryptonPanel();
- pnlBack.BorderStyle = BorderStyle.None;
- pnlBack.Dock = DockStyle.Fill;
- pnlBack.AutoScroll = false;
+ _pnlBack = new KryptonPanel();
+ _pnlBack.BorderStyle = BorderStyle.None;
+ _pnlBack.Dock = DockStyle.Fill;
+ _pnlBack.AutoScroll = false;
//pnlBack.BackColor = txtSelectedValue.BackColor;
- lblSizingGrip = new LabelEx();
- lblSizingGrip.Size = new Size(9, 9);
- lblSizingGrip.Cursor = Cursors.SizeNWSE;
- lblSizingGrip.Text = "";
- lblSizingGrip.MouseMove += new MouseEventHandler(SizingGripMouseMove);
- lblSizingGrip.MouseDown += new MouseEventHandler(SizingGripMouseDown);
-
- tvTreeView = new KryptonTreeView();
- tvTreeView.BorderStyle = PaletteBorderStyle.ControlClient;
- tvTreeView.DoubleClick += new EventHandler(TreeViewNodeSelect);
- tvTreeView.Location = new Point(0, 0);
- tvTreeView.LostFocus += new EventHandler(TreeViewLostFocus);
+ _lblSizingGrip = new LabelEx();
+ _lblSizingGrip.Size = new Size(9, 9);
+ _lblSizingGrip.Cursor = Cursors.SizeNWSE;
+ _lblSizingGrip.Text = "";
+ _lblSizingGrip.MouseMove += new MouseEventHandler(SizingGripMouseMove);
+ _lblSizingGrip.MouseDown += new MouseEventHandler(SizingGripMouseDown);
+
+ _tvTreeView = new KryptonTreeView();
+ _tvTreeView.BorderStyle = PaletteBorderStyle.ControlClient;
+ _tvTreeView.DoubleClick += new EventHandler(TreeViewNodeSelect);
+ _tvTreeView.Location = new Point(0, 0);
+ _tvTreeView.LostFocus += new EventHandler(TreeViewLostFocus);
//tvTreeView.Scrollable = false;
- frmTreeView = new Form();
- frmTreeView.FormBorderStyle = FormBorderStyle.None;
- frmTreeView.StartPosition = FormStartPosition.Manual;
- frmTreeView.ShowInTaskbar = false;
+ _frmTreeView = new Form();
+ _frmTreeView.FormBorderStyle = FormBorderStyle.None;
+ _frmTreeView.StartPosition = FormStartPosition.Manual;
+ _frmTreeView.ShowInTaskbar = false;
- pnlTree = new Panel();
- pnlTree.Dock = DockStyle.Fill;
- pnlTree.BorderStyle = BorderStyle.FixedSingle;
- pnlTree.BackColor = Color.White;
+ _pnlTree = new Panel();
+ _pnlTree.Dock = DockStyle.Fill;
+ _pnlTree.BorderStyle = BorderStyle.FixedSingle;
+ _pnlTree.BackColor = Color.White;
- combobox = new KryptonComboBox();
- combobox.DropDownStyle = ComboBoxStyle.DropDownList;
- combobox.Dock = DockStyle.Fill;
- combobox.ComboBox.Click += new EventHandler(ToggleTreeView);
+ _combobox = new KryptonComboBox();
+ _combobox.DropDownStyle = ComboBoxStyle.DropDownList;
+ _combobox.Dock = DockStyle.Fill;
+ _combobox.ComboBox.Click += new EventHandler(ToggleTreeView);
// Adding Controls to UserControl
- pnlTree.Controls.Add(lblSizingGrip);
- pnlTree.Controls.Add(tvTreeView);
- frmTreeView.Controls.Add(pnlTree);
- pnlBack.Controls.Add(combobox);
- Controls.Add(pnlBack);
+ _pnlTree.Controls.Add(_lblSizingGrip);
+ _pnlTree.Controls.Add(_tvTreeView);
+ _frmTreeView.Controls.Add(_pnlTree);
+ _pnlBack.Controls.Add(_combobox);
+ Controls.Add(_pnlBack);
}
- public KryptonTreeView TreeView => tvTreeView;
+ public KryptonTreeView TreeView => _tvTreeView;
private void txtSelectedValue_Click(object sender, EventArgs e)
{
@@ -148,41 +147,41 @@ private void txtSelectedValue_Click(object sender, EventArgs e)
private void RelocateGrip()
{
- lblSizingGrip.Top = frmTreeView.Height - lblSizingGrip.Height - 1;
- lblSizingGrip.Left = frmTreeView.Width - lblSizingGrip.Width - 1;
+ _lblSizingGrip.Top = _frmTreeView.Height - _lblSizingGrip.Height - 1;
+ _lblSizingGrip.Left = _frmTreeView.Width - _lblSizingGrip.Width - 1;
}
private void ToggleTreeView(object? sender, EventArgs? e)
{
- if (!frmTreeView.Visible)
+ if (!_frmTreeView.Visible)
{
Rectangle cbRect = RectangleToScreen(ClientRectangle);
- frmTreeView.Location = new Point(cbRect.X, cbRect.Y + pnlBack.Height);
+ _frmTreeView.Location = new Point(cbRect.X, cbRect.Y + _pnlBack.Height);
- frmTreeView.Show();
- frmTreeView.BringToFront();
+ _frmTreeView.Show();
+ _frmTreeView.BringToFront();
RelocateGrip();
//tbSelectedValue.Text = "";
}
else
{
- frmTreeView.Hide();
+ _frmTreeView.Hide();
}
}
public bool ValidateText()
{
string validatorText = Text;
- TreeNodeCollection nodes = tvTreeView.Nodes;
+ TreeNodeCollection nodes = _tvTreeView.Nodes;
for (int i = 0; i < validatorText.Split(_branchSeparator.ToCharArray()[0]).Length; i++)
{
bool nodeFound = false;
- string NodeToFind = validatorText.Split(_branchSeparator.ToCharArray()[0])[i];
+ string nodeToFind = validatorText.Split(_branchSeparator.ToCharArray()[0])[i];
for (int j = 0; j < nodes.Count; j++)
{
- if (nodes[j].Text == NodeToFind)
+ if (nodes[j].Text == nodeToFind)
{
nodeFound = true;
nodes = nodes[j].Nodes;
@@ -204,25 +203,25 @@ private void SizingGripMouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
- int TvWidth, TvHeight;
- TvWidth = Cursor.Position.X - frmTreeView.Location.X;
- TvWidth = TvWidth + DragOffset.X;
- TvHeight = Cursor.Position.Y - frmTreeView.Location.Y;
- TvHeight = TvHeight + DragOffset.Y;
+ int tvWidth, tvHeight;
+ tvWidth = Cursor.Position.X - _frmTreeView.Location.X;
+ tvWidth = tvWidth + _dragOffset.X;
+ tvHeight = Cursor.Position.Y - _frmTreeView.Location.Y;
+ tvHeight = tvHeight + _dragOffset.Y;
- if (TvWidth < 50)
+ if (tvWidth < 50)
{
- TvWidth = 50;
+ tvWidth = 50;
}
- if (TvHeight < 50)
+ if (tvHeight < 50)
{
- TvHeight = 50;
+ tvHeight = 50;
}
- frmTreeView.Size = new Size(TvWidth, TvHeight);
- pnlTree.Size = frmTreeView.Size;
- tvTreeView.Size = new Size(frmTreeView.Size.Width - lblSizingGrip.Width, frmTreeView.Size.Height - lblSizingGrip.Width); ;
+ _frmTreeView.Size = new Size(tvWidth, tvHeight);
+ _pnlTree.Size = _frmTreeView.Size;
+ _tvTreeView.Size = new Size(_frmTreeView.Size.Width - _lblSizingGrip.Width, _frmTreeView.Size.Height - _lblSizingGrip.Width); ;
RelocateGrip();
}
}
@@ -231,10 +230,10 @@ private void SizingGripMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
- int OffsetX = Math.Abs(Cursor.Position.X - frmTreeView.RectangleToScreen(frmTreeView.ClientRectangle).Right);
- int OffsetY = Math.Abs(Cursor.Position.Y - frmTreeView.RectangleToScreen(frmTreeView.ClientRectangle).Bottom);
+ int offsetX = Math.Abs(Cursor.Position.X - _frmTreeView.RectangleToScreen(_frmTreeView.ClientRectangle).Right);
+ int offsetY = Math.Abs(Cursor.Position.Y - _frmTreeView.RectangleToScreen(_frmTreeView.ClientRectangle).Bottom);
- DragOffset = new Point(OffsetX, OffsetY);
+ _dragOffset = new Point(offsetX, offsetY);
}
}
@@ -242,36 +241,36 @@ private void TreeViewLostFocus(object sender, EventArgs e)
{
if (!IsDisposed && Created)
{
- if (!combobox.RectangleToScreen(combobox.ClientRectangle).Contains(Cursor.Position))
+ if (!_combobox.RectangleToScreen(_combobox.ClientRectangle).Contains(Cursor.Position))
{
- frmTreeView.Hide();
+ _frmTreeView.Hide();
}
}
}
private void TreeViewNodeSelect(object? sender, EventArgs? e)
{
- if (tvTreeView.SelectedNode != null)
+ if (_tvTreeView.SelectedNode != null)
{
if (_absoluteChildrenSelectableOnly)
{
- if (tvTreeView.SelectedNode.Nodes.Count == 0)
+ if (_tvTreeView.SelectedNode.Nodes.Count == 0)
{
- combobox.Items.Clear();
- combobox.Items.Add(tvTreeView.SelectedNode.FullPath.Replace(@"\", _branchSeparator));
- combobox.SelectedIndex = 0;
+ _combobox.Items.Clear();
+ _combobox.Items.Add(_tvTreeView.SelectedNode.FullPath.Replace(@"\", _branchSeparator));
+ _combobox.SelectedIndex = 0;
ToggleTreeView(sender, null);
}
}
else
{
- combobox.Items.Clear();
- combobox.Items.Add(tvTreeView.SelectedNode.FullPath.Replace(@"\", _branchSeparator));
- combobox.SelectedIndex = 0;
+ _combobox.Items.Clear();
+ _combobox.Items.Add(_tvTreeView.SelectedNode.FullPath.Replace(@"\", _branchSeparator));
+ _combobox.SelectedIndex = 0;
ToggleTreeView(sender, null);
}
- combobox.Text = tvTreeView.SelectedNode.Text;
+ _combobox.Text = _tvTreeView.SelectedNode.Text;
}
}
@@ -289,12 +288,12 @@ private void InitializeComponent()
private void ComboBoxTree_Layout(object sender, LayoutEventArgs e)
{
//Height = combobox.Height + 10;
- pnlBack.Size = new Size(Width, Height - 2);
+ _pnlBack.Size = new Size(Width, Height - 2);
- frmTreeView.Size = new Size(Width, tvTreeView.Height + 30);
- pnlTree.Size = frmTreeView.Size;
- tvTreeView.Width = frmTreeView.Width - lblSizingGrip.Width;
- tvTreeView.Height = frmTreeView.Height - lblSizingGrip.Width;
+ _frmTreeView.Size = new Size(Width, _tvTreeView.Height + 30);
+ _pnlTree.Size = _frmTreeView.Size;
+ _tvTreeView.Width = _frmTreeView.Width - _lblSizingGrip.Width;
+ _tvTreeView.Height = _frmTreeView.Height - _lblSizingGrip.Width;
RelocateGrip();
}
@@ -326,7 +325,7 @@ protected override void OnPaint(PaintEventArgs e)
#region ButtonEx
private class ButtonEx : KryptonButton
{
- private ButtonState state;
+ private ButtonState _state;
///
///
@@ -342,7 +341,7 @@ public ButtonEx()
///
protected override void OnMouseDown(MouseEventArgs e)
{
- state = ButtonState.Flat;
+ _state = ButtonState.Flat;
base.OnMouseDown(e);
}
@@ -352,7 +351,7 @@ protected override void OnMouseDown(MouseEventArgs e)
///
protected override void OnMouseUp(MouseEventArgs e)
{
- state = ButtonState.Normal;
+ _state = ButtonState.Normal;
base.OnMouseUp(e);
}
@@ -360,11 +359,11 @@ protected override void OnMouseUp(MouseEventArgs e)
///
///
///
- protected override void OnPaint(PaintEventArgs e)
+ protected override void OnPaint(PaintEventArgs? e)
{
base.OnPaint(e);
- ControlPaint.DrawComboButton(e.Graphics, e.ClipRectangle, state);
+ ControlPaint.DrawComboButton(e?.Graphics!, e!.ClipRectangle, _state);
}
}
#endregion
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Globals/GlobalDeclarations.cs
index 3c510d6d9..7d54fa29a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj
index 2bc0e92b6..ecb5d4ad5 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package implements extensions to the Krypton standard toolkit ComboBox, including additional Drop Down types and views.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package implements extensions to the Krypton standard toolkit ComboBox, including additional Drop Down types and views.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,74 +69,36 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.ComboBox/Krypton.Toolkit.Suite.Extended.ComboBox.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationFunctions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationFunctions.cs
index d0012e2f0..fe6ff3525 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationFunctions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationFunctions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationPath.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationPath.cs
index fd8c99800..096b7c7b0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationPath.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationPath.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationTimer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationTimer.cs
index 315a0e0fb..18e37ec0b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationTimer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/AnimationTimer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -105,7 +105,7 @@ public AnimationTimer(Action callback, int fpsLimit)
private void Tick()
{
- if ((1000 / FrameLimiter) < (GetTimeDifferenceAsMs() - LastTick))
+ if (1000 / FrameLimiter < GetTimeDifferenceAsMs() - LastTick)
{
LastTick = GetTimeDifferenceAsMs();
_callback((ulong)(LastTick - FirstTick));
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator.cs
index 3e2488de9..e7e066343 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -49,7 +49,7 @@ public class Animator : IAnimator
///
/// The callback to get invoked at the end of the animation
///
- protected SafeInvoker EndCallback;
+ protected SafeInvoker? EndCallback;
///
/// The callback to get invoked at each frame
@@ -212,7 +212,7 @@ public virtual void Play(object targetObject, string propertyName)
///
/// The callback to get invoked at the end of the animation
///
- public virtual void Play(object targetObject, string propertyName, SafeInvoker endCallback)
+ public virtual void Play(object targetObject, string propertyName, SafeInvoker? endCallback)
{
TargetObject = targetObject;
var prop = TargetObject.GetType()
@@ -244,7 +244,7 @@ public virtual void Play(object targetObject, string propertyName, SafeInvoker e
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter)
+ public virtual void Play(T targetObject, Expression>? propertySetter)
{
Play(targetObject, propertySetter, null);
}
@@ -265,7 +265,7 @@ public virtual void Play(T targetObject, Expression> property
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter, SafeInvoker endCallback)
+ public virtual void Play(T targetObject, Expression>? propertySetter, SafeInvoker? endCallback)
{
if (propertySetter == null)
{
@@ -275,8 +275,8 @@ public virtual void Play(T targetObject, Expression> property
TargetObject = targetObject;
var property =
- ((propertySetter.Body as MemberExpression) ??
- (((UnaryExpression)propertySetter.Body).Operand as MemberExpression))?.Member as PropertyInfo;
+ (propertySetter.Body as MemberExpression ??
+ ((UnaryExpression)propertySetter.Body).Operand as MemberExpression)?.Member as PropertyInfo;
if (property == null)
{
throw new ArgumentException(nameof(propertySetter));
@@ -342,7 +342,7 @@ public virtual void Play(object targetObject, KnownProperties property)
///
/// The callback to get invoked at the end of the animation
///
- public virtual void Play(object targetObject, KnownProperties property, SafeInvoker endCallback)
+ public virtual void Play(object targetObject, KnownProperties property, SafeInvoker? endCallback)
{
Play(targetObject, property.ToString(), endCallback);
}
@@ -368,7 +368,7 @@ public virtual void Play(SafeInvoker frameCallback)
///
/// The callback to get invoked at the end of the animation
///
- public virtual void Play(SafeInvoker frameCallback, SafeInvoker endCallback)
+ public virtual void Play(SafeInvoker frameCallback, SafeInvoker? endCallback)
{
Stop();
FrameCallback = frameCallback;
@@ -440,7 +440,7 @@ private void Elapsed(ulong millSinceBeginning = 0)
}
}
}
- if (_tempReverseRepeat && (millSinceBeginning - ActivePath.Duration) < ActivePath.Delay)
+ if (_tempReverseRepeat && millSinceBeginning - ActivePath.Duration < ActivePath.Delay)
{
CurrentStatus = AnimatorStatus.OnHold;
return;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator2D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator2D.cs
index ba78117cd..4bf24231e 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator2D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator2D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,9 +26,6 @@
*/
#endregion
-using System.Collections.Generic;
-using System.Linq.Expressions;
-
namespace Krypton.Toolkit.Suite.Extended.Common
{
///
@@ -40,10 +37,8 @@ public class Animator2D : IAnimator
private readonly List _paths = new List();
- ///
- /// The callback to get invoked at the end of the animation
- ///
- protected SafeInvoker EndCallback;
+ /// The callback to get invoked at the end of the animation.
+ protected SafeInvoker? EndCallback;
///
/// The callback to get invoked at each frame
@@ -241,7 +236,7 @@ public virtual AnimatorStatus CurrentStatus
///
public virtual void Pause()
{
- if (CurrentStatus == AnimatorStatus.OnHold || CurrentStatus == AnimatorStatus.Playing)
+ if (CurrentStatus is AnimatorStatus.OnHold or AnimatorStatus.Playing)
{
HorizontalAnimator.Pause();
VerticalAnimator.Pause();
@@ -274,7 +269,7 @@ public virtual void Play(object targetObject, string propertyName)
///
/// The callback to get invoked at the end of the animation
///
- public virtual void Play(object targetObject, string propertyName, SafeInvoker endCallback)
+ public virtual void Play(object targetObject, string propertyName, SafeInvoker? endCallback)
{
TargetObject = targetObject;
var prop = TargetObject.GetType()
@@ -307,7 +302,7 @@ public virtual void Play(object targetObject, string propertyName, SafeInvoker e
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter)
+ public virtual void Play(T targetObject, Expression>? propertySetter)
{
Play(targetObject, propertySetter, null);
}
@@ -327,18 +322,18 @@ public virtual void Play(T targetObject, Expression> property
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter, SafeInvoker endCallback)
+ public virtual void Play(T targetObject, Expression>? propertySetter, SafeInvoker? endCallback)
{
if (propertySetter == null)
{
return;
}
- TargetObject = targetObject;
+ TargetObject = targetObject ?? throw new ArgumentNullException(nameof(targetObject));
var property =
- ((propertySetter.Body as MemberExpression) ??
- (((UnaryExpression)propertySetter.Body).Operand as MemberExpression))?.Member as PropertyInfo;
+ (propertySetter.Body as MemberExpression ??
+ ((UnaryExpression)propertySetter.Body).Operand as MemberExpression)?.Member as PropertyInfo;
if (property == null)
{
throw new ArgumentException(nameof(propertySetter));
@@ -401,7 +396,7 @@ public void Play(object targetObject, KnownFormProperties property)
///
/// The callback to get invoked at the end of the animation
///
- public void Play(object targetObject, KnownFormProperties property, SafeInvoker endCallback)
+ public void Play(object targetObject, KnownFormProperties property, SafeInvoker? endCallback)
{
Play(targetObject, property.ToString(), endCallback);
}
@@ -412,10 +407,7 @@ public void Play(object targetObject, KnownFormProperties property, SafeInvoker
///
/// The callback to get invoked at each frame
///
- public void Play(SafeInvoker frameCallback)
- {
- Play(frameCallback, (SafeInvoker)null);
- }
+ public void Play(SafeInvoker frameCallback) => Play(frameCallback, (SafeInvoker)null);
///
/// Starts the playing of the animation
@@ -426,7 +418,7 @@ public void Play(SafeInvoker frameCallback)
///
/// The callback to get invoked at the end of the animation
///
- public void Play(SafeInvoker frameCallback, SafeInvoker endCallback)
+ public void Play(SafeInvoker frameCallback, SafeInvoker? endCallback)
{
Stop();
FrameCallback = frameCallback;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator3D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator3D.cs
index 107342b10..fffa3a4f8 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator3D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Animator3D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -42,7 +42,7 @@ public class Animator3D : IAnimator
///
/// The callback to get invoked at the end of the animation
///
- protected SafeInvoker EndCallback;
+ protected SafeInvoker? EndCallback;
///
/// The callback to get invoked at each frame
@@ -265,7 +265,7 @@ public virtual AnimatorStatus CurrentStatus
///
public virtual void Pause()
{
- if (CurrentStatus == AnimatorStatus.OnHold || CurrentStatus == AnimatorStatus.Playing)
+ if (CurrentStatus is AnimatorStatus.OnHold or AnimatorStatus.Playing)
{
HorizontalAnimator.Pause();
VerticalAnimator.Pause();
@@ -299,7 +299,7 @@ public virtual void Play(object targetObject, string propertyName)
///
/// The callback to get invoked at the end of the animation
///
- public virtual void Play(object targetObject, string propertyName, SafeInvoker endCallback)
+ public virtual void Play(object targetObject, string propertyName, SafeInvoker? endCallback)
{
TargetObject = targetObject;
var prop = TargetObject.GetType()
@@ -332,7 +332,7 @@ public virtual void Play(object targetObject, string propertyName, SafeInvoker e
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter)
+ public virtual void Play(T targetObject, Expression>? propertySetter)
{
Play(targetObject, propertySetter, null);
}
@@ -352,7 +352,7 @@ public virtual void Play(T targetObject, Expression> property
///
/// Any object containing a property
///
- public virtual void Play(T targetObject, Expression> propertySetter, SafeInvoker endCallback)
+ public virtual void Play(T targetObject, Expression>? propertySetter, SafeInvoker? endCallback)
{
if (propertySetter == null)
{
@@ -362,8 +362,8 @@ public virtual void Play(T targetObject, Expression> property
TargetObject = targetObject;
var property =
- ((propertySetter.Body as MemberExpression) ??
- (((UnaryExpression)propertySetter.Body).Operand as MemberExpression))?.Member as PropertyInfo;
+ (propertySetter.Body as MemberExpression ??
+ ((UnaryExpression)propertySetter.Body).Operand as MemberExpression)?.Member as PropertyInfo;
if (property == null)
{
throw new ArgumentException(nameof(propertySetter));
@@ -427,7 +427,7 @@ public void Play(object targetObject, KnownColourProperties property)
///
/// The callback to get invoked at the end of the animation
///
- public void Play(object targetObject, KnownColourProperties property, SafeInvoker endCallback)
+ public void Play(object targetObject, KnownColourProperties property, SafeInvoker? endCallback)
{
Play(targetObject, property.ToString(), endCallback);
}
@@ -452,7 +452,7 @@ public void Play(SafeInvoker frameCallback)
///
/// The callback to get invoked at the end of the animation
///
- public void Play(SafeInvoker frameCallback, SafeInvoker endCallback)
+ public void Play(SafeInvoker frameCallback, SafeInvoker? endCallback)
{
Stop();
FrameCallback = frameCallback;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float2D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float2D.cs
index a3a6255bd..bcbecc07e 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float2D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float2D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -508,7 +508,7 @@ public override int GetHashCode()
return ReferenceEquals(left, null) && ReferenceEquals(right, null);
}
// ReSharper disable CompareOfFloatsByEqualityOperator
- return ReferenceEquals(left, right) || ((double)(left.X) == right.X && (double)(left.Y) == right.Y);
+ return ReferenceEquals(left, right) || ((double)left.X == right.X && (double)left.Y == right.Y);
// ReSharper restore CompareOfFloatsByEqualityOperator
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float3D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float3D.cs
index c810b140a..6482966ae 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float3D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Float3D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -462,7 +462,7 @@ public override int GetHashCode()
}
// ReSharper disable CompareOfFloatsByEqualityOperator
return ReferenceEquals(left, right) ||
- ((double)(left.X) == right.X && (double)(left.Y) == right.Y && (double)(left.Z) == right.Z);
+ ((double)left.X == right.X && (double)left.Y == right.Y && (double)left.Z == right.Z);
// ReSharper restore CompareOfFloatsByEqualityOperator
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/FloatExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/FloatExtensions.cs
index 9bd09b734..20c08e965 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/FloatExtensions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/FloatExtensions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2D.cs
index 11a0a4bfd..f20c5b8ab 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2DExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2DExtensions.cs
index 8090d871b..301954524 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2DExtensions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path2DExtensions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3D.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3D.cs
index ea46e403d..4e8c3a4b7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3D.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3D.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3DExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3DExtensions.cs
index 9b18bbb9d..1110934b6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3DExtensions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/Path3DExtensions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/PathExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/PathExtensions.cs
index ab8b3b2e4..e7eaa438a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/PathExtensions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/PathExtensions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker.cs
index 2e952f1fb..998ea3fbd 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker1.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker1.cs
index 6210d8dfc..8f4d0c52e 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker1.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Animation/SafeInvoker1.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentInformation.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentInformation.cs
index 98e747e2a..352784366 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentInformation.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentInformation.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,9 +26,6 @@
*/
#endregion
-using System.Globalization;
-using System.IO;
-
namespace Krypton.Toolkit.Suite.Extended.Common
{
public class DevelopmentInformation
@@ -89,7 +86,7 @@ public static void SetBuildInformation(KryptonForm target, DevelopmentState stat
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
@@ -129,7 +126,7 @@ public static void SetBuildInformation(KryptonForm target, Assembly assembly, De
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentUtilities.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentUtilities.cs
index 152ed6388..876f3c127 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentUtilities.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Development/DevelopmentUtilities.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Drawing/KryptonKnobUtilities.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Drawing/KryptonKnobUtilities.cs
index cd933b9a1..b13bd6536 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Drawing/KryptonKnobUtilities.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Drawing/KryptonKnobUtilities.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/AssemblyDetails.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/AssemblyDetails.cs
index e986cebcf..f129c8fe3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/AssemblyDetails.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/AssemblyDetails.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -42,7 +42,7 @@ public static T GetAssemblyAttribute(Assembly assembly) where T : Attribute
object[] attributes = assembly.GetCustomAttributes(typeof(T), true);
// If we didn't get anything, return null.
- if ((attributes == null) || (attributes.Length == 0))
+ if (attributes == null || attributes.Length == 0)
{
return null;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/CommonMethods.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/CommonMethods.cs
index 9a7e8ab29..46b333633 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/CommonMethods.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/CommonMethods.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/DefaultToolkitTypefaceTypes.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/DefaultToolkitTypefaceTypes.cs
index 9fa348d7e..041d2c7ea 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/DefaultToolkitTypefaceTypes.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/DefaultToolkitTypefaceTypes.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/GlobalValues.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/GlobalValues.cs
index 9fe782600..e6a9dac0f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/GlobalValues.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/GlobalValues.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/IconExtractor.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/IconExtractor.cs
index c3a5a4535..7bced3833 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/IconExtractor.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/IconExtractor.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/InternalKryptonMessageBoxExtended.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/InternalKryptonMessageBoxExtended.cs
index 708d66519..109d5fadb 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/InternalKryptonMessageBoxExtended.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/InternalKryptonMessageBoxExtended.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -49,14 +49,14 @@ private void InitialiseComponent()
_button3 = new MessageButton();
_button1 = new MessageButton();
_button2 = new MessageButton();
- ((ISupportInitialize)(_panelMessage)).BeginInit();
+ ((ISupportInitialize)_panelMessage).BeginInit();
_panelMessage.SuspendLayout();
- ((ISupportInitialize)(_panelMessageText)).BeginInit();
+ ((ISupportInitialize)_panelMessageText).BeginInit();
_panelMessageText.SuspendLayout();
- ((ISupportInitialize)(_panelMessageIcon)).BeginInit();
+ ((ISupportInitialize)_panelMessageIcon).BeginInit();
_panelMessageIcon.SuspendLayout();
- ((ISupportInitialize)(_messageIcon)).BeginInit();
- ((ISupportInitialize)(_panelButtons)).BeginInit();
+ ((ISupportInitialize)_messageIcon).BeginInit();
+ ((ISupportInitialize)_panelButtons).BeginInit();
_panelButtons.SuspendLayout();
SuspendLayout();
//
@@ -198,15 +198,15 @@ private void InitialiseComponent()
SizeGripStyle = SizeGripStyle.Hide;
StartPosition = FormStartPosition.CenterParent;
TopMost = true;
- ((ISupportInitialize)(_panelMessage)).EndInit();
+ ((ISupportInitialize)_panelMessage).EndInit();
_panelMessage.ResumeLayout(false);
_panelMessage.PerformLayout();
- ((ISupportInitialize)(_panelMessageText)).EndInit();
+ ((ISupportInitialize)_panelMessageText).EndInit();
_panelMessageText.ResumeLayout(false);
- ((ISupportInitialize)(_panelMessageIcon)).EndInit();
+ ((ISupportInitialize)_panelMessageIcon).EndInit();
_panelMessageIcon.ResumeLayout(false);
- ((ISupportInitialize)(_messageIcon)).EndInit();
- ((ISupportInitialize)(_panelButtons)).EndInit();
+ ((ISupportInitialize)_messageIcon).EndInit();
+ ((ISupportInitialize)_panelButtons).EndInit();
_panelButtons.ResumeLayout(false);
_panelButtons.PerformLayout();
ResumeLayout(false);
@@ -353,10 +353,10 @@ protected override void WndProc(ref Message m)
if (IgnoreAltF4)
{
// Extract the keys being pressed
- Keys keys = ((Keys)((int)m.WParam.ToInt64()));
+ Keys keys = (Keys)(int)m.WParam.ToInt64();
// If the user standard combination ALT + F4
- if ((keys == Keys.F4) && ((ModifierKeys & Keys.Alt) == Keys.Alt))
+ if (keys == Keys.F4 && (ModifierKeys & Keys.Alt) == Keys.Alt)
{
// Eat the message, so standard window proc does not close the window
return;
@@ -844,26 +844,26 @@ private static DialogResult InternalShow(IWin32Window owner,
HelPlatformInvokenformation helPlatformInvokenformation, bool? showCtrlCopy, Font messageboxTypeface = null)
{
// Check if trying to show a message box from a non-interactive process, this is not possible
- if (!SystemInformation.UserInteractive && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0))
+ if (!SystemInformation.UserInteractive && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)
{
throw new InvalidOperationException("Cannot show modal dialog when non-interactive");
}
// Check if trying to show a message box from a service and the owner has been specified, this is not possible
- if ((owner != null) && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0))
+ if (owner != null && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)
{
throw new ArgumentException(@"Cannot show message box from a service with an owner specified", nameof(options));
}
// Check if trying to show a message box from a service and help information is specified, this is not possible
- if ((helPlatformInvokenformation != null) && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0))
+ if (helPlatformInvokenformation != null && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)
{
throw new ArgumentException(@"Cannot show message box from a service with help specified", nameof(options));
}
// If help information provided or we are not a service/default desktop application then grab an owner for showing the message box
IWin32Window showOwner = null;
- if ((helPlatformInvokenformation != null) || ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0))
+ if (helPlatformInvokenformation != null || (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)
{
// If do not have an owner passed in then get the active window and use that instead
showOwner = owner ?? FromHandle(PlatformInvoke.GetActiveWindow());
@@ -880,7 +880,7 @@ private static DialogResult InternalShow(IWin32Window owner,
private void UpdateText()
{
- Text = (string.IsNullOrEmpty(_caption) ? string.Empty : _caption.Split(Environment.NewLine.ToCharArray())[0]);
+ Text = string.IsNullOrEmpty(_caption) ? string.Empty : _caption.Split(Environment.NewLine.ToCharArray())[0];
_messageText.StateCommon.Font = MessageBoxTypeface;
_messageText.Text = _text;
}
@@ -950,14 +950,14 @@ private void UpdateButtons()
switch (_buttons)
{
case MessageBoxButtons.OK:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
_button1.DialogResult = DialogResult.OK;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
_button2.Visible = _button3.Visible = false;
break;
case MessageBoxButtons.OKCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.OK;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -965,8 +965,8 @@ private void UpdateButtons()
_button3.Visible = false;
break;
case MessageBoxButtons.YesNo:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -975,9 +975,9 @@ private void UpdateButtons()
ControlBox = false;
break;
case MessageBoxButtons.YesNoCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button3.DialogResult = DialogResult.Cancel;
@@ -986,8 +986,8 @@ private void UpdateButtons()
_button3.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
break;
case MessageBoxButtons.RetryCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Retry;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -995,9 +995,9 @@ private void UpdateButtons()
_button3.Visible = false;
break;
case MessageBoxButtons.AbortRetryIgnore:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Abort;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Abort;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore;
_button1.DialogResult = DialogResult.Abort;
_button2.DialogResult = DialogResult.Retry;
_button3.DialogResult = DialogResult.Ignore;
@@ -1052,7 +1052,7 @@ private Size UpdateMessageSizing(IWin32Window showOwner)
// Find size of the label, with a max of 2/3 screen width
Screen screen = showOwner != null ? Screen.FromHandle(showOwner.Handle) : Screen.PrimaryScreen;
SizeF scaledMonitorSize = screen.Bounds.Size;
- scaledMonitorSize.Width *= (2 / 3.0f);
+ scaledMonitorSize.Width *= 2 / 3.0f;
scaledMonitorSize.Height *= 0.95f;
_messageText.UpdateFont();
SizeF messageSize = g.MeasureString(_text, _messageText.Font, scaledMonitorSize);
@@ -1061,8 +1061,8 @@ private Size UpdateMessageSizing(IWin32Window showOwner)
float messageXSize = Math.Max(messageSize.Width, captionSize.Width);
// Work out DPlatformInvoke adjustment factor
- float factorX = g.DpiX > 96 ? ((1.0f * g.DpiX) / 96) : 1.0f;
- float factorY = g.DpiX > 96 ? ((1.0f * g.DpiX) / 96) : 1.0f;
+ float factorX = g.DpiX > 96 ? 1.0f * g.DpiX / 96 : 1.0f;
+ float factorY = g.DpiX > 96 ? 1.0f * g.DpiX / 96 : 1.0f;
messageSize.Width = messageXSize * factorX;
messageSize.Height = messageSize.Height * factorY;
@@ -1171,23 +1171,23 @@ private Size UpdateButtonsSizing()
_button1.Size = maxButtonSize;
// Size the panel for the buttons
- _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2));
+ _panelButtons.Size = new Size(maxButtonSize.Width * numButtons + GAP * (numButtons + 1), maxButtonSize.Height + GAP * 2);
// Button area is the number of buttons with gaps between them and 10 PlatformInvokexels around all edges
- return new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2));
+ return new Size(maxButtonSize.Width * numButtons + GAP * (numButtons + 1), maxButtonSize.Height + GAP * 2);
}
private void button_keyDown(object sender, KeyEventArgs e)
{
// Escape key kills the dialog if we allow it to be closed
- if ((e.KeyCode == Keys.Escape) && ControlBox)
+ if (e.KeyCode == Keys.Escape && ControlBox)
{
Close();
}
else
{
// Pressing Ctrl+C should copy message text into the clipboard
- if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.C))
+ if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
StringBuilder sb = new StringBuilder();
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/PaletteColourDefinitions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/PaletteColourDefinitions.cs
index 7be1e0988..2a43feb06 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/PaletteColourDefinitions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/PaletteColourDefinitions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/Utility.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/Utility.cs
index a9d703fc6..62307e8bc 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/Utility.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/Utility.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/UtilityMethods.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/UtilityMethods.cs
index eb0c4adba..dac911eb4 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/UtilityMethods.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/UtilityMethods.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -67,7 +67,7 @@ public static void ElevateProcessWithAdministrativeRights(string processName)
}
catch (Win32Exception wexc)
{
- ExceptionCapture.CaptureException(wexc);
+ DebugUtilities.NotImplemented(wexc.ToString());
}
return;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/WIN32.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/WIN32.cs
index 2ce6e3379..439509082 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/WIN32.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/General/WIN32.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -425,14 +425,14 @@ public void CallDefaultWndProc(ref Message m)
#region HiWord Message Cracker
public int HiWord(int Number)
{
- return ((Number >> 16) & 0xffff);
+ return (Number >> 16) & 0xffff;
}
#endregion
#region LoWord Message Cracker
public int LoWord(int Number)
{
- return (Number & 0xffff);
+ return Number & 0xffff;
}
#endregion
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/AssemblyManager.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/AssemblyManager.cs
index df6b0a578..f5ad34643 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/AssemblyManager.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/AssemblyManager.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/HashingHelper.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/HashingHelper.cs
index 3d46aaf07..6e9f03433 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/HashingHelper.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/HashingHelper.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -71,7 +71,7 @@ public static void PropagateHashInput(KryptonComboBox box)
}
catch (Exception e)
{
- ExceptionCapture.CaptureException(e);
+ DebugUtilities.NotImplemented(e.ToString());
}
}
@@ -189,7 +189,7 @@ public static void CancelBackgroundWorkerProgress(BackgroundWorker md5, Backgrou
}
catch (Exception exc)
{
- ExceptionCapture.CaptureException(exc);
+ DebugUtilities.NotImplemented(exc.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/OSHelper.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/OSHelper.cs
index 4e06661b7..86d0183d7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/OSHelper.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Helpers/OSHelper.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/FileUtilities.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/FileUtilities.cs
index b6cab047c..e7cc02930 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/FileUtilities.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/FileUtilities.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -63,7 +63,7 @@ public static FileInfo GetFileInformation(string filePath)
public static string GetReadableFileSize(long fileLength)
{
// Get absolute value
- long absolute_i = (fileLength < 0 ? -fileLength : fileLength);
+ long absolute_i = fileLength < 0 ? -fileLength : fileLength;
// Determine the suffix and readable value
string suffix;
@@ -74,31 +74,31 @@ public static string GetReadableFileSize(long fileLength)
{
suffix = "EB";
- readable = (fileLength >> 50);
+ readable = fileLength >> 50;
}
else if (absolute_i >= 0x4000000000000) // Petabyte
{
suffix = "PB";
- readable = (fileLength >> 40);
+ readable = fileLength >> 40;
}
else if (absolute_i >= 0x10000000000) // Terabyte
{
suffix = "TB";
- readable = (fileLength >> 30);
+ readable = fileLength >> 30;
}
else if (absolute_i >= 0x40000000) // Gigabyte
{
suffix = "GB";
- readable = (fileLength >> 20);
+ readable = fileLength >> 20;
}
else if (absolute_i >= 0x100000) // Megabyte
{
suffix = "MB";
- readable = (fileLength >> 10);
+ readable = fileLength >> 10;
}
else if (absolute_i >= 0x400) // Kilobyte
{
@@ -112,7 +112,7 @@ public static string GetReadableFileSize(long fileLength)
}
// Divide by 1024 to get fractional value
- readable = (readable / 1024);
+ readable = readable / 1024;
// Return formatted number with suffix
return readable.ToString("0.### ") + suffix;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/ShellIcon.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/ShellIcon.cs
index 477c030da..042d58094 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/ShellIcon.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/IO/ShellIcon.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Internal/InternalExtendedKryptonMessageBox.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Internal/InternalExtendedKryptonMessageBox.cs
index 7cc281b17..b392baa27 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Internal/InternalExtendedKryptonMessageBox.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Internal/InternalExtendedKryptonMessageBox.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -54,14 +54,14 @@ private void InitialiseComponent()
_button1 = new MessageButton();
_button2 = new MessageButton();
_doNotShowAgainOption = new KryptonCheckBox();
- ((ISupportInitialize)(_panelMessage)).BeginInit();
+ ((ISupportInitialize)_panelMessage).BeginInit();
_panelMessage.SuspendLayout();
- ((ISupportInitialize)(_panelMessageText)).BeginInit();
+ ((ISupportInitialize)_panelMessageText).BeginInit();
_panelMessageText.SuspendLayout();
- ((ISupportInitialize)(_panelMessageIcon)).BeginInit();
+ ((ISupportInitialize)_panelMessageIcon).BeginInit();
_panelMessageIcon.SuspendLayout();
- ((ISupportInitialize)(_messageIcon)).BeginInit();
- ((ISupportInitialize)(_panelButtons)).BeginInit();
+ ((ISupportInitialize)_messageIcon).BeginInit();
+ ((ISupportInitialize)_panelButtons).BeginInit();
_panelButtons.SuspendLayout();
SuspendLayout();
//
@@ -216,15 +216,15 @@ private void InitialiseComponent()
SizeGripStyle = SizeGripStyle.Hide;
StartPosition = FormStartPosition.CenterParent;
TopMost = true;
- ((ISupportInitialize)(_panelMessage)).EndInit();
+ ((ISupportInitialize)_panelMessage).EndInit();
_panelMessage.ResumeLayout(false);
_panelMessage.PerformLayout();
- ((ISupportInitialize)(_panelMessageText)).EndInit();
+ ((ISupportInitialize)_panelMessageText).EndInit();
_panelMessageText.ResumeLayout(false);
- ((ISupportInitialize)(_panelMessageIcon)).EndInit();
+ ((ISupportInitialize)_panelMessageIcon).EndInit();
_panelMessageIcon.ResumeLayout(false);
- ((ISupportInitialize)(_messageIcon)).EndInit();
- ((ISupportInitialize)(_panelButtons)).EndInit();
+ ((ISupportInitialize)_messageIcon).EndInit();
+ ((ISupportInitialize)_panelButtons).EndInit();
_panelButtons.ResumeLayout(false);
_panelButtons.PerformLayout();
ResumeLayout(false);
@@ -454,10 +454,10 @@ protected override void WndProc(ref Message m)
if (IgnoreAltF4)
{
// Extract the keys being pressed
- Keys keys = ((Keys)((int)m.WParam.ToInt64()));
+ Keys keys = (Keys)(int)m.WParam.ToInt64();
// If the user standard combination ALT + F4
- if ((keys == Keys.F4) && ((ModifierKeys & Keys.Alt) == Keys.Alt))
+ if (keys == Keys.F4 && (ModifierKeys & Keys.Alt) == Keys.Alt)
{
// Eat the message, so standard window proc does not close the window
return;
@@ -1045,26 +1045,26 @@ private static DialogResult InternalShow(IWin32Window owner,
string button1Text = null, string button2Text = null, string button3Text = null)
{
// Check if trying to show a message box from a non-interactive process, this is not possible
- if (!SystemInformation.UserInteractive && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0))
+ if (!SystemInformation.UserInteractive && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)
{
throw new InvalidOperationException("Cannot show modal dialog when non-interactive");
}
// Check if trying to show a message box from a service and the owner has been specified, this is not possible
- if ((owner != null) && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0))
+ if (owner != null && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)
{
throw new ArgumentException(@"Cannot show message box from a service with an owner specified", nameof(options));
}
// Check if trying to show a message box from a service and help information is specified, this is not possible
- if ((helpInformation != null) && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0))
+ if (helpInformation != null && (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)
{
throw new ArgumentException(@"Cannot show message box from a service with help specified", nameof(options));
}
// If help information provided or we are not a service/default desktop application then grab an owner for showing the message box
IWin32Window showOwner = null;
- if ((helpInformation != null) || ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0))
+ if (helpInformation != null || (options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)
{
// If do not have an owner passed in then get the active window and use that instead
showOwner = owner ?? FromHandle(PlatformInvoke.GetActiveWindow());
@@ -1081,7 +1081,7 @@ private static DialogResult InternalShow(IWin32Window owner,
private void UpdateText()
{
- Text = (string.IsNullOrEmpty(_caption) ? string.Empty : _caption.Split(Environment.NewLine.ToCharArray())[0]);
+ Text = string.IsNullOrEmpty(_caption) ? string.Empty : _caption.Split(Environment.NewLine.ToCharArray())[0];
_messageText.StateCommon.Font = MessageBoxTypeface;
_messageText.Text = _text;
}
@@ -1151,14 +1151,14 @@ private void UpdateButtons()
switch (_buttons)
{
case MessageBoxButtons.OK:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
_button1.DialogResult = DialogResult.OK;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
_button2.Visible = _button3.Visible = false;
break;
case MessageBoxButtons.OKCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.OK;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1166,8 +1166,8 @@ private void UpdateButtons()
_button3.Visible = false;
break;
case MessageBoxButtons.YesNo:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1176,9 +1176,9 @@ private void UpdateButtons()
ControlBox = false;
break;
case MessageBoxButtons.YesNoCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button3.DialogResult = DialogResult.Cancel;
@@ -1187,8 +1187,8 @@ private void UpdateButtons()
_button3.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
break;
case MessageBoxButtons.RetryCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Retry;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1196,9 +1196,9 @@ private void UpdateButtons()
_button3.Visible = false;
break;
case MessageBoxButtons.AbortRetryIgnore:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Abort;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Abort;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore;
_button1.DialogResult = DialogResult.Abort;
_button2.DialogResult = DialogResult.Retry;
_button3.DialogResult = DialogResult.Ignore;
@@ -1223,14 +1223,14 @@ private void UpdateButtons(bool timeOutTimerEnabled, int timeOut, DialogResult d
switch (_buttons)
{
case MessageBoxButtons.OK:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
_button1.DialogResult = DialogResult.OK;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
_button2.Visible = _button3.Visible = false;
break;
case MessageBoxButtons.OKCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.OK;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.OK;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1238,8 +1238,8 @@ private void UpdateButtons(bool timeOutTimerEnabled, int timeOut, DialogResult d
_button3.Visible = false;
break;
case MessageBoxButtons.YesNo:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1248,9 +1248,9 @@ private void UpdateButtons(bool timeOutTimerEnabled, int timeOut, DialogResult d
ControlBox = false;
break;
case MessageBoxButtons.YesNoCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Yes;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.No;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Yes;
_button2.DialogResult = DialogResult.No;
_button3.DialogResult = DialogResult.Cancel;
@@ -1259,8 +1259,8 @@ private void UpdateButtons(bool timeOutTimerEnabled, int timeOut, DialogResult d
_button3.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
break;
case MessageBoxButtons.RetryCancel:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel;
_button1.DialogResult = DialogResult.Retry;
_button2.DialogResult = DialogResult.Cancel;
_button1.StateCommon.Content.ShortText.Font = MessageBoxTypeface;
@@ -1268,9 +1268,9 @@ private void UpdateButtons(bool timeOutTimerEnabled, int timeOut, DialogResult d
_button3.Visible = false;
break;
case MessageBoxButtons.AbortRetryIgnore:
- _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Abort;
- _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry;
- _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore;
+ _button1.Text = KryptonManager.Strings.GeneralStrings.Abort;
+ _button2.Text = KryptonManager.Strings.GeneralStrings.Retry;
+ _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore;
_button1.DialogResult = DialogResult.Abort;
_button2.DialogResult = DialogResult.Retry;
_button3.DialogResult = DialogResult.Ignore;
@@ -1441,7 +1441,7 @@ private Size UpdateMessageSizing(IWin32Window showOwner)
// Find size of the label, with a max of 2/3 screen width
Screen screen = showOwner != null ? Screen.FromHandle(showOwner.Handle) : Screen.PrimaryScreen;
SizeF scaledMonitorSize = screen.Bounds.Size;
- scaledMonitorSize.Width *= (2 / 3.0f);
+ scaledMonitorSize.Width *= 2 / 3.0f;
scaledMonitorSize.Height *= 0.95f;
_messageText.UpdateFont();
SizeF messageSize = g.MeasureString(_text, _messageText.Font, scaledMonitorSize);
@@ -1450,8 +1450,8 @@ private Size UpdateMessageSizing(IWin32Window showOwner)
float messageXSize = Math.Max(messageSize.Width, captionSize.Width);
// Work out DPI adjustment factor
- float factorX = g.DpiX > 96 ? ((1.0f * g.DpiX) / 96) : 1.0f;
- float factorY = g.DpiY > 96 ? ((1.0f * g.DpiY) / 96) : 1.0f;
+ float factorX = g.DpiX > 96 ? 1.0f * g.DpiX / 96 : 1.0f;
+ float factorY = g.DpiY > 96 ? 1.0f * g.DpiY / 96 : 1.0f;
messageSize.Width = messageXSize * factorX;
messageSize.Height = messageSize.Height * factorY;
@@ -1560,23 +1560,23 @@ private Size UpdateButtonsSizing()
_button1.Size = maxButtonSize;
// Size the panel for the buttons
- _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2));
+ _panelButtons.Size = new Size(maxButtonSize.Width * numButtons + GAP * (numButtons + 1), maxButtonSize.Height + GAP * 2);
// Button area is the number of buttons with gaps between them and 10 pixels around all edges
- return new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2));
+ return new Size(maxButtonSize.Width * numButtons + GAP * (numButtons + 1), maxButtonSize.Height + GAP * 2);
}
private void button_keyDown(object sender, KeyEventArgs e)
{
// Escape key kills the dialog if we allow it to be closed
- if ((e.KeyCode == Keys.Escape) && ControlBox)
+ if (e.KeyCode == Keys.Escape && ControlBox)
{
Close();
}
else
{
// Pressing Ctrl+C should copy message text into the clipboard
- if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.C))
+ if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
{
StringBuilder sb = new StringBuilder();
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Security/UACSecurity.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Security/UACSecurity.cs
index 6bac24125..589e81913 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Security/UACSecurity.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Classes/Security/UACSecurity.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -37,7 +37,7 @@ public static class UACSecurity
#endregion
#region Constants
- internal const int BCM_FIRST = 0x1600, BCM_SETSHIELD = (BCM_FIRST + 0x000C);
+ internal const int BCM_FIRST = 0x1600, BCM_SETSHIELD = BCM_FIRST + 0x000C;
#endregion
#region Methods
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonCircularPictureBox.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonCircularPictureBox.cs
index 84f8e5a1e..9940fc802 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonCircularPictureBox.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonCircularPictureBox.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonKryptonKnobControlEnhanced.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonKryptonKnobControlEnhanced.cs
index 7531d7035..a3fa6f782 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonKryptonKnobControlEnhanced.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Controls/User Controls/CommonKryptonKnobControlEnhanced.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -517,7 +517,7 @@ public CommonKryptonKnobControlEnhanced()
SetDimensions();
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint += OnPalettePaint;
}
@@ -652,7 +652,7 @@ protected override void OnMouseWheel(MouseEventArgs e)
if (_isFocused && _isKnobRotating && KryptonKnobUtilities.IsPointinRectangle(new Point(e.X, e.Y), _rKnob))
{
// the Delta value is always 120, as explained in MSDN
- int v = (e.Delta / 120) * (_maximum - _minimum) / _mouseWheelBarPartitions;
+ int v = e.Delta / 120 * (_maximum - _minimum) / _mouseWheelBarPartitions;
SetProperValue(Value + v);
// Avoid to send MouseWheel event to the parent container
@@ -677,7 +677,7 @@ protected override void OnKeyDown(KeyEventArgs e)
//--------------------------------------------------------
// Handles knob rotation with up,down,left and right keys
//--------------------------------------------------------
- if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Right)
+ if (e.KeyCode is Keys.Up or Keys.Right)
{
if (_value < _maximum)
{
@@ -686,7 +686,7 @@ protected override void OnKeyDown(KeyEventArgs e)
this.Refresh();
}
- else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Left)
+ else if (e.KeyCode is Keys.Down or Keys.Left)
{
if (_value > _minimum)
{
@@ -840,8 +840,8 @@ private bool DrawDivisions(Graphics Gr, RectangleF rc)
Font font;
- Pen penL = new Pen(_scaleColour, (2 * _drawRatio));
- Pen penS = new Pen(_scaleColour, (1 * _drawRatio));
+ Pen penL = new Pen(_scaleColour, 2 * _drawRatio);
+ Pen penS = new Pen(_scaleColour, 1 * _drawRatio);
SolidBrush br = new SolidBrush(_scaleColour);
@@ -887,8 +887,8 @@ private bool DrawDivisions(Graphics Gr, RectangleF rc)
for (; n < _scaleDivisions; n++)
{
// draw divisions
- ptStart.X = (float)(cx + (radius) * Math.Cos(currentAngle));
- ptStart.Y = (float)(cy + (radius) * Math.Sin(currentAngle));
+ ptStart.X = (float)(cx + radius * Math.Cos(currentAngle));
+ ptStart.Y = (float)(cy + radius * Math.Sin(currentAngle));
ptEnd.X = (float)(cx + (radius + _gradLength) * Math.Cos(currentAngle));
ptEnd.Y = (float)(cy + (radius + _gradLength) * Math.Sin(currentAngle));
@@ -914,7 +914,7 @@ private bool DrawDivisions(Graphics Gr, RectangleF rc)
if (_drawDivInside)
{
// graduations values inside the knob
- l = (int)radius - (wmax / 2) - 2;
+ l = (int)radius - wmax / 2 - 2;
tx = (float)(cx + l * Math.Cos(currentAngle));
ty = (float)(cy + l * Math.Sin(currentAngle));
@@ -1189,8 +1189,8 @@ private Point[] GetKnobLine(Graphics Gr, int l)
if (_drawDivInside)
{
// Center (from)
- Pos.X = (int)(cx + (radius / 10) * Math.Cos(degree));
- Pos.Y = (int)(cy + (radius / 10) * Math.Sin(degree));
+ Pos.X = (int)(cx + radius / 10 * Math.Cos(degree));
+ Pos.Y = (int)(cy + radius / 10 * Math.Sin(degree));
pret[0] = new Point(Pos.X, Pos.Y);
// External (to)
@@ -1231,7 +1231,7 @@ private int GetValueFromPosition(Point p)
degree = (float)(_pKnob.Y - p.Y) / (float)(_pKnob.X - p.X);
degree = (float)Math.Atan(degree);
- degree = (degree) * (float)(180 / Math.PI) + (180 - _startAngle);
+ degree = degree * (float)(180 / Math.PI) + (180 - _startAngle);
}
else if (p.X > _pKnob.X)
@@ -1239,7 +1239,7 @@ private int GetValueFromPosition(Point p)
degree = (float)(p.Y - _pKnob.Y) / (float)(p.X - _pKnob.X);
degree = (float)Math.Atan(degree);
- degree = (degree) * (float)(180 / Math.PI) + 360 - _startAngle;
+ degree = degree * (float)(180 / Math.PI) + 360 - _startAngle;
}
// round to the nearest value (when you click just before or after a graduation!)
@@ -1284,7 +1284,7 @@ private void KryptonKnobControlEnhanced_Resize(object sender, EventArgs e)
private void OnGlobalPaletteChanged(object sender, EventArgs e)
{
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint -= OnPalettePaint;
}
@@ -1293,7 +1293,7 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e)
_paletteRedirect.Target = _palette;
- if (((_palette != null)))
+ if (_palette != null)
{
_palette.PalettePaint += OnPalettePaint;
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/GraphicsUtilities.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/GraphicsUtilities.cs
index cd393f847..052d06613 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/GraphicsUtilities.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/GraphicsUtilities.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/RoundedRectangleF.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/RoundedRectangleF.cs
index 63fc231ca..3ed49e234 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/RoundedRectangleF.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/RoundedRectangleF.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/Transparenter.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/Transparenter.cs
index 8c58386a7..2774be84d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/Transparenter.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Drawing/Transparenter.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/AnimatorStatus.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/AnimatorStatus.cs
index 729d13dba..f6c3d8766 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/AnimatorStatus.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/AnimatorStatus.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/DevelopmentState.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/DevelopmentState.cs
index 9b42af626..7cac3815c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/DevelopmentState.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/DevelopmentState.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/FPSLimiterKnownValues.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/FPSLimiterKnownValues.cs
index afe0f9473..3892d1481 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/FPSLimiterKnownValues.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/FPSLimiterKnownValues.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/IconType.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/IconType.cs
index 81e5171ed..a73ebc904 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/IconType.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/IconType.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/SupportedHashAlgorithms.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/SupportedHashAlgorithms.cs
index b142015db..0114b1b70 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/SupportedHashAlgorithms.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/SupportedHashAlgorithms.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/ToolkitType.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/ToolkitType.cs
index eed98a554..3ae17aa68 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/ToolkitType.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Enumerations/ToolkitType.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Events/Knob/KnobValueChangedEventArgs.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Events/Knob/KnobValueChangedEventArgs.cs
index 829d2794f..e4c7424f6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Events/Knob/KnobValueChangedEventArgs.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Events/Knob/KnobValueChangedEventArgs.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Globals/GlobalDeclarations.cs
index 80ed6d3a0..429ebb526 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Globals/GlobalDeclarations.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -28,6 +28,8 @@
global using System;
global using System.Collections;
+global using System.Collections.Generic;
+global using System.Linq.Expressions;
global using System.ComponentModel;
global using System.Diagnostics;
global using System.Diagnostics.CodeAnalysis;
@@ -36,12 +38,14 @@
global using System.Drawing.Imaging;
global using System.Reflection;
global using System.Runtime.InteropServices;
+global using System.Globalization;
+global using System.IO;
global using System.Security.Principal;
global using System.Media;
global using System.Text;
global using System.Threading;
global using System.Windows.Forms;
-global using Krypton.Toolkit.Suite.Extended.Developer.Utilities;
+global using Krypton.Toolkit.Suite.Extended.Debug.Tools;
global using Krypton.Toolkit.Suite.Extended.Common.Resources;
global using Krypton.Toolkit.Suite.Extended.Shared;
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Interfaces/Animation/IAnimator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Interfaces/Animation/IAnimator.cs
index 17f0befc0..d7a1faee0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Interfaces/Animation/IAnimator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Interfaces/Animation/IAnimator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -73,7 +73,7 @@ public interface IAnimator
///
/// The callback to get invoked at the end of the animation
///
- void Play(object targetObject, string propertyName, SafeInvoker endCallback);
+ void Play(object targetObject, string propertyName, SafeInvoker? endCallback);
///
/// Starts the playing of the animation
@@ -87,7 +87,7 @@ public interface IAnimator
///
/// Any object containing a property
///
- void Play(T targetObject, Expression> propertySetter);
+ void Play(T targetObject, Expression>? propertySetter);
///
/// Starts the playing of the animation
@@ -104,7 +104,7 @@ public interface IAnimator
///
/// Any object containing a property
///
- void Play(T targetObject, Expression> propertySetter, SafeInvoker endCallback);
+ void Play(T targetObject, Expression>? propertySetter, SafeInvoker? endCallback);
///
/// Resume the animation from where it paused
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common 2022.csproj
index 70f12f87d..d1c6a2f02 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -34,7 +22,7 @@
false
True
StrongKrypton.snk
- False
+ True
true
Debug;Release;Nightly;Canary
preview
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package implements common tools and utilities that are used by the extended toolkit.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package implements common tools and utilities that are used by the extended toolkit.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,79 +69,42 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common.licenseheader
index c890e86c0..a0e5e0a62 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Krypton.Toolkit.Suite.Extended.Common.licenseheader
@@ -4,7 +4,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Security/UACSecurity.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Security/UACSecurity.cs
index 77bdb1802..a028a473d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Security/UACSecurity.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/Security/UACSecurity.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/UX/CommonExtendedKryptonForm.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/UX/CommonExtendedKryptonForm.cs
index 3c6cd750f..bce9373a0 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/UX/CommonExtendedKryptonForm.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Common/UX/CommonExtendedKryptonForm.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -75,7 +75,7 @@ protected override void OnLoad(EventArgs e)
#if NETCOREAPP3_1_OR_GREATER
FadeControllerNETCoreSafe.FadeWindowInExtended(this, SleepInterval);
#else
- FadeController.FadeIn(this, FadeSpeedChoice, FadeSpeed);
+ FadeController.FadeIn(this, FadeSpeed);
#endif
}
@@ -91,7 +91,7 @@ protected override void OnFormClosing(FormClosingEventArgs e)
#if NETCOREAPP3_1_OR_GREATER
FadeControllerNETCoreSafe.FadeWindowOutExtended(this, SleepInterval);
#else
- FadeController.FadeOutAndClose(this, _fadeSpeedChoice);
+ FadeController.FadeOutAndClose(this, _fadeSpeed);
#endif
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Globals/GlobalDeclarations.cs
index 8a934217a..dfeb5e7ca 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression 2022.csproj
index 4c5472047..51b0d48a3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package holds additional file compression utilities.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package holds additional file compression utilities.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,74 +69,36 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Compression/Krypton.Toolkit.Suite.Extended.Compression.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxComboBoxItemList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxComboBoxItemList.cs
new file mode 100644
index 000000000..a0883dae2
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxComboBoxItemList.cs
@@ -0,0 +1,157 @@
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2024 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+#endregion
+
+namespace Krypton.Toolkit.Suite.Extended.Controls
+{
+ ///
+ /// A Typed List of the CheckBox items.
+ /// Simply a wrapper for the CheckBoxComboBox.Items. A list of CheckBoxComboBoxItem objects.
+ /// This List is automatically synchronised with the Items of the ComboBox and extended to
+ /// handle the additional boolean value. That said, do not Add or Remove using this List,
+ /// it will be lost or regenerated from the ComboBox.Items.
+ ///
+ [ToolboxItem(false)]
+ public class KryptonCheckBoxComboBoxItemList : List
+ {
+ #region CONSTRUCTORS
+
+ public KryptonCheckBoxComboBoxItemList(KryptonCheckBoxComboBox checkBoxComboBox)
+ {
+ _checkBoxComboBox = checkBoxComboBox;
+ }
+
+ #endregion
+
+ #region PRIVATE FIELDS
+
+ private KryptonCheckBoxComboBox _checkBoxComboBox;
+
+ #endregion
+
+ #region EVENTS, This could be moved to the list control if needed
+
+ public event EventHandler CheckBoxCheckedChanged;
+
+ protected void OnCheckBoxCheckedChanged(object sender, EventArgs e)
+ {
+ EventHandler handler = CheckBoxCheckedChanged;
+ if (handler != null)
+ {
+ handler(sender, e);
+ }
+ }
+
+ private void item_CheckedChanged(object sender, EventArgs e)
+ {
+ OnCheckBoxCheckedChanged(sender, e);
+ }
+
+ #endregion
+
+ #region LIST MEMBERS & OBSOLETE INDICATORS
+
+ [Obsolete("Do not add items to this list directly. Use the ComboBox items instead.", false)]
+ public new void Add(KryptonCheckBoxComboBoxItem item)
+ {
+ item.CheckedChanged += new EventHandler(item_CheckedChanged);
+ base.Add(item);
+ }
+
+ public new void AddRange(IEnumerable collection)
+ {
+ foreach (KryptonCheckBoxComboBoxItem item in collection)
+ item.CheckedChanged += new EventHandler(item_CheckedChanged);
+ base.AddRange(collection);
+ }
+
+ public new void Clear()
+ {
+ foreach (KryptonCheckBoxComboBoxItem item in this)
+ item.CheckedChanged -= item_CheckedChanged;
+ base.Clear();
+ }
+
+ [Obsolete("Do not remove items from this list directly. Use the ComboBox items instead.", false)]
+ public new bool Remove(KryptonCheckBoxComboBoxItem item)
+ {
+ item.CheckedChanged -= item_CheckedChanged;
+ return base.Remove(item);
+ }
+
+ #endregion
+
+ #region DEFAULT PROPERTIES
+
+ ///
+ /// Returns the item with the specified displayName or Text.
+ ///
+ public KryptonCheckBoxComboBoxItem this[string displayName]
+ {
+ get
+ {
+ int startIndex =
+ // An invisible item exists in this scenario to help
+ // with the Text displayed in the TextBox of the Combo
+ _checkBoxComboBox.DropDownStyle == ComboBoxStyle.DropDownList
+ && _checkBoxComboBox.DataSource == null
+ ? 1 // Ubiklou : 2008-04-28 : Ignore first item. (http://www.codeproject.com/KB/combobox/extending_combobox.aspx?fid=476622&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2526813&fr=1#xx2526813xx)
+ : 0;
+ for (int index = startIndex; index <= Count - 1; index++)
+ {
+ KryptonCheckBoxComboBoxItem item = this[index];
+
+ string text;
+ // The binding might not be active yet
+ if (string.IsNullOrEmpty(item.Text)
+ // Ubiklou : 2008-04-28 : No databinding
+ && item.DataBindings != null
+ && item.DataBindings["Text"] != null
+ )
+ {
+ PropertyInfo propertyInfo
+ = item.ComboBoxItem.GetType().GetProperty(
+ item.DataBindings["Text"].BindingMemberInfo.BindingMember);
+ text = (string)propertyInfo.GetValue(item.ComboBoxItem, null);
+ }
+ else
+ {
+ text = item.Text;
+ }
+
+ if (text.CompareTo(displayName) == 0)
+ {
+ return item;
+ }
+ }
+
+ throw new ArgumentOutOfRangeException($"\"{displayName}\" does not exist in this combo box.");
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxProperties.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxProperties.cs
new file mode 100644
index 000000000..be6e6a844
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/KryptonCheckBoxProperties.cs
@@ -0,0 +1,248 @@
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2024 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+#endregion
+
+namespace Krypton.Toolkit.Suite.Extended.Controls
+{
+ [TypeConverter(typeof(ExpandableObjectConverter))]
+ public class KryptonCheckBoxProperties
+ {
+ #region Identity
+
+ public KryptonCheckBoxProperties()
+ {
+ }
+
+ #endregion
+
+ #region Instance Fields
+
+ private Appearance _appearance = Appearance.Normal;
+ private bool _autoSize = false;
+ private bool _autoCheck = true;
+ private bool _autoEllipsis = false;
+ private ContentAlignment _checkAlign = ContentAlignment.MiddleLeft;
+ private Color _flatAppearanceBorderColor = Color.Empty;
+ private int _flatAppearanceBorderSize = 1;
+ private Color _flatAppearanceCheckedBackColor = Color.Empty;
+ private Color _flatAppearanceMouseDownBackColor = Color.Empty;
+ private Color _flatAppearanceMouseOverBackColor = Color.Empty;
+ private FlatStyle _flatStyle = FlatStyle.Standard;
+ private Color _foreColor = SystemColors.ControlText;
+ private RightToLeft _rightToLeft = RightToLeft.No;
+ private ContentAlignment _textAlign = ContentAlignment.MiddleLeft;
+ private bool _threeState = false;
+
+ #endregion
+
+ #region Public
+
+ [DefaultValue(Appearance.Normal)]
+ public Appearance Appearance
+ {
+ get { return _appearance; }
+ set
+ {
+ _appearance = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(true)]
+ public bool AutoCheck
+ {
+ get { return _autoCheck; }
+ set
+ {
+ _autoCheck = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(false)]
+ public bool AutoEllipsis
+ {
+ get { return _autoEllipsis; }
+ set
+ {
+ _autoEllipsis = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(false)]
+ public bool AutoSize
+ {
+ get { return _autoSize; }
+ set
+ {
+ _autoSize = true;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(ContentAlignment.MiddleLeft)]
+ public ContentAlignment CheckAlign
+ {
+ get { return _checkAlign; }
+ set
+ {
+ _checkAlign = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(typeof(Color), "")]
+ public Color FlatAppearanceBorderColor
+ {
+ get { return _flatAppearanceBorderColor; }
+ set
+ {
+ _flatAppearanceBorderColor = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(1)]
+ public int FlatAppearanceBorderSize
+ {
+ get { return _flatAppearanceBorderSize; }
+ set
+ {
+ _flatAppearanceBorderSize = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(typeof(Color), "")]
+ public Color FlatAppearanceCheckedBackColor
+ {
+ get { return _flatAppearanceCheckedBackColor; }
+ set
+ {
+ _flatAppearanceCheckedBackColor = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(typeof(Color), "")]
+ public Color FlatAppearanceMouseDownBackColor
+ {
+ get { return _flatAppearanceMouseDownBackColor; }
+ set
+ {
+ _flatAppearanceMouseDownBackColor = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(typeof(Color), "")]
+ public Color FlatAppearanceMouseOverBackColor
+ {
+ get { return _flatAppearanceMouseOverBackColor; }
+ set
+ {
+ _flatAppearanceMouseOverBackColor = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(FlatStyle.Standard)]
+ public FlatStyle FlatStyle
+ {
+ get { return _flatStyle; }
+ set
+ {
+ _flatStyle = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(typeof(SystemColors), "ControlText")]
+ public Color ForeColor
+ {
+ get { return _foreColor; }
+ set
+ {
+ _foreColor = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(RightToLeft.No)]
+ public RightToLeft RightToLeft
+ {
+ get { return _rightToLeft; }
+ set
+ {
+ _rightToLeft = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(ContentAlignment.MiddleLeft)]
+ public ContentAlignment TextAlign
+ {
+ get { return _textAlign; }
+ set
+ {
+ _textAlign = value;
+ OnPropertyChanged();
+ }
+ }
+
+ [DefaultValue(false)]
+ public bool ThreeState
+ {
+ get { return _threeState; }
+ set
+ {
+ _threeState = value;
+ OnPropertyChanged();
+ }
+ }
+
+ #endregion
+
+ #region Implementation
+
+ ///
+ /// Called when any property changes.
+ ///
+ public event EventHandler PropertyChanged;
+
+ protected void OnPropertyChanged()
+ {
+ EventHandler handler = PropertyChanged;
+ if (handler != null)
+ {
+ handler(this, EventArgs.Empty);
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/ListSelectionWrapper.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/ListSelectionWrapper.cs
new file mode 100644
index 000000000..131b9b710
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Controls/Classes/ListSelectionWrapper.cs
@@ -0,0 +1,261 @@
+#region MIT License
+/*
+ * MIT License
+ *
+ * Copyright (c) 2024 - 2024 Krypton Suite
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+#endregion
+
+namespace Krypton.Toolkit.Suite.Extended.Controls
+{
+ ///
+ /// Maintains an additional "Selected" & "Count" value for each item in a List.
+ /// Useful in the CheckBoxComboBox. It holds a reference to the List[Index] Item and
+ /// whether it is selected or not.
+ /// It also caters for a Count, if needed.
+ ///
+ ///
+ public class ListSelectionWrapper : List>
+ {
+ #region Identity
+
+ ///
+ /// No property on the object is specified for display purposes, so simple ToString() operation
+ /// will be performed. And no Counts will be displayed
+ ///
+ public ListSelectionWrapper(IEnumerable source) : this(source, false) { }
+ ///
+ /// No property on the object is specified for display purposes, so simple ToString() operation
+ /// will be performed.
+ ///
+ public ListSelectionWrapper(IEnumerable source, bool showCounts)
+ : base()
+ {
+ _source = source;
+ _showCounts = showCounts;
+ if (_source is IBindingList)
+ {
+ ((IBindingList)_source).ListChanged += new ListChangedEventHandler(ListSelectionWrapper_ListChanged);
+ }
+
+ Populate();
+ }
+ ///
+ /// A Display "Name" property is specified. ToString() will not be performed on items.
+ /// This is specifically useful on DataTable implementations, or where PropertyDescriptors are used to read the values.
+ /// If a PropertyDescriptor is not found, a Property will be used.
+ ///
+ public ListSelectionWrapper(IEnumerable source, string usePropertyAsDisplayName) : this(source, false, usePropertyAsDisplayName) { }
+ ///
+ /// A Display "Name" property is specified. ToString() will not be performed on items.
+ /// This is specifically useful on DataTable implementations, or where PropertyDescriptors are used to read the values.
+ /// If a PropertyDescriptor is not found, a Property will be used.
+ ///
+ public ListSelectionWrapper(IEnumerable source, bool showCounts, string usePropertyAsDisplayName)
+ : this(source, showCounts)
+ {
+ _displayNameProperty = usePropertyAsDisplayName;
+ }
+
+ #endregion
+
+ #region Instance Fields
+
+ ///
+ /// Is a Count indicator used.
+ ///
+ private bool _showCounts;
+ ///
+ /// The original List of values wrapped. A "Selected" and possibly "Count" functionality is added.
+ ///
+ private IEnumerable _source;
+ ///
+ /// Used to indicate NOT to use ToString(), but read this property instead as a display value.
+ ///
+ private string _displayNameProperty = null;
+
+ #endregion
+
+ #region Public
+
+ ///
+ /// When specified, indicates that ToString() should not be performed on the items.
+ /// This property will be read instead.
+ /// This is specifically useful on DataTable implementations, where PropertyDescriptors are used to read the values.
+ ///
+ public string DisplayNameProperty
+ {
+ get => _displayNameProperty;
+ set => _displayNameProperty = value;
+ }
+ ///
+ /// Builds a concatenation list of selected items in the list.
+ ///
+ public string SelectedNames
+ {
+ get
+ {
+ string text = "";
+ foreach (ObjectSelectionWrapper item in this)
+ if (item.Selected)
+ {
+ text += string.IsNullOrEmpty(text)
+ ? $"\"{(object)item.Name}\""
+ : $" & \"{(object)item.Name}\"";
+ }
+
+ return text;
+ }
+ }
+ ///
+ /// Indicates whether the Item display value (Name) should include a count.
+ ///
+ public bool ShowCounts
+ {
+ get => _showCounts;
+ set => _showCounts = value;
+ }
+
+ #endregion
+
+ #region Implementation
+
+ ///
+ /// Reset all counts to zero.
+ ///
+ public void ClearCounts()
+ {
+ foreach (ObjectSelectionWrapper item in this)
+ {
+ item.Count = 0;
+ }
+ }
+ ///
+ /// Creates a ObjectSelectionWrapper item.
+ /// Note that the constructor signature of sub classes classes are important.
+ ///
+ ///
+ ///
+ private ObjectSelectionWrapper CreateSelectionWrapper(IEnumerator @object)
+ {
+ Type[] types = new Type[] { typeof(T), GetType() };
+ ConstructorInfo ci = typeof(ObjectSelectionWrapper).GetConstructor(types);
+ if (ci == null)
+ {
+ throw new Exception(
+ $"The selection wrapper class {typeof(ObjectSelectionWrapper)} must have a constructor with ({typeof(T)} Item, {GetType()} Container) parameters.");
+ }
+
+ object[] parameters = new object[] { @object.Current, this };
+ object result = ci.Invoke(parameters);
+ return (ObjectSelectionWrapper)result;
+ }
+
+ public ObjectSelectionWrapper FindObjectWithItem(T @object)
+ {
+ return Find(new Predicate>(
+ target => target.Item.Equals(@object)));
+ }
+
+ /*
+ public TSelectionWrapper FindObjectWithKey(object key)
+ {
+ return FindObjectWithKey(new object[] { key });
+ }
+
+ public TSelectionWrapper FindObjectWithKey(object[] keys)
+ {
+ return Find(new Predicate(
+ delegate(TSelectionWrapper target)
+ {
+ return
+ ReflectionHelper.CompareKeyValues(
+ ReflectionHelper.GetKeyValuesFromObject(target.Item, target.Item.TableInfo),
+ keys);
+ }));
+ }
+
+ public object[] GetArrayOfSelectedKeys()
+ {
+ List
@@ -205,7 +193,8 @@
-
+
+
@@ -248,19 +237,19 @@
- 23.5.0-preview.1
+ 24.4.0
- 23.5.0-preview.1
+ 23.9.0-preview.3
- 23.5.0-preview.1
+ 24.4.0
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Krypton.Toolkit.Suite.Extended.Core.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Krypton.Toolkit.Suite.Extended.Core.licenseheader
index c890e86c0..a0e5e0a62 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Krypton.Toolkit.Suite.Extended.Core.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Krypton.Toolkit.Suite.Extended.Core.licenseheader
@@ -4,7 +4,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/ImageResources.Designer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/ImageResources.Designer.cs
index 917b8e11b..cdc121900 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/ImageResources.Designer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/ImageResources.Designer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/MiscellaneousResources.Designer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/MiscellaneousResources.Designer.cs
index b146e80b5..3e24e018f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/MiscellaneousResources.Designer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Resources/MiscellaneousResources.Designer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/STRUCTS/HSLColour.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/STRUCTS/HSLColour.cs
index 9f884007c..c17a94509 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/STRUCTS/HSLColour.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/STRUCTS/HSLColour.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/CoreSettings.Designer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/CoreSettings.Designer.cs
index 0524bc8c8..9212f3488 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/CoreSettings.Designer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/CoreSettings.Designer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/PaletteColourSettings.Designer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/PaletteColourSettings.Designer.cs
index 1e047441f..8d6f9d1d2 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/PaletteColourSettings.Designer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Settings/PaletteColourSettings.Designer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.Designer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.Designer.cs
index ad7e84976..b5691bd22 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.Designer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.Designer.cs
@@ -86,7 +86,6 @@ private void InitializeComponent()
//
// kbtnConvertToRGB
//
- this.kbtnConvertToRGB.CornerRoundingRadius = -1F;
this.kbtnConvertToRGB.Location = new System.Drawing.Point(236, 90);
this.kbtnConvertToRGB.Name = "kbtnConvertToRGB";
this.kbtnConvertToRGB.Size = new System.Drawing.Size(154, 25);
@@ -96,7 +95,6 @@ private void InitializeComponent()
//
// kbtnConvertToHexadecimal
//
- this.kbtnConvertToHexadecimal.CornerRoundingRadius = -1F;
this.kbtnConvertToHexadecimal.Location = new System.Drawing.Point(236, 48);
this.kbtnConvertToHexadecimal.Name = "kbtnConvertToHexadecimal";
this.kbtnConvertToHexadecimal.Size = new System.Drawing.Size(154, 25);
@@ -211,7 +209,6 @@ private void InitializeComponent()
// kbtnUseColour
//
this.kbtnUseColour.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnUseColour.CornerRoundingRadius = -1F;
this.kbtnUseColour.Location = new System.Drawing.Point(405, 13);
this.kbtnUseColour.Name = "kbtnUseColour";
this.kbtnUseColour.Size = new System.Drawing.Size(90, 25);
@@ -221,7 +218,6 @@ private void InitializeComponent()
// kbtnCancel
//
this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnCancel.CornerRoundingRadius = -1F;
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new System.Drawing.Point(501, 13);
this.kbtnCancel.Name = "kbtnCancel";
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.cs
index b1bea9129..f33f6f86b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourConverter.cs
@@ -25,7 +25,7 @@ private void kbtnConvertToRGB_Click(object sender, EventArgs e)
}
catch (Exception exception)
{
- ExceptionCapture.CaptureException(exception);
+ DebugUtilities.NotImplemented(exception.ToString());
}
}
@@ -38,7 +38,7 @@ private void kbtnConvertToHexadecimal_Click(object sender, EventArgs e)
}
catch (Exception exception)
{
- ExceptionCapture.CaptureException(exception);
+ DebugUtilities.NotImplemented(exception.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourMixer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourMixer.cs
index a9dbe456e..fa02daa3d 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourMixer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ColourMixer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -115,7 +115,6 @@ private void InitializeComponent()
//
// kbtnConvertToRGB
//
- this.kbtnConvertToRGB.CornerRoundingRadius = -1F;
this.kbtnConvertToRGB.Enabled = false;
this.kbtnConvertToRGB.Location = new System.Drawing.Point(254, 227);
this.kbtnConvertToRGB.Name = "kbtnConvertToRGB";
@@ -147,7 +146,6 @@ private void InitializeComponent()
//
// kbtnGenerateBlueValue
//
- this.kbtnGenerateBlueValue.CornerRoundingRadius = -1F;
this.kbtnGenerateBlueValue.Location = new System.Drawing.Point(1012, 150);
this.kbtnGenerateBlueValue.Name = "kbtnGenerateBlueValue";
this.kbtnGenerateBlueValue.Size = new System.Drawing.Size(101, 25);
@@ -157,7 +155,6 @@ private void InitializeComponent()
//
// kbtnGenerateGreenValue
//
- this.kbtnGenerateGreenValue.CornerRoundingRadius = -1F;
this.kbtnGenerateGreenValue.Location = new System.Drawing.Point(1012, 104);
this.kbtnGenerateGreenValue.Name = "kbtnGenerateGreenValue";
this.kbtnGenerateGreenValue.Size = new System.Drawing.Size(101, 25);
@@ -167,7 +164,6 @@ private void InitializeComponent()
//
// kbtnGenerateRedValue
//
- this.kbtnGenerateRedValue.CornerRoundingRadius = -1F;
this.kbtnGenerateRedValue.Location = new System.Drawing.Point(1012, 58);
this.kbtnGenerateRedValue.Name = "kbtnGenerateRedValue";
this.kbtnGenerateRedValue.Size = new System.Drawing.Size(101, 25);
@@ -349,7 +345,6 @@ private void InitializeComponent()
//
// kbtnGenerateColour
//
- this.kbtnGenerateColour.CornerRoundingRadius = -1F;
this.kbtnGenerateColour.Location = new System.Drawing.Point(436, 8);
this.kbtnGenerateColour.Name = "kbtnGenerateColour";
this.kbtnGenerateColour.Size = new System.Drawing.Size(162, 25);
@@ -360,7 +355,6 @@ private void InitializeComponent()
//
// kbtnGenerate
//
- this.kbtnGenerate.CornerRoundingRadius = -1F;
this.kbtnGenerate.Location = new System.Drawing.Point(149, 8);
this.kbtnGenerate.Name = "kbtnGenerate";
this.kbtnGenerate.Size = new System.Drawing.Size(126, 25);
@@ -370,7 +364,6 @@ private void InitializeComponent()
//
// kbtnUtiliseAsBaseColour
//
- this.kbtnUtiliseAsBaseColour.CornerRoundingRadius = -1F;
this.kbtnUtiliseAsBaseColour.Location = new System.Drawing.Point(13, 8);
this.kbtnUtiliseAsBaseColour.Name = "kbtnUtiliseAsBaseColour";
this.kbtnUtiliseAsBaseColour.Size = new System.Drawing.Size(130, 25);
@@ -412,7 +405,6 @@ private void InitializeComponent()
//
// kbtnOptions
//
- this.kbtnOptions.CornerRoundingRadius = -1F;
this.kbtnOptions.Location = new System.Drawing.Point(604, 8);
this.kbtnOptions.Name = "kbtnOptions";
this.kbtnOptions.Size = new System.Drawing.Size(90, 25);
@@ -433,7 +425,6 @@ private void InitializeComponent()
//
// kbtnDefineOtherColours
//
- this.kbtnDefineOtherColours.CornerRoundingRadius = -1F;
this.kbtnDefineOtherColours.Location = new System.Drawing.Point(281, 8);
this.kbtnDefineOtherColours.Name = "kbtnDefineOtherColours";
this.kbtnDefineOtherColours.Size = new System.Drawing.Size(149, 25);
@@ -444,7 +435,6 @@ private void InitializeComponent()
// kbtnOk
//
this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
this.kbtnOk.Location = new System.Drawing.Point(1023, 8);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new System.Drawing.Size(90, 25);
@@ -816,7 +806,7 @@ private string DeciamlToHexadeciaml(int number)
while (true)
{
- rem = (number % 16);
+ rem = number % 16;
result += hexvalues[rem].ToString();
@@ -825,11 +815,11 @@ private string DeciamlToHexadeciaml(int number)
break;
}
- number = (number / 16);
+ number = number / 16;
}
- for (int i = (result.Length - 1); i >= 0; i--)
+ for (int i = result.Length - 1; i >= 0; i--)
{
final += result[i];
}
@@ -966,7 +956,7 @@ private bool IsNumber(string number)
for (int i = 0; i < number.Length; i++)
{
- if (!(Char.IsDigit(number[i])))
+ if (!Char.IsDigit(number[i]))
{
return false;
}
@@ -984,7 +974,7 @@ private bool IsHexadecimal(string hexadecimal)
for (int i = 0; i < hexadecimal.Length; i++)
{
- if (!((Char.IsDigit(hexadecimal[i])) || (hexadecimal[i] == 'A') || (hexadecimal[i] == 'B') || (hexadecimal[i] == 'C') || (hexadecimal[i] == 'D') || (hexadecimal[i] == 'E') || (hexadecimal[i] == 'F')))
+ if (!(Char.IsDigit(hexadecimal[i]) || hexadecimal[i] == 'A' || hexadecimal[i] == 'B' || hexadecimal[i] == 'C' || hexadecimal[i] == 'D' || hexadecimal[i] == 'E' || hexadecimal[i] == 'F'))
{
return false;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ContrastColourGenerator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ContrastColourGenerator.cs
index b15ba0d04..f8602b757 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ContrastColourGenerator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/ContrastColourGenerator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -124,7 +124,6 @@ private void InitializeComponent()
// kbtnOk
//
this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
this.kbtnOk.Location = new System.Drawing.Point(777, 15);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new System.Drawing.Size(90, 25);
@@ -172,7 +171,6 @@ private void InitializeComponent()
//
// kbtnUtiliseContrastColour
//
- this.kbtnUtiliseContrastColour.CornerRoundingRadius = -1F;
this.kbtnUtiliseContrastColour.Location = new System.Drawing.Point(580, 516);
this.kbtnUtiliseContrastColour.Name = "kbtnUtiliseContrastColour";
this.kbtnUtiliseContrastColour.Size = new System.Drawing.Size(203, 25);
@@ -182,7 +180,6 @@ private void InitializeComponent()
//
// kbtnUtiliseBaseColour
//
- this.kbtnUtiliseBaseColour.CornerRoundingRadius = -1F;
this.kbtnUtiliseBaseColour.Location = new System.Drawing.Point(57, 516);
this.kbtnUtiliseBaseColour.Name = "kbtnUtiliseBaseColour";
this.kbtnUtiliseBaseColour.Size = new System.Drawing.Size(227, 25);
@@ -193,7 +190,6 @@ private void InitializeComponent()
//
// kryptonButton1
//
- this.kryptonButton1.CornerRoundingRadius = -1F;
this.kryptonButton1.Location = new System.Drawing.Point(713, 470);
this.kryptonButton1.Name = "kryptonButton1";
this.kryptonButton1.Size = new System.Drawing.Size(117, 25);
@@ -202,7 +198,6 @@ private void InitializeComponent()
//
// kryptonButton3
//
- this.kryptonButton3.CornerRoundingRadius = -1F;
this.kryptonButton3.Location = new System.Drawing.Point(713, 437);
this.kryptonButton3.Name = "kryptonButton3";
this.kryptonButton3.Size = new System.Drawing.Size(117, 25);
@@ -211,7 +206,6 @@ private void InitializeComponent()
//
// kryptonButton4
//
- this.kryptonButton4.CornerRoundingRadius = -1F;
this.kryptonButton4.Location = new System.Drawing.Point(713, 393);
this.kryptonButton4.Name = "kryptonButton4";
this.kryptonButton4.Size = new System.Drawing.Size(117, 25);
@@ -220,7 +214,6 @@ private void InitializeComponent()
//
// kbtnGenerateBaseAlphaValue
//
- this.kbtnGenerateBaseAlphaValue.CornerRoundingRadius = -1F;
this.kbtnGenerateBaseAlphaValue.Location = new System.Drawing.Point(222, 348);
this.kbtnGenerateBaseAlphaValue.Name = "kbtnGenerateBaseAlphaValue";
this.kbtnGenerateBaseAlphaValue.Size = new System.Drawing.Size(135, 25);
@@ -230,7 +223,6 @@ private void InitializeComponent()
//
// kbtnInvertColours
//
- this.kbtnInvertColours.CornerRoundingRadius = -1F;
this.kbtnInvertColours.Location = new System.Drawing.Point(430, 173);
this.kbtnInvertColours.Name = "kbtnInvertColours";
this.kbtnInvertColours.Size = new System.Drawing.Size(90, 25);
@@ -241,7 +233,6 @@ private void InitializeComponent()
//
// kbtnGenerateComplementaryColour
//
- this.kbtnGenerateComplementaryColour.CornerRoundingRadius = -1F;
this.kbtnGenerateComplementaryColour.Location = new System.Drawing.Point(430, 109);
this.kbtnGenerateComplementaryColour.Name = "kbtnGenerateComplementaryColour";
this.kbtnGenerateComplementaryColour.Size = new System.Drawing.Size(90, 25);
@@ -252,7 +243,6 @@ private void InitializeComponent()
//
// kbtnGenerateBlueValue
//
- this.kbtnGenerateBlueValue.CornerRoundingRadius = -1F;
this.kbtnGenerateBlueValue.Location = new System.Drawing.Point(222, 470);
this.kbtnGenerateBlueValue.Name = "kbtnGenerateBlueValue";
this.kbtnGenerateBlueValue.Size = new System.Drawing.Size(135, 25);
@@ -262,7 +252,6 @@ private void InitializeComponent()
//
// kbtnGenerateGreenValue
//
- this.kbtnGenerateGreenValue.CornerRoundingRadius = -1F;
this.kbtnGenerateGreenValue.Location = new System.Drawing.Point(222, 437);
this.kbtnGenerateGreenValue.Name = "kbtnGenerateGreenValue";
this.kbtnGenerateGreenValue.Size = new System.Drawing.Size(135, 25);
@@ -272,7 +261,6 @@ private void InitializeComponent()
//
// kbtnGenerateRedValue
//
- this.kbtnGenerateRedValue.CornerRoundingRadius = -1F;
this.kbtnGenerateRedValue.Location = new System.Drawing.Point(222, 393);
this.kbtnGenerateRedValue.Name = "kbtnGenerateRedValue";
this.kbtnGenerateRedValue.Size = new System.Drawing.Size(135, 25);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/CustomColours.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/CustomColours.cs
index 40159b864..e5552795c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/CustomColours.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/CustomColours.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -77,13 +77,13 @@ private void InitializeComponent()
this.knumRedChannelValue = new();
this.kryptonLabel2 = new();
this.kryptonBorderEdge1 = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbxColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbNormalTextSystemColours)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbNormalTextColour)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbNormalTextSystemColours).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbNormalTextColour).BeginInit();
this.SuspendLayout();
//
// kryptonPanel1
@@ -101,7 +101,6 @@ private void InitializeComponent()
//
// kbtnUtiliseAsBaseColour
//
- this.kbtnUtiliseAsBaseColour.CornerRoundingRadius = -1F;
this.kbtnUtiliseAsBaseColour.Location = new(155, 12);
this.kbtnUtiliseAsBaseColour.Name = "kbtnUtiliseAsBaseColour";
this.kbtnUtiliseAsBaseColour.Size = new(142, 25);
@@ -111,8 +110,7 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.Location = new(921, 12);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -122,7 +120,6 @@ private void InitializeComponent()
//
// kbtnSaveColour
//
- this.kbtnSaveColour.CornerRoundingRadius = -1F;
this.kbtnSaveColour.Enabled = false;
this.kbtnSaveColour.Location = new(12, 12);
this.kbtnSaveColour.Name = "kbtnSaveColour";
@@ -201,7 +198,6 @@ private void InitializeComponent()
//
// kcmbNormalTextSystemColours
//
- this.kcmbNormalTextSystemColours.CornerRoundingRadius = -1F;
this.kcmbNormalTextSystemColours.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbNormalTextSystemColours.DropDownWidth = 173;
this.kcmbNormalTextSystemColours.IntegralHeight = false;
@@ -222,7 +218,6 @@ private void InitializeComponent()
//
// kcmbNormalTextColour
//
- this.kcmbNormalTextColour.CornerRoundingRadius = -1F;
this.kcmbNormalTextColour.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbNormalTextColour.DropDownWidth = 173;
this.kcmbNormalTextColour.IntegralHeight = false;
@@ -243,7 +238,6 @@ private void InitializeComponent()
//
// kbtnGenerateNormalTextBlueValue
//
- this.kbtnGenerateNormalTextBlueValue.CornerRoundingRadius = -1F;
this.kbtnGenerateNormalTextBlueValue.Location = new(780, 282);
this.kbtnGenerateNormalTextBlueValue.Name = "kbtnGenerateNormalTextBlueValue";
this.kbtnGenerateNormalTextBlueValue.Size = new(90, 25);
@@ -277,7 +271,6 @@ private void InitializeComponent()
//
// kbtnGenerateNormalTextGreenValue
//
- this.kbtnGenerateNormalTextGreenValue.CornerRoundingRadius = -1F;
this.kbtnGenerateNormalTextGreenValue.Location = new(463, 282);
this.kbtnGenerateNormalTextGreenValue.Name = "kbtnGenerateNormalTextGreenValue";
this.kbtnGenerateNormalTextGreenValue.Size = new(106, 25);
@@ -310,7 +303,6 @@ private void InitializeComponent()
//
// kbtnGenerateNormalTextRedValue
//
- this.kbtnGenerateNormalTextRedValue.CornerRoundingRadius = -1F;
this.kbtnGenerateNormalTextRedValue.Location = new(140, 282);
this.kbtnGenerateNormalTextRedValue.Name = "kbtnGenerateNormalTextRedValue";
this.kbtnGenerateNormalTextRedValue.Size = new(90, 25);
@@ -365,15 +357,15 @@ private void InitializeComponent()
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Define Custom Colours";
this.Load += new(this.CustomColours_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbxColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbNormalTextSystemColours)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbNormalTextColour)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbNormalTextSystemColours).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbNormalTextColour).EndInit();
this.ResumeLayout(false);
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/DefineIndividualColoursDialog.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/DefineIndividualColoursDialog.cs
index 5470ccd76..f713de6e7 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/DefineIndividualColoursDialog.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/DefineIndividualColoursDialog.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -103,12 +103,11 @@ private void InitializeComponent()
//
// kManager
//
- this.kManager.GlobalPalette = this.kPal;
+ this.kManager.GlobalCustomPalette = this.kPal;
this.kManager.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.Custom;
//
// kPal
//
- this.kPal.BaseFontSize = 9F;
this.kPal.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom;
this.kPal.ThemeName = null;
//
@@ -125,7 +124,6 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.CornerRoundingRadius = -1F;
this.kbtnOk.Location = new System.Drawing.Point(652, 13);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new System.Drawing.Size(90, 25);
@@ -206,7 +204,6 @@ private void InitializeComponent()
//
// kbtnGenerateAlpha
//
- this.kbtnGenerateAlpha.CornerRoundingRadius = -1F;
this.kbtnGenerateAlpha.Location = new System.Drawing.Point(13, 14);
this.kbtnGenerateAlpha.Name = "kbtnGenerateAlpha";
this.kbtnGenerateAlpha.Size = new System.Drawing.Size(124, 25);
@@ -216,7 +213,6 @@ private void InitializeComponent()
//
// kbtnGenerateRedValue
//
- this.kbtnGenerateRedValue.CornerRoundingRadius = -1F;
this.kbtnGenerateRedValue.Location = new System.Drawing.Point(13, 52);
this.kbtnGenerateRedValue.Name = "kbtnGenerateRedValue";
this.kbtnGenerateRedValue.Size = new System.Drawing.Size(124, 25);
@@ -226,7 +222,6 @@ private void InitializeComponent()
//
// kbtnGenerateGreenValue
//
- this.kbtnGenerateGreenValue.CornerRoundingRadius = -1F;
this.kbtnGenerateGreenValue.Location = new System.Drawing.Point(13, 90);
this.kbtnGenerateGreenValue.Name = "kbtnGenerateGreenValue";
this.kbtnGenerateGreenValue.Size = new System.Drawing.Size(124, 25);
@@ -236,7 +231,6 @@ private void InitializeComponent()
//
// kbtnGenerateBlueValue
//
- this.kbtnGenerateBlueValue.CornerRoundingRadius = -1F;
this.kbtnGenerateBlueValue.Location = new System.Drawing.Point(13, 128);
this.kbtnGenerateBlueValue.Name = "kbtnGenerateBlueValue";
this.kbtnGenerateBlueValue.Size = new System.Drawing.Size(124, 25);
@@ -252,7 +246,6 @@ private void InitializeComponent()
"Middle Colour",
"Light Colour",
"Lightest Colour"});
- this.kcmbDefinedColour.CornerRoundingRadius = -1F;
this.kcmbDefinedColour.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbDefinedColour.DropDownWidth = 173;
this.kcmbDefinedColour.IntegralHeight = false;
@@ -281,7 +274,6 @@ private void InitializeComponent()
//
// kbtnExportSelectedColour
//
- this.kbtnExportSelectedColour.CornerRoundingRadius = -1F;
this.kbtnExportSelectedColour.Enabled = false;
this.kbtnExportSelectedColour.Location = new System.Drawing.Point(584, 525);
this.kbtnExportSelectedColour.Name = "kbtnExportSelectedColour";
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/HexadecimalToRGBConverter.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/HexadecimalToRGBConverter.cs
index 8f4779b41..187417b1c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/HexadecimalToRGBConverter.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/HexadecimalToRGBConverter.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -62,9 +62,9 @@ private void InitializeComponent()
this.ktxtHexValue = new();
this.kryptonLabel5 = new();
this.kryptonBorderEdge1 = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
this.ctxColourList.SuspendLayout();
this.SuspendLayout();
@@ -85,9 +85,8 @@ private void InitializeComponent()
//
// kbtnLoadFromFile
//
- this.kbtnLoadFromFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.kbtnLoadFromFile.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnLoadFromFile.AutoSize = true;
- this.kbtnLoadFromFile.CornerRoundingRadius = -1F;
this.kbtnLoadFromFile.Location = new(108, 14);
this.kbtnLoadFromFile.Name = "kbtnLoadFromFile";
this.kbtnLoadFromFile.Size = new(90, 25);
@@ -97,9 +96,8 @@ private void InitializeComponent()
//
// kbtnExport
//
- this.kbtnExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.kbtnExport.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
this.kbtnExport.AutoSize = true;
- this.kbtnExport.CornerRoundingRadius = -1F;
this.kbtnExport.Enabled = false;
this.kbtnExport.Location = new(12, 14);
this.kbtnExport.Name = "kbtnExport";
@@ -110,9 +108,8 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.AutoSize = true;
- this.kbtnOk.CornerRoundingRadius = -1F;
this.kbtnOk.Location = new(618, 14);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -122,9 +119,8 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.kbtnCancel.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnCancel.AutoSize = true;
- this.kbtnCancel.CornerRoundingRadius = -1F;
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new(714, 14);
this.kbtnCancel.Name = "kbtnCancel";
@@ -147,7 +143,6 @@ private void InitializeComponent()
//
// kbtnConvertToRGB
//
- this.kbtnConvertToRGB.CornerRoundingRadius = -1F;
this.kbtnConvertToRGB.Enabled = false;
this.kbtnConvertToRGB.Location = new(277, 577);
this.kbtnConvertToRGB.Name = "kbtnConvertToRGB";
@@ -223,10 +218,10 @@ private void InitializeComponent()
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Hexadecimal to RGB Converter";
this.Load += new(this.HexadecimalToRGBConverter_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
this.ctxColourList.ResumeLayout(false);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalBasicPaletteCreator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalBasicPaletteCreator.cs
index cb43e75b7..6b6f246df 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalBasicPaletteCreator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalBasicPaletteCreator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -118,15 +118,15 @@ private void InitializeComponent()
this.kryptonBorderEdge1 = new();
this.kryptonTableLayoutPanel1 = new();
this.statusStrip1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxLightestColour)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxLightColour)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxMediumColour)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxDarkestColour)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxBaseColour)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxLightestColour).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxLightColour).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxMediumColour).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxDarkestColour).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxBaseColour).BeginInit();
this.kryptonTableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
@@ -166,7 +166,6 @@ private void InitializeComponent()
//
// kbtnDebugConsole
//
- this.kbtnDebugConsole.CornerRoundingRadius = -1F;
this.kbtnDebugConsole.Location = new(432, 13);
this.kbtnDebugConsole.Name = "kbtnDebugConsole";
this.kbtnDebugConsole.Size = new(96, 25);
@@ -176,7 +175,6 @@ private void InitializeComponent()
//
// kbtnOptions
//
- this.kbtnOptions.CornerRoundingRadius = -1F;
this.kbtnOptions.Location = new(335, 13);
this.kbtnOptions.Name = "kbtnOptions";
this.kbtnOptions.Size = new(90, 25);
@@ -185,7 +183,6 @@ private void InitializeComponent()
//
// kbtnImportColours
//
- this.kbtnImportColours.CornerRoundingRadius = -1F;
this.kbtnImportColours.Location = new(224, 13);
this.kbtnImportColours.Name = "kbtnImportColours";
this.kbtnImportColours.Size = new(104, 25);
@@ -194,7 +191,6 @@ private void InitializeComponent()
//
// kbtnExportColours
//
- this.kbtnExportColours.CornerRoundingRadius = -1F;
this.kbtnExportColours.Enabled = false;
this.kbtnExportColours.Location = new(128, 13);
this.kbtnExportColours.Name = "kbtnExportColours";
@@ -204,7 +200,6 @@ private void InitializeComponent()
//
// kbtnGenerateColours
//
- this.kbtnGenerateColours.CornerRoundingRadius = -1F;
this.kbtnGenerateColours.Location = new(13, 13);
this.kbtnGenerateColours.Name = "kbtnGenerateColours";
this.kbtnGenerateColours.Size = new(109, 25);
@@ -213,8 +208,7 @@ private void InitializeComponent()
//
// kryptonButton1
//
- this.kryptonButton1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kryptonButton1.CornerRoundingRadius = -1F;
+ this.kryptonButton1.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kryptonButton1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.kryptonButton1.Location = new(752, 13);
this.kryptonButton1.Name = "kryptonButton1";
@@ -257,7 +251,7 @@ private void InitializeComponent()
this.ktxtHexadecimalValue.MaxLength = 6;
this.ktxtHexadecimalValue.Name = "ktxtHexadecimalValue";
this.ktxtHexadecimalValue.Size = new(100, 24);
- this.ktxtHexadecimalValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.ktxtHexadecimalValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.ktxtHexadecimalValue.TabIndex = 107;
this.ktxtHexadecimalValue.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
@@ -272,7 +266,6 @@ private void InitializeComponent()
//
// kbtnGenerateRandomColour
//
- this.kbtnGenerateRandomColour.CornerRoundingRadius = -1F;
this.kbtnGenerateRandomColour.Location = new(493, 537);
this.kbtnGenerateRandomColour.Name = "kbtnGenerateRandomColour";
this.kbtnGenerateRandomColour.Size = new(177, 25);
@@ -286,13 +279,12 @@ private void InitializeComponent()
this.kcbtnChooseBaseColour.Name = "kcbtnChooseBaseColour";
this.kcbtnChooseBaseColour.Size = new(197, 25);
this.kcbtnChooseBaseColour.TabIndex = 103;
- this.kcbtnChooseBaseColour.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnChooseBaseColour.Values.Image")));
+ this.kcbtnChooseBaseColour.Values.Image = (System.Drawing.Image)resources.GetObject("kcbtnChooseBaseColour.Values.Image");
this.kcbtnChooseBaseColour.Values.RoundedCorners = 8;
this.kcbtnChooseBaseColour.Values.Text = "Ch&oose a Base Colour";
//
// kbtnGenerateGreen
//
- this.kbtnGenerateGreen.CornerRoundingRadius = -1F;
this.kbtnGenerateGreen.Location = new(589, 409);
this.kbtnGenerateGreen.Name = "kbtnGenerateGreen";
this.kbtnGenerateGreen.Size = new(120, 25);
@@ -301,7 +293,6 @@ private void InitializeComponent()
//
// kbtnGenerateBlue
//
- this.kbtnGenerateBlue.CornerRoundingRadius = -1F;
this.kbtnGenerateBlue.Location = new(725, 409);
this.kbtnGenerateBlue.Name = "kbtnGenerateBlue";
this.kbtnGenerateBlue.Size = new(119, 25);
@@ -310,7 +301,6 @@ private void InitializeComponent()
//
// kbtnGenerateRed
//
- this.kbtnGenerateRed.CornerRoundingRadius = -1F;
this.kbtnGenerateRed.Location = new(445, 409);
this.kbtnGenerateRed.Name = "kbtnGenerateRed";
this.kbtnGenerateRed.Size = new(120, 25);
@@ -329,7 +319,7 @@ private void InitializeComponent()
this.knudBlueValue.Size = new(74, 23);
this.knudBlueValue.StateCommon.Back.Color1 = System.Drawing.Color.Blue;
this.knudBlueValue.StateCommon.Content.Color1 = System.Drawing.Color.White;
- this.knudBlueValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.knudBlueValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.knudBlueValue.TabIndex = 99;
//
// knudGreenValue
@@ -344,7 +334,7 @@ private void InitializeComponent()
this.knudGreenValue.Size = new(74, 23);
this.knudGreenValue.StateCommon.Back.Color1 = System.Drawing.Color.Green;
this.knudGreenValue.StateCommon.Content.Color1 = System.Drawing.Color.White;
- this.knudGreenValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.knudGreenValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.knudGreenValue.TabIndex = 98;
//
// knudRedValue
@@ -359,7 +349,7 @@ private void InitializeComponent()
this.knudRedValue.Size = new(74, 23);
this.knudRedValue.StateCommon.Back.Color1 = System.Drawing.Color.Red;
this.knudRedValue.StateCommon.Content.Color1 = System.Drawing.Color.White;
- this.knudRedValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.knudRedValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.knudRedValue.TabIndex = 97;
//
// knudAlphaValue
@@ -372,7 +362,7 @@ private void InitializeComponent()
0});
this.knudAlphaValue.Name = "knudAlphaValue";
this.knudAlphaValue.Size = new(74, 23);
- this.knudAlphaValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.knudAlphaValue.StateCommon.Content.Font = new("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.knudAlphaValue.TabIndex = 96;
this.knudAlphaValue.Value = new(new int[] {
255,
@@ -583,7 +573,7 @@ private void InitializeComponent()
//
// kryptonTableLayoutPanel1
//
- this.kryptonTableLayoutPanel1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("kryptonTableLayoutPanel1.BackgroundImage")));
+ this.kryptonTableLayoutPanel1.BackgroundImage = (System.Drawing.Image)resources.GetObject("kryptonTableLayoutPanel1.BackgroundImage");
this.kryptonTableLayoutPanel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.kryptonTableLayoutPanel1.ColumnCount = 1;
this.kryptonTableLayoutPanel1.ColumnStyles.Add(new(System.Windows.Forms.SizeType.Percent, 100F));
@@ -628,17 +618,17 @@ private void InitializeComponent()
this.Load += new(this.InternalBasicPaletteCreator_Load);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxLightestColour)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxLightColour)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxMediumColour)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxDarkestColour)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cpbxBaseColour)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxLightestColour).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxLightColour).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxMediumColour).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxDarkestColour).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cpbxBaseColour).EndInit();
this.kryptonTableLayoutPanel1.ResumeLayout(false);
this.kryptonTableLayoutPanel1.PerformLayout();
this.ResumeLayout(false);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalKryptonPaletteBasicColourCreator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalKryptonPaletteBasicColourCreator.cs
index 28bc48142..d583550d3 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalKryptonPaletteBasicColourCreator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/InternalKryptonPaletteBasicColourCreator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteColourCreator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteColourCreator.cs
index 407a1cf65..93b166186 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteColourCreator.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteColourCreator.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -326,7 +326,6 @@ private void InitializeComponent()
//
// kbtnDefineCustomColours
//
- this.kbtnDefineCustomColours.CornerRoundingRadius = -1F;
this.kbtnDefineCustomColours.Location = new System.Drawing.Point(183, 372);
this.kbtnDefineCustomColours.Name = "kbtnDefineCustomColours";
this.kbtnDefineCustomColours.Size = new System.Drawing.Size(177, 25);
@@ -347,7 +346,6 @@ private void InitializeComponent()
//
this.kbtnFileExport.AutoSize = true;
this.kbtnFileExport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.kbtnFileExport.CornerRoundingRadius = -1F;
this.kbtnFileExport.Location = new System.Drawing.Point(14, 582);
this.kbtnFileExport.Name = "kbtnFileExport";
this.kbtnFileExport.Size = new System.Drawing.Size(88, 30);
@@ -381,7 +379,6 @@ private void InitializeComponent()
//
// kbtnGenerateBlueValue
//
- this.kbtnGenerateBlueValue.CornerRoundingRadius = -1F;
this.kbtnGenerateBlueValue.Location = new System.Drawing.Point(845, 325);
this.kbtnGenerateBlueValue.Name = "kbtnGenerateBlueValue";
this.kbtnGenerateBlueValue.Size = new System.Drawing.Size(105, 25);
@@ -391,7 +388,6 @@ private void InitializeComponent()
//
// kbtnGenerateGreenValue
//
- this.kbtnGenerateGreenValue.CornerRoundingRadius = -1F;
this.kbtnGenerateGreenValue.Location = new System.Drawing.Point(845, 282);
this.kbtnGenerateGreenValue.Name = "kbtnGenerateGreenValue";
this.kbtnGenerateGreenValue.Size = new System.Drawing.Size(105, 25);
@@ -401,7 +397,6 @@ private void InitializeComponent()
//
// kbtnGenerateRedValue
//
- this.kbtnGenerateRedValue.CornerRoundingRadius = -1F;
this.kbtnGenerateRedValue.Location = new System.Drawing.Point(845, 238);
this.kbtnGenerateRedValue.Name = "kbtnGenerateRedValue";
this.kbtnGenerateRedValue.Size = new System.Drawing.Size(105, 25);
@@ -548,7 +543,6 @@ private void InitializeComponent()
//
// kbtnExport
//
- this.kbtnExport.CornerRoundingRadius = -1F;
this.kbtnExport.Enabled = false;
this.kbtnExport.Location = new System.Drawing.Point(133, 7);
this.kbtnExport.Name = "kbtnExport";
@@ -559,7 +553,6 @@ private void InitializeComponent()
//
// kbtnGenerate
//
- this.kbtnGenerate.CornerRoundingRadius = -1F;
this.kbtnGenerate.Location = new System.Drawing.Point(14, 7);
this.kbtnGenerate.Name = "kbtnGenerate";
this.kbtnGenerate.Size = new System.Drawing.Size(113, 25);
@@ -603,7 +596,6 @@ private void InitializeComponent()
//
// kbtnDebugConsole
//
- this.kbtnDebugConsole.CornerRoundingRadius = -1F;
this.kbtnDebugConsole.Location = new System.Drawing.Point(576, 7);
this.kbtnDebugConsole.Name = "kbtnDebugConsole";
this.kbtnDebugConsole.Size = new System.Drawing.Size(108, 25);
@@ -613,7 +605,6 @@ private void InitializeComponent()
//
// kbtnOptions
//
- this.kbtnOptions.CornerRoundingRadius = -1F;
this.kbtnOptions.Location = new System.Drawing.Point(480, 7);
this.kbtnOptions.Name = "kbtnOptions";
this.kbtnOptions.Size = new System.Drawing.Size(90, 25);
@@ -623,7 +614,6 @@ private void InitializeComponent()
//
// kbtnDefineIndividualColours
//
- this.kbtnDefineIndividualColours.CornerRoundingRadius = -1F;
this.kbtnDefineIndividualColours.Location = new System.Drawing.Point(325, 7);
this.kbtnDefineIndividualColours.Name = "kbtnDefineIndividualColours";
this.kbtnDefineIndividualColours.Size = new System.Drawing.Size(149, 25);
@@ -633,7 +623,6 @@ private void InitializeComponent()
//
// kbtnImportColours
//
- this.kbtnImportColours.CornerRoundingRadius = -1F;
this.kbtnImportColours.Location = new System.Drawing.Point(229, 7);
this.kbtnImportColours.Name = "kbtnImportColours";
this.kbtnImportColours.Size = new System.Drawing.Size(90, 25);
@@ -661,7 +650,6 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.CornerRoundingRadius = -1F;
this.kbtnOk.Location = new System.Drawing.Point(924, 7);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new System.Drawing.Size(90, 25);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteFileEditor.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteFileEditor.cs
index b7e6bd762..6403c1525 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteFileEditor.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Colours/PaletteFileEditor.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -79,20 +79,18 @@ private void InitializeComponent()
// kbtnClose
//
this.kbtnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnClose.CornerRoundingRadius = -1F;
this.kbtnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnClose.Location = new System.Drawing.Point(529, 15);
this.kbtnClose.Name = "kbtnClose";
this.kbtnClose.Size = new System.Drawing.Size(90, 25);
this.kbtnClose.TabIndex = 31;
- this.kbtnClose.UseAsADialogButton = true;
+ this.kbtnClose.Values.UseAsADialogButton = true;
this.kbtnClose.Values.Text = "Cance&l";
//
// kbtnGenerateColours
//
this.kbtnGenerateColours.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.kbtnGenerateColours.AutoSize = true;
- this.kbtnGenerateColours.CornerRoundingRadius = -1F;
this.kbtnGenerateColours.Location = new System.Drawing.Point(318, 15);
this.kbtnGenerateColours.Name = "kbtnGenerateColours";
this.kbtnGenerateColours.Size = new System.Drawing.Size(105, 25);
@@ -103,7 +101,6 @@ private void InitializeComponent()
//
this.kbtnSaveFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.kbtnSaveFile.AutoSize = true;
- this.kbtnSaveFile.CornerRoundingRadius = -1F;
this.kbtnSaveFile.Location = new System.Drawing.Point(222, 15);
this.kbtnSaveFile.Name = "kbtnSaveFile";
this.kbtnSaveFile.Size = new System.Drawing.Size(90, 25);
@@ -114,7 +111,6 @@ private void InitializeComponent()
//
this.kbtnOpenFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.kbtnOpenFile.AutoSize = true;
- this.kbtnOpenFile.CornerRoundingRadius = -1F;
this.kbtnOpenFile.Location = new System.Drawing.Point(126, 15);
this.kbtnOpenFile.Name = "kbtnOpenFile";
this.kbtnOpenFile.Size = new System.Drawing.Size(90, 25);
@@ -125,7 +121,6 @@ private void InitializeComponent()
//
this.kbtnGenerateNewFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.kbtnGenerateNewFile.AutoSize = true;
- this.kbtnGenerateNewFile.CornerRoundingRadius = -1F;
this.kbtnGenerateNewFile.Location = new System.Drawing.Point(12, 15);
this.kbtnGenerateNewFile.Name = "kbtnGenerateNewFile";
this.kbtnGenerateNewFile.Size = new System.Drawing.Size(110, 25);
@@ -222,7 +217,7 @@ public PaletteFileEditor(string paletteFilePath)
}
catch (Exception error)
{
- ExceptionCapture.CaptureException(error);
+ DebugUtilities.NotImplemented(error.ToString());
}
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Debugging/ColourSettingsViewer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Debugging/ColourSettingsViewer.cs
index 3d97485b3..2868a116f 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Debugging/ColourSettingsViewer.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Debugging/ColourSettingsViewer.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -62,11 +62,11 @@ private void InitializeComponent()
this.klblRGBValues = new();
this.klbHexValues = new();
this.kryptonBorderEdge1 = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbxColourPreviewer)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxColourPreviewer).BeginInit();
this.SuspendLayout();
//
// kryptonPanel1
@@ -91,8 +91,7 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.Location = new(909, 12);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -126,7 +125,6 @@ private void InitializeComponent()
//
// kbtnLoadFromFile
//
- this.kbtnLoadFromFile.CornerRoundingRadius = -1F;
this.kbtnLoadFromFile.Location = new(13, 681);
this.kbtnLoadFromFile.Name = "kbtnLoadFromFile";
this.kbtnLoadFromFile.Size = new(137, 30);
@@ -135,7 +133,6 @@ private void InitializeComponent()
//
// kbtnExport
//
- this.kbtnExport.CornerRoundingRadius = -1F;
this.kbtnExport.Enabled = false;
this.kbtnExport.Location = new(13, 637);
this.kbtnExport.Name = "kbtnExport";
@@ -154,7 +151,6 @@ private void InitializeComponent()
//
// kbtnResetValues
//
- this.kbtnResetValues.CornerRoundingRadius = -1F;
this.kbtnResetValues.Enabled = false;
this.kbtnResetValues.Location = new(13, 593);
this.kbtnResetValues.Name = "kbtnResetValues";
@@ -164,7 +160,6 @@ private void InitializeComponent()
//
// kbtnAllColoursAsRGB
//
- this.kbtnAllColoursAsRGB.CornerRoundingRadius = -1F;
this.kbtnAllColoursAsRGB.Location = new(13, 549);
this.kbtnAllColoursAsRGB.Name = "kbtnAllColoursAsRGB";
this.kbtnAllColoursAsRGB.Size = new(292, 30);
@@ -174,7 +169,6 @@ private void InitializeComponent()
//
// kbtnAllColoursAsHex
//
- this.kbtnAllColoursAsHex.CornerRoundingRadius = -1F;
this.kbtnAllColoursAsHex.Location = new(13, 505);
this.kbtnAllColoursAsHex.Name = "kbtnAllColoursAsHex";
this.kbtnAllColoursAsHex.Size = new(292, 30);
@@ -216,13 +210,13 @@ private void InitializeComponent()
this.Name = "ColourSettingsViewer";
this.ShowInTaskbar = false;
this.Text = "Palette Debug Console";
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pbxColourPreviewer)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxColourPreviewer).EndInit();
this.ResumeLayout(false);
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ColourBlendingOptions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ColourBlendingOptions.cs
index 1a3a04c94..98f936c91 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ColourBlendingOptions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ColourBlendingOptions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -148,25 +148,25 @@ private void InitializeComponent()
this.bsaBrowse = new();
this.kryptonLabel10 = new();
this.kryptonBorderEdge1 = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableNavigator1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonDockableNavigator1).BeginInit();
this.kryptonDockableNavigator1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage1).BeginInit();
this.kryptonPage1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage2).BeginInit();
this.kryptonPage2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage3).BeginInit();
this.kryptonPage3.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightestColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxMediumColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxDarkColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxCircular)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.pbxStandard)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbDisplayType)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightestColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxMediumColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxDarkColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxCircular).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxStandard).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbDisplayType).BeginInit();
this.SuspendLayout();
//
// kryptonPanel1
@@ -185,8 +185,7 @@ private void InitializeComponent()
//
// kbtnResetValues
//
- this.kbtnResetValues.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.kbtnResetValues.CornerRoundingRadius = -1F;
+ this.kbtnResetValues.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
this.kbtnResetValues.Enabled = false;
this.kbtnResetValues.Location = new(12, 16);
this.kbtnResetValues.Name = "kbtnResetValues";
@@ -197,8 +196,7 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.Location = new(370, 16);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -207,8 +205,7 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnCancel.CornerRoundingRadius = -1F;
+ this.kbtnCancel.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnCancel.Location = new(466, 16);
this.kbtnCancel.Name = "kbtnCancel";
this.kbtnCancel.Size = new(90, 25);
@@ -217,8 +214,7 @@ private void InitializeComponent()
//
// kbtnApply
//
- this.kbtnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnApply.CornerRoundingRadius = -1F;
+ this.kbtnApply.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnApply.Enabled = false;
this.kbtnApply.Location = new(562, 16);
this.kbtnApply.Name = "kbtnApply";
@@ -370,7 +366,7 @@ private void InitializeComponent()
this.kcbBaseColour.Name = "kcbBaseColour";
this.kcbBaseColour.Size = new(179, 25);
this.kcbBaseColour.TabIndex = 90;
- this.kcbBaseColour.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbBaseColour.Values.Image")));
+ this.kcbBaseColour.Values.Image = (System.Drawing.Image)resources.GetObject("kcbBaseColour.Values.Image");
this.kcbBaseColour.Values.RoundedCorners = 8;
this.kcbBaseColour.Values.Text = "&Choose a Base Colour";
//
@@ -537,81 +533,73 @@ private void InitializeComponent()
//
// kbtnDarkColourIntensityValueMinus
//
- this.kbtnDarkColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnDarkColourIntensityValueMinus.Location = new(364, 13);
this.kbtnDarkColourIntensityValueMinus.Name = "kbtnDarkColourIntensityValueMinus";
this.kbtnDarkColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnDarkColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnDarkColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnDarkColourIntensityValueMinus.TabIndex = 74;
this.kbtnDarkColourIntensityValueMinus.Values.Text = "-";
//
// kbtnLightestColourIntensityValuePlus
//
- this.kbtnLightestColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtnLightestColourIntensityValuePlus.Location = new(400, 305);
this.kbtnLightestColourIntensityValuePlus.Name = "kbtnLightestColourIntensityValuePlus";
this.kbtnLightestColourIntensityValuePlus.Size = new(23, 30);
- this.kbtnLightestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightestColourIntensityValuePlus.TabIndex = 81;
this.kbtnLightestColourIntensityValuePlus.Values.Text = "+";
//
// kbnDarkestColourIntensityValuePlus
//
- this.kbnDarkestColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbnDarkestColourIntensityValuePlus.Location = new(400, 13);
this.kbnDarkestColourIntensityValuePlus.Name = "kbnDarkestColourIntensityValuePlus";
this.kbnDarkestColourIntensityValuePlus.Size = new(23, 30);
- this.kbnDarkestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbnDarkestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbnDarkestColourIntensityValuePlus.TabIndex = 75;
this.kbnDarkestColourIntensityValuePlus.Values.Text = "+";
//
// kbtnLightestColourIntensityValueMinus
//
- this.kbtnLightestColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnLightestColourIntensityValueMinus.Location = new(364, 305);
this.kbtnLightestColourIntensityValueMinus.Name = "kbtnLightestColourIntensityValueMinus";
this.kbtnLightestColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnLightestColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightestColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightestColourIntensityValueMinus.TabIndex = 80;
this.kbtnLightestColourIntensityValueMinus.Values.Text = "-";
//
// kbtnMiddleColourIntensityValueMinus
//
- this.kbtnMiddleColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnMiddleColourIntensityValueMinus.Location = new(364, 115);
this.kbtnMiddleColourIntensityValueMinus.Name = "kbtnMiddleColourIntensityValueMinus";
this.kbtnMiddleColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnMiddleColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnMiddleColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnMiddleColourIntensityValueMinus.TabIndex = 76;
this.kbtnMiddleColourIntensityValueMinus.Values.Text = "-";
//
// kbtLightColourIntensityValuePlus
//
- this.kbtLightColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtLightColourIntensityValuePlus.Location = new(400, 210);
this.kbtLightColourIntensityValuePlus.Name = "kbtLightColourIntensityValuePlus";
this.kbtLightColourIntensityValuePlus.Size = new(23, 30);
- this.kbtLightColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtLightColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtLightColourIntensityValuePlus.TabIndex = 79;
this.kbtLightColourIntensityValuePlus.Values.Text = "+";
//
// kbtnMiddleColourIntensityValuePlus
//
- this.kbtnMiddleColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtnMiddleColourIntensityValuePlus.Location = new(400, 115);
this.kbtnMiddleColourIntensityValuePlus.Name = "kbtnMiddleColourIntensityValuePlus";
this.kbtnMiddleColourIntensityValuePlus.Size = new(23, 30);
- this.kbtnMiddleColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnMiddleColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnMiddleColourIntensityValuePlus.TabIndex = 77;
this.kbtnMiddleColourIntensityValuePlus.Values.Text = "+";
//
// kbtnLightColourIntensityValueMinus
//
- this.kbtnLightColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnLightColourIntensityValueMinus.Location = new(364, 210);
this.kbtnLightColourIntensityValueMinus.Name = "kbtnLightColourIntensityValueMinus";
this.kbtnLightColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnLightColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightColourIntensityValueMinus.TabIndex = 78;
this.kbtnLightColourIntensityValueMinus.Values.Text = "-";
//
@@ -661,7 +649,6 @@ private void InitializeComponent()
//
// kcmbDisplayType
//
- this.kcmbDisplayType.CornerRoundingRadius = -1F;
this.kcmbDisplayType.DropDownWidth = 203;
this.kcmbDisplayType.IntegralHeight = false;
this.kcmbDisplayType.Items.AddRange(new object[] {
@@ -701,7 +688,7 @@ private void InitializeComponent()
//
// bsaReset
//
- this.bsaReset.Image = ((System.Drawing.Image)(resources.GetObject("bsaReset.Image")));
+ this.bsaReset.Image = (System.Drawing.Image)resources.GetObject("bsaReset.Image");
this.bsaReset.UniqueName = "e5d4e65c1b2f460a80f02567f0a10106";
//
// bsaBrowse
@@ -740,29 +727,29 @@ private void InitializeComponent()
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Colour Blending Options";
this.Load += new(this.ColourBlendingOptions_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableNavigator1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonDockableNavigator1).EndInit();
this.kryptonDockableNavigator1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage1).EndInit();
this.kryptonPage1.ResumeLayout(false);
this.kryptonPage1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage2).EndInit();
this.kryptonPage2.ResumeLayout(false);
this.kryptonPage2.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage3).EndInit();
this.kryptonPage3.ResumeLayout(false);
this.kryptonPage3.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightestColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxMediumColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxDarkColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxCircular)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.pbxStandard)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbDisplayType)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightestColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxMediumColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxDarkColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxCircular).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxStandard).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbDisplayType).EndInit();
this.ResumeLayout(false);
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/GlobalOptionsMenu.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/GlobalOptionsMenu.cs
index 432098837..6f78ac89a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/GlobalOptionsMenu.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/GlobalOptionsMenu.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -182,33 +182,33 @@ private void InitializeComponent()
this.kbtnResetColourIntegerSettings = new();
this.kbtnResetColourBlendingSettings = new();
this.kbtnNukeAllSettings = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonNavigator1).BeginInit();
this.kryptonNavigator1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage1).BeginInit();
this.kryptonPage1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableNavigator1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonDockableNavigator1).BeginInit();
this.kryptonDockableNavigator1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage3).BeginInit();
this.kryptonPage3.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightestColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxMediumColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxDarkColourPreview)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightestColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxMediumColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxDarkColourPreview).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage4).BeginInit();
this.kryptonPage4.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxCircular)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.pbxStandard)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbDisplayType)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage5)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxCircular).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxStandard).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbDisplayType).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage5).BeginInit();
this.kryptonPage5.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kpTheme)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpTheme).BeginInit();
this.kpTheme.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.ktcmbTheme)).BeginInit();
- ((System.ComponentModel.ISupportInitialize)(this.kpSettings)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.ktcmbTheme).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpSettings).BeginInit();
this.kpSettings.SuspendLayout();
this.SuspendLayout();
//
@@ -238,8 +238,7 @@ private void InitializeComponent()
//
// kbtnResetThemeValues
//
- this.kbtnResetThemeValues.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.kbtnResetThemeValues.CornerRoundingRadius = -1F;
+ this.kbtnResetThemeValues.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
this.kbtnResetThemeValues.Enabled = false;
this.kbtnResetThemeValues.Location = new(12, 15);
this.kbtnResetThemeValues.Name = "kbtnResetThemeValues";
@@ -249,8 +248,7 @@ private void InitializeComponent()
//
// kbtnResetColourBlendingValues
//
- this.kbtnResetColourBlendingValues.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
- this.kbtnResetColourBlendingValues.CornerRoundingRadius = -1F;
+ this.kbtnResetColourBlendingValues.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left);
this.kbtnResetColourBlendingValues.Enabled = false;
this.kbtnResetColourBlendingValues.Location = new(12, 15);
this.kbtnResetColourBlendingValues.Name = "kbtnResetColourBlendingValues";
@@ -260,8 +258,7 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.Location = new(396, 15);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -270,8 +267,7 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnCancel.CornerRoundingRadius = -1F;
+ this.kbtnCancel.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnCancel.Location = new(492, 15);
this.kbtnCancel.Name = "kbtnCancel";
this.kbtnCancel.Size = new(90, 25);
@@ -280,8 +276,7 @@ private void InitializeComponent()
//
// kbtnUACApply
//
- this.kbtnUACApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnUACApply.CornerRoundingRadius = -1F;
+ this.kbtnUACApply.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnUACApply.Enabled = false;
this.kbtnUACApply.Location = new(588, 15);
this.kbtnUACApply.Name = "kbtnUACApply";
@@ -440,7 +435,7 @@ private void InitializeComponent()
this.kcbBaseColour.Name = "kcbBaseColour";
this.kcbBaseColour.Size = new(179, 25);
this.kcbBaseColour.TabIndex = 61;
- this.kcbBaseColour.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbBaseColour.Values.Image")));
+ this.kcbBaseColour.Values.Image = (System.Drawing.Image)resources.GetObject("kcbBaseColour.Values.Image");
this.kcbBaseColour.Values.RoundedCorners = 8;
this.kcbBaseColour.Values.Text = "&Choose a Base Colour";
//
@@ -607,81 +602,73 @@ private void InitializeComponent()
//
// kbtnDarkColourIntensityValueMinus
//
- this.kbtnDarkColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnDarkColourIntensityValueMinus.Location = new(293, 20);
this.kbtnDarkColourIntensityValueMinus.Name = "kbtnDarkColourIntensityValueMinus";
this.kbtnDarkColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnDarkColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnDarkColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnDarkColourIntensityValueMinus.TabIndex = 45;
this.kbtnDarkColourIntensityValueMinus.Values.Text = "-";
//
// kbtnLightestColourIntensityValuePlus
//
- this.kbtnLightestColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtnLightestColourIntensityValuePlus.Location = new(329, 312);
this.kbtnLightestColourIntensityValuePlus.Name = "kbtnLightestColourIntensityValuePlus";
this.kbtnLightestColourIntensityValuePlus.Size = new(23, 30);
- this.kbtnLightestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightestColourIntensityValuePlus.TabIndex = 52;
this.kbtnLightestColourIntensityValuePlus.Values.Text = "+";
//
// kbnDarkestColourIntensityValuePlus
//
- this.kbnDarkestColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbnDarkestColourIntensityValuePlus.Location = new(329, 20);
this.kbnDarkestColourIntensityValuePlus.Name = "kbnDarkestColourIntensityValuePlus";
this.kbnDarkestColourIntensityValuePlus.Size = new(23, 30);
- this.kbnDarkestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbnDarkestColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbnDarkestColourIntensityValuePlus.TabIndex = 46;
this.kbnDarkestColourIntensityValuePlus.Values.Text = "+";
//
// kbtnLightestColourIntensityValueMinus
//
- this.kbtnLightestColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnLightestColourIntensityValueMinus.Location = new(293, 312);
this.kbtnLightestColourIntensityValueMinus.Name = "kbtnLightestColourIntensityValueMinus";
this.kbtnLightestColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnLightestColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightestColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightestColourIntensityValueMinus.TabIndex = 51;
this.kbtnLightestColourIntensityValueMinus.Values.Text = "-";
//
// kbtnMiddleColourIntensityValueMinus
//
- this.kbtnMiddleColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnMiddleColourIntensityValueMinus.Location = new(293, 122);
this.kbtnMiddleColourIntensityValueMinus.Name = "kbtnMiddleColourIntensityValueMinus";
this.kbtnMiddleColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnMiddleColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnMiddleColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnMiddleColourIntensityValueMinus.TabIndex = 47;
this.kbtnMiddleColourIntensityValueMinus.Values.Text = "-";
//
// kbtLightColourIntensityValuePlus
//
- this.kbtLightColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtLightColourIntensityValuePlus.Location = new(329, 217);
this.kbtLightColourIntensityValuePlus.Name = "kbtLightColourIntensityValuePlus";
this.kbtLightColourIntensityValuePlus.Size = new(23, 30);
- this.kbtLightColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtLightColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtLightColourIntensityValuePlus.TabIndex = 50;
this.kbtLightColourIntensityValuePlus.Values.Text = "+";
//
// kbtnMiddleColourIntensityValuePlus
//
- this.kbtnMiddleColourIntensityValuePlus.CornerRoundingRadius = -1F;
this.kbtnMiddleColourIntensityValuePlus.Location = new(329, 122);
this.kbtnMiddleColourIntensityValuePlus.Name = "kbtnMiddleColourIntensityValuePlus";
this.kbtnMiddleColourIntensityValuePlus.Size = new(23, 30);
- this.kbtnMiddleColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnMiddleColourIntensityValuePlus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnMiddleColourIntensityValuePlus.TabIndex = 48;
this.kbtnMiddleColourIntensityValuePlus.Values.Text = "+";
//
// kbtnLightColourIntensityValueMinus
//
- this.kbtnLightColourIntensityValueMinus.CornerRoundingRadius = -1F;
this.kbtnLightColourIntensityValueMinus.Location = new(293, 217);
this.kbtnLightColourIntensityValueMinus.Name = "kbtnLightColourIntensityValueMinus";
this.kbtnLightColourIntensityValueMinus.Size = new(18, 30);
- this.kbtnLightColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.kbtnLightColourIntensityValueMinus.StateCommon.Content.ShortText.Font = new("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (byte)0);
this.kbtnLightColourIntensityValueMinus.TabIndex = 49;
this.kbtnLightColourIntensityValueMinus.Values.Text = "-";
//
@@ -751,7 +738,6 @@ private void InitializeComponent()
//
// kcmbDisplayType
//
- this.kcmbDisplayType.CornerRoundingRadius = -1F;
this.kcmbDisplayType.DropDownWidth = 203;
this.kcmbDisplayType.IntegralHeight = false;
this.kcmbDisplayType.Items.AddRange(new object[] {
@@ -805,7 +791,7 @@ private void InitializeComponent()
//
// bsaReset
//
- this.bsaReset.Image = ((System.Drawing.Image)(resources.GetObject("bsaReset.Image")));
+ this.bsaReset.Image = (System.Drawing.Image)resources.GetObject("bsaReset.Image");
this.bsaReset.UniqueName = "e5d4e65c1b2f460a80f02567f0a10106";
//
// bsaBrowse
@@ -841,7 +827,6 @@ private void InitializeComponent()
//
// ktcmbTheme
//
- this.ktcmbTheme.CornerRoundingRadius = -1F;
this.ktcmbTheme.DropDownWidth = 198;
this.ktcmbTheme.IntegralHeight = false;
this.ktcmbTheme.Location = new(118, 22);
@@ -852,7 +837,6 @@ private void InitializeComponent()
//
// kbtnLoadTheme
//
- this.kbtnLoadTheme.CornerRoundingRadius = -1F;
this.kbtnLoadTheme.Enabled = false;
this.kbtnLoadTheme.Location = new(554, 97);
this.kbtnLoadTheme.Name = "kbtnLoadTheme";
@@ -873,7 +857,7 @@ private void InitializeComponent()
//
// buttonSpecAny1
//
- this.buttonSpecAny1.Image = ((System.Drawing.Image)(resources.GetObject("buttonSpecAny1.Image")));
+ this.buttonSpecAny1.Image = (System.Drawing.Image)resources.GetObject("buttonSpecAny1.Image");
this.buttonSpecAny1.UniqueName = "1f0247d059a64ff792fa7879355b8bf1";
//
// buttonSpecAny2
@@ -932,7 +916,6 @@ private void InitializeComponent()
//
// kbtnResetPaletteTypefaceSettings
//
- this.kbtnResetPaletteTypefaceSettings.CornerRoundingRadius = -1F;
this.kbtnResetPaletteTypefaceSettings.Location = new(18, 370);
this.kbtnResetPaletteTypefaceSettings.Name = "kbtnResetPaletteTypefaceSettings";
this.kbtnResetPaletteTypefaceSettings.Size = new(256, 25);
@@ -941,7 +924,6 @@ private void InitializeComponent()
//
// kbtnResetGlobalStringSettings
//
- this.kbtnResetGlobalStringSettings.CornerRoundingRadius = -1F;
this.kbtnResetGlobalStringSettings.Location = new(18, 312);
this.kbtnResetGlobalStringSettings.Name = "kbtnResetGlobalStringSettings";
this.kbtnResetGlobalStringSettings.Size = new(256, 25);
@@ -950,7 +932,6 @@ private void InitializeComponent()
//
// kbtnResetGlobalBooleanSettings
//
- this.kbtnResetGlobalBooleanSettings.CornerRoundingRadius = -1F;
this.kbtnResetGlobalBooleanSettings.Location = new(18, 254);
this.kbtnResetGlobalBooleanSettings.Name = "kbtnResetGlobalBooleanSettings";
this.kbtnResetGlobalBooleanSettings.Size = new(256, 25);
@@ -959,7 +940,6 @@ private void InitializeComponent()
//
// kbtnResetColourStringSettings
//
- this.kbtnResetColourStringSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourStringSettings.Location = new(18, 196);
this.kbtnResetColourStringSettings.Name = "kbtnResetColourStringSettings";
this.kbtnResetColourStringSettings.Size = new(256, 25);
@@ -968,7 +948,6 @@ private void InitializeComponent()
//
// kbtnResetColourSettings
//
- this.kbtnResetColourSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourSettings.Location = new(18, 138);
this.kbtnResetColourSettings.Name = "kbtnResetColourSettings";
this.kbtnResetColourSettings.Size = new(256, 25);
@@ -977,7 +956,6 @@ private void InitializeComponent()
//
// kbtnResetColourIntegerSettings
//
- this.kbtnResetColourIntegerSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourIntegerSettings.Location = new(18, 80);
this.kbtnResetColourIntegerSettings.Name = "kbtnResetColourIntegerSettings";
this.kbtnResetColourIntegerSettings.Size = new(256, 25);
@@ -986,7 +964,6 @@ private void InitializeComponent()
//
// kbtnResetColourBlendingSettings
//
- this.kbtnResetColourBlendingSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourBlendingSettings.Location = new(18, 22);
this.kbtnResetColourBlendingSettings.Name = "kbtnResetColourBlendingSettings";
this.kbtnResetColourBlendingSettings.Size = new(256, 25);
@@ -995,7 +972,6 @@ private void InitializeComponent()
//
// kbtnNukeAllSettings
//
- this.kbtnNukeAllSettings.CornerRoundingRadius = -1F;
this.kbtnNukeAllSettings.Location = new(18, 428);
this.kbtnNukeAllSettings.Name = "kbtnNukeAllSettings";
this.kbtnNukeAllSettings.Size = new(256, 25);
@@ -1016,38 +992,38 @@ private void InitializeComponent()
this.Text = "Global Options Menu";
this.TextExtra = "(For Development Use Only)";
this.Load += new(this.GlobalOptionsMenu_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
this.kryptonPanel1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonNavigator1).EndInit();
this.kryptonNavigator1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage1).EndInit();
this.kryptonPage1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableNavigator1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonDockableNavigator1).EndInit();
this.kryptonDockableNavigator1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage3).EndInit();
this.kryptonPage3.ResumeLayout(false);
this.kryptonPage3.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightestColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxLightColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxMediumColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.cbxDarkColourPreview)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightestColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxLightColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxMediumColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxDarkColourPreview).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage4).EndInit();
this.kryptonPage4.ResumeLayout(false);
this.kryptonPage4.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.cbxCircular)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.pbxStandard)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kcmbDisplayType)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPage5)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.cbxCircular).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.pbxStandard).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kcmbDisplayType).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPage5).EndInit();
this.kryptonPage5.ResumeLayout(false);
this.kryptonPage5.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kpTheme)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpTheme).EndInit();
this.kpTheme.ResumeLayout(false);
this.kpTheme.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.ktcmbTheme)).EndInit();
- ((System.ComponentModel.ISupportInitialize)(this.kpSettings)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.ktcmbTheme).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpSettings).EndInit();
this.kpSettings.ResumeLayout(false);
this.kpSettings.PerformLayout();
this.ResumeLayout(false);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/SettingsManagementOptions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/SettingsManagementOptions.cs
index add7cc893..a5a2c01ca 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/SettingsManagementOptions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/SettingsManagementOptions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -70,9 +70,9 @@ private void InitializeComponent()
this.kryptonBorderEdge1 = new();
this.kbtnCancel = new();
this.kchkAskForConfirmation = new();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).BeginInit();
this.kryptonPanel1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).BeginInit();
this.kryptonPanel2.SuspendLayout();
this.SuspendLayout();
//
@@ -94,7 +94,6 @@ private void InitializeComponent()
//
// kbtnResetPaletteTypefaceSettings
//
- this.kbtnResetPaletteTypefaceSettings.CornerRoundingRadius = -1F;
this.kbtnResetPaletteTypefaceSettings.Location = new(12, 360);
this.kbtnResetPaletteTypefaceSettings.Name = "kbtnResetPaletteTypefaceSettings";
this.kbtnResetPaletteTypefaceSettings.Size = new(226, 25);
@@ -104,7 +103,6 @@ private void InitializeComponent()
//
// kbtnResetGlobalStringSettings
//
- this.kbtnResetGlobalStringSettings.CornerRoundingRadius = -1F;
this.kbtnResetGlobalStringSettings.Location = new(12, 302);
this.kbtnResetGlobalStringSettings.Name = "kbtnResetGlobalStringSettings";
this.kbtnResetGlobalStringSettings.Size = new(226, 25);
@@ -114,7 +112,6 @@ private void InitializeComponent()
//
// kbtnResetGlobalBooleanSettings
//
- this.kbtnResetGlobalBooleanSettings.CornerRoundingRadius = -1F;
this.kbtnResetGlobalBooleanSettings.Location = new(12, 244);
this.kbtnResetGlobalBooleanSettings.Name = "kbtnResetGlobalBooleanSettings";
this.kbtnResetGlobalBooleanSettings.Size = new(226, 25);
@@ -124,7 +121,6 @@ private void InitializeComponent()
//
// kbtnResetColourStringSettings
//
- this.kbtnResetColourStringSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourStringSettings.Location = new(12, 186);
this.kbtnResetColourStringSettings.Name = "kbtnResetColourStringSettings";
this.kbtnResetColourStringSettings.Size = new(226, 25);
@@ -134,7 +130,6 @@ private void InitializeComponent()
//
// kbtnResetColourSettings
//
- this.kbtnResetColourSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourSettings.Location = new(12, 128);
this.kbtnResetColourSettings.Name = "kbtnResetColourSettings";
this.kbtnResetColourSettings.Size = new(226, 25);
@@ -144,7 +139,6 @@ private void InitializeComponent()
//
// kbtnResetColourIntegerSettings
//
- this.kbtnResetColourIntegerSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourIntegerSettings.Location = new(12, 70);
this.kbtnResetColourIntegerSettings.Name = "kbtnResetColourIntegerSettings";
this.kbtnResetColourIntegerSettings.Size = new(226, 25);
@@ -154,7 +148,6 @@ private void InitializeComponent()
//
// kbtnResetColourBlendingSettings
//
- this.kbtnResetColourBlendingSettings.CornerRoundingRadius = -1F;
this.kbtnResetColourBlendingSettings.Location = new(12, 12);
this.kbtnResetColourBlendingSettings.Name = "kbtnResetColourBlendingSettings";
this.kbtnResetColourBlendingSettings.Size = new(226, 25);
@@ -164,7 +157,6 @@ private void InitializeComponent()
//
// kbtnNukeAllSettings
//
- this.kbtnNukeAllSettings.CornerRoundingRadius = -1F;
this.kbtnNukeAllSettings.Location = new(12, 418);
this.kbtnNukeAllSettings.Name = "kbtnNukeAllSettings";
this.kbtnNukeAllSettings.Size = new(226, 25);
@@ -195,9 +187,8 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.kbtnCancel.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnCancel.AutoSize = true;
- this.kbtnCancel.CornerRoundingRadius = -1F;
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new(612, 15);
this.kbtnCancel.Name = "kbtnCancel";
@@ -228,9 +219,9 @@ private void InitializeComponent()
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Reset Settings";
this.Load += new(this.SettingsManagementOptions_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel1).EndInit();
this.kryptonPanel1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kryptonPanel2).EndInit();
this.kryptonPanel2.ResumeLayout(false);
this.kryptonPanel2.PerformLayout();
this.ResumeLayout(false);
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ThemeOptions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ThemeOptions.cs
index 8737eac1a..f05a75583 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ThemeOptions.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Options/ThemeOptions.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -83,11 +83,11 @@ private void InitializeComponent()
this.bsaBrowse = new();
this.klblCustomTheme = new();
this.kryptonLabel1 = new();
- ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpnlButtons).BeginInit();
this.kpnlButtons.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kpnlContent)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpnlContent).BeginInit();
this.kpnlContent.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.ktcmbTheme)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)this.ktcmbTheme).BeginInit();
this.SuspendLayout();
//
// kpnlButtons
@@ -115,8 +115,7 @@ private void InitializeComponent()
//
// kbtnRestoreToDefaults
//
- this.kbtnRestoreToDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnRestoreToDefaults.CornerRoundingRadius = -1F;
+ this.kbtnRestoreToDefaults.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnRestoreToDefaults.Enabled = false;
this.kbtnRestoreToDefaults.Location = new(12, 13);
this.kbtnRestoreToDefaults.Name = "kbtnRestoreToDefaults";
@@ -127,8 +126,7 @@ private void InitializeComponent()
//
// kbtnCancel
//
- this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnCancel.CornerRoundingRadius = -1F;
+ this.kbtnCancel.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.kbtnCancel.Location = new(501, 13);
this.kbtnCancel.Name = "kbtnCancel";
@@ -139,8 +137,7 @@ private void InitializeComponent()
//
// kbtnOk
//
- this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnOk.CornerRoundingRadius = -1F;
+ this.kbtnOk.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnOk.Location = new(405, 13);
this.kbtnOk.Name = "kbtnOk";
this.kbtnOk.Size = new(90, 25);
@@ -150,8 +147,7 @@ private void InitializeComponent()
//
// kbtnApply
//
- this.kbtnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.kbtnApply.CornerRoundingRadius = -1F;
+ this.kbtnApply.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.kbtnApply.Enabled = false;
this.kbtnApply.Location = new(597, 13);
this.kbtnApply.Name = "kbtnApply";
@@ -175,7 +171,6 @@ private void InitializeComponent()
//
// ktcmbTheme
//
- this.ktcmbTheme.CornerRoundingRadius = -1F;
this.ktcmbTheme.DropDownWidth = 198;
this.ktcmbTheme.IntegralHeight = false;
this.ktcmbTheme.Location = new(116, 10);
@@ -187,7 +182,6 @@ private void InitializeComponent()
//
// kbtnLoadTheme
//
- this.kbtnLoadTheme.CornerRoundingRadius = -1F;
this.kbtnLoadTheme.Enabled = false;
this.kbtnLoadTheme.Location = new(598, 84);
this.kbtnLoadTheme.Name = "kbtnLoadTheme";
@@ -210,7 +204,7 @@ private void InitializeComponent()
//
// bsaReset
//
- this.bsaReset.Image = ((System.Drawing.Image)(resources.GetObject("bsaReset.Image")));
+ this.bsaReset.Image = (System.Drawing.Image)resources.GetObject("bsaReset.Image");
this.bsaReset.UniqueName = "1f0247d059a64ff792fa7879355b8bf1";
this.bsaReset.Click += new(this.bsaReset_Click);
//
@@ -254,13 +248,13 @@ private void InitializeComponent()
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Palette Theme Options";
this.Load += new(this.ThemeOptions_Load);
- ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpnlButtons).EndInit();
this.kpnlButtons.ResumeLayout(false);
this.kpnlButtons.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.kpnlContent)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.kpnlContent).EndInit();
this.kpnlContent.ResumeLayout(false);
this.kpnlContent.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)(this.ktcmbTheme)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)this.ktcmbTheme).EndInit();
this.ResumeLayout(false);
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/System Information/SystemInformationWindow.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/System Information/SystemInformationWindow.cs
index 6d565c865..f439e17ac 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/System Information/SystemInformationWindow.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/System Information/SystemInformationWindow.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -100,7 +100,6 @@ private void InitializeComponent()
//
// kbtnClose
//
- this.kbtnClose.CornerRoundingRadius = -1F;
this.kbtnClose.Location = new System.Drawing.Point(697, 13);
this.kbtnClose.Name = "kbtnClose";
this.kbtnClose.Size = new System.Drawing.Size(90, 25);
@@ -255,7 +254,6 @@ private void InitializeComponent()
//
// kbtnSave
//
- this.kbtnSave.CornerRoundingRadius = -1F;
this.kbtnSave.Enabled = false;
this.kbtnSave.Location = new System.Drawing.Point(326, 15);
this.kbtnSave.Name = "kbtnSave";
@@ -265,7 +263,6 @@ private void InitializeComponent()
//
// kcmbClass
//
- this.kcmbClass.CornerRoundingRadius = -1F;
this.kcmbClass.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.kcmbClass.DropDownWidth = 121;
this.kcmbClass.IntegralHeight = false;
@@ -916,7 +913,7 @@ private string GetSystemDetails()
}
catch (Exception error)
{
- ExceptionCapture.CaptureException(error);
+ DebugUtilities.NotImplemented(error.ToString());
}
return sb.ToString();
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Utilities/KryptonFadeForm.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Utilities/KryptonFadeForm.cs
index ade8db383..68c170b4c 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Utilities/KryptonFadeForm.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/UX/Utilities/KryptonFadeForm.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyInformation.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyInformation.cs
index f62176fef..12ead712b 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyInformation.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyInformation.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyVersion.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyVersion.cs
index 12faac189..3eba14151 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyVersion.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Core/Version Framework/Classes/AssemblyVersion.cs
@@ -3,7 +3,7 @@
*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -77,7 +77,7 @@ public bool GetReferenceAssembly(Assembly assembly)
if (assemblyNameList.Length > 0)
{
- AssemblyInformation information = null;
+ AssemblyInformation? information = null;
ReferenceAssembly = new();
@@ -97,7 +97,7 @@ public bool GetReferenceAssembly(Assembly assembly)
}
catch (Exception error)
{
- ExceptionCapture.CaptureException(error);
+ DebugUtilities.NotImplemented(error.ToString());
return false;
}
@@ -120,7 +120,7 @@ public bool GetVersion(string fileName)
}
catch (Exception error)
{
- ExceptionCapture.CaptureException(error);
+ DebugUtilities.NotImplemented(error.ToString());
return false;
}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Globals/GlobalDeclarations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Globals/GlobalDeclarations.cs
index 81e9d4557..b512eaf4a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Globals/GlobalDeclarations.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Globals/GlobalDeclarations.cs
@@ -2,7 +2,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -44,4 +44,11 @@
global using System.Text;
global using System.Threading.Tasks;
global using System.Linq;
-global using System.Windows.Forms;
\ No newline at end of file
+global using System.Linq.Expressions;
+global using System.Runtime.CompilerServices;
+global using System.Threading;
+global using System.Windows.Forms;
+
+global using Krypton.Toolkit.Suite.Extended.Debug.Tools;
+global using SkiaSharp;
+global using SkiaSharp.Views.Desktop;
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj
index d7fbb4183..6e84d30a6 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation 2022.csproj
@@ -1,27 +1,15 @@
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
+
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
-
-
-
-
-
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
- net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows
+ net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows
@@ -71,9 +59,9 @@
- An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7. This package implements charts, graphs and other additional data visualisation tools.
+ An extension to the Standard Toolkit, which supports .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9. This package implements charts, graphs and other additional data visualisation tools.
- This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET Core 3.1 and .NET 5 - 7.
+ This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1, .NET 6, 8 and 9.
Also, all libraries are included targeting each specific framework version for performance purposes.
To view all of the extended toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Extended/Krypton-Toolkit-Suite-Extended-Modules.md
@@ -81,80 +69,47 @@
-
-
- preview
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
-
-
-
-
-
-
- preview
-
-
-
+
-
+
+
+
+
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation.licenseheader b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation.licenseheader
index 017566f45..3aaeb752a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation.licenseheader
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Krypton.Toolkit.Suite.Extended.Data.Visualisation.licenseheader
@@ -3,7 +3,7 @@
/*
* MIT License
*
- * Copyright (c) 2017 - 2023 Krypton Suite
+ * Copyright (c) 2017 - 2024 Krypton Suite
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/AxisLimits.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/AxisLimits.cs
deleted file mode 100644
index 15dd8dbcf..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/AxisLimits.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public struct AxisLimits : IEquatable
- {
- public readonly double XMin;
- public readonly double XMax;
- public readonly double YMin;
- public readonly double YMax;
- public override string ToString() => $"AxisLimits: x=[{XMin}, {XMax}] y=[{YMin}, {YMax}]";
-
- public readonly double XSpan;
- public readonly double YSpan;
- public readonly double XCenter;
- public readonly double YCenter;
-
- public AxisLimits(double xMin, double xMax, double yMin, double yMax)
- {
- (XMin, XMax, YMin, YMax) = (xMin, xMax, yMin, yMax);
- (XSpan, YSpan) = (XMax - XMin, YMax - YMin);
- (XCenter, YCenter) = (XMin + XSpan / 2, YMin + YSpan / 2);
- }
-
- public bool Equals(AxisLimits other) =>
- other.XMin == XMin &&
- other.XMax == XMax &&
- other.YMin == YMin &&
- other.YMax == YMax;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Coordinate.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Coordinate.cs
deleted file mode 100644
index 17c789d1a..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Coordinate.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// Describes an X/Y position in coordinate space
- ///
- public class Coordinate
- {
- public double X;
- public double Y;
-
- public Coordinate(double x, double y)
- {
- X = x;
- Y = y;
- }
-
- ///
- /// True as lone as neither coordinate is NaN or Infinity
- ///
- public bool IsFinite()
- {
- return
- !double.IsNaN(X) &&
- !double.IsNaN(Y) &&
- !double.IsInfinity(X) &&
- !double.IsInfinity(Y);
- }
-
- ///
- /// Return the distance to another coordinate (in coordinate units)
- ///
- public double Distance(Coordinate other)
- {
- double dX = Math.Abs(other.X - X);
- double dY = Math.Abs(other.Y - Y);
- return Math.Sqrt(dX * dX + dY * dY);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/DataGen.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/DataGen.cs
deleted file mode 100644
index 357771b2b..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/DataGen.cs
+++ /dev/null
@@ -1,1076 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public static class DataGen
- {
- ///
- /// Generates an array of numbers with constant spacing.
- ///
- /// The number of points
- /// The space between points. Default 1.
- /// The first point. Default 0
- /// An array of numbers with constant spacing.
- public static double[] Consecutive(int pointCount, double spacing = 1, double offset = 0)
- {
- double[] ys = new double[pointCount];
- for (int i = 0; i < ys.Length; i++)
- {
- ys[i] = i * spacing + offset;
- }
-
- return ys;
- }
-
- ///
- /// Generates an array of sine values of an input array.
- ///
- /// The arguments to the sine function.
- /// A number to multiply the output by. Default 1.
- /// An array of sine values
- public static double[] Sin(double[] xs, double mult = 1)
- {
- double[] ys = new double[xs.Length];
- for (int i = 0; i < xs.Length; i++)
- {
- ys[i] = Math.Sin(xs[i]) * mult;
- }
-
- return ys;
- }
-
- ///
- /// Generates an array of sine values.
- ///
- /// The number of values to generate.
- /// The number of periods. Default 1.
- /// The number to increment the output by. Default 0.
- /// The number to multiply the output by. Default 1.
- /// The fraction of a period to offset by. Default 0.
- /// An array of sine values
- public static double[] Sin(int pointCount, double oscillations = 1, double offset = 0, double mult = 1, double phase = 0)
- {
- double sinScale = 2 * Math.PI * oscillations / (pointCount - 1);
- double[] ys = new double[pointCount];
- for (int i = 0; i < ys.Length; i++)
- {
- ys[i] = Math.Sin(i * sinScale + phase * Math.PI * 2) * mult + offset;
- }
-
- return ys;
- }
-
- ///
- /// Return data for a sine wave that increases frequency toward the end of an array.
- /// This function may be useful for inspecting rendering artifacts when data is displayed at different densities.
- ///
- /// The number of values to generate.
- /// Increasing this value increases maximum frequency.
- /// An array of values
- public static double[] SinSweep(int pointCount, double density = 50.0)
- {
- double[] data = new double[pointCount];
- for (int i = 0; i < data.Length; i++)
- {
- double t = (double)i / pointCount * density;
- double tSquared = Math.Pow(t, 2);
- data[i] = Math.Sin(tSquared);
- }
- return data;
- }
-
- ///
- /// Generates an array of cosine values of an input array.
- ///
- /// The arguments to the cosine function.
- /// A number to multiply the output by. Default 1.
- /// An array of cosine values
- public static double[] Cos(double[] xs, double mult = 1)
- {
- double[] ys = new double[xs.Length];
- for (int i = 0; i < xs.Length; i++)
- {
- ys[i] = Math.Cos(xs[i]) * mult;
- }
-
- return ys;
- }
-
- ///
- /// Generates an array of cosine values.
- ///
- /// The number of values to generate.
- /// The number of periods. Default 1.
- /// The number to increment the output by. Default 0.
- /// The number to multiply the output by. Default 1.
- /// The fraction of a period to offset by. Default 0.
- /// An array of cosine values
- public static double[] Cos(int pointCount, double oscillations = 1, double offset = 0, double mult = 1, double phase = 0)
- {
- double sinScale = 2 * Math.PI * oscillations / (pointCount - 1);
- double[] ys = new double[pointCount];
- for (int i = 0; i < ys.Length; i++)
- {
- ys[i] = Math.Cos(i * sinScale + phase * Math.PI * 2) * mult + offset;
- }
-
- return ys;
- }
-
- ///
- /// Generates an array of tangent values of an input array.
- ///
- /// The arguments to the tangent function.
- /// A number to multiply the output by. Default 1.
- /// An array of tangent values
- public static double[] Tan(double[] xs, double mult = 1)
- {
- double[] ys = new double[xs.Length];
- for (int i = 0; i < xs.Length; i++)
- {
- ys[i] = Math.Tan(xs[i]) * mult;
- }
-
- return ys;
- }
-
- ///
- /// Generates an array of random numbers following a uniform distribution on the interval [offset, multiplier].
- ///
- /// The Random object to use.
- /// The number of random points to generate.
- /// The maximum number above offset that may be generated.
- /// The minimum number that may be generated.
- /// An array of random numbers.
- public static double[] Random(Random rand, int pointCount, double multiplier = 1, double offset = 0)
- {
- if (rand is null)
- {
- rand = new Random();
- }
-
- double[] ys = new double[pointCount];
- for (int i = 0; i < pointCount; i++)
- {
- ys[i] = rand.NextDouble() * multiplier + offset;
- }
-
- return ys;
- }
-
- ///
- /// Generates a 2D array of random numbers between 0 and 1 (uniform distribution)
- ///
- /// The Random object to use.
- /// number of rows (dimension 0)
- /// number of columns (dimension 1)
- /// Multiply values by this number after generation
- /// Add to values after multiplication
- /// 2D array filled with random numbers
- public static double[,] Random2D(Random rand, int rows, int columns, double multiplier = 1, double offset = 0)
- {
- if (rand is null)
- {
- throw new ArgumentNullException();
- }
-
- double[,] data = new double[rows, columns];
-
- for (int y = 0; y < data.GetLength(0); y++)
- {
- for (int x = 0; x < data.GetLength(1); x++)
- {
- data[y, x] = rand.NextDouble() * multiplier + offset;
- }
- }
-
- return data;
- }
-
- ///
- /// Generates an array of random numbers following a uniform distribution on the interval [offset, multiplier].
- ///
- /// The Random object to use.
- /// The number of random points to generate.
- /// The maximum number above offset that may be generated.
- /// The minimum number that may be generated.
- /// An array of random numbers.
- public static int[] RandomInts(Random rand, int pointCount, double multiplier = 1, double offset = 0)
- {
- if (rand is null)
- {
- rand = new Random();
- }
-
- int[] ys = new int[pointCount];
- for (int i = 0; i < pointCount; i++)
- {
- ys[i] = (int)(rand.NextDouble() * multiplier + offset);
- }
-
- return ys;
- }
-
- ///
- /// Generates a single value from a normal distribution.
- ///
- /// The Random object to use.
- /// The mean of the distribution.
- /// The standard deviation of the distribution.
- /// The maximum distance from the mean to generate, given as a multiple of the standard deviation.
- /// A single value from a normal distribution.
- public static double RandomNormalValue(Random rand, double mean, double stdDev, double maxSdMultiple = 10)
- {
- while (true)
- {
- double u1 = 1.0 - rand.NextDouble();
- double u2 = 1.0 - rand.NextDouble();
- double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2);
- if (Math.Abs(randStdNormal) < maxSdMultiple)
- {
- return mean + stdDev * randStdNormal;
- }
- }
- }
-
- ///
- /// Generates an array of values from a normal distribution.
- ///
- /// The number to seed the random number generator with.
- /// The number of points to generate.
- /// The mean of the distribution.
- /// The standard deviation of the distribution.
- /// The maximum distance from the mean to generate, given as a multiple of the standard deviation.
- /// An array of values from a normal distribution.
- public static double[] RandomNormal(int seed, int pointCount, double mean = .5, double stdDev = .5, double maxSdMultiple = 10) =>
- RandomNormal(new Random(seed), pointCount, mean, stdDev, maxSdMultiple);
-
- ///
- /// Generates an array of values from a normal distribution.
- ///
- /// The Random object to use.
- /// The number of points to generate.
- /// The mean of the distribution.
- /// The standard deviation of the distribution.
- /// The maximum distance from the mean to generate, given as a multiple of the standard deviation.
- /// An array of values from a normal distribution.
- public static double[] RandomNormal(Random rand, int pointCount, double mean = .5, double stdDev = .5, double maxSdMultiple = 10)
- {
- if (rand == null)
- {
- rand = new Random(0);
- }
-
- double[] values = new double[pointCount];
- for (int i = 0; i < values.Length; i++)
- {
- values[i] = RandomNormalValue(rand, mean, stdDev, maxSdMultiple);
- }
-
- return values;
- }
-
- ///
- /// Generates an array of data with normally distributed residuals about a line.
- ///
- /// The Random object to use.
- /// The number of points to generate. Default 100.
- /// The slope of the line. Default 1.
- /// The y-intercept of the line. Default 0.
- /// The standard deviation of the residuals. Default 0.1
- /// An array of approximately linear data.
- public static double[] NoisyLinear(Random rand, int pointCount = 100, double slope = 1, double offset = 0, double noise = 0.1)
- {
- if (rand is null)
- {
- rand = new Random(0);
- }
-
- double[] data = new double[pointCount];
- for (int i = 0; i < data.Length; i++)
- {
- data[i] = slope * i + offset + RandomNormalValue(rand, 0, noise);
- }
-
- return data;
- }
-
- ///
- /// Generates an array of data with uniformally distributed residuals about a sinusoidal curve.
- ///
- /// The Random object to use.
- /// The number of points to generate.
- /// The number of periods. Default 1.
- /// Twice the maximum residual, in units of mult. Default 0.5
- /// The number to multiply the residuals by. Default 1.
- /// An array of approximately sinusoidal data.
- public static double[] NoisySin(Random rand, int pointCount, double oscillations = 1, double noiseLevel = .5, double mult = 1)
- {
- if (rand is null)
- {
- rand = new Random(0);
- }
-
- double[] values = Sin(pointCount, oscillations);
- for (int i = 0; i < values.Length; i++)
- {
- values[i] += (rand.NextDouble() - .5) * noiseLevel * mult;
- }
-
- return values;
- }
-
- ///
- /// Generates a random color.
- ///
- /// The Random object to use.
- /// The min of each component. Default 0.
- /// The max of each component. Default 255.
- /// A random color.
- public static Color RandomColor(Random rand, int min = 0, int max = 255)
- {
- if (rand is null)
- {
- rand = new Random();
- }
-
- int r = rand.Next(min, max);
- int g = rand.Next(min, max);
- int b = rand.Next(min, max);
- return Color.FromArgb(r, g, b);
- }
-
- ///
- /// Return the cumulative sum of a random set of numbers using a fixed seed
- ///
- /// The number of points to generate.
- /// The max difference between points in the walk. Default 1.
- /// The first point in the walk. Default 0.
- /// The cumulative sum of a random set of numbers.
- public static double[] RandomWalk(int pointCount, double mult = 1, double offset = 0) =>
- RandomWalk(new Random(0), pointCount, mult, offset);
-
- ///
- /// Return the cumulative sum of a random set of numbers.
- ///
- /// The random object to use.
- /// The number of points to generate.
- /// The max difference between points in the walk. Default 1.
- /// The first point in the walk. Default 0.
- /// The cumulative sum of a random set of numbers.
- public static double[] RandomWalk(Random rand, int pointCount, double mult = 1, double offset = 0)
- {
- if (rand is null)
- {
- rand = new Random(0);
- }
-
- var data = new double[pointCount];
- data[0] = offset;
- for (int i = 1; i < data.Length; i++)
- {
- data[i] = data[i - 1] + (rand.NextDouble() * 2 - 1) * mult;
- }
-
- return data;
- }
-
- ///
- /// Generate unevenly-spaced X/Y points.
- /// X values walk upward (by values from 0 to 1)
- /// Y values walk randomly (by values from -1 to 1)
- ///
- public static (double[] xs, double[] ys) RandomWalk2D(Random rand, int pointCount)
- {
- double[] ys = new double[pointCount];
- double[] xs = new double[pointCount];
- for (int i = 1; i < ys.Length; i++)
- {
- ys[i] = ys[i - 1] + (rand.NextDouble() - .5) * 2;
- xs[i] = xs[i - 1] + rand.NextDouble();
- }
- return (xs, ys);
- }
-
- ///
- /// Return OHLC array with random prices X positions as DateTime.ToOATime() values using the given time delta
- ///
- /// The random object to use.
- /// The number of prices to generate.
- /// The difference in time between prices.
- /// The max difference between base prices around which that day's prices independently vary. Default 10.
- /// The initial base price. Default 123.45
- /// OHLC array with random prices
- public static OHLC[] RandomStockPrices(Random rand, int pointCount, TimeSpan delta, double mult = 10, double startingPrice = 123.45)
- {
- OHLC[] ohlcs = RandomStockPrices(rand, pointCount, mult, startingPrice);
-
- DateTime dt = new DateTime(1985, 9, 24, 9, 30, 0);
-
- for (int i = 0; i < ohlcs.Length; i++)
- {
- dt = dt + delta;
-
- while ((dt.DayOfWeek == DayOfWeek.Saturday) || (dt.DayOfWeek == DayOfWeek.Sunday))
- dt = dt + TimeSpan.FromDays(1);
-
- ohlcs[i].DateTime = dt;
- ohlcs[i].TimeSpan = delta;
- }
-
- return ohlcs;
- }
-
- ///
- /// Return OHLC array with random prices X positions as sequential numbers (0, 1, 2, etc.)
- ///
- /// The random object to use.
- /// The number of prices to generate.
- /// The max difference between base prices around which that day's prices independently vary. Default 10.
- /// The initial base price. Default 123.45
- /// OHLC array with random prices
- private static OHLC[] RandomStockPrices(Random rand, int pointCount, double mult = 10, double startingPrice = 123.45)
- {
- if (rand is null)
- {
- rand = new Random(0);
- }
-
- double[] basePrices = RandomWalk(rand, pointCount, mult, startingPrice);
-
- OHLC[] ohlcs = new OHLC[pointCount];
- for (int i = 0; i < ohlcs.Length; i++)
- {
- double basePrice = basePrices[i];
- double open = rand.NextDouble() * 10 + 50;
- double close = rand.NextDouble() * 10 + 50;
- double high = Math.Max(open, close) + rand.NextDouble() * 10;
- double low = Math.Min(open, close) - rand.NextDouble() * 10;
-
- open += basePrice;
- close += basePrice;
- high += basePrice;
- low += basePrice;
-
- ohlcs[i] = new OHLC(open, high, low, close, i);
- }
-
- return ohlcs;
- }
-
- ///
- /// Return OHLC array with random prices X positions as sequential numbers (0, 1, 2, etc.)
- ///
- /// The random object to use.
- /// The number of prices to generate.
- /// The max difference between base prices around which that day's prices independently vary. Default 10.
- /// The initial base price. Default 123.45
- /// The minutes between prices. Cumulative with deltaDays. Default 0.
- /// The days between prices. Cumulative with deltaMinutes. Default 1.
- /// Whether to use TimeSpan or integer x axis.
- /// OHLC array with random prices
- public static OHLC[] RandomStockPrices(Random rand, int pointCount, double mult = 10, double startingPrice = 123.45, int deltaMinutes = 0, int deltaDays = 1, bool sequential = true)
- {
- TimeSpan ts = TimeSpan.FromMinutes(deltaMinutes) + TimeSpan.FromDays(deltaDays);
- if (sequential)
- {
- return RandomStockPrices(rand, pointCount, mult, startingPrice);
- }
- else
- {
- return RandomStockPrices(rand, pointCount, ts, mult, startingPrice);
- }
- }
-
- ///
- /// Generates a random span.
- ///
- /// The random object to use.
- /// The minimum of the span. Default 0.
- /// Tge naximum of the span. Default 100.
- /// The minimum length of the span. Default 10.
- /// A random span.
- public static (double, double) RandomSpan(Random rand = null, double low = 0, double high = 100, double minimumSpacing = 10)
- {
- if (rand is null)
- {
- rand = new Random();
- }
-
- double span = Math.Abs(high - low);
-
- for (int attempts = 0; attempts < 10_000; attempts++)
- {
- double valA = rand.NextDouble() * span + low;
- double valB = rand.NextDouble() * span + low;
- if (Math.Abs(valA - valB) >= minimumSpacing)
- {
- if (valA < valB)
- {
- return (valA, valB);
- }
- else
- {
- return (valB, valA);
- }
- }
- }
-
- throw new ArgumentException();
- }
-
- ///
- /// Generates a range of values starting at 0 and separated by 1.
- ///
- /// The end of the range.
- /// A range of values.
- public static double[] Range(int stop)
- {
- return Range(0, stop, 1);
- }
-
- ///
- /// Generates a range of values separated by 1.
- ///
- /// The start of the range.
- /// The end of the range.
- /// A range of values.
- public static double[] Range(int start, int stop)
- {
- return Range(start, stop, 1);
- }
-
- ///
- /// Generates a range of values.
- ///
- /// The start of the range.
- /// The end of the range.
- /// The space between values.
- /// Indicates whether to include the stop point in the range. Default false.
- /// A range of values.
- public static double[] Range(double start, double stop, double step, bool includeStop = false)
- {
- if (step <= 0)
- {
- throw new ArgumentException("step must be >0. To make a descending series make stop < start.");
- }
-
- double valueSpan = Math.Abs(start - stop);
- int valueCount = (int)(valueSpan / step);
- double stepSize = (stop > start) ? step : -step;
- if (includeStop)
- {
- valueCount += 1;
- }
-
- double[] values = new double[valueCount];
-
- for (int i = 0; i < valueCount; i++)
- {
- values[i] = start + i * stepSize;
- }
-
- return values;
- }
-
- ///
- /// Generates an array of zeros
- ///
- /// The number of zeroes to generate
- /// An array of zeros
- public static double[] Zeros(int pointCount)
- {
- double[] values = new double[pointCount];
- return values;
- }
-
- ///
- /// Generates an array of ones
- ///
- /// The number of ones to generate
- /// An array of ones
- public static double[] Ones(int pointCount)
- {
- double[] values = new double[pointCount];
- for (int i = 0; i < pointCount; i++)
- {
- values[i] = 1;
- }
-
- return values;
- }
-
- ///
- /// Generates a Bitmap from data on the range [0, 255]
- ///
- /// The data to use.
- /// The colormap to use.
- /// A Bitmap
- public static Bitmap BitmapFrom2dArray(double[,] data, ColourMap cmap)
- {
- int width = data.GetLength(1);
- int height = data.GetLength(0);
-
- Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
- Rectangle rect = new Rectangle(0, 0, width, height);
- BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
-
- byte[] bytes = new byte[bmpData.Stride * height];
- for (int y = 0; y < height; y++)
- {
- for (int x = 0; x < width; x++)
- {
- bytes[y * bmpData.Stride + x] = (byte)data[y, x];
- }
- }
-
- Marshal.Copy(bytes, 0, bmpData.Scan0, bytes.Length);
- bmp.UnlockBits(bmpData);
-
- cmap.Apply(bmp);
- Bitmap bmp2 = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
-
- using (Graphics gfx = Graphics.FromImage(bmp2))
- {
- gfx.DrawImage(bmp, 0, 0);
- }
- return bmp2;
- }
-
- ///
- /// Generates a sample Bitmap.
- ///
- /// A sample Bitmap
- public static Bitmap SampleImage() => BitmapFrom2dArray(SampleImageData(), ColourMap.Viridis);
-
- ///
- /// Returns a sample 2D array of grayscale values.
- ///
- /// 2D array of grayscale values.
- public static double[,] SampleImageData()
- {
- double[,] imageData = {
- { 95, 113, 117, 118, 120, 126, 135, 125, 120, 117, 120, 122, 124, 125, 118, 114, 113, 109, 108, 111, 113, 114, 113, 116, 114, 111, 113, 114, 111, 108, 111, 114, 116, 118, 114, 112, 116, 120, 116, 113, 109, 111, 108, 105, 104, 104, 108, 108, 109, 108, 107, 107, 108, 111, 111, 111, 111, 117, 116, 116, 117, 114, 112, 107, 100 },
- { 99, 117, 121, 122, 120, 125, 133, 125, 114, 117, 122, 125, 126, 129, 121, 117, 117, 111, 112, 112, 113, 114, 118, 122, 122, 118, 116, 116, 114, 112, 113, 116, 122, 124, 121, 120, 120, 121, 117, 116, 118, 117, 116, 117, 113, 111, 111, 113, 117, 118, 120, 116, 117, 116, 112, 116, 118, 118, 120, 118, 121, 124, 121, 122, 117},
- { 100, 116, 126, 126, 124, 128, 125, 125, 124, 126, 130, 133, 126, 121, 121, 121, 116, 111, 114, 113, 112, 112, 118, 121, 121, 121, 120, 113, 113, 114, 116, 118, 120, 118, 117, 121, 122, 125, 125, 125, 128, 124, 125, 124, 116, 117, 117, 118, 121, 122, 122, 117, 121, 116, 116, 117, 126, 121, 120, 121, 124, 121, 114, 114, 107},
- { 103, 121, 134, 134, 133, 133, 131, 130, 128, 128, 130, 130, 125, 125, 126, 118, 116, 116, 116, 116, 116, 117, 120, 122, 126, 129, 124, 121, 121, 121, 120, 120, 126, 125, 124, 125, 126, 125, 125, 130, 134, 134, 134, 134, 126, 129, 129, 125, 124, 125, 125, 125, 124, 124, 125, 131, 137, 131, 128, 129, 129, 128, 124, 114, 101},
- { 107, 131, 137, 137, 143, 142, 137, 134, 135, 142, 141, 138, 137, 138, 134, 126, 124, 118, 120, 122, 121, 126, 126, 129, 129, 129, 124, 125, 128, 133, 131, 133, 134, 133, 131, 125, 125, 128, 126, 130, 133, 133, 138, 137, 137, 134, 133, 128, 129, 133, 135, 130, 129, 129, 134, 139, 143, 138, 130, 128, 128, 131, 125, 120, 107},
- { 108, 133, 134, 141, 142, 139, 141, 144, 146, 152, 152, 150, 141, 135, 133, 129, 134, 129, 129, 130, 126, 129, 126, 135, 135, 131, 129, 130, 134, 137, 141, 144, 147, 151, 143, 137, 137, 133, 129, 130, 133, 138, 148, 144, 141, 137, 135, 131, 137, 139, 138, 133, 134, 134, 141, 142, 141, 138, 135, 133, 129, 129, 124, 120, 108},
- { 113, 133, 138, 139, 138, 142, 139, 144, 154, 154, 151, 152, 151, 146, 144, 141, 138, 135, 135, 134, 133, 134, 135, 141, 137, 138, 138, 141, 141, 141, 147, 143, 148, 152, 155, 151, 146, 139, 138, 137, 141, 148, 155, 150, 146, 141, 138, 138, 143, 141, 141, 138, 141, 138, 141, 143, 138, 137, 137, 135, 130, 129, 128, 122, 111},
- { 121, 134, 139, 141, 143, 148, 150, 155, 158, 154, 150, 151, 154, 154, 155, 148, 142, 142, 142, 138, 134, 138, 141, 139, 141, 147, 147, 146, 147, 150, 148, 143, 146, 146, 150, 150, 147, 143, 141, 144, 150, 151, 154, 151, 146, 141, 138, 137, 141, 139, 139, 141, 144, 139, 142, 146, 141, 142, 144, 138, 131, 129, 130, 128, 118},
- { 126, 139, 147, 154, 158, 156, 155, 159, 156, 152, 151, 154, 152, 150, 148, 150, 150, 151, 143, 142, 138, 139, 139, 143, 150, 155, 154, 150, 142, 122, 103, 84, 79, 83, 95, 111, 126, 137, 141, 143, 147, 150, 148, 150, 147, 139, 138, 135, 141, 143, 139, 141, 144, 144, 143, 150, 143, 146, 151, 142, 134, 128, 130, 126, 124},
- { 128, 141, 152, 160, 168, 158, 151, 155, 158, 155, 155, 154, 150, 151, 154, 158, 158, 155, 150, 143, 143, 142, 143, 148, 158, 154, 143, 105, 65, 54, 37, 28, 27, 32, 36, 44, 56, 77, 112, 137, 148, 152, 155, 152, 150, 141, 141, 138, 139, 144, 144, 146, 148, 146, 148, 152, 148, 151, 155, 148, 139, 131, 131, 130, 122},
- { 126, 147, 151, 158, 160, 151, 152, 160, 163, 159, 159, 156, 155, 156, 160, 164, 161, 156, 156, 154, 155, 150, 152, 158, 155, 133, 75, 37, 45, 67, 37, 24, 19, 18, 19, 23, 36, 43, 40, 82, 138, 152, 158, 155, 148, 143, 144, 144, 144, 151, 152, 156, 156, 148, 150, 152, 151, 152, 155, 148, 143, 138, 137, 133, 125},
- { 125, 144, 151, 155, 159, 160, 161, 169, 172, 164, 163, 163, 163, 164, 167, 164, 159, 152, 155, 159, 158, 158, 163, 164, 138, 75, 45, 52, 67, 73, 45, 37, 27, 23, 22, 16, 14, 23, 27, 23, 71, 141, 158, 161, 160, 155, 148, 146, 148, 158, 159, 163, 164, 156, 155, 155, 152, 151, 151, 150, 144, 146, 139, 135, 122},
- { 121, 150, 168, 169, 169, 168, 172, 171, 173, 172, 172, 164, 167, 169, 169, 169, 164, 156, 156, 161, 161, 165, 169, 161, 87, 41, 56, 78, 103, 96, 70, 54, 35, 26, 26, 19, 15, 14, 15, 19, 22, 83, 152, 167, 165, 158, 148, 151, 151, 156, 161, 161, 161, 161, 165, 163, 158, 156, 151, 150, 143, 147, 139, 135, 128},
- { 118, 151, 173, 180, 177, 173, 182, 175, 173, 172, 167, 165, 167, 173, 176, 172, 165, 161, 159, 164, 168, 177, 175, 131, 56, 83, 128, 159, 172, 167, 146, 124, 97, 58, 36, 27, 18, 16, 15, 16, 15, 26, 112, 163, 167, 169, 164, 161, 158, 161, 164, 164, 165, 167, 172, 164, 160, 159, 151, 151, 147, 144, 139, 137, 130},
- { 118, 147, 165, 177, 176, 176, 181, 177, 175, 175, 172, 171, 175, 178, 176, 173, 167, 165, 164, 171, 181, 182, 159, 80, 82, 143, 186, 205, 207, 205, 190, 169, 142, 101, 70, 44, 23, 18, 14, 15, 18, 16, 48, 146, 173, 175, 171, 171, 167, 168, 169, 171, 172, 167, 167, 165, 161, 160, 156, 154, 148, 148, 142, 139, 129},
- { 133, 154, 167, 168, 168, 180, 182, 188, 186, 185, 180, 180, 176, 181, 178, 175, 176, 175, 169, 177, 185, 177, 112, 50, 118, 186, 214, 216, 218, 215, 208, 192, 167, 129, 88, 57, 35, 22, 14, 14, 18, 18, 22, 105, 177, 173, 172, 169, 175, 175, 175, 176, 173, 168, 171, 176, 173, 171, 167, 158, 152, 150, 142, 143, 138},
- { 142, 164, 180, 173, 173, 181, 190, 199, 197, 194, 188, 186, 185, 184, 181, 180, 186, 180, 173, 188, 198, 167, 65, 50, 135, 193, 214, 212, 214, 214, 208, 195, 173, 137, 96, 67, 44, 26, 23, 15, 13, 14, 14, 54, 161, 168, 164, 171, 172, 172, 177, 178, 175, 168, 172, 177, 181, 178, 171, 163, 158, 150, 143, 148, 144},
- { 139, 164, 182, 178, 168, 171, 193, 199, 201, 202, 199, 201, 194, 185, 178, 181, 185, 176, 171, 188, 189, 130, 53, 60, 141, 189, 203, 202, 203, 206, 201, 186, 159, 135, 111, 86, 61, 37, 22, 15, 14, 10, 10, 27, 125, 143, 152, 159, 151, 158, 168, 164, 168, 171, 171, 172, 176, 180, 173, 168, 163, 152, 147, 152, 144},
- { 118, 144, 163, 161, 144, 150, 182, 194, 201, 197, 185, 197, 197, 192, 181, 182, 189, 177, 181, 192, 158, 87, 39, 78, 148, 188, 199, 203, 203, 202, 201, 186, 163, 147, 133, 114, 94, 60, 26, 19, 15, 11, 10, 14, 78, 113, 130, 131, 131, 150, 158, 155, 154, 165, 168, 175, 173, 175, 172, 165, 163, 155, 144, 147, 143},
- { 94, 114, 117, 131, 122, 126, 161, 177, 178, 161, 156, 169, 193, 195, 194, 192, 195, 192, 198, 192, 131, 65, 32, 92, 160, 186, 194, 203, 206, 203, 197, 182, 172, 163, 147, 133, 108, 65, 28, 16, 11, 13, 10, 10, 58, 94, 101, 101, 112, 139, 141, 143, 137, 163, 173, 178, 175, 171, 171, 168, 163, 151, 134, 139, 137},
- { 79, 94, 87, 105, 117, 114, 128, 141, 141, 139, 130, 133, 150, 163, 190, 199, 198, 198, 203, 184, 111, 53, 27, 90, 156, 165, 167, 190, 199, 188, 146, 129, 134, 138, 129, 112, 91, 56, 22, 13, 9, 11, 13, 10, 45, 75, 82, 99, 111, 114, 118, 126, 117, 148, 168, 175, 171, 172, 180, 177, 155, 138, 121, 121, 101},
- { 49, 73, 77, 95, 111, 112, 121, 116, 109, 113, 105, 108, 108, 120, 139, 185, 193, 198, 195, 158, 90, 56, 30, 65, 101, 104, 100, 144, 178, 133, 73, 86, 99, 82, 66, 61, 65, 53, 23, 15, 10, 9, 13, 13, 33, 60, 70, 80, 99, 101, 108, 113, 105, 126, 156, 173, 176, 175, 186, 181, 159, 143, 130, 112, 96},
- { 40, 69, 82, 94, 100, 104, 109, 100, 96, 97, 87, 87, 99, 118, 114, 176, 193, 186, 181, 141, 75, 52, 32, 50, 65, 79, 56, 113, 172, 100, 75, 118, 78, 50, 49, 61, 91, 70, 33, 22, 15, 7, 11, 11, 26, 60, 61, 64, 82, 91, 97, 80, 82, 111, 147, 175, 176, 169, 175, 163, 147, 135, 124, 112, 116},
- { 41, 71, 90, 99, 97, 107, 97, 95, 97, 95, 74, 82, 92, 104, 111, 163, 148, 114, 133, 131, 67, 47, 26, 90, 125, 131, 104, 143, 180, 105, 109, 154, 133, 105, 112, 143, 131, 82, 32, 16, 14, 10, 11, 13, 22, 53, 57, 61, 71, 78, 77, 73, 77, 94, 141, 176, 177, 172, 168, 155, 141, 131, 111, 109, 111},
- { 44, 71, 84, 97, 94, 99, 94, 87, 88, 83, 71, 77, 77, 80, 80, 108, 97, 86, 79, 99, 65, 39, 22, 117, 173, 169, 164, 175, 178, 125, 137, 173, 173, 172, 172, 160, 126, 73, 24, 10, 10, 9, 10, 15, 16, 43, 52, 62, 77, 82, 74, 69, 73, 83, 122, 165, 167, 164, 154, 147, 143, 133, 112, 108, 100},
- { 50, 64, 75, 78, 84, 88, 78, 75, 78, 67, 71, 71, 60, 65, 57, 65, 71, 75, 54, 69, 60, 33, 19, 105, 173, 192, 192, 185, 184, 137, 150, 190, 199, 197, 181, 143, 105, 58, 20, 10, 10, 10, 10, 14, 15, 45, 64, 66, 74, 74, 69, 62, 62, 67, 99, 143, 154, 154, 147, 143, 143, 129, 118, 112, 87},
- { 50, 43, 57, 64, 64, 69, 66, 70, 82, 70, 69, 62, 53, 53, 53, 56, 58, 57, 44, 48, 45, 40, 26, 86, 176, 192, 186, 186, 184, 134, 141, 178, 189, 185, 163, 120, 84, 45, 18, 13, 11, 11, 9, 13, 18, 47, 71, 86, 99, 97, 96, 96, 96, 100, 105, 122, 134, 134, 129, 121, 113, 107, 107, 99, 75},
- { 39, 33, 47, 61, 58, 61, 64, 69, 82, 79, 74, 66, 56, 54, 58, 53, 49, 41, 31, 30, 33, 39, 23, 66, 156, 184, 173, 178, 172, 121, 126, 175, 181, 167, 137, 100, 70, 37, 16, 15, 13, 11, 7, 10, 16, 28, 39, 49, 65, 73, 77, 79, 83, 96, 105, 116, 120, 114, 99, 91, 73, 75, 92, 73, 49},
- { 31, 31, 40, 58, 61, 56, 62, 60, 61, 67, 75, 71, 64, 60, 58, 53, 50, 40, 28, 24, 27, 32, 19, 43, 121, 159, 168, 146, 103, 58, 86, 171, 171, 144, 114, 84, 58, 35, 19, 13, 10, 9, 7, 11, 15, 19, 27, 35, 40, 45, 52, 50, 50, 54, 67, 80, 77, 75, 69, 71, 53, 45, 44, 35, 28},
- { 24, 28, 35, 52, 60, 57, 61, 57, 58, 54, 66, 67, 57, 56, 57, 53, 48, 37, 33, 28, 24, 23, 19, 31, 97, 131, 171, 168, 82, 58, 97, 137, 135, 128, 104, 80, 60, 33, 19, 13, 10, 7, 11, 15, 16, 22, 30, 35, 41, 45, 47, 41, 43, 47, 49, 49, 50, 56, 60, 62, 52, 41, 40, 30, 27},
- { 24, 31, 35, 52, 61, 57, 54, 54, 60, 54, 60, 57, 53, 53, 53, 49, 43, 36, 33, 31, 23, 30, 28, 23, 87, 126, 126, 142, 120, 86, 83, 90, 122, 126, 105, 80, 57, 32, 16, 13, 10, 7, 9, 11, 16, 26, 36, 40, 47, 48, 49, 43, 40, 40, 41, 45, 56, 65, 70, 61, 50, 36, 32, 28, 26},
- { 27, 30, 41, 57, 60, 54, 53, 57, 62, 57, 52, 48, 47, 48, 43, 43, 41, 39, 40, 37, 31, 36, 24, 16, 58, 125, 154, 159, 131, 101, 88, 113, 129, 122, 97, 73, 49, 28, 18, 14, 13, 10, 7, 9, 15, 22, 37, 43, 47, 47, 47, 43, 41, 43, 47, 53, 64, 67, 62, 54, 40, 35, 33, 28, 22},
- { 24, 28, 43, 49, 49, 48, 50, 52, 49, 47, 44, 45, 44, 44, 47, 47, 49, 50, 50, 44, 37, 31, 22, 18, 23, 75, 135, 160, 134, 113, 108, 108, 112, 100, 77, 60, 44, 28, 16, 15, 13, 9, 7, 9, 13, 24, 43, 44, 43, 47, 45, 44, 41, 41, 45, 48, 52, 47, 40, 43, 44, 45, 37, 28, 27},
- { 23, 28, 33, 39, 45, 49, 53, 49, 43, 44, 45, 45, 48, 54, 57, 58, 60, 60, 62, 54, 45, 28, 24, 24, 16, 20, 78, 161, 193, 172, 129, 108, 94, 73, 56, 49, 36, 23, 18, 16, 11, 7, 7, 7, 13, 23, 45, 48, 44, 50, 54, 54, 44, 41, 47, 48, 48, 44, 44, 52, 50, 50, 39, 24, 23},
- { 20, 28, 27, 28, 27, 41, 53, 50, 43, 44, 40, 43, 43, 49, 48, 52, 54, 57, 61, 57, 41, 33, 33, 33, 22, 10, 20, 91, 150, 138, 107, 78, 58, 49, 44, 37, 26, 19, 18, 16, 14, 11, 10, 9, 14, 22, 36, 49, 52, 58, 61, 54, 45, 49, 49, 54, 53, 47, 47, 52, 45, 41, 30, 22, 23},
- { 22, 28, 36, 36, 28, 36, 50, 52, 49, 43, 36, 40, 43, 52, 52, 60, 67, 80, 87, 66, 37, 36, 26, 23, 15, 9, 7, 19, 52, 60, 52, 44, 39, 33, 28, 23, 27, 24, 19, 19, 16, 15, 11, 9, 13, 16, 27, 40, 40, 43, 48, 47, 43, 47, 45, 45, 45, 37, 37, 44, 43, 50, 43, 30, 22},
- { 22, 27, 32, 22, 32, 33, 48, 54, 54, 54, 54, 58, 64, 71, 74, 84, 88, 95, 94, 75, 39, 27, 22, 24, 18, 9, 6, 6, 10, 35, 31, 26, 22, 20, 26, 33, 37, 37, 35, 23, 16, 11, 10, 10, 14, 13, 20, 33, 36, 41, 48, 48, 41, 39, 39, 40, 32, 28, 30, 35, 43, 40, 35, 35, 22},
- { 22, 23, 22, 16, 33, 30, 40, 54, 58, 61, 66, 73, 75, 84, 88, 99, 103, 100, 91, 77, 45, 26, 26, 24, 20, 11, 10, 7, 13, 69, 74, 54, 37, 36, 44, 52, 60, 61, 49, 28, 19, 11, 10, 13, 22, 16, 26, 39, 43, 44, 52, 54, 47, 43, 41, 40, 31, 31, 39, 40, 40, 35, 24, 31, 27},
- { 23, 24, 27, 22, 23, 33, 48, 53, 71, 78, 80, 84, 86, 92, 90, 94, 99, 95, 90, 73, 50, 28, 27, 24, 20, 13, 11, 9, 11, 80, 116, 94, 71, 62, 64, 70, 82, 83, 65, 39, 23, 15, 11, 13, 22, 18, 23, 37, 47, 61, 73, 62, 65, 60, 60, 61, 60, 62, 71, 77, 66, 44, 32, 37, 31},
- { 26, 32, 39, 44, 48, 58, 61, 67, 77, 69, 70, 70, 64, 78, 84, 83, 87, 86, 79, 58, 43, 26, 24, 20, 16, 14, 14, 11, 14, 70, 128, 122, 105, 91, 91, 95, 105, 104, 86, 50, 31, 19, 15, 19, 27, 15, 14, 27, 36, 49, 54, 58, 70, 77, 79, 71, 86, 94, 91, 86, 66, 58, 39, 28, 30},
- { 27, 44, 54, 62, 67, 78, 80, 84, 82, 67, 52, 50, 52, 40, 53, 62, 53, 57, 43, 37, 23, 15, 15, 14, 14, 14, 14, 19, 44, 91, 126, 135, 126, 118, 117, 121, 125, 122, 101, 64, 33, 27, 26, 27, 33, 13, 10, 11, 11, 19, 28, 27, 49, 50, 32, 60, 101, 107, 90, 74, 67, 62, 32, 16, 14},
- { 28, 49, 60, 62, 64, 77, 71, 74, 77, 61, 52, 54, 64, 32, 22, 26, 24, 28, 18, 18, 15, 14, 15, 14, 13, 16, 31, 67, 113, 142, 148, 150, 141, 139, 142, 146, 143, 141, 121, 79, 41, 35, 41, 35, 33, 13, 10, 10, 13, 18, 24, 26, 30, 28, 26, 45, 91, 103, 79, 69, 69, 64, 32, 11, 15},
- { 23, 40, 58, 54, 44, 56, 66, 73, 64, 48, 54, 57, 54, 30, 18, 15, 14, 24, 23, 11, 10, 15, 16, 18, 19, 50, 96, 126, 159, 176, 175, 169, 161, 163, 169, 171, 164, 154, 137, 94, 53, 40, 50, 43, 32, 15, 14, 13, 18, 30, 40, 53, 73, 82, 87, 95, 109, 97, 65, 62, 61, 53, 27, 15, 22},
- { 27, 36, 43, 41, 35, 57, 69, 66, 60, 56, 66, 71, 54, 22, 23, 27, 9, 26, 22, 14, 14, 16, 16, 19, 48, 114, 152, 175, 188, 190, 192, 186, 182, 186, 190, 185, 175, 159, 133, 86, 49, 49, 62, 45, 27, 16, 18, 15, 15, 26, 41, 56, 90, 124, 121, 104, 94, 83, 75, 69, 58, 47, 37, 31, 23},
- { 28, 44, 40, 37, 36, 64, 69, 67, 67, 75, 84, 71, 50, 24, 32, 35, 11, 23, 26, 18, 15, 19, 19, 37, 87, 158, 182, 195, 203, 203, 206, 199, 192, 194, 197, 190, 178, 160, 138, 91, 62, 53, 58, 39, 19, 15, 20, 19, 22, 20, 27, 32, 60, 104, 109, 108, 96, 94, 86, 77, 71, 79, 64, 41, 22},
- { 26, 43, 47, 58, 49, 69, 78, 79, 75, 82, 77, 61, 49, 39, 37, 44, 26, 33, 32, 15, 14, 22, 36, 64, 125, 182, 195, 205, 214, 211, 205, 199, 197, 201, 203, 194, 184, 165, 137, 96, 67, 54, 56, 33, 14, 15, 22, 33, 31, 24, 22, 28, 49, 73, 86, 95, 96, 97, 86, 87, 90, 86, 60, 44, 24},
- { 27, 47, 47, 64, 48, 61, 99, 97, 94, 95, 82, 70, 53, 48, 50, 52, 40, 33, 19, 10, 13, 37, 67, 91, 151, 194, 207, 211, 212, 210, 205, 202, 201, 207, 205, 194, 184, 167, 134, 83, 61, 53, 53, 28, 13, 19, 41, 62, 53, 44, 26, 19, 37, 52, 73, 88, 94, 96, 83, 96, 91, 87, 82, 67, 26},
- { 32, 37, 40, 53, 37, 47, 74, 97, 114, 107, 94, 88, 64, 54, 61, 57, 32, 15, 11, 13, 18, 66, 103, 120, 175, 201, 208, 215, 215, 212, 207, 206, 203, 208, 205, 192, 178, 165, 133, 92, 74, 56, 50, 32, 35, 53, 69, 74, 65, 52, 33, 15, 16, 31, 49, 62, 78, 96, 101, 107, 117, 122, 121, 96, 50},
- { 31, 44, 47, 45, 36, 47, 52, 47, 73, 103, 99, 87, 77, 61, 60, 43, 16, 13, 15, 13, 30, 94, 133, 163, 194, 206, 208, 212, 212, 215, 216, 214, 208, 208, 205, 198, 186, 167, 134, 92, 70, 52, 58, 71, 84, 92, 96, 95, 83, 65, 45, 20, 15, 10, 16, 27, 32, 50, 64, 60, 69, 79, 84, 71, 61},
- { 37, 52, 60, 67, 60, 56, 52, 40, 48, 66, 91, 86, 90, 86, 57, 19, 11, 15, 16, 14, 48, 118, 163, 189, 202, 210, 210, 211, 212, 215, 222, 219, 215, 212, 211, 205, 186, 163, 128, 95, 78, 70, 78, 90, 108, 114, 99, 83, 62, 45, 28, 14, 10, 9, 7, 11, 24, 26, 24, 27, 40, 60, 75, 80, 66},
- { 32, 50, 60, 66, 57, 57, 62, 56, 53, 64, 73, 67, 87, 101, 41, 11, 13, 16, 15, 18, 50, 116, 185, 205, 210, 207, 205, 205, 210, 220, 224, 227, 222, 216, 215, 210, 192, 164, 131, 104, 83, 84, 103, 100, 80, 57, 43, 33, 23, 18, 13, 10, 6, 7, 9, 6, 18, 26, 22, 19, 23, 52, 86, 109, 80},
- { 35, 49, 49, 52, 57, 67, 77, 67, 71, 82, 87, 95, 96, 69, 20, 13, 14, 20, 16, 27, 53, 83, 152, 192, 207, 206, 194, 198, 211, 223, 228, 228, 225, 222, 219, 211, 194, 159, 125, 91, 80, 79, 60, 39, 31, 30, 23, 15, 11, 9, 6, 6, 6, 6, 6, 6, 7, 22, 23, 23, 22, 27, 41, 61, 48},
- { 31, 50, 57, 73, 80, 92, 96, 83, 91, 103, 101, 88, 53, 23, 15, 13, 18, 24, 23, 37, 60, 75, 92, 111, 150, 169, 168, 197, 216, 219, 222, 222, 220, 218, 208, 198, 163, 116, 88, 67, 47, 33, 27, 24, 18, 13, 11, 10, 6, 6, 5, 5, 6, 6, 5, 7, 7, 18, 36, 36, 32, 27, 32, 28, 20},
- { 26, 52, 69, 83, 95, 87, 79, 79, 83, 77, 70, 50, 19, 18, 15, 13, 22, 20, 35, 50, 64, 64, 71, 77, 84, 86, 103, 137, 168, 185, 194, 202, 206, 201, 185, 148, 100, 75, 66, 40, 28, 24, 20, 14, 10, 15, 15, 16, 10, 6, 5, 5, 6, 6, 6, 7, 9, 10, 35, 45, 50, 37, 31, 31, 14},
- { 23, 52, 71, 78, 90, 86, 75, 80, 86, 79, 65, 30, 16, 19, 15, 14, 18, 20, 44, 60, 61, 56, 52, 64, 65, 73, 78, 83, 88, 97, 105, 112, 121, 124, 108, 84, 67, 53, 48, 28, 19, 13, 13, 23, 31, 35, 24, 20, 13, 5, 5, 5, 6, 6, 5, 7, 7, 7, 20, 35, 44, 32, 27, 35, 19},
- { 16, 39, 67, 74, 86, 94, 94, 95, 101, 103, 90, 30, 19, 16, 14, 13, 15, 23, 47, 49, 53, 41, 47, 53, 52, 69, 73, 70, 75, 78, 77, 75, 74, 78, 73, 64, 43, 41, 24, 11, 10, 10, 15, 32, 49, 32, 26, 18, 10, 6, 6, 6, 6, 5, 6, 5, 5, 6, 10, 18, 24, 22, 19, 31, 22},
- { 14, 22, 45, 58, 70, 82, 88, 87, 84, 80, 67, 24, 16, 15, 14, 13, 14, 20, 44, 39, 48, 32, 39, 33, 50, 65, 69, 66, 69, 66, 61, 57, 56, 61, 60, 43, 31, 19, 13, 13, 14, 19, 24, 35, 45, 28, 30, 22, 26, 27, 22, 22, 11, 7, 9, 5, 5, 6, 10, 28, 30, 27, 24, 18, 7},
- { 13, 18, 36, 53, 60, 67, 70, 64, 64, 65, 49, 20, 13, 13, 11, 11, 13, 23, 36, 28, 30, 31, 32, 28, 44, 58, 64, 64, 60, 50, 45, 45, 52, 50, 37, 20, 13, 11, 11, 15, 19, 26, 27, 31, 28, 32, 39, 58, 60, 43, 39, 31, 22, 13, 10, 9, 7, 9, 11, 28, 48, 43, 32, 13, 5},
- { 15, 19, 37, 54, 60, 61, 58, 60, 65, 58, 44, 18, 11, 9, 7, 9, 11, 22, 28, 27, 20, 31, 31, 26, 40, 43, 50, 49, 45, 35, 36, 47, 40, 32, 20, 10, 7, 7, 7, 13, 16, 23, 19, 19, 26, 36, 52, 64, 57, 41, 40, 33, 23, 10, 7, 10, 7, 7, 9, 15, 41, 48, 30, 9, 5},
- { 18, 23, 57, 77, 86, 86, 80, 80, 82, 54, 31, 14, 11, 7, 7, 9, 13, 19, 22, 22, 16, 28, 23, 20, 32, 23, 31, 35, 33, 28, 39, 37, 33, 28, 15, 9, 6, 6, 7, 10, 14, 15, 10, 14, 32, 39, 56, 62, 57, 52, 44, 22, 11, 6, 7, 9, 10, 7, 7, 6, 11, 15, 15, 6, 5},
- { 19, 37, 79, 92, 97, 96, 94, 99, 96, 69, 33, 18, 11, 7, 9, 10, 13, 14, 15, 16, 16, 24, 18, 16, 19, 19, 20, 22, 22, 35, 36, 36, 27, 11, 9, 7, 6, 7, 9, 9, 14, 14, 10, 20, 37, 44, 60, 61, 58, 41, 20, 6, 6, 5, 6, 6, 13, 11, 9, 7, 20, 32, 30, 10, 5},
- { 20, 61, 88, 96, 101, 103, 105, 105, 99, 50, 19, 15, 10, 9, 10, 9, 11, 13, 13, 15, 16, 22, 13, 15, 16, 20, 15, 13, 22, 35, 37, 28, 15, 11, 9, 5, 6, 9, 7, 7, 10, 10, 13, 30, 39, 43, 60, 52, 43, 19, 6, 5, 5, 6, 6, 6, 15, 18, 10, 9, 19, 40, 43, 27, 7},
- { 39, 70, 79, 87, 90, 91, 101, 94, 78, 28, 18, 14, 13, 11, 11, 11, 9, 11, 13, 11, 13, 19, 11, 13, 14, 15, 10, 11, 24, 31, 27, 18, 16, 14, 7, 5, 6, 7, 6, 7, 10, 11, 20, 35, 40, 40, 49, 36, 14, 9, 6, 5, 5, 6, 5, 5, 13, 18, 11, 7, 14, 41, 44, 43, 23},
- { 28, 41, 48, 58, 62, 65, 67, 58, 36, 18, 15, 15, 19, 22, 16, 11, 7, 9, 11, 9, 10, 16, 11, 10, 10, 13, 10, 16, 20, 23, 18, 18, 15, 11, 5, 3, 5, 6, 6, 7, 7, 11, 22, 37, 31, 27, 23, 14, 7, 10, 9, 6, 6, 6, 5, 5, 9, 13, 10, 6, 6, 19, 23, 20, 16},
- { 20, 28, 39, 49, 56, 50, 41, 30, 19, 15, 11, 15, 22, 28, 23, 16, 11, 9, 9, 9, 9, 14, 10, 9, 9, 9, 10, 16, 19, 20, 18, 16, 14, 7, 6, 5, 5, 6, 6, 6, 6, 9, 20, 22, 18, 14, 10, 7, 6, 13, 9, 6, 6, 5, 5, 5, 6, 7, 6, 5, 3, 6, 9, 9, 10},
- { 24, 36, 44, 50, 54, 44, 30, 19, 18, 15, 14, 20, 28, 32, 31, 20, 15, 13, 13, 10, 9, 13, 11, 10, 9, 7, 13, 15, 20, 18, 19, 14, 9, 9, 7, 6, 6, 5, 5, 5, 6, 9, 19, 18, 11, 7, 6, 6, 9, 11, 9, 6, 6, 6, 5, 3, 6, 6, 6, 6, 7, 13, 13, 11, 9},
- { 24, 36, 41, 47, 40, 22, 16, 18, 19, 16, 16, 26, 35, 36, 37, 28, 18, 15, 14, 10, 10, 14, 13, 13, 9, 6, 11, 15, 20, 19, 18, 7, 7, 11, 11, 9, 7, 5, 5, 5, 6, 6, 18, 13, 5, 5, 6, 7, 13, 13, 7, 6, 5, 5, 3, 5, 6, 7, 6, 7, 13, 15, 20, 18, 11},
- { 22, 28, 37, 30, 16, 14, 14, 19, 19, 24, 26, 33, 41, 44, 39, 26, 19, 16, 14, 11, 13, 14, 13, 13, 9, 9, 11, 20, 23, 14, 9, 6, 7, 10, 11, 9, 6, 5, 5, 5, 6, 6, 9, 5, 3, 3, 6, 10, 11, 9, 6, 5, 3, 3, 3, 5, 6, 6, 6, 6, 13, 14, 18, 15, 7},
- { 22, 28, 32, 16, 14, 13, 19, 22, 30, 35, 30, 24, 28, 30, 32, 24, 26, 19, 14, 11, 13, 13, 9, 9, 9, 10, 16, 26, 16, 7, 6, 6, 6, 7, 7, 6, 5, 5, 5, 5, 6, 7, 5, 3, 3, 3, 7, 13, 14, 11, 9, 7, 3, 5, 3, 3, 6, 7, 6, 7, 13, 15, 19, 18, 7},
- { 19, 27, 19, 16, 14, 18, 15, 15, 23, 23, 16, 16, 22, 23, 18, 14, 18, 18, 11, 9, 10, 10, 7, 7, 9, 14, 20, 15, 9, 6, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 6, 7, 5, 3, 3, 5, 9, 13, 16, 15, 18, 15, 7, 3, 3, 3, 6, 7, 9, 11, 14, 14, 18, 20, 7},
- { 14, 18, 14, 16, 22, 20, 11, 14, 16, 19, 16, 20, 24, 19, 14, 10, 18, 15, 10, 7, 9, 9, 6, 6, 10, 13, 11, 9, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 7, 10, 13, 14, 22, 18, 11, 5, 3, 5, 3, 7, 11, 14, 14, 11, 14, 20, 9},
- { 9, 10, 9, 14, 16, 13, 18, 24, 44, 52, 49, 44, 43, 40, 33, 14, 13, 15, 10, 10, 9, 11, 7, 6, 7, 7, 9, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 6, 9, 14, 11, 13, 14, 13, 7, 3, 3, 5, 3, 6, 10, 13, 11, 7, 9, 14, 10},
- { 9, 10, 13, 14, 15, 14, 31, 41, 56, 67, 37, 41, 48, 52, 40, 19, 13, 11, 10, 13, 14, 16, 10, 10, 6, 6, 9, 7, 6, 6, 7, 6, 6, 6, 5, 6, 7, 7, 7, 6, 5, 3, 5, 6, 6, 7, 11, 13, 10, 9, 7, 7, 7, 5, 3, 3, 2, 5, 10, 9, 5, 3, 2, 5, 3},
- { 11, 9, 11, 16, 16, 15, 33, 43, 52, 53, 74, 75, 56, 61, 50, 52, 39, 16, 22, 35, 37, 32, 16, 13, 9, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 9, 10, 7, 6, 5, 5, 9, 10, 9, 9, 7, 11, 13, 15, 11, 9, 9, 6, 3, 3, 2, 5, 10, 9, 5, 2, 2, 1, 0},
- { 11, 9, 13, 16, 14, 19, 33, 52, 74, 87, 82, 50, 69, 65, 67, 77, 54, 84, 137, 165, 158, 133, 92, 52, 23, 10, 6, 6, 6, 7, 6, 6, 6, 7, 9, 9, 7, 7, 6, 6, 6, 6, 7, 6, 6, 7, 7, 10, 15, 18, 13, 6, 6, 3, 3, 2, 2, 5, 7, 10, 10, 3, 2, 1, 0},
- { 9, 9, 13, 15, 14, 19, 30, 60, 77, 62, 56, 80, 56, 61, 64, 58, 96, 158, 194, 202, 192, 177, 156, 144, 113, 71, 39, 18, 9, 7, 6, 6, 6, 7, 7, 7, 5, 5, 5, 6, 6, 6, 6, 5, 6, 7, 9, 13, 16, 16, 10, 6, 5, 3, 2, 2, 2, 6, 6, 7, 9, 3, 1, 1, 0},
- { 10, 10, 13, 15, 14, 15, 26, 54, 65, 50, 69, 56, 44, 50, 41, 56, 111, 171, 186, 194, 186, 184, 173, 167, 152, 143, 142, 114, 52, 10, 6, 6, 6, 7, 7, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 9, 10, 11, 11, 7, 6, 3, 3, 3, 3, 3, 5, 5, 3, 2, 2, 2, 1, 0},
- { 13, 11, 11, 14, 13, 14, 23, 41, 37, 57, 56, 33, 37, 47, 39, 61, 107, 154, 165, 169, 167, 175, 176, 173, 165, 158, 158, 150, 120, 71, 37, 11, 6, 6, 6, 6, 5, 5, 5, 5, 6, 5, 6, 5, 5, 5, 6, 7, 10, 11, 7, 6, 5, 6, 5, 3, 3, 3, 3, 2, 2, 3, 2, 1, 0},
- { 15, 15, 15, 14, 13, 14, 18, 26, 26, 49, 36, 35, 40, 48, 39, 50, 86, 126, 135, 139, 142, 158, 168, 169, 171, 165, 161, 158, 151, 148, 128, 86, 36, 11, 7, 6, 5, 6, 5, 6, 6, 5, 6, 5, 5, 5, 5, 5, 7, 11, 7, 6, 5, 5, 3, 5, 3, 3, 3, 3, 2, 3, 2, 1, 0},
- { 15, 16, 18, 15, 16, 15, 15, 23, 24, 28, 23, 28, 27, 32, 28, 44, 54, 90, 96, 101, 116, 135, 150, 159, 165, 164, 164, 168, 165, 165, 164, 151, 104, 53, 19, 6, 6, 10, 11, 9, 10, 19, 37, 41, 30, 23, 20, 14, 7, 7, 7, 7, 6, 5, 6, 6, 3, 5, 3, 3, 2, 2, 2, 1, 0},
- { 14, 15, 15, 15, 18, 18, 18, 18, 19, 19, 14, 15, 18, 23, 19, 30, 32, 49, 57, 71, 100, 121, 134, 144, 152, 150, 148, 159, 151, 126, 146, 175, 155, 84, 56, 45, 50, 77, 71, 56, 44, 45, 69, 73, 57, 53, 52, 41, 22, 7, 5, 9, 6, 6, 6, 6, 5, 5, 3, 3, 3, 2, 2, 1, 1},
- { 13, 14, 13, 11, 13, 15, 14, 13, 14, 14, 10, 10, 19, 20, 18, 18, 26, 30, 44, 73, 95, 114, 124, 131, 138, 135, 134, 146, 143, 100, 70, 113, 143, 126, 87, 75, 77, 90, 90, 67, 70, 62, 58, 69, 67, 48, 40, 33, 31, 14, 6, 5, 5, 5, 6, 6, 5, 3, 3, 3, 3, 3, 2, 1, 1},
- { 10, 11, 10, 9, 9, 11, 11, 11, 10, 10, 10, 11, 14, 15, 16, 26, 54, 88, 117, 125, 95, 97, 107, 114, 118, 122, 125, 118, 133, 142, 84, 41, 66, 97, 90, 75, 73, 61, 57, 58, 56, 60, 48, 54, 67, 62, 37, 32, 31, 20, 9, 5, 5, 3, 5, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1},
- { 11, 13, 10, 9, 9, 10, 11, 11, 11, 10, 13, 14, 11, 13, 36, 90, 105, 105, 139, 146, 112, 83, 86, 97, 103, 116, 126, 105, 92, 129, 139, 91, 44, 48, 69, 80, 73, 65, 47, 52, 56, 57, 57, 40, 33, 44, 40, 33, 32, 27, 14, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3},
- { 10, 10, 10, 9, 7, 9, 10, 11, 13, 13, 11, 14, 11, 15, 71, 91, 84, 111, 137, 144, 137, 97, 67, 75, 87, 95, 117, 137, 99, 77, 109, 121, 83, 47, 40, 56, 70, 53, 45, 37, 45, 49, 62, 48, 31, 26, 32, 24, 24, 26, 19, 5, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 6},
- { 9, 9, 10, 9, 10, 11, 11, 11, 14, 13, 11, 13, 14, 19, 73, 74, 96, 118, 118, 150, 141, 116, 79, 61, 75, 78, 74, 109, 138, 96, 61, 86, 99, 73, 39, 32, 33, 35, 31, 32, 32, 23, 45, 44, 24, 27, 26, 20, 14, 14, 9, 3, 3, 2, 3, 2, 3, 3, 3, 5, 3, 5, 3, 3, 7},
- { 10, 10, 11, 13, 13, 13, 11, 14, 15, 15, 14, 15, 15, 24, 73, 84, 104, 88, 111, 137, 138, 113, 87, 58, 53, 74, 64, 60, 101, 120, 70, 47, 75, 90, 69, 33, 33, 30, 19, 26, 24, 15, 24, 24, 19, 18, 24, 18, 11, 10, 7, 3, 3, 2, 2, 3, 3, 2, 3, 5, 5, 5, 5, 3, 6},
- { 10, 10, 11, 13, 13, 13, 13, 14, 16, 15, 15, 15, 16, 30, 67, 82, 78, 80, 112, 129, 118, 88, 69, 53, 37, 39, 56, 49, 50, 71, 66, 48, 39, 61, 86, 54, 26, 23, 15, 19, 15, 11, 15, 14, 11, 13, 15, 14, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 5, 3, 5, 5, 5, 2, 3},
- { 10, 10, 11, 11, 11, 11, 11, 13, 13, 13, 14, 16, 18, 24, 48, 64, 69, 91, 114, 113, 79, 58, 41, 32, 24, 20, 26, 32, 33, 31, 35, 43, 37, 24, 41, 48, 15, 11, 10, 14, 10, 9, 10, 9, 7, 7, 9, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1, 1},
- { 9, 10, 11, 13, 11, 11, 11, 10, 11, 13, 14, 15, 18, 20, 28, 47, 64, 94, 109, 73, 39, 31, 31, 32, 31, 35, 35, 28, 30, 33, 30, 24, 22, 15, 10, 11, 6, 7, 7, 7, 6, 6, 7, 6, 6, 6, 6, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3, 5, 6, 3, 3, 1, 1},
- { 10, 10, 11, 13, 14, 14, 13, 13, 14, 14, 15, 14, 15, 18, 19, 26, 47, 84, 73, 40, 22, 30, 30, 28, 23, 26, 23, 22, 26, 28, 26, 16, 13, 11, 10, 9, 9, 9, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 3, 5, 5, 6, 5, 2, 2, 1, 1},
- { 11, 13, 13, 14, 16, 15, 14, 13, 13, 15, 18, 16, 15, 15, 14, 16, 24, 61, 50, 26, 18, 26, 23, 19, 16, 15, 16, 18, 19, 16, 14, 11, 10, 10, 9, 9, 9, 9, 7, 7, 7, 6, 6, 6, 5, 5, 5, 3, 3, 5, 3, 3, 5, 3, 3, 5, 3, 7, 5, 6, 5, 3, 2, 1, 1},
- { 11, 13, 14, 15, 16, 13, 11, 11, 11, 15, 18, 16, 15, 14, 14, 16, 20, 47, 40, 24, 20, 23, 19, 18, 18, 20, 23, 20, 18, 14, 13, 11, 11, 13, 11, 10, 9, 9, 7, 7, 6, 6, 6, 7, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 5, 5, 5, 2, 3, 2, 1, 1},
- { 9, 10, 13, 14, 14, 14, 14, 14, 11, 15, 18, 16, 15, 14, 15, 18, 18, 27, 26, 18, 15, 15, 15, 15, 16, 18, 16, 14, 13, 11, 10, 9, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 9, 11, 9, 6, 5, 3, 3, 3, 2, 3, 3, 5, 3, 3, 7, 5, 2, 2, 5, 3, 1, 0},
- { 9, 10, 11, 13, 13, 14, 14, 13, 14, 15, 15, 14, 16, 15, 16, 16, 16, 18, 15, 11, 10, 11, 11, 9, 10, 9, 9, 7, 7, 7, 6, 6, 6, 6, 7, 7, 6, 5, 5, 6, 6, 5, 5, 6, 9, 7, 6, 5, 5, 3, 2, 2, 2, 2, 3, 3, 2, 9, 6, 3, 3, 11, 6, 2, 0},
- { 9, 9, 10, 13, 14, 14, 15, 13, 13, 15, 15, 15, 15, 15, 16, 18, 15, 16, 14, 11, 9, 9, 13, 10, 9, 7, 7, 6, 5, 6, 7, 6, 6, 9, 10, 11, 7, 6, 6, 5, 5, 5, 5, 6, 7, 6, 5, 5, 5, 3, 2, 3, 2, 2, 3, 3, 2, 5, 5, 2, 3, 10, 6, 2, 0},
- { 9, 9, 11, 13, 13, 14, 14, 13, 11, 13, 14, 13, 14, 14, 14, 14, 10, 11, 11, 10, 9, 10, 14, 15, 15, 9, 9, 6, 6, 6, 9, 7, 6, 7, 7, 7, 6, 5, 5, 6, 6, 6, 6, 7, 7, 5, 5, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 7, 5, 1, 0},
- { 10, 10, 11, 11, 11, 11, 13, 13, 13, 14, 15, 18, 16, 15, 14, 13, 11, 10, 9, 9, 10, 11, 11, 14, 15, 10, 9, 9, 9, 9, 11, 9, 6, 6, 5, 6, 6, 6, 5, 6, 7, 6, 6, 6, 5, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 3, 1, 3, 3, 0, 0},
- { 10, 11, 11, 13, 13, 11, 11, 13, 14, 15, 16, 16, 16, 16, 14, 14, 11, 10, 10, 10, 11, 14, 14, 14, 18, 14, 11, 11, 13, 10, 10, 10, 7, 6, 6, 6, 7, 7, 7, 10, 10, 6, 6, 6, 3, 3, 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 2, 1, 0},
- { 11, 13, 13, 13, 13, 14, 11, 14, 14, 15, 16, 16, 16, 15, 13, 13, 11, 11, 11, 13, 14, 15, 14, 14, 19, 18, 15, 13, 13, 11, 13, 11, 11, 7, 7, 7, 10, 10, 10, 11, 13, 9, 9, 10, 6, 5, 5, 5, 5, 7, 5, 5, 5, 5, 3, 3, 2, 3, 3, 3, 2, 2, 3, 1, 0}
- };
- return imageData;
- }
-
- ///
- /// Recording of a neuronal action potential (100 ms, 20 kHz sample rate, mV units)
- ///
- /// Recording of a neuronal action potential
- public static double[] ActionPotential()
- {
- /* originated from 17o05027_ic_ramp.abf as part of the pyABF project */
-
- double firstValue = -40.83252;
-
- sbyte[] raw = {
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- -1, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, -1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, -1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0,
- 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, -1, 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 2,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -1, 0,
- 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, -1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 2, 1, 1, 0, 1, 0,
- 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0,
- 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 2, 0, 3, 0, 0, 1, 0, 0, 1, 0,
- 3, 0, 0, 1, 2, 0, 0, 0, 1, 1, 0, 0, 0, 1, 2, 0, 2, 1, 2, 0,
- 1, 0, 2, 2, 1, 3, 1, 3, 1, 2, 2, 2, 3, 1, 3, 1, 3, 3, 3, 5,
- 3, 4, 5, 6, 8, 12, 17, 25, 30, 38, 43, 47, 56, 65, 75, 86, 99, 104, 106, 100,
- 93, 83, 73, 61, 53, 41, 34, 26, 18, 12, 5, -1, -9, -14, -21, -27, -32, -35, -38, -41,
- -45, -47, -49, -50, -53, -52, -51, -52, -54, -54, -53, -54, -51, -51, -49, -49, -48, -48, -44, -43,
- -41, -41, -38, -38, -34, -32, -33, -29, -28, -25, -25, -25, -20, -22, -17, -18, -16, -16, -16, -13,
- -13, -12, -12, -10, -10, -9, -9, -7, -9, -7, -6, -6, -6, -6, -5, -4, -5, -3, -4, -3,
- -3, 0, -4, -3, -1, -3, -1, 0, -2, -1, -1, -2, -1, -1, 0, -1, 0, 0, -1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0,
- 1, -1, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0,
- -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 1, -1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0,
- 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0,
- -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, -1, 1, -1, 0, 1, 0,
- 0, 0, -1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 1,
- 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- };
-
- double rawScale = 25;
- double[] waveform = new double[raw.Length + 1];
- waveform[0] = firstValue;
- for (int i = 0; i < raw.Length; i++)
- {
- waveform[i + 1] = waveform[i] + raw[i] / rawScale;
- }
-
- return waveform;
- }
-
- public class Electrocardiogram
- {
- /*
- * The aim of the ECG simulator is to produce the typical ECG waveforms of different leads and
- * as many arrhythmias as possible. My ECG simulator is able To produce normal lead II ECG
- * waveform. The use Of a simulator has many advantages In the simulation Of ECG waveforms.
- * First one Is saving Of time And another one Is removing the difficulties Of taking real ECG
- * signals With invasive And noninvasive methods. The ECG simulator enables us To analyze And
- * study normal And abnormal ECG waveforms without actually Using the ECG machine. One can
- * simulate any given ECG waveform Using the ECG simulator. The way by which my simulator
- * differs from other typical ECG simulators Is that i have used the principle Of Fourier
- * series. The calculations used And other necessary descriptions are included In the file
- * attached.
- *
- * https://www.mathworks.com/matlabcentral/fileexchange/10858-ecg-simulation-using-matlab
- * (c) 2019 karthik raviprakash. All rights reserved. MIT license.
- */
-
- public double PWaveAmplitude { get; set; } = 0.25d;
- public double PWaveDuration { get; set; } = 0.09d;
- public double PWavePRInterval { get; set; } = 0.16d;
- public double QWaveAmplitude { get; set; } = 0.025d;
- public double QwaveDuration { get; set; } = 0.066d;
- public double QWaveTime { get; set; } = 0.166d;
- public double QRSWaveAmplitude { get; set; } = 1.6d;
- public double QRSwaveDuration { get; set; } = 0.11d;
- public double SWaveAmplitude { get; set; } = 0.25d;
- public double SWaveDuration { get; set; } = 0.066d;
- public double SWaveTime { get; set; } = 0.09d;
- public double TWaveAmplitude { get; set; } = 0.35d;
- public double TWaveDuration { get; set; } = 0.142d;
- public double TWaveSTInterval { get; set; } = 0.2d;
- public double UWaveAmplitude { get; set; } = 0.035d;
- public double UWaveDuration { get; set; } = 0.0476d;
- public double UWaveTime { get; set; } = 0.433d;
-
- private double _HeartRate;
- public double HeartRate { get => _HeartRate; set => (_HeartRate, _Period) = (value, 60d / value); }
-
- private double _Period;
- public double Period { get => _Period; set => (_Period, _HeartRate) = (value, 60d / value); }
-
- public Electrocardiogram(double heartRate = 72) => HeartRate = heartRate;
-
- public double GetVoltage(double elapsedSeconds)
- {
- elapsedSeconds %= (2d * Period);
- double value = -0.9d;
- value += PWave(elapsedSeconds, PWaveAmplitude, PWaveDuration, PWavePRInterval, Period);
- value += QWave(elapsedSeconds, QWaveAmplitude, QwaveDuration, QWaveTime, Period);
- value += QRSwave(elapsedSeconds, QRSWaveAmplitude, QRSwaveDuration, Period);
- value += SWave(elapsedSeconds, SWaveAmplitude, SWaveDuration, SWaveTime, Period);
- value += TWave(elapsedSeconds, TWaveAmplitude, TWaveDuration, TWaveSTInterval, Period);
- value += UWave(elapsedSeconds, UWaveAmplitude, UWaveDuration, UWaveTime, Period);
- return value;
- }
-
- private static double QRSwave(double x, double amplitude, double duration, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- int n = 100;
- double qrs1 = a / (2d * b) * (2d - b);
- double qrs2 = 0d;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- double harm = 2d * b * a / (i * i * Math.PI * Math.PI) * (1d - Math.Cos(i * Math.PI / b)) * Math.Cos(i * Math.PI * x / l);
- qrs2 += harm;
- }
-
- return qrs1 + qrs2;
- }
-
- private static double PWave(double x, double amplitude, double duration, double time, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- x += time;
- int n = 100;
- double p1 = 1d / l;
- double p2 = 0d;
- double harm1;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- harm1 = (Math.Sin(Math.PI / (2d * b) * (b - 2 * i)) / (b - 2 * i) + Math.Sin(Math.PI / (2d * b) * (b + 2 * i)) / (b + 2 * i)) * (2d / Math.PI) * Math.Cos(i * Math.PI * x / l);
- p2 += harm1;
- }
-
- return a * (p1 + p2);
- }
-
- private static double QWave(double x, double amplitude, double duration, double time, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- x += time;
- int n = 100;
- double q1 = a / (2d * b) * (2d - b);
- double q2 = 0d;
- double harm5;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- harm5 = 2d * b * a / (i * i * Math.PI * Math.PI) * (1d - Math.Cos(i * Math.PI / b)) * Math.Cos(i * Math.PI * x / l);
- q2 += harm5;
- }
-
- return -1 * (q1 + q2);
- }
-
- private static double SWave(double x, double amplitude, double duration, double time, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- x -= time;
- int n = 100;
- double s1 = a / (2d * b) * (2d - b);
- double s2 = 0d;
- double harm3;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- harm3 = 2d * b * a / (i * i * Math.PI * Math.PI) * (1d - Math.Cos(i * Math.PI / b)) * Math.Cos(i * Math.PI * x / l);
- s2 += harm3;
- }
-
- return -1 * (s1 + s2);
- }
-
- private static double TWave(double x, double amplitude, double duration, double time, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- x = x - time - 0.045d;
- int n = 100;
- double t1 = 1d / l;
- double t2 = 0d;
- double harm2;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- harm2 = (Math.Sin(Math.PI / (2d * b) * (b - 2 * i)) / (b - 2 * i) + Math.Sin(Math.PI / (2d * b) * (b + 2 * i)) / (b + 2 * i)) * (2d / Math.PI) * Math.Cos(i * Math.PI * x / l);
- t2 += harm2;
- }
-
- return a * (t1 + t2);
- }
-
- private static double UWave(double x, double amplitude, double duration, double time, double period)
- {
- double l = 0.5d * period;
- double a = amplitude;
- double b = 2d * l / duration;
- x -= time;
- int n = 100;
- double u1 = 1d / l;
- double u2 = 0d;
- double harm4;
- for (int i = 1, loopTo = n; i <= loopTo; i++)
- {
- harm4 = (Math.Sin(Math.PI / (2d * b) * (b - 2 * i)) / (b - 2 * i) + Math.Sin(Math.PI / (2d * b) * (b + 2 * i)) / (b + 2 * i)) * (2d / Math.PI) * Math.Cos(i * Math.PI * x / l);
- u2 += harm4;
- }
-
- return a * (u1 + u2);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Marker.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Marker.cs
deleted file mode 100644
index 1de275def..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Marker.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public static class Marker
- {
- // TODO: refactor this in the next major version of ScottPlot to add support for LineWidth, etc
- public static MarkerShape None => MarkerShape.None;
- public static MarkerShape FilledCircle => MarkerShape.FilledCircle;
- public static MarkerShape OpenCircle => MarkerShape.OpenCircle;
- public static MarkerShape FilledSquare => MarkerShape.FilledSquare;
- public static MarkerShape OpenSquare => MarkerShape.OpenSquare;
- public static MarkerShape FilledDiamond => MarkerShape.FilledDiamond;
- public static MarkerShape OpenDiamond => MarkerShape.OpenDiamond;
- public static MarkerShape Asterisk => MarkerShape.Asterisk;
- public static MarkerShape HashTag => MarkerShape.HashTag;
- public static MarkerShape Cross => MarkerShape.Cross;
- public static MarkerShape Eks => MarkerShape.Eks;
- public static MarkerShape VerticalBar => MarkerShape.VerticalBar;
- public static MarkerShape TriangleUp => MarkerShape.TriUp;
- public static MarkerShape TriangleDown => MarkerShape.TriDown;
-
- public static MarkerShape Random() => Random(new Random());
-
- public static MarkerShape Random(Random rand)
- {
- Array members = Enum.GetValues(typeof(MarkerShape));
- object randomMember = members.GetValue(rand.Next(members.Length));
- return (MarkerShape)randomMember;
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Markers.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Markers.cs
deleted file mode 100644
index 2d15d74ca..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Markers.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public class MarkerTools
- {
- public static void DrawMarker(Graphics gfx, PointF pixelLocation, MarkerShape shape, float size, Color color)
- {
- if (size == 0 || shape == MarkerShape.None)
- {
- return;
- }
-
- Pen pen = new Pen(color);
-
- Brush brush = new SolidBrush(color);
-
- PointF corner1 = new PointF(pixelLocation.X - size / 2, pixelLocation.Y - size / 2);
- PointF corner2 = new PointF(pixelLocation.X + size / 2, pixelLocation.Y + size / 2);
- SizeF bounds = new SizeF(size, size);
- RectangleF rect = new RectangleF(corner1, bounds);
-
- switch (shape)
- {
- case MarkerShape.FilledCircle:
- gfx.FillEllipse(brush, rect);
- break;
- case MarkerShape.OpenCircle:
- gfx.DrawEllipse(pen, rect);
- break;
- case MarkerShape.FilledSquare:
- gfx.FillRectangle(brush, rect);
- break;
- case MarkerShape.OpenSquare:
- gfx.DrawRectangle(pen, corner1.X, corner1.Y, size, size);
- break;
- case MarkerShape.FilledDiamond:
-
- // Create points that define polygon.
- PointF point1 = new PointF(pixelLocation.X, pixelLocation.Y + size / 2);
- PointF point2 = new PointF(pixelLocation.X - size / 2, pixelLocation.Y);
- PointF point3 = new PointF(pixelLocation.X, pixelLocation.Y - size / 2);
- PointF point4 = new PointF(pixelLocation.X + size / 2, pixelLocation.Y);
-
- PointF[] curvePoints = { point1, point2, point3, point4 };
-
- //Draw polygon to screen
- gfx.FillPolygon(brush, curvePoints);
- break;
- case MarkerShape.OpenDiamond:
-
- // Create points that define polygon.
- PointF point5 = new PointF(pixelLocation.X, pixelLocation.Y + size / 2);
- PointF point6 = new PointF(pixelLocation.X - size / 2, pixelLocation.Y);
- PointF point7 = new PointF(pixelLocation.X, pixelLocation.Y - size / 2);
- PointF point8 = new PointF(pixelLocation.X + size / 2, pixelLocation.Y);
-
- PointF[] curvePoints2 = { point5, point6, point7, point8 };
-
- //Draw polygon to screen
- gfx.DrawPolygon(pen, curvePoints2);
-
- break;
- case MarkerShape.Asterisk:
- System.Drawing.Font drawFont = new System.Drawing.Font("CourierNew", size * 3);
- SizeF textSize = GDI.MeasureString(gfx, "*", drawFont);
- PointF asteriskPoint = new PointF(pixelLocation.X - textSize.Width / 2, pixelLocation.Y - textSize.Height / 4);
- gfx.DrawString("*", drawFont, brush, asteriskPoint);
-
- break;
- case MarkerShape.HashTag:
- System.Drawing.Font drawFont2 = new System.Drawing.Font("CourierNew", size * 2);
- SizeF textSize2 = GDI.MeasureString(gfx, "#", drawFont2);
- PointF asteriskPoint2 = new PointF(pixelLocation.X - textSize2.Width / 2, pixelLocation.Y - textSize2.Height / 3);
- gfx.DrawString("#", drawFont2, brush, asteriskPoint2);
-
- break;
- case MarkerShape.Cross:
- System.Drawing.Font drawFont3 = new System.Drawing.Font("CourierNew", size * 2);
- SizeF textSize3 = GDI.MeasureString(gfx, "+", drawFont3);
- PointF asteriskPoint3 = new PointF(pixelLocation.X - textSize3.Width / (5 / 2), pixelLocation.Y - textSize3.Height / 2);
- gfx.DrawString("+", drawFont3, brush, asteriskPoint3);
-
- break;
- case MarkerShape.Eks:
- System.Drawing.Font drawFont4 = new System.Drawing.Font("CourierNew", size * 2);
- SizeF textSize4 = GDI.MeasureString(gfx, "x", drawFont4);
- PointF asteriskPoint4 = new PointF(pixelLocation.X - textSize4.Width / (5 / 2), pixelLocation.Y - textSize4.Height / 2);
- gfx.DrawString("x", drawFont4, brush, asteriskPoint4);
-
- break;
- case MarkerShape.VerticalBar:
- System.Drawing.Font drawFont5 = new System.Drawing.Font("CourierNew", size * 2);
- SizeF textSize5 = GDI.MeasureString(gfx, "|", drawFont5);
- PointF asteriskPoint5 = new PointF(pixelLocation.X - textSize5.Width / (5 / 2), pixelLocation.Y - textSize5.Height / 2);
- gfx.DrawString("|", drawFont5, brush, asteriskPoint5);
-
- break;
- case MarkerShape.TriUp:
- // Create points that define polygon.
- PointF point9 = new PointF(pixelLocation.X, pixelLocation.Y - size);
- PointF point10 = new PointF(pixelLocation.X, pixelLocation.Y);
- PointF point11 = new PointF(pixelLocation.X - size * (float)0.866, pixelLocation.Y + size * (float)0.5);
- PointF point12 = new PointF(pixelLocation.X, pixelLocation.Y);
- PointF point13 = new PointF(pixelLocation.X + size * (float)0.866, (pixelLocation.Y + size * (float)0.5));
-
-
- PointF[] curvePoints3 = { point12, point9, point10, point11, point12, point13 };
-
- //Draw polygon to screen
- gfx.DrawPolygon(pen, curvePoints3);
-
- break;
- case MarkerShape.TriDown:
- // Create points that define polygon.
- PointF point14 = new PointF(pixelLocation.X, pixelLocation.Y + size);
- PointF point15 = new PointF(pixelLocation.X, pixelLocation.Y);
- PointF point16 = new PointF(pixelLocation.X - size * (float)0.866, pixelLocation.Y - size * (float)0.5);
- PointF point17 = new PointF(pixelLocation.X, pixelLocation.Y);
- PointF point18 = new PointF(pixelLocation.X + size * (float)0.866, (pixelLocation.Y - size * (float)0.5));
-
-
- PointF[] curvePoints4 = { point17, point14, point15, point16, point17, point18 };
-
- //Draw polygon to screen
- gfx.DrawPolygon(pen, curvePoints4);
-
- break;
- case MarkerShape.None:
- break;
- default:
- throw new NotImplementedException($"unsupported marker type: {shape}");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/MultiPlot.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/MultiPlot.cs
deleted file mode 100644
index 73a5c5ecc..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/MultiPlot.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- [Obsolete("This class will be deleted in a future version. See ScottPlot FAQ for details.")]
- public class MultiPlot
- {
- public readonly Plot[] subplots;
- public readonly int rows, cols;
- public readonly int width, height;
-
- private readonly Bitmap bmp;
- private readonly Graphics gfx;
-
- public int subplotCount => rows * cols;
- public int subplotWidth => width / cols;
- public int subplotHeight => height / rows;
-
- public MultiPlot(int width = 800, int height = 600, int rows = 1, int cols = 1)
- {
- if (rows < 1 || cols < 1)
- {
- throw new ArgumentException("must have at least 1 row and column");
- }
-
- this.width = width;
- this.height = height;
- this.rows = rows;
- this.cols = cols;
-
- bmp = new Bitmap(width, height);
- gfx = Graphics.FromImage(bmp);
-
- subplots = new Plot[subplotCount];
- for (int i = 0; i < subplotCount; i++)
- {
- subplots[i] = new Plot(subplotWidth, subplotHeight);
- }
- }
-
- private void Render()
- {
- gfx.Clear(Color.White);
- int subplotIndex = 0;
- for (int row = 0; row < rows; row++)
- {
- for (int col = 0; col < cols; col++)
- {
- Bitmap subplotBmp = subplots[subplotIndex++].Render(subplotWidth, subplotHeight, false);
- Point pt = new Point(col * subplotWidth, row * subplotHeight);
- gfx.DrawImage(subplotBmp, pt);
- }
- }
- }
-
- public Bitmap GetBitmap()
- {
- Render();
- return bmp;
- }
-
- public void SaveFig(string filePath)
- {
- filePath = Path.GetFullPath(filePath);
- string fileFolder = Path.GetDirectoryName(filePath);
- if (!Directory.Exists(fileFolder))
- {
- throw new Exception($"ERROR: folder does not exist: {fileFolder}");
- }
-
- ImageFormat imageFormat;
- string extension = Path.GetExtension(filePath).ToUpper();
- if (extension == ".JPG" || extension == ".JPEG")
- {
- imageFormat = ImageFormat.Jpeg; // TODO: use jpgEncoder to set custom compression level
- }
- else if (extension == ".PNG")
- {
- imageFormat = ImageFormat.Png;
- }
- else if (extension == ".TIF" || extension == ".TIFF")
- {
- imageFormat = ImageFormat.Tiff;
- }
- else if (extension == ".BMP")
- {
- imageFormat = ImageFormat.Bmp;
- }
- else
- {
- throw new NotImplementedException($"Extension not supported: {extension}");
- }
-
- Render();
- bmp.Save(filePath, imageFormat);
- }
-
- public Plot GetSubplot(int rowIndex, int columnIndex)
- {
- if (rowIndex < 0 || rowIndex >= rows)
- {
- throw new ArgumentException("invalid row index");
- }
-
- if (columnIndex < 0 || columnIndex >= cols)
- {
- throw new ArgumentException("invalid column index");
- }
-
- int subplotIndex = rowIndex * cols + columnIndex;
- return subplots[subplotIndex];
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Palette.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Palette.cs
deleted file mode 100644
index a0f2bb942..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Palette.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- /* This module will be expanded in ScottPlot 5 */
- public static class Palette
- {
- public static ScottPlotPalette Amber => new(new Amber());
- public static ScottPlotPalette Aurora => new(new Aurora());
- public static ScottPlotPalette Category10 => new(new Category10());
- public static ScottPlotPalette Category20 => new(new Category20());
- public static ScottPlotPalette ColorblindFriendly => new(new ColourBlindFriendly());
- public static ScottPlotPalette Dark => new(new Dark());
- public static ScottPlotPalette DarkPastel => new(new DarkPastel());
- public static ScottPlotPalette Frost => new(new Frost());
- public static ScottPlotPalette Microcharts => new(new Microcharts());
- public static ScottPlotPalette Nero => new(new Nero());
- public static ScottPlotPalette Nord => new(new Nord());
- public static ScottPlotPalette OneHalf => new(new OneHalf());
- public static ScottPlotPalette OneHalfDark => new(new OneHalfDark());
- public static ScottPlotPalette PolarNight => new(new PolarNight());
- public static ScottPlotPalette Redness => new(new Redness());
- public static ScottPlotPalette SnowStorm => new(new Snowstorm());
- public static ScottPlotPalette Tsitsulin => new(new Tsitsulin());
-
- ///
- /// Create a new color palette from an array of HTML colors
- ///
- public static ScottPlotPalette FromHtmlColors(string[] htmlColors)
- {
- return new ScottPlotPalette(htmlColors);
- }
-
- ///
- /// Return an array containing every available style
- ///
- public static ScottPlotPalette[] GetPalettes()
- {
- return Assembly.GetExecutingAssembly()
- .GetTypes()
- .Where(x => x.IsClass)
- .Where(x => !x.IsAbstract)
- .Where(x => x.GetInterfaces().Contains(typeof(IPalette)))
- .Select(x => FormatterServices.GetUninitializedObject(x) as IPalette)
- .Select(x => new ScottPlotPalette(x))
- .Where(x => x.Count() > 0)
- .ToArray();
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Pixel.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Pixel.cs
deleted file mode 100644
index b0e713d29..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Pixel.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// Describes an X/Y position in pixel space
- ///
- public class Pixel
- {
- public float X;
- public float Y;
-
- public Pixel(float x, float y)
- {
- X = x;
- Y = y;
- }
-
- ///
- /// True as lone as neither coordinate is NaN or Infinity
- ///
- public bool IsFinite()
- {
- return
- !double.IsNaN(X) &&
- !double.IsNaN(Y) &&
- !double.IsInfinity(X) &&
- !double.IsInfinity(Y);
- }
-
- ///
- /// Return the distance to another pixel (in pixel units)
- ///
- public float Distance(Pixel other)
- {
- double dX = Math.Abs(other.X - X);
- double dY = Math.Abs(other.Y - Y);
- return (float)Math.Sqrt(dX * dX + dY * dY);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/PlotDimensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/PlotDimensions.cs
deleted file mode 100644
index 1af40c73e..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/PlotDimensions.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// PlotDimensions supplies figure dimensions and pixel/coordinate lookup methods for a single 2D plane
- ///
- public class PlotDimensions
- {
- // plot dimensions
- public readonly float Width;
- public readonly float Height;
- public readonly float DataWidth;
- public readonly float DataHeight;
- public readonly float DataOffsetX;
- public readonly float DataOffsetY;
-
- // rendering options
- public readonly double ScaleFactor;
-
- // axis limits
- public readonly double XMin;
- public readonly double XMax;
- public readonly double YMin;
- public readonly double YMax;
- public readonly double XSpan;
- public readonly double YSpan;
- public readonly double XCenter;
- public readonly double YCenter;
-
- // pixel/coordinate conversions
- public readonly double PxPerUnitX;
- public readonly double PxPerUnitY;
- public readonly double UnitsPerPxX;
- public readonly double UnitsPerPxY;
-
- public Pixel GetPixel(Coordinate coordinate) => new Pixel(GetPixelX(coordinate.X), GetPixelY(coordinate.Y));
- public float GetPixelX(double position) => (float)(DataOffsetX + ((position - XMin) * PxPerUnitX));
- public float GetPixelY(double position) => (float)(DataOffsetY + ((YMax - position) * PxPerUnitY));
-
- public Coordinate GetCoordinate(Pixel pixel) => new Coordinate(GetCoordinateX(pixel.X), GetCoordinateY(pixel.Y));
- public double GetCoordinateX(float pixel) => (pixel - DataOffsetX) / PxPerUnitX + XMin;
- public double GetCoordinateY(float pixel) => DataHeight - ((pixel - YMin) * PxPerUnitY);
-
- public PlotDimensions(SizeF figureSize, SizeF dataSize, PointF dataOffset,
- (double xMin, double xMax, double yMin, double yMax) axisLimits,
- double scaleFactor)
- {
- (Width, Height) = (figureSize.Width, figureSize.Height);
- (DataWidth, DataHeight) = (dataSize.Width, dataSize.Height);
- (DataOffsetX, DataOffsetY) = (dataOffset.X, dataOffset.Y);
- (XMin, XMax, YMin, YMax) = (axisLimits.xMin, axisLimits.xMax, axisLimits.yMin, axisLimits.yMax);
- (XSpan, YSpan) = (XMax - XMin, YMax - YMin);
- (XCenter, YCenter) = ((XMin + XMax) / 2, (YMin + YMax) / 2);
- (PxPerUnitX, PxPerUnitY) = (DataWidth / XSpan, DataHeight / YSpan);
- (UnitsPerPxX, UnitsPerPxY) = (XSpan / DataWidth, YSpan / DataHeight);
- ScaleFactor = scaleFactor;
- }
-
- public override string ToString() =>
- $"Dimensions for figure ({Width}x{Height}), data area ({DataWidth}x{DataHeight}), and axes ({XMin}, {XMax}, {YMin}, {YMax})";
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Settings.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Settings.cs
deleted file mode 100644
index 5522f72f2..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Settings.cs
+++ /dev/null
@@ -1,686 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This module holds state for figure dimensions, axis limits, plot contents, and styling options.
- /// A plot can be duplicated by copying the full state of this settings module.
- ///
- public class Settings
- {
- ///
- /// This List contains all plottables managed by this Plot.
- /// Render order is from lowest (first) to highest (last).
- ///
- public readonly ObservableCollection Plottables = new();
-
- ///
- /// Unique value that changes any time the list of plottables is modified.
- ///
- public int PlottablesIdentifier { get; private set; } = 0;
-
- ///
- /// Return the next color from PlottablePalette based on the current number of plottables
- ///
- public Color GetNextColor() => PlottablePalette.GetColour(Plottables.Count);
-
- public readonly FigureBackground FigureBackground = new FigureBackground();
- public readonly DataBackground DataBackground = new DataBackground();
- public readonly BenchmarkMessage BenchmarkMessage = new BenchmarkMessage();
- public readonly ErrorMessage ErrorMessage = new ErrorMessage();
- public readonly Legend CornerLegend = new Legend();
- public readonly ZoomRectangle ZoomRectangle = new ZoomRectangle();
- public ScottPlotPalette PlottablePalette = Palette.Category10;
-
- ///
- /// List of all axes used in this plot.
- /// Axes can be added, but existing ones should not be removed.
- ///
- public List Axes = new()
- {
- new DefaultLeftAxis(),
- new DefaultRightAxis(),
- new DefaultBottomAxis(),
- new DefaultTopAxis()
- };
-
- ///
- /// Get an array containing just horizontal axes
- ///
- public Axis[] HorizontalAxes => Axes.Where(x => x.IsHorizontal).Distinct().ToArray();
-
- ///
- /// Get an array containing just vertical axes
- ///
- public Axis[] VerticalAxes => Axes.Where(x => x.IsVertical).Distinct().ToArray();
-
- ///
- /// Return the first horizontal axis with the given axis index
- ///
- public Axis GetXAxis(int xAxisIndex)
- {
- Axis[] axes = Axes.Where(x => x.IsHorizontal && x.AxisIndex == xAxisIndex).ToArray();
- if (axes.Length == 0)
- {
- throw new InvalidOperationException($"There no X axes with an axis index of {xAxisIndex}");
- }
-
- return axes[0];
- }
-
- ///
- /// Return the first vertical axis with the given axis index
- ///
- public Axis GetYAxis(int yAxisIndex)
- {
- Axis[] axes = Axes.Where(x => x.IsVertical && x.AxisIndex == yAxisIndex).ToArray();
- if (axes.Length == 0)
- {
- throw new InvalidOperationException($"There no Y axes with an axis index of {yAxisIndex}");
- }
-
- return axes[0];
- }
-
- ///
- /// Indicates whether unset axes are present.
- /// If true, the user may want to call AxisAuto() or SetAxisLimits().
- ///
- public bool AllAxesHaveBeenSet => Axes.All(x => x.Dims.HasBeenSet);
-
- ///
- /// Controls relationship between X and Y axis scales.
- /// See documentation for enumeration members.
- ///
- public EqualScaleMode EqualScaleMode { get; set; } = EqualScaleMode.Disabled;
-
- ///
- /// Primary vertical axis (on the left of the plot)
- ///
- public Axis YAxis => Axes[0];
-
- ///
- /// Secondary vertical axis (on the right of the plot)
- ///
- public Axis YAxis2 => Axes[1];
-
- ///
- /// Primary horizontal axis (on the bottom of the plot)
- ///
- public Axis XAxis => Axes[2];
-
- ///
- /// Secondary horizontal axis (on the top of the plot)
- ///
- public Axis XAxis2 => Axes[3];
-
- ///
- /// Width of the figure (in pixels)
- ///
- public int Width => (int)XAxis.Dims.FigureSizePx;
-
- ///
- /// Height of the figure (in pixels)
- ///
- public int Height => (int)YAxis.Dims.FigureSizePx;
-
- ///
- /// Default padding to use when AxisAuto() or Margins() is called without a specified margin
- ///
- public double MarginsX = .05;
-
- ///
- /// Default padding to use when AxisAuto() or Margins() is called without a specified margin
- ///
- public double MarginsY = .1;
-
- public Settings()
- {
- Plottables.CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) => PlottablesIdentifier++;
- }
-
- ///
- /// Return figure dimensions for the specified X and Y axes
- ///
- public PlotDimensions GetPlotDimensions(int xAxisIndex, int yAxisIndex, double scaleFactor)
- {
- var xAxis = GetXAxis(xAxisIndex);
- var yAxis = GetYAxis(yAxisIndex);
-
- // determine figure dimensions based on primary X and Y axis
- var figureSize = new SizeF(XAxis.Dims.FigureSizePx, YAxis.Dims.FigureSizePx);
- var dataSize = new SizeF(XAxis.Dims.DataSizePx, YAxis.Dims.DataSizePx);
- var dataOffset = new PointF(XAxis.Dims.DataOffsetPx, YAxis.Dims.DataOffsetPx);
-
- // determine axis limits based on specific X and Y axes
- (double xMin, double xMax) = xAxis.Dims.RationalLimits();
- (double yMin, double yMax) = yAxis.Dims.RationalLimits();
- var limits = (xMin, xMax, yMin, yMax);
-
- return new PlotDimensions(figureSize, dataSize, dataOffset, limits, scaleFactor);
- }
-
- ///
- /// Set the default size for rendering images
- ///
- public void Resize(float width, float height)
- {
- foreach (Axis axis in Axes)
- {
- axis.Dims.Resize(axis.IsHorizontal ? width : height);
- }
- }
-
- ///
- /// Reset axis limits to their defauts
- ///
- public void ResetAxisLimits()
- {
- foreach (Axis axis in Axes)
- {
- axis.Dims.ResetLimits();
- }
- }
-
- ///
- /// Define axis limits for a particuar axis
- ///
- public void AxisSet(double? xMin, double? xMax, double? yMin, double? yMax, int xAxisIndex = 0, int yAxisIndex = 0)
- {
- GetXAxis(xAxisIndex).Dims.SetAxis(xMin, xMax);
- GetYAxis(yAxisIndex).Dims.SetAxis(yMin, yMax);
- }
-
- ///
- /// Define axis limits for a particuar axis
- ///
- public void AxisSet(AxisLimits limits, int xAxisIndex = 0, int yAxisIndex = 0)
- {
- GetXAxis(xAxisIndex).Dims.SetAxis(limits.XMin, limits.XMax);
- GetYAxis(yAxisIndex).Dims.SetAxis(limits.YMin, limits.YMax);
- }
-
- ///
- /// Return X and Y axis limits
- ///
- public AxisLimits AxisLimits(int xAxisIndex, int yAxisIndex)
- {
- var xAxis = GetXAxis(xAxisIndex);
- var yAxis = GetYAxis(yAxisIndex);
- return new AxisLimits(xAxis.Dims.Min, xAxis.Dims.Max, yAxis.Dims.Min, yAxis.Dims.Max);
- }
-
- ///
- /// Pan all axes by the given pixel distance
- ///
- public void AxesPanPx(float dxPx, float dyPx)
- {
- foreach (Axis axis in Axes)
- {
- if (axis.IsHorizontal)
- {
- axis.Dims.PanPx(dxPx);
- }
- else
- {
- axis.Dims.PanPx(dyPx);
- }
- }
- }
-
- ///
- /// Zoom all axes by the given pixel distance
- ///
- public void AxesZoomPx(float xPx, float yPx, bool lockRatio = false)
- {
- if (lockRatio)
- {
- (xPx, yPx) = (Math.Max(xPx, yPx), Math.Max(xPx, yPx));
- }
-
- foreach (Axis axis in Axes)
- {
- double deltaPx = axis.IsHorizontal ? xPx : yPx;
- double delta = deltaPx * axis.Dims.UnitsPerPx;
- double deltaFrac = delta / (Math.Abs(delta) + axis.Dims.Span);
- axis.Dims.Zoom(Math.Pow(10, deltaFrac));
- }
- }
-
- ///
- /// Zoom all axes by the given fraction
- ///
- public void AxesZoomTo(double xFrac, double yFrac, float xPixel, float yPixel)
- {
- foreach (Axis axis in Axes)
- {
- double frac = axis.IsHorizontal ? xFrac : yFrac;
- float centerPixel = axis.IsHorizontal ? xPixel : yPixel;
- double center = axis.Dims.GetUnit(centerPixel);
- axis.Dims.Zoom(frac, center);
- }
- }
-
- ///
- /// Automatically adjust X and Y axis limits of all axes to fit the data
- ///
- public void AxisAutoAll(double horizontalMargin = .1, double verticalMargin = .1)
- {
- AxisAutoAllX(horizontalMargin);
- AxisAutoAllY(verticalMargin);
- }
-
- ///
- /// Automatically adjust axis limits for all axes which have not yet been set
- ///
- public void AxisAutoUnsetAxes()
- {
- Axis[] unsetAxesX = HorizontalAxes
- .Where(x => !x.Dims.HasBeenSet && x.Dims.IsNan)
- .Select(x => x.AxisIndex)
- .Distinct()
- .Select(x => GetXAxis(x))
- .ToArray();
-
- Axis[] unsetAxesY = VerticalAxes
- .Where(x => !x.Dims.HasBeenSet && x.Dims.IsNan)
- .Select(x => x.AxisIndex)
- .Distinct()
- .Select(x => GetYAxis(x))
- .ToArray();
-
- foreach (Axis xAxis in unsetAxesX)
- {
- AxisAutoX(xAxis.AxisIndex);
- }
-
- foreach (Axis yAxis in unsetAxesY)
- {
- AxisAutoY(yAxis.AxisIndex);
- }
- }
-
- ///
- /// If a scale lock mode is in use, modify the axis limits accordingly
- ///
- public void EnforceEqualAxisScales()
- {
- EqualScaleMode mode = EqualScaleMode;
-
- if (mode is EqualScaleMode.PreserveLargest)
- {
- mode = XAxis.Dims.DataSizePx > YAxis.Dims.DataSizePx
- ? EqualScaleMode.PreserveX
- : EqualScaleMode.PreserveY;
- }
-
- if (mode is EqualScaleMode.PreserveSmallest)
- {
- mode = XAxis.Dims.DataSizePx < YAxis.Dims.DataSizePx
- ? EqualScaleMode.PreserveX
- : EqualScaleMode.PreserveY;
- }
-
- switch (mode)
- {
- case EqualScaleMode.Disabled:
- return;
-
- case EqualScaleMode.PreserveX:
- double yHalfSize = (YAxis.Dims.DataSizePx / 2) * XAxis.Dims.UnitsPerPx;
- AxisSet(null, null, YAxis.Dims.Center - yHalfSize, YAxis.Dims.Center + yHalfSize);
- return;
-
- case EqualScaleMode.PreserveY:
- double xHalfSize = (XAxis.Dims.DataSizePx / 2) * YAxis.Dims.UnitsPerPx;
- AxisSet(XAxis.Dims.Center - xHalfSize, XAxis.Dims.Center + xHalfSize, null, null);
- return;
-
- case EqualScaleMode.ZoomOut:
- double maxUnitsPerPx = Math.Max(XAxis.Dims.UnitsPerPx, YAxis.Dims.UnitsPerPx);
- double halfX = (XAxis.Dims.DataSizePx / 2) * maxUnitsPerPx;
- double halfY = (YAxis.Dims.DataSizePx / 2) * maxUnitsPerPx;
- AxisSet(XAxis.Dims.Center - halfX, XAxis.Dims.Center + halfX, YAxis.Dims.Center - halfY, YAxis.Dims.Center + halfY);
- return;
-
- case EqualScaleMode.PreserveLargest:
- throw new InvalidOperationException("this mode should have been converted to preserve X or Y");
-
- case EqualScaleMode.PreserveSmallest:
- throw new InvalidOperationException("this mode should have been converted to preserve X or Y");
-
- default:
- throw new InvalidOperationException("unknown scale lock mode");
- }
- }
-
- ///
- /// Automatically adjust X axis limits to fit the data
- ///
- public void AxisAutoAllX(double margin = .1)
- {
- int[] xAxisIndexes = Axes.Where(x => x.IsHorizontal).Select(x => x.AxisIndex).Distinct().ToArray();
- foreach (int i in xAxisIndexes)
- {
- AxisAutoX(i, margin);
- }
- }
-
- ///
- /// Automatically adjust Y axis limits to fit the data
- ///
- public void AxisAutoAllY(double margin = .1)
- {
- int[] yAxisIndexes = Axes.Where(x => x.IsVertical).Select(x => x.AxisIndex).Distinct().ToArray();
- foreach (int i in yAxisIndexes)
- {
- AxisAutoY(i, margin);
- }
- }
-
- public void AxisAutoX(int xAxisIndex, double margin = .1)
- {
- double min = double.NaN;
- double max = double.NaN;
- double zoomFrac = 1 - margin;
-
- var plottableLimits = Plottables.Where(x => x is IPlottable)
- .Select(x => (IPlottable)x)
- .Where(x => x.IsVisible)
- .Where(x => x.XAxisIndex == xAxisIndex)
- .Select(x => x.GetAxisLimits())
- .ToArray();
-
- foreach (var limits in plottableLimits)
- {
- if (!double.IsNaN(limits.XMin))
- {
- min = double.IsNaN(min) ? limits.XMin : Math.Min(min, limits.XMin);
- }
-
- if (!double.IsNaN(limits.XMax))
- {
- max = double.IsNaN(max) ? limits.XMax : Math.Max(max, limits.XMax);
- }
- }
-
- if (double.IsNaN(min) && double.IsNaN(max))
- {
- return;
- }
-
- var xAxis = GetXAxis(xAxisIndex);
- xAxis.Dims.SetAxis(min, max);
- xAxis.Dims.Zoom(zoomFrac);
- }
-
- public void AxisAutoY(int yAxisIndex, double margin = .1)
- {
- double min = double.NaN;
- double max = double.NaN;
- double zoomFrac = 1 - margin;
-
- var plottableLimits = Plottables.Where(x => x is IPlottable)
- .Select(x => (IPlottable)x)
- .Where(x => x.IsVisible)
- .Where(x => x.YAxisIndex == yAxisIndex)
- .Select(x => x.GetAxisLimits())
- .ToArray();
-
- foreach (var limits in plottableLimits)
- {
- if (!double.IsNaN(limits.YMin))
- {
- min = double.IsNaN(min) ? limits.YMin : Math.Min(min, limits.YMin);
- }
-
- if (!double.IsNaN(limits.YMax))
- {
- max = double.IsNaN(max) ? limits.YMax : Math.Max(max, limits.YMax);
- }
- }
-
- if (double.IsNaN(min) && double.IsNaN(max))
- {
- return;
- }
-
- var yAxis = GetYAxis(yAxisIndex);
- yAxis.Dims.SetAxis(min, max);
- yAxis.Dims.Zoom(zoomFrac);
- }
-
- ///
- /// Store axis limits (useful for storing state upon a MouseDown event)
- ///
- public void RememberAxisLimits()
- {
- AxisAutoUnsetAxes();
- foreach (Axis axis in Axes)
- {
- axis.Dims.Remember();
- }
- }
-
- ///
- /// Recall axis limits (useful for recalling state from a previous MouseDown event)
- ///
- public void RecallAxisLimits()
- {
- foreach (Axis axis in Axes)
- {
- axis.Dims.Recall();
- }
- }
-
- public float MouseDownX { get; private set; }
- public float MouseDownY { get; private set; }
-
- ///
- /// Remember mouse position (do this before calling MousePan or MouseZoom)
- ///
- public void MouseDown(float mouseDownX, float mouseDownY)
- {
- RememberAxisLimits();
- MouseDownX = mouseDownX;
- MouseDownY = mouseDownY;
- }
-
- ///
- /// Pan all axes based on the mouse position now vs that last given to MouseDown()
- ///
- public void MousePan(float mouseNowX, float mouseNowY)
- {
- RecallAxisLimits();
- AxesPanPx(MouseDownX - mouseNowX, mouseNowY - MouseDownY);
- }
-
- ///
- /// Zoom all axes based on the mouse position now vs that last given to MouseDown()
- ///
- public void MouseZoom(float mouseNowX, float mouseNowY)
- {
- RecallAxisLimits();
- AxesZoomPx(mouseNowX - MouseDownX, MouseDownY - mouseNowY);
- }
-
- public void MouseZoomRect(float mouseNowX, float mouseNowY, bool finalize = false)
- {
- float left = Math.Min(MouseDownX, mouseNowX);
- float right = Math.Max(MouseDownX, mouseNowX);
- float top = Math.Min(MouseDownY, mouseNowY);
- float bottom = Math.Max(MouseDownY, mouseNowY);
- float width = right - left;
- float height = bottom - top;
-
- if (finalize)
- {
- double x1 = XAxis.Dims.GetUnit(left);
- double x2 = XAxis.Dims.GetUnit(right);
- double y1 = YAxis.Dims.GetUnit(bottom);
- double y2 = YAxis.Dims.GetUnit(top);
- ZoomRectangle.Clear();
- AxisSet(x1, x2, y1, y2);
- }
- else
- {
- // TODO: dont require data offset shifting prior to calling this
- ZoomRectangle.Set(left - XAxis.Dims.DataOffsetPx, top - YAxis.Dims.DataOffsetPx, width, height);
- }
- }
-
- ///
- /// Ensure all axes have the same size and offset as the primary X and Y axis
- ///
- public void CopyPrimaryLayoutToAllAxes()
- {
- foreach (Axis axis in Axes)
- {
- if (axis.IsHorizontal)
- {
- axis.Dims.Resize(Width, XAxis.Dims.DataSizePx, XAxis.Dims.DataOffsetPx);
- }
- else
- {
- axis.Dims.Resize(Height, YAxis.Dims.DataSizePx, YAxis.Dims.DataOffsetPx);
- }
- }
- }
-
- ///
- /// Automatically adjust the layout for every axis
- ///
- public void LayoutAuto()
- {
- int[] xIndexes = HorizontalAxes.Select(x => x.AxisIndex).Distinct().ToArray();
- int[] yIndexes = VerticalAxes.Select(x => x.AxisIndex).Distinct().ToArray();
-
- foreach (int xAxisIndex in xIndexes)
- {
- LayoutAuto(xAxisIndex, 0);
- }
-
- foreach (int yAxisIndex in yIndexes)
- {
- LayoutAuto(0, yAxisIndex);
- }
- }
-
- private void LayoutAuto(int xAxisIndex, int yAxisIndex)
- {
- // TODO: separate this into distinct X and Y functions (requires refactoring plottable interface)
- bool atLeastOneAxisIsZero = xAxisIndex == 0 || yAxisIndex == 0;
- if (!atLeastOneAxisIsZero)
- {
- throw new InvalidOperationException();
- }
-
- // Adjust padding around the data area to accommodate title and tick labels.
- //
- // This is a chicken-and-egg problem:
- // * TICK DENSITY depends on the DATA AREA SIZE
- // * DATA AREA SIZE depends on LAYOUT PADDING
- // * LAYOUT PADDING depends on MAXIMUM LABEL SIZE
- // * MAXIMUM LABEL SIZE depends on TICK DENSITY
- //
- // To solve this, start by assuming data area size == figure size and layout padding == 0,
- // then calculate ticks, then set padding based on the largest tick, then re-calculate ticks.
-
- // axis limits shall not change
- var dims = GetPlotDimensions(xAxisIndex, yAxisIndex, scaleFactor: 1.0);
- var limits = (dims.XMin, dims.XMax, dims.YMin, dims.YMax);
- var figSize = new SizeF(Width, Height);
-
- // first-pass tick calculation based on full image size
- var dimsFull = new PlotDimensions(figSize, figSize, new PointF(0, 0), limits, scaleFactor: 1);
-
- foreach (var axis in Axes)
- {
- bool isMatchingXAxis = axis.IsHorizontal && axis.AxisIndex == xAxisIndex;
- bool isMatchingYAxis = axis.IsVertical && axis.AxisIndex == yAxisIndex;
- if (isMatchingXAxis || isMatchingYAxis)
- {
- axis.RecalculateTickPositions(dimsFull);
- axis.RecalculateAxisSize();
- }
- }
-
- // now adjust our layout based on measured axis sizes
- RecalculateDataPadding();
-
- // now recalculate ticks based on new layout
- var dataSize = new SizeF(XAxis.Dims.DataSizePx, YAxis.Dims.DataSizePx);
- var dataOffset = new PointF(XAxis.Dims.DataOffsetPx, YAxis.Dims.DataOffsetPx);
-
- var dims3 = new PlotDimensions(figSize, dataSize, dataOffset, limits, scaleFactor: 1.0);
- foreach (var axis in Axes)
- {
- bool isMatchingXAxis = axis.IsHorizontal && axis.AxisIndex == xAxisIndex;
- bool isMatchingYAxis = axis.IsVertical && axis.AxisIndex == yAxisIndex;
- if (isMatchingXAxis || isMatchingYAxis)
- {
- axis.RecalculateTickPositions(dims3);
- }
- }
-
- // adjust the layout based on measured tick label sizes
- RecalculateDataPadding();
- }
-
- private void RecalculateDataPadding()
- {
- Edge[] edges = { Edge.Left, Edge.Right, Edge.Top, Edge.Bottom };
- foreach (var edge in edges)
- {
- float offset = 0;
- foreach (var axis in Axes.Where(x => x.Edge == edge))
- {
- axis.SetOffset(offset);
- offset += axis.GetSize();
- }
- }
-
- float padLeft = Axes.Where(x => x.Edge == Edge.Left).Select(x => x.GetSize()).Sum();
- float padRight = Axes.Where(x => x.Edge == Edge.Right).Select(x => x.GetSize()).Sum();
- float padBottom = Axes.Where(x => x.Edge == Edge.Bottom).Select(x => x.GetSize()).Sum();
- float padTop = Axes.Where(x => x.Edge == Edge.Top).Select(x => x.GetSize()).Sum();
-
- foreach (Axis axis in Axes)
- {
- if (axis.IsHorizontal)
- {
- axis.Dims.SetPadding(padLeft, padRight);
- }
- else
- {
- axis.Dims.SetPadding(padTop, padBottom);
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxis.cs
deleted file mode 100644
index 971042f60..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxis.cs
+++ /dev/null
@@ -1,242 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public class StarAxis
- {
- ///
- /// The ticks for each spoke.
- ///
- public StarAxisTick[] Ticks { get; set; }
-
- ///
- /// The number of spokes to draw.
- ///
- public int NumberOfSpokes { get; set; }
-
- ///
- /// Labels for each category.
- /// Length must be equal to the number of columns (categories) in the original data.
- ///
- public string[] CategoryLabels;
-
- ///
- /// Icons for each category.
- /// Length must be equal to the number of columns (categories) in the original data.
- ///
- public System.Drawing.Image[] CategoryImages;
-
- ///
- /// Controls rendering style of the concentric circles (ticks) of the web
- ///
- public RadarAxis AxisType { get; set; }
-
- ///
- /// Indicates the type of axis chart to render
- ///
- public ImagePlacement ImagePlacement { get; set; }
-
- ///
- /// Color of the axis lines and concentric circles representing ticks
- ///
- public Color WebColor { get; set; } = Color.Gray;
-
- ///
- /// If true, each value will be written in text on the plot.
- ///
- public bool ShowAxisValues { get; set; } = true;
-
- ///
- /// If true, category labels will be written in text on the plot (provided they exist)
- ///
- public bool ShowCategoryLabels { get; set; } = true;
-
- ///
- /// Determines whether each spoke should be labeled, or just the first
- ///
- public bool LabelEachSpoke { get; set; } = false;
-
- ///
- /// The drawing surface to use.
- ///
- public Graphics Graphics { get; set; }
-
- ///
- /// Font used for labeling values on the plot
- ///
- public Font Font = new();
-
- ///
- /// Determines the width of each spoke and the axis lines.
- ///
- public int LineWidth { get; set; } = 1;
-
- public int XAxisIndex { get; set; } = 0;
- public int YAxisIndex { get; set; } = 0;
-
- public void Render(PlotDimensions dims, Bitmap bmp, bool lowQuality = false)
- {
- double sweepAngle = 2 * Math.PI / NumberOfSpokes;
- double minScale = new double[] { dims.PxPerUnitX, dims.PxPerUnitX }.Min();
- PointF origin = new(dims.GetPixelX(0), dims.GetPixelY(0));
-
- RenderRings(origin, minScale, sweepAngle);
- RenderSpokes(origin, minScale, sweepAngle);
-
- if (CategoryImages is not null)
- {
- RenderImages(origin, minScale, sweepAngle);
- }
- else if (ShowCategoryLabels && CategoryLabels is not null)
- {
- RenderLabels(dims, origin, minScale, sweepAngle);
- }
- }
-
- private void RenderRings(PointF origin, double minScale, double sweepAngle)
- {
- using Pen pen = GDI.Pen(WebColor, LineWidth);
-
- foreach (var tick in Ticks)
- {
- double tickDistancePx = tick.Location * minScale;
-
- if (AxisType == RadarAxis.Circle)
- {
- Graphics.DrawEllipse(pen,
- x: (int)(origin.X - tickDistancePx),
- y: (int)(origin.Y - tickDistancePx),
- width: (int)(tickDistancePx * 2),
- height: (int)(tickDistancePx * 2));
- }
- else if (AxisType == RadarAxis.Polygon)
- {
- PointF[] points = new PointF[NumberOfSpokes];
- for (int j = 0; j < NumberOfSpokes; j++)
- {
- float x = (float)(tickDistancePx * Math.Cos(sweepAngle * j - Math.PI / 2) + origin.X);
- float y = (float)(tickDistancePx * Math.Sin(sweepAngle * j - Math.PI / 2) + origin.Y);
- points[j] = new PointF(x, y);
- }
- Graphics.DrawPolygon(pen, points);
- }
- }
- }
-
- private void RenderSpokes(PointF origin, double minScale, double sweepAngle)
- {
- using Pen pen = GDI.Pen(WebColor, LineWidth);
- using System.Drawing.Font font = GDI.Font(Font);
- using Brush fontBrush = GDI.Brush(Font.Color);
- using StringFormat sf = new();
-
- for (int i = 0; i < NumberOfSpokes; i++)
- {
- PointF destination = new(
- x: (float)(1.1 * Math.Cos(sweepAngle * i - Math.PI / 2) * minScale + origin.X),
- y: (float)(1.1 * Math.Sin(sweepAngle * i - Math.PI / 2) * minScale + origin.Y));
-
- Graphics.DrawLine(pen, origin, destination);
-
- for (int j = 0; j < Ticks.Length; j++)
- {
- double tickDistancePx = Ticks[j].Location * minScale;
-
- if (ShowAxisValues)
- {
- if (LabelEachSpoke)
- {
- float x = (float)(tickDistancePx * Math.Cos(sweepAngle * i - Math.PI / 2) + origin.X);
- float y = (float)(tickDistancePx * Math.Sin(sweepAngle * i - Math.PI / 2) + origin.Y);
-
- sf.Alignment = x < origin.X ? StringAlignment.Far : StringAlignment.Near;
- sf.LineAlignment = y < origin.Y ? StringAlignment.Far : StringAlignment.Near;
-
- double val = Ticks[j].Labels[i];
- Graphics.DrawString($"{val:f1}", font, fontBrush, x, y, sf);
- }
- else if (i == 0)
- {
- double val = Ticks[j].Labels[0];
- Graphics.DrawString($"{val:f1}", font, fontBrush, origin.X, (float)(-tickDistancePx + origin.Y), sf);
- }
- }
- }
- }
- }
-
- private void RenderImages(PointF origin, double minScale, double sweepAngle)
- {
- for (int i = 0; i < NumberOfSpokes; i++)
- {
- double sweepOffset = ImagePlacement == ImagePlacement.Inside ? sweepAngle / 2 : 0;
- double cosinus = Math.Cos(sweepAngle * i + sweepOffset - Math.PI / 2);
- double sinus = Math.Sin(sweepAngle * i + sweepOffset - Math.PI / 2);
- int imageWidth = CategoryImages[i].Width;
- int imageHeight = CategoryImages[i].Height;
-
- PointF imageDestination = new(
- (float)(1.45 * cosinus * minScale + origin.X - imageWidth / 2 * cosinus),
- (float)(1.45 * sinus * minScale + origin.Y - imageHeight / 2 * sinus));
-
- RectangleF rect = new(
- x: imageDestination.X - CategoryImages[i].Width / 2,
- y: imageDestination.Y - CategoryImages[i].Height / 2,
- width: CategoryImages[i].Width,
- height: CategoryImages[i].Height);
-
- Graphics.DrawImage(CategoryImages[i], rect);
- }
- }
-
- private void RenderLabels(PlotDimensions dims, PointF origin, double minScale, double sweepAngle)
- {
- using System.Drawing.Font font = GDI.Font(Font);
- using Brush fontBrush = GDI.Brush(Font.Color);
- using StringFormat sf = GDI.StringFormat(HorizontalAlignment.Center, VerticalAlignment.Middle);
-
- for (int i = 0; i < NumberOfSpokes; i++)
- {
- PointF textDestination = new(
- (float)(1.3 * Math.Cos(sweepAngle * i - Math.PI / 2) * minScale + origin.X),
- (float)(1.3 * Math.Sin(sweepAngle * i - Math.PI / 2) * minScale + origin.Y));
-
- if (Math.Abs(textDestination.X - origin.X) < 0.1)
- {
- sf.Alignment = StringAlignment.Center;
- }
- else
- {
- sf.Alignment = dims.GetCoordinateX(textDestination.X) < 0 ? StringAlignment.Far : StringAlignment.Near;
- }
-
- Graphics.DrawString(CategoryLabels[i], font, fontBrush, textDestination, sf);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxisTick.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxisTick.cs
deleted file mode 100644
index f71852cb3..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/StarAxisTick.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public struct StarAxisTick
- {
- public readonly double Location;
- public readonly double[] Labels;
-
- public StarAxisTick(double location, double[] labels)
- {
- Location = location;
- Labels = labels;
- }
-
- public StarAxisTick(double location, double max)
- {
- Location = location;
- Labels = new double[] { location * max };
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Style.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Style.cs
deleted file mode 100644
index c9ce5548b..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Style.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public static class Style
- {
- public static IStyle Black => new Black();
- public static IStyle Blue1 => new Blue1();
- public static IStyle Blue2 => new Blue2();
- public static IStyle Blue3 => new Blue3();
- public static IStyle Burgundy => new Burgundy();
- public static IStyle Control => new Control();
- public static IStyle Default => new Default();
- public static IStyle Gray1 => new Gray1();
- public static IStyle Gray2 => new Gray2();
- public static IStyle Hazel => new Hazel();
- public static IStyle Light1 => new Light1();
- public static IStyle Light2 => new Light2();
- public static IStyle Monospace => new Monospace();
- public static IStyle Pink => new Pink();
- public static IStyle Seaborn => new Seaborn();
-
- ///
- /// Return an array containing every available style
- ///
- public static IStyle[] GetStyles()
- {
- return Assembly.GetExecutingAssembly()
- .GetTypes()
- .Where(x => x.IsClass)
- .Where(x => !x.IsAbstract)
- .Where(x => x.GetInterfaces().Contains(typeof(IStyle)))
- .Select(x => (IStyle)FormatterServices.GetUninitializedObject(x))
- .ToArray();
- }
- }
-
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Tools.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Tools.cs
deleted file mode 100644
index 249d5c266..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Tools.cs
+++ /dev/null
@@ -1,531 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public static class Tools
- {
- public static Color GetRandomColor(Random rand = null)
- {
- if (rand is null)
- {
- rand = new Random();
- }
-
- Color randomColor = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
- return randomColor;
- }
-
- public static Brush GetRandomBrush()
- {
- return new SolidBrush(GetRandomColor());
- }
-
- public static Color Blend(this Color colorA, Color colorB, double fractionA)
- {
- fractionA = Math.Max(fractionA, 0);
- fractionA = Math.Min(fractionA, 1);
- byte r = (byte)((colorA.R * fractionA) + colorB.R * (1 - fractionA));
- byte g = (byte)((colorA.G * fractionA) + colorB.G * (1 - fractionA));
- byte b = (byte)((colorA.B * fractionA) + colorB.B * (1 - fractionA));
- return Color.FromArgb(r, g, b);
- }
-
- [Obsolete("use ScottPlot.Plot.Version", true)]
- public static string GetVersionString(bool justThreeDigits = true)
- {
- Version ver = typeof(Plot).Assembly.GetName().Version;
- if (justThreeDigits)
- {
- return $"{ver.Major}.{ver.Minor}.{ver.Build}";
- }
- else
- {
- return ver.ToString();
- }
- }
-
- public static string GetFrameworkVersionString()
- {
- return $".NET {Environment.Version.ToString()}";
- }
-
- public static string BitmapHash(Bitmap bmp)
- {
- byte[] bmpBytes = BitmapToBytes(bmp);
- var md5 = MD5.Create();
- StringBuilder hashString = new StringBuilder();
- byte[] hashBytes = md5.ComputeHash(bmpBytes);
- for (int i = 0; i < hashBytes.Length; i++)
- {
- hashString.Append(hashBytes[i].ToString("X2"));
- }
-
- return hashString.ToString();
- }
-
- public static Bitmap BitmapFromBytes(byte[] bytes, Size size, PixelFormat format = PixelFormat.Format8bppIndexed)
- {
- Bitmap bmp = new Bitmap(size.Width, size.Height, format);
- Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
- BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
- Marshal.Copy(bytes, 0, bmpData.Scan0, bytes.Length);
- bmp.UnlockBits(bmpData);
- return bmp;
- }
-
- public static byte[] BitmapToBytes(Bitmap bmp)
- {
- int bytesPerPixel = System.Drawing.Image.GetPixelFormatSize(bmp.PixelFormat) / 8;
- byte[] bytes = new byte[bmp.Width * bmp.Height * bytesPerPixel];
- Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
- BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
- //byte[] bytes = new byte[bmpData.Stride * bmp.Height * bytesPerPixel];
- Marshal.Copy(bmpData.Scan0, bytes, 0, bytes.Length);
- bmp.UnlockBits(bmpData);
- return bytes;
- }
-
- [Obsolete("use ScottPlot.Config.Fonts.GetValidFontName()", error: true)]
- public static string VerifyFont(string fontName)
- {
- return null;
- }
-
- public static string ScientificNotation(double value, int decimalPlaces = 2, bool preceedWithPlus = true)
- {
- string output;
-
- if ((Math.Abs(value) > .0001) && (Math.Abs(value) < 10000))
- {
- value = Math.Round(value, decimalPlaces);
- output = value.ToString();
- }
- else
- {
- int exponent = (int)Math.Log10(value);
- double multiplier = Math.Pow(10, exponent);
- double mantissa = value / multiplier;
- mantissa = Math.Round(mantissa, decimalPlaces);
- output = $"{mantissa}e{exponent}";
- }
-
- if (preceedWithPlus && !output.StartsWith("-"))
- {
- output = $"+{output}";
- }
-
- return output;
- }
-
- public static void DesignerModeDemoPlot(Plot plt)
- {
- int pointCount = 101;
- double pointSpacing = .01;
- double[] dataXs = DataGen.Consecutive(pointCount, pointSpacing);
- double[] dataSin = DataGen.Sin(pointCount);
- double[] dataCos = DataGen.Cos(pointCount);
-
- plt.AddScatter(dataXs, dataSin);
- plt.AddScatter(dataXs, dataCos);
- plt.AxisAuto(0);
- plt.Title("ScottPlot User Control");
- plt.YLabel("Sample Data");
- }
-
- public static double[] DateTimesToDoubles(DateTime[] dateTimeArray)
- {
- double[] positions = new double[dateTimeArray.Length];
- for (int i = 0; i < positions.Length; i++)
- {
- positions[i] = dateTimeArray[i].ToOADate();
- }
-
- return positions;
- }
-
- private static double[] DoubleArray(T[] dataIn)
- {
- double[] dataOut = new double[dataIn.Length];
- for (int i = 0; i < dataIn.Length; i++)
- {
- dataOut[i] = Convert.ToDouble(dataIn[i]);
- }
-
- return dataOut;
- }
-
- public static double[] DoubleArray(byte[] dataIn)
- {
- return DoubleArray(dataIn);
- }
-
- public static double[] DoubleArray(int[] dataIn)
- {
- return DoubleArray(dataIn);
- }
-
- public static double[] DoubleArray(float[] dataIn)
- {
- return DoubleArray(dataIn);
- }
-
- public static void ApplyBaselineSubtraction(double[] data, int index1, int index2)
- {
- double baselineSum = 0;
- for (int i = index1; i < index2; i++)
- {
- baselineSum += data[i];
- }
-
- double baselineAverage = baselineSum / (index2 - index1);
- for (int i = 0; i < data.Length; i++)
- {
- data[i] -= baselineAverage;
- }
- }
-
- public static double[] Log10(double[] dataIn)
- {
- double[] dataOut = new double[dataIn.Length];
- for (int i = 0; i < dataOut.Length; i++)
- {
- dataOut[i] = dataIn[i] > 0 ? Math.Log10(dataIn[i]) : 0;
- }
-
- return dataOut;
- }
-
- public static (double[] xs, double[] ys) ConvertPolarCoordinates(double[] rs, double[] thetas)
- {
- double[] xs = new double[rs.Length];
- double[] ys = new double[rs.Length];
-
- for (int i = 0; i < rs.Length; i++)
- {
- double x = rs[i];
- double y = thetas[i];
-
- xs[i] = x * Math.Cos(y);
- ys[i] = x * Math.Sin(y);
- }
-
- return (xs, ys);
- }
-
- public static void LaunchBrowser(string url = "https://ScottPlot.NET")
- {
- // A cross-platform .NET-Core-safe function to launch a URL in the browser
- Debug.WriteLine($"Launching URL: {url}");
- try
- {
- Process.Start(url);
- }
- catch
- {
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- Process.Start("xdg-open", url);
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
- {
- Process.Start("open", url);
- }
- else
- {
- throw;
- }
- }
- }
-
- public static double[] Round(double[] data, int decimals = 2)
- {
- double[] rounded = new double[data.Length];
- for (int i = 0; i < data.Length; i++)
- {
- rounded[i] = Math.Round(data[i], decimals);
- }
-
- return rounded;
- }
-
- ///
- /// return a copy of the given array padded with the given value at both sidees
- ///
- public static double[] Pad(double[] values, int padCount = 1, double padWithLeft = 0, double padWithRight = 0, bool cloneEdges = false)
- {
- double[] padded = new double[values.Length + padCount * 2];
-
- Array.Copy(values, 0, padded, padCount, values.Length);
-
- if (cloneEdges)
- {
- padWithLeft = values[0];
- padWithRight = values[values.Length - 1];
- }
-
- for (int i = 0; i < padCount; i++)
- {
- padded[i] = padWithLeft;
- padded[padded.Length - 1 - i] = padWithRight;
- }
-
- return padded;
- }
-
- public static string GetOsName(bool details = true)
- {
- string name = "Unknown";
-
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- name = "Linux";
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
- {
- name = "MacOS";
- }
- else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- name = "Windows";
- }
-
- if (details)
- {
- name += $" ({Environment.OSVersion})";
- }
-
- return name;
- }
-
- public static int SimpleHash(double[] input)
- {
- byte[] bytes = input.SelectMany(n => { return BitConverter.GetBytes(n); }).ToArray();
- int hash = 0;
- foreach (byte b in bytes)
- {
- hash = (hash * 31) ^ b;
- }
-
- return hash;
- }
-
- public static double[,] XYToIntensitiesGaussian(int[] xs, int[] ys, int width, int height, int sigma)
- {
- static double NormPDF(double x, double mu, double sigma) =>
- (1 / (sigma * Math.Sqrt(2 * Math.PI))) * Math.Exp(-0.5 * (x - mu / sigma) * (x - mu / sigma));
-
- double[,] output = new double[height, width];
- double[,] intermediate = new double[height, width]; // Each cell has the number of hits. This is the array before any blurring
-
- int radius = 2; // 2 Standard deviations is ~0.95, i.e. close enough
- for (int i = 0; i < xs.Length; i++)
- {
- if (xs[i] >= 0 && xs[i] < width && ys[i] >= 0 && ys[i] < height)
- {
- intermediate[ys[i], xs[i]] += 1;
- }
- }
-
- double[] kernel = new double[2 * radius * sigma + 1];
- for (int i = 0; i < kernel.Length; i++)
- {
- kernel[i] = NormPDF(i - kernel.Length / 2, 0, sigma);
- }
-
- for (int i = 0; i < height; i++) // Blurs up and down, i.e. a vertical kernel. Gaussian Blurs are special in that it can be decomposed this way, saving time
- {
- for (int j = 0; j < width; j++)
- {
- double sum = 0;
- double kernelSum = 0; // The kernelSum can be precomputed, but this gives incorrect output at the edges of the image
- for (int k = -radius * sigma; k <= radius * sigma; k++)
- {
- if (i + k >= 0 && i + k < height)
- {
- sum += intermediate[i + k, j] * kernel[k + kernel.Length / 2];
- kernelSum += kernel[k + kernel.Length / 2];
- }
- }
-
- output[i, j] = sum / kernelSum;
- }
- }
-
- for (int i = 0; i < height; i++) // Blurs left and right, i.e. a horizontal kernel
- {
- for (int j = 0; j < width; j++)
- {
- double sum = 0;
- double kernelSum = 0;
- for (int k = -radius * sigma; k <= radius * sigma; k++)
- {
- if (j + k >= 0 && j + k < width)
- {
- sum += output[i, j + k] * kernel[k + kernel.Length / 2];
- kernelSum += kernel[k + kernel.Length / 2];
- }
- }
-
- output[i, j] = sum / kernelSum;
- }
- }
-
- return output;
- }
-
- public static double[,] XYToIntensitiesDensity(int[] xs, int[] ys, int width, int height, int sampleWidth)
- {
- double[,] output = new double[height, width];
- (int x, int y)[] points = xs.Zip(ys, (x, y) => (x, y)).ToArray();
- points = points.OrderBy(p => p.x).ToArray();
- int[] xs_sorted = points.Select(p => p.x).ToArray();
-
- for (int i = 0; i < height - height % sampleWidth; i += sampleWidth)
- {
- for (int j = 0; j < width - width % sampleWidth; j += sampleWidth)
- {
- int count = 0;
- for (int k = 0; k < sampleWidth; k++)
- {
- for (int l = 0; l < sampleWidth; l++)
- {
- int index = Array.BinarySearch(xs_sorted, j + l);
- if (index > 0)
- {
- for (int m = index; m < xs.Length; m++)
- { //Multiple points w/ same x value
- if (points[m].x == j + l && points[m].y == i + k)
- {
- count++; // Increments number of hits in sampleWidth sized square
- }
- }
- }
- }
- }
-
- for (int k = 0; k < sampleWidth; k++)
- {
- for (int l = 0; l < sampleWidth; l++)
- {
- output[i + k, j + l] = count;
- }
- }
- }
- }
-
- return output;
- }
-
- public static double[,] XYToIntensities(IntensityMode mode, int[] xs, int[] ys, int width, int height, int sampleWidth)
- {
- return mode switch
- {
- IntensityMode.Gaussian => XYToIntensitiesGaussian(xs, ys, width, height, sampleWidth),
- IntensityMode.Density => XYToIntensitiesDensity(xs, ys, width, height, sampleWidth),
- _ => throw new NotImplementedException($"{nameof(mode)} is not a supported {nameof(IntensityMode)}"),
- };
- }
-
- public static string ToDifferentBase(double number, int radix = 16, int decimalPlaces = 3, int padInteger = 0, bool dropTrailingZeroes = true, char decimalSymbol = '.')
- {
- if (number < 0)
- {
- return
- $"-{ToDifferentBase(Math.Abs(number), radix, decimalPlaces, padInteger, dropTrailingZeroes, decimalSymbol)}";
- }
- else if (number == 0)
- {
- return "0";
- }
-
- char[] symbols = "0123456789ABCDEF".ToCharArray();
- if (radix > symbols.Length || radix <= 1)
- {
- throw new ArgumentOutOfRangeException(nameof(radix));
- }
-
- double epsilon = Math.Pow(radix, -decimalPlaces);
-
- if (radix > symbols.Length)
- {
- throw new ArgumentOutOfRangeException(nameof(radix));
- }
-
- int integerLength = (int)Math.Ceiling(Math.Log(number, radix));
- int decimalLength = number % 1 > epsilon ? decimalPlaces : 0;
- double decimalPart = number % 1;
- string output = "";
-
- for (int i = 0; i < integerLength; i++)
- {
- if (number == radix && padInteger == 0)
- {
- output = $"10{output}";
- }
- else
- {
- output = symbols[(int)(number % radix)] + output;
- }
- number /= radix;
- }
-
- while (output.Length < padInteger)
- {
- output = $"0{output}";
- }
-
- if (decimalLength != 0)
- {
- if (output == "")
- {
- output += "0";
- }
- output += decimalSymbol;
- output += ToDifferentBase(Math.Round(decimalPart * Math.Pow(radix, decimalPlaces)), radix, decimalPlaces, decimalPlaces, dropTrailingZeroes, decimalSymbol);
- if (dropTrailingZeroes)
- {
- while (output.Last() == '0')
- {
- output = output.Substring(0, output.Length - 1);
- }
-
- if (output.Last() == decimalSymbol)
- {
- output = output.Substring(0, output.Length - 1);
- }
- }
- }
-
- return output;
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Validate.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Validate.cs
deleted file mode 100644
index 55b3cf6fa..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Classes/Validate.cs
+++ /dev/null
@@ -1,287 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public static class Validate
- {
- private static string ValidLabel(string label) =>
- string.IsNullOrWhiteSpace(label) ? "[unknown variable]" : label;
-
- ///
- /// Throw an exception if the value is NaN or infinity
- ///
- public static void AssertIsReal(string label, double value)
- {
- label = ValidLabel(label);
-
- if (double.IsNaN(value))
- {
- throw new InvalidOperationException($"{label} is NaN");
- }
-
- if (double.IsInfinity(value))
- {
- throw new InvalidOperationException($"{label} is infinity");
- }
- }
-
- ///
- /// Throw an exception if the array is null or contains NaN or infinity
- ///
- public static void AssertAllReal(string label, double[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- for (int i = 0; i < values.Length; i++)
- {
- if (double.IsNaN(values[i]) || double.IsInfinity(values[i]))
- {
- throw new InvalidOperationException($"{label} index {i} is invalid ({values[i]})");
- }
- }
- }
-
- ///
- /// Throw an exception if the array is null or contains NaN or infinity
- ///
- public static void AssertAllReal(string label, T[] values)
- {
- if (typeof(T) == typeof(double))
- {
- AssertAllReal(label, (double[])(object)values);
- }
- else if (typeof(T) == typeof(float))
- {
- AssertAllReal(label, (float[])(object)values);
- }
- else
- {
- throw new InvalidOperationException("values must be float[] or double[]");
- }
- }
-
- ///
- /// Throw an exception if one elemnt is equal to or less than the previous element
- ///
- public static void AssertAscending(string label, double[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- for (int i = 0; i < values.Length - 1; i++)
- {
- if (values[i] >= values[i + 1])
- {
- throw new InvalidOperationException($"{label} must be ascending values (index {i} >= {i + 1}");
- }
- }
- }
-
- ///
- /// Throw an exception if one elemnt is equal to or less than the previous element
- ///
- public static void AssertAscending(string label, T[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- for (int i = 0; i < values.Length - 1; i++)
- {
- if (Convert.ToDouble(values[i]) >= Convert.ToDouble(values[i + 1]))
- {
- throw new InvalidOperationException($"{label} must be ascending values (index {i} >= {i + 1}");
- }
- }
- }
-
- ///
- /// Throw an exception if the array does not contain at least one element
- ///
- public static void AssertHasElements(string label, double[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- if (values.Length == 0)
- {
- throw new InvalidOperationException($"{label} must contain at least one element");
- }
- }
-
- ///
- /// Throw an exception if the array does not contain at least one element
- ///
- public static void AssertHasElements(string label, T[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- if (values.Length == 0)
- {
- throw new InvalidOperationException($"{label} must contain at least one element");
- }
- }
-
- ///
- /// Throw an exception if the array does not contain at least one element
- ///
- public static void AssertHasElements(string label, Color[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- if (values.Length == 0)
- {
- throw new InvalidOperationException($"{label} must contain at least one element");
- }
- }
-
- ///
- /// Throw an exception if the array does not contain at least one element
- ///
- public static void AssertHasElements(string label, string[] values)
- {
- label = ValidLabel(label);
-
- if (values is null)
- {
- throw new InvalidOperationException($"{label} must not be null");
- }
-
- if (values.Length == 0)
- {
- throw new InvalidOperationException($"{label} must contain at least one element");
- }
- }
-
- ///
- /// Throw an exception if non-null arrays have different lengths
- ///
- public static void AssertEqualLength(string label,
- double[] a, double[] b = null, double[] c = null,
- double[] d = null, double[] e = null, double[] f = null)
- {
- label = ValidLabel(label);
-
- if (!IsEqualLength(a, b, c, d, e, f))
- {
- throw new InvalidOperationException($"{label} must all have same length");
- }
- }
-
- ///
- /// Throw an exception if non-null arrays have different lengths
- ///
- public static void AssertEqualLength(string label, T1[] a, T2[] b)
- {
- label = ValidLabel(label);
-
- if (a.Length != b.Length)
- {
- throw new InvalidOperationException($"{label} must all have same length");
- }
- }
-
- ///
- /// Returns true if all non-null arguments have equal length
- ///
- public static bool IsEqualLength(double[] a, double[] b = null, double[] c = null,
- double[] d = null, double[] e = null, double[] f = null)
- {
- if (a is null)
- {
- throw new InvalidOperationException($"first array must not be null");
- }
-
- if (b is object && b.Length != a.Length)
- {
- return false;
- }
-
- if (c is object && c.Length != a.Length)
- {
- return false;
- }
-
- if (d is object && d.Length != a.Length)
- {
- return false;
- }
-
- if (e is object && e.Length != a.Length)
- {
- return false;
- }
-
- if (f is object && f.Length != a.Length)
- {
- return false;
- }
-
- return true;
- }
-
- ///
- /// Throws an exception if the string is null, empty, or only contains whitespace
- ///
- public static void AssertHasText(string label, string value)
- {
- label = ValidLabel(label);
-
- if (string.IsNullOrWhiteSpace(value))
- {
- throw new InvalidOperationException($"{label} must contain text");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Backend.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Backend.cs
deleted file mode 100644
index 969f001f2..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Backend.cs
+++ /dev/null
@@ -1,796 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-/* This file describes the ScottPlot back-end control module.
- *
- * Goals for this module:
- * - Interact with the Plot object so controls don't have to.
- * - Wrap/abstract mouse interaction logic so controls don't have to implement it.
- * - Use events to tell controls when to update the image or change the mouse cursor.
- * - Render calls are non-blocking so GUI/controls aren't slowed by render requests.
- * - Delayed high quality renders are possible after mouse interaction stops.
- *
- * Default Controls:
- *
- * - Left-click-drag: pan
- * - Right-click-drag: zoom
- * - Middle-click-drag: zoom region
- * - ALT+Left-click-drag: zoom region
- * - Scroll wheel: zoom to cursor
- *
- * - Right-click: show menu
- * - Middle-click: auto-axis
- * - Double-click: show benchmark
- *
- * - CTRL+Left-click-drag to pan horizontally
- * - SHIFT+Left-click-drag to pan vertically
- * - CTRL+Right-click-drag to zoom horizontally
- * - SHIFT+Right-click-drag to zoom vertically
- * - CTRL+SHIFT+Right-click-drag to zoom evenly
- * - SHIFT+click-drag draggables for fixed-size dragging
- *
- * Configurable options:
- *
- * - left-click-drag pan
- * - right-click-drag zoom
- * - lock vertical or horizontal axis
- * - middle-click auto-axis margin
- * - double-click benchmark toggle
- * - scrollwheel zoom
- * - quality (anti-aliasing on/off) for various actions
- * - delayed high quality render after low-quality interactive renders
- *
- */
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// The control back end module contains all the logic required to manage a mouse-interactive
- /// plot to display in a user control. However, this module contains no control-specific dependencies.
- /// User controls can instantiate this object, pass mouse and resize event information in, and have
- /// renders triggered using events.
- ///
- public class ControlBackEnd
- {
- ///
- /// This event is invoked when an existing Bitmap is redrawn.
- /// e.g., after rendering following a click-drag-pan mouse event.
- ///
- public event EventHandler BitmapUpdated = delegate { };
-
- ///
- /// This event is invoked after a new Bitmap was created.
- /// e.g., after resizing the control, requiring a new Bitmap of a different size
- ///
- public event EventHandler BitmapChanged = delegate { };
-
- ///
- /// This event is invoked when the cursor is supposed to change.
- /// Cursor changes may be required when hovering over draggable plottable objects.
- ///
- public event EventHandler CursorChanged = delegate { };
-
- ///
- /// This event is invoked when the axis limts change.
- /// This is typically the result of a pan or zoom operation.
- ///
- public event EventHandler AxesChanged = delegate { };
-
- ///
- /// This event is invoked when the user right-clicks the control with the mouse.
- /// It is typically used to deploy a context menu.
- ///
- public event EventHandler RightClicked = delegate { };
-
- ///
- /// This event is invoked after the mouse moves while dragging a draggable plottable.
- ///
- public event EventHandler PlottableDragged = delegate { };
-
- ///
- /// This event is invoked after the mouse moves while dragging a draggable plottable.
- ///
- public event EventHandler PlottableDropped = delegate { };
-
- ///
- /// The control configuration object stores advanced customization and behavior settings
- /// for mouse-interactive plots.
- ///
- public readonly Configuration Configuration = new();
-
- ///
- /// True if the middle mouse button is pressed
- ///
- private bool IsMiddleDown;
-
- ///
- /// True if the right mouse button is pressed
- ///
- private bool IsRightDown;
-
- ///
- /// True if the left mouse button is pressed
- ///
- private bool IsLeftDown;
-
- ///
- /// Current position of the mouse in pixels
- ///
- private float MouseLocationX;
-
- ///
- /// Current position of the mouse in pixels
- ///
- private float MouseLocationY;
-
- ///
- /// Holds the plottable actively being dragged with the mouse.
- /// Contains null if no plottable is being dragged.
- ///
- private IDraggable PlottableBeingDragged = null;
-
- ///
- /// True when a zoom rectangle is being drawn and the mouse button is still down
- ///
- private bool IsZoomingRectangle;
-
- ///
- /// True if a zoom rectangle is being actively drawn using ALT + left click
- ///
- private bool IsZoomingWithAlt;
-
- ///
- /// The plot underlying this control.
- ///
- public Plot Plot { get; private set; }
-
- ///
- /// The settings object underlying the plot.
- ///
- private Settings Settings;
-
- ///
- /// The latest render is stored in this bitmap.
- /// New renders may be performed on this existing bitmap.
- /// When a new bitmap is created, this bitmap will be stored in OldBitmaps and eventually disposed.
- ///
- private Bitmap Bmp;
-
- ///
- /// Bitmaps that are created are stored here so they can be kept track of and
- /// disposed properly when new bitmaps are created.
- ///
- private readonly Queue OldBitmaps = new();
-
- ///
- /// Store last render limits so new renders can know whether the axis limits
- /// have changed and decide whether to invoke the AxesChanged event or not.
- ///
- private AxisLimits LimitsOnLastRender = new();
-
- ///
- /// Unique identifier of the plottables list that was last rendered.
- /// This value is used to determine if the plottables list was modified (requiring a re-render).
- ///
- private int PlottablesIdentifierAtLastRender = 0;
-
- ///
- /// This is set to True while the render loop is running.
- /// This prevents multiple renders from occurring at the same time.
- ///
- private bool currentlyRendering = false;
-
- ///
- /// The style of cursor the control should display
- ///
- public Cursor Cursor { get; private set; } = Cursor.Arrow;
-
- ///
- /// The events processor invokes renders in response to custom events
- ///
- private readonly EventsProcessor EventsProcessor;
-
- ///
- /// The event factor creates event objects to be handled by the event processor
- ///
- private UIEventFactory EventFactory;
-
- ///
- /// Number of times the current bitmap has been rendered on.
- ///
- private int BitmapRenderCount = 0;
-
- ///
- /// Total number of renders performed.
- /// Note that at least one render occurs before the first request to measure the layout and calculate data area.
- /// This means the first render increments this number twice.
- ///
- public int RenderCount { get; private set; } = 0;
-
- ///
- /// Tracks the total distance the mouse was click-dragged (rectangular pixel units)
- ///
- private float MouseDownTravelDistance;
-
- ///
- /// True if the mouse was dragged (with a button down) long enough to quality as a drag instead of a click
- ///
- private bool MouseDownDragged => MouseDownTravelDistance > Configuration.IgnoreMouseDragDistance;
-
-
- ///
- /// Indicates whether Render() has been explicitly called by the user.
- /// Renders requested by resize events do not count.
- ///
- public bool WasManuallyRendered;
-
- ///
- /// Variable name for the user control tied to this backend.
- ///
- public readonly string ControlName;
-
- ///
- /// Create a back-end for a user control
- ///
- /// initial bitmap size (pixels)
- /// initial bitmap size (pixels)
- /// variable name of the user control using this backend
- public ControlBackEnd(float width, float height, string name = "UnamedControl")
- {
- EventFactory = new UIEventFactory(Configuration, Settings, Plot);
- EventsProcessor = new EventsProcessor(
- renderAction: (lowQuality) => Render(lowQuality),
- renderDelay: (int)Configuration.ScrollWheelZoomHighQualityDelay);
- ControlName = name;
- Reset(width, height);
- }
-
- ///
- /// The host control may instantiate the back-end and start sending it events
- /// before it has fully connected its event handlers. To prevent processing events before
- /// the host is control is ready, the processor will be stopped until is called by the host control.
- ///
- public void StartProcessingEvents() => EventsProcessor.Enable = true;
-
- ///
- /// Reset the back-end by creating an entirely new plot of the given dimensions
- ///
- public void Reset(float width, float height) => Reset(width, height, new Plot());
-
- ///
- /// Reset the back-end by replacing the existing plot with one that has already been created
- ///
- public void Reset(float width, float height, Plot newPlot)
- {
- Plot = newPlot;
- Settings = Plot.GetSettings(false);
- EventFactory = new UIEventFactory(Configuration, Settings, Plot);
- WasManuallyRendered = false;
- Resize(width, height, useDelayedRendering: false);
- }
-
- ///
- /// Return a copy of the list of draggable plottables
- ///
- private IDraggable[] GetDraggables() =>
- Settings.Plottables.Where(x => x is IDraggable).Select(x => (IDraggable)x).ToArray();
-
- ///
- /// Return the draggable plottable under the mouse cursor (or null if there isn't one)
- ///
- private IDraggable GetDraggableUnderMouse(double pixelX, double pixelY, int snapDistancePixels = 5)
- {
- double snapWidth = Settings.XAxis.Dims.UnitsPerPx * snapDistancePixels;
- double snapHeight = Settings.YAxis.Dims.UnitsPerPx * snapDistancePixels;
-
- foreach (IDraggable draggable in GetDraggables())
- {
- if (draggable.IsUnderMouse(Plot.GetCoordinateX((float)pixelX), Plot.GetCoordinateY((float)pixelY), snapWidth, snapHeight))
- {
- if (draggable.DragEnabled)
- {
- return draggable;
- }
- }
- }
-
- return null;
- }
-
- ///
- /// Return a multi-line string describing the default mouse interactions.
- /// This can be useful for displaying a help message in a user control.
- ///
- public static string GetHelpMessage()
- {
- var sb = new StringBuilder();
- sb.AppendLine("Left-click-drag: pan");
- sb.AppendLine("Right-click-drag: zoom");
- sb.AppendLine("Middle-click-drag: zoom region");
- sb.AppendLine("ALT+Left-click-drag: zoom region");
- sb.AppendLine("Scroll wheel: zoom to cursor");
- sb.AppendLine("");
- sb.AppendLine("Right-click: show menu");
- sb.AppendLine("Middle-click: auto-axis");
- sb.AppendLine("Double-click: show benchmark");
- sb.AppendLine("");
- sb.AppendLine("CTRL+Left-click-drag to pan horizontally");
- sb.AppendLine("SHIFT+Left-click-drag to pan vertically");
- sb.AppendLine("CTRL+Right-click-drag to zoom horizontally");
- sb.AppendLine("SHIFT+Right-click-drag to zoom vertically");
- sb.AppendLine("CTRL+SHIFT+Right-click-drag to zoom evenly");
- sb.AppendLine("SHIFT+click-drag draggables for fixed-size dragging");
- return sb.ToString();
- }
-
- ///
- /// Return the most recently rendered Bitmap.
- /// This method also disposes old Bitmaps if they exist.
- ///
- public Bitmap GetLatestBitmap()
- {
- while (OldBitmaps.Count > 3)
- OldBitmaps.Dequeue()?.Dispose();
- return Bmp;
- }
-
- ///
- /// Render onto the existing Bitmap.
- /// Quality describes whether anti-aliasing will be used.
- ///
- public void Render(bool lowQuality = false, bool skipIfCurrentlyRendering = false)
- {
- if (Bmp is null)
- {
- return;
- }
-
- if (currentlyRendering && skipIfCurrentlyRendering)
- {
- return;
- }
-
- currentlyRendering = true;
-
- if (Configuration.Quality == QualityMode.High)
- {
- lowQuality = false;
- }
- else if (Configuration.Quality == QualityMode.Low)
- {
- lowQuality = true;
- }
-
- Plot.Render(Bmp, lowQuality);
- BitmapRenderCount += 1;
- RenderCount += 1;
- PlottablesIdentifierAtLastRender = Settings.PlottablesIdentifier;
-
- if (WasManuallyRendered == false &&
- Settings.Plottables.Count > 0 &&
- Configuration.WarnIfRenderNotCalledManually &&
- Debugger.IsAttached)
- {
- string message =
- $"ScottPlot {Plot.Version} WARNING:\n{ControlName}.Refresh() must be called\nafter modifying the plot or its data.";
- Debug.WriteLine(message.Replace("\n", " "));
- AddErrorMessage(Bmp, message);
- }
-
- AxisLimits newLimits = Plot.GetAxisLimits();
- if (!newLimits.Equals(LimitsOnLastRender) && Configuration.AxesChangedEventEnabled)
- {
- AxesChanged(null, EventArgs.Empty);
- }
-
- LimitsOnLastRender = newLimits;
-
- if (BitmapRenderCount == 1)
- {
- // a new bitmap was rendered on for the first time
- BitmapChanged(this, EventArgs.Empty);
- }
- else
- {
- // an existing bitmap was re-rendered onto
- BitmapUpdated(null, EventArgs.Empty);
- }
-
- currentlyRendering = false;
- }
-
- ///
- /// Add error text on top of the rendered plot
- ///
- private static void AddErrorMessage(Bitmap bmp, string message)
- {
- Color foreColor = Color.Red;
- Color backColor = Color.Yellow;
- Color shadowColor = Color.FromArgb(50, Color.Black);
- int padding = 10;
- int shadowOffset = 7;
-
- using var gfx = Graphics.FromImage(bmp);
- gfx.TextRenderingHint = TextRenderingHint.AntiAlias;
-
- using StringFormat sf = GDI.StringFormat(HorizontalAlignment.Center, VerticalAlignment.Middle);
- using System.Drawing.Font font = new(FontFamily.GenericSansSerif, 16, FontStyle.Bold);
- SizeF messageSize = gfx.MeasureString(message, font);
- RectangleF messageRect = new(
- x: bmp.Width / 2 - messageSize.Width / 2 - padding,
- y: bmp.Height / 2 - messageSize.Height / 2 - padding,
- width: messageSize.Width + padding * 2,
- height: messageSize.Height + padding * 2);
- RectangleF shadowRect = new(
- x: messageRect.X + shadowOffset,
- y: messageRect.Y + shadowOffset,
- width: messageRect.Width,
- height: messageRect.Height);
-
- using SolidBrush foreBrush = new(foreColor);
- using Pen forePen = new(foreColor, width: 5);
- using SolidBrush backBrush = new(backColor);
- using SolidBrush shadowBrush = new(shadowColor);
-
- if (messageSize.Width > bmp.Width || messageSize.Height > bmp.Height)
- {
- RectangleF plotRect = new(0, 0, bmp.Width, bmp.Height);
- sf.Alignment = StringAlignment.Near;
- sf.LineAlignment = StringAlignment.Near;
- message = message.Replace("\n", " ");
-
- using System.Drawing.Font fontSmall = new(FontFamily.GenericSansSerif, 12, FontStyle.Bold);
- gfx.Clear(backColor);
- gfx.DrawString(message, fontSmall, foreBrush, plotRect, sf);
- }
- else
- {
- gfx.FillRectangle(shadowBrush, shadowRect);
- gfx.FillRectangle(backBrush, messageRect);
- gfx.DrawRectangle(forePen, Rectangle.Round(messageRect));
- gfx.DrawString(message, font, foreBrush, messageRect, sf);
- }
- }
-
- ///
- /// Request a render using the render queue.
- /// This method does not block the calling thread.
- ///
- public void RenderRequest(RenderType renderType)
- {
- switch (renderType)
- {
- case RenderType.LowQuality:
- ProcessEvent(EventFactory.CreateManualLowQualityRender());
- return;
-
- case RenderType.HighQuality:
- ProcessEvent(EventFactory.CreateManualHighQualityRender());
- return;
-
- case RenderType.HighQualityDelayed:
- ProcessEvent(EventFactory.CreateManualDelayedHighQualityRender());
- return;
-
- case RenderType.LowQualityThenHighQuality:
- ProcessEvent(EventFactory.CreateManualLowQualityRender());
- ProcessEvent(EventFactory.CreateManualHighQualityRender());
- return;
-
- case RenderType.LowQualityThenHighQualityDelayed:
- ProcessEvent(EventFactory.CreateManualDelayedHighQualityRender());
- return;
-
- case RenderType.ProcessMouseEventsOnly:
- return;
-
- default:
- throw new InvalidOperationException($"unsupported render type {renderType}");
- }
- }
-
- ///
- /// Check if the number of plottibles has changed and if so request a render.
- /// This is typically called by a continuously running timer in the user control.
- ///
- [Obsolete("Automatic render timer has been removed. Call Render() manually.", true)]
- public void RenderIfPlottableListChanged()
- {
- if (Configuration.RenderIfPlottableListChanges == false)
- {
- return;
- }
-
- if (Bmp is null)
- {
- return;
- }
-
- if (Settings.PlottablesIdentifier != PlottablesIdentifierAtLastRender)
- {
- Render();
- }
- }
-
- ///
- /// Resize the control (creates a new Bitmap and requests a render)
- ///
- /// new width (pixels)
- /// new height (pixels)
- /// Render using the queue (best for mouse events), otherwise render immediately.
- public void Resize(float width, float height, bool useDelayedRendering)
- {
- // don't render if the requested size cannot produce a valid bitmap
- if (width < 1 || height < 1)
- {
- return;
- }
-
- // don't render if the request is so early that the processor hasn't started
- if (EventsProcessor is null)
- {
- return;
- }
-
- // Disposing a Bitmap the GUI is displaying will cause an exception.
- // Keep track of old bitmaps so they can be disposed of later.
- OldBitmaps.Enqueue(Bmp);
- Bmp = new Bitmap((int)width, (int)height);
- BitmapRenderCount = 0;
-
- if (useDelayedRendering)
- {
- RenderRequest(RenderType.HighQualityDelayed);
- }
- else
- {
- Render();
- }
- }
-
- ///
- /// Indicate a mouse button has just been pressed
- ///
- public void MouseDown(InputState input)
- {
- if (!Settings.AllAxesHaveBeenSet)
- {
- Plot.SetAxisLimits(Plot.GetAxisLimits());
- }
-
- IsMiddleDown = input.MiddleWasJustPressed;
- IsRightDown = input.RightWasJustPressed;
- IsLeftDown = input.LeftWasJustPressed;
- PlottableBeingDragged = GetDraggableUnderMouse(input.X, input.Y);
- Settings.MouseDown(input.X, input.Y);
- MouseDownTravelDistance = 0;
- }
-
- ///
- /// Return the mouse position on the plot (in coordinate space) for the latest X and Y coordinates
- ///
- public (double x, double y) GetMouseCoordinates()
- {
- (double x, double y) = Plot.GetCoordinate(MouseLocationX, MouseLocationY);
- return (double.IsNaN(x) ? 0 : x, double.IsNaN(y) ? 0 : y);
- }
-
- ///
- /// Return the mouse position (in pixel space) for the last observed mouse position
- ///
- public (float x, float y) GetMousePixel() => (MouseLocationX, MouseLocationY);
-
- ///
- /// Indicate the mouse has moved to a new position
- ///
- public void MouseMove(InputState input)
- {
- bool altWasLifted = IsZoomingWithAlt && !input.AltDown;
- bool middleButtonLifted = IsZoomingRectangle && !input.MiddleWasJustPressed;
- if (IsZoomingRectangle && (altWasLifted || middleButtonLifted))
- {
- Settings.ZoomRectangle.Clear();
- }
-
- IsZoomingWithAlt = IsLeftDown && input.AltDown;
- bool isMiddleClickDragZooming = IsMiddleDown && !middleButtonLifted;
- bool isZooming = IsZoomingWithAlt || isMiddleClickDragZooming;
- IsZoomingRectangle = isZooming && Configuration.MiddleClickDragZoom && MouseDownDragged;
-
- MouseDownTravelDistance += Math.Abs(input.X - MouseLocationX);
- MouseDownTravelDistance += Math.Abs(input.Y - MouseLocationY);
-
- MouseLocationX = input.X;
- MouseLocationY = input.Y;
-
- IUIEvent mouseMoveEvent = null;
- if (PlottableBeingDragged != null)
- {
- mouseMoveEvent = EventFactory.CreatePlottableDrag(input.X, input.Y, input.ShiftDown, PlottableBeingDragged);
- }
- else if (IsLeftDown && !input.AltDown && Configuration.LeftClickDragPan)
- {
- mouseMoveEvent = EventFactory.CreateMousePan(input);
- }
- else if (IsRightDown && Configuration.RightClickDragZoom)
- {
- mouseMoveEvent = EventFactory.CreateMouseZoom(input);
- }
- else if (IsZoomingRectangle)
- {
- mouseMoveEvent = EventFactory.CreateMouseMovedToZoomRectangle(input.X, input.Y);
- }
-
- if (mouseMoveEvent != null)
- {
- ProcessEvent(mouseMoveEvent);
- }
- else
- {
- MouseMovedWithoutInteraction(input);
- }
- }
-
- ///
- /// Process an event using the render queue (non-blocking) or traditional rendering (blocking)
- /// based on the UseRenderQueue flag in the Configuration module.
- ///
- private void ProcessEvent(IUIEvent uiEvent)
- {
- if (Configuration.UseRenderQueue)
- {
- // TODO: refactor to better support async
- // TODO: document that draggable events aren't supported by the render queue
- _ = EventsProcessor.ProcessAsync(uiEvent);
- }
- else
- {
- //Console.WriteLine($"[{DateTime.Now:ss.ffff}] PROCESSING: {uiEvent}");
- uiEvent.ProcessEvent();
-
- if (uiEvent.RenderType == RenderType.ProcessMouseEventsOnly)
- {
- return;
- }
-
- bool lowQuality =
- uiEvent is MouseMovedToZoomRectangle ||
- uiEvent is MousePanEvent ||
- uiEvent is MouseZoomEvent ||
- uiEvent is PlottableDragEvent ||
- uiEvent is RenderLowQuality;
-
- bool allowSkip = lowQuality && Configuration.AllowDroppedFramesWhileDragging;
-
- Render(lowQuality: lowQuality, skipIfCurrentlyRendering: allowSkip);
-
- if (uiEvent is PlottableDragEvent)
- {
- PlottableDragged(PlottableBeingDragged, EventArgs.Empty);
- }
- }
- }
-
- ///
- /// Call this when the mouse moves without any buttons being down.
- /// It will only update the cursor based on what's beneath the cursor.
- ///
- private void MouseMovedWithoutInteraction(InputState input)
- {
- UpdateCursor(input);
- }
-
- ///
- /// Set the cursor based on whether a draggable is engaged or not,
- /// then invoke the CursorChanged event.
- ///
- private void UpdateCursor(InputState input)
- {
- var draggableUnderCursor = GetDraggableUnderMouse(input.X, input.Y);
- Cursor = (draggableUnderCursor is null) ? Cursor.Arrow : draggableUnderCursor.DragCursor;
- CursorChanged(null, EventArgs.Empty);
- }
-
- ///
- /// Indicate a mouse button has been released.
- /// This may initiate a render (and/or a delayed render).
- ///
- ///
- public void MouseUp(InputState input)
- {
- var droppedPlottable = PlottableBeingDragged;
-
- IUIEvent mouseEvent;
- if (IsZoomingRectangle && MouseDownDragged && Configuration.MiddleClickDragZoom)
- {
- mouseEvent = EventFactory.CreateApplyZoomRectangleEvent(input.X, input.Y);
- }
- else if (IsMiddleDown && Configuration.MiddleClickAutoAxis && MouseDownDragged == false)
- {
- mouseEvent = EventFactory.CreateMouseAutoAxis();
- }
- else
- {
- mouseEvent = EventFactory.CreateMouseUpClearRender();
- }
-
- ProcessEvent(mouseEvent);
-
- if (IsRightDown && MouseDownDragged == false)
- {
- RightClicked(null, EventArgs.Empty);
- }
-
- IsMiddleDown = false;
- IsRightDown = false;
- IsLeftDown = false;
-
- UpdateCursor(input);
-
- if (droppedPlottable != null)
- {
- PlottableDropped(droppedPlottable, EventArgs.Empty);
- }
-
- PlottableBeingDragged = null;
- if (droppedPlottable != null)
- {
- ProcessEvent(EventFactory.CreateMouseUpClearRender());
- }
- }
-
- ///
- /// Indicate the left mouse button has been double-clicked.
- /// The default action of a double-click is to toggle the benchmark.
- ///
- public void DoubleClick()
- {
- if (Configuration.DoubleClickBenchmark)
- {
- IUIEvent mouseEvent = EventFactory.CreateBenchmarkToggle();
- ProcessEvent(mouseEvent);
- }
- }
-
- ///
- /// Apply a scroll wheel action, perform a low quality render, and later re-render in high quality.
- ///
- public void MouseWheel(InputState input)
- {
- if (!Settings.AllAxesHaveBeenSet)
- {
- Plot.SetAxisLimits(Plot.GetAxisLimits());
- }
-
- if (Configuration.ScrollWheelZoom)
- {
- IUIEvent mouseEvent = EventFactory.CreateMouseScroll(input.X, input.Y, input.WheelScrolledUp);
- ProcessEvent(mouseEvent);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Configuration.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Configuration.cs
deleted file mode 100644
index 073cc906b..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/Configuration.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public class Configuration
- {
- ///
- /// Control whether panning is enabled
- ///
- public bool Pan { get => LeftClickDragPan; set => LeftClickDragPan = value; }
-
- ///
- /// Control whether zooming is enabled (via left-click-drag, middle-click-drag, and scrollwheel)
- ///
- public bool Zoom
- {
- get => RightClickDragZoom;
- set => (RightClickDragZoom, MiddleClickDragZoom, ScrollWheelZoom) = (value, value, value);
- }
-
- ///
- /// Manual override to set anti-aliasing (high quality) behavior for all renders.
- /// Refer to the QualityConfiguration field for more control over quality in response to specific interactions.
- ///
- public QualityMode Quality = QualityMode.LowWhileDragging;
-
- ///
- /// This module customizes anti-aliasing (high quality) behavior in response to interactive events.
- ///
- public readonly QualityConfiguration QualityConfiguration = new();
-
- ///
- /// Control whether left-click-drag panning is enabled
- ///
- public bool LeftClickDragPan = true;
-
- ///
- /// Control whether right-click-drag zooming is enabled
- ///
- public bool RightClickDragZoom = true;
-
- ///
- /// Control whether scroll wheel zooming is enabled
- ///
- public bool ScrollWheelZoom = true;
-
- private double _scrollWheelZoomFraction = 0.15;
-
- ///
- /// Fractional amount to zoom in or out when the mouse wheel is scrolled.
- /// Value must be between 0 and 1 (default is 0.15).
- ///
- public double ScrollWheelZoomFraction
- {
- get => _scrollWheelZoomFraction;
- set
- {
- if (value <= 0)
- {
- throw new ArgumentOutOfRangeException("ScrollWheelZoomFraction", "must be positive");
- }
-
- if (value >= 1)
- {
- throw new ArgumentOutOfRangeException("ScrollWheelZoomFraction", "must be less than 1");
- }
-
- _scrollWheelZoomFraction = value;
- }
- }
-
- ///
- /// Number of milliseconds after low quality scroll wheel zoom to re-render using high quality
- ///
- public double ScrollWheelZoomHighQualityDelay = 500;
-
- ///
- /// Control whether middle-click-drag zooming to a rectangle is enabled
- ///
- public bool MiddleClickDragZoom = true;
-
- ///
- /// Control whether middle-click can be used to reset axis limits
- ///
- public bool MiddleClickAutoAxis = true;
-
- ///
- /// Horizontal margin between the edge of the data and the edge of the plot when middle-click AutoAxis is called
- ///
- [Obsolete("Set default margins with Plot.Margins()", error: true)]
- public double MiddleClickAutoAxisMarginX = .05;
-
- ///
- /// Vertical margin between the edge of the data and the edge of the plot when middle-click AutoAxis is called
- ///
- [Obsolete("Set default margins with Plot.Margins()", error: true)]
- public double MiddleClickAutoAxisMarginY = .1;
-
- ///
- /// If enabled, double-clicking the plot will toggle benchmark visibility
- ///
- public bool DoubleClickBenchmark = true;
-
- ///
- /// If enabled, the vertical axis limits cannot be modified by mouse actions
- ///
- public bool LockVerticalAxis = false;
-
- ///
- /// If enabled, the horizontal axis limits cannot be modified by mouse actions
- ///
- public bool LockHorizontalAxis = false;
-
- ///
- /// If enabled the control will automatically re-render as plottables are added and removed
- ///
- [Obsolete("Automatic render timer has been removed. Call Render() manually.", true)]
- public bool RenderIfPlottableListChanges = true;
-
- ///
- /// Controls whether or not a render event will be triggered if a change in the axis limits is detected
- ///
- public bool AxesChangedEventEnabled = true;
-
- ///
- /// Permitting dropped frames makes interactive mouse manipulation feel faster
- ///
- public bool AllowDroppedFramesWhileDragging = true;
-
- ///
- /// If true, control interactions will be non-blocking and renders will occur after interactions.
- /// If false, control interactions will be blocking while renders are drawn.
- ///
- public bool UseRenderQueue = false;
-
- ///
- /// Distance (in pixels) the mouse can travel with a button held-down for it to be treated as a click (not a drag).
- /// A number slightly above zero allows middle-click to call AxisAuto() even if it was draged a few pixels by accident.
- ///
- public int IgnoreMouseDragDistance = 5;
-
- ///
- /// Now that the timer-based auto-render functionality has been removed users must manually call Render() at least once.
- /// This option controls whether a warning message is shown if the user did not call Render() manually.
- ///
- public bool WarnIfRenderNotCalledManually { get; set; } = true;
-
- private bool _dpiStretch = true;
-
- ///
- /// Control whether the plot should be stretched when DPI scaling is in use.
- /// Enabling stretching may result in blurry plots.
- /// Disabling stretching may results in plots with text that is too small.
- ///
- public bool DpiStretch
- {
- get => _dpiStretch;
- set
- {
- if (_dpiStretch != value)
- {
- _dpiStretch = value;
- ScaleChanged?.Invoke(null, null);
- }
- }
- }
-
- private float _dpiStretchRatio = GDI.GetScaleRatio();
-
- ///
- /// DPI scaling ratio to use for plot size and mouse tracking.
- /// Will return 1.0 if is enabled.
- ///
- public float DpiStretchRatio
- {
- get => DpiStretch ? 1.0f : _dpiStretchRatio;
- set
- {
- if (_dpiStretchRatio != value)
- {
- _dpiStretchRatio = value;
- ScaleChanged?.Invoke(null, null);
- }
- }
- }
-
- ///
- /// This event is invoked whenever the display scale is changed.
- ///
- public event EventHandler ScaleChanged = delegate { };
-
- ///
- /// Set the DpiStretchRatio to that of the active display.
- /// Call this if you suspect DPI scaling has changed.
- ///
- public void DpiMeasure() => DpiStretchRatio = GDI.GetScaleRatio();
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/DisplayScale.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/DisplayScale.cs
deleted file mode 100644
index 80a46bdde..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/DisplayScale.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This class detects and stores display scale.
- /// The scale ratio is used to calculate plot size and
- /// translate mouse coordinates to real pixel coordinates.
- ///
- public class DisplayScale
- {
- ///
- /// Scale ratio in use by the active display.
- /// This ratio is used when scaling is enabled.
- ///
- public float SystemScaleRatio { get; private set; } = 1.0f;
-
- ///
- /// Scale ratio to use if scaling is disabled.
- ///
- public float ManualScaleRatio { get; private set; } = 1.0f;
-
- private bool _enabled = true;
-
- ///
- /// Control whether the plot bitmap should be stretched if display scaling is active.
- /// When enabled text will be large but may be blurry.
- /// When disabled text will be sharp but may be too small to read on high-resolution displays.
- ///
- public bool Enabled
- {
- get => _enabled;
- set
- {
- if (value != _enabled)
- {
- _enabled = value;
- ScaleChanged?.Invoke(this, EventArgs.Empty);
- }
- }
- }
-
- ///
- /// Current display scale ratio.
- ///
- public float ScaleRatio => Enabled ? SystemScaleRatio : ManualScaleRatio;
-
- ///
- /// This event is invoked whenever the display scale is changed.
- ///
- public event EventHandler ScaleChanged = delegate { };
-
- public DisplayScale()
- {
- Measure();
- }
-
- ///
- /// Update the scale ratio using that of the active display.
- /// Call this method if you expect the display scale has changed.
- ///
- public void Measure()
- {
- double ratio = GDI.GetScaleRatio();
- if (SystemScaleRatio != ratio)
- {
- SystemScaleRatio = (float)ratio;
- ScaleChanged?.Invoke(this, EventArgs.Empty);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventFactory.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventFactory.cs
deleted file mode 100644
index 473cfd367..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventFactory.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This class takes details about interactions and builds them into event objects which can
- /// be passed into the event processor for processing/rendering when the render queue is free.
- ///
- public class UIEventFactory
- {
- public readonly Plot Plot;
- public readonly Configuration Configuration;
- public readonly Settings Settings;
-
- public UIEventFactory(Configuration config, Settings settings, Plot plt)
- {
- Configuration = config;
- Settings = settings;
- Plot = plt;
- }
-
- public IUIEvent CreateBenchmarkToggle() =>
- new BenchmarkToggleEvent(Plot, Configuration);
-
- public IUIEvent CreateApplyZoomRectangleEvent(float x, float y) =>
- new ApplyZoomRectangleEvent(x, y, Configuration, Settings, Plot);
-
- public IUIEvent CreateMouseAutoAxis() =>
- new MouseAxisAutoEvent(Configuration, Settings, Plot);
-
- public IUIEvent CreateMouseMovedToZoomRectangle(float x, float y) =>
- new MouseMovedToZoomRectangle(x, y, Settings, Configuration);
-
- public IUIEvent CreateMousePan(InputState input) =>
- new MousePanEvent(input, Configuration, Settings);
-
- public IUIEvent CreateMouseScroll(float x, float y, bool scroolUp) =>
- new MouseScrollEvent(x, y, scroolUp, Configuration, Settings);
-
- public IUIEvent CreateMouseUpClearRender() =>
- new MouseUpClearRenderEvent(Configuration);
-
- public IUIEvent CreateMouseZoom(InputState input) =>
- new MouseZoomEvent(input, Configuration, Settings, Plot);
-
- public IUIEvent CreatePlottableDrag(float x, float y, bool shiftDown, IDraggable draggable) =>
- new PlottableDragEvent(x, y, shiftDown, draggable, Plot, Configuration);
-
- public IUIEvent CreateManualLowQualityRender() => new RenderLowQuality();
-
- public IUIEvent CreateManualHighQualityRender() => new RenderHighQuality();
-
- public IUIEvent CreateManualDelayedHighQualityRender() => new RenderDelayedHighQuality();
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/ApplyZoomRectangleEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/ApplyZoomRectangleEvent.cs
deleted file mode 100644
index 8030c5104..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/ApplyZoomRectangleEvent.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event describes what happens when the mouse button is lifted after
- /// middle-click-dragging a rectangle to zoom into. The coordinates of that rectangle
- /// are calculated, and the plot's axis limits are adjusted accordingly.
- ///
- public class ApplyZoomRectangleEvent : IUIEvent
- {
- private readonly float X;
- private readonly float Y;
- private readonly Configuration Configuration;
- private readonly Settings Settings;
- private readonly Plot Plot;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDropped;
-
- public ApplyZoomRectangleEvent(float x, float y, Configuration config, Settings settings, Plot plt)
- {
- X = x;
- Y = y;
- Configuration = config;
- Settings = settings;
- Plot = plt;
- }
-
- public void ProcessEvent()
- {
- Settings.RecallAxisLimits();
-
- var originalLimits = Plot.GetAxisLimits();
-
- Settings.MouseZoomRect(X, Y, finalize: true);
-
- if (Configuration.LockHorizontalAxis)
- {
- Plot.SetAxisLimitsX(originalLimits.XMin, originalLimits.XMax);
- }
-
- if (Configuration.LockVerticalAxis)
- {
- Plot.SetAxisLimitsY(originalLimits.YMin, originalLimits.YMax);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/BenchmarkToggleEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/BenchmarkToggleEvent.cs
deleted file mode 100644
index 7b65e6e97..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/BenchmarkToggleEvent.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event toggles visibility of the benchmark.
- /// This event is typically called after double-clicking the plot.
- ///
- public class BenchmarkToggleEvent : IUIEvent
- {
- private readonly Plot Plot;
- private readonly Configuration Configuration;
- public RenderType RenderType => Configuration.QualityConfiguration.BenchmarkToggle;
-
- public BenchmarkToggleEvent(Plot plt, Configuration config)
- {
- Plot = plt;
- Configuration = config;
- }
-
- public void ProcessEvent()
- {
- Plot.Benchmark(!Plot.Benchmark(null));
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseAxisAutoEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseAxisAutoEvent.cs
deleted file mode 100644
index 270a81b78..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseAxisAutoEvent.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event calls AxisAuto() on all axes.
- /// This is typically called after middle-clicking.
- ///
- public class MouseAxisAutoEvent : IUIEvent
- {
- private readonly Configuration Configuration;
- private readonly Settings Settings;
- private readonly Plot Plot;
- public RenderType RenderType => Configuration.QualityConfiguration.AutoAxis;
-
- public MouseAxisAutoEvent(Configuration config, Settings settings, Plot plt)
- {
- Configuration = config;
- Settings = settings;
- Plot = plt;
- }
-
- public void ProcessEvent()
- {
- Settings.ZoomRectangle.Clear();
-
- if (Configuration.LockVerticalAxis)
- {
- return;
- }
-
- Plot.AxisAuto();
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseMovedToZoomRectangle.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseMovedToZoomRectangle.cs
deleted file mode 100644
index 71f91480f..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseMovedToZoomRectangle.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event occurs when the user is actively middle-click-dragging to zoom.
- /// A zoom window is drawn on the screen, but axis limits have not yet been changed.
- ///
- public class MouseMovedToZoomRectangle : IUIEvent
- {
- private readonly float X;
- private readonly float Y;
- private readonly Settings Settings;
- private readonly Configuration Configuration;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDragged;
-
- public MouseMovedToZoomRectangle(float x, float y, Settings settings, Configuration configuration)
- {
- X = x;
- Y = y;
- Settings = settings;
- Configuration = configuration;
- }
-
- public void ProcessEvent()
- {
- Settings.MouseZoomRect(X, Y);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MousePanEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MousePanEvent.cs
deleted file mode 100644
index 92fa33d4a..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MousePanEvent.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event describes represents interactive panning.
- /// It is assume the plot has already been reset to the pre-mouse-interaction state,
- /// and processing of this event pans the plot on the axes according to the distance
- /// the mouse has moved.
- /// This is typically called on MouseMove events when the left button is held down.
- ///
- public class MousePanEvent : IUIEvent
- {
- private readonly InputState Input;
- private readonly Configuration Configuration;
- private readonly Settings Settings;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDragged;
-
- public MousePanEvent(InputState input, Configuration config, Settings settings)
- {
- Input = input;
- Configuration = config;
- Settings = settings;
- }
-
- public void ProcessEvent()
- {
- float x = (Input.ShiftDown || Configuration.LockHorizontalAxis) ? Settings.MouseDownX : Input.X;
- float y = (Input.CtrlDown || Configuration.LockVerticalAxis) ? Settings.MouseDownY : Input.Y;
- Settings.MousePan(x, y);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseScrollEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseScrollEvent.cs
deleted file mode 100644
index 2159dbf24..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseScrollEvent.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event describes a zoom operation performed by scrolling the mouse wheel.
- ///
- public class MouseScrollEvent : IUIEvent
- {
- private readonly float X;
- private readonly float Y;
- private readonly bool ScrolledUp;
- private readonly Configuration Configuration;
- private readonly Settings Settings;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseWheelScrolled;
-
- public MouseScrollEvent(float x, float y, bool scrolledUp, Configuration config, Settings settings)
- {
- X = x;
- Y = y;
- ScrolledUp = scrolledUp;
- Configuration = config;
- Settings = settings;
- }
-
- public void ProcessEvent()
- {
- double increment = 1.0 + Configuration.ScrollWheelZoomFraction;
- double decrement = 1.0 - Configuration.ScrollWheelZoomFraction;
-
- double xFrac = ScrolledUp ? increment : decrement;
- double yFrac = ScrolledUp ? increment : decrement;
-
- if (Configuration.LockHorizontalAxis)
- {
- xFrac = 1;
- }
-
- if (Configuration.LockVerticalAxis)
- {
- yFrac = 1;
- }
-
- Settings.AxesZoomTo(xFrac, yFrac, X, Y);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseUpClearRenderEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseUpClearRenderEvent.cs
deleted file mode 100644
index 564c5dca7..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseUpClearRenderEvent.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event is called after the mouse button is lifted (typically following panning and zooming).
- /// It assumes all the axis manipulation (panning/zooming) has already been performed,
- /// and the purpose of this event is only to request an immediate high quality render.
- ///
- public class MouseUpClearRenderEvent : IUIEvent
- {
- private readonly Configuration Configuration;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDropped;
-
- public MouseUpClearRenderEvent(Configuration config)
- {
- Configuration = config;
- }
-
- public void ProcessEvent()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseZoomEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseZoomEvent.cs
deleted file mode 100644
index 7b2688d9f..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/MouseZoomEvent.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event describes represents interactive zooming.
- /// It is assume the plot has already been reset to the pre-mouse-interaction state,
- /// and processing of this event zooms the plot on the axes according to the distance
- /// the mouse has moved.
- /// This is typically called on MouseMove events when the right button is held down.
- ///
- public class MouseZoomEvent : IUIEvent
- {
- private readonly InputState Input;
- private readonly Configuration Configuration;
- private readonly Settings Settings;
- private readonly Plot Plot;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDragged;
-
- public MouseZoomEvent(InputState input, Configuration config, Settings settings, Plot plt)
- {
- Input = input;
- Configuration = config;
- Settings = settings;
- Plot = plt;
- }
-
- public void ProcessEvent()
- {
- var originalLimits = Plot.GetAxisLimits();
-
- if (Input.ShiftDown && Input.CtrlDown)
- {
- float dx = Input.X - Settings.MouseDownX;
- float dy = Settings.MouseDownY - Input.Y;
- float delta = Math.Max(dx, dy);
- Settings.MouseZoom(Settings.MouseDownX + delta, Settings.MouseDownY - delta);
- }
- else
- {
- float x = Input.ShiftDown ? Settings.MouseDownX : Input.X;
- float y = Input.CtrlDown ? Settings.MouseDownY : Input.Y;
- Settings.MouseZoom(x, y);
- }
-
- if (Configuration.LockHorizontalAxis)
- {
- Plot.SetAxisLimitsX(originalLimits.XMin, originalLimits.XMax);
- }
-
- if (Configuration.LockVerticalAxis)
- {
- Plot.SetAxisLimitsY(originalLimits.YMin, originalLimits.YMax);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/PlottableDragEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/PlottableDragEvent.cs
deleted file mode 100644
index 731017184..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/PlottableDragEvent.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event describes what happens when a draggable plottable (like an axis line)
- /// has been moved from its initial position. This event places the plottable of interest
- /// at the current mouse position.
- /// This is typically called on MouseMove events while left-click-dragging a draggable plottable.
- ///
- public class PlottableDragEvent : IUIEvent
- {
- private readonly float X;
- private readonly float Y;
- private readonly IDraggable PlottableBeingDragged;
- private readonly Plot Plot;
- private readonly bool ShiftDown;
- private readonly Configuration Configuration;
- public RenderType RenderType => Configuration.QualityConfiguration.MouseInteractiveDragged;
-
- public PlottableDragEvent(float x, float y, bool shiftDown, IDraggable plottable, Plot plt, Configuration config)
- {
- X = x;
- Y = y;
- ShiftDown = shiftDown;
- Plot = plt;
- PlottableBeingDragged = plottable;
- Configuration = config;
- }
-
- public void ProcessEvent()
- {
- double xCoord = Plot.GetCoordinateX(X);
- double yCoord = Plot.GetCoordinateY(Y);
- PlottableBeingDragged.DragTo(xCoord, yCoord, fixedSize: ShiftDown);
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderDelayedHighQuality.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderDelayedHighQuality.cs
deleted file mode 100644
index 5edf0713a..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderDelayedHighQuality.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- class RenderDelayedHighQuality : IUIEvent
- {
- public RenderType RenderType => RenderType.LowQualityThenHighQualityDelayed;
-
- public void ProcessEvent()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderHighQuality.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderHighQuality.cs
deleted file mode 100644
index 7f252758d..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderHighQuality.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- class RenderHighQuality : IUIEvent
- {
- public RenderType RenderType => RenderType.HighQuality;
-
- public void ProcessEvent()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderLowQuality.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderLowQuality.cs
deleted file mode 100644
index 3aa6ee0ac..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/Events/RenderLowQuality.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- class RenderLowQuality : IUIEvent
- {
- public RenderType RenderType => RenderType.LowQuality;
-
- public void ProcessEvent()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventsProcessor.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventsProcessor.cs
deleted file mode 100644
index 7b37b9691..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/EventsProcessor.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This event processor process incoming events and invokes renders as needed.
- /// This class contains logic to optionally display a fast preview render and a delayed high quality render.
- ///
- public class EventsProcessor
- {
- ///
- /// List of events that have not yet been processed
- ///
- private readonly Queue Queue = new();
-
- ///
- /// The event processor loop will hang infinitely until this is set to True
- ///
- public bool Enable = false;
-
- ///
- /// This timer is used for delayed rendering.
- /// It is restarted whenever an event is processed which requests a delayed render.
- ///
- private readonly Stopwatch RenderDelayTimer = new Stopwatch();
-
- ///
- /// This is true while the processor is processing events and/or waiting for a delayed render.
- ///
- private bool QueueProcessorIsRunning = false;
-
- ///
- /// Time to wait after a low-quality render to invoke a high quality render
- ///
- public int RenderDelayMilliseconds { get; set; }
-
- ///
- /// When a render is required this Action will be invoked.
- /// Its argument indicates whether low quality should be used.
- ///
- public Action RenderAction { get; set; }
-
- ///
- /// Create a processor to invoke renders in response to incoming events
- ///
- /// Action to invoke to perform a render. Bool argument is LowQuality.
- /// Milliseconds after low-quality render to re-render using high quality.
- public EventsProcessor(Action renderAction, int renderDelay)
- {
- RenderAction = renderAction;
- RenderDelayMilliseconds = renderDelay;
- }
-
- ///
- /// Perform a high quality render.
- /// Call this instead of the action itself because this has better-documented arguments.
- ///
- private void RenderHighQuality() => RenderAction.Invoke(false);
-
- ///
- /// Perform a low quality render.
- /// Call this instead of the action itself because this has better-documented arguments.
- ///
- private void RenderLowQuality() => RenderAction.Invoke(true);
-
- ///
- /// Add an event to the queue and process it when it is ready.
- /// After all events are processed a render will be called automatically by the queue processor.
- ///
- public async Task ProcessAsync(IUIEvent uiEvent)
- {
- Queue.Enqueue(uiEvent);
-
- // start a new processor only if one is not already running
- if (!QueueProcessorIsRunning)
- {
- await RunQueueProcessor();
- }
- }
-
- ///
- /// Perform a low quality preview render if the render type allows it
- ///
- private void RenderPreview(RenderType renderType)
- {
- if (renderType == RenderType.HighQuality)
- {
- return;
- }
-
- RenderLowQuality();
- }
-
- ///
- /// Perform a final high quality render if the render type allows it.
- ///
- /// Return False if the final render needs to happen later
- private bool RenderFinal(RenderType renderType)
- {
- switch (renderType)
- {
- case RenderType.LowQuality:
- // we don't need a HQ render if the type is LQ only
- return true;
-
- case RenderType.HighQuality:
- // A HQ version is always needed
- RenderHighQuality();
- return true;
-
- case RenderType.LowQualityThenHighQuality:
- // A LQ version has been rendered, but we need a HQ version now
- RenderHighQuality();
- return true;
-
- case RenderType.LowQualityThenHighQualityDelayed:
- // A LQ version has been rendered, but we need a HQ version after a delay
-
- if (RenderDelayTimer.IsRunning == false)
- {
- RenderDelayTimer.Restart();
- }
-
- if (RenderDelayTimer.ElapsedMilliseconds > RenderDelayMilliseconds)
- {
- RenderHighQuality();
- RenderDelayTimer.Stop();
- return true;
- }
- else
- {
- return false;
- }
-
- default:
- throw new ArgumentException($"Unknown quality: {renderType}");
- }
- }
-
- ///
- /// Process every event in the queue.
- /// A render will be executed after each event is processed.
- /// A slight delay will be added between queue checks.
- ///
- private async Task RunQueueProcessor()
- {
- while (Enable == false)
- {
- await Task.Delay(1);
- }
-
- RenderType lastEventRenderType = RenderType.ProcessMouseEventsOnly;
- while (true)
- {
- QueueProcessorIsRunning = true;
- bool eventRenderRequested = false;
- while (Queue.Count > 0)
- {
- var uiEvent = Queue.Dequeue();
- uiEvent.ProcessEvent();
-
- if (uiEvent.RenderType == RenderType.LowQualityThenHighQualityDelayed)
- {
- RenderDelayTimer.Restart();
- }
-
- if (uiEvent.RenderType != RenderType.ProcessMouseEventsOnly)
- {
- lastEventRenderType = uiEvent.RenderType;
- eventRenderRequested = true;
- }
- }
-
- if (eventRenderRequested)
- {
- RenderPreview(lastEventRenderType);
- }
-
- await Task.Delay(1);
-
- // if all events were processed, consider performing a final render and exiting
- if (Queue.Count == 0)
- {
- bool finalRenderExecuted = RenderFinal(lastEventRenderType);
- if (finalRenderExecuted)
- {
- break;
- }
- }
- };
-
- QueueProcessorIsRunning = false;
- }
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/IUIEvent.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/IUIEvent.cs
deleted file mode 100644
index e7c1bf254..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/EventProcess/IUIEvent.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public interface IUIEvent
- {
- public RenderType RenderType { get; }
- void ProcessEvent();
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.cs
index 3c3916793..9e6db7f6a 100644
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.cs
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.cs
@@ -1,541 +1,37 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
{
- public class FormsPlot : UserControl
+ public class FormsPlot : FormsPlotBase
{
- #region Designer Code
- private PictureBox pictureBox1;
- private KryptonRichTextBox krtbErrorMessage;
- private ContextMenuStrip DefaultRightClickMenu;
- private IContainer components;
- private ToolStripMenuItem copyMenuItem;
- private ToolStripMenuItem saveImageMenuItem;
- private ToolStripSeparator toolStripSeparator1;
- private ToolStripMenuItem autoAxisMenuItem;
- private ToolStripSeparator toolStripSeparator2;
- private ToolStripMenuItem helpMenuItem;
- private ToolStripSeparator toolStripSeparator3;
- private ToolStripMenuItem openInNewWindowMenuItem;
-
- private void InitializeComponent()
- {
- components = new Container();
- pictureBox1 = new PictureBox();
- krtbErrorMessage = new KryptonRichTextBox();
- DefaultRightClickMenu = new ContextMenuStrip(components);
- copyMenuItem = new ToolStripMenuItem();
- saveImageMenuItem = new ToolStripMenuItem();
- toolStripSeparator1 = new ToolStripSeparator();
- autoAxisMenuItem = new ToolStripMenuItem();
- toolStripSeparator2 = new ToolStripSeparator();
- helpMenuItem = new ToolStripMenuItem();
- toolStripSeparator3 = new ToolStripSeparator();
- openInNewWindowMenuItem = new ToolStripMenuItem();
- ((ISupportInitialize)(pictureBox1)).BeginInit();
- DefaultRightClickMenu.SuspendLayout();
- SuspendLayout();
- //
- // pictureBox1
- //
- pictureBox1.BackColor = Color.Navy;
- pictureBox1.Dock = DockStyle.Fill;
- pictureBox1.Location = new Point(0, 0);
- pictureBox1.Name = "pictureBox1";
- pictureBox1.Size = new Size(400, 300);
- pictureBox1.TabIndex = 1;
- pictureBox1.TabStop = false;
- //
- // krtbErrorMessage
- //
- krtbErrorMessage.Location = new Point(21, 24);
- krtbErrorMessage.Name = "krtbErrorMessage";
- krtbErrorMessage.Size = new Size(186, 84);
- krtbErrorMessage.StateCommon.Back.Color1 = Color.Maroon;
- krtbErrorMessage.StateCommon.Content.Color1 = Color.White;
- krtbErrorMessage.StateCommon.Content.Font = new System.Drawing.Font("Cascadia Code", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
- krtbErrorMessage.TabIndex = 2;
- krtbErrorMessage.Text = "Error Message";
- //
- // DefaultRightClickMenu
- //
- DefaultRightClickMenu.Font = new System.Drawing.Font("Segoe UI", 9F);
- DefaultRightClickMenu.ImageScalingSize = new Size(20, 20);
- DefaultRightClickMenu.Items.AddRange(new ToolStripItem[] {
- copyMenuItem,
- saveImageMenuItem,
- toolStripSeparator1,
- autoAxisMenuItem,
- toolStripSeparator2,
- helpMenuItem,
- toolStripSeparator3,
- openInNewWindowMenuItem});
- DefaultRightClickMenu.Name = "contextMenuStrip1";
- DefaultRightClickMenu.Size = new Size(191, 132);
- //
- // copyMenuItem
- //
- copyMenuItem.Name = "copyMenuItem";
- copyMenuItem.Size = new Size(190, 22);
- copyMenuItem.Text = "Copy Image";
- copyMenuItem.Click += new EventHandler(copyMenuItem_Click);
- //
- // saveImageMenuItem
- //
- saveImageMenuItem.Name = "saveImageMenuItem";
- saveImageMenuItem.Size = new Size(190, 22);
- saveImageMenuItem.Text = "Save Image As...";
- saveImageMenuItem.Click += new EventHandler(saveImageMenuItem_Click);
- //
- // toolStripSeparator1
- //
- toolStripSeparator1.Name = "toolStripSeparator1";
- toolStripSeparator1.Size = new Size(187, 6);
- //
- // autoAxisMenuItem
- //
- autoAxisMenuItem.Name = "autoAxisMenuItem";
- autoAxisMenuItem.Size = new Size(190, 22);
- autoAxisMenuItem.Text = "Zoom to Fit Data";
- autoAxisMenuItem.Click += new EventHandler(autoAxisMenuItem_Click);
- //
- // toolStripSeparator2
- //
- toolStripSeparator2.Name = "toolStripSeparator2";
- toolStripSeparator2.Size = new Size(187, 6);
- //
- // helpMenuItem
- //
- helpMenuItem.Name = "helpMenuItem";
- helpMenuItem.Size = new Size(190, 22);
- helpMenuItem.Text = "Help";
- helpMenuItem.Click += new EventHandler(helpMenuItem_Click);
- //
- // toolStripSeparator3
- //
- toolStripSeparator3.Name = "toolStripSeparator3";
- toolStripSeparator3.Size = new Size(187, 6);
- //
- // openInNewWindowMenuItem
- //
- openInNewWindowMenuItem.Name = "openInNewWindowMenuItem";
- openInNewWindowMenuItem.Size = new Size(190, 22);
- openInNewWindowMenuItem.Text = "Open in New Window";
- openInNewWindowMenuItem.Click += new EventHandler(openInNewWindowMenuItem_Click);
- //
- // FormsPlot
- //
- Controls.Add(krtbErrorMessage);
- Controls.Add(pictureBox1);
- Name = "FormsPlot";
- Size = new Size(400, 300);
- Load += new EventHandler(FormsPlot_Load);
- SizeChanged += new EventHandler(OnSizeChanged);
- ((ISupportInitialize)(pictureBox1)).EndInit();
- DefaultRightClickMenu.ResumeLayout(false);
- ResumeLayout(false);
-
- }
- #endregion
-
- #region Fields
-
- ///
- /// This is the plot displayed by the user control.
- /// After modifying it you may need to call Refresh() to request the plot be redrawn on the screen.
- ///
- public Plot Plot => Backend.Plot;
-
- ///
- /// This object can be used to modify advanced behaior and customization of this user control.
- ///
- public readonly Configuration Configuration;
-
- private readonly ControlBackEnd Backend;
- private readonly Dictionary Cursors;
- private readonly bool IsDesignerMode = Process.GetCurrentProcess().ProcessName == "devenv";
-
- private bool _showContextMenu;
-
- #endregion
-
- #region Properties
- public bool ShowContextMenu
- {
- get => _showContextMenu;
-
- set
- {
- _showContextMenu = value;
-
- Invalidate();
- }
- }
- #endregion
-
- #region Events
-
- ///
- /// This event is invoked any time the axis limits are modified.
- ///
- public event EventHandler AxesChanged;
+ private readonly SKControl _skElement;
- ///
- /// This event is invoked any time the plot is right-clicked.
- /// By default it contains DefaultRightClickEvent(), but you can remove this and add your own method.
- ///
- public event EventHandler RightClicked;
-
- ///
- /// This event is invoked after the mouse moves while dragging a draggable plottable.
- /// The object passed is the plottable being dragged.
- ///
- public event EventHandler PlottableDragged;
-
- ///
- /// This event is invoked right after a draggable plottable was dropped.
- /// The object passed is the plottable that was just dropped.
- ///
- public event EventHandler PlottableDropped;
- #endregion
-
- #region Constructor
+ public override GRContext GrContext => null!;
public FormsPlot()
{
- Backend = new ControlBackEnd(1, 1, "FormsPlot");
-
- Backend.Resize(Width, Height, false);
-
- Backend.BitmapChanged += Backend_BitmapChanged;
-
- Backend.BitmapUpdated += Backend_BitmapUpdated;
-
- Backend.CursorChanged += Backend_CursorChanged;
-
- Backend.RightClicked += Backend_RightClicked;
-
- Backend.AxesChanged += Backend_AxesChanged;
-
- Backend.PlottableDragged += Backend_PlottableDragged;
-
- Backend.PlottableDropped += Backend_PlottableDropped;
-
- Configuration = Backend.Configuration;
-
- if (IsDesignerMode)
- {
- try
- {
- Configuration.WarnIfRenderNotCalledManually = false;
-
- Plot.Title($"ScottPlot {Plot.Version}");
-
- Plot.Render();
- }
- catch (Exception e)
- {
- InitializeComponent();
-
- pictureBox1.Visible = false;
-
- krtbErrorMessage.Visible = true;
-
- krtbErrorMessage.Dock = DockStyle.Fill;
-
- krtbErrorMessage.Text =
- $@"ERROR: ScottPlot failed to render in design mode.\n\nThis may be due to incompatible System.Drawing.Common versions or a 32-bit/64-bit mismatch.\n\nAlthough rendering failed at design time, it may still function normally at runtime.\n\nException details:\n{e}";
-
- return;
- }
- }
-
- Cursors = new Dictionary()
- {
- [ScottPlot.Cursor.Arrow] = System.Windows.Forms.Cursors.Arrow,
- [ScottPlot.Cursor.WE] = System.Windows.Forms.Cursors.SizeWE,
- [ScottPlot.Cursor.NS] = System.Windows.Forms.Cursors.SizeNS,
- [ScottPlot.Cursor.All] = System.Windows.Forms.Cursors.SizeAll,
- [ScottPlot.Cursor.CrossHair] = System.Windows.Forms.Cursors.Cross,
- [ScottPlot.Cursor.Hand] = System.Windows.Forms.Cursors.Hand,
- [ScottPlot.Cursor.Question] = System.Windows.Forms.Cursors.Help,
- };
-
- InitializeComponent();
-
- krtbErrorMessage.Visible = false;
-
- pictureBox1.BackColor = Color.Transparent;
-
- BackColor = Color.Transparent;
-
- Plot.Style(BackColor);
-
- pictureBox1.MouseWheel += PictureBox1_MouseWheel;
-
- pictureBox1.MouseDown += PictureBox1_MouseDown;
-
- pictureBox1.MouseUp += PictureBox1_MouseUp;
-
- pictureBox1.DoubleClick += PictureBox1_DoubleClick;
-
- pictureBox1.MouseMove += PictureBox1_MouseMove;
-
- pictureBox1.MouseEnter += PictureBox1_MouseEnter;
-
- pictureBox1.MouseLeave += PictureBox1_MouseLeave;
-
- RightClicked += DefaultRightClickedEvent;
-
- ShowContextMenu = true;
-
- Backend.StartProcessingEvents();
- }
- #endregion
-
- #region Event Handlers
- ///
- /// Return the mouse position on the plot (in coordinate space) for the latest X and Y coordinates
- ///
- public (double x, double y) GetMouseCoordinates() => Backend.GetMouseCoordinates();
-
- ///
- /// Return the mouse position (in pixel space) for the last observed mouse position
- ///
- public (float x, float y) GetMousePixel() => Backend.GetMousePixel();
-
- ///
- /// Reset this control by replacing the current plot with a new empty plot
- ///
- public void Reset() => Backend.Reset(Width, Height);
-
- ///
- /// Reset this control by replacing the current plot with an existing plot
- ///
- public void Reset(Plot newPlot) => Backend.Reset(Width, Height, newPlot);
-
- ///
- /// Re-render the plot and update the image displayed by this control.
- ///
- /// disable anti-aliasing to produce faster (but lower quality) plots
- ///
- public void Refresh(bool lowQuality = false, bool skipIfCurrentlyRendering = false)
- {
- Application.DoEvents();
- Backend.WasManuallyRendered = true;
- Backend.Render(lowQuality, skipIfCurrentlyRendering);
- }
-
- ///
- /// Request the control to refresh the next time it is available.
- /// This method does not block the calling thread.
- ///
- public void RefreshRequest(RenderType renderType = RenderType.LowQualityThenHighQualityDelayed)
- {
- Backend.WasManuallyRendered = true;
- Backend.RenderRequest(renderType);
- }
-
- public void DefaultRightClickedEvent(object sender, EventArgs e)
- {
- DefaultRightClickMenu.Show(System.Windows.Forms.Cursor.Position);
- }
-
- private void PictureBox1_MouseWheel(object sender, MouseEventArgs e)
- {
- Backend.MouseWheel(GetInputState(e));
-
- base.OnMouseWheel(e);
- }
-
- private void PictureBox1_MouseLeave(object sender, EventArgs e)
- {
- base.OnMouseLeave(e);
- }
-
- private void PictureBox1_MouseEnter(object sender, EventArgs e)
- {
- base.OnMouseEnter(e);
- }
-
- private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
- {
- Backend.MouseMove(GetInputState(e));
-
- base.OnMouseMove(e);
- }
-
- private void PictureBox1_DoubleClick(object sender, EventArgs e)
- {
- Backend.DoubleClick();
-
- base.OnDoubleClick(e);
- }
-
- private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
- {
- Backend.MouseUp(GetInputState(e));
-
- base.OnMouseUp(e);
- }
-
- private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
- {
- Backend.MouseMove(GetInputState(e));
-
- base.OnMouseMove(e);
- }
-
- private void Backend_PlottableDropped(object sender, EventArgs e)
- {
- PlottableDropped?.Invoke(sender, e);
- }
-
- private void Backend_PlottableDragged(object sender, EventArgs e)
- {
- PlottableDragged?.Invoke(sender, e);
- }
+ _skElement = new SKControl() { Dock = DockStyle.Fill };
+ _skElement.PaintSurface += SKElement_PaintSurface; ;
+ _skElement.MouseDown += SKElement_MouseDown;
+ _skElement.MouseUp += SKElement_MouseUp;
+ _skElement.MouseMove += SKElement_MouseMove;
+ _skElement.DoubleClick += SKElement_DoubleClick;
+ _skElement.MouseWheel += SKElement_MouseWheel;
+ _skElement.KeyDown += SKElement_KeyDown;
+ _skElement.KeyUp += SKElement_KeyUp;
- private void Backend_AxesChanged(object sender, EventArgs e)
- {
- AxesChanged?.Invoke(this, e);
- }
+ Controls.Add(_skElement);
- private void Backend_RightClicked(object sender, EventArgs e)
- {
- RightClicked?.Invoke(this, e);
+ HandleDestroyed += (s, e) => _skElement.Dispose();
}
- private void Backend_CursorChanged(object sender, EventArgs e)
+ private void SKElement_PaintSurface(object? sender, SKPaintSurfaceEventArgs e)
{
- Cursor = Cursors[Backend.Cursor];
+ Plot.Render(e.Surface.Canvas, (int)e.Surface.Canvas.LocalClipBounds.Width, (int)e.Surface.Canvas.LocalClipBounds.Height);
}
- private void Backend_BitmapUpdated(object sender, EventArgs e)
+ public override void Refresh()
{
- Application.DoEvents();
-
- pictureBox1.Invalidate();
+ _skElement.Invalidate();
+ base.Refresh();
}
-
- private void OnSizeChanged(object sender, EventArgs e) => Backend.Resize(Width, Height, true);
-
- private void Backend_BitmapChanged(object sender, EventArgs e)
- {
- pictureBox1.Image = Backend.GetLatestBitmap();
- }
-
- private void FormsPlot_Load(object sender, EventArgs e)
- {
- OnSizeChanged(null, null);
- }
-
- #endregion
-
- #region Methods
-
- private InputState GetInputState(MouseEventArgs mea) => new InputState()
- {
- X = mea.X,
- Y = mea.Y,
- LeftWasJustPressed = mea.Button == MouseButtons.Left,
- RightWasJustPressed = mea.Button == MouseButtons.Right,
- MiddleWasJustPressed = mea.Button == MouseButtons.Middle,
- ShiftDown = ModifierKeys.HasFlag(Keys.Shift),
- CtrlDown = ModifierKeys.HasFlag(Keys.Control),
- AltDown = ModifierKeys.HasFlag(Keys.Alt),
- WheelScrolledUp = mea.Delta > 0,
- WheelScrolledDown = mea.Delta < 0
- };
-
- #endregion
-
- private void copyMenuItem_Click(object sender, EventArgs e)
- {
- Clipboard.SetImage(Plot.Render());
- }
-
- private void saveImageMenuItem_Click(object sender, EventArgs e)
- {
- var sfd = new SaveFileDialog
- {
- FileName = "ScottPlot.png",
- Filter = "PNG Files (*.png)|*.png;*.png" +
- "|JPG Files (*.jpg, *.jpeg)|*.jpg;*.jpeg" +
- "|BMP Files (*.bmp)|*.bmp;*.bmp" +
- "|All files (*.*)|*.*"
- };
-
- if (sfd.ShowDialog() == DialogResult.OK)
- {
- Plot.SaveFig(sfd.FileName);
- }
- }
-
- private void autoAxisMenuItem_Click(object sender, EventArgs e)
- {
- Plot.AxisAuto();
-
- Refresh();
- }
-
- private void helpMenuItem_Click(object sender, EventArgs e)
- {
- ScottPlotHelp help = new ScottPlotHelp();
-
- help.ShowDialog();
- }
-
- private void openInNewWindowMenuItem_Click(object sender, EventArgs e)
- {
- new PlotViewer(Plot).Show();
- }
-
- #region Overrides
-
- protected override void OnPaint(PaintEventArgs e)
- {
- if (_showContextMenu)
- {
- ContextMenuStrip = DefaultRightClickMenu;
-
- pictureBox1.ContextMenuStrip = DefaultRightClickMenu;
- }
- else
- {
- ContextMenuStrip = null;
-
- pictureBox1.ContextMenuStrip = null;
- }
-
- base.OnPaint(e);
- }
-
- #endregion
}
-}
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.resx b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.resx
deleted file mode 100644
index f36e636b9..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlot.resx
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- 17, 17
-
-
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotBase.cs
new file mode 100644
index 000000000..ef978eca2
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotBase.cs
@@ -0,0 +1,128 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class FormsPlotBase : UserControl, IPlotControl
+ {
+ #region Public
+
+ public Plot Plot { get; internal set; }
+
+ public IPlotInteraction Interaction { get; set; }
+
+ public IPlotMenu Menu { get; set; }
+
+ public abstract GRContext? GrContext { get; }
+
+ public float DisplayScale { get; set; }
+
+ #endregion
+
+ #region Identity
+
+ public FormsPlotBase()
+ {
+ DisplayScale = DetectDisplayScale();
+ Interaction = new Interaction(this);
+ Menu = new FormsPlotMenu(this);
+ Plot = Reset();
+
+ // TODO: replace this with an annotation instead of title
+ bool isDesignMode = Process.GetCurrentProcess().ProcessName == "devenv";
+ Plot.Title(isDesignMode ? $"ScottPlot {Version.VersionString}" : string.Empty);
+ }
+
+ #endregion
+
+ #region Implementation
+
+ public Plot Reset()
+ {
+ Plot newPlot = new()
+ {
+ FigureBackground = this.BackColor.ToColor(),
+ };
+
+ return Reset(newPlot);
+ }
+
+ public Plot Reset(Plot newPlot)
+ {
+ Plot oldPlot = Plot;
+ Plot = newPlot;
+ oldPlot?.Dispose();
+ return newPlot;
+ }
+
+ public void ShowContextMenu(Pixel position) => Menu.ShowContextMenu(position);
+
+ public float DetectDisplayScale()
+ {
+ using var g = CreateGraphics();
+ const int DEFAULT_DPI = 96;
+ var ratio = g.DpiX / DEFAULT_DPI;
+ return ratio;
+ }
+
+ internal void SKElement_MouseDown(object? sender, MouseEventArgs e)
+ {
+ Interaction.MouseDown(e.Pixel(), e.Button());
+ base.OnMouseDown(e);
+ }
+
+ internal void SKElement_MouseUp(object? sender, MouseEventArgs e)
+ {
+ Interaction.MouseUp(e.Pixel(), e.Button());
+ base.OnMouseUp(e);
+ }
+
+ internal void SKElement_MouseMove(object? sender, MouseEventArgs e)
+ {
+ Interaction.OnMouseMove(e.Pixel());
+ base.OnMouseMove(e);
+ }
+
+ internal void SKElement_DoubleClick(object? sender, EventArgs e)
+ {
+ Interaction.DoubleClick();
+ base.OnDoubleClick(e);
+ }
+
+ internal void SKElement_MouseWheel(object? sender, MouseEventArgs e)
+ {
+ Interaction.MouseWheelVertical(e.Pixel(), e.Delta);
+ base.OnMouseWheel(e);
+ }
+
+ internal void SKElement_KeyDown(object? sender, KeyEventArgs e)
+ {
+ Interaction.KeyDown(e.Key());
+ base.OnKeyDown(e);
+ }
+
+ internal void SKElement_KeyUp(object? sender, KeyEventArgs e)
+ {
+ Interaction.KeyUp(e.Key());
+ base.OnKeyUp(e);
+ }
+
+ #endregion
+
+ #region Public Overrides
+
+ public override System.Drawing.Color BackColor
+ {
+ get => base.BackColor;
+
+ set
+ {
+ base.BackColor = value;
+
+ if (Plot != null)
+ {
+ Plot.FigureBackground = value.ToColor();
+ }
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/UX/ScottPlotHelp.resx b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotBase.resx
similarity index 100%
rename from Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/UX/ScottPlotHelp.resx
rename to Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotBase.resx
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotExtensions.cs
new file mode 100644
index 000000000..e0d0f568f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotExtensions.cs
@@ -0,0 +1,42 @@
+using StandardKeys = System.Windows.Forms.Keys;
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ internal static class FormsPlotExtensions
+ {
+ internal static Pixel Pixel(this MouseEventArgs e)
+ {
+ return new Pixel(e.X, e.Y);
+ }
+
+ internal static MouseButton Button(this MouseEventArgs e)
+ {
+ return e.Button switch
+ {
+ MouseButtons.Left => MouseButton.Left,
+ MouseButtons.Right => MouseButton.Right,
+ MouseButtons.Middle => MouseButton.Middle,
+ _ => MouseButton.Unknown,
+ };
+ }
+
+ internal static Key Key(this KeyEventArgs e)
+ {
+ return e.KeyCode switch
+ {
+ StandardKeys.ControlKey => ScottPlot.Key.Ctrl,
+ StandardKeys.Menu => ScottPlot.Key.Alt,
+ StandardKeys.ShiftKey => ScottPlot.Key.Shift,
+ _ => ScottPlot.Key.Unknown,
+ };
+ }
+
+ internal static Bitmap GetBitmap(this Plot plot, int width, int height)
+ {
+ byte[] bytes = plot.GetImage(width, height).GetImageBytes();
+ using MemoryStream ms = new(bytes);
+ Bitmap bmp = new(ms);
+ return bmp;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotGL.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotGL.cs
new file mode 100644
index 000000000..19f69a461
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotGL.cs
@@ -0,0 +1,55 @@
+using System.Xml.Linq;
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class FormsPlotGL : FormsPlotBase
+ {
+ #region Instance Fields
+
+ private readonly SKGLControl _skElement;
+
+ #endregion
+
+ #region Public
+
+ public override GRContext? GrContext => _skElement.GRContext;
+
+ #endregion
+
+ #region Identity
+
+ public FormsPlotGL()
+ {
+ _skElement = new SKGLControl() { Dock = DockStyle.Fill, VSync = true };
+ _skElement.PaintSurface += SKControl_PaintSurface;
+ _skElement.MouseDown += SKElement_MouseDown;
+ _skElement.MouseUp += SKElement_MouseUp;
+ _skElement.MouseMove += SKElement_MouseMove;
+ _skElement.DoubleClick += SKElement_DoubleClick;
+ _skElement.MouseWheel += SKElement_MouseWheel;
+ _skElement.KeyDown += SKElement_KeyDown;
+ _skElement.KeyUp += SKElement_KeyUp;
+
+ Controls.Add(_skElement);
+
+ HandleDestroyed += (s, e) => _skElement.Dispose();
+ }
+
+ #endregion
+
+ #region Implementation
+
+ private void SKControl_PaintSurface(object? sender, SKPaintGLSurfaceEventArgs e)
+ {
+ Plot.Render(e.Surface.Canvas, (int)e.Surface.Canvas.LocalClipBounds.Width, (int)e.Surface.Canvas.LocalClipBounds.Height);
+ }
+
+ public override void Refresh()
+ {
+ _skElement.Invalidate();
+ base.Refresh();
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotMenu.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotMenu.cs
new file mode 100644
index 000000000..ac8faa0ff
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotMenu.cs
@@ -0,0 +1,123 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class FormsPlotMenu : IPlotMenu
+ {
+ public string DefaultSaveImageFilename { get; set; } = "Plot.png";
+ public List ContextMenuItems { get; set; } = new();
+ private readonly FormsPlotBase _thisControl;
+
+ public FormsPlotMenu(FormsPlotBase control)
+ {
+ _thisControl = control;
+ Reset();
+ }
+
+ public List StandardContextMenuItems()
+ {
+ ContextMenuItem saveImage = new()
+ {
+ Label = "Save Image",
+ OnInvoke = OpenSaveImageDialog,
+ };
+
+ ContextMenuItem copyImage = new()
+ {
+ Label = "Copy to Clipboard",
+ OnInvoke = CopyImageToClipboard
+ };
+
+ return new List() {
+ saveImage,
+ copyImage,
+ };
+ }
+
+ public void CopyImageToClipboard(IPlotControl plotControl)
+ {
+ PixelSize lastRenderSize = plotControl.Plot.RenderManager.LastRender.FigureRect.Size;
+ Bitmap bmp = plotControl.Plot.GetBitmap((int)lastRenderSize.Width, (int)lastRenderSize.Height);
+ Clipboard.SetImage(bmp);
+ }
+
+ public ContextMenuStrip GetContextMenu()
+ {
+ ContextMenuStrip menu = new();
+
+ foreach (ContextMenuItem item in ContextMenuItems)
+ {
+ ToolStripMenuItem menuItem = new(item.Label);
+ menuItem.Click += (s, e) => item.OnInvoke(_thisControl);
+
+ menu.Items.Add(menuItem);
+ }
+
+ return menu;
+ }
+
+ public void OpenSaveImageDialog(IPlotControl plotControl)
+ {
+ SaveFileDialog dialog = new()
+ {
+ FileName = DefaultSaveImageFilename,
+ Filter = "PNG Files (*.png)|*.png" +
+ "|JPEG Files (*.jpg, *.jpeg)|*.jpg;*.jpeg" +
+ "|BMP Files (*.bmp)|*.bmp" +
+ "|WebP Files (*.webp)|*.webp" +
+ "|SVG Files (*.svg)|*.svg" +
+ "|All files (*.*)|*.*"
+ };
+
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ if (string.IsNullOrEmpty(dialog.FileName))
+ return;
+
+ ImageFormat format;
+
+ try
+ {
+ format = ImageFormatLookup.FromFilePath(dialog.FileName);
+ }
+ catch (ArgumentException)
+ {
+ MessageBox.Show("Unsupported image file format", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ try
+ {
+ PixelSize lastRenderSize = plotControl.Plot.RenderManager.LastRender.FigureRect.Size;
+ plotControl.Plot.Save(dialog.FileName, (int)lastRenderSize.Width, (int)lastRenderSize.Height, format);
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("Image save failed", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+
+ public void ShowContextMenu(Pixel pixel)
+ {
+ DebugUtilities.WriteLine("Showing Context Menu");
+ ContextMenuStrip menu = GetContextMenu();
+ menu.Show(_thisControl, new Point((int)pixel.X, (int)pixel.Y));
+ }
+
+ public void Reset()
+ {
+ Clear();
+ ContextMenuItems.AddRange(StandardContextMenuItems());
+ }
+
+ public void Clear()
+ {
+ ContextMenuItems.Clear();
+ }
+
+ public void Add(string label, Action action)
+ {
+ ContextMenuItems.Add(new ContextMenuItem() { Label = label, OnInvoke = action });
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotViewer.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotViewer.cs
new file mode 100644
index 000000000..b165de563
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/FormsPlotViewer.cs
@@ -0,0 +1,21 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class FormsPlotViewer
+ {
+ public static void Launch(Plot plot, string title = "", int width = 600, int height = 400)
+ {
+ FormsPlot formsPlot = new() { Dock = DockStyle.Fill };
+ formsPlot.Reset(plot);
+
+ KryptonForm form = new KryptonForm()
+ {
+ StartPosition = FormStartPosition.CenterScreen,
+ Width = width,
+ Height = height,
+ Text = title,
+ };
+ form.Controls.Add(formsPlot);
+ form.ShowDialog();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/InputState.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/InputState.cs
deleted file mode 100644
index 790e16277..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/InputState.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- public class InputState
- {
- public float X { get; set; } = float.NaN;
- public float Y { get; set; } = float.NaN;
- public bool LeftWasJustPressed { get; set; } = false;
- public bool RightWasJustPressed { get; set; } = false;
- public bool MiddleWasJustPressed { get; set; } = false;
- public bool ButtonDown => LeftWasJustPressed || RightWasJustPressed || MiddleWasJustPressed;
- public bool ShiftDown { get; set; } = false;
- public bool CtrlDown { get; set; } = false;
- public bool AltDown { get; set; } = false;
- public bool WheelScrolledUp { get; set; } = false;
- public bool WheelScrolledDown { get; set; } = false;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/QualityConfiguration.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/QualityConfiguration.cs
deleted file mode 100644
index fd68d7525..000000000
--- a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Controls/QualityConfiguration.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-#region MIT License
-/*
- * MIT License
- *
- * Copyright (c) 2017 - 2023 Krypton Suite
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#endregion
-
-namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
-{
- ///
- /// This class defines the quality to use for renders after different interactive events occur.
- /// Programmatically-triggered events typically use high quality mode (anti-aliasing enabled).
- /// Real-time mouse-interactive events like zooming and panning typically use low quality mode.
- /// It is possible to automatically render using high quality after a period of inactivity.
- ///
- public class QualityConfiguration
- {
- public RenderType BenchmarkToggle = RenderType.HighQuality;
- public RenderType AutoAxis = RenderType.LowQualityThenHighQualityDelayed;
- public RenderType MouseInteractiveDragged = RenderType.LowQuality;
- public RenderType MouseInteractiveDropped = RenderType.HighQuality;
- public RenderType MouseWheelScrolled = RenderType.LowQualityThenHighQualityDelayed;
- }
-}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AutoScalers/FractionalAutoScaler.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AutoScalers/FractionalAutoScaler.cs
new file mode 100644
index 000000000..34fd0e792
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AutoScalers/FractionalAutoScaler.cs
@@ -0,0 +1,116 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class FractionalAutoScaler : IAutoScaler
+ {
+ public readonly double LeftFraction;
+ public readonly double RightFraction;
+ public readonly double BottomFraction;
+ public readonly double TopFraction;
+
+ ///
+ /// Pad the data area with the given fractions of whitespace.
+ /// A value of 0.1 means 10% padding (5% on each side of the data area).
+ ///
+ public FractionalAutoScaler(double horizontal = .1, double vertical = .15)
+ {
+ LeftFraction = horizontal / 2;
+ RightFraction = horizontal / 2;
+ BottomFraction = vertical / 2;
+ TopFraction = vertical / 2;
+ }
+
+ ///
+ /// Pad each side of the data area with the exact fraction of whitespace.
+ /// 0.05 means 5% whitespace on that side of the data area.
+ ///
+ public FractionalAutoScaler(double left, double right, double bottom, double top)
+ {
+ LeftFraction = left;
+ RightFraction = right;
+ BottomFraction = bottom;
+ TopFraction = top;
+ }
+
+ public bool InvertedX { get; set; } = false;
+ public bool InvertedY { get; set; } = false;
+
+ public void AutoScaleAll(IEnumerable plottables)
+ {
+ // TODO: this should call the GetAxisLimits() below
+
+ IEnumerable xAxes = plottables.Select(x => x.Axes.XAxis).Distinct();
+ IEnumerable yAxes = plottables.Select(x => x.Axes.YAxis).Distinct();
+
+ xAxes.ToList().ForEach(x => x.Range.Reset());
+ yAxes.ToList().ForEach(x => x.Range.Reset());
+
+ foreach (IPlottable plottable in plottables)
+ {
+ AxisLimits limits = plottable.GetAxisLimits();
+ plottable.Axes.XAxis.Range.Expand(limits.XRange);
+ plottable.Axes.YAxis.Range.Expand(limits.YRange);
+ }
+
+ foreach (IAxis xAxis in xAxes)
+ {
+ var left = xAxis.Range.Min - xAxis.Range.Span * LeftFraction;
+ var right = xAxis.Range.Max + xAxis.Range.Span * RightFraction;
+ if (NumericConversion.IsReal(left) && NumericConversion.IsReal(right))
+ {
+ xAxis.Range.Set(left, right);
+ }
+ }
+
+ foreach (IYAxis yAxis in yAxes)
+ {
+ var bottom = yAxis.Range.Min - yAxis.Range.Span * BottomFraction;
+ var top = yAxis.Range.Max + yAxis.Range.Span * TopFraction;
+ if (NumericConversion.IsReal(bottom) && NumericConversion.IsReal(top))
+ {
+ yAxis.Range.Set(bottom, top);
+ }
+ }
+ }
+
+ public AxisLimits GetAxisLimits(Plot plot, IXAxis xAxis, IYAxis yAxis)
+ {
+ ExpandingAxisLimits limits = new();
+
+ foreach (IPlottable plottable in plot.PlottableList.Where(x => x.Axes.XAxis == xAxis && x.Axes.YAxis == yAxis))
+ {
+ limits.Expand(plottable.GetAxisLimits());
+ }
+
+ if (!limits.IsRealX)
+ {
+ limits.SetX(-10, 10);
+ }
+
+ if (!limits.IsRealY)
+ {
+ limits.SetY(-10, 10);
+ }
+
+ if (limits.Left == limits.Right)
+ {
+ limits.SetX(limits.Left - 1, limits.Right + 1);
+ }
+
+ if (limits.Bottom == limits.Top)
+ {
+ limits.SetY(limits.Bottom - 1, limits.Top + 1);
+ }
+
+ AxisLimits newLimits = new(
+ left: limits.Left - limits.HorizontalSpan * LeftFraction,
+ right: limits.Right + limits.HorizontalSpan * RightFraction,
+ bottom: limits.Bottom - limits.VerticalSpan * BottomFraction,
+ top: limits.Top + limits.VerticalSpan * TopFraction);
+
+ return !newLimits.IsReal || !newLimits.HasArea
+ ? throw new InvalidOperationException(
+ "limits returned by the autoscaler must always be in a good state")
+ : newLimits;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/FixedWidth.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/FixedWidth.cs
new file mode 100644
index 000000000..57f861bfa
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/FixedWidth.cs
@@ -0,0 +1,23 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class FixedWidth : IAxisManager
+ {
+ ///
+ /// Fractional amount to expand the axis vertically if data runs outside the current view
+ ///
+ public double ExpandFractionY = 0.5;
+
+ public AxisLimits GetAxisLimits(AxisLimits viewLimits, AxisLimits dataLimits)
+ {
+ double xMin = dataLimits.Left;
+ double xMax = dataLimits.Right;
+
+ var expandY = ExpandFractionY * dataLimits.VerticalSpan;
+
+ var yMin = dataLimits.Bottom < viewLimits.Bottom ? dataLimits.Bottom - expandY : viewLimits.Bottom;
+ var yMax = dataLimits.Top > viewLimits.Top ? dataLimits.Top + expandY : viewLimits.Top;
+
+ return new AxisLimits(xMin, xMax, yMin, yMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Full.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Full.cs
new file mode 100644
index 000000000..62cb03f2e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Full.cs
@@ -0,0 +1,42 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Show the entire range of data, changing the axis limits only
+ /// when the data extends otuside the current view.
+ ///
+ public class Full : IAxisManager
+ {
+ ///
+ /// Defines the amount of whitespace added to the right of the data when data runs outside the current view.
+ /// 1.0 for a view that tightly fits the data and is always changing.
+ /// 2.0 for a view that doubles the horizontal span when new data runs outside the current view.
+ ///
+ public double ExpansionRatio { get; set; } = .25;
+
+ public AxisLimits GetAxisLimits(AxisLimits viewLimits, AxisLimits dataLimits)
+ {
+ bool rightEdgeIsTooClose = viewLimits.Right < dataLimits.Right;
+ bool rightEdgeIsTooFar = viewLimits.Right > dataLimits.Right + dataLimits.HorizontalSpan;
+ var replaceRight = rightEdgeIsTooClose || rightEdgeIsTooFar;
+ var xMax = replaceRight
+ ? dataLimits.Right + dataLimits.HorizontalSpan * ExpansionRatio
+ : viewLimits.Right;
+
+ bool topEdgeIsTooClose = viewLimits.Top < dataLimits.Top;
+ bool topEdgeIsTooFar = viewLimits.Top < dataLimits.Top + dataLimits.VerticalSpan;
+ var replaceTop = topEdgeIsTooClose || topEdgeIsTooFar;
+ var yMax = replaceTop
+ ? dataLimits.Top + dataLimits.VerticalSpan * ExpansionRatio
+ : viewLimits.Top;
+
+ bool bottomEdgeIsTooClose = viewLimits.Bottom > dataLimits.Bottom;
+ bool bottomEdgeIsTooFar = viewLimits.Bottom > dataLimits.Bottom - dataLimits.VerticalSpan;
+ var replaceBottom = bottomEdgeIsTooClose || bottomEdgeIsTooFar;
+ var yMin = replaceBottom
+ ? dataLimits.Bottom - dataLimits.VerticalSpan * ExpansionRatio
+ : viewLimits.Bottom;
+
+ return new AxisLimits(dataLimits.Left, xMax, yMin, yMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/IAxisManager.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/IAxisManager.cs
new file mode 100644
index 000000000..e97895cdd
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/IAxisManager.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// An axis manager contains logic to suggest axis limits given the current view and size of the data.
+ ///
+ public interface IAxisManager
+ {
+ ///
+ /// Return recommended axis limits given the current view and size of the data
+ ///
+ AxisLimits GetAxisLimits(AxisLimits viewLimits, AxisLimits dataLimits);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Slide.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Slide.cs
new file mode 100644
index 000000000..e89e3c86d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisManagers/Slide.cs
@@ -0,0 +1,43 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Slide the view to the right to keep the newest data points in view
+ ///
+ public class Slide : IAxisManager
+ {
+ ///
+ /// Amount of horizontal area to display (in axis units)
+ ///
+ public double Width { get; set; } = 1000;
+
+ ///
+ /// Defines the amount of whitespace added to the right of the data when data runs outside the current view.
+ /// 0 for a view that slides every time new data is added
+ /// 1 for a view that only slides forward when new data runs off the screen
+ ///
+ public double PaddingFractionX = 0;
+
+ ///
+ /// Defines the amount of whitespace added to the top or bottom of the data when data runs outside the current view.
+ /// 0 sets axis limits to tightly fit the data height
+ /// 1 sets axis limits to double the vertical span in the direction of the vertical overflow
+ ///
+ public double PaddingFractionY = .5;
+
+ public AxisLimits GetAxisLimits(AxisLimits viewLimits, AxisLimits dataLimits)
+ {
+ var padHorizontal = Width * PaddingFractionX;
+ var padVertical = viewLimits.VerticalSpan * PaddingFractionY;
+
+ var xOverflow = dataLimits.Right > viewLimits.Right || dataLimits.Right < viewLimits.Left;
+ var xMax = xOverflow ? dataLimits.Right + padHorizontal : viewLimits.Right;
+ var xMin = xOverflow ? xMax - Width : viewLimits.Left;
+
+ var yOverflow = dataLimits.Bottom < viewLimits.Bottom || dataLimits.Top > viewLimits.Top;
+ var yMin = yOverflow ? dataLimits.Bottom - padVertical : viewLimits.Bottom;
+ var yMax = yOverflow ? dataLimits.Top + padVertical : viewLimits.Top;
+
+ return new AxisLimits(xMin, xMax, yMin, yMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/AxisBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/AxisBase.cs
new file mode 100644
index 000000000..7f696d97e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/AxisBase.cs
@@ -0,0 +1,185 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class AxisBase
+ {
+ public bool IsVisible { get; set; } = true;
+
+ public abstract Edge Edge { get; }
+
+ public virtual CoordinateRangeMutable Range { get; private set; } = CoordinateRangeMutable.NotSet;
+ public float MinimumSize { get; set; } = 0;
+ public float MaximumSize { get; set; } = float.MaxValue;
+
+ public double Min
+ {
+ get => Range.Min;
+ set => Range.Min = value;
+ }
+
+ public double Max
+ {
+ get => Range.Max;
+ set => Range.Max = value;
+ }
+
+ public override string ToString()
+ {
+ return base.ToString() + " " + Range.ToString();
+ }
+
+ public virtual ITickGenerator TickGenerator { get; set; } = null!;
+
+ public Label Label { get; private set; } = new()
+ {
+ Text = string.Empty,
+ FontSize = 16,
+ Bold = true,
+ Rotation = -90,
+ };
+
+ public bool ShowDebugInformation { get; set; } = false;
+
+ public LineStyle FrameLineStyle { get; } = new();
+
+ public TickMarkStyle MajorTickStyle { get; set; } = new()
+ {
+ Length = 4,
+ Width = 1,
+ Color = Colors.Black
+ };
+
+ public TickMarkStyle MinorTickStyle { get; set; } = new()
+ {
+ Length = 2,
+ Width = 1,
+ Color = Colors.Black
+ };
+
+ public Label TickLabelStyle { get; set; } = new()
+ {
+ Alignment = Alignment.MiddleCenter
+ };
+
+ ///
+ /// Apply a single color to all axis components: label, tick labels, tick marks, and frame
+ ///
+ public void Color(Color color)
+ {
+ Label.ForeColor = color;
+ TickLabelStyle.ForeColor = color;
+ MajorTickStyle.Color = color;
+ MinorTickStyle.Color = color;
+ FrameLineStyle.Color = color;
+ }
+
+ ///
+ /// Draw a line along the edge of an axis on the side of the data area
+ ///
+ public static void DrawFrame(RenderPack rp, PixelRect panelRect, Edge edge, LineStyle lineStyle)
+ {
+ PixelLine pxLine = edge switch
+ {
+ Edge.Left => new(panelRect.Right, panelRect.Bottom, panelRect.Right, panelRect.Top),
+ Edge.Right => new(panelRect.Left, panelRect.Bottom, panelRect.Left, panelRect.Top),
+ Edge.Bottom => new(panelRect.Left, panelRect.Top, panelRect.Right, panelRect.Top),
+ Edge.Top => new(panelRect.Left, panelRect.Bottom, panelRect.Right, panelRect.Bottom),
+ _ => throw new NotImplementedException(edge.ToString()),
+ };
+
+ using SKPaint paint = new();
+ Drawing.DrawLine(rp.Canvas, paint, pxLine, lineStyle);
+ }
+
+ private static void DrawTicksHorizontalAxis(RenderPack rp, Label label, PixelRect panelRect, IEnumerable ticks, IAxis axis, TickMarkStyle majorStyle, TickMarkStyle minorStyle)
+ {
+ if (axis.Edge != Edge.Bottom && axis.Edge != Edge.Top)
+ {
+ throw new InvalidOperationException();
+ }
+
+ using SKPaint paint = new();
+ label.ApplyToPaint(paint);
+
+ paint.TextAlign = SKTextAlign.Center;
+
+ foreach (Tick tick in ticks)
+ {
+ // draw tick
+ paint.Color = tick.IsMajor ? majorStyle.Color.ToSkColor() : minorStyle.Color.ToSkColor();
+ paint.StrokeWidth = tick.IsMajor ? majorStyle.Width : minorStyle.Width;
+ float tickLength = tick.IsMajor ? majorStyle.Length : minorStyle.Length;
+ float xPx = axis.GetPixel(tick.Position, panelRect);
+ float y = axis.Edge == Edge.Bottom ? panelRect.Top : panelRect.Bottom;
+ var yEdge = axis.Edge == Edge.Bottom ? y + tickLength : y - tickLength;
+ PixelLine pxLine = new(xPx, y, xPx, yEdge);
+ Drawing.DrawLine(rp.Canvas, paint, pxLine);
+
+ // draw label
+ if (!string.IsNullOrWhiteSpace(tick.Label))
+ {
+ var fontSpacing = axis.Edge == Edge.Bottom ? paint.TextSize : -4;
+ foreach (string line in tick.Label.Split('\n'))
+ {
+ label.Text = line;
+ Pixel px = new(xPx, yEdge + fontSpacing);
+ label.Render(rp.Canvas, px);
+ fontSpacing += paint.TextSize;
+ }
+ }
+ }
+ }
+
+ private static void DrawTicksVerticalAxis(RenderPack rp, Label label, PixelRect panelRect, IEnumerable ticks, IAxis axis, TickMarkStyle majorStyle, TickMarkStyle minorStyle)
+ {
+ if (axis.Edge != Edge.Left && axis.Edge != Edge.Right)
+ {
+ throw new InvalidOperationException();
+ }
+
+ using SKPaint paint = new();
+ label.ApplyToPaint(paint);
+ label.Alignment = axis.Edge == Edge.Left ? Alignment.MiddleRight : Alignment.MiddleLeft;
+
+ foreach (Tick tick in ticks)
+ {
+ // draw tick
+ paint.Color = tick.IsMajor ? majorStyle.Color.ToSkColor() : minorStyle.Color.ToSkColor();
+ paint.StrokeWidth = tick.IsMajor ? majorStyle.Width : minorStyle.Width;
+ float tickLength = tick.IsMajor ? majorStyle.Length : minorStyle.Length;
+ float x = axis.Edge == Edge.Left ? panelRect.Right : panelRect.Left;
+ float y = axis.GetPixel(tick.Position, panelRect);
+ var xEdge = axis.Edge == Edge.Left ? x - tickLength : x + tickLength;
+ PixelLine pxLine = new(x, y, xEdge, y);
+ Drawing.DrawLine(rp.Canvas, paint, pxLine);
+
+ // draw label
+ float majorTickLabelPadding = 7;
+ var labelPos = axis.Edge == Edge.Left ? x - majorTickLabelPadding : x + majorTickLabelPadding;
+ if (!string.IsNullOrWhiteSpace(tick.Label))
+ {
+ string[] lines = tick.Label.Split('\n');
+ double fontSpacing = -paint.TextSize * (lines.Length - 1) / 2;
+ foreach (var line in lines)
+ {
+ label.Text = line;
+ Pixel px = new(labelPos, y + fontSpacing);
+ label.Render(rp.Canvas, px);
+ fontSpacing += paint.TextSize;
+ }
+ }
+ }
+ }
+
+ public static void DrawTicks(RenderPack rp, Label label, PixelRect panelRect, IEnumerable ticks, IAxis axis, TickMarkStyle majorStyle, TickMarkStyle minorStyle)
+ {
+ if (axis.Edge.IsVertical())
+ {
+ DrawTicksVerticalAxis(rp, label, panelRect, ticks, axis, majorStyle, minorStyle);
+ }
+ else
+ {
+ DrawTicksHorizontalAxis(rp, label, panelRect, ticks, axis, majorStyle, minorStyle);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/BottomAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/BottomAxis.cs
new file mode 100644
index 000000000..859afd092
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/BottomAxis.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class BottomAxis : XAxisBase, IXAxis
+ {
+ public override Edge Edge => Edge.Bottom;
+
+ public BottomAxis()
+ {
+ TickGenerator = new NumericAutomatic();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/DateTimeXAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/DateTimeXAxis.cs
new file mode 100644
index 000000000..588891451
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/DateTimeXAxis.cs
@@ -0,0 +1,28 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class DateTimeXAxis : XAxisBase, IXAxis
+ {
+ public override Edge Edge { get; } = Edge.Bottom;
+
+ private IDateTimeTickGenerator _tickGenerator = new DateTimeAutomatic();
+
+ public override ITickGenerator TickGenerator
+ {
+ get => _tickGenerator;
+ set
+ {
+ if (value is not IDateTimeTickGenerator)
+ {
+ throw new ArgumentException($"Date axis must have a {nameof(ITickGenerator)} generator");
+ }
+
+ _tickGenerator = (IDateTimeTickGenerator)value;
+ }
+ }
+
+ public IEnumerable ConvertToCoordinateSpace(IEnumerable dates) =>
+ TickGenerator is IDateTimeTickGenerator dateTickGenerator
+ ? dateTickGenerator.ConvertToCoordinateSpace(dates)
+ : throw new InvalidOperationException("Date axis configured with non-date tick generator");
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/LeftAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/LeftAxis.cs
new file mode 100644
index 000000000..cde7927d2
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/LeftAxis.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class LeftAxis : YAxisBase, IYAxis
+ {
+ public override Edge Edge { get; } = Edge.Left;
+
+ public LeftAxis()
+ {
+ TickGenerator = new NumericAutomatic();
+ Label.Rotation = -90;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredXAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredXAxis.cs
new file mode 100644
index 000000000..ae9338fba
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredXAxis.cs
@@ -0,0 +1,17 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public sealed class MirroredXAxis : XAxisBase, IXAxis
+ {
+ private readonly Edge _edge;
+ private readonly IXAxis _axis;
+ public override Edge Edge => _edge;
+ public override CoordinateRangeMutable Range => new(_axis.Min, _axis.Max);
+
+ public MirroredXAxis(IXAxis axis, Edge? edge)
+ {
+ _axis = axis;
+ _edge = edge ?? axis.Edge;
+ TickGenerator = axis.TickGenerator;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredYAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredYAxis.cs
new file mode 100644
index 000000000..954a9482a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/MirroredYAxis.cs
@@ -0,0 +1,17 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public sealed class MirroredYAxis : YAxisBase, IYAxis
+ {
+ private readonly Edge _edge;
+ private readonly IYAxis _axis;
+ public override Edge Edge => _edge;
+ public override CoordinateRangeMutable Range => new(_axis.Min, _axis.Max);
+
+ public MirroredYAxis(IYAxis axis, Edge? edge)
+ {
+ _axis = axis;
+ _edge = edge ?? axis.Edge;
+ TickGenerator = axis.TickGenerator;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/RightAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/RightAxis.cs
new file mode 100644
index 000000000..d906e27c4
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/RightAxis.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class RightAxis : YAxisBase, IYAxis
+ {
+ public override Edge Edge { get; } = Edge.Right;
+
+ public RightAxis()
+ {
+ TickGenerator = new NumericAutomatic();
+ Label.Rotation = 90;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/TopAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/TopAxis.cs
new file mode 100644
index 000000000..4df5d1e42
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/TopAxis.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class TopAxis : XAxisBase, IXAxis
+ {
+ public override Edge Edge => Edge.Top;
+
+ public TopAxis()
+ {
+ TickGenerator = new NumericAutomatic();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/XAxisBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/XAxisBase.cs
new file mode 100644
index 000000000..bd734e539
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/XAxisBase.cs
@@ -0,0 +1,116 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class XAxisBase : AxisBase, IAxis
+ {
+ public double Width => Range.Span;
+
+ public XAxisBase()
+ {
+ Label.Rotation = 0;
+ }
+
+ public float Measure()
+ {
+ if (!IsVisible)
+ {
+ return 0;
+ }
+
+ var largestTickSize = MeasureTicks();
+ float largestTickLabelSize = Label.Measure().Height;
+ float spaceBetweenTicksAndAxisLabel = 15;
+ return largestTickSize + largestTickLabelSize + spaceBetweenTicksAndAxisLabel;
+ }
+
+ private float MeasureTicks()
+ {
+ using SKPaint paint = new();
+ TickLabelStyle.ApplyToPaint(paint);
+
+ float largestTickHeight = 0;
+
+ foreach (Tick tick in TickGenerator.Ticks)
+ {
+ PixelSize tickLabelSize = Drawing.MeasureString(tick.Label, paint);
+ largestTickHeight = Math.Max(largestTickHeight, tickLabelSize.Height + 10);
+ }
+
+ return largestTickHeight;
+ }
+
+ public float GetPixel(double position, PixelRect dataArea)
+ {
+ var pxPerUnit = dataArea.Width / Width;
+ var unitsFromLeftEdge = position - Min;
+ var pxFromEdge = (float)(unitsFromLeftEdge * pxPerUnit);
+ return dataArea.Left + pxFromEdge;
+ }
+
+ public double GetCoordinate(float pixel, PixelRect dataArea)
+ {
+ var pxPerUnit = dataArea.Width / Width;
+ var pxFromLeftEdge = pixel - dataArea.Left;
+ var unitsFromEdge = pxFromLeftEdge / pxPerUnit;
+ return Min + unitsFromEdge;
+ }
+
+ private PixelRect GetPanelRectangleBottom(PixelRect dataRect, float size, float offset)
+ {
+ return new PixelRect(
+ left: dataRect.Left,
+ right: dataRect.Right,
+ bottom: dataRect.Bottom + offset + size,
+ top: dataRect.Bottom + offset);
+ }
+
+ private PixelRect GetPanelRectangleTop(PixelRect dataRect, float size, float offset)
+ {
+ return new PixelRect(
+ left: dataRect.Left,
+ right: dataRect.Right,
+ bottom: dataRect.Top - offset,
+ top: dataRect.Top - offset - size);
+ }
+
+ public PixelRect GetPanelRect(PixelRect dataRect, float size, float offset)
+ {
+ return Edge == Edge.Bottom
+ ? GetPanelRectangleBottom(dataRect, size, offset)
+ : GetPanelRectangleTop(dataRect, size, offset);
+ }
+
+ public void Render(RenderPack rp, float size, float offset)
+ {
+ if (!IsVisible)
+ {
+ return;
+ }
+
+ PixelRect panelRect = GetPanelRect(rp.DataRect, size, offset);
+
+ float textDistanceFromEdge = 10;
+ Pixel labelPoint = new(panelRect.HorizontalCenter, panelRect.Bottom - textDistanceFromEdge);
+
+ if (ShowDebugInformation)
+ {
+ Drawing.DrawDebugRectangle(rp.Canvas, panelRect, labelPoint, Label.ForeColor);
+ }
+
+ Label.Alignment = Alignment.LowerCenter;
+ Label.Render(rp.Canvas, labelPoint);
+
+ DrawTicks(rp, TickLabelStyle, panelRect, TickGenerator.Ticks, this, MajorTickStyle, MinorTickStyle);
+ DrawFrame(rp, panelRect, Edge, FrameLineStyle);
+ }
+
+ public double GetPixelDistance(double distance, PixelRect dataArea)
+ {
+ return distance * dataArea.Width / Width;
+ }
+
+ public double GetCoordinateDistance(float distance, PixelRect dataArea)
+ {
+ return distance / (dataArea.Width / Width);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/YAxisBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/YAxisBase.cs
new file mode 100644
index 000000000..06c0f0fe8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisPanels/YAxisBase.cs
@@ -0,0 +1,112 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class YAxisBase : AxisBase, IAxis
+ {
+ public double Height => Range.Span;
+
+ public float GetPixel(double position, PixelRect dataArea)
+ {
+ var pxPerUnit = dataArea.Height / Height;
+ var unitsFromMinValue = position - Min;
+ var pxFromEdge = (float)(unitsFromMinValue * pxPerUnit);
+ return dataArea.Bottom - pxFromEdge;
+ }
+
+ public double GetCoordinate(float pixel, PixelRect dataArea)
+ {
+ var pxPerUnit = dataArea.Height / Height;
+ var pxFromMinValue = pixel - dataArea.Bottom;
+ var unitsFromMinValue = pxFromMinValue / pxPerUnit;
+ return Min - unitsFromMinValue;
+ }
+
+ public float Measure()
+ {
+ if (!IsVisible)
+ {
+ return 0;
+ }
+
+ var largestTickSize = MeasureTicks();
+ float largestTickLabelSize = Label.Measure().Height;
+ float spaceBetweenTicksAndAxisLabel = 15;
+ return largestTickSize + largestTickLabelSize + spaceBetweenTicksAndAxisLabel;
+ }
+
+ private float MeasureTicks()
+ {
+ using SKPaint paint = new();
+ TickLabelStyle.ApplyToPaint(paint);
+
+ float largestTickWidth = 0;
+
+ foreach (Tick tick in TickGenerator.Ticks)
+ {
+ PixelSize tickLabelSize = Drawing.MeasureString(tick.Label, paint);
+ largestTickWidth = Math.Max(largestTickWidth, tickLabelSize.Width + 10);
+ }
+
+ return largestTickWidth;
+ }
+
+ private PixelRect GetPanelRectangleLeft(PixelRect dataRect, float size, float offset)
+ {
+ return new PixelRect(
+ left: dataRect.Left - offset - size,
+ right: dataRect.Left - offset,
+ bottom: dataRect.Bottom,
+ top: dataRect.Top);
+ }
+
+ private PixelRect GetPanelRectangleRight(PixelRect dataRect, float size, float offset)
+ {
+ return new PixelRect(
+ left: dataRect.Right + offset,
+ right: dataRect.Right + offset + size,
+ bottom: dataRect.Bottom,
+ top: dataRect.Top);
+ }
+
+ public PixelRect GetPanelRect(PixelRect dataRect, float size, float offset)
+ {
+ return Edge == Edge.Left
+ ? GetPanelRectangleLeft(dataRect, size, offset)
+ : GetPanelRectangleRight(dataRect, size, offset);
+ }
+
+ public void Render(RenderPack rp, float size, float offset)
+ {
+ if (!IsVisible)
+ {
+ return;
+ }
+
+ PixelRect panelRect = GetPanelRect(rp.DataRect, size, offset);
+
+ float textDistanceFromEdge = 10;
+ var labelX = Edge == Edge.Left ? panelRect.Left + textDistanceFromEdge : panelRect.Right - textDistanceFromEdge;
+ Pixel labelPoint = new(labelX, rp.DataRect.VerticalCenter);
+
+ if (ShowDebugInformation)
+ {
+ Drawing.DrawDebugRectangle(rp.Canvas, panelRect, labelPoint, Label.ForeColor);
+ }
+
+ Label.Alignment = Alignment.UpperCenter;
+ Label.Render(rp.Canvas, labelPoint);
+
+ DrawTicks(rp, TickLabelStyle, panelRect, TickGenerator.Ticks, this, MajorTickStyle, MinorTickStyle);
+ DrawFrame(rp, panelRect, Edge, FrameLineStyle);
+ }
+
+ public double GetPixelDistance(double distance, PixelRect dataArea)
+ {
+ return distance * dataArea.Height / Height;
+ }
+
+ public double GetCoordinateDistance(float distance, PixelRect dataArea)
+ {
+ return distance / (dataArea.Height / Height);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedHorizontal.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedHorizontal.cs
new file mode 100644
index 000000000..50a883ecb
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedHorizontal.cs
@@ -0,0 +1,26 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class LockedHorizontal : IAxisRule
+ {
+ readonly IXAxis _xAxis;
+
+ public LockedHorizontal(IXAxis xAxis)
+ {
+ _xAxis = xAxis;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ // rules that refer to the last render must wait for a render to occur
+ if (rp.Plot.LastRender.Count == 0)
+ {
+ return;
+ }
+
+ // TODO: reference the correct axis from the previous render
+ double xMin = rp.Plot.LastRender.AxisLimits.Left;
+ double xMax = rp.Plot.LastRender.AxisLimits.Right;
+ _xAxis.Range.Set(xMin, xMax);
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedVertical.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedVertical.cs
new file mode 100644
index 000000000..ff7fffd23
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/LockedVertical.cs
@@ -0,0 +1,26 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class LockedVertical : IAxisRule
+ {
+ private readonly IYAxis _yAxis;
+
+ public LockedVertical(IYAxis yAxis)
+ {
+ _yAxis = yAxis;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ // rules that refer to the last render must wait for a render to occur
+ if (rp.Plot.LastRender.Count == 0)
+ {
+ return;
+ }
+
+ // TODO: reference the correct axis from the previous render
+ double yMin = rp.Plot.LastRender.AxisLimits.Bottom;
+ double yTop = rp.Plot.LastRender.AxisLimits.Top;
+ _yAxis.Range.Set(yMin, yTop);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumBoundary.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumBoundary.cs
new file mode 100644
index 000000000..6668854fa
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumBoundary.cs
@@ -0,0 +1,46 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class MaximumBoundary : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+ public AxisLimits Limits { get; set; }
+
+ public MaximumBoundary(IXAxis xAxis, IYAxis yAxis, AxisLimits limits)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ Limits = limits;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ double xSpan = Math.Min(_xAxis.Range.Span, Limits.HorizontalSpan);
+ double ySpan = Math.Min(_yAxis.Range.Span, Limits.VerticalSpan);
+
+ if (_xAxis.Range.Max > Limits.Right)
+ {
+ _xAxis.Range.Max = Limits.Right;
+ _xAxis.Range.Min = Limits.Right - xSpan;
+ }
+
+ if (_xAxis.Range.Min < Limits.Left)
+ {
+ _xAxis.Range.Min = Limits.Left;
+ _xAxis.Range.Max = Limits.Left + xSpan;
+ }
+
+ if (_yAxis.Range.Max > Limits.Top)
+ {
+ _yAxis.Range.Max = Limits.Top;
+ _yAxis.Range.Min = Limits.Top - ySpan;
+ }
+
+ if (_yAxis.Range.Min < Limits.Bottom)
+ {
+ _yAxis.Range.Min = Limits.Bottom;
+ _yAxis.Range.Max = Limits.Bottom + ySpan;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumSpan.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumSpan.cs
new file mode 100644
index 000000000..254b08b07
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MaximumSpan.cs
@@ -0,0 +1,36 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class MaximumSpan : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+
+ public double XSpan;
+ public double YSpan;
+
+ public MaximumSpan(IXAxis xAxis, IYAxis yAxis, double xSpan = double.Epsilon, double ySpan = double.Epsilon)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ XSpan = xSpan;
+ YSpan = ySpan;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ if (_xAxis.Range.Span > XSpan)
+ {
+ var xMin = _xAxis.Range.Center - XSpan / 2;
+ var xMax = _xAxis.Range.Center + XSpan / 2;
+ _xAxis.Range.Set(xMin, xMax);
+ }
+
+ if (_yAxis.Range.Span > YSpan)
+ {
+ var yMin = _yAxis.Range.Center - YSpan / 2;
+ var yMax = _yAxis.Range.Center + YSpan / 2;
+ _yAxis.Range.Set(yMin, yMax);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumBoundary.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumBoundary.cs
new file mode 100644
index 000000000..e8b6f76c0
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumBoundary.cs
@@ -0,0 +1,46 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class MinimumBoundary : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+ public AxisLimits Limits { get; set; }
+
+ public MinimumBoundary(IXAxis xAxis, IYAxis yAxis, AxisLimits limits)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ Limits = limits;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ double xSpan = Math.Max(_xAxis.Range.Span, Limits.HorizontalSpan);
+ double ySpan = Math.Max(_yAxis.Range.Span, Limits.VerticalSpan);
+
+ if (_xAxis.Range.Max < Limits.Right)
+ {
+ _xAxis.Range.Max = Limits.Right;
+ _xAxis.Range.Min = Limits.Right - xSpan;
+ }
+
+ if (_xAxis.Range.Min > Limits.Left)
+ {
+ _xAxis.Range.Min = Limits.Left;
+ _xAxis.Range.Max = Limits.Left + xSpan;
+ }
+
+ if (_yAxis.Range.Max < Limits.Top)
+ {
+ _yAxis.Range.Max = Limits.Top;
+ _yAxis.Range.Min = Limits.Top - ySpan;
+ }
+
+ if (_yAxis.Range.Min > Limits.Bottom)
+ {
+ _yAxis.Range.Min = Limits.Bottom;
+ _yAxis.Range.Max = Limits.Bottom + ySpan;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumSpan.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumSpan.cs
new file mode 100644
index 000000000..2a6df1912
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/MinimumSpan.cs
@@ -0,0 +1,36 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class MinimumSpan : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+
+ public double XSpan;
+ public double YSpan;
+
+ public MinimumSpan(IXAxis xAxis, IYAxis yAxis, double xSpan = double.Epsilon, double ySpan = double.Epsilon)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ XSpan = xSpan;
+ YSpan = ySpan;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ if (_xAxis.Range.Span < XSpan)
+ {
+ var xMin = _xAxis.Range.Center - XSpan / 2;
+ var xMax = _xAxis.Range.Center + XSpan / 2;
+ _xAxis.Range.Set(xMin, xMax);
+ }
+
+ if (_yAxis.Range.Span < YSpan)
+ {
+ var yMin = _yAxis.Range.Center - YSpan / 2;
+ var yMax = _yAxis.Range.Center + YSpan / 2;
+ _yAxis.Range.Set(yMin, yMax);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveX.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveX.cs
new file mode 100644
index 000000000..e5781147c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveX.cs
@@ -0,0 +1,29 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SquarePreserveX : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+
+ public SquarePreserveX(IXAxis xAxis, IYAxis yAxis)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ // rules that refer to the datarect must wait for the layout to occur
+ if (beforeLayout)
+ {
+ return;
+ }
+
+ double unitsPerPxX = _xAxis.Width / rp.DataRect.Width;
+ var halfHeight = rp.DataRect.Height / 2 * unitsPerPxX;
+ var yMin = _yAxis.Range.Center - halfHeight;
+ var yMax = _yAxis.Range.Center + halfHeight;
+ _yAxis.Range.Set(yMin, yMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveY.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveY.cs
new file mode 100644
index 000000000..2351b53f8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquarePreserveY.cs
@@ -0,0 +1,29 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SquarePreserveY : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+
+ public SquarePreserveY(IXAxis xAxis, IYAxis yAxis)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ // rules that refer to the datarect must wait for the layout to occur
+ if (beforeLayout)
+ {
+ return;
+ }
+
+ double unitsPerPxY = _yAxis.Height / rp.DataRect.Height;
+ var halfWidth = rp.DataRect.Width / 2 * unitsPerPxY;
+ var xMin = _xAxis.Range.Center - halfWidth;
+ var xMax = _xAxis.Range.Center + halfWidth;
+ _xAxis.Range.Set(xMin, xMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquareZoomOut.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquareZoomOut.cs
new file mode 100644
index 000000000..acea6cb63
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/AxisRules/SquareZoomOut.cs
@@ -0,0 +1,37 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SquareZoomOut : IAxisRule
+ {
+ private readonly IXAxis _xAxis;
+ private readonly IYAxis _yAxis;
+
+ public SquareZoomOut(IXAxis xAxis, IYAxis yAxis)
+ {
+ _xAxis = xAxis;
+ _yAxis = yAxis;
+ }
+
+ public void Apply(RenderPack rp, bool beforeLayout)
+ {
+ // rules that refer to the datarect must wait for the layout to occur
+ if (beforeLayout)
+ {
+ return;
+ }
+
+ double unitsPerPxX = _xAxis.Width / rp.DataRect.Width;
+ double unitsPerPxY = _yAxis.Height / rp.DataRect.Height;
+ var maxUnitsPerPx = Math.Max(unitsPerPxX, unitsPerPxY);
+
+ var halfHeight = rp.DataRect.Height / 2 * maxUnitsPerPx;
+ var yMin = _yAxis.Range.Center - halfHeight;
+ var yMax = _yAxis.Range.Center + halfHeight;
+ _yAxis.Range.Set(yMin, yMax);
+
+ var halfWidth = rp.DataRect.Width / 2 * maxUnitsPerPx;
+ var xMin = _xAxis.Range.Center - halfWidth;
+ var xMax = _xAxis.Range.Center + halfWidth;
+ _xAxis.Range.Set(xMin, xMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Algae.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Algae.cs
new file mode 100644
index 000000000..e59dfb08e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Algae.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Algae : ByteColormapBase
+ {
+ public override string Name => "Algae";
+ public override (byte, byte, byte)[] Rgbs => _rgbs;
+
+ private static readonly (byte r, byte g, byte b)[] _rgbs = new (byte, byte, byte)[] {
+ ( 215, 249, 208 ),
+ ( 214, 248, 206 ),
+ ( 212, 247, 205 ),
+ ( 211, 246, 203 ),
+ ( 210, 245, 202 ),
+ ( 209, 244, 200 ),
+ ( 207, 244, 199 ),
+ ( 206, 243, 197 ),
+ ( 205, 242, 196 ),
+ ( 204, 241, 195 ),
+ ( 202, 240, 193 ),
+ ( 201, 239, 192 ),
+ ( 200, 238, 190 ),
+ ( 199, 237, 189 ),
+ ( 197, 236, 187 ),
+ ( 196, 235, 186 ),
+ ( 195, 235, 185 ),
+ ( 194, 234, 183 ),
+ ( 192, 233, 182 ),
+ ( 191, 232, 180 ),
+ ( 190, 231, 179 ),
+ ( 189, 230, 177 ),
+ ( 187, 229, 176 ),
+ ( 186, 228, 175 ),
+ ( 185, 228, 173 ),
+ ( 184, 227, 172 ),
+ ( 182, 226, 171 ),
+ ( 181, 225, 169 ),
+ ( 180, 224, 168 ),
+ ( 178, 223, 166 ),
+ ( 177, 222, 165 ),
+ ( 176, 222, 164 ),
+ ( 175, 221, 162 ),
+ ( 173, 220, 161 ),
+ ( 172, 219, 160 ),
+ ( 171, 218, 158 ),
+ ( 170, 218, 157 ),
+ ( 168, 217, 156 ),
+ ( 167, 216, 154 ),
+ ( 166, 215, 153 ),
+ ( 164, 214, 152 ),
+ ( 163, 213, 150 ),
+ ( 162, 213, 149 ),
+ ( 160, 212, 148 ),
+ ( 159, 211, 146 ),
+ ( 158, 210, 145 ),
+ ( 157, 209, 144 ),
+ ( 155, 209, 143 ),
+ ( 154, 208, 141 ),
+ ( 153, 207, 140 ),
+ ( 151, 206, 139 ),
+ ( 150, 205, 138 ),
+ ( 149, 205, 136 ),
+ ( 147, 204, 135 ),
+ ( 146, 203, 134 ),
+ ( 145, 202, 133 ),
+ ( 143, 202, 131 ),
+ ( 142, 201, 130 ),
+ ( 140, 200, 129 ),
+ ( 139, 199, 128 ),
+ ( 138, 199, 126 ),
+ ( 136, 198, 125 ),
+ ( 135, 197, 124 ),
+ ( 133, 196, 123 ),
+ ( 132, 196, 122 ),
+ ( 131, 195, 121 ),
+ ( 129, 194, 119 ),
+ ( 128, 193, 118 ),
+ ( 126, 193, 117 ),
+ ( 125, 192, 116 ),
+ ( 123, 191, 115 ),
+ ( 122, 190, 114 ),
+ ( 120, 190, 113 ),
+ ( 119, 189, 111 ),
+ ( 117, 188, 110 ),
+ ( 116, 187, 109 ),
+ ( 114, 187, 108 ),
+ ( 113, 186, 107 ),
+ ( 111, 185, 106 ),
+ ( 110, 185, 105 ),
+ ( 108, 184, 104 ),
+ ( 107, 183, 103 ),
+ ( 105, 182, 102 ),
+ ( 103, 182, 101 ),
+ ( 102, 181, 100 ),
+ ( 100, 180, 99 ),
+ ( 98, 180, 98 ),
+ ( 97, 179, 97 ),
+ ( 95, 178, 96 ),
+ ( 93, 178, 95 ),
+ ( 91, 177, 94 ),
+ ( 90, 176, 93 ),
+ ( 88, 175, 93 ),
+ ( 86, 175, 92 ),
+ ( 84, 174, 91 ),
+ ( 82, 173, 90 ),
+ ( 80, 173, 89 ),
+ ( 78, 172, 89 ),
+ ( 76, 171, 88 ),
+ ( 74, 171, 87 ),
+ ( 72, 170, 87 ),
+ ( 70, 169, 86 ),
+ ( 68, 168, 85 ),
+ ( 66, 168, 85 ),
+ ( 63, 167, 84 ),
+ ( 61, 166, 84 ),
+ ( 59, 166, 84 ),
+ ( 57, 165, 83 ),
+ ( 55, 164, 83 ),
+ ( 52, 163, 83 ),
+ ( 50, 163, 82 ),
+ ( 48, 162, 82 ),
+ ( 46, 161, 82 ),
+ ( 44, 160, 82 ),
+ ( 42, 160, 82 ),
+ ( 40, 159, 81 ),
+ ( 38, 158, 81 ),
+ ( 36, 157, 81 ),
+ ( 34, 156, 81 ),
+ ( 32, 156, 81 ),
+ ( 30, 155, 81 ),
+ ( 28, 154, 81 ),
+ ( 27, 153, 81 ),
+ ( 25, 152, 81 ),
+ ( 24, 151, 80 ),
+ ( 22, 150, 80 ),
+ ( 21, 150, 80 ),
+ ( 19, 149, 80 ),
+ ( 18, 148, 80 ),
+ ( 16, 147, 80 ),
+ ( 15, 146, 80 ),
+ ( 14, 145, 80 ),
+ ( 13, 144, 79 ),
+ ( 12, 143, 79 ),
+ ( 11, 143, 79 ),
+ ( 10, 142, 79 ),
+ ( 9, 141, 79 ),
+ ( 9, 140, 79 ),
+ ( 8, 139, 78 ),
+ ( 8, 138, 78 ),
+ ( 7, 137, 78 ),
+ ( 7, 136, 78 ),
+ ( 7, 135, 77 ),
+ ( 7, 134, 77 ),
+ ( 7, 134, 77 ),
+ ( 7, 133, 77 ),
+ ( 7, 132, 77 ),
+ ( 7, 131, 76 ),
+ ( 7, 130, 76 ),
+ ( 8, 129, 76 ),
+ ( 8, 128, 75 ),
+ ( 8, 127, 75 ),
+ ( 9, 126, 75 ),
+ ( 9, 125, 75 ),
+ ( 10, 124, 74 ),
+ ( 10, 124, 74 ),
+ ( 11, 123, 74 ),
+ ( 11, 122, 73 ),
+ ( 12, 121, 73 ),
+ ( 12, 120, 73 ),
+ ( 13, 119, 72 ),
+ ( 13, 118, 72 ),
+ ( 14, 117, 72 ),
+ ( 14, 116, 71 ),
+ ( 15, 115, 71 ),
+ ( 15, 115, 71 ),
+ ( 16, 114, 70 ),
+ ( 16, 113, 70 ),
+ ( 17, 112, 69 ),
+ ( 17, 111, 69 ),
+ ( 18, 110, 69 ),
+ ( 18, 109, 68 ),
+ ( 18, 108, 68 ),
+ ( 19, 107, 67 ),
+ ( 19, 106, 67 ),
+ ( 20, 106, 67 ),
+ ( 20, 105, 66 ),
+ ( 20, 104, 66 ),
+ ( 21, 103, 65 ),
+ ( 21, 102, 65 ),
+ ( 21, 101, 64 ),
+ ( 22, 100, 64 ),
+ ( 22, 99, 64 ),
+ ( 22, 98, 63 ),
+ ( 23, 98, 63 ),
+ ( 23, 97, 62 ),
+ ( 23, 96, 62 ),
+ ( 23, 95, 61 ),
+ ( 24, 94, 61 ),
+ ( 24, 93, 60 ),
+ ( 24, 92, 60 ),
+ ( 24, 91, 59 ),
+ ( 24, 91, 59 ),
+ ( 25, 90, 58 ),
+ ( 25, 89, 58 ),
+ ( 25, 88, 57 ),
+ ( 25, 87, 57 ),
+ ( 25, 86, 56 ),
+ ( 25, 85, 56 ),
+ ( 25, 84, 55 ),
+ ( 25, 84, 55 ),
+ ( 26, 83, 54 ),
+ ( 26, 82, 53 ),
+ ( 26, 81, 53 ),
+ ( 26, 80, 52 ),
+ ( 26, 79, 52 ),
+ ( 26, 78, 51 ),
+ ( 26, 77, 51 ),
+ ( 26, 77, 50 ),
+ ( 26, 76, 50 ),
+ ( 26, 75, 49 ),
+ ( 26, 74, 48 ),
+ ( 26, 73, 48 ),
+ ( 26, 72, 47 ),
+ ( 26, 71, 47 ),
+ ( 26, 71, 46 ),
+ ( 26, 70, 46 ),
+ ( 26, 69, 45 ),
+ ( 26, 68, 44 ),
+ ( 26, 67, 44 ),
+ ( 25, 66, 43 ),
+ ( 25, 65, 43 ),
+ ( 25, 64, 42 ),
+ ( 25, 64, 41 ),
+ ( 25, 63, 41 ),
+ ( 25, 62, 40 ),
+ ( 25, 61, 39 ),
+ ( 25, 60, 39 ),
+ ( 24, 59, 38 ),
+ ( 24, 59, 38 ),
+ ( 24, 58, 37 ),
+ ( 24, 57, 36 ),
+ ( 24, 56, 36 ),
+ ( 24, 55, 35 ),
+ ( 23, 54, 34 ),
+ ( 23, 53, 34 ),
+ ( 23, 53, 33 ),
+ ( 23, 52, 32 ),
+ ( 23, 51, 32 ),
+ ( 22, 50, 31 ),
+ ( 22, 49, 30 ),
+ ( 22, 48, 30 ),
+ ( 22, 47, 29 ),
+ ( 21, 47, 28 ),
+ ( 21, 46, 28 ),
+ ( 21, 45, 27 ),
+ ( 20, 44, 26 ),
+ ( 20, 43, 26 ),
+ ( 20, 42, 25 ),
+ ( 20, 41, 24 ),
+ ( 19, 41, 24 ),
+ ( 19, 40, 23 ),
+ ( 19, 39, 22 ),
+ ( 18, 38, 22 ),
+ ( 18, 37, 21 ),
+ ( 18, 36, 20 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Amp.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Amp.cs
new file mode 100644
index 000000000..4cae3a31e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Amp.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Amp : ByteColormapBase
+ {
+ public override string Name => "Amp";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 241, 237, 236 ),
+ ( 241, 236, 235 ),
+ ( 240, 235, 233 ),
+ ( 239, 233, 232 ),
+ ( 239, 232, 231 ),
+ ( 238, 231, 229 ),
+ ( 238, 230, 228 ),
+ ( 237, 229, 227 ),
+ ( 237, 227, 225 ),
+ ( 236, 226, 224 ),
+ ( 236, 225, 222 ),
+ ( 235, 224, 221 ),
+ ( 235, 223, 220 ),
+ ( 234, 221, 218 ),
+ ( 234, 220, 217 ),
+ ( 233, 219, 215 ),
+ ( 233, 218, 214 ),
+ ( 233, 217, 212 ),
+ ( 232, 216, 211 ),
+ ( 232, 214, 210 ),
+ ( 231, 213, 208 ),
+ ( 231, 212, 207 ),
+ ( 230, 211, 205 ),
+ ( 230, 210, 204 ),
+ ( 230, 209, 202 ),
+ ( 229, 207, 201 ),
+ ( 229, 206, 200 ),
+ ( 228, 205, 198 ),
+ ( 228, 204, 197 ),
+ ( 228, 203, 195 ),
+ ( 227, 201, 194 ),
+ ( 227, 200, 192 ),
+ ( 226, 199, 191 ),
+ ( 226, 198, 189 ),
+ ( 226, 197, 188 ),
+ ( 225, 196, 187 ),
+ ( 225, 195, 185 ),
+ ( 225, 193, 184 ),
+ ( 224, 192, 182 ),
+ ( 224, 191, 181 ),
+ ( 223, 190, 179 ),
+ ( 223, 189, 178 ),
+ ( 223, 188, 176 ),
+ ( 222, 186, 175 ),
+ ( 222, 185, 174 ),
+ ( 222, 184, 172 ),
+ ( 221, 183, 171 ),
+ ( 221, 182, 169 ),
+ ( 221, 181, 168 ),
+ ( 220, 180, 166 ),
+ ( 220, 178, 165 ),
+ ( 220, 177, 163 ),
+ ( 219, 176, 162 ),
+ ( 219, 175, 161 ),
+ ( 219, 174, 159 ),
+ ( 218, 173, 158 ),
+ ( 218, 172, 156 ),
+ ( 217, 170, 155 ),
+ ( 217, 169, 153 ),
+ ( 217, 168, 152 ),
+ ( 216, 167, 150 ),
+ ( 216, 166, 149 ),
+ ( 216, 165, 148 ),
+ ( 215, 164, 146 ),
+ ( 215, 162, 145 ),
+ ( 215, 161, 143 ),
+ ( 214, 160, 142 ),
+ ( 214, 159, 140 ),
+ ( 214, 158, 139 ),
+ ( 213, 157, 137 ),
+ ( 213, 156, 136 ),
+ ( 213, 154, 135 ),
+ ( 212, 153, 133 ),
+ ( 212, 152, 132 ),
+ ( 212, 151, 130 ),
+ ( 211, 150, 129 ),
+ ( 211, 149, 127 ),
+ ( 211, 148, 126 ),
+ ( 210, 146, 125 ),
+ ( 210, 145, 123 ),
+ ( 210, 144, 122 ),
+ ( 209, 143, 120 ),
+ ( 209, 142, 119 ),
+ ( 209, 141, 118 ),
+ ( 208, 140, 116 ),
+ ( 208, 139, 115 ),
+ ( 208, 137, 113 ),
+ ( 207, 136, 112 ),
+ ( 207, 135, 111 ),
+ ( 207, 134, 109 ),
+ ( 206, 133, 108 ),
+ ( 206, 132, 106 ),
+ ( 205, 131, 105 ),
+ ( 205, 129, 104 ),
+ ( 205, 128, 102 ),
+ ( 204, 127, 101 ),
+ ( 204, 126, 100 ),
+ ( 204, 125, 98 ),
+ ( 203, 124, 97 ),
+ ( 203, 122, 96 ),
+ ( 203, 121, 94 ),
+ ( 202, 120, 93 ),
+ ( 202, 119, 91 ),
+ ( 201, 118, 90 ),
+ ( 201, 117, 89 ),
+ ( 201, 116, 87 ),
+ ( 200, 114, 86 ),
+ ( 200, 113, 85 ),
+ ( 200, 112, 84 ),
+ ( 199, 111, 82 ),
+ ( 199, 110, 81 ),
+ ( 198, 109, 80 ),
+ ( 198, 107, 78 ),
+ ( 198, 106, 77 ),
+ ( 197, 105, 76 ),
+ ( 197, 104, 74 ),
+ ( 197, 103, 73 ),
+ ( 196, 101, 72 ),
+ ( 196, 100, 71 ),
+ ( 195, 99, 70 ),
+ ( 195, 98, 68 ),
+ ( 195, 97, 67 ),
+ ( 194, 95, 66 ),
+ ( 194, 94, 65 ),
+ ( 193, 93, 63 ),
+ ( 193, 92, 62 ),
+ ( 192, 91, 61 ),
+ ( 192, 89, 60 ),
+ ( 192, 88, 59 ),
+ ( 191, 87, 58 ),
+ ( 191, 86, 57 ),
+ ( 190, 84, 56 ),
+ ( 190, 83, 54 ),
+ ( 189, 82, 53 ),
+ ( 189, 81, 52 ),
+ ( 189, 79, 51 ),
+ ( 188, 78, 50 ),
+ ( 188, 77, 49 ),
+ ( 187, 76, 48 ),
+ ( 187, 74, 48 ),
+ ( 186, 73, 47 ),
+ ( 186, 72, 46 ),
+ ( 185, 70, 45 ),
+ ( 185, 69, 44 ),
+ ( 184, 68, 43 ),
+ ( 184, 66, 43 ),
+ ( 183, 65, 42 ),
+ ( 183, 64, 41 ),
+ ( 182, 63, 41 ),
+ ( 181, 61, 40 ),
+ ( 181, 60, 39 ),
+ ( 180, 59, 39 ),
+ ( 180, 57, 38 ),
+ ( 179, 56, 38 ),
+ ( 178, 55, 38 ),
+ ( 178, 53, 37 ),
+ ( 177, 52, 37 ),
+ ( 176, 51, 37 ),
+ ( 176, 49, 37 ),
+ ( 175, 48, 36 ),
+ ( 174, 47, 36 ),
+ ( 174, 45, 36 ),
+ ( 173, 44, 36 ),
+ ( 172, 43, 36 ),
+ ( 171, 42, 36 ),
+ ( 170, 40, 36 ),
+ ( 170, 39, 36 ),
+ ( 169, 38, 36 ),
+ ( 168, 37, 36 ),
+ ( 167, 36, 36 ),
+ ( 166, 34, 37 ),
+ ( 165, 33, 37 ),
+ ( 164, 32, 37 ),
+ ( 163, 31, 37 ),
+ ( 162, 30, 37 ),
+ ( 161, 29, 37 ),
+ ( 160, 28, 38 ),
+ ( 159, 27, 38 ),
+ ( 158, 26, 38 ),
+ ( 157, 25, 38 ),
+ ( 156, 24, 39 ),
+ ( 155, 23, 39 ),
+ ( 154, 22, 39 ),
+ ( 153, 21, 39 ),
+ ( 152, 21, 39 ),
+ ( 151, 20, 40 ),
+ ( 149, 19, 40 ),
+ ( 148, 19, 40 ),
+ ( 147, 18, 40 ),
+ ( 146, 17, 40 ),
+ ( 145, 17, 41 ),
+ ( 144, 16, 41 ),
+ ( 142, 16, 41 ),
+ ( 141, 16, 41 ),
+ ( 140, 15, 41 ),
+ ( 139, 15, 41 ),
+ ( 137, 15, 41 ),
+ ( 136, 15, 41 ),
+ ( 135, 14, 41 ),
+ ( 133, 14, 41 ),
+ ( 132, 14, 41 ),
+ ( 131, 14, 41 ),
+ ( 129, 14, 41 ),
+ ( 128, 14, 41 ),
+ ( 127, 14, 41 ),
+ ( 125, 14, 41 ),
+ ( 124, 14, 41 ),
+ ( 123, 14, 41 ),
+ ( 121, 14, 41 ),
+ ( 120, 14, 40 ),
+ ( 119, 14, 40 ),
+ ( 117, 14, 40 ),
+ ( 116, 14, 40 ),
+ ( 115, 14, 39 ),
+ ( 113, 14, 39 ),
+ ( 112, 14, 39 ),
+ ( 111, 14, 38 ),
+ ( 109, 14, 38 ),
+ ( 108, 15, 38 ),
+ ( 107, 15, 37 ),
+ ( 105, 15, 37 ),
+ ( 104, 15, 37 ),
+ ( 103, 15, 36 ),
+ ( 101, 15, 36 ),
+ ( 100, 14, 35 ),
+ ( 99, 14, 35 ),
+ ( 97, 14, 34 ),
+ ( 96, 14, 34 ),
+ ( 95, 14, 33 ),
+ ( 93, 14, 33 ),
+ ( 92, 14, 33 ),
+ ( 91, 14, 32 ),
+ ( 90, 14, 31 ),
+ ( 88, 14, 31 ),
+ ( 87, 14, 30 ),
+ ( 86, 14, 30 ),
+ ( 84, 13, 29 ),
+ ( 83, 13, 29 ),
+ ( 82, 13, 28 ),
+ ( 81, 13, 28 ),
+ ( 79, 13, 27 ),
+ ( 78, 13, 26 ),
+ ( 77, 12, 26 ),
+ ( 75, 12, 25 ),
+ ( 74, 12, 25 ),
+ ( 73, 12, 24 ),
+ ( 72, 11, 23 ),
+ ( 70, 11, 23 ),
+ ( 69, 11, 22 ),
+ ( 68, 11, 22 ),
+ ( 67, 10, 21 ),
+ ( 65, 10, 20 ),
+ ( 64, 10, 20 ),
+ ( 63, 10, 19 ),
+ ( 61, 9, 18 ),
+ ( 60, 9, 18 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ArgbColormapBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ArgbColormapBase.cs
new file mode 100644
index 000000000..01c515aa8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ArgbColormapBase.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot;
+
+public abstract class ArgbColormapBase : ColormapBase
+{
+ public abstract uint[] Argbs { get; }
+
+ public override Color GetColor(double normalizedIntensity)
+ {
+ var argb = Argbs[(int)(normalizedIntensity * (Argbs.Length - 1))];
+ return Color.FromArgb(argb);
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Balance.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Balance.cs
new file mode 100644
index 000000000..7acd78f8c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Balance.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Balance : ByteColormapBase
+ {
+ public override string Name => "Balance";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 24, 28, 67 ),
+ ( 25, 30, 70 ),
+ ( 26, 31, 73 ),
+ ( 27, 33, 76 ),
+ ( 28, 34, 79 ),
+ ( 29, 35, 82 ),
+ ( 30, 37, 85 ),
+ ( 31, 38, 88 ),
+ ( 32, 39, 91 ),
+ ( 33, 41, 95 ),
+ ( 33, 42, 98 ),
+ ( 34, 43, 101 ),
+ ( 35, 45, 105 ),
+ ( 36, 46, 108 ),
+ ( 37, 47, 111 ),
+ ( 37, 48, 115 ),
+ ( 38, 50, 118 ),
+ ( 39, 51, 122 ),
+ ( 39, 52, 125 ),
+ ( 40, 54, 129 ),
+ ( 40, 55, 132 ),
+ ( 41, 56, 136 ),
+ ( 41, 58, 140 ),
+ ( 41, 59, 143 ),
+ ( 41, 60, 147 ),
+ ( 41, 62, 151 ),
+ ( 41, 63, 154 ),
+ ( 41, 64, 158 ),
+ ( 41, 66, 162 ),
+ ( 40, 67, 165 ),
+ ( 39, 69, 169 ),
+ ( 38, 71, 172 ),
+ ( 37, 72, 176 ),
+ ( 35, 74, 179 ),
+ ( 33, 76, 182 ),
+ ( 31, 78, 184 ),
+ ( 28, 80, 186 ),
+ ( 25, 82, 188 ),
+ ( 22, 85, 189 ),
+ ( 19, 87, 190 ),
+ ( 16, 89, 190 ),
+ ( 13, 91, 190 ),
+ ( 12, 94, 190 ),
+ ( 10, 96, 190 ),
+ ( 10, 98, 190 ),
+ ( 10, 100, 190 ),
+ ( 11, 102, 189 ),
+ ( 13, 104, 189 ),
+ ( 15, 106, 189 ),
+ ( 17, 108, 188 ),
+ ( 19, 110, 188 ),
+ ( 22, 112, 188 ),
+ ( 25, 114, 187 ),
+ ( 27, 116, 187 ),
+ ( 30, 118, 187 ),
+ ( 33, 120, 187 ),
+ ( 35, 122, 186 ),
+ ( 38, 123, 186 ),
+ ( 41, 125, 186 ),
+ ( 43, 127, 186 ),
+ ( 46, 129, 186 ),
+ ( 48, 131, 186 ),
+ ( 51, 132, 186 ),
+ ( 54, 134, 186 ),
+ ( 56, 136, 186 ),
+ ( 59, 137, 186 ),
+ ( 62, 139, 186 ),
+ ( 64, 141, 186 ),
+ ( 67, 143, 186 ),
+ ( 70, 144, 186 ),
+ ( 72, 146, 186 ),
+ ( 75, 148, 186 ),
+ ( 78, 149, 186 ),
+ ( 81, 151, 186 ),
+ ( 83, 153, 186 ),
+ ( 86, 154, 187 ),
+ ( 89, 156, 187 ),
+ ( 92, 157, 187 ),
+ ( 95, 159, 187 ),
+ ( 98, 160, 187 ),
+ ( 101, 162, 188 ),
+ ( 104, 164, 188 ),
+ ( 107, 165, 188 ),
+ ( 110, 167, 189 ),
+ ( 113, 168, 189 ),
+ ( 117, 170, 190 ),
+ ( 120, 171, 190 ),
+ ( 123, 172, 191 ),
+ ( 126, 174, 191 ),
+ ( 129, 175, 192 ),
+ ( 133, 177, 192 ),
+ ( 136, 178, 193 ),
+ ( 139, 180, 194 ),
+ ( 142, 181, 195 ),
+ ( 145, 183, 195 ),
+ ( 148, 184, 196 ),
+ ( 152, 186, 197 ),
+ ( 155, 187, 198 ),
+ ( 158, 188, 199 ),
+ ( 161, 190, 200 ),
+ ( 164, 191, 201 ),
+ ( 167, 193, 202 ),
+ ( 170, 194, 203 ),
+ ( 173, 196, 204 ),
+ ( 176, 197, 205 ),
+ ( 179, 199, 206 ),
+ ( 182, 201, 207 ),
+ ( 185, 202, 208 ),
+ ( 188, 204, 210 ),
+ ( 191, 205, 211 ),
+ ( 193, 207, 212 ),
+ ( 196, 208, 213 ),
+ ( 199, 210, 215 ),
+ ( 202, 212, 216 ),
+ ( 205, 213, 217 ),
+ ( 208, 215, 218 ),
+ ( 211, 217, 220 ),
+ ( 213, 218, 221 ),
+ ( 216, 220, 222 ),
+ ( 219, 222, 224 ),
+ ( 222, 224, 225 ),
+ ( 225, 225, 227 ),
+ ( 227, 227, 228 ),
+ ( 230, 229, 230 ),
+ ( 233, 231, 231 ),
+ ( 235, 233, 233 ),
+ ( 238, 234, 234 ),
+ ( 241, 236, 236 ),
+ ( 241, 236, 235 ),
+ ( 240, 234, 233 ),
+ ( 239, 232, 230 ),
+ ( 238, 229, 227 ),
+ ( 237, 227, 224 ),
+ ( 236, 224, 222 ),
+ ( 235, 222, 219 ),
+ ( 234, 220, 216 ),
+ ( 233, 217, 213 ),
+ ( 232, 215, 210 ),
+ ( 231, 213, 207 ),
+ ( 230, 210, 205 ),
+ ( 229, 208, 202 ),
+ ( 229, 206, 199 ),
+ ( 228, 203, 196 ),
+ ( 227, 201, 193 ),
+ ( 226, 199, 190 ),
+ ( 225, 196, 187 ),
+ ( 225, 194, 184 ),
+ ( 224, 192, 181 ),
+ ( 223, 189, 178 ),
+ ( 223, 187, 176 ),
+ ( 222, 185, 173 ),
+ ( 221, 182, 170 ),
+ ( 220, 180, 167 ),
+ ( 220, 178, 164 ),
+ ( 219, 175, 161 ),
+ ( 218, 173, 158 ),
+ ( 218, 171, 155 ),
+ ( 217, 169, 152 ),
+ ( 216, 166, 150 ),
+ ( 216, 164, 147 ),
+ ( 215, 162, 144 ),
+ ( 214, 159, 141 ),
+ ( 214, 157, 138 ),
+ ( 213, 155, 135 ),
+ ( 212, 153, 132 ),
+ ( 211, 150, 129 ),
+ ( 211, 148, 127 ),
+ ( 210, 146, 124 ),
+ ( 209, 143, 121 ),
+ ( 209, 141, 118 ),
+ ( 208, 139, 115 ),
+ ( 207, 137, 112 ),
+ ( 207, 134, 110 ),
+ ( 206, 132, 107 ),
+ ( 205, 130, 104 ),
+ ( 205, 127, 101 ),
+ ( 204, 125, 99 ),
+ ( 203, 123, 96 ),
+ ( 202, 121, 93 ),
+ ( 202, 118, 91 ),
+ ( 201, 116, 88 ),
+ ( 200, 114, 85 ),
+ ( 199, 111, 83 ),
+ ( 199, 109, 80 ),
+ ( 198, 107, 77 ),
+ ( 197, 104, 75 ),
+ ( 196, 102, 72 ),
+ ( 195, 99, 70 ),
+ ( 195, 97, 67 ),
+ ( 194, 95, 65 ),
+ ( 193, 92, 63 ),
+ ( 192, 90, 60 ),
+ ( 191, 87, 58 ),
+ ( 190, 85, 56 ),
+ ( 190, 82, 54 ),
+ ( 189, 80, 52 ),
+ ( 188, 77, 50 ),
+ ( 187, 75, 48 ),
+ ( 186, 72, 46 ),
+ ( 185, 69, 44 ),
+ ( 184, 67, 43 ),
+ ( 183, 64, 41 ),
+ ( 182, 61, 40 ),
+ ( 180, 59, 39 ),
+ ( 179, 56, 38 ),
+ ( 178, 53, 37 ),
+ ( 177, 51, 37 ),
+ ( 175, 48, 36 ),
+ ( 174, 46, 36 ),
+ ( 172, 43, 36 ),
+ ( 171, 41, 36 ),
+ ( 169, 38, 36 ),
+ ( 167, 36, 36 ),
+ ( 165, 33, 37 ),
+ ( 163, 31, 37 ),
+ ( 161, 29, 37 ),
+ ( 159, 27, 38 ),
+ ( 157, 25, 38 ),
+ ( 155, 23, 39 ),
+ ( 153, 22, 39 ),
+ ( 151, 20, 40 ),
+ ( 148, 19, 40 ),
+ ( 146, 18, 40 ),
+ ( 144, 16, 41 ),
+ ( 141, 16, 41 ),
+ ( 139, 15, 41 ),
+ ( 136, 15, 41 ),
+ ( 134, 14, 41 ),
+ ( 131, 14, 41 ),
+ ( 128, 14, 41 ),
+ ( 126, 14, 41 ),
+ ( 123, 14, 41 ),
+ ( 120, 14, 40 ),
+ ( 118, 14, 40 ),
+ ( 115, 14, 39 ),
+ ( 112, 14, 39 ),
+ ( 109, 14, 38 ),
+ ( 107, 15, 37 ),
+ ( 104, 15, 37 ),
+ ( 101, 15, 36 ),
+ ( 99, 14, 35 ),
+ ( 96, 14, 34 ),
+ ( 94, 14, 33 ),
+ ( 91, 14, 32 ),
+ ( 88, 14, 31 ),
+ ( 86, 14, 30 ),
+ ( 83, 13, 29 ),
+ ( 81, 13, 28 ),
+ ( 78, 13, 27 ),
+ ( 75, 12, 25 ),
+ ( 73, 12, 24 ),
+ ( 70, 11, 23 ),
+ ( 68, 11, 22 ),
+ ( 65, 10, 20 ),
+ ( 63, 10, 19 ),
+ ( 60, 9, 18 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Blues.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Blues.cs
new file mode 100644
index 000000000..86997c830
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Blues.cs
@@ -0,0 +1,46 @@
+// This colormap was created by Scott Harden on 2020-06-16 and is released under a MIT license.
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Blues : ArgbColormapBase
+ {
+ public override string Name => "Blues";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly uint[] _argbs = new int[] {
+ -16767403, -16767402, -16767144, -16766887, -16701093, -16700835, -16700578, -16634784,
+ -16634527, -16634269, -16568476, -16568218, -16568216, -16567959, -16502165, -16501908,
+ -16501650, -16435856, -16435599, -16435341, -16369548, -16369290, -16369033, -16303495,
+ -16303238, -16302980, -16237186, -16236929, -16236671, -16236414, -16170620, -16170363,
+ -16170105, -16104312, -16104054, -16103797, -16038259, -16038002, -16037745, -15971951,
+ -15971694, -15971436, -15905643, -15905385, -15905128, -15839335, -15839077, -15838820,
+ -15773027, -15772769, -15772512, -15706718, -15706717, -15706460, -15706203, -15640409,
+ -15640152, -15574359, -15574101, -15573844, -15508051, -15507794, -15507537, -15441743,
+ -15441486, -15441229, -15375436, -15375179, -15309386, -15309128, -15308871, -15243078,
+ -15242821, -15177284, -15177027, -15111234, -15110977, -15045184, -15044927, -14979134,
+ -14978877, -14913084, -14912827, -14847034, -14781241, -14780984, -14715191, -14715190,
+ -14649397, -14583605, -14517812, -14517555, -14451762, -14385969, -14320176, -14319920,
+ -14254383, -14188590, -14122797, -14057005, -13991212, -13925419, -13859626, -13859626,
+ -13793833, -13662505, -13596712, -13530919, -13465383, -13399590, -13333797, -13268005,
+ -13202212, -13136676, -13005347, -12939555, -12873762, -12808226, -12676897, -12611105,
+ -12545312, -12414240, -12348447, -12282655, -12151327, -12085790, -12019998, -11888669,
+ -11822877, -11757341, -11626012, -11560220, -11429148, -11363355, -11232027, -11166235,
+ -11035162, -10969370, -10903578, -10772505, -10706713, -10575385, -10509592, -10378520,
+ -10312728, -10181400, -10115863, -09984535, -09918743, -09787414, -09721878, -09590550,
+ -09524758, -09393429, -09327893, -09262101, -09130773, -09065237, -08933908, -08868116,
+ -08736788, -08671252, -08605459, -08474131, -08408339, -08277267, -08211475, -08145682,
+ -08014354, -07948818, -07817490, -07751698, -07685905, -07554833, -07489041, -07357713,
+ -07291921, -07226128, -07095056, -07029264, -06897936, -06832144, -06766351, -06635279,
+ -06569487, -06503695, -06372367, -06306575, -06175502, -06109710, -06043918, -05912590,
+ -05846798, -05781261, -05649933, -05584141, -05518349, -05387021, -05321485, -05190156,
+ -05124364, -05058572, -04927244, -04861452, -04730123, -04664587, -04598795, -04467467,
+ -04401675, -04335883, -04204554, -04139018, -04007690, -03941898, -03876106, -03744777,
+ -03678985, -03547657, -03481865, -03416329, -03285000, -03219208, -03087880, -03022088,
+ -02956296, -02824968, -02759175, -02628103, -02562311, -02430983, -02365191, -02299398,
+ -02168070, -02102278, -01970950, -01905158, -01839621, -01708293, -01642501, -01511173,
+ -01445381, -01314052, -01248260, -01182468, -01051140, -00985604, -00854275, -00788483,
+ -00657155, -00591363, -00525571, -00394242, -00328450, -00197122, -00131330, -00000001,
+ }.Select(argb => (uint)argb).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ByteColormapBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ByteColormapBase.cs
new file mode 100644
index 000000000..f4a6d3d63
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ByteColormapBase.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class ByteColormapBase : ColormapBase
+ {
+ public abstract (byte r, byte g, byte b)[] Rgbs { get; }
+ public override Color GetColor(double normalizedIntensity)
+ {
+ var rgb = Rgbs?[(int)(normalizedIntensity * (Rgbs.Length - 1))] ?? (0, 0, 0);
+ return new(rgb.r, rgb.g, rgb.b);
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ColormapBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ColormapBase.cs
new file mode 100644
index 000000000..cebf8aa7f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/ColormapBase.cs
@@ -0,0 +1,36 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot;
+
+public abstract class ColormapBase : IColormap
+{
+ public abstract string Name { get; }
+
+ public abstract Color GetColor(double position);
+
+ public Color GetColor(double position, Range range)
+ {
+ if (double.IsNaN(position))
+ {
+ return Colors.Transparent;
+ }
+
+ if (range.Min == range.Max)
+ {
+ return GetColor(0);
+ }
+
+ double normalizedPosition = range.Normalize(position, true);
+
+ return GetColor(normalizedPosition);
+ }
+
+ public IColormap Reversed()
+ {
+ var colors = Enumerable
+ .Range(0, 255)
+ .Select(x => GetColor(x / 255.0))
+ .Reverse()
+ .ToArray();
+
+ return new Custom(colors, $"{Name} Reversed");
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Curl.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Curl.cs
new file mode 100644
index 000000000..abfc3a834
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Curl.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Curl : ByteColormapBase
+ {
+ public override string Name => "Curl";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 21, 29, 68 ),
+ ( 21, 31, 69 ),
+ ( 22, 33, 70 ),
+ ( 22, 35, 71 ),
+ ( 23, 37, 72 ),
+ ( 23, 39, 73 ),
+ ( 24, 41, 74 ),
+ ( 24, 43, 75 ),
+ ( 24, 45, 76 ),
+ ( 25, 47, 77 ),
+ ( 25, 49, 79 ),
+ ( 26, 51, 80 ),
+ ( 26, 53, 81 ),
+ ( 26, 54, 82 ),
+ ( 27, 56, 83 ),
+ ( 27, 58, 84 ),
+ ( 27, 60, 86 ),
+ ( 27, 62, 87 ),
+ ( 28, 64, 88 ),
+ ( 28, 66, 89 ),
+ ( 28, 67, 90 ),
+ ( 28, 69, 91 ),
+ ( 28, 71, 93 ),
+ ( 28, 73, 94 ),
+ ( 28, 75, 95 ),
+ ( 28, 76, 96 ),
+ ( 28, 78, 97 ),
+ ( 28, 80, 98 ),
+ ( 28, 82, 99 ),
+ ( 28, 84, 101 ),
+ ( 27, 86, 102 ),
+ ( 27, 88, 103 ),
+ ( 27, 89, 104 ),
+ ( 26, 91, 105 ),
+ ( 26, 93, 106 ),
+ ( 26, 95, 107 ),
+ ( 25, 97, 108 ),
+ ( 25, 99, 109 ),
+ ( 24, 101, 110 ),
+ ( 23, 102, 111 ),
+ ( 23, 104, 112 ),
+ ( 22, 106, 113 ),
+ ( 21, 108, 114 ),
+ ( 20, 110, 115 ),
+ ( 20, 112, 116 ),
+ ( 19, 114, 117 ),
+ ( 18, 116, 118 ),
+ ( 18, 118, 118 ),
+ ( 17, 119, 119 ),
+ ( 17, 121, 120 ),
+ ( 17, 123, 121 ),
+ ( 17, 125, 121 ),
+ ( 17, 127, 122 ),
+ ( 18, 129, 123 ),
+ ( 19, 131, 123 ),
+ ( 20, 132, 124 ),
+ ( 22, 134, 124 ),
+ ( 23, 136, 125 ),
+ ( 26, 138, 125 ),
+ ( 28, 140, 126 ),
+ ( 31, 141, 126 ),
+ ( 34, 143, 126 ),
+ ( 37, 145, 127 ),
+ ( 41, 147, 127 ),
+ ( 44, 148, 127 ),
+ ( 48, 150, 128 ),
+ ( 52, 152, 128 ),
+ ( 56, 153, 129 ),
+ ( 59, 155, 129 ),
+ ( 63, 156, 129 ),
+ ( 67, 158, 130 ),
+ ( 71, 159, 130 ),
+ ( 75, 161, 131 ),
+ ( 80, 162, 132 ),
+ ( 84, 164, 132 ),
+ ( 87, 165, 133 ),
+ ( 91, 166, 134 ),
+ ( 95, 168, 135 ),
+ ( 99, 169, 136 ),
+ ( 103, 171, 137 ),
+ ( 107, 172, 138 ),
+ ( 111, 173, 139 ),
+ ( 114, 175, 140 ),
+ ( 118, 176, 141 ),
+ ( 122, 177, 142 ),
+ ( 125, 179, 144 ),
+ ( 129, 180, 145 ),
+ ( 133, 181, 147 ),
+ ( 136, 183, 148 ),
+ ( 139, 184, 150 ),
+ ( 143, 186, 151 ),
+ ( 146, 187, 153 ),
+ ( 150, 188, 155 ),
+ ( 153, 190, 157 ),
+ ( 156, 191, 159 ),
+ ( 160, 192, 160 ),
+ ( 163, 194, 162 ),
+ ( 166, 195, 164 ),
+ ( 169, 197, 166 ),
+ ( 172, 198, 169 ),
+ ( 176, 200, 171 ),
+ ( 179, 201, 173 ),
+ ( 182, 203, 175 ),
+ ( 185, 204, 178 ),
+ ( 188, 206, 180 ),
+ ( 191, 207, 182 ),
+ ( 194, 209, 185 ),
+ ( 197, 210, 187 ),
+ ( 200, 212, 190 ),
+ ( 203, 213, 192 ),
+ ( 206, 215, 195 ),
+ ( 209, 216, 197 ),
+ ( 211, 218, 200 ),
+ ( 214, 220, 203 ),
+ ( 217, 221, 205 ),
+ ( 220, 223, 208 ),
+ ( 223, 225, 211 ),
+ ( 226, 226, 214 ),
+ ( 228, 228, 216 ),
+ ( 231, 230, 219 ),
+ ( 234, 232, 222 ),
+ ( 237, 234, 225 ),
+ ( 240, 235, 228 ),
+ ( 242, 237, 231 ),
+ ( 245, 239, 234 ),
+ ( 248, 241, 237 ),
+ ( 251, 243, 240 ),
+ ( 253, 245, 243 ),
+ ( 254, 246, 245 ),
+ ( 252, 244, 241 ),
+ ( 251, 241, 238 ),
+ ( 250, 239, 235 ),
+ ( 249, 236, 231 ),
+ ( 248, 234, 228 ),
+ ( 246, 231, 225 ),
+ ( 245, 229, 221 ),
+ ( 244, 226, 218 ),
+ ( 243, 224, 214 ),
+ ( 242, 221, 211 ),
+ ( 242, 219, 208 ),
+ ( 241, 216, 204 ),
+ ( 240, 214, 201 ),
+ ( 239, 211, 198 ),
+ ( 238, 209, 195 ),
+ ( 237, 207, 191 ),
+ ( 236, 204, 188 ),
+ ( 236, 202, 185 ),
+ ( 235, 199, 182 ),
+ ( 234, 197, 179 ),
+ ( 233, 194, 175 ),
+ ( 233, 192, 172 ),
+ ( 232, 189, 169 ),
+ ( 231, 187, 166 ),
+ ( 231, 184, 163 ),
+ ( 230, 182, 160 ),
+ ( 229, 179, 157 ),
+ ( 229, 177, 154 ),
+ ( 228, 174, 152 ),
+ ( 227, 172, 149 ),
+ ( 227, 169, 146 ),
+ ( 226, 167, 143 ),
+ ( 225, 164, 141 ),
+ ( 225, 162, 138 ),
+ ( 224, 159, 136 ),
+ ( 224, 157, 133 ),
+ ( 223, 154, 131 ),
+ ( 222, 152, 128 ),
+ ( 222, 149, 126 ),
+ ( 221, 147, 124 ),
+ ( 220, 144, 122 ),
+ ( 219, 142, 120 ),
+ ( 219, 139, 118 ),
+ ( 218, 137, 116 ),
+ ( 217, 134, 114 ),
+ ( 216, 132, 113 ),
+ ( 215, 129, 111 ),
+ ( 214, 127, 110 ),
+ ( 214, 124, 108 ),
+ ( 213, 122, 107 ),
+ ( 212, 119, 106 ),
+ ( 211, 117, 105 ),
+ ( 210, 114, 104 ),
+ ( 208, 112, 103 ),
+ ( 207, 110, 102 ),
+ ( 206, 107, 101 ),
+ ( 205, 105, 100 ),
+ ( 204, 103, 100 ),
+ ( 202, 100, 99 ),
+ ( 201, 98, 99 ),
+ ( 200, 96, 98 ),
+ ( 198, 93, 98 ),
+ ( 197, 91, 97 ),
+ ( 195, 89, 97 ),
+ ( 194, 87, 97 ),
+ ( 192, 85, 97 ),
+ ( 191, 83, 96 ),
+ ( 189, 81, 96 ),
+ ( 187, 78, 96 ),
+ ( 186, 76, 96 ),
+ ( 184, 74, 96 ),
+ ( 182, 72, 96 ),
+ ( 180, 70, 96 ),
+ ( 179, 68, 96 ),
+ ( 177, 66, 96 ),
+ ( 175, 65, 96 ),
+ ( 173, 63, 96 ),
+ ( 171, 61, 96 ),
+ ( 169, 59, 96 ),
+ ( 167, 57, 96 ),
+ ( 165, 55, 96 ),
+ ( 163, 54, 96 ),
+ ( 161, 52, 96 ),
+ ( 159, 50, 96 ),
+ ( 157, 48, 96 ),
+ ( 155, 47, 96 ),
+ ( 153, 45, 97 ),
+ ( 151, 43, 97 ),
+ ( 149, 42, 97 ),
+ ( 146, 40, 97 ),
+ ( 144, 39, 96 ),
+ ( 142, 37, 96 ),
+ ( 140, 36, 96 ),
+ ( 137, 34, 96 ),
+ ( 135, 33, 96 ),
+ ( 133, 32, 96 ),
+ ( 130, 31, 96 ),
+ ( 128, 29, 95 ),
+ ( 125, 28, 95 ),
+ ( 123, 27, 94 ),
+ ( 120, 26, 94 ),
+ ( 118, 25, 93 ),
+ ( 115, 25, 93 ),
+ ( 113, 24, 92 ),
+ ( 110, 23, 91 ),
+ ( 108, 23, 90 ),
+ ( 105, 22, 89 ),
+ ( 102, 22, 88 ),
+ ( 100, 21, 87 ),
+ ( 97, 21, 86 ),
+ ( 94, 20, 85 ),
+ ( 92, 20, 83 ),
+ ( 89, 20, 82 ),
+ ( 87, 19, 80 ),
+ ( 84, 19, 78 ),
+ ( 81, 19, 77 ),
+ ( 79, 18, 75 ),
+ ( 76, 18, 73 ),
+ ( 73, 18, 71 ),
+ ( 71, 17, 69 ),
+ ( 68, 17, 67 ),
+ ( 66, 16, 65 ),
+ ( 63, 16, 63 ),
+ ( 61, 15, 61 ),
+ ( 58, 15, 59 ),
+ ( 56, 14, 57 ),
+ ( 53, 13, 54 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Custom.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Custom.cs
new file mode 100644
index 000000000..8661ae2e3
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Custom.cs
@@ -0,0 +1,20 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot;
+
+public class Custom : ColormapBase
+{
+ public override string Name { get; }
+
+ private readonly Color[] _colors;
+
+ public Custom(Color[] colors, string name = "custom")
+ {
+ _colors = colors;
+ Name = name;
+ }
+
+ public override Color GetColor(double position)
+ {
+ var index = (int)((_colors.Length - 1) * position);
+ return _colors[index];
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Deep.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Deep.cs
new file mode 100644
index 000000000..0ff893cc2
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Deep.cs
@@ -0,0 +1,273 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Deep : ByteColormapBase
+ {
+ public override string Name => "Deep";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 253, 254, 204 ),
+ ( 251, 253, 203 ),
+ ( 249, 252, 202 ),
+ ( 247, 251, 200 ),
+ ( 245, 250, 199 ),
+ ( 243, 250, 198 ),
+ ( 241, 249, 197 ),
+ ( 239, 248, 196 ),
+ ( 237, 247, 195 ),
+ ( 235, 247, 193 ),
+ ( 233, 246, 192 ),
+ ( 231, 245, 191 ),
+ ( 229, 244, 190 ),
+ ( 227, 244, 189 ),
+ ( 225, 243, 188 ),
+ ( 223, 242, 187 ),
+ ( 221, 242, 186 ),
+ ( 219, 241, 185 ),
+ ( 217, 240, 184 ),
+ ( 215, 239, 183 ),
+ ( 212, 239, 182 ),
+ ( 210, 238, 181 ),
+ ( 208, 237, 180 ),
+ ( 206, 236, 179 ),
+ ( 204, 236, 179 ),
+ ( 202, 235, 178 ),
+ ( 200, 234, 177 ),
+ ( 198, 234, 176 ),
+ ( 196, 233, 175 ),
+ ( 193, 232, 175 ),
+ ( 191, 231, 174 ),
+ ( 189, 231, 173 ),
+ ( 187, 230, 172 ),
+ ( 185, 229, 172 ),
+ ( 183, 229, 171 ),
+ ( 181, 228, 170 ),
+ ( 178, 227, 170 ),
+ ( 176, 226, 169 ),
+ ( 174, 226, 169 ),
+ ( 172, 225, 168 ),
+ ( 170, 224, 168 ),
+ ( 167, 224, 167 ),
+ ( 165, 223, 167 ),
+ ( 163, 222, 166 ),
+ ( 161, 221, 166 ),
+ ( 159, 221, 165 ),
+ ( 156, 220, 165 ),
+ ( 154, 219, 165 ),
+ ( 152, 218, 164 ),
+ ( 150, 218, 164 ),
+ ( 148, 217, 164 ),
+ ( 146, 216, 164 ),
+ ( 144, 215, 164 ),
+ ( 141, 215, 163 ),
+ ( 139, 214, 163 ),
+ ( 137, 213, 163 ),
+ ( 135, 212, 163 ),
+ ( 133, 211, 163 ),
+ ( 131, 211, 163 ),
+ ( 129, 210, 163 ),
+ ( 127, 209, 163 ),
+ ( 125, 208, 163 ),
+ ( 124, 207, 163 ),
+ ( 122, 206, 163 ),
+ ( 120, 206, 163 ),
+ ( 118, 205, 163 ),
+ ( 117, 204, 163 ),
+ ( 115, 203, 163 ),
+ ( 113, 202, 163 ),
+ ( 112, 201, 163 ),
+ ( 110, 200, 163 ),
+ ( 109, 199, 163 ),
+ ( 107, 198, 163 ),
+ ( 106, 197, 164 ),
+ ( 105, 196, 164 ),
+ ( 103, 195, 164 ),
+ ( 102, 194, 164 ),
+ ( 101, 194, 164 ),
+ ( 100, 193, 164 ),
+ ( 99, 192, 164 ),
+ ( 98, 191, 164 ),
+ ( 97, 190, 164 ),
+ ( 96, 189, 164 ),
+ ( 95, 188, 164 ),
+ ( 94, 187, 164 ),
+ ( 93, 186, 164 ),
+ ( 92, 185, 164 ),
+ ( 91, 184, 164 ),
+ ( 90, 183, 164 ),
+ ( 90, 182, 164 ),
+ ( 89, 180, 164 ),
+ ( 88, 179, 164 ),
+ ( 88, 178, 164 ),
+ ( 87, 177, 164 ),
+ ( 86, 176, 164 ),
+ ( 86, 175, 164 ),
+ ( 85, 174, 163 ),
+ ( 85, 173, 163 ),
+ ( 84, 172, 163 ),
+ ( 83, 171, 163 ),
+ ( 83, 170, 163 ),
+ ( 82, 169, 163 ),
+ ( 82, 168, 163 ),
+ ( 81, 167, 163 ),
+ ( 81, 166, 162 ),
+ ( 81, 165, 162 ),
+ ( 80, 164, 162 ),
+ ( 80, 163, 162 ),
+ ( 79, 162, 162 ),
+ ( 79, 161, 162 ),
+ ( 79, 160, 162 ),
+ ( 78, 159, 161 ),
+ ( 78, 158, 161 ),
+ ( 77, 157, 161 ),
+ ( 77, 156, 161 ),
+ ( 77, 155, 161 ),
+ ( 76, 154, 160 ),
+ ( 76, 153, 160 ),
+ ( 75, 152, 160 ),
+ ( 75, 151, 160 ),
+ ( 75, 150, 160 ),
+ ( 74, 149, 159 ),
+ ( 74, 148, 159 ),
+ ( 74, 147, 159 ),
+ ( 73, 146, 159 ),
+ ( 73, 145, 158 ),
+ ( 73, 144, 158 ),
+ ( 72, 143, 158 ),
+ ( 72, 142, 158 ),
+ ( 72, 141, 157 ),
+ ( 71, 140, 157 ),
+ ( 71, 139, 157 ),
+ ( 71, 138, 157 ),
+ ( 70, 137, 157 ),
+ ( 70, 136, 156 ),
+ ( 70, 135, 156 ),
+ ( 69, 134, 156 ),
+ ( 69, 133, 156 ),
+ ( 69, 132, 155 ),
+ ( 68, 131, 155 ),
+ ( 68, 130, 155 ),
+ ( 68, 129, 155 ),
+ ( 68, 128, 155 ),
+ ( 67, 127, 154 ),
+ ( 67, 126, 154 ),
+ ( 67, 125, 154 ),
+ ( 66, 124, 154 ),
+ ( 66, 123, 153 ),
+ ( 66, 122, 153 ),
+ ( 66, 121, 153 ),
+ ( 65, 120, 153 ),
+ ( 65, 119, 153 ),
+ ( 65, 118, 152 ),
+ ( 64, 117, 152 ),
+ ( 64, 116, 152 ),
+ ( 64, 115, 152 ),
+ ( 64, 114, 152 ),
+ ( 64, 113, 151 ),
+ ( 63, 112, 151 ),
+ ( 63, 111, 151 ),
+ ( 63, 110, 151 ),
+ ( 63, 109, 151 ),
+ ( 63, 108, 150 ),
+ ( 62, 107, 150 ),
+ ( 62, 106, 150 ),
+ ( 62, 105, 150 ),
+ ( 62, 104, 150 ),
+ ( 62, 103, 149 ),
+ ( 62, 102, 149 ),
+ ( 62, 101, 149 ),
+ ( 62, 100, 149 ),
+ ( 62, 99, 148 ),
+ ( 62, 98, 148 ),
+ ( 62, 97, 148 ),
+ ( 62, 96, 148 ),
+ ( 62, 95, 147 ),
+ ( 62, 94, 147 ),
+ ( 62, 92, 147 ),
+ ( 62, 91, 147 ),
+ ( 62, 90, 146 ),
+ ( 62, 89, 146 ),
+ ( 62, 88, 146 ),
+ ( 62, 87, 145 ),
+ ( 62, 86, 145 ),
+ ( 63, 85, 144 ),
+ ( 63, 84, 144 ),
+ ( 63, 83, 143 ),
+ ( 63, 82, 143 ),
+ ( 63, 80, 142 ),
+ ( 64, 79, 141 ),
+ ( 64, 78, 141 ),
+ ( 64, 77, 140 ),
+ ( 64, 76, 139 ),
+ ( 65, 75, 138 ),
+ ( 65, 74, 137 ),
+ ( 65, 73, 136 ),
+ ( 65, 72, 135 ),
+ ( 65, 71, 133 ),
+ ( 65, 70, 132 ),
+ ( 65, 69, 131 ),
+ ( 65, 68, 129 ),
+ ( 66, 67, 128 ),
+ ( 65, 66, 126 ),
+ ( 65, 65, 125 ),
+ ( 65, 64, 123 ),
+ ( 65, 64, 122 ),
+ ( 65, 63, 120 ),
+ ( 65, 62, 118 ),
+ ( 65, 61, 117 ),
+ ( 64, 60, 115 ),
+ ( 64, 60, 113 ),
+ ( 64, 59, 112 ),
+ ( 64, 58, 110 ),
+ ( 63, 57, 108 ),
+ ( 63, 56, 107 ),
+ ( 63, 56, 105 ),
+ ( 62, 55, 103 ),
+ ( 62, 54, 102 ),
+ ( 61, 53, 100 ),
+ ( 61, 53, 98 ),
+ ( 61, 52, 97 ),
+ ( 60, 51, 95 ),
+ ( 60, 50, 93 ),
+ ( 59, 50, 92 ),
+ ( 59, 49, 90 ),
+ ( 58, 48, 88 ),
+ ( 58, 48, 87 ),
+ ( 57, 47, 85 ),
+ ( 57, 46, 84 ),
+ ( 56, 45, 82 ),
+ ( 56, 45, 81 ),
+ ( 55, 44, 79 ),
+ ( 54, 43, 77 ),
+ ( 54, 42, 76 ),
+ ( 53, 42, 74 ),
+ ( 53, 41, 73 ),
+ ( 52, 40, 71 ),
+ ( 52, 40, 70 ),
+ ( 51, 39, 68 ),
+ ( 50, 38, 67 ),
+ ( 50, 37, 65 ),
+ ( 49, 37, 64 ),
+ ( 48, 36, 62 ),
+ ( 48, 35, 61 ),
+ ( 47, 34, 59 ),
+ ( 47, 34, 58 ),
+ ( 46, 33, 57 ),
+ ( 45, 32, 55 ),
+ ( 45, 31, 54 ),
+ ( 44, 31, 52 ),
+ ( 43, 30, 51 ),
+ ( 43, 29, 50 ),
+ ( 42, 28, 48 ),
+ ( 41, 28, 47 ),
+ ( 40, 27, 45 ),
+ ( 40, 26, 44 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Delta.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Delta.cs
new file mode 100644
index 000000000..cd83d974f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Delta.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Delta : ByteColormapBase
+ {
+ public override string Name => "Delta";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 17, 32, 64 ),
+ ( 18, 33, 67 ),
+ ( 20, 34, 70 ),
+ ( 21, 36, 73 ),
+ ( 22, 37, 76 ),
+ ( 23, 38, 79 ),
+ ( 25, 40, 83 ),
+ ( 26, 41, 86 ),
+ ( 27, 42, 89 ),
+ ( 28, 44, 93 ),
+ ( 30, 45, 96 ),
+ ( 31, 46, 100 ),
+ ( 32, 48, 103 ),
+ ( 33, 49, 107 ),
+ ( 34, 50, 111 ),
+ ( 35, 51, 114 ),
+ ( 36, 53, 118 ),
+ ( 37, 54, 122 ),
+ ( 37, 55, 126 ),
+ ( 38, 56, 130 ),
+ ( 38, 58, 134 ),
+ ( 39, 59, 137 ),
+ ( 39, 61, 141 ),
+ ( 38, 62, 145 ),
+ ( 37, 64, 148 ),
+ ( 36, 66, 150 ),
+ ( 35, 68, 152 ),
+ ( 33, 70, 154 ),
+ ( 32, 73, 155 ),
+ ( 31, 75, 155 ),
+ ( 30, 77, 156 ),
+ ( 29, 79, 156 ),
+ ( 28, 82, 157 ),
+ ( 28, 84, 157 ),
+ ( 27, 86, 157 ),
+ ( 27, 88, 158 ),
+ ( 27, 90, 158 ),
+ ( 27, 92, 158 ),
+ ( 27, 94, 159 ),
+ ( 27, 96, 159 ),
+ ( 27, 98, 159 ),
+ ( 27, 100, 159 ),
+ ( 28, 102, 160 ),
+ ( 28, 104, 160 ),
+ ( 29, 106, 160 ),
+ ( 30, 108, 161 ),
+ ( 30, 110, 161 ),
+ ( 31, 112, 162 ),
+ ( 32, 114, 162 ),
+ ( 33, 116, 162 ),
+ ( 34, 118, 163 ),
+ ( 35, 120, 163 ),
+ ( 36, 122, 164 ),
+ ( 37, 124, 164 ),
+ ( 38, 126, 165 ),
+ ( 39, 128, 165 ),
+ ( 40, 129, 165 ),
+ ( 42, 131, 166 ),
+ ( 43, 133, 166 ),
+ ( 44, 135, 167 ),
+ ( 45, 137, 167 ),
+ ( 47, 139, 168 ),
+ ( 48, 141, 168 ),
+ ( 50, 143, 169 ),
+ ( 51, 145, 169 ),
+ ( 53, 146, 170 ),
+ ( 54, 148, 170 ),
+ ( 56, 150, 171 ),
+ ( 58, 152, 171 ),
+ ( 60, 154, 172 ),
+ ( 62, 156, 172 ),
+ ( 64, 158, 173 ),
+ ( 66, 160, 173 ),
+ ( 68, 161, 174 ),
+ ( 71, 163, 174 ),
+ ( 73, 165, 174 ),
+ ( 76, 167, 175 ),
+ ( 79, 169, 175 ),
+ ( 82, 170, 176 ),
+ ( 86, 172, 176 ),
+ ( 89, 174, 176 ),
+ ( 93, 175, 177 ),
+ ( 96, 177, 177 ),
+ ( 100, 178, 178 ),
+ ( 104, 180, 178 ),
+ ( 108, 181, 179 ),
+ ( 112, 183, 180 ),
+ ( 116, 184, 181 ),
+ ( 120, 186, 181 ),
+ ( 124, 187, 182 ),
+ ( 128, 189, 183 ),
+ ( 132, 190, 184 ),
+ ( 136, 191, 185 ),
+ ( 139, 193, 186 ),
+ ( 143, 194, 187 ),
+ ( 147, 196, 189 ),
+ ( 151, 197, 190 ),
+ ( 154, 199, 191 ),
+ ( 158, 200, 192 ),
+ ( 161, 202, 194 ),
+ ( 165, 203, 195 ),
+ ( 168, 205, 196 ),
+ ( 172, 206, 198 ),
+ ( 175, 208, 199 ),
+ ( 179, 209, 200 ),
+ ( 182, 211, 202 ),
+ ( 185, 212, 203 ),
+ ( 189, 214, 205 ),
+ ( 192, 216, 206 ),
+ ( 195, 217, 208 ),
+ ( 198, 219, 209 ),
+ ( 202, 221, 211 ),
+ ( 205, 222, 212 ),
+ ( 208, 224, 213 ),
+ ( 211, 226, 215 ),
+ ( 214, 227, 216 ),
+ ( 217, 229, 218 ),
+ ( 220, 231, 219 ),
+ ( 223, 233, 220 ),
+ ( 227, 235, 222 ),
+ ( 230, 237, 223 ),
+ ( 233, 238, 224 ),
+ ( 236, 240, 225 ),
+ ( 239, 242, 226 ),
+ ( 242, 244, 227 ),
+ ( 246, 246, 228 ),
+ ( 249, 248, 229 ),
+ ( 252, 250, 230 ),
+ ( 255, 253, 205 ),
+ ( 254, 250, 201 ),
+ ( 252, 248, 197 ),
+ ( 251, 246, 192 ),
+ ( 249, 243, 188 ),
+ ( 248, 241, 184 ),
+ ( 247, 238, 180 ),
+ ( 246, 236, 175 ),
+ ( 244, 234, 171 ),
+ ( 243, 231, 167 ),
+ ( 241, 229, 162 ),
+ ( 240, 227, 158 ),
+ ( 239, 225, 154 ),
+ ( 237, 222, 150 ),
+ ( 236, 220, 145 ),
+ ( 234, 218, 141 ),
+ ( 233, 216, 137 ),
+ ( 231, 214, 132 ),
+ ( 230, 212, 128 ),
+ ( 228, 210, 123 ),
+ ( 227, 207, 119 ),
+ ( 225, 205, 115 ),
+ ( 223, 204, 110 ),
+ ( 221, 202, 106 ),
+ ( 219, 200, 102 ),
+ ( 217, 198, 97 ),
+ ( 215, 196, 93 ),
+ ( 213, 194, 89 ),
+ ( 211, 193, 85 ),
+ ( 209, 191, 81 ),
+ ( 206, 189, 76 ),
+ ( 204, 188, 72 ),
+ ( 201, 186, 69 ),
+ ( 199, 185, 65 ),
+ ( 196, 183, 61 ),
+ ( 193, 182, 57 ),
+ ( 190, 180, 54 ),
+ ( 187, 179, 50 ),
+ ( 184, 178, 47 ),
+ ( 181, 176, 43 ),
+ ( 178, 175, 40 ),
+ ( 175, 174, 37 ),
+ ( 172, 173, 34 ),
+ ( 169, 171, 31 ),
+ ( 165, 170, 28 ),
+ ( 162, 169, 25 ),
+ ( 159, 168, 23 ),
+ ( 155, 166, 20 ),
+ ( 152, 165, 18 ),
+ ( 149, 164, 15 ),
+ ( 145, 163, 13 ),
+ ( 142, 162, 11 ),
+ ( 138, 160, 9 ),
+ ( 135, 159, 8 ),
+ ( 131, 158, 7 ),
+ ( 128, 157, 6 ),
+ ( 124, 156, 6 ),
+ ( 121, 154, 6 ),
+ ( 117, 153, 6 ),
+ ( 113, 152, 6 ),
+ ( 110, 151, 7 ),
+ ( 106, 149, 8 ),
+ ( 102, 148, 9 ),
+ ( 99, 147, 11 ),
+ ( 95, 146, 12 ),
+ ( 92, 144, 14 ),
+ ( 88, 143, 15 ),
+ ( 84, 142, 17 ),
+ ( 81, 140, 18 ),
+ ( 77, 139, 20 ),
+ ( 73, 138, 22 ),
+ ( 70, 136, 23 ),
+ ( 66, 135, 25 ),
+ ( 63, 133, 26 ),
+ ( 59, 132, 28 ),
+ ( 56, 131, 29 ),
+ ( 52, 129, 30 ),
+ ( 49, 127, 32 ),
+ ( 45, 126, 33 ),
+ ( 42, 124, 34 ),
+ ( 39, 123, 35 ),
+ ( 36, 121, 36 ),
+ ( 33, 120, 37 ),
+ ( 30, 118, 38 ),
+ ( 27, 116, 39 ),
+ ( 24, 115, 40 ),
+ ( 22, 113, 41 ),
+ ( 19, 111, 41 ),
+ ( 17, 109, 42 ),
+ ( 15, 108, 43 ),
+ ( 14, 106, 43 ),
+ ( 13, 104, 43 ),
+ ( 12, 102, 44 ),
+ ( 11, 100, 44 ),
+ ( 11, 99, 44 ),
+ ( 11, 97, 45 ),
+ ( 11, 95, 45 ),
+ ( 12, 93, 45 ),
+ ( 12, 91, 45 ),
+ ( 13, 89, 45 ),
+ ( 14, 87, 45 ),
+ ( 15, 85, 44 ),
+ ( 16, 84, 44 ),
+ ( 17, 82, 44 ),
+ ( 18, 80, 43 ),
+ ( 19, 78, 43 ),
+ ( 20, 76, 42 ),
+ ( 20, 74, 42 ),
+ ( 21, 72, 41 ),
+ ( 22, 70, 41 ),
+ ( 23, 68, 40 ),
+ ( 23, 66, 39 ),
+ ( 24, 64, 38 ),
+ ( 24, 63, 37 ),
+ ( 25, 61, 36 ),
+ ( 25, 59, 35 ),
+ ( 25, 57, 34 ),
+ ( 25, 55, 33 ),
+ ( 25, 53, 32 ),
+ ( 25, 51, 31 ),
+ ( 25, 49, 30 ),
+ ( 25, 47, 28 ),
+ ( 25, 45, 27 ),
+ ( 25, 44, 25 ),
+ ( 25, 42, 24 ),
+ ( 24, 40, 23 ),
+ ( 24, 38, 21 ),
+ ( 23, 36, 19 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Dense.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Dense.cs
new file mode 100644
index 000000000..83ab0cd33
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Dense.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Dense : ByteColormapBase
+ {
+ public override string Name => "Dense";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 230, 241, 241 ),
+ ( 228, 240, 240 ),
+ ( 227, 239, 239 ),
+ ( 225, 238, 239 ),
+ ( 223, 237, 238 ),
+ ( 221, 237, 237 ),
+ ( 220, 236, 237 ),
+ ( 218, 235, 236 ),
+ ( 216, 234, 236 ),
+ ( 215, 233, 235 ),
+ ( 213, 233, 235 ),
+ ( 211, 232, 234 ),
+ ( 209, 231, 234 ),
+ ( 208, 230, 233 ),
+ ( 206, 229, 233 ),
+ ( 204, 228, 232 ),
+ ( 203, 228, 232 ),
+ ( 201, 227, 232 ),
+ ( 199, 226, 231 ),
+ ( 198, 225, 231 ),
+ ( 196, 224, 230 ),
+ ( 194, 223, 230 ),
+ ( 193, 223, 230 ),
+ ( 191, 222, 230 ),
+ ( 190, 221, 229 ),
+ ( 188, 220, 229 ),
+ ( 186, 219, 229 ),
+ ( 185, 218, 228 ),
+ ( 183, 218, 228 ),
+ ( 182, 217, 228 ),
+ ( 180, 216, 228 ),
+ ( 178, 215, 228 ),
+ ( 177, 214, 227 ),
+ ( 175, 213, 227 ),
+ ( 174, 212, 227 ),
+ ( 172, 212, 227 ),
+ ( 171, 211, 227 ),
+ ( 169, 210, 227 ),
+ ( 168, 209, 227 ),
+ ( 166, 208, 227 ),
+ ( 165, 207, 226 ),
+ ( 163, 206, 226 ),
+ ( 162, 206, 226 ),
+ ( 160, 205, 226 ),
+ ( 159, 204, 226 ),
+ ( 158, 203, 226 ),
+ ( 156, 202, 226 ),
+ ( 155, 201, 226 ),
+ ( 154, 200, 226 ),
+ ( 152, 199, 226 ),
+ ( 151, 198, 226 ),
+ ( 150, 197, 226 ),
+ ( 148, 197, 226 ),
+ ( 147, 196, 226 ),
+ ( 146, 195, 226 ),
+ ( 144, 194, 226 ),
+ ( 143, 193, 226 ),
+ ( 142, 192, 226 ),
+ ( 141, 191, 226 ),
+ ( 140, 190, 226 ),
+ ( 138, 189, 227 ),
+ ( 137, 188, 227 ),
+ ( 136, 187, 227 ),
+ ( 135, 186, 227 ),
+ ( 134, 185, 227 ),
+ ( 133, 184, 227 ),
+ ( 132, 183, 227 ),
+ ( 131, 182, 227 ),
+ ( 130, 181, 227 ),
+ ( 129, 180, 227 ),
+ ( 128, 179, 227 ),
+ ( 127, 178, 227 ),
+ ( 127, 177, 228 ),
+ ( 126, 176, 228 ),
+ ( 125, 175, 228 ),
+ ( 124, 174, 228 ),
+ ( 123, 173, 228 ),
+ ( 123, 172, 228 ),
+ ( 122, 171, 228 ),
+ ( 121, 170, 228 ),
+ ( 121, 169, 228 ),
+ ( 120, 168, 228 ),
+ ( 120, 167, 228 ),
+ ( 119, 166, 228 ),
+ ( 119, 165, 228 ),
+ ( 118, 164, 229 ),
+ ( 118, 163, 229 ),
+ ( 117, 161, 229 ),
+ ( 117, 160, 229 ),
+ ( 117, 159, 229 ),
+ ( 117, 158, 229 ),
+ ( 116, 157, 229 ),
+ ( 116, 156, 228 ),
+ ( 116, 155, 228 ),
+ ( 116, 154, 228 ),
+ ( 116, 152, 228 ),
+ ( 115, 151, 228 ),
+ ( 115, 150, 228 ),
+ ( 115, 149, 228 ),
+ ( 115, 148, 228 ),
+ ( 115, 147, 227 ),
+ ( 115, 145, 227 ),
+ ( 115, 144, 227 ),
+ ( 115, 143, 227 ),
+ ( 115, 142, 226 ),
+ ( 116, 141, 226 ),
+ ( 116, 139, 226 ),
+ ( 116, 138, 226 ),
+ ( 116, 137, 225 ),
+ ( 116, 136, 225 ),
+ ( 116, 135, 224 ),
+ ( 116, 133, 224 ),
+ ( 117, 132, 223 ),
+ ( 117, 131, 223 ),
+ ( 117, 130, 222 ),
+ ( 117, 129, 222 ),
+ ( 117, 127, 221 ),
+ ( 117, 126, 221 ),
+ ( 118, 125, 220 ),
+ ( 118, 124, 220 ),
+ ( 118, 123, 219 ),
+ ( 118, 121, 218 ),
+ ( 118, 120, 218 ),
+ ( 119, 119, 217 ),
+ ( 119, 118, 216 ),
+ ( 119, 117, 215 ),
+ ( 119, 115, 215 ),
+ ( 119, 114, 214 ),
+ ( 120, 113, 213 ),
+ ( 120, 112, 212 ),
+ ( 120, 111, 211 ),
+ ( 120, 110, 210 ),
+ ( 120, 108, 210 ),
+ ( 120, 107, 209 ),
+ ( 120, 106, 208 ),
+ ( 121, 105, 207 ),
+ ( 121, 104, 206 ),
+ ( 121, 102, 205 ),
+ ( 121, 101, 204 ),
+ ( 121, 100, 203 ),
+ ( 121, 99, 202 ),
+ ( 121, 98, 201 ),
+ ( 121, 97, 200 ),
+ ( 121, 96, 199 ),
+ ( 121, 94, 197 ),
+ ( 121, 93, 196 ),
+ ( 121, 92, 195 ),
+ ( 121, 91, 194 ),
+ ( 121, 90, 193 ),
+ ( 121, 89, 192 ),
+ ( 121, 88, 191 ),
+ ( 121, 87, 189 ),
+ ( 121, 86, 188 ),
+ ( 121, 84, 187 ),
+ ( 121, 83, 186 ),
+ ( 121, 82, 184 ),
+ ( 121, 81, 183 ),
+ ( 121, 80, 182 ),
+ ( 121, 79, 181 ),
+ ( 120, 78, 179 ),
+ ( 120, 77, 178 ),
+ ( 120, 76, 177 ),
+ ( 120, 75, 175 ),
+ ( 120, 74, 174 ),
+ ( 120, 73, 173 ),
+ ( 119, 72, 171 ),
+ ( 119, 71, 170 ),
+ ( 119, 70, 169 ),
+ ( 119, 69, 167 ),
+ ( 119, 67, 166 ),
+ ( 118, 66, 165 ),
+ ( 118, 65, 163 ),
+ ( 118, 64, 162 ),
+ ( 118, 63, 160 ),
+ ( 117, 62, 159 ),
+ ( 117, 61, 157 ),
+ ( 117, 60, 156 ),
+ ( 116, 59, 155 ),
+ ( 116, 59, 153 ),
+ ( 116, 58, 152 ),
+ ( 115, 57, 150 ),
+ ( 115, 56, 149 ),
+ ( 115, 55, 147 ),
+ ( 114, 54, 146 ),
+ ( 114, 53, 144 ),
+ ( 114, 52, 143 ),
+ ( 113, 51, 141 ),
+ ( 113, 50, 140 ),
+ ( 112, 49, 138 ),
+ ( 112, 48, 136 ),
+ ( 111, 47, 135 ),
+ ( 111, 46, 133 ),
+ ( 110, 45, 132 ),
+ ( 110, 45, 130 ),
+ ( 109, 44, 129 ),
+ ( 109, 43, 127 ),
+ ( 108, 42, 126 ),
+ ( 108, 41, 124 ),
+ ( 107, 40, 122 ),
+ ( 107, 40, 121 ),
+ ( 106, 39, 119 ),
+ ( 106, 38, 117 ),
+ ( 105, 37, 116 ),
+ ( 104, 36, 114 ),
+ ( 104, 36, 113 ),
+ ( 103, 35, 111 ),
+ ( 103, 34, 109 ),
+ ( 102, 33, 108 ),
+ ( 101, 33, 106 ),
+ ( 101, 32, 104 ),
+ ( 100, 31, 103 ),
+ ( 99, 31, 101 ),
+ ( 98, 30, 99 ),
+ ( 98, 29, 98 ),
+ ( 97, 29, 96 ),
+ ( 96, 28, 94 ),
+ ( 95, 27, 93 ),
+ ( 95, 27, 91 ),
+ ( 94, 26, 89 ),
+ ( 93, 26, 88 ),
+ ( 92, 25, 86 ),
+ ( 91, 25, 84 ),
+ ( 90, 24, 83 ),
+ ( 90, 24, 81 ),
+ ( 89, 23, 80 ),
+ ( 88, 23, 78 ),
+ ( 87, 22, 76 ),
+ ( 86, 22, 75 ),
+ ( 85, 22, 73 ),
+ ( 84, 21, 72 ),
+ ( 83, 21, 70 ),
+ ( 82, 21, 68 ),
+ ( 81, 20, 67 ),
+ ( 80, 20, 65 ),
+ ( 79, 20, 64 ),
+ ( 78, 19, 62 ),
+ ( 77, 19, 61 ),
+ ( 75, 19, 59 ),
+ ( 74, 19, 58 ),
+ ( 73, 18, 56 ),
+ ( 72, 18, 55 ),
+ ( 71, 18, 54 ),
+ ( 70, 18, 52 ),
+ ( 69, 17, 51 ),
+ ( 68, 17, 50 ),
+ ( 66, 17, 48 ),
+ ( 65, 17, 47 ),
+ ( 64, 16, 46 ),
+ ( 63, 16, 45 ),
+ ( 62, 16, 43 ),
+ ( 60, 16, 42 ),
+ ( 59, 15, 41 ),
+ ( 58, 15, 40 ),
+ ( 57, 15, 39 ),
+ ( 56, 15, 37 ),
+ ( 54, 14, 36 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Diff.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Diff.cs
new file mode 100644
index 000000000..f8619395a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Diff.cs
@@ -0,0 +1,273 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Diff : ByteColormapBase
+ {
+ public override string Name => "Diff";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 8, 35, 64 ),
+ ( 9, 37, 66 ),
+ ( 10, 38, 68 ),
+ ( 11, 40, 69 ),
+ ( 12, 42, 71 ),
+ ( 12, 44, 73 ),
+ ( 13, 45, 75 ),
+ ( 14, 47, 77 ),
+ ( 15, 49, 79 ),
+ ( 16, 50, 81 ),
+ ( 17, 52, 83 ),
+ ( 17, 54, 85 ),
+ ( 18, 55, 86 ),
+ ( 19, 57, 88 ),
+ ( 20, 59, 90 ),
+ ( 20, 61, 92 ),
+ ( 21, 62, 94 ),
+ ( 22, 64, 95 ),
+ ( 23, 66, 97 ),
+ ( 24, 67, 99 ),
+ ( 25, 69, 100 ),
+ ( 26, 71, 102 ),
+ ( 27, 72, 103 ),
+ ( 29, 74, 104 ),
+ ( 31, 76, 105 ),
+ ( 33, 77, 106 ),
+ ( 36, 79, 107 ),
+ ( 38, 80, 108 ),
+ ( 40, 82, 109 ),
+ ( 43, 83, 110 ),
+ ( 45, 85, 111 ),
+ ( 47, 86, 112 ),
+ ( 49, 88, 113 ),
+ ( 52, 89, 115 ),
+ ( 54, 91, 116 ),
+ ( 56, 92, 117 ),
+ ( 58, 94, 118 ),
+ ( 60, 95, 119 ),
+ ( 62, 97, 120 ),
+ ( 65, 98, 121 ),
+ ( 67, 100, 122 ),
+ ( 69, 101, 123 ),
+ ( 71, 103, 125 ),
+ ( 73, 104, 126 ),
+ ( 75, 106, 127 ),
+ ( 77, 107, 128 ),
+ ( 79, 109, 129 ),
+ ( 81, 110, 130 ),
+ ( 83, 112, 132 ),
+ ( 85, 113, 133 ),
+ ( 88, 115, 134 ),
+ ( 90, 116, 135 ),
+ ( 92, 118, 136 ),
+ ( 94, 120, 138 ),
+ ( 96, 121, 139 ),
+ ( 98, 123, 140 ),
+ ( 100, 124, 141 ),
+ ( 102, 126, 142 ),
+ ( 104, 127, 144 ),
+ ( 106, 129, 145 ),
+ ( 108, 130, 146 ),
+ ( 110, 132, 148 ),
+ ( 112, 134, 149 ),
+ ( 114, 135, 150 ),
+ ( 116, 137, 151 ),
+ ( 118, 138, 153 ),
+ ( 120, 140, 154 ),
+ ( 123, 141, 155 ),
+ ( 125, 143, 157 ),
+ ( 127, 145, 158 ),
+ ( 129, 146, 159 ),
+ ( 131, 148, 161 ),
+ ( 133, 150, 162 ),
+ ( 135, 151, 163 ),
+ ( 137, 153, 165 ),
+ ( 139, 154, 166 ),
+ ( 141, 156, 167 ),
+ ( 143, 158, 169 ),
+ ( 146, 159, 170 ),
+ ( 148, 161, 172 ),
+ ( 150, 163, 173 ),
+ ( 152, 165, 175 ),
+ ( 154, 166, 176 ),
+ ( 156, 168, 177 ),
+ ( 158, 170, 179 ),
+ ( 160, 171, 180 ),
+ ( 163, 173, 182 ),
+ ( 165, 175, 183 ),
+ ( 167, 177, 185 ),
+ ( 169, 178, 186 ),
+ ( 171, 180, 188 ),
+ ( 174, 182, 189 ),
+ ( 176, 184, 191 ),
+ ( 178, 186, 192 ),
+ ( 180, 187, 194 ),
+ ( 182, 189, 196 ),
+ ( 185, 191, 197 ),
+ ( 187, 193, 199 ),
+ ( 189, 195, 200 ),
+ ( 191, 197, 202 ),
+ ( 194, 198, 204 ),
+ ( 196, 200, 205 ),
+ ( 198, 202, 207 ),
+ ( 200, 204, 209 ),
+ ( 203, 206, 210 ),
+ ( 205, 208, 212 ),
+ ( 207, 210, 214 ),
+ ( 210, 212, 215 ),
+ ( 212, 214, 217 ),
+ ( 214, 216, 219 ),
+ ( 217, 218, 221 ),
+ ( 219, 220, 222 ),
+ ( 221, 222, 224 ),
+ ( 224, 224, 226 ),
+ ( 226, 226, 227 ),
+ ( 228, 227, 229 ),
+ ( 230, 229, 231 ),
+ ( 232, 231, 232 ),
+ ( 235, 233, 234 ),
+ ( 236, 234, 235 ),
+ ( 238, 236, 236 ),
+ ( 240, 237, 238 ),
+ ( 241, 238, 239 ),
+ ( 243, 239, 239 ),
+ ( 244, 240, 240 ),
+ ( 245, 241, 240 ),
+ ( 245, 241, 240 ),
+ ( 246, 241, 240 ),
+ ( 246, 241, 240 ),
+ ( 245, 241, 239 ),
+ ( 245, 240, 238 ),
+ ( 244, 239, 237 ),
+ ( 243, 238, 235 ),
+ ( 242, 237, 233 ),
+ ( 241, 235, 232 ),
+ ( 239, 234, 229 ),
+ ( 238, 232, 227 ),
+ ( 236, 230, 225 ),
+ ( 234, 229, 223 ),
+ ( 232, 227, 220 ),
+ ( 231, 225, 218 ),
+ ( 229, 223, 215 ),
+ ( 227, 221, 212 ),
+ ( 225, 219, 210 ),
+ ( 223, 217, 207 ),
+ ( 221, 215, 205 ),
+ ( 219, 213, 202 ),
+ ( 217, 211, 199 ),
+ ( 215, 209, 197 ),
+ ( 213, 207, 194 ),
+ ( 211, 205, 192 ),
+ ( 210, 203, 189 ),
+ ( 208, 201, 187 ),
+ ( 206, 199, 184 ),
+ ( 204, 197, 181 ),
+ ( 202, 195, 179 ),
+ ( 200, 193, 176 ),
+ ( 199, 191, 174 ),
+ ( 197, 189, 171 ),
+ ( 195, 187, 169 ),
+ ( 193, 185, 166 ),
+ ( 191, 183, 164 ),
+ ( 190, 181, 161 ),
+ ( 188, 179, 159 ),
+ ( 186, 177, 157 ),
+ ( 185, 176, 154 ),
+ ( 183, 174, 152 ),
+ ( 181, 172, 149 ),
+ ( 179, 170, 147 ),
+ ( 178, 168, 144 ),
+ ( 176, 166, 142 ),
+ ( 174, 165, 140 ),
+ ( 173, 163, 137 ),
+ ( 171, 161, 135 ),
+ ( 169, 159, 133 ),
+ ( 168, 157, 130 ),
+ ( 166, 156, 128 ),
+ ( 164, 154, 125 ),
+ ( 163, 152, 123 ),
+ ( 161, 150, 121 ),
+ ( 160, 149, 118 ),
+ ( 158, 147, 116 ),
+ ( 156, 145, 114 ),
+ ( 155, 143, 112 ),
+ ( 153, 142, 109 ),
+ ( 152, 140, 107 ),
+ ( 150, 138, 105 ),
+ ( 149, 137, 103 ),
+ ( 147, 135, 100 ),
+ ( 145, 133, 98 ),
+ ( 144, 132, 96 ),
+ ( 142, 130, 94 ),
+ ( 141, 128, 91 ),
+ ( 139, 127, 89 ),
+ ( 138, 125, 87 ),
+ ( 136, 123, 85 ),
+ ( 135, 122, 83 ),
+ ( 133, 120, 80 ),
+ ( 131, 118, 78 ),
+ ( 130, 117, 76 ),
+ ( 128, 115, 74 ),
+ ( 127, 114, 72 ),
+ ( 125, 112, 70 ),
+ ( 124, 110, 67 ),
+ ( 122, 109, 65 ),
+ ( 121, 107, 63 ),
+ ( 119, 106, 61 ),
+ ( 118, 104, 59 ),
+ ( 116, 102, 57 ),
+ ( 114, 101, 55 ),
+ ( 113, 99, 53 ),
+ ( 111, 98, 51 ),
+ ( 110, 96, 48 ),
+ ( 108, 95, 46 ),
+ ( 106, 93, 44 ),
+ ( 104, 92, 43 ),
+ ( 103, 90, 41 ),
+ ( 101, 89, 39 ),
+ ( 99, 88, 38 ),
+ ( 97, 86, 37 ),
+ ( 95, 85, 36 ),
+ ( 93, 84, 35 ),
+ ( 91, 82, 34 ),
+ ( 89, 81, 33 ),
+ ( 87, 79, 32 ),
+ ( 85, 78, 32 ),
+ ( 83, 77, 31 ),
+ ( 81, 75, 30 ),
+ ( 79, 74, 29 ),
+ ( 77, 72, 29 ),
+ ( 75, 71, 28 ),
+ ( 73, 69, 27 ),
+ ( 71, 68, 26 ),
+ ( 69, 67, 26 ),
+ ( 67, 65, 25 ),
+ ( 66, 64, 24 ),
+ ( 64, 62, 23 ),
+ ( 62, 61, 22 ),
+ ( 60, 59, 22 ),
+ ( 58, 58, 21 ),
+ ( 56, 57, 20 ),
+ ( 54, 55, 19 ),
+ ( 52, 54, 18 ),
+ ( 51, 52, 18 ),
+ ( 49, 51, 17 ),
+ ( 47, 49, 16 ),
+ ( 45, 48, 15 ),
+ ( 43, 46, 14 ),
+ ( 41, 45, 13 ),
+ ( 39, 43, 12 ),
+ ( 38, 42, 11 ),
+ ( 36, 40, 10 ),
+ ( 34, 39, 9 ),
+ ( 32, 37, 9 ),
+ ( 30, 36, 8 ),
+ ( 28, 34, 7 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Grayscale.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Grayscale.cs
new file mode 100644
index 000000000..fdd69ade3
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Grayscale.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Grayscale : ColormapBase
+ {
+ public override string Name => "Grayscale";
+
+ public override Color GetColor(double normalizedIntensity)
+ {
+ var value = (byte)(255 * normalizedIntensity);
+ return Color.Gray(value);
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/GrayscaleReversed.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/GrayscaleReversed.cs
new file mode 100644
index 000000000..8a09c0e63
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/GrayscaleReversed.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class GrayscaleReversed : ColormapBase
+ {
+ public override string Name => "Grayscale Reversed";
+
+ public override Color GetColor(double normalizedIntensity)
+ {
+ var value = (byte)(255 - (byte)(255 * normalizedIntensity));
+ return Color.Gray(value);
+ }
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Greens.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Greens.cs
new file mode 100644
index 000000000..f39337241
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Greens.cs
@@ -0,0 +1,49 @@
+// This colormap was created by Scott Harden on 2020-06-16 and is released under a MIT license.
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Greens : ArgbColormapBase
+ {
+ public override string Name => "Greens";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly int[] _rgbs =
+ {
+ -16761088, -16760832, -16760575, -16760318, -16760061, -16759804, -16759547, -16759290,
+ -16759033, -16758776, -16758519, -16758006, -16757749, -16757492, -16757235, -16756979,
+ -16756722, -16756465, -16756208, -16755951, -16755694, -16755437, -16755180, -16754667,
+ -16754410, -16688617, -16688360, -16688104, -16687847, -16687590, -16687333, -16687076,
+ -16621283, -16621026, -16620769, -16620512, -16620256, -16554463, -16554206, -16553949,
+ -16553692, -16487899, -16487642, -16487385, -16421336, -16421080, -16420823, -16355030,
+ -16354773, -16288980, -16288723, -16222930, -16222930, -16222673, -16156880, -16156623,
+ -16090830, -16025038, -16024781, -15958988, -15958731, -15892938, -15827145, -15826889,
+ -15761096, -15695303, -15695046, -15629254, -15563461, -15497924, -15497667, -15431875,
+ -15366082, -15300289, -15234496, -15234240, -15168447, -15102654, -15037118, -14971325,
+ -14905532, -14839740, -14773947, -14708154, -14642618, -14576825, -14511033, -14445240,
+ -14379447, -14313655, -14248118, -14182326, -14116533, -14050741, -13985204, -13919412,
+ -13853619, -13722291, -13656498, -13590962, -13525169, -13459377, -13328048, -13262512,
+ -13196720, -13130927, -13065391, -12934063, -12868270, -12802478, -12671406, -12605613,
+ -12539821, -12408749, -12342957, -12277164, -12146092, -12080300, -12014508, -11883435,
+ -11817643, -11686315, -11620779, -11554986, -11423914, -11358122, -11226794, -11161258,
+ -11029929, -10964137, -10833065, -10767273, -10636201, -10570408, -10439080, -10373544,
+ -10242216, -10176680, -10045351, -09914023, -09848487, -09717159, -09651623, -09520294,
+ -09389222, -09323430, -09192102, -09061029, -08995237, -08864165, -08798372, -08667300,
+ -08535972, -08404643, -08339107, -08207779, -08076706, -08010914, -07879842, -07748513,
+ -07682977, -07551648, -07420576, -07289248, -07223711, -07092383, -06961054, -06895518,
+ -06764189, -06633116, -06501788, -06436251, -06304923, -06173850, -06108057, -05976984,
+ -05845656, -05714583, -05648790, -05517717, -05386389, -05320596, -05189523, -05123730,
+ -04992657, -04861328, -04795791, -04664462, -04598925, -04467596, -04336523, -04270730,
+ -04139400, -04073863, -03942534, -03876997, -03745667, -03680130, -03614337, -03483007,
+ -03417470, -03286140, -03220603, -03154809, -03023479, -02957942, -02892148, -02826610,
+ -02760817, -02629487, -02563949, -02498155, -02432617, -02366823, -02301029, -02235491,
+ -02169697, -02103903, -02038365, -01972571, -01906777, -01841239, -01775444, -01709650,
+ -01644112, -01578318, -01512523, -01446985, -01381191, -01315396, -01249858, -01249599,
+ -01183805, -01118266, -01052472, -00986678, -00986675, -00920880, -00855086, -00789547,
+ -00723753, -00723494, -00657956, -00592161, -00526367, -00526108, -00460569, -00394775,
+ -00394516, -00328977, -00263183, -00197388, -00197385, -00131591, -00065796, -00000001,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | (uint)rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Haline.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Haline.cs
new file mode 100644
index 000000000..b548ac379
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Haline.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Haline : ByteColormapBase
+ {
+ public override string Name => "Haline";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 42, 24, 108 ),
+ ( 42, 25, 110 ),
+ ( 42, 25, 113 ),
+ ( 43, 25, 115 ),
+ ( 43, 25, 117 ),
+ ( 44, 26, 120 ),
+ ( 44, 26, 122 ),
+ ( 45, 26, 125 ),
+ ( 45, 26, 127 ),
+ ( 45, 27, 130 ),
+ ( 46, 27, 132 ),
+ ( 46, 27, 135 ),
+ ( 46, 28, 137 ),
+ ( 46, 28, 140 ),
+ ( 46, 28, 142 ),
+ ( 46, 29, 145 ),
+ ( 46, 29, 147 ),
+ ( 46, 30, 149 ),
+ ( 46, 30, 152 ),
+ ( 46, 31, 154 ),
+ ( 45, 32, 156 ),
+ ( 45, 33, 157 ),
+ ( 44, 34, 159 ),
+ ( 43, 36, 160 ),
+ ( 42, 37, 161 ),
+ ( 41, 39, 162 ),
+ ( 40, 41, 163 ),
+ ( 38, 43, 163 ),
+ ( 37, 45, 163 ),
+ ( 36, 46, 163 ),
+ ( 34, 48, 163 ),
+ ( 33, 50, 162 ),
+ ( 32, 52, 162 ),
+ ( 30, 53, 161 ),
+ ( 29, 55, 161 ),
+ ( 28, 57, 160 ),
+ ( 27, 58, 160 ),
+ ( 25, 60, 159 ),
+ ( 24, 61, 158 ),
+ ( 23, 63, 158 ),
+ ( 22, 64, 157 ),
+ ( 21, 65, 156 ),
+ ( 20, 67, 156 ),
+ ( 19, 68, 155 ),
+ ( 18, 69, 155 ),
+ ( 17, 71, 154 ),
+ ( 16, 72, 153 ),
+ ( 15, 73, 153 ),
+ ( 15, 74, 152 ),
+ ( 14, 76, 151 ),
+ ( 13, 77, 151 ),
+ ( 13, 78, 150 ),
+ ( 13, 79, 150 ),
+ ( 12, 80, 149 ),
+ ( 12, 81, 149 ),
+ ( 12, 82, 148 ),
+ ( 12, 83, 148 ),
+ ( 12, 84, 147 ),
+ ( 13, 85, 147 ),
+ ( 13, 86, 146 ),
+ ( 13, 87, 146 ),
+ ( 14, 88, 145 ),
+ ( 14, 89, 145 ),
+ ( 15, 90, 145 ),
+ ( 15, 91, 144 ),
+ ( 16, 92, 144 ),
+ ( 17, 93, 143 ),
+ ( 17, 94, 143 ),
+ ( 18, 95, 143 ),
+ ( 19, 96, 142 ),
+ ( 20, 97, 142 ),
+ ( 20, 98, 142 ),
+ ( 21, 99, 142 ),
+ ( 22, 99, 141 ),
+ ( 23, 100, 141 ),
+ ( 24, 101, 141 ),
+ ( 24, 102, 140 ),
+ ( 25, 103, 140 ),
+ ( 26, 104, 140 ),
+ ( 27, 105, 140 ),
+ ( 28, 106, 140 ),
+ ( 29, 107, 139 ),
+ ( 29, 107, 139 ),
+ ( 30, 108, 139 ),
+ ( 31, 109, 139 ),
+ ( 32, 110, 139 ),
+ ( 33, 111, 139 ),
+ ( 34, 112, 138 ),
+ ( 34, 113, 138 ),
+ ( 35, 113, 138 ),
+ ( 36, 114, 138 ),
+ ( 37, 115, 138 ),
+ ( 38, 116, 138 ),
+ ( 38, 117, 138 ),
+ ( 39, 118, 138 ),
+ ( 40, 118, 137 ),
+ ( 41, 119, 137 ),
+ ( 41, 120, 137 ),
+ ( 42, 121, 137 ),
+ ( 43, 122, 137 ),
+ ( 43, 123, 137 ),
+ ( 44, 124, 137 ),
+ ( 45, 124, 137 ),
+ ( 45, 125, 137 ),
+ ( 46, 126, 137 ),
+ ( 47, 127, 137 ),
+ ( 47, 128, 137 ),
+ ( 48, 129, 137 ),
+ ( 49, 130, 137 ),
+ ( 49, 130, 136 ),
+ ( 50, 131, 136 ),
+ ( 51, 132, 136 ),
+ ( 51, 133, 136 ),
+ ( 52, 134, 136 ),
+ ( 52, 135, 136 ),
+ ( 53, 136, 136 ),
+ ( 53, 137, 136 ),
+ ( 54, 137, 136 ),
+ ( 55, 138, 136 ),
+ ( 55, 139, 136 ),
+ ( 56, 140, 136 ),
+ ( 56, 141, 136 ),
+ ( 57, 142, 136 ),
+ ( 57, 143, 136 ),
+ ( 58, 144, 135 ),
+ ( 58, 144, 135 ),
+ ( 59, 145, 135 ),
+ ( 59, 146, 135 ),
+ ( 60, 147, 135 ),
+ ( 60, 148, 135 ),
+ ( 61, 149, 135 ),
+ ( 61, 150, 135 ),
+ ( 62, 151, 135 ),
+ ( 62, 152, 134 ),
+ ( 63, 153, 134 ),
+ ( 63, 153, 134 ),
+ ( 64, 154, 134 ),
+ ( 65, 155, 134 ),
+ ( 65, 156, 133 ),
+ ( 66, 157, 133 ),
+ ( 66, 158, 133 ),
+ ( 67, 159, 133 ),
+ ( 67, 160, 132 ),
+ ( 68, 161, 132 ),
+ ( 68, 162, 132 ),
+ ( 69, 163, 132 ),
+ ( 70, 164, 131 ),
+ ( 70, 164, 131 ),
+ ( 71, 165, 131 ),
+ ( 72, 166, 130 ),
+ ( 72, 167, 130 ),
+ ( 73, 168, 130 ),
+ ( 74, 169, 129 ),
+ ( 74, 170, 129 ),
+ ( 75, 171, 129 ),
+ ( 76, 172, 128 ),
+ ( 76, 173, 128 ),
+ ( 77, 174, 127 ),
+ ( 78, 174, 127 ),
+ ( 79, 175, 126 ),
+ ( 80, 176, 126 ),
+ ( 81, 177, 125 ),
+ ( 81, 178, 125 ),
+ ( 82, 179, 124 ),
+ ( 83, 180, 124 ),
+ ( 84, 181, 123 ),
+ ( 85, 182, 123 ),
+ ( 86, 183, 122 ),
+ ( 87, 184, 121 ),
+ ( 88, 184, 121 ),
+ ( 90, 185, 120 ),
+ ( 91, 186, 119 ),
+ ( 92, 187, 119 ),
+ ( 93, 188, 118 ),
+ ( 94, 189, 117 ),
+ ( 95, 190, 117 ),
+ ( 97, 191, 116 ),
+ ( 98, 191, 115 ),
+ ( 99, 192, 114 ),
+ ( 101, 193, 114 ),
+ ( 102, 194, 113 ),
+ ( 104, 195, 112 ),
+ ( 105, 196, 111 ),
+ ( 107, 196, 110 ),
+ ( 108, 197, 110 ),
+ ( 110, 198, 109 ),
+ ( 112, 199, 108 ),
+ ( 113, 200, 107 ),
+ ( 115, 200, 106 ),
+ ( 117, 201, 105 ),
+ ( 119, 202, 104 ),
+ ( 120, 203, 104 ),
+ ( 122, 203, 103 ),
+ ( 124, 204, 102 ),
+ ( 126, 205, 101 ),
+ ( 128, 206, 100 ),
+ ( 130, 206, 99 ),
+ ( 132, 207, 98 ),
+ ( 134, 208, 98 ),
+ ( 137, 208, 97 ),
+ ( 139, 209, 96 ),
+ ( 141, 210, 95 ),
+ ( 143, 210, 95 ),
+ ( 146, 211, 94 ),
+ ( 148, 211, 93 ),
+ ( 151, 212, 93 ),
+ ( 153, 212, 93 ),
+ ( 155, 213, 92 ),
+ ( 158, 214, 92 ),
+ ( 160, 214, 92 ),
+ ( 163, 215, 92 ),
+ ( 165, 215, 92 ),
+ ( 168, 216, 92 ),
+ ( 170, 216, 92 ),
+ ( 173, 216, 92 ),
+ ( 175, 217, 93 ),
+ ( 177, 217, 93 ),
+ ( 180, 218, 94 ),
+ ( 182, 218, 95 ),
+ ( 184, 219, 96 ),
+ ( 187, 219, 97 ),
+ ( 189, 220, 98 ),
+ ( 191, 220, 99 ),
+ ( 193, 221, 100 ),
+ ( 196, 221, 101 ),
+ ( 198, 222, 102 ),
+ ( 200, 222, 103 ),
+ ( 202, 223, 105 ),
+ ( 204, 223, 106 ),
+ ( 206, 224, 108 ),
+ ( 208, 224, 109 ),
+ ( 210, 225, 111 ),
+ ( 212, 225, 112 ),
+ ( 214, 226, 114 ),
+ ( 216, 226, 115 ),
+ ( 218, 227, 117 ),
+ ( 220, 227, 119 ),
+ ( 222, 228, 121 ),
+ ( 224, 229, 122 ),
+ ( 225, 229, 124 ),
+ ( 227, 230, 126 ),
+ ( 229, 230, 128 ),
+ ( 231, 231, 129 ),
+ ( 233, 231, 131 ),
+ ( 235, 232, 133 ),
+ ( 236, 233, 135 ),
+ ( 238, 233, 137 ),
+ ( 240, 234, 138 ),
+ ( 242, 234, 140 ),
+ ( 243, 235, 142 ),
+ ( 245, 236, 144 ),
+ ( 247, 236, 146 ),
+ ( 248, 237, 148 ),
+ ( 250, 238, 150 ),
+ ( 252, 238, 152 ),
+ ( 253, 239, 154 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Ice.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Ice.cs
new file mode 100644
index 000000000..4ce283b14
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Ice.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Ice : ByteColormapBase
+ {
+ public override string Name => "Ice";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 4, 6, 19 ),
+ ( 5, 6, 20 ),
+ ( 5, 7, 21 ),
+ ( 6, 8, 23 ),
+ ( 7, 9, 24 ),
+ ( 8, 10, 26 ),
+ ( 9, 11, 27 ),
+ ( 10, 12, 29 ),
+ ( 11, 13, 30 ),
+ ( 12, 13, 31 ),
+ ( 13, 14, 33 ),
+ ( 14, 15, 34 ),
+ ( 15, 16, 36 ),
+ ( 16, 17, 37 ),
+ ( 17, 18, 39 ),
+ ( 18, 19, 40 ),
+ ( 19, 19, 42 ),
+ ( 20, 20, 43 ),
+ ( 21, 21, 44 ),
+ ( 22, 22, 46 ),
+ ( 23, 23, 47 ),
+ ( 23, 24, 49 ),
+ ( 24, 24, 50 ),
+ ( 25, 25, 52 ),
+ ( 26, 26, 53 ),
+ ( 27, 27, 55 ),
+ ( 28, 28, 56 ),
+ ( 29, 28, 58 ),
+ ( 30, 29, 59 ),
+ ( 31, 30, 61 ),
+ ( 31, 31, 62 ),
+ ( 32, 31, 64 ),
+ ( 33, 32, 65 ),
+ ( 34, 33, 67 ),
+ ( 35, 34, 68 ),
+ ( 36, 34, 70 ),
+ ( 37, 35, 71 ),
+ ( 37, 36, 73 ),
+ ( 38, 37, 74 ),
+ ( 39, 37, 76 ),
+ ( 40, 38, 78 ),
+ ( 41, 39, 79 ),
+ ( 41, 40, 81 ),
+ ( 42, 40, 82 ),
+ ( 43, 41, 84 ),
+ ( 44, 42, 85 ),
+ ( 44, 43, 87 ),
+ ( 45, 43, 89 ),
+ ( 46, 44, 90 ),
+ ( 47, 45, 92 ),
+ ( 47, 46, 94 ),
+ ( 48, 47, 95 ),
+ ( 49, 47, 97 ),
+ ( 49, 48, 98 ),
+ ( 50, 49, 100 ),
+ ( 51, 50, 102 ),
+ ( 51, 50, 103 ),
+ ( 52, 51, 105 ),
+ ( 53, 52, 107 ),
+ ( 53, 53, 108 ),
+ ( 54, 53, 110 ),
+ ( 54, 54, 112 ),
+ ( 55, 55, 113 ),
+ ( 56, 56, 115 ),
+ ( 56, 57, 117 ),
+ ( 57, 57, 118 ),
+ ( 57, 58, 120 ),
+ ( 58, 59, 122 ),
+ ( 58, 60, 123 ),
+ ( 58, 61, 125 ),
+ ( 59, 62, 127 ),
+ ( 59, 62, 128 ),
+ ( 60, 63, 130 ),
+ ( 60, 64, 132 ),
+ ( 60, 65, 133 ),
+ ( 61, 66, 135 ),
+ ( 61, 67, 137 ),
+ ( 61, 68, 138 ),
+ ( 62, 69, 140 ),
+ ( 62, 70, 141 ),
+ ( 62, 71, 143 ),
+ ( 62, 72, 144 ),
+ ( 62, 73, 146 ),
+ ( 62, 73, 147 ),
+ ( 63, 74, 149 ),
+ ( 63, 75, 150 ),
+ ( 63, 76, 151 ),
+ ( 63, 78, 153 ),
+ ( 63, 79, 154 ),
+ ( 63, 80, 155 ),
+ ( 63, 81, 157 ),
+ ( 63, 82, 158 ),
+ ( 63, 83, 159 ),
+ ( 63, 84, 160 ),
+ ( 63, 85, 161 ),
+ ( 63, 86, 162 ),
+ ( 63, 87, 163 ),
+ ( 63, 88, 164 ),
+ ( 63, 89, 165 ),
+ ( 62, 90, 166 ),
+ ( 62, 92, 167 ),
+ ( 62, 93, 168 ),
+ ( 62, 94, 169 ),
+ ( 62, 95, 170 ),
+ ( 62, 96, 171 ),
+ ( 62, 97, 171 ),
+ ( 62, 98, 172 ),
+ ( 62, 99, 173 ),
+ ( 62, 101, 173 ),
+ ( 62, 102, 174 ),
+ ( 62, 103, 175 ),
+ ( 62, 104, 175 ),
+ ( 62, 105, 176 ),
+ ( 62, 106, 176 ),
+ ( 63, 107, 177 ),
+ ( 63, 108, 178 ),
+ ( 63, 110, 178 ),
+ ( 63, 111, 179 ),
+ ( 63, 112, 179 ),
+ ( 63, 113, 180 ),
+ ( 64, 114, 180 ),
+ ( 64, 115, 180 ),
+ ( 64, 116, 181 ),
+ ( 64, 117, 181 ),
+ ( 65, 118, 182 ),
+ ( 65, 120, 182 ),
+ ( 66, 121, 183 ),
+ ( 66, 122, 183 ),
+ ( 66, 123, 183 ),
+ ( 67, 124, 184 ),
+ ( 67, 125, 184 ),
+ ( 68, 126, 185 ),
+ ( 68, 127, 185 ),
+ ( 69, 128, 185 ),
+ ( 69, 129, 186 ),
+ ( 70, 130, 186 ),
+ ( 70, 132, 187 ),
+ ( 71, 133, 187 ),
+ ( 71, 134, 187 ),
+ ( 72, 135, 188 ),
+ ( 73, 136, 188 ),
+ ( 73, 137, 188 ),
+ ( 74, 138, 189 ),
+ ( 75, 139, 189 ),
+ ( 75, 140, 189 ),
+ ( 76, 141, 190 ),
+ ( 77, 142, 190 ),
+ ( 78, 143, 191 ),
+ ( 78, 144, 191 ),
+ ( 79, 145, 191 ),
+ ( 80, 146, 192 ),
+ ( 81, 148, 192 ),
+ ( 81, 149, 192 ),
+ ( 82, 150, 193 ),
+ ( 83, 151, 193 ),
+ ( 84, 152, 194 ),
+ ( 85, 153, 194 ),
+ ( 85, 154, 194 ),
+ ( 86, 155, 195 ),
+ ( 87, 156, 195 ),
+ ( 88, 157, 195 ),
+ ( 89, 158, 196 ),
+ ( 90, 159, 196 ),
+ ( 91, 160, 197 ),
+ ( 92, 161, 197 ),
+ ( 93, 162, 197 ),
+ ( 94, 163, 198 ),
+ ( 95, 164, 198 ),
+ ( 95, 166, 199 ),
+ ( 96, 167, 199 ),
+ ( 97, 168, 199 ),
+ ( 98, 169, 200 ),
+ ( 99, 170, 200 ),
+ ( 100, 171, 201 ),
+ ( 101, 172, 201 ),
+ ( 103, 173, 201 ),
+ ( 104, 174, 202 ),
+ ( 105, 175, 202 ),
+ ( 106, 176, 203 ),
+ ( 107, 177, 203 ),
+ ( 108, 178, 203 ),
+ ( 109, 179, 204 ),
+ ( 110, 180, 204 ),
+ ( 111, 181, 205 ),
+ ( 113, 182, 205 ),
+ ( 114, 184, 206 ),
+ ( 115, 185, 206 ),
+ ( 116, 186, 206 ),
+ ( 117, 187, 207 ),
+ ( 119, 188, 207 ),
+ ( 120, 189, 208 ),
+ ( 121, 190, 208 ),
+ ( 123, 191, 208 ),
+ ( 124, 192, 209 ),
+ ( 125, 193, 209 ),
+ ( 127, 194, 210 ),
+ ( 128, 195, 210 ),
+ ( 130, 196, 211 ),
+ ( 131, 197, 211 ),
+ ( 133, 198, 211 ),
+ ( 134, 199, 212 ),
+ ( 136, 200, 212 ),
+ ( 137, 201, 213 ),
+ ( 139, 202, 213 ),
+ ( 140, 203, 214 ),
+ ( 142, 204, 214 ),
+ ( 144, 205, 215 ),
+ ( 146, 206, 215 ),
+ ( 147, 207, 216 ),
+ ( 149, 208, 216 ),
+ ( 151, 209, 217 ),
+ ( 153, 210, 217 ),
+ ( 154, 211, 218 ),
+ ( 156, 212, 218 ),
+ ( 158, 213, 219 ),
+ ( 160, 214, 220 ),
+ ( 162, 214, 220 ),
+ ( 164, 215, 221 ),
+ ( 166, 216, 222 ),
+ ( 168, 217, 222 ),
+ ( 169, 218, 223 ),
+ ( 171, 219, 224 ),
+ ( 173, 220, 224 ),
+ ( 175, 221, 225 ),
+ ( 177, 222, 226 ),
+ ( 179, 223, 227 ),
+ ( 181, 224, 227 ),
+ ( 183, 225, 228 ),
+ ( 185, 226, 229 ),
+ ( 186, 227, 230 ),
+ ( 188, 228, 231 ),
+ ( 190, 229, 231 ),
+ ( 192, 230, 232 ),
+ ( 194, 230, 233 ),
+ ( 196, 231, 234 ),
+ ( 198, 232, 235 ),
+ ( 200, 233, 236 ),
+ ( 201, 234, 237 ),
+ ( 203, 235, 238 ),
+ ( 205, 236, 239 ),
+ ( 207, 237, 239 ),
+ ( 209, 238, 240 ),
+ ( 211, 239, 241 ),
+ ( 213, 240, 242 ),
+ ( 214, 241, 243 ),
+ ( 216, 242, 244 ),
+ ( 218, 243, 245 ),
+ ( 220, 244, 246 ),
+ ( 222, 245, 247 ),
+ ( 224, 246, 248 ),
+ ( 225, 247, 249 ),
+ ( 227, 249, 250 ),
+ ( 229, 250, 251 ),
+ ( 231, 251, 251 ),
+ ( 232, 252, 252 ),
+ ( 234, 253, 253 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Inferno.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Inferno.cs
new file mode 100644
index 000000000..72c038568
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Inferno.cs
@@ -0,0 +1,55 @@
+/* Inferno is a colormap by Nathaniel J. Smith and Stefan van der Walt
+ * https://bids.github.io/colormap/
+ * https://github.com/BIDS/colormap/blob/master/colormaps.py
+ *
+ * This colormap is provided under the CC0 license / public domain dedication
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Inferno : ArgbColormapBase
+ {
+ public override string Name => "Inferno";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly int[] _rgbs =
+ {
+ 00000003, 00000004, 00000006, 00065543, 00065801, 00065803, 00131342, 00131600,
+ 00197138, 00262932, 00262934, 00328728, 00394267, 00460061, 00525855, 00591393,
+ 00657187, 00722726, 00854056, 00919594, 00985389, 01050927, 01182258, 01247796,
+ 01313590, 01444665, 01510203, 01641278, 01706816, 01838147, 01903685, 02034759,
+ 02100298, 02231116, 02362190, 02493264, 02558802, 02689876, 02820694, 02951768,
+ 03017306, 03148380, 03279197, 03410271, 03475808, 03606881, 03737954, 03869028,
+ 03934565, 04065638, 04196710, 04262247, 04393576, 04524649, 04590185, 04721514,
+ 04852586, 04918379, 05049451, 05180780, 05246316, 05377644, 05443181, 05574509,
+ 05705581, 05771373, 05902701, 05968238, 06099566, 06230638, 06296430, 06427758,
+ 06493294, 06624622, 06690158, 06821486, 06952814, 07018350, 07149678, 07215214,
+ 07346542, 07477613, 07543405, 07674733, 07740269, 07871597, 08002669, 08068460,
+ 08199532, 08265324, 08396651, 08462187, 08593515, 08724586, 08790378, 08921450,
+ 08987241, 09118313, 09249641, 09315432, 09446504, 09512295, 09643367, 09774694,
+ 09840230, 09971557, 10037348, 10168420, 10234211, 10365283, 10496610, 10562401,
+ 10693473, 10759264, 10890335, 10956127, 11087454, 11218525, 11284316, 11415643,
+ 11481435, 11612506, 11678297, 11809624, 11875159, 12006486, 12072278, 12203605,
+ 12269396, 12400467, 12466258, 12532049, 12663376, 12729167, 12860494, 12926285,
+ 13057612, 13123147, 13188938, 13320265, 13386056, 13451847, 13583430, 13649220,
+ 13715011, 13780802, 13912129, 13977920, 14043711, 14109502, 14241085, 14306875,
+ 14372666, 14438457, 14504504, 14570295, 14636086, 14702132, 14833459, 14899250,
+ 14965297, 15031088, 15096878, 15097389, 15163180, 15229227, 15295018, 15361064,
+ 15426855, 15492902, 15558693, 15559203, 15625250, 15691041, 15757087, 15757342,
+ 15823389, 15889436, 15889690, 15955737, 15956248, 16022038, 16088085, 16088596,
+ 16154642, 16154897, 16220944, 16221454, 16287501, 16287756, 16288267, 16354313,
+ 16354824, 16355336, 16421127, 16421638, 16422150, 16422662, 16488710, 16489222,
+ 16489734, 16489991, 16490503, 16491016, 16491530, 16492043, 16492557, 16493070,
+ 16493584, 16494098, 16494612, 16494870, 16495384, 16495898, 16496412, 16496926,
+ 16431905, 16432419, 16432933, 16433448, 16368426, 16368940, 16369455, 16304433,
+ 16304948, 16305463, 16240442, 16240956, 16175935, 16176450, 16111429, 16111944,
+ 16046923, 16047183, 15982162, 15982678, 15983193, 15918173, 15918688, 15853668,
+ 15853928, 15854444, 15854960, 15855220, 15855737, 15856253, 15922049, 15922309,
+ 15988361, 16054157, 16119953, 16186005, 16251801, 16383133, 16448928, 16580260,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | (uint)rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Jet.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Jet.cs
new file mode 100644
index 000000000..116a481aa
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Jet.cs
@@ -0,0 +1,54 @@
+/* The Jet colormap is provided under a MIT license.
+ * Do not use this colormap for heatmap data! See references:
+ * https://jakevdp.github.io/blog/2014/10/16/how-bad-is-your-colormap/
+ * https://bids.github.io/colormap/
+ * https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-for.html
+ */
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Jet : ArgbColormapBase
+ {
+ public override string Name => "Jet";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly int[] _rgbs =
+ {
+ 00000127, 00000132, 00000136, 00000141, 00000145, 00000150, 00000154, 00000159,
+ 00000163, 00000168, 00000172, 00000177, 00000182, 00000186, 00000191, 00000195,
+ 00000200, 00000204, 00000209, 00000213, 00000218, 00000222, 00000227, 00000232,
+ 00000236, 00000241, 00000245, 00000250, 00000254, 00000255, 00000255, 00000255,
+ 00000255, 00001279, 00002303, 00003327, 00004351, 00005375, 00006399, 00007423,
+ 00008447, 00009471, 00010495, 00011519, 00012543, 00013567, 00014591, 00015615,
+ 00016639, 00017663, 00018687, 00019711, 00020735, 00021759, 00022783, 00023807,
+ 00024831, 00025855, 00026879, 00027903, 00028927, 00029951, 00030975, 00031999,
+ 00033023, 00034047, 00035071, 00036095, 00037119, 00038143, 00039167, 00040191,
+ 00041215, 00042239, 00043263, 00044287, 00045311, 00046335, 00047359, 00048383,
+ 00049407, 00050431, 00051455, 00052479, 00053503, 00054527, 00055551, 00056574,
+ 00057594, 00058615, 00190708, 00388337, 00585965, 00849130, 01046759, 01244388,
+ 01441761, 01638365, 01900506, 02097111, 02293716, 02490320, 02752461, 02949066,
+ 03145671, 03342275, 03604416, 03801021, 03997626, 04194231, 04390835, 04652976,
+ 04849581, 05046186, 05242790, 05504931, 05701536, 05898141, 06094746, 06291350,
+ 06553491, 06750096, 06946701, 07143305, 07405446, 07602051, 07798656, 07995261,
+ 08191865, 08454006, 08650611, 08847216, 09043820, 09305961, 09502566, 09699171,
+ 09895775, 10157916, 10354521, 10551126, 10747731, 10944335, 11206476, 11403081,
+ 11599686, 11796290, 12058431, 12255036, 12451641, 12648246, 12844850, 13106991,
+ 13303596, 13500201, 13696805, 13958946, 14155551, 14352156, 14548760, 14745365,
+ 15007506, 15204111, 15400716, 15597320, 15858693, 16054274, 16249856, 16445440,
+ 16706816, 16771328, 16770304, 16769536, 16768512, 16767488, 16766720, 16765696,
+ 16764672, 16763648, 16762880, 16761856, 16760832, 16760064, 16759040, 16758016,
+ 16756992, 16756224, 16755200, 16754176, 16753408, 16752384, 16751360, 16750592,
+ 16749568, 16748544, 16747520, 16746752, 16745728, 16744704, 16743936, 16742912,
+ 16741888, 16741120, 16740096, 16739072, 16738048, 16737280, 16736256, 16735232,
+ 16734464, 16733440, 16732416, 16731392, 16730624, 16729600, 16728576, 16727808,
+ 16726784, 16725760, 16724992, 16723968, 16722944, 16721920, 16721152, 16720128,
+ 16719104, 16718336, 16717312, 16650752, 16387840, 16059136, 15795968, 15467264,
+ 15204352, 14876672, 14548992, 14286848, 13959168, 13697024, 13369344, 13107200,
+ 12779520, 12517376, 12189696, 11927552, 11599872, 11272192, 11010048, 10682368,
+ 10420224, 10092544, 09830400, 09502720, 09240576, 08912896, 08650752, 08323072,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | (uint)rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Magma.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Magma.cs
new file mode 100644
index 000000000..91ac4ab0d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Magma.cs
@@ -0,0 +1,55 @@
+/* Magma is a colormap by Nathaniel J. Smith and Stefan van der Walt
+ * https://bids.github.io/colormap/
+ * https://github.com/BIDS/colormap/blob/master/colormaps.py
+ *
+ * This colormap is provided under the CC0 license / public domain dedication
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Magma : ArgbColormapBase
+ {
+ public override string Name => "Magma";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly int[] _rgbs =
+ {
+ 00000003, 00000004, 00000006, 00065543, 00065801, 00065803, 00131597, 00131599,
+ 00197393, 00262931, 00263189, 00328727, 00394521, 00460059, 00525853, 00591647,
+ 00657186, 00722980, 00788774, 00854568, 00920106, 00985900, 01051695, 01117233,
+ 01183027, 01314101, 01379896, 01445434, 01511228, 01576767, 01708097, 01773636,
+ 01839174, 01970249, 02036043, 02101581, 02232656, 02298194, 02429269, 02494807,
+ 02625881, 02756956, 02822494, 02953312, 03084386, 03149925, 03280999, 03412072,
+ 03477354, 03608428, 03739502, 03870575, 03936113, 04067186, 04198259, 04329332,
+ 04394869, 04525942, 04657015, 04722808, 04853881, 04919417, 05050746, 05181819,
+ 05247611, 05378684, 05444476, 05575549, 05706877, 05772670, 05903742, 05969534,
+ 06100862, 06166399, 06297727, 06363263, 06494591, 06625920, 06691456, 06822784,
+ 06888576, 07019648, 07085440, 07216769, 07282305, 07413633, 07544705, 07610497,
+ 07741825, 07807361, 07938689, 08004225, 08135553, 08266881, 08332417, 08463745,
+ 08529281, 08660609, 08726145, 08857473, 08988801, 09054337, 09185664, 09251200,
+ 09382528, 09513600, 09579392, 09710464, 09776256, 09907327, 10038655, 10104191,
+ 10235519, 10366590, 10432382, 10563454, 10694782, 10760317, 10891645, 10957181,
+ 11088508, 11219836, 11285371, 11416699, 11547771, 11613562, 11744634, 11875961,
+ 11941497, 12072824, 12138360, 12269687, 12401015, 12466550, 12597877, 12728949,
+ 12794740, 12926068, 12991603, 13122930, 13254258, 13319793, 13451120, 13516912,
+ 13648239, 13714030, 13845101, 13910893, 14042220, 14108011, 14239338, 14305129,
+ 14436457, 14502248, 14568039, 14699366, 14765158, 14830949, 14962276, 15028323,
+ 15094114, 15159906, 15225953, 15357280, 15423072, 15489119, 15554911, 15620958,
+ 15621469, 15687261, 15753309, 15819100, 15885148, 15951196, 15951707, 16017499,
+ 16083547, 16084059, 16150107, 16150619, 16216411, 16216924, 16282972, 16283484,
+ 16349532, 16350045, 16350557, 16416606, 16416862, 16417375, 16483424, 16483936,
+ 16484449, 16484962, 16551011, 16551523, 16552036, 16552549, 16552806, 16618855,
+ 16619368, 16619881, 16620394, 16620907, 16621420, 16621934, 16622191, 16622704,
+ 16688753, 16689267, 16689780, 16690293, 16690806, 16691064, 16691577, 16692091,
+ 16692604, 16693117, 16693631, 16694144, 16694402, 16694915, 16695429, 16695942,
+ 16696456, 16696969, 16697227, 16697741, 16698254, 16633232, 16633746, 16634259,
+ 16634517, 16635031, 16635544, 16636058, 16636572, 16637085, 16637343, 16637857,
+ 16638371, 16573349, 16573862, 16574120, 16574634, 16575148, 16575662, 16576176,
+ 16576689, 16576947, 16577461, 16577975, 16512953, 16513467, 16513725, 16514239,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | (uint)rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Matter.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Matter.cs
new file mode 100644
index 000000000..65e2c4039
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Matter.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Matter : ByteColormapBase
+ {
+ public override string Name => "Matter";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 254, 237, 176 ),
+ ( 253, 236, 175 ),
+ ( 253, 234, 173 ),
+ ( 253, 233, 172 ),
+ ( 253, 232, 171 ),
+ ( 253, 230, 169 ),
+ ( 253, 229, 168 ),
+ ( 253, 227, 167 ),
+ ( 253, 226, 165 ),
+ ( 252, 225, 164 ),
+ ( 252, 223, 163 ),
+ ( 252, 222, 161 ),
+ ( 252, 220, 160 ),
+ ( 252, 219, 159 ),
+ ( 252, 218, 157 ),
+ ( 252, 216, 156 ),
+ ( 251, 215, 155 ),
+ ( 251, 213, 154 ),
+ ( 251, 212, 152 ),
+ ( 251, 211, 151 ),
+ ( 251, 209, 150 ),
+ ( 251, 208, 148 ),
+ ( 251, 207, 147 ),
+ ( 250, 205, 146 ),
+ ( 250, 204, 145 ),
+ ( 250, 202, 144 ),
+ ( 250, 201, 142 ),
+ ( 250, 200, 141 ),
+ ( 250, 198, 140 ),
+ ( 250, 197, 139 ),
+ ( 249, 195, 138 ),
+ ( 249, 194, 136 ),
+ ( 249, 193, 135 ),
+ ( 249, 191, 134 ),
+ ( 249, 190, 133 ),
+ ( 249, 189, 132 ),
+ ( 248, 187, 131 ),
+ ( 248, 186, 130 ),
+ ( 248, 184, 128 ),
+ ( 248, 183, 127 ),
+ ( 248, 182, 126 ),
+ ( 247, 180, 125 ),
+ ( 247, 179, 124 ),
+ ( 247, 178, 123 ),
+ ( 247, 176, 122 ),
+ ( 247, 175, 121 ),
+ ( 246, 174, 120 ),
+ ( 246, 172, 119 ),
+ ( 246, 171, 118 ),
+ ( 246, 169, 117 ),
+ ( 245, 168, 116 ),
+ ( 245, 167, 115 ),
+ ( 245, 165, 114 ),
+ ( 245, 164, 113 ),
+ ( 245, 163, 112 ),
+ ( 244, 161, 111 ),
+ ( 244, 160, 110 ),
+ ( 244, 159, 109 ),
+ ( 244, 157, 108 ),
+ ( 243, 156, 107 ),
+ ( 243, 154, 106 ),
+ ( 243, 153, 105 ),
+ ( 242, 152, 104 ),
+ ( 242, 150, 104 ),
+ ( 242, 149, 103 ),
+ ( 242, 148, 102 ),
+ ( 241, 146, 101 ),
+ ( 241, 145, 100 ),
+ ( 241, 143, 99 ),
+ ( 240, 142, 99 ),
+ ( 240, 141, 98 ),
+ ( 240, 139, 97 ),
+ ( 239, 138, 96 ),
+ ( 239, 137, 96 ),
+ ( 239, 135, 95 ),
+ ( 238, 134, 94 ),
+ ( 238, 133, 94 ),
+ ( 238, 131, 93 ),
+ ( 237, 130, 92 ),
+ ( 237, 129, 92 ),
+ ( 237, 127, 91 ),
+ ( 236, 126, 90 ),
+ ( 236, 124, 90 ),
+ ( 236, 123, 89 ),
+ ( 235, 122, 89 ),
+ ( 235, 120, 88 ),
+ ( 234, 119, 88 ),
+ ( 234, 118, 87 ),
+ ( 233, 116, 87 ),
+ ( 233, 115, 86 ),
+ ( 233, 114, 86 ),
+ ( 232, 112, 86 ),
+ ( 232, 111, 85 ),
+ ( 231, 110, 85 ),
+ ( 231, 108, 85 ),
+ ( 230, 107, 84 ),
+ ( 230, 106, 84 ),
+ ( 229, 104, 84 ),
+ ( 229, 103, 84 ),
+ ( 228, 102, 83 ),
+ ( 227, 100, 83 ),
+ ( 227, 99, 83 ),
+ ( 226, 98, 83 ),
+ ( 226, 96, 83 ),
+ ( 225, 95, 83 ),
+ ( 224, 94, 83 ),
+ ( 224, 93, 83 ),
+ ( 223, 91, 83 ),
+ ( 223, 90, 83 ),
+ ( 222, 89, 83 ),
+ ( 221, 88, 83 ),
+ ( 220, 86, 83 ),
+ ( 220, 85, 83 ),
+ ( 219, 84, 83 ),
+ ( 218, 83, 83 ),
+ ( 217, 81, 83 ),
+ ( 217, 80, 83 ),
+ ( 216, 79, 84 ),
+ ( 215, 78, 84 ),
+ ( 214, 77, 84 ),
+ ( 213, 76, 84 ),
+ ( 213, 75, 84 ),
+ ( 212, 74, 85 ),
+ ( 211, 72, 85 ),
+ ( 210, 71, 85 ),
+ ( 209, 70, 86 ),
+ ( 208, 69, 86 ),
+ ( 207, 68, 86 ),
+ ( 206, 67, 86 ),
+ ( 205, 66, 87 ),
+ ( 204, 65, 87 ),
+ ( 203, 64, 87 ),
+ ( 202, 63, 88 ),
+ ( 201, 62, 88 ),
+ ( 200, 61, 88 ),
+ ( 199, 61, 89 ),
+ ( 198, 60, 89 ),
+ ( 197, 59, 89 ),
+ ( 196, 58, 90 ),
+ ( 195, 57, 90 ),
+ ( 194, 56, 90 ),
+ ( 193, 55, 91 ),
+ ( 192, 54, 91 ),
+ ( 191, 54, 91 ),
+ ( 190, 53, 92 ),
+ ( 189, 52, 92 ),
+ ( 187, 51, 92 ),
+ ( 186, 50, 93 ),
+ ( 185, 50, 93 ),
+ ( 184, 49, 93 ),
+ ( 183, 48, 94 ),
+ ( 182, 47, 94 ),
+ ( 181, 47, 94 ),
+ ( 179, 46, 95 ),
+ ( 178, 45, 95 ),
+ ( 177, 45, 95 ),
+ ( 176, 44, 95 ),
+ ( 175, 43, 96 ),
+ ( 174, 43, 96 ),
+ ( 172, 42, 96 ),
+ ( 171, 41, 96 ),
+ ( 170, 41, 97 ),
+ ( 169, 40, 97 ),
+ ( 167, 40, 97 ),
+ ( 166, 39, 97 ),
+ ( 165, 38, 98 ),
+ ( 164, 38, 98 ),
+ ( 163, 37, 98 ),
+ ( 161, 37, 98 ),
+ ( 160, 36, 98 ),
+ ( 159, 36, 98 ),
+ ( 158, 35, 99 ),
+ ( 156, 35, 99 ),
+ ( 155, 34, 99 ),
+ ( 154, 34, 99 ),
+ ( 153, 34, 99 ),
+ ( 151, 33, 99 ),
+ ( 150, 33, 99 ),
+ ( 149, 32, 99 ),
+ ( 147, 32, 99 ),
+ ( 146, 31, 99 ),
+ ( 145, 31, 99 ),
+ ( 144, 31, 99 ),
+ ( 142, 30, 99 ),
+ ( 141, 30, 99 ),
+ ( 140, 30, 99 ),
+ ( 138, 29, 99 ),
+ ( 137, 29, 99 ),
+ ( 136, 29, 99 ),
+ ( 134, 29, 99 ),
+ ( 133, 28, 99 ),
+ ( 132, 28, 99 ),
+ ( 130, 28, 99 ),
+ ( 129, 28, 99 ),
+ ( 128, 27, 98 ),
+ ( 126, 27, 98 ),
+ ( 125, 27, 98 ),
+ ( 124, 27, 98 ),
+ ( 122, 27, 98 ),
+ ( 121, 26, 97 ),
+ ( 120, 26, 97 ),
+ ( 118, 26, 97 ),
+ ( 117, 26, 97 ),
+ ( 116, 26, 96 ),
+ ( 114, 26, 96 ),
+ ( 113, 25, 96 ),
+ ( 112, 25, 95 ),
+ ( 110, 25, 95 ),
+ ( 109, 25, 94 ),
+ ( 107, 25, 94 ),
+ ( 106, 25, 94 ),
+ ( 105, 25, 93 ),
+ ( 103, 25, 93 ),
+ ( 102, 24, 92 ),
+ ( 101, 24, 92 ),
+ ( 99, 24, 91 ),
+ ( 98, 24, 91 ),
+ ( 97, 24, 90 ),
+ ( 95, 24, 90 ),
+ ( 94, 24, 89 ),
+ ( 93, 23, 88 ),
+ ( 91, 23, 88 ),
+ ( 90, 23, 87 ),
+ ( 89, 23, 87 ),
+ ( 87, 23, 86 ),
+ ( 86, 23, 85 ),
+ ( 85, 23, 85 ),
+ ( 83, 22, 84 ),
+ ( 82, 22, 83 ),
+ ( 81, 22, 83 ),
+ ( 79, 22, 82 ),
+ ( 78, 22, 81 ),
+ ( 77, 21, 81 ),
+ ( 75, 21, 80 ),
+ ( 74, 21, 79 ),
+ ( 73, 21, 78 ),
+ ( 71, 21, 78 ),
+ ( 70, 20, 77 ),
+ ( 69, 20, 76 ),
+ ( 68, 20, 75 ),
+ ( 66, 20, 75 ),
+ ( 65, 19, 74 ),
+ ( 64, 19, 73 ),
+ ( 62, 19, 72 ),
+ ( 61, 19, 71 ),
+ ( 60, 18, 71 ),
+ ( 59, 18, 70 ),
+ ( 57, 18, 69 ),
+ ( 56, 17, 68 ),
+ ( 55, 17, 67 ),
+ ( 54, 17, 66 ),
+ ( 52, 17, 65 ),
+ ( 51, 16, 65 ),
+ ( 50, 16, 64 ),
+ ( 48, 15, 63 ),
+ ( 47, 15, 62 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Oxy.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Oxy.cs
new file mode 100644
index 000000000..26991594c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Oxy.cs
@@ -0,0 +1,275 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Oxy : ByteColormapBase
+ {
+ public override string Name => "Oxy";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 64, 5, 5 ),
+ ( 65, 5, 5 ),
+ ( 67, 6, 6 ),
+ ( 68, 6, 6 ),
+ ( 71, 6, 7 ),
+ ( 72, 6, 7 ),
+ ( 73, 6, 7 ),
+ ( 75, 6, 8 ),
+ ( 77, 7, 8 ),
+ ( 79, 7, 9 ),
+ ( 80, 7, 9 ),
+ ( 81, 7, 9 ),
+ ( 84, 7, 10 ),
+ ( 85, 7, 11 ),
+ ( 87, 7, 11 ),
+ ( 88, 7, 11 ),
+ ( 91, 7, 12 ),
+ ( 92, 7, 12 ),
+ ( 93, 7, 12 ),
+ ( 95, 7, 13 ),
+ ( 98, 7, 13 ),
+ ( 99, 7, 14 ),
+ ( 100, 7, 14 ),
+ ( 102, 7, 14 ),
+ ( 104, 7, 14 ),
+ ( 106, 6, 15 ),
+ ( 107, 6, 15 ),
+ ( 109, 6, 15 ),
+ ( 111, 6, 15 ),
+ ( 113, 6, 15 ),
+ ( 114, 6, 15 ),
+ ( 115, 5, 15 ),
+ ( 118, 5, 15 ),
+ ( 120, 5, 15 ),
+ ( 121, 5, 15 ),
+ ( 122, 5, 15 ),
+ ( 125, 5, 14 ),
+ ( 126, 5, 14 ),
+ ( 127, 6, 13 ),
+ ( 129, 6, 13 ),
+ ( 131, 8, 12 ),
+ ( 132, 9, 12 ),
+ ( 133, 10, 11 ),
+ ( 134, 12, 11 ),
+ ( 136, 14, 10 ),
+ ( 137, 16, 10 ),
+ ( 138, 17, 9 ),
+ ( 139, 19, 9 ),
+ ( 141, 21, 8 ),
+ ( 142, 23, 8 ),
+ ( 143, 24, 8 ),
+ ( 80, 79, 79 ),
+ ( 80, 80, 80 ),
+ ( 81, 81, 80 ),
+ ( 82, 81, 81 ),
+ ( 83, 83, 83 ),
+ ( 84, 84, 83 ),
+ ( 85, 84, 84 ),
+ ( 86, 85, 85 ),
+ ( 87, 87, 86 ),
+ ( 88, 87, 87 ),
+ ( 89, 88, 88 ),
+ ( 89, 89, 88 ),
+ ( 91, 90, 90 ),
+ ( 92, 91, 91 ),
+ ( 92, 92, 91 ),
+ ( 93, 93, 92 ),
+ ( 95, 94, 94 ),
+ ( 95, 95, 94 ),
+ ( 96, 96, 95 ),
+ ( 97, 96, 96 ),
+ ( 98, 98, 97 ),
+ ( 99, 99, 98 ),
+ ( 100, 99, 99 ),
+ ( 101, 100, 100 ),
+ ( 102, 102, 101 ),
+ ( 103, 102, 102 ),
+ ( 104, 103, 103 ),
+ ( 104, 104, 103 ),
+ ( 106, 105, 105 ),
+ ( 107, 106, 106 ),
+ ( 107, 107, 106 ),
+ ( 108, 108, 107 ),
+ ( 110, 109, 109 ),
+ ( 111, 110, 110 ),
+ ( 111, 111, 110 ),
+ ( 112, 112, 111 ),
+ ( 114, 113, 113 ),
+ ( 114, 114, 113 ),
+ ( 115, 115, 114 ),
+ ( 116, 115, 115 ),
+ ( 118, 117, 116 ),
+ ( 118, 118, 117 ),
+ ( 119, 119, 118 ),
+ ( 120, 119, 119 ),
+ ( 121, 121, 120 ),
+ ( 122, 122, 121 ),
+ ( 123, 123, 122 ),
+ ( 124, 123, 123 ),
+ ( 125, 125, 124 ),
+ ( 126, 126, 125 ),
+ ( 127, 127, 126 ),
+ ( 129, 128, 127 ),
+ ( 129, 129, 128 ),
+ ( 130, 130, 129 ),
+ ( 131, 131, 130 ),
+ ( 133, 132, 131 ),
+ ( 133, 133, 132 ),
+ ( 134, 134, 133 ),
+ ( 135, 135, 134 ),
+ ( 137, 136, 135 ),
+ ( 137, 137, 136 ),
+ ( 138, 138, 137 ),
+ ( 139, 139, 138 ),
+ ( 141, 140, 140 ),
+ ( 141, 141, 140 ),
+ ( 142, 142, 141 ),
+ ( 143, 143, 142 ),
+ ( 145, 144, 144 ),
+ ( 146, 145, 144 ),
+ ( 146, 146, 145 ),
+ ( 147, 147, 146 ),
+ ( 149, 149, 148 ),
+ ( 150, 149, 149 ),
+ ( 151, 150, 149 ),
+ ( 151, 151, 150 ),
+ ( 153, 153, 152 ),
+ ( 154, 154, 153 ),
+ ( 155, 154, 154 ),
+ ( 156, 155, 154 ),
+ ( 157, 157, 156 ),
+ ( 158, 158, 157 ),
+ ( 159, 159, 158 ),
+ ( 160, 160, 159 ),
+ ( 162, 161, 160 ),
+ ( 163, 162, 161 ),
+ ( 163, 163, 162 ),
+ ( 164, 164, 163 ),
+ ( 166, 166, 165 ),
+ ( 167, 166, 166 ),
+ ( 168, 167, 167 ),
+ ( 169, 168, 167 ),
+ ( 170, 170, 169 ),
+ ( 171, 171, 170 ),
+ ( 172, 172, 171 ),
+ ( 173, 173, 172 ),
+ ( 175, 174, 174 ),
+ ( 176, 175, 174 ),
+ ( 177, 176, 175 ),
+ ( 177, 177, 176 ),
+ ( 179, 179, 178 ),
+ ( 180, 180, 179 ),
+ ( 181, 181, 180 ),
+ ( 183, 183, 182 ),
+ ( 184, 183, 183 ),
+ ( 185, 184, 183 ),
+ ( 186, 185, 184 ),
+ ( 187, 187, 186 ),
+ ( 188, 188, 187 ),
+ ( 189, 189, 188 ),
+ ( 190, 190, 189 ),
+ ( 192, 192, 191 ),
+ ( 193, 193, 192 ),
+ ( 194, 194, 193 ),
+ ( 195, 195, 194 ),
+ ( 197, 197, 195 ),
+ ( 198, 197, 196 ),
+ ( 199, 198, 197 ),
+ ( 200, 199, 198 ),
+ ( 202, 201, 200 ),
+ ( 203, 202, 201 ),
+ ( 204, 203, 202 ),
+ ( 204, 204, 203 ),
+ ( 206, 206, 205 ),
+ ( 207, 207, 206 ),
+ ( 208, 208, 207 ),
+ ( 209, 209, 208 ),
+ ( 211, 211, 210 ),
+ ( 212, 212, 211 ),
+ ( 213, 213, 212 ),
+ ( 214, 214, 213 ),
+ ( 216, 216, 215 ),
+ ( 217, 217, 216 ),
+ ( 218, 218, 217 ),
+ ( 219, 219, 218 ),
+ ( 221, 221, 220 ),
+ ( 222, 222, 221 ),
+ ( 223, 223, 222 ),
+ ( 224, 224, 223 ),
+ ( 226, 226, 225 ),
+ ( 227, 227, 226 ),
+ ( 228, 228, 227 ),
+ ( 230, 229, 228 ),
+ ( 232, 231, 230 ),
+ ( 233, 232, 231 ),
+ ( 234, 233, 232 ),
+ ( 235, 235, 233 ),
+ ( 237, 237, 235 ),
+ ( 238, 238, 236 ),
+ ( 239, 239, 238 ),
+ ( 240, 240, 239 ),
+ ( 242, 242, 241 ),
+ ( 243, 243, 242 ),
+ ( 244, 244, 243 ),
+ ( 248, 254, 105 ),
+ ( 246, 253, 103 ),
+ ( 245, 252, 100 ),
+ ( 244, 252, 98 ),
+ ( 241, 250, 93 ),
+ ( 240, 249, 90 ),
+ ( 239, 248, 87 ),
+ ( 238, 247, 84 ),
+ ( 236, 245, 78 ),
+ ( 235, 243, 75 ),
+ ( 235, 242, 72 ),
+ ( 234, 241, 69 ),
+ ( 234, 238, 64 ),
+ ( 234, 237, 62 ),
+ ( 234, 235, 61 ),
+ ( 234, 234, 59 ),
+ ( 234, 231, 56 ),
+ ( 233, 230, 55 ),
+ ( 233, 228, 54 ),
+ ( 233, 227, 52 ),
+ ( 233, 224, 50 ),
+ ( 232, 223, 49 ),
+ ( 232, 221, 48 ),
+ ( 232, 220, 48 ),
+ ( 232, 217, 46 ),
+ ( 231, 216, 45 ),
+ ( 231, 215, 44 ),
+ ( 231, 213, 43 ),
+ ( 230, 211, 42 ),
+ ( 230, 209, 41 ),
+ ( 230, 208, 40 ),
+ ( 229, 207, 40 ),
+ ( 229, 204, 38 ),
+ ( 229, 203, 38 ),
+ ( 228, 201, 37 ),
+ ( 228, 200, 37 ),
+ ( 227, 198, 35 ),
+ ( 227, 196, 35 ),
+ ( 227, 195, 34 ),
+ ( 226, 194, 33 ),
+ ( 226, 191, 32 ),
+ ( 225, 190, 32 ),
+ ( 225, 189, 31 ),
+ ( 224, 187, 31 ),
+ ( 224, 185, 30 ),
+ ( 223, 184, 29 ),
+ ( 223, 182, 29 ),
+ ( 223, 181, 28 ),
+ ( 222, 179, 27 ),
+ ( 221, 177, 26 ),
+ ( 221, 176, 26 ),
+ ( 221, 175, 25 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Phase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Phase.cs
new file mode 100644
index 000000000..4880ff5f3
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Phase.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Phase : ByteColormapBase
+ {
+ public override string Name => "Phase";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 168, 120, 13 ),
+ ( 169, 119, 15 ),
+ ( 171, 118, 17 ),
+ ( 172, 117, 19 ),
+ ( 174, 116, 20 ),
+ ( 175, 115, 22 ),
+ ( 177, 114, 24 ),
+ ( 178, 113, 25 ),
+ ( 179, 112, 27 ),
+ ( 181, 111, 29 ),
+ ( 182, 110, 30 ),
+ ( 183, 109, 32 ),
+ ( 185, 108, 34 ),
+ ( 186, 107, 35 ),
+ ( 187, 106, 37 ),
+ ( 189, 105, 38 ),
+ ( 190, 104, 40 ),
+ ( 191, 103, 42 ),
+ ( 192, 102, 43 ),
+ ( 193, 101, 45 ),
+ ( 194, 100, 46 ),
+ ( 196, 98, 48 ),
+ ( 197, 97, 50 ),
+ ( 198, 96, 51 ),
+ ( 199, 95, 53 ),
+ ( 200, 94, 55 ),
+ ( 201, 93, 56 ),
+ ( 202, 92, 58 ),
+ ( 203, 90, 60 ),
+ ( 204, 89, 62 ),
+ ( 205, 88, 63 ),
+ ( 206, 87, 65 ),
+ ( 207, 86, 67 ),
+ ( 208, 84, 69 ),
+ ( 208, 83, 71 ),
+ ( 209, 82, 73 ),
+ ( 210, 81, 75 ),
+ ( 211, 79, 77 ),
+ ( 212, 78, 79 ),
+ ( 213, 77, 81 ),
+ ( 213, 75, 83 ),
+ ( 214, 74, 85 ),
+ ( 215, 73, 87 ),
+ ( 216, 71, 90 ),
+ ( 216, 70, 92 ),
+ ( 217, 69, 94 ),
+ ( 217, 67, 97 ),
+ ( 218, 66, 99 ),
+ ( 219, 64, 102 ),
+ ( 219, 63, 104 ),
+ ( 220, 61, 107 ),
+ ( 220, 60, 109 ),
+ ( 221, 58, 112 ),
+ ( 221, 57, 115 ),
+ ( 221, 56, 118 ),
+ ( 222, 54, 120 ),
+ ( 222, 53, 123 ),
+ ( 222, 51, 126 ),
+ ( 222, 50, 129 ),
+ ( 223, 49, 132 ),
+ ( 223, 47, 135 ),
+ ( 223, 46, 138 ),
+ ( 223, 45, 141 ),
+ ( 223, 43, 144 ),
+ ( 223, 42, 147 ),
+ ( 222, 41, 151 ),
+ ( 222, 40, 154 ),
+ ( 222, 40, 157 ),
+ ( 222, 39, 160 ),
+ ( 221, 38, 163 ),
+ ( 221, 38, 166 ),
+ ( 220, 37, 169 ),
+ ( 220, 37, 173 ),
+ ( 219, 37, 176 ),
+ ( 218, 37, 179 ),
+ ( 218, 38, 182 ),
+ ( 217, 38, 185 ),
+ ( 216, 39, 188 ),
+ ( 215, 39, 190 ),
+ ( 214, 40, 193 ),
+ ( 213, 41, 196 ),
+ ( 212, 42, 199 ),
+ ( 211, 43, 201 ),
+ ( 210, 45, 204 ),
+ ( 209, 46, 206 ),
+ ( 208, 47, 208 ),
+ ( 207, 49, 211 ),
+ ( 205, 50, 213 ),
+ ( 204, 52, 215 ),
+ ( 203, 53, 217 ),
+ ( 201, 55, 219 ),
+ ( 200, 57, 221 ),
+ ( 198, 58, 223 ),
+ ( 197, 60, 225 ),
+ ( 195, 62, 226 ),
+ ( 194, 63, 228 ),
+ ( 192, 65, 229 ),
+ ( 190, 67, 231 ),
+ ( 189, 69, 232 ),
+ ( 187, 70, 233 ),
+ ( 185, 72, 235 ),
+ ( 184, 74, 236 ),
+ ( 182, 75, 237 ),
+ ( 180, 77, 238 ),
+ ( 178, 79, 239 ),
+ ( 176, 80, 239 ),
+ ( 174, 82, 240 ),
+ ( 172, 84, 241 ),
+ ( 170, 85, 241 ),
+ ( 169, 87, 242 ),
+ ( 167, 89, 243 ),
+ ( 164, 90, 243 ),
+ ( 162, 92, 243 ),
+ ( 160, 93, 244 ),
+ ( 158, 95, 244 ),
+ ( 156, 96, 244 ),
+ ( 154, 98, 244 ),
+ ( 152, 99, 244 ),
+ ( 149, 101, 244 ),
+ ( 147, 102, 244 ),
+ ( 145, 104, 244 ),
+ ( 143, 105, 244 ),
+ ( 140, 107, 243 ),
+ ( 138, 108, 243 ),
+ ( 135, 109, 243 ),
+ ( 133, 111, 242 ),
+ ( 130, 112, 241 ),
+ ( 128, 113, 241 ),
+ ( 125, 115, 240 ),
+ ( 123, 116, 239 ),
+ ( 120, 117, 239 ),
+ ( 118, 119, 238 ),
+ ( 115, 120, 237 ),
+ ( 112, 121, 236 ),
+ ( 110, 122, 235 ),
+ ( 107, 123, 233 ),
+ ( 104, 124, 232 ),
+ ( 102, 126, 231 ),
+ ( 99, 127, 230 ),
+ ( 96, 128, 228 ),
+ ( 93, 129, 227 ),
+ ( 90, 130, 225 ),
+ ( 88, 131, 223 ),
+ ( 85, 132, 222 ),
+ ( 82, 133, 220 ),
+ ( 79, 134, 218 ),
+ ( 77, 135, 216 ),
+ ( 74, 135, 215 ),
+ ( 71, 136, 213 ),
+ ( 69, 137, 211 ),
+ ( 66, 138, 209 ),
+ ( 64, 138, 207 ),
+ ( 61, 139, 205 ),
+ ( 59, 140, 203 ),
+ ( 56, 140, 201 ),
+ ( 54, 141, 199 ),
+ ( 52, 142, 196 ),
+ ( 50, 142, 194 ),
+ ( 48, 143, 192 ),
+ ( 46, 143, 190 ),
+ ( 44, 144, 188 ),
+ ( 42, 144, 186 ),
+ ( 40, 145, 184 ),
+ ( 39, 145, 182 ),
+ ( 37, 145, 180 ),
+ ( 36, 146, 178 ),
+ ( 35, 146, 176 ),
+ ( 33, 146, 174 ),
+ ( 32, 147, 172 ),
+ ( 31, 147, 170 ),
+ ( 30, 147, 168 ),
+ ( 29, 148, 166 ),
+ ( 28, 148, 164 ),
+ ( 27, 148, 162 ),
+ ( 26, 148, 160 ),
+ ( 25, 149, 158 ),
+ ( 25, 149, 156 ),
+ ( 24, 149, 154 ),
+ ( 23, 149, 152 ),
+ ( 22, 150, 150 ),
+ ( 21, 150, 148 ),
+ ( 20, 150, 146 ),
+ ( 20, 150, 144 ),
+ ( 19, 151, 142 ),
+ ( 18, 151, 140 ),
+ ( 17, 151, 138 ),
+ ( 16, 151, 136 ),
+ ( 15, 151, 134 ),
+ ( 14, 152, 132 ),
+ ( 13, 152, 130 ),
+ ( 13, 152, 128 ),
+ ( 12, 152, 126 ),
+ ( 12, 152, 124 ),
+ ( 11, 153, 121 ),
+ ( 11, 153, 119 ),
+ ( 11, 153, 117 ),
+ ( 12, 153, 115 ),
+ ( 13, 153, 112 ),
+ ( 14, 153, 110 ),
+ ( 15, 154, 107 ),
+ ( 17, 154, 105 ),
+ ( 19, 154, 102 ),
+ ( 21, 154, 99 ),
+ ( 23, 154, 97 ),
+ ( 25, 154, 94 ),
+ ( 28, 154, 91 ),
+ ( 31, 154, 88 ),
+ ( 33, 154, 85 ),
+ ( 36, 154, 82 ),
+ ( 39, 154, 79 ),
+ ( 43, 154, 76 ),
+ ( 46, 154, 73 ),
+ ( 49, 153, 70 ),
+ ( 53, 153, 67 ),
+ ( 56, 153, 64 ),
+ ( 60, 153, 60 ),
+ ( 64, 152, 57 ),
+ ( 67, 152, 54 ),
+ ( 71, 151, 50 ),
+ ( 75, 151, 47 ),
+ ( 79, 150, 44 ),
+ ( 83, 150, 41 ),
+ ( 86, 149, 38 ),
+ ( 90, 148, 35 ),
+ ( 94, 148, 32 ),
+ ( 97, 147, 30 ),
+ ( 101, 146, 27 ),
+ ( 104, 145, 25 ),
+ ( 107, 144, 23 ),
+ ( 111, 144, 22 ),
+ ( 114, 143, 20 ),
+ ( 116, 142, 19 ),
+ ( 119, 141, 18 ),
+ ( 122, 140, 17 ),
+ ( 125, 139, 16 ),
+ ( 127, 139, 15 ),
+ ( 130, 138, 15 ),
+ ( 132, 137, 14 ),
+ ( 134, 136, 14 ),
+ ( 136, 135, 14 ),
+ ( 139, 134, 13 ),
+ ( 141, 133, 13 ),
+ ( 143, 132, 13 ),
+ ( 145, 131, 13 ),
+ ( 147, 131, 13 ),
+ ( 149, 130, 13 ),
+ ( 151, 129, 13 ),
+ ( 153, 128, 13 ),
+ ( 155, 127, 13 ),
+ ( 157, 126, 13 ),
+ ( 159, 125, 13 ),
+ ( 161, 124, 13 ),
+ ( 162, 123, 13 ),
+ ( 164, 122, 13 ),
+ ( 166, 121, 13 ),
+ ( 168, 120, 13 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Plasma.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Plasma.cs
new file mode 100644
index 000000000..b35101f55
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Plasma.cs
@@ -0,0 +1,55 @@
+/* Plasma is a colormap by Nathaniel J. Smith and Stefan van der Walt
+ * https://bids.github.io/colormap/
+ * https://github.com/BIDS/colormap/blob/master/colormaps.py
+ *
+ * This colormap is provided under the CC0 license / public domain dedication
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Plasma : ArgbColormapBase
+ {
+ public override string Name => "Plasma";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly uint[] _rgbs =
+ {
+ 00788358, 01050503, 01246857, 01377930, 01574539, 01771148, 01902221, 02033038,
+ 02164111, 02295184, 02426257, 02557330, 02688403, 02819476, 02950292, 03081365,
+ 03212438, 03343511, 03409048, 03540120, 03671193, 03802266, 03867546, 03998619,
+ 04129692, 04195228, 04326301, 04457374, 04522910, 04653727, 04784799, 04850336,
+ 04981409, 05112481, 05178018, 05308834, 05374371, 05505443, 05636515, 05702052,
+ 05833124, 05898405, 06029477, 06160549, 06226086, 06357158, 06422694, 06553767,
+ 06619303, 06750375, 06815911, 06946983, 07078056, 07143592, 07274664, 07340200,
+ 07471272, 07536808, 07667880, 07733672, 07864744, 07930280, 08061608, 08127143,
+ 08258471, 08324007, 08455335, 08520871, 08652198, 08717990, 08783782, 08914853,
+ 08980645, 09111972, 09177764, 09309348, 09375139, 09440931, 09572258, 09638049,
+ 09769377, 09835168, 09900960, 10032287, 10098078, 10164126, 10295453, 10361244,
+ 10427035, 10492827, 10624154, 10689945, 10755736, 10821527, 10953111, 11018902,
+ 11084693, 11150484, 11281811, 11347602, 11413393, 11479184, 11545231, 11611023,
+ 11676814, 11808141, 11873932, 11939723, 12005514, 12071561, 12137352, 12203143,
+ 12268934, 12334725, 12400516, 12466307, 12532098, 12598145, 12663936, 12729728,
+ 12795519, 12861310, 12927101, 12992892, 13058683, 13124730, 13190521, 13256312,
+ 13322103, 13387894, 13453685, 13519477, 13585268, 13651315, 13717106, 13717361,
+ 13783152, 13848943, 13914734, 13980525, 14046573, 14112364, 14112619, 14178410,
+ 14244201, 14309992, 14375783, 14441830, 14442086, 14507877, 14573668, 14639459,
+ 14639714, 14705761, 14771552, 14837344, 14903135, 14903390, 14969437, 15035228,
+ 15035483, 15101274, 15167066, 15233113, 15233368, 15299159, 15364950, 15365205,
+ 15431252, 15497044, 15497299, 15563090, 15563601, 15629392, 15695183, 15695438,
+ 15761485, 15761741, 15827532, 15893579, 15893834, 15959625, 15959880, 16025927,
+ 16026183, 16091974, 16092485, 16158276, 16158531, 16159042, 16224833, 16225089,
+ 16291136, 16291391, 16291902, 16357693, 16357948, 16423995, 16424250, 16424762,
+ 16425017, 16491064, 16491319, 16491574, 16557621, 16557877, 16558388, 16558643,
+ 16559154, 16559409, 16625457, 16625712, 16626223, 16626478, 16626989, 16627245,
+ 16627756, 16628011, 16628523, 16628778, 16629289, 16629801, 16630056, 16630568,
+ 16630823, 16631334, 16566054, 16566566, 16567077, 16567333, 16567845, 16502820,
+ 16503076, 16503588, 16438564, 16438820, 16439332, 16374052, 16374564, 16309540,
+ 16310052, 16244772, 16245285, 16180261, 16180517, 16115494, 16116006, 16050726,
+ 15985702, 15986214, 15921190, 15921446, 15856422, 15791397, 15791651, 15726625,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Rain.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Rain.cs
new file mode 100644
index 000000000..5f1ef2297
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Rain.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Rain : ByteColormapBase
+ {
+ public override string Name => "Rain";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 238, 237, 243 ),
+ ( 238, 236, 241 ),
+ ( 237, 235, 240 ),
+ ( 236, 234, 238 ),
+ ( 235, 233, 236 ),
+ ( 235, 232, 235 ),
+ ( 234, 231, 233 ),
+ ( 233, 230, 232 ),
+ ( 232, 229, 230 ),
+ ( 232, 228, 229 ),
+ ( 231, 227, 227 ),
+ ( 230, 226, 226 ),
+ ( 229, 225, 224 ),
+ ( 228, 223, 223 ),
+ ( 228, 222, 221 ),
+ ( 227, 221, 220 ),
+ ( 227, 220, 218 ),
+ ( 226, 219, 216 ),
+ ( 226, 218, 214 ),
+ ( 225, 217, 212 ),
+ ( 224, 216, 211 ),
+ ( 224, 215, 209 ),
+ ( 223, 214, 207 ),
+ ( 223, 213, 205 ),
+ ( 222, 212, 203 ),
+ ( 222, 211, 201 ),
+ ( 221, 209, 199 ),
+ ( 221, 208, 197 ),
+ ( 220, 207, 195 ),
+ ( 220, 206, 193 ),
+ ( 219, 205, 191 ),
+ ( 219, 204, 190 ),
+ ( 219, 203, 188 ),
+ ( 218, 202, 186 ),
+ ( 218, 201, 184 ),
+ ( 217, 200, 182 ),
+ ( 216, 199, 180 ),
+ ( 216, 198, 178 ),
+ ( 215, 197, 176 ),
+ ( 215, 196, 174 ),
+ ( 214, 195, 172 ),
+ ( 213, 194, 170 ),
+ ( 213, 193, 168 ),
+ ( 212, 192, 166 ),
+ ( 211, 191, 164 ),
+ ( 210, 191, 162 ),
+ ( 209, 190, 160 ),
+ ( 208, 189, 158 ),
+ ( 207, 188, 156 ),
+ ( 205, 188, 155 ),
+ ( 204, 187, 153 ),
+ ( 203, 186, 152 ),
+ ( 201, 186, 150 ),
+ ( 200, 185, 149 ),
+ ( 198, 185, 148 ),
+ ( 196, 184, 146 ),
+ ( 195, 183, 145 ),
+ ( 193, 183, 144 ),
+ ( 192, 182, 143 ),
+ ( 190, 182, 142 ),
+ ( 188, 181, 141 ),
+ ( 186, 181, 141 ),
+ ( 185, 180, 140 ),
+ ( 183, 179, 139 ),
+ ( 181, 179, 138 ),
+ ( 180, 178, 137 ),
+ ( 178, 178, 137 ),
+ ( 176, 177, 136 ),
+ ( 174, 177, 135 ),
+ ( 173, 176, 135 ),
+ ( 171, 176, 134 ),
+ ( 169, 175, 133 ),
+ ( 168, 174, 133 ),
+ ( 166, 174, 132 ),
+ ( 164, 173, 132 ),
+ ( 162, 173, 131 ),
+ ( 161, 172, 130 ),
+ ( 159, 172, 130 ),
+ ( 157, 171, 129 ),
+ ( 156, 170, 129 ),
+ ( 154, 170, 128 ),
+ ( 152, 169, 128 ),
+ ( 150, 169, 127 ),
+ ( 149, 168, 126 ),
+ ( 147, 168, 126 ),
+ ( 145, 167, 125 ),
+ ( 144, 167, 125 ),
+ ( 142, 166, 124 ),
+ ( 140, 165, 124 ),
+ ( 138, 165, 123 ),
+ ( 137, 164, 123 ),
+ ( 135, 164, 122 ),
+ ( 133, 163, 122 ),
+ ( 131, 163, 121 ),
+ ( 130, 162, 120 ),
+ ( 128, 161, 120 ),
+ ( 126, 161, 119 ),
+ ( 124, 160, 119 ),
+ ( 122, 160, 118 ),
+ ( 121, 159, 118 ),
+ ( 119, 159, 117 ),
+ ( 117, 158, 117 ),
+ ( 115, 157, 117 ),
+ ( 113, 157, 116 ),
+ ( 111, 156, 116 ),
+ ( 109, 156, 115 ),
+ ( 107, 155, 115 ),
+ ( 105, 155, 114 ),
+ ( 103, 154, 114 ),
+ ( 101, 154, 114 ),
+ ( 100, 153, 113 ),
+ ( 97, 152, 113 ),
+ ( 95, 152, 113 ),
+ ( 93, 151, 112 ),
+ ( 91, 151, 112 ),
+ ( 89, 150, 112 ),
+ ( 87, 149, 111 ),
+ ( 85, 149, 111 ),
+ ( 83, 148, 111 ),
+ ( 81, 148, 111 ),
+ ( 79, 147, 110 ),
+ ( 76, 147, 110 ),
+ ( 74, 146, 110 ),
+ ( 72, 145, 110 ),
+ ( 70, 145, 110 ),
+ ( 67, 144, 110 ),
+ ( 65, 143, 110 ),
+ ( 63, 143, 110 ),
+ ( 61, 142, 110 ),
+ ( 58, 141, 109 ),
+ ( 56, 141, 109 ),
+ ( 54, 140, 109 ),
+ ( 52, 139, 109 ),
+ ( 49, 139, 110 ),
+ ( 47, 138, 110 ),
+ ( 45, 137, 110 ),
+ ( 43, 137, 110 ),
+ ( 41, 136, 110 ),
+ ( 38, 135, 110 ),
+ ( 36, 134, 110 ),
+ ( 34, 134, 110 ),
+ ( 32, 133, 110 ),
+ ( 30, 132, 110 ),
+ ( 28, 131, 110 ),
+ ( 27, 130, 110 ),
+ ( 25, 129, 110 ),
+ ( 23, 129, 110 ),
+ ( 21, 128, 110 ),
+ ( 20, 127, 110 ),
+ ( 18, 126, 110 ),
+ ( 17, 125, 110 ),
+ ( 15, 124, 110 ),
+ ( 14, 124, 110 ),
+ ( 12, 123, 110 ),
+ ( 11, 122, 110 ),
+ ( 10, 121, 110 ),
+ ( 9, 120, 110 ),
+ ( 8, 119, 110 ),
+ ( 7, 118, 110 ),
+ ( 6, 117, 110 ),
+ ( 6, 116, 110 ),
+ ( 5, 116, 110 ),
+ ( 5, 115, 110 ),
+ ( 4, 114, 110 ),
+ ( 4, 113, 110 ),
+ ( 4, 112, 109 ),
+ ( 3, 111, 109 ),
+ ( 3, 110, 109 ),
+ ( 3, 109, 109 ),
+ ( 3, 108, 109 ),
+ ( 4, 107, 109 ),
+ ( 4, 107, 109 ),
+ ( 4, 106, 108 ),
+ ( 4, 105, 108 ),
+ ( 5, 104, 108 ),
+ ( 5, 103, 108 ),
+ ( 6, 102, 108 ),
+ ( 7, 101, 107 ),
+ ( 7, 100, 107 ),
+ ( 8, 99, 107 ),
+ ( 9, 98, 107 ),
+ ( 10, 97, 106 ),
+ ( 11, 96, 106 ),
+ ( 12, 95, 106 ),
+ ( 13, 95, 105 ),
+ ( 14, 94, 105 ),
+ ( 15, 93, 105 ),
+ ( 16, 92, 104 ),
+ ( 17, 91, 104 ),
+ ( 18, 90, 103 ),
+ ( 19, 89, 103 ),
+ ( 20, 88, 103 ),
+ ( 21, 87, 102 ),
+ ( 22, 86, 102 ),
+ ( 22, 85, 101 ),
+ ( 23, 84, 101 ),
+ ( 24, 83, 100 ),
+ ( 25, 82, 100 ),
+ ( 26, 81, 99 ),
+ ( 26, 80, 99 ),
+ ( 27, 79, 98 ),
+ ( 28, 78, 97 ),
+ ( 28, 77, 97 ),
+ ( 29, 76, 96 ),
+ ( 30, 75, 95 ),
+ ( 30, 74, 95 ),
+ ( 31, 73, 94 ),
+ ( 31, 72, 93 ),
+ ( 32, 72, 93 ),
+ ( 33, 71, 92 ),
+ ( 33, 70, 91 ),
+ ( 33, 69, 90 ),
+ ( 34, 68, 90 ),
+ ( 34, 67, 89 ),
+ ( 35, 66, 88 ),
+ ( 35, 65, 87 ),
+ ( 35, 64, 86 ),
+ ( 36, 63, 86 ),
+ ( 36, 62, 85 ),
+ ( 36, 61, 84 ),
+ ( 36, 60, 83 ),
+ ( 36, 59, 82 ),
+ ( 37, 58, 81 ),
+ ( 37, 57, 81 ),
+ ( 37, 56, 80 ),
+ ( 37, 55, 79 ),
+ ( 37, 55, 78 ),
+ ( 37, 54, 77 ),
+ ( 37, 53, 76 ),
+ ( 37, 52, 76 ),
+ ( 37, 51, 75 ),
+ ( 37, 50, 74 ),
+ ( 37, 49, 73 ),
+ ( 37, 48, 72 ),
+ ( 37, 47, 72 ),
+ ( 37, 46, 71 ),
+ ( 37, 45, 70 ),
+ ( 37, 44, 69 ),
+ ( 37, 43, 69 ),
+ ( 37, 42, 68 ),
+ ( 36, 41, 67 ),
+ ( 36, 40, 66 ),
+ ( 36, 39, 66 ),
+ ( 36, 39, 65 ),
+ ( 36, 38, 64 ),
+ ( 36, 37, 63 ),
+ ( 35, 36, 63 ),
+ ( 35, 35, 62 ),
+ ( 35, 34, 61 ),
+ ( 35, 33, 61 ),
+ ( 35, 32, 60 ),
+ ( 34, 31, 59 ),
+ ( 34, 30, 58 ),
+ ( 34, 29, 58 ),
+ ( 34, 28, 57 ),
+ ( 34, 27, 56 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Solar.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Solar.cs
new file mode 100644
index 000000000..95040abf8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Solar.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Solar : ByteColormapBase
+ {
+ public override string Name => "Solar";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 51, 20, 24 ),
+ ( 53, 20, 24 ),
+ ( 54, 21, 25 ),
+ ( 55, 21, 25 ),
+ ( 56, 21, 26 ),
+ ( 58, 22, 26 ),
+ ( 59, 22, 27 ),
+ ( 60, 23, 27 ),
+ ( 61, 23, 28 ),
+ ( 62, 24, 28 ),
+ ( 64, 24, 29 ),
+ ( 65, 24, 29 ),
+ ( 66, 25, 29 ),
+ ( 67, 25, 30 ),
+ ( 69, 26, 30 ),
+ ( 70, 26, 31 ),
+ ( 71, 26, 31 ),
+ ( 72, 27, 31 ),
+ ( 74, 27, 32 ),
+ ( 75, 27, 32 ),
+ ( 76, 28, 32 ),
+ ( 77, 28, 33 ),
+ ( 79, 28, 33 ),
+ ( 80, 29, 33 ),
+ ( 81, 29, 34 ),
+ ( 82, 30, 34 ),
+ ( 84, 30, 34 ),
+ ( 85, 30, 34 ),
+ ( 86, 31, 35 ),
+ ( 87, 31, 35 ),
+ ( 89, 31, 35 ),
+ ( 90, 32, 35 ),
+ ( 91, 32, 35 ),
+ ( 92, 32, 36 ),
+ ( 94, 33, 36 ),
+ ( 95, 33, 36 ),
+ ( 96, 33, 36 ),
+ ( 97, 34, 36 ),
+ ( 99, 34, 36 ),
+ ( 100, 34, 36 ),
+ ( 101, 35, 36 ),
+ ( 102, 35, 37 ),
+ ( 104, 35, 37 ),
+ ( 105, 36, 37 ),
+ ( 106, 36, 37 ),
+ ( 107, 36, 37 ),
+ ( 109, 37, 37 ),
+ ( 110, 37, 37 ),
+ ( 111, 37, 37 ),
+ ( 112, 38, 37 ),
+ ( 114, 38, 37 ),
+ ( 115, 39, 36 ),
+ ( 116, 39, 36 ),
+ ( 117, 39, 36 ),
+ ( 119, 40, 36 ),
+ ( 120, 40, 36 ),
+ ( 121, 41, 36 ),
+ ( 122, 41, 36 ),
+ ( 123, 42, 36 ),
+ ( 124, 42, 35 ),
+ ( 126, 43, 35 ),
+ ( 127, 43, 35 ),
+ ( 128, 44, 35 ),
+ ( 129, 44, 34 ),
+ ( 130, 45, 34 ),
+ ( 131, 45, 34 ),
+ ( 132, 46, 34 ),
+ ( 133, 46, 33 ),
+ ( 135, 47, 33 ),
+ ( 136, 48, 33 ),
+ ( 137, 48, 33 ),
+ ( 138, 49, 32 ),
+ ( 139, 49, 32 ),
+ ( 140, 50, 32 ),
+ ( 141, 51, 31 ),
+ ( 142, 52, 31 ),
+ ( 143, 52, 31 ),
+ ( 144, 53, 30 ),
+ ( 145, 54, 30 ),
+ ( 146, 54, 30 ),
+ ( 147, 55, 29 ),
+ ( 147, 56, 29 ),
+ ( 148, 57, 29 ),
+ ( 149, 58, 29 ),
+ ( 150, 58, 28 ),
+ ( 151, 59, 28 ),
+ ( 152, 60, 28 ),
+ ( 153, 61, 27 ),
+ ( 154, 62, 27 ),
+ ( 154, 63, 27 ),
+ ( 155, 64, 26 ),
+ ( 156, 64, 26 ),
+ ( 157, 65, 26 ),
+ ( 158, 66, 26 ),
+ ( 159, 67, 25 ),
+ ( 159, 68, 25 ),
+ ( 160, 69, 25 ),
+ ( 161, 70, 25 ),
+ ( 162, 71, 24 ),
+ ( 163, 72, 24 ),
+ ( 163, 73, 24 ),
+ ( 164, 74, 24 ),
+ ( 165, 74, 23 ),
+ ( 166, 75, 23 ),
+ ( 166, 76, 23 ),
+ ( 167, 77, 23 ),
+ ( 168, 78, 22 ),
+ ( 168, 79, 22 ),
+ ( 169, 80, 22 ),
+ ( 170, 81, 22 ),
+ ( 171, 82, 22 ),
+ ( 171, 83, 21 ),
+ ( 172, 84, 21 ),
+ ( 173, 85, 21 ),
+ ( 173, 86, 21 ),
+ ( 174, 87, 21 ),
+ ( 175, 88, 20 ),
+ ( 175, 89, 20 ),
+ ( 176, 90, 20 ),
+ ( 177, 91, 20 ),
+ ( 177, 92, 20 ),
+ ( 178, 93, 20 ),
+ ( 178, 94, 20 ),
+ ( 179, 95, 20 ),
+ ( 180, 96, 19 ),
+ ( 180, 97, 19 ),
+ ( 181, 98, 19 ),
+ ( 182, 99, 19 ),
+ ( 182, 100, 19 ),
+ ( 183, 101, 19 ),
+ ( 183, 102, 19 ),
+ ( 184, 104, 19 ),
+ ( 184, 105, 19 ),
+ ( 185, 106, 19 ),
+ ( 186, 107, 19 ),
+ ( 186, 108, 19 ),
+ ( 187, 109, 19 ),
+ ( 187, 110, 19 ),
+ ( 188, 111, 19 ),
+ ( 188, 112, 19 ),
+ ( 189, 113, 19 ),
+ ( 190, 114, 19 ),
+ ( 190, 115, 19 ),
+ ( 191, 116, 19 ),
+ ( 191, 117, 19 ),
+ ( 192, 118, 19 ),
+ ( 192, 119, 20 ),
+ ( 193, 121, 20 ),
+ ( 193, 122, 20 ),
+ ( 194, 123, 20 ),
+ ( 194, 124, 20 ),
+ ( 195, 125, 20 ),
+ ( 195, 126, 21 ),
+ ( 196, 127, 21 ),
+ ( 196, 128, 21 ),
+ ( 197, 129, 21 ),
+ ( 197, 130, 21 ),
+ ( 198, 132, 22 ),
+ ( 198, 133, 22 ),
+ ( 199, 134, 22 ),
+ ( 199, 135, 22 ),
+ ( 199, 136, 23 ),
+ ( 200, 137, 23 ),
+ ( 200, 138, 23 ),
+ ( 201, 139, 24 ),
+ ( 201, 140, 24 ),
+ ( 202, 142, 24 ),
+ ( 202, 143, 25 ),
+ ( 203, 144, 25 ),
+ ( 203, 145, 25 ),
+ ( 203, 146, 26 ),
+ ( 204, 147, 26 ),
+ ( 204, 148, 26 ),
+ ( 205, 150, 27 ),
+ ( 205, 151, 27 ),
+ ( 206, 152, 28 ),
+ ( 206, 153, 28 ),
+ ( 206, 154, 28 ),
+ ( 207, 155, 29 ),
+ ( 207, 156, 29 ),
+ ( 208, 158, 30 ),
+ ( 208, 159, 30 ),
+ ( 208, 160, 31 ),
+ ( 209, 161, 31 ),
+ ( 209, 162, 32 ),
+ ( 209, 164, 32 ),
+ ( 210, 165, 32 ),
+ ( 210, 166, 33 ),
+ ( 211, 167, 33 ),
+ ( 211, 168, 34 ),
+ ( 211, 169, 34 ),
+ ( 212, 171, 35 ),
+ ( 212, 172, 36 ),
+ ( 212, 173, 36 ),
+ ( 213, 174, 37 ),
+ ( 213, 175, 37 ),
+ ( 213, 177, 38 ),
+ ( 214, 178, 38 ),
+ ( 214, 179, 39 ),
+ ( 214, 180, 39 ),
+ ( 215, 181, 40 ),
+ ( 215, 183, 40 ),
+ ( 215, 184, 41 ),
+ ( 215, 185, 42 ),
+ ( 216, 186, 42 ),
+ ( 216, 188, 43 ),
+ ( 216, 189, 43 ),
+ ( 217, 190, 44 ),
+ ( 217, 191, 44 ),
+ ( 217, 193, 45 ),
+ ( 217, 194, 46 ),
+ ( 218, 195, 46 ),
+ ( 218, 196, 47 ),
+ ( 218, 198, 47 ),
+ ( 218, 199, 48 ),
+ ( 219, 200, 49 ),
+ ( 219, 201, 49 ),
+ ( 219, 203, 50 ),
+ ( 219, 204, 50 ),
+ ( 220, 205, 51 ),
+ ( 220, 206, 52 ),
+ ( 220, 208, 52 ),
+ ( 220, 209, 53 ),
+ ( 221, 210, 54 ),
+ ( 221, 212, 54 ),
+ ( 221, 213, 55 ),
+ ( 221, 214, 55 ),
+ ( 221, 215, 56 ),
+ ( 222, 217, 57 ),
+ ( 222, 218, 57 ),
+ ( 222, 219, 58 ),
+ ( 222, 221, 59 ),
+ ( 222, 222, 59 ),
+ ( 222, 223, 60 ),
+ ( 223, 225, 61 ),
+ ( 223, 226, 61 ),
+ ( 223, 227, 62 ),
+ ( 223, 229, 63 ),
+ ( 223, 230, 63 ),
+ ( 223, 231, 64 ),
+ ( 223, 233, 65 ),
+ ( 224, 234, 65 ),
+ ( 224, 235, 66 ),
+ ( 224, 237, 67 ),
+ ( 224, 238, 67 ),
+ ( 224, 240, 68 ),
+ ( 224, 241, 69 ),
+ ( 224, 242, 69 ),
+ ( 224, 244, 70 ),
+ ( 224, 245, 71 ),
+ ( 224, 246, 71 ),
+ ( 224, 248, 72 ),
+ ( 224, 249, 73 ),
+ ( 224, 251, 73 ),
+ ( 225, 252, 74 ),
+ ( 225, 253, 75 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Speed.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Speed.cs
new file mode 100644
index 000000000..f804df963
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Speed.cs
@@ -0,0 +1,275 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Speed : ByteColormapBase
+ {
+ public override string Name => "Speed";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 255, 253, 205 ),
+ ( 254, 252, 203 ),
+ ( 254, 250, 201 ),
+ ( 253, 249, 199 ),
+ ( 252, 248, 197 ),
+ ( 252, 247, 194 ),
+ ( 251, 246, 192 ),
+ ( 250, 244, 190 ),
+ ( 249, 243, 188 ),
+ ( 249, 242, 186 ),
+ ( 248, 241, 184 ),
+ ( 247, 240, 182 ),
+ ( 247, 238, 180 ),
+ ( 246, 237, 177 ),
+ ( 246, 236, 175 ),
+ ( 245, 235, 173 ),
+ ( 244, 234, 171 ),
+ ( 243, 233, 169 ),
+ ( 243, 231, 167 ),
+ ( 242, 230, 165 ),
+ ( 241, 229, 162 ),
+ ( 241, 228, 160 ),
+ ( 240, 227, 158 ),
+ ( 239, 226, 156 ),
+ ( 239, 225, 154 ),
+ ( 238, 223, 152 ),
+ ( 237, 222, 150 ),
+ ( 237, 221, 147 ),
+ ( 236, 220, 145 ),
+ ( 235, 219, 143 ),
+ ( 234, 218, 141 ),
+ ( 234, 217, 139 ),
+ ( 233, 216, 137 ),
+ ( 232, 215, 134 ),
+ ( 231, 214, 132 ),
+ ( 231, 213, 130 ),
+ ( 230, 212, 128 ),
+ ( 229, 211, 126 ),
+ ( 228, 210, 123 ),
+ ( 227, 208, 121 ),
+ ( 227, 207, 119 ),
+ ( 226, 206, 117 ),
+ ( 225, 205, 115 ),
+ ( 224, 205, 113 ),
+ ( 223, 204, 110 ),
+ ( 222, 203, 108 ),
+ ( 221, 202, 106 ),
+ ( 220, 201, 104 ),
+ ( 219, 200, 102 ),
+ ( 218, 199, 100 ),
+ ( 217, 198, 97 ),
+ ( 216, 197, 95 ),
+ ( 215, 196, 93 ),
+ ( 214, 195, 91 ),
+ ( 213, 194, 89 ),
+ ( 212, 193, 87 ),
+ ( 211, 193, 85 ),
+ ( 210, 192, 83 ),
+ ( 209, 191, 81 ),
+ ( 208, 190, 79 ),
+ ( 206, 189, 76 ),
+ ( 205, 189, 74 ),
+ ( 204, 188, 72 ),
+ ( 203, 187, 70 ),
+ ( 201, 186, 69 ),
+ ( 200, 185, 67 ),
+ ( 199, 185, 65 ),
+ ( 197, 184, 63 ),
+ ( 196, 183, 61 ),
+ ( 195, 183, 59 ),
+ ( 193, 182, 57 ),
+ ( 192, 181, 55 ),
+ ( 190, 180, 54 ),
+ ( 189, 180, 52 ),
+ ( 187, 179, 50 ),
+ ( 186, 178, 48 ),
+ ( 184, 178, 47 ),
+ ( 183, 177, 45 ),
+ ( 181, 176, 43 ),
+ ( 180, 176, 42 ),
+ ( 178, 175, 40 ),
+ ( 177, 174, 39 ),
+ ( 175, 174, 37 ),
+ ( 173, 173, 35 ),
+ ( 172, 173, 34 ),
+ ( 170, 172, 32 ),
+ ( 169, 171, 31 ),
+ ( 167, 171, 30 ),
+ ( 165, 170, 28 ),
+ ( 164, 169, 27 ),
+ ( 162, 169, 25 ),
+ ( 160, 168, 24 ),
+ ( 159, 168, 23 ),
+ ( 157, 167, 21 ),
+ ( 155, 166, 20 ),
+ ( 154, 166, 19 ),
+ ( 152, 165, 18 ),
+ ( 150, 165, 16 ),
+ ( 149, 164, 15 ),
+ ( 147, 163, 14 ),
+ ( 145, 163, 13 ),
+ ( 143, 162, 12 ),
+ ( 142, 162, 11 ),
+ ( 140, 161, 10 ),
+ ( 138, 160, 9 ),
+ ( 136, 160, 8 ),
+ ( 135, 159, 8 ),
+ ( 133, 159, 7 ),
+ ( 131, 158, 7 ),
+ ( 129, 157, 6 ),
+ ( 128, 157, 6 ),
+ ( 126, 156, 6 ),
+ ( 124, 156, 6 ),
+ ( 122, 155, 6 ),
+ ( 121, 154, 6 ),
+ ( 119, 154, 6 ),
+ ( 117, 153, 6 ),
+ ( 115, 153, 6 ),
+ ( 113, 152, 6 ),
+ ( 112, 151, 7 ),
+ ( 110, 151, 7 ),
+ ( 108, 150, 7 ),
+ ( 106, 149, 8 ),
+ ( 104, 149, 9 ),
+ ( 102, 148, 9 ),
+ ( 101, 148, 10 ),
+ ( 99, 147, 11 ),
+ ( 97, 146, 11 ),
+ ( 95, 146, 12 ),
+ ( 93, 145, 13 ),
+ ( 92, 144, 14 ),
+ ( 90, 144, 15 ),
+ ( 88, 143, 15 ),
+ ( 86, 142, 16 ),
+ ( 84, 142, 17 ),
+ ( 82, 141, 18 ),
+ ( 81, 140, 18 ),
+ ( 79, 140, 19 ),
+ ( 77, 139, 20 ),
+ ( 75, 138, 21 ),
+ ( 73, 138, 22 ),
+ ( 72, 137, 22 ),
+ ( 70, 136, 23 ),
+ ( 68, 136, 24 ),
+ ( 66, 135, 25 ),
+ ( 64, 134, 25 ),
+ ( 63, 133, 26 ),
+ ( 61, 133, 27 ),
+ ( 59, 132, 28 ),
+ ( 57, 131, 28 ),
+ ( 56, 131, 29 ),
+ ( 54, 130, 30 ),
+ ( 52, 129, 30 ),
+ ( 50, 128, 31 ),
+ ( 49, 127, 32 ),
+ ( 47, 127, 32 ),
+ ( 45, 126, 33 ),
+ ( 44, 125, 33 ),
+ ( 42, 124, 34 ),
+ ( 40, 124, 35 ),
+ ( 39, 123, 35 ),
+ ( 37, 122, 36 ),
+ ( 36, 121, 36 ),
+ ( 34, 120, 37 ),
+ ( 33, 120, 37 ),
+ ( 31, 119, 38 ),
+ ( 30, 118, 38 ),
+ ( 28, 117, 39 ),
+ ( 27, 116, 39 ),
+ ( 26, 115, 39 ),
+ ( 24, 115, 40 ),
+ ( 23, 114, 40 ),
+ ( 22, 113, 41 ),
+ ( 21, 112, 41 ),
+ ( 19, 111, 41 ),
+ ( 18, 110, 42 ),
+ ( 17, 109, 42 ),
+ ( 16, 108, 42 ),
+ ( 15, 108, 43 ),
+ ( 15, 107, 43 ),
+ ( 14, 106, 43 ),
+ ( 13, 105, 43 ),
+ ( 13, 104, 43 ),
+ ( 12, 103, 44 ),
+ ( 12, 102, 44 ),
+ ( 11, 101, 44 ),
+ ( 11, 100, 44 ),
+ ( 11, 99, 44 ),
+ ( 11, 99, 44 ),
+ ( 11, 98, 45 ),
+ ( 11, 97, 45 ),
+ ( 11, 96, 45 ),
+ ( 11, 95, 45 ),
+ ( 11, 94, 45 ),
+ ( 12, 93, 45 ),
+ ( 12, 92, 45 ),
+ ( 12, 91, 45 ),
+ ( 13, 90, 45 ),
+ ( 13, 89, 45 ),
+ ( 14, 88, 45 ),
+ ( 14, 87, 45 ),
+ ( 15, 86, 44 ),
+ ( 15, 85, 44 ),
+ ( 16, 84, 44 ),
+ ( 16, 84, 44 ),
+ ( 16, 83, 44 ),
+ ( 17, 82, 44 ),
+ ( 17, 81, 44 ),
+ ( 18, 80, 43 ),
+ ( 18, 79, 43 ),
+ ( 19, 78, 43 ),
+ ( 19, 77, 43 ),
+ ( 20, 76, 42 ),
+ ( 20, 75, 42 ),
+ ( 20, 74, 42 ),
+ ( 21, 73, 42 ),
+ ( 21, 72, 41 ),
+ ( 22, 71, 41 ),
+ ( 22, 70, 41 ),
+ ( 22, 69, 40 ),
+ ( 23, 68, 40 ),
+ ( 23, 67, 39 ),
+ ( 23, 66, 39 ),
+ ( 23, 65, 39 ),
+ ( 24, 64, 38 ),
+ ( 24, 63, 38 ),
+ ( 24, 63, 37 ),
+ ( 24, 62, 37 ),
+ ( 25, 61, 36 ),
+ ( 25, 60, 36 ),
+ ( 25, 59, 35 ),
+ ( 25, 58, 35 ),
+ ( 25, 57, 34 ),
+ ( 25, 56, 34 ),
+ ( 25, 55, 33 ),
+ ( 25, 54, 33 ),
+ ( 25, 53, 32 ),
+ ( 25, 52, 31 ),
+ ( 25, 51, 31 ),
+ ( 25, 50, 30 ),
+ ( 25, 49, 30 ),
+ ( 25, 48, 29 ),
+ ( 25, 47, 28 ),
+ ( 25, 46, 28 ),
+ ( 25, 45, 27 ),
+ ( 25, 44, 26 ),
+ ( 25, 44, 25 ),
+ ( 25, 43, 25 ),
+ ( 25, 42, 24 ),
+ ( 24, 41, 23 ),
+ ( 24, 40, 23 ),
+ ( 24, 39, 22 ),
+ ( 24, 38, 21 ),
+ ( 24, 37, 20 ),
+ ( 23, 36, 19 ),
+ ( 23, 35, 19 )
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tarn.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tarn.cs
new file mode 100644
index 000000000..c88eb377b
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tarn.cs
@@ -0,0 +1,275 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Tarn : ByteColormapBase
+ {
+ public override string Name => "Tarn";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 23, 35, 14 ),
+ ( 24, 37, 14 ),
+ ( 25, 39, 14 ),
+ ( 27, 41, 15 ),
+ ( 28, 42, 15 ),
+ ( 29, 44, 15 ),
+ ( 31, 46, 16 ),
+ ( 32, 48, 16 ),
+ ( 33, 49, 16 ),
+ ( 34, 51, 16 ),
+ ( 35, 53, 16 ),
+ ( 37, 55, 16 ),
+ ( 38, 56, 16 ),
+ ( 39, 58, 16 ),
+ ( 40, 60, 16 ),
+ ( 42, 61, 16 ),
+ ( 43, 63, 15 ),
+ ( 44, 65, 15 ),
+ ( 46, 66, 15 ),
+ ( 47, 68, 14 ),
+ ( 48, 70, 14 ),
+ ( 50, 71, 13 ),
+ ( 52, 73, 12 ),
+ ( 54, 74, 12 ),
+ ( 57, 75, 12 ),
+ ( 60, 77, 13 ),
+ ( 63, 78, 14 ),
+ ( 66, 79, 15 ),
+ ( 68, 80, 16 ),
+ ( 71, 81, 17 ),
+ ( 74, 83, 18 ),
+ ( 77, 84, 19 ),
+ ( 79, 85, 20 ),
+ ( 82, 86, 21 ),
+ ( 85, 87, 22 ),
+ ( 87, 88, 23 ),
+ ( 90, 89, 24 ),
+ ( 93, 91, 25 ),
+ ( 96, 92, 26 ),
+ ( 98, 93, 26 ),
+ ( 101, 94, 27 ),
+ ( 104, 95, 28 ),
+ ( 107, 96, 29 ),
+ ( 109, 97, 30 ),
+ ( 112, 98, 31 ),
+ ( 115, 99, 32 ),
+ ( 118, 100, 33 ),
+ ( 120, 102, 33 ),
+ ( 123, 103, 34 ),
+ ( 126, 104, 35 ),
+ ( 129, 105, 36 ),
+ ( 132, 106, 37 ),
+ ( 134, 107, 38 ),
+ ( 137, 108, 39 ),
+ ( 140, 109, 39 ),
+ ( 143, 110, 40 ),
+ ( 146, 111, 41 ),
+ ( 149, 112, 42 ),
+ ( 152, 113, 43 ),
+ ( 155, 114, 44 ),
+ ( 158, 115, 45 ),
+ ( 160, 116, 46 ),
+ ( 163, 117, 47 ),
+ ( 166, 118, 48 ),
+ ( 169, 119, 49 ),
+ ( 172, 120, 50 ),
+ ( 175, 121, 51 ),
+ ( 178, 122, 53 ),
+ ( 181, 123, 54 ),
+ ( 184, 124, 55 ),
+ ( 187, 125, 57 ),
+ ( 190, 126, 58 ),
+ ( 193, 127, 60 ),
+ ( 196, 128, 62 ),
+ ( 198, 129, 65 ),
+ ( 201, 130, 68 ),
+ ( 203, 132, 72 ),
+ ( 204, 134, 76 ),
+ ( 205, 136, 79 ),
+ ( 206, 138, 83 ),
+ ( 207, 140, 87 ),
+ ( 208, 143, 90 ),
+ ( 209, 145, 93 ),
+ ( 210, 147, 97 ),
+ ( 210, 150, 100 ),
+ ( 211, 152, 104 ),
+ ( 212, 154, 107 ),
+ ( 213, 156, 111 ),
+ ( 214, 159, 114 ),
+ ( 215, 161, 117 ),
+ ( 216, 163, 121 ),
+ ( 217, 166, 124 ),
+ ( 218, 168, 128 ),
+ ( 219, 170, 131 ),
+ ( 219, 173, 135 ),
+ ( 220, 175, 138 ),
+ ( 221, 177, 142 ),
+ ( 222, 179, 145 ),
+ ( 223, 182, 149 ),
+ ( 224, 184, 152 ),
+ ( 225, 186, 156 ),
+ ( 226, 189, 159 ),
+ ( 227, 191, 163 ),
+ ( 228, 193, 166 ),
+ ( 229, 196, 170 ),
+ ( 230, 198, 173 ),
+ ( 231, 200, 177 ),
+ ( 232, 203, 180 ),
+ ( 233, 205, 184 ),
+ ( 234, 208, 187 ),
+ ( 235, 210, 191 ),
+ ( 236, 212, 194 ),
+ ( 237, 215, 198 ),
+ ( 239, 217, 201 ),
+ ( 240, 219, 205 ),
+ ( 241, 222, 209 ),
+ ( 242, 224, 212 ),
+ ( 243, 227, 216 ),
+ ( 244, 229, 219 ),
+ ( 246, 232, 223 ),
+ ( 247, 234, 226 ),
+ ( 248, 236, 229 ),
+ ( 249, 239, 233 ),
+ ( 250, 241, 236 ),
+ ( 251, 243, 239 ),
+ ( 252, 245, 242 ),
+ ( 252, 246, 244 ),
+ ( 252, 247, 246 ),
+ ( 252, 247, 246 ),
+ ( 252, 247, 245 ),
+ ( 251, 246, 243 ),
+ ( 251, 245, 240 ),
+ ( 249, 244, 237 ),
+ ( 248, 242, 234 ),
+ ( 246, 240, 231 ),
+ ( 244, 238, 227 ),
+ ( 242, 236, 224 ),
+ ( 240, 234, 220 ),
+ ( 239, 232, 216 ),
+ ( 237, 230, 213 ),
+ ( 235, 228, 209 ),
+ ( 233, 226, 205 ),
+ ( 231, 223, 202 ),
+ ( 229, 221, 198 ),
+ ( 227, 219, 194 ),
+ ( 225, 217, 191 ),
+ ( 223, 215, 187 ),
+ ( 221, 214, 184 ),
+ ( 218, 212, 180 ),
+ ( 215, 210, 178 ),
+ ( 212, 209, 175 ),
+ ( 209, 207, 173 ),
+ ( 206, 206, 171 ),
+ ( 203, 204, 170 ),
+ ( 199, 203, 168 ),
+ ( 196, 201, 167 ),
+ ( 193, 200, 166 ),
+ ( 190, 198, 165 ),
+ ( 186, 196, 164 ),
+ ( 183, 195, 163 ),
+ ( 180, 193, 162 ),
+ ( 177, 192, 161 ),
+ ( 174, 190, 160 ),
+ ( 171, 189, 159 ),
+ ( 168, 187, 158 ),
+ ( 165, 185, 157 ),
+ ( 162, 184, 156 ),
+ ( 159, 182, 155 ),
+ ( 156, 181, 154 ),
+ ( 153, 179, 153 ),
+ ( 151, 178, 152 ),
+ ( 148, 176, 151 ),
+ ( 145, 174, 150 ),
+ ( 142, 173, 149 ),
+ ( 139, 171, 148 ),
+ ( 136, 170, 147 ),
+ ( 133, 168, 146 ),
+ ( 130, 167, 146 ),
+ ( 127, 165, 145 ),
+ ( 124, 164, 144 ),
+ ( 121, 162, 143 ),
+ ( 118, 161, 142 ),
+ ( 115, 159, 141 ),
+ ( 112, 158, 140 ),
+ ( 109, 156, 139 ),
+ ( 106, 155, 138 ),
+ ( 103, 154, 137 ),
+ ( 100, 152, 137 ),
+ ( 97, 151, 136 ),
+ ( 94, 149, 135 ),
+ ( 90, 148, 134 ),
+ ( 87, 146, 133 ),
+ ( 84, 145, 133 ),
+ ( 81, 143, 132 ),
+ ( 78, 142, 131 ),
+ ( 74, 140, 131 ),
+ ( 71, 139, 130 ),
+ ( 68, 137, 130 ),
+ ( 65, 136, 129 ),
+ ( 61, 134, 128 ),
+ ( 58, 133, 128 ),
+ ( 55, 131, 127 ),
+ ( 52, 129, 127 ),
+ ( 49, 128, 126 ),
+ ( 46, 126, 126 ),
+ ( 44, 124, 125 ),
+ ( 42, 123, 125 ),
+ ( 39, 121, 124 ),
+ ( 37, 119, 124 ),
+ ( 36, 117, 123 ),
+ ( 34, 116, 122 ),
+ ( 33, 114, 122 ),
+ ( 32, 112, 121 ),
+ ( 32, 110, 120 ),
+ ( 31, 108, 119 ),
+ ( 31, 106, 118 ),
+ ( 30, 105, 118 ),
+ ( 30, 103, 117 ),
+ ( 29, 101, 116 ),
+ ( 29, 99, 115 ),
+ ( 28, 97, 114 ),
+ ( 28, 95, 113 ),
+ ( 27, 93, 112 ),
+ ( 26, 92, 111 ),
+ ( 26, 90, 111 ),
+ ( 25, 88, 110 ),
+ ( 24, 86, 109 ),
+ ( 24, 84, 108 ),
+ ( 23, 83, 107 ),
+ ( 22, 81, 107 ),
+ ( 21, 79, 106 ),
+ ( 20, 77, 105 ),
+ ( 19, 75, 104 ),
+ ( 18, 73, 104 ),
+ ( 17, 72, 103 ),
+ ( 16, 70, 102 ),
+ ( 16, 68, 101 ),
+ ( 15, 66, 101 ),
+ ( 14, 64, 100 ),
+ ( 13, 62, 99 ),
+ ( 12, 60, 99 ),
+ ( 11, 59, 98 ),
+ ( 10, 57, 98 ),
+ ( 9, 55, 97 ),
+ ( 9, 53, 96 ),
+ ( 9, 51, 96 ),
+ ( 9, 49, 95 ),
+ ( 10, 47, 94 ),
+ ( 11, 45, 93 ),
+ ( 12, 42, 91 ),
+ ( 13, 40, 89 ),
+ ( 14, 38, 88 ),
+ ( 14, 36, 86 ),
+ ( 15, 34, 84 ),
+ ( 15, 32, 82 ),
+ ( 16, 30, 79 )
+
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tempo.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tempo.cs
new file mode 100644
index 000000000..30debcc30
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Tempo.cs
@@ -0,0 +1,274 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Tempo : ByteColormapBase
+ {
+ public override string Name => "Tempo";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 255, 246, 244 ),
+ ( 253, 245, 243 ),
+ ( 252, 244, 241 ),
+ ( 251, 243, 240 ),
+ ( 249, 242, 238 ),
+ ( 248, 241, 237 ),
+ ( 247, 240, 235 ),
+ ( 245, 239, 234 ),
+ ( 244, 238, 232 ),
+ ( 242, 237, 231 ),
+ ( 241, 236, 229 ),
+ ( 240, 235, 228 ),
+ ( 238, 234, 226 ),
+ ( 237, 234, 225 ),
+ ( 235, 233, 223 ),
+ ( 234, 232, 222 ),
+ ( 233, 231, 221 ),
+ ( 231, 230, 219 ),
+ ( 230, 229, 218 ),
+ ( 228, 228, 216 ),
+ ( 227, 227, 215 ),
+ ( 226, 226, 214 ),
+ ( 224, 226, 212 ),
+ ( 223, 225, 211 ),
+ ( 221, 224, 209 ),
+ ( 220, 223, 208 ),
+ ( 219, 222, 207 ),
+ ( 217, 221, 205 ),
+ ( 216, 221, 204 ),
+ ( 214, 220, 203 ),
+ ( 213, 219, 201 ),
+ ( 211, 218, 200 ),
+ ( 210, 217, 199 ),
+ ( 209, 216, 197 ),
+ ( 207, 216, 196 ),
+ ( 206, 215, 195 ),
+ ( 204, 214, 193 ),
+ ( 203, 213, 192 ),
+ ( 201, 212, 191 ),
+ ( 200, 212, 190 ),
+ ( 198, 211, 188 ),
+ ( 197, 210, 187 ),
+ ( 195, 209, 186 ),
+ ( 194, 209, 185 ),
+ ( 192, 208, 183 ),
+ ( 191, 207, 182 ),
+ ( 189, 206, 181 ),
+ ( 188, 206, 180 ),
+ ( 186, 205, 179 ),
+ ( 185, 204, 178 ),
+ ( 183, 203, 176 ),
+ ( 182, 203, 175 ),
+ ( 180, 202, 174 ),
+ ( 179, 201, 173 ),
+ ( 177, 200, 172 ),
+ ( 176, 200, 171 ),
+ ( 174, 199, 170 ),
+ ( 172, 198, 169 ),
+ ( 171, 197, 168 ),
+ ( 169, 197, 166 ),
+ ( 168, 196, 165 ),
+ ( 166, 195, 164 ),
+ ( 164, 195, 163 ),
+ ( 163, 194, 162 ),
+ ( 161, 193, 161 ),
+ ( 160, 192, 160 ),
+ ( 158, 192, 159 ),
+ ( 156, 191, 159 ),
+ ( 155, 190, 158 ),
+ ( 153, 190, 157 ),
+ ( 151, 189, 156 ),
+ ( 150, 188, 155 ),
+ ( 148, 188, 154 ),
+ ( 146, 187, 153 ),
+ ( 145, 186, 152 ),
+ ( 143, 186, 151 ),
+ ( 141, 185, 151 ),
+ ( 139, 184, 150 ),
+ ( 138, 183, 149 ),
+ ( 136, 183, 148 ),
+ ( 134, 182, 147 ),
+ ( 133, 181, 147 ),
+ ( 131, 181, 146 ),
+ ( 129, 180, 145 ),
+ ( 127, 179, 144 ),
+ ( 125, 179, 144 ),
+ ( 124, 178, 143 ),
+ ( 122, 177, 142 ),
+ ( 120, 177, 142 ),
+ ( 118, 176, 141 ),
+ ( 116, 175, 141 ),
+ ( 114, 175, 140 ),
+ ( 113, 174, 139 ),
+ ( 111, 173, 139 ),
+ ( 109, 173, 138 ),
+ ( 107, 172, 138 ),
+ ( 105, 171, 137 ),
+ ( 103, 171, 137 ),
+ ( 101, 170, 136 ),
+ ( 99, 169, 136 ),
+ ( 97, 169, 135 ),
+ ( 95, 168, 135 ),
+ ( 93, 167, 134 ),
+ ( 91, 166, 134 ),
+ ( 89, 166, 133 ),
+ ( 87, 165, 133 ),
+ ( 86, 164, 133 ),
+ ( 84, 164, 132 ),
+ ( 82, 163, 132 ),
+ ( 80, 162, 132 ),
+ ( 78, 161, 131 ),
+ ( 75, 161, 131 ),
+ ( 73, 160, 131 ),
+ ( 71, 159, 130 ),
+ ( 69, 159, 130 ),
+ ( 67, 158, 130 ),
+ ( 65, 157, 130 ),
+ ( 63, 156, 129 ),
+ ( 61, 156, 129 ),
+ ( 59, 155, 129 ),
+ ( 58, 154, 129 ),
+ ( 56, 153, 129 ),
+ ( 54, 152, 128 ),
+ ( 52, 152, 128 ),
+ ( 50, 151, 128 ),
+ ( 48, 150, 128 ),
+ ( 46, 149, 128 ),
+ ( 44, 148, 127 ),
+ ( 42, 147, 127 ),
+ ( 41, 147, 127 ),
+ ( 39, 146, 127 ),
+ ( 37, 145, 127 ),
+ ( 36, 144, 127 ),
+ ( 34, 143, 126 ),
+ ( 33, 142, 126 ),
+ ( 31, 141, 126 ),
+ ( 30, 141, 126 ),
+ ( 28, 140, 126 ),
+ ( 27, 139, 125 ),
+ ( 26, 138, 125 ),
+ ( 25, 137, 125 ),
+ ( 23, 136, 125 ),
+ ( 22, 135, 124 ),
+ ( 22, 134, 124 ),
+ ( 21, 133, 124 ),
+ ( 20, 132, 124 ),
+ ( 19, 132, 123 ),
+ ( 19, 131, 123 ),
+ ( 18, 130, 123 ),
+ ( 18, 129, 123 ),
+ ( 17, 128, 122 ),
+ ( 17, 127, 122 ),
+ ( 17, 126, 122 ),
+ ( 17, 125, 121 ),
+ ( 17, 124, 121 ),
+ ( 17, 123, 121 ),
+ ( 17, 122, 120 ),
+ ( 17, 121, 120 ),
+ ( 17, 120, 120 ),
+ ( 17, 119, 119 ),
+ ( 17, 118, 119 ),
+ ( 18, 118, 118 ),
+ ( 18, 117, 118 ),
+ ( 18, 116, 118 ),
+ ( 19, 115, 117 ),
+ ( 19, 114, 117 ),
+ ( 19, 113, 116 ),
+ ( 20, 112, 116 ),
+ ( 20, 111, 115 ),
+ ( 20, 110, 115 ),
+ ( 21, 109, 115 ),
+ ( 21, 108, 114 ),
+ ( 22, 107, 114 ),
+ ( 22, 106, 113 ),
+ ( 22, 105, 113 ),
+ ( 23, 104, 112 ),
+ ( 23, 103, 112 ),
+ ( 23, 102, 111 ),
+ ( 24, 101, 111 ),
+ ( 24, 101, 110 ),
+ ( 24, 100, 110 ),
+ ( 25, 99, 109 ),
+ ( 25, 98, 109 ),
+ ( 25, 97, 108 ),
+ ( 25, 96, 108 ),
+ ( 26, 95, 107 ),
+ ( 26, 94, 107 ),
+ ( 26, 93, 106 ),
+ ( 26, 92, 106 ),
+ ( 26, 91, 105 ),
+ ( 27, 90, 104 ),
+ ( 27, 89, 104 ),
+ ( 27, 88, 103 ),
+ ( 27, 88, 103 ),
+ ( 27, 87, 102 ),
+ ( 27, 86, 102 ),
+ ( 28, 85, 101 ),
+ ( 28, 84, 101 ),
+ ( 28, 83, 100 ),
+ ( 28, 82, 99 ),
+ ( 28, 81, 99 ),
+ ( 28, 80, 98 ),
+ ( 28, 79, 98 ),
+ ( 28, 78, 97 ),
+ ( 28, 77, 97 ),
+ ( 28, 76, 96 ),
+ ( 28, 76, 95 ),
+ ( 28, 75, 95 ),
+ ( 28, 74, 94 ),
+ ( 28, 73, 94 ),
+ ( 28, 72, 93 ),
+ ( 28, 71, 93 ),
+ ( 28, 70, 92 ),
+ ( 28, 69, 91 ),
+ ( 28, 68, 91 ),
+ ( 28, 67, 90 ),
+ ( 28, 66, 90 ),
+ ( 28, 66, 89 ),
+ ( 28, 65, 88 ),
+ ( 28, 64, 88 ),
+ ( 27, 63, 87 ),
+ ( 27, 62, 87 ),
+ ( 27, 61, 86 ),
+ ( 27, 60, 86 ),
+ ( 27, 59, 85 ),
+ ( 27, 58, 84 ),
+ ( 27, 57, 84 ),
+ ( 27, 56, 83 ),
+ ( 26, 55, 83 ),
+ ( 26, 54, 82 ),
+ ( 26, 54, 81 ),
+ ( 26, 53, 81 ),
+ ( 26, 52, 80 ),
+ ( 26, 51, 80 ),
+ ( 25, 50, 79 ),
+ ( 25, 49, 79 ),
+ ( 25, 48, 78 ),
+ ( 25, 47, 77 ),
+ ( 25, 46, 77 ),
+ ( 24, 45, 76 ),
+ ( 24, 44, 76 ),
+ ( 24, 43, 75 ),
+ ( 24, 42, 75 ),
+ ( 24, 41, 74 ),
+ ( 23, 40, 74 ),
+ ( 23, 39, 73 ),
+ ( 23, 38, 72 ),
+ ( 23, 37, 72 ),
+ ( 23, 36, 71 ),
+ ( 22, 35, 71 ),
+ ( 22, 34, 70 ),
+ ( 22, 33, 70 ),
+ ( 22, 32, 69 ),
+ ( 21, 31, 69 ),
+ ( 21, 30, 68 ),
+ ( 21, 29, 68 )
+
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Thermal.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Thermal.cs
new file mode 100644
index 000000000..209e805ce
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Thermal.cs
@@ -0,0 +1,275 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Thermal : ByteColormapBase
+ {
+ public override string Name => "Thermal";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = {
+ ( 4, 35, 51 ),
+ ( 4, 36, 53 ),
+ ( 4, 37, 55 ),
+ ( 4, 37, 57 ),
+ ( 5, 38, 59 ),
+ ( 5, 39, 61 ),
+ ( 5, 39, 63 ),
+ ( 5, 40, 65 ),
+ ( 5, 41, 67 ),
+ ( 6, 41, 69 ),
+ ( 6, 42, 71 ),
+ ( 6, 43, 73 ),
+ ( 7, 43, 75 ),
+ ( 7, 44, 77 ),
+ ( 7, 44, 80 ),
+ ( 8, 45, 82 ),
+ ( 8, 46, 84 ),
+ ( 9, 46, 86 ),
+ ( 9, 47, 89 ),
+ ( 10, 47, 91 ),
+ ( 11, 48, 93 ),
+ ( 12, 48, 96 ),
+ ( 12, 48, 98 ),
+ ( 13, 49, 101 ),
+ ( 14, 49, 103 ),
+ ( 15, 50, 106 ),
+ ( 16, 50, 108 ),
+ ( 18, 50, 111 ),
+ ( 19, 51, 114 ),
+ ( 20, 51, 116 ),
+ ( 22, 51, 119 ),
+ ( 23, 51, 122 ),
+ ( 25, 51, 124 ),
+ ( 26, 52, 127 ),
+ ( 28, 52, 130 ),
+ ( 30, 52, 132 ),
+ ( 31, 52, 135 ),
+ ( 33, 52, 138 ),
+ ( 35, 52, 140 ),
+ ( 37, 52, 143 ),
+ ( 39, 52, 145 ),
+ ( 42, 51, 147 ),
+ ( 44, 51, 149 ),
+ ( 46, 51, 151 ),
+ ( 48, 51, 153 ),
+ ( 51, 51, 155 ),
+ ( 53, 51, 156 ),
+ ( 55, 51, 157 ),
+ ( 57, 51, 158 ),
+ ( 60, 51, 159 ),
+ ( 62, 52, 159 ),
+ ( 64, 52, 159 ),
+ ( 66, 52, 160 ),
+ ( 68, 53, 160 ),
+ ( 70, 53, 160 ),
+ ( 71, 54, 160 ),
+ ( 73, 54, 159 ),
+ ( 75, 55, 159 ),
+ ( 77, 55, 159 ),
+ ( 78, 56, 158 ),
+ ( 80, 57, 158 ),
+ ( 82, 57, 157 ),
+ ( 83, 58, 157 ),
+ ( 85, 59, 157 ),
+ ( 86, 59, 156 ),
+ ( 88, 60, 156 ),
+ ( 89, 61, 155 ),
+ ( 91, 61, 155 ),
+ ( 92, 62, 154 ),
+ ( 94, 63, 154 ),
+ ( 95, 63, 153 ),
+ ( 96, 64, 153 ),
+ ( 98, 65, 152 ),
+ ( 99, 65, 152 ),
+ ( 101, 66, 151 ),
+ ( 102, 67, 151 ),
+ ( 103, 67, 150 ),
+ ( 105, 68, 150 ),
+ ( 106, 69, 149 ),
+ ( 108, 69, 149 ),
+ ( 109, 70, 148 ),
+ ( 110, 71, 148 ),
+ ( 112, 71, 148 ),
+ ( 113, 72, 147 ),
+ ( 114, 72, 147 ),
+ ( 116, 73, 146 ),
+ ( 117, 74, 146 ),
+ ( 118, 74, 146 ),
+ ( 120, 75, 145 ),
+ ( 121, 75, 145 ),
+ ( 122, 76, 145 ),
+ ( 124, 77, 144 ),
+ ( 125, 77, 144 ),
+ ( 126, 78, 144 ),
+ ( 128, 78, 143 ),
+ ( 129, 79, 143 ),
+ ( 131, 80, 143 ),
+ ( 132, 80, 142 ),
+ ( 133, 81, 142 ),
+ ( 135, 81, 142 ),
+ ( 136, 82, 141 ),
+ ( 137, 82, 141 ),
+ ( 139, 83, 141 ),
+ ( 140, 83, 140 ),
+ ( 142, 84, 140 ),
+ ( 143, 84, 140 ),
+ ( 144, 85, 139 ),
+ ( 146, 85, 139 ),
+ ( 147, 86, 139 ),
+ ( 149, 86, 138 ),
+ ( 150, 87, 138 ),
+ ( 151, 87, 138 ),
+ ( 153, 88, 137 ),
+ ( 154, 88, 137 ),
+ ( 156, 89, 137 ),
+ ( 157, 89, 136 ),
+ ( 159, 90, 136 ),
+ ( 160, 90, 135 ),
+ ( 162, 91, 135 ),
+ ( 163, 91, 134 ),
+ ( 165, 92, 134 ),
+ ( 166, 92, 134 ),
+ ( 168, 93, 133 ),
+ ( 169, 93, 132 ),
+ ( 171, 93, 132 ),
+ ( 172, 94, 131 ),
+ ( 174, 94, 131 ),
+ ( 175, 95, 130 ),
+ ( 177, 95, 130 ),
+ ( 178, 96, 129 ),
+ ( 180, 96, 128 ),
+ ( 181, 97, 128 ),
+ ( 183, 97, 127 ),
+ ( 184, 98, 126 ),
+ ( 186, 98, 126 ),
+ ( 187, 98, 125 ),
+ ( 189, 99, 124 ),
+ ( 190, 99, 123 ),
+ ( 192, 100, 123 ),
+ ( 193, 100, 122 ),
+ ( 195, 101, 121 ),
+ ( 196, 101, 120 ),
+ ( 198, 102, 119 ),
+ ( 199, 102, 118 ),
+ ( 201, 103, 117 ),
+ ( 202, 103, 116 ),
+ ( 204, 104, 115 ),
+ ( 205, 104, 114 ),
+ ( 206, 105, 113 ),
+ ( 208, 105, 112 ),
+ ( 209, 106, 111 ),
+ ( 211, 106, 110 ),
+ ( 212, 107, 109 ),
+ ( 214, 108, 108 ),
+ ( 215, 108, 107 ),
+ ( 216, 109, 106 ),
+ ( 218, 110, 105 ),
+ ( 219, 110, 104 ),
+ ( 220, 111, 102 ),
+ ( 222, 112, 101 ),
+ ( 223, 112, 100 ),
+ ( 224, 113, 99 ),
+ ( 225, 114, 98 ),
+ ( 227, 114, 96 ),
+ ( 228, 115, 95 ),
+ ( 229, 116, 94 ),
+ ( 230, 117, 93 ),
+ ( 231, 118, 91 ),
+ ( 232, 119, 90 ),
+ ( 234, 120, 89 ),
+ ( 235, 121, 88 ),
+ ( 236, 121, 86 ),
+ ( 237, 122, 85 ),
+ ( 238, 123, 84 ),
+ ( 238, 125, 83 ),
+ ( 239, 126, 82 ),
+ ( 240, 127, 80 ),
+ ( 241, 128, 79 ),
+ ( 242, 129, 78 ),
+ ( 243, 130, 77 ),
+ ( 243, 131, 76 ),
+ ( 244, 133, 75 ),
+ ( 245, 134, 74 ),
+ ( 245, 135, 73 ),
+ ( 246, 136, 72 ),
+ ( 246, 138, 71 ),
+ ( 247, 139, 70 ),
+ ( 247, 140, 69 ),
+ ( 248, 142, 68 ),
+ ( 248, 143, 67 ),
+ ( 249, 145, 67 ),
+ ( 249, 146, 66 ),
+ ( 249, 147, 65 ),
+ ( 250, 149, 65 ),
+ ( 250, 150, 64 ),
+ ( 250, 152, 63 ),
+ ( 251, 153, 63 ),
+ ( 251, 155, 62 ),
+ ( 251, 156, 62 ),
+ ( 251, 158, 62 ),
+ ( 251, 159, 61 ),
+ ( 251, 161, 61 ),
+ ( 252, 163, 61 ),
+ ( 252, 164, 61 ),
+ ( 252, 166, 60 ),
+ ( 252, 167, 60 ),
+ ( 252, 169, 60 ),
+ ( 252, 170, 60 ),
+ ( 252, 172, 60 ),
+ ( 252, 174, 60 ),
+ ( 252, 175, 60 ),
+ ( 252, 177, 60 ),
+ ( 251, 178, 61 ),
+ ( 251, 180, 61 ),
+ ( 251, 182, 61 ),
+ ( 251, 183, 61 ),
+ ( 251, 185, 62 ),
+ ( 251, 187, 62 ),
+ ( 251, 188, 62 ),
+ ( 250, 190, 63 ),
+ ( 250, 191, 63 ),
+ ( 250, 193, 64 ),
+ ( 250, 195, 64 ),
+ ( 249, 196, 65 ),
+ ( 249, 198, 65 ),
+ ( 249, 200, 66 ),
+ ( 248, 201, 67 ),
+ ( 248, 203, 67 ),
+ ( 248, 205, 68 ),
+ ( 247, 206, 69 ),
+ ( 247, 208, 69 ),
+ ( 247, 210, 70 ),
+ ( 246, 211, 71 ),
+ ( 246, 213, 71 ),
+ ( 245, 215, 72 ),
+ ( 245, 216, 73 ),
+ ( 244, 218, 74 ),
+ ( 244, 220, 75 ),
+ ( 243, 221, 75 ),
+ ( 243, 223, 76 ),
+ ( 242, 225, 77 ),
+ ( 242, 226, 78 ),
+ ( 241, 228, 79 ),
+ ( 241, 230, 80 ),
+ ( 240, 232, 81 ),
+ ( 239, 233, 81 ),
+ ( 239, 235, 82 ),
+ ( 238, 237, 83 ),
+ ( 237, 238, 84 ),
+ ( 237, 240, 85 ),
+ ( 236, 242, 86 ),
+ ( 235, 244, 87 ),
+ ( 234, 245, 88 ),
+ ( 234, 247, 89 ),
+ ( 233, 249, 90 ),
+ ( 232, 250, 91 )
+
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Topo.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Topo.cs
new file mode 100644
index 000000000..394348ef4
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Topo.cs
@@ -0,0 +1,275 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Topo : ByteColormapBase
+ {
+ public override string Name => "Topo";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = new (byte, byte, byte)[]{
+ ( 40, 26, 44 ),
+ ( 41, 28, 47 ),
+ ( 43, 29, 50 ),
+ ( 44, 31, 52 ),
+ ( 45, 32, 55 ),
+ ( 47, 34, 58 ),
+ ( 48, 35, 61 ),
+ ( 49, 37, 64 ),
+ ( 50, 38, 67 ),
+ ( 52, 40, 70 ),
+ ( 53, 41, 73 ),
+ ( 54, 42, 76 ),
+ ( 55, 44, 79 ),
+ ( 56, 45, 82 ),
+ ( 57, 47, 85 ),
+ ( 58, 48, 88 ),
+ ( 59, 50, 92 ),
+ ( 60, 51, 95 ),
+ ( 61, 53, 98 ),
+ ( 62, 54, 102 ),
+ ( 63, 56, 105 ),
+ ( 63, 57, 108 ),
+ ( 64, 59, 112 ),
+ ( 64, 60, 115 ),
+ ( 65, 62, 118 ),
+ ( 65, 64, 122 ),
+ ( 65, 65, 125 ),
+ ( 66, 67, 128 ),
+ ( 65, 69, 131 ),
+ ( 65, 71, 133 ),
+ ( 65, 73, 136 ),
+ ( 65, 75, 138 ),
+ ( 64, 77, 140 ),
+ ( 64, 79, 141 ),
+ ( 63, 82, 143 ),
+ ( 63, 84, 144 ),
+ ( 62, 86, 145 ),
+ ( 62, 88, 146 ),
+ ( 62, 90, 146 ),
+ ( 62, 92, 147 ),
+ ( 62, 95, 147 ),
+ ( 62, 97, 148 ),
+ ( 62, 99, 148 ),
+ ( 62, 101, 149 ),
+ ( 62, 103, 149 ),
+ ( 62, 105, 150 ),
+ ( 62, 107, 150 ),
+ ( 63, 109, 151 ),
+ ( 63, 111, 151 ),
+ ( 64, 113, 151 ),
+ ( 64, 115, 152 ),
+ ( 64, 117, 152 ),
+ ( 65, 119, 153 ),
+ ( 66, 121, 153 ),
+ ( 66, 123, 153 ),
+ ( 67, 125, 154 ),
+ ( 67, 127, 154 ),
+ ( 68, 129, 155 ),
+ ( 68, 131, 155 ),
+ ( 69, 133, 156 ),
+ ( 70, 135, 156 ),
+ ( 70, 137, 157 ),
+ ( 71, 139, 157 ),
+ ( 72, 141, 157 ),
+ ( 72, 143, 158 ),
+ ( 73, 145, 158 ),
+ ( 74, 147, 159 ),
+ ( 74, 149, 159 ),
+ ( 75, 151, 160 ),
+ ( 76, 153, 160 ),
+ ( 77, 155, 161 ),
+ ( 77, 157, 161 ),
+ ( 78, 159, 161 ),
+ ( 79, 161, 162 ),
+ ( 80, 163, 162 ),
+ ( 81, 165, 162 ),
+ ( 81, 167, 163 ),
+ ( 82, 169, 163 ),
+ ( 83, 171, 163 ),
+ ( 85, 173, 163 ),
+ ( 86, 175, 164 ),
+ ( 87, 177, 164 ),
+ ( 88, 179, 164 ),
+ ( 90, 182, 164 ),
+ ( 91, 184, 164 ),
+ ( 93, 186, 164 ),
+ ( 95, 188, 164 ),
+ ( 97, 190, 164 ),
+ ( 99, 192, 164 ),
+ ( 101, 194, 164 ),
+ ( 103, 195, 164 ),
+ ( 106, 197, 164 ),
+ ( 109, 199, 163 ),
+ ( 112, 201, 163 ),
+ ( 115, 203, 163 ),
+ ( 118, 205, 163 ),
+ ( 122, 206, 163 ),
+ ( 125, 208, 163 ),
+ ( 129, 210, 163 ),
+ ( 133, 211, 163 ),
+ ( 137, 213, 163 ),
+ ( 141, 215, 163 ),
+ ( 146, 216, 164 ),
+ ( 150, 218, 164 ),
+ ( 154, 219, 165 ),
+ ( 159, 221, 165 ),
+ ( 163, 222, 166 ),
+ ( 167, 224, 167 ),
+ ( 172, 225, 168 ),
+ ( 176, 226, 169 ),
+ ( 181, 228, 170 ),
+ ( 185, 229, 172 ),
+ ( 189, 231, 173 ),
+ ( 193, 232, 175 ),
+ ( 198, 234, 176 ),
+ ( 202, 235, 178 ),
+ ( 206, 236, 179 ),
+ ( 210, 238, 181 ),
+ ( 215, 239, 183 ),
+ ( 219, 241, 185 ),
+ ( 223, 242, 187 ),
+ ( 227, 244, 189 ),
+ ( 231, 245, 191 ),
+ ( 235, 247, 193 ),
+ ( 239, 248, 196 ),
+ ( 243, 250, 198 ),
+ ( 247, 251, 200 ),
+ ( 251, 253, 203 ),
+ ( 13, 37, 20 ),
+ ( 14, 39, 21 ),
+ ( 15, 41, 21 ),
+ ( 16, 42, 22 ),
+ ( 17, 44, 23 ),
+ ( 18, 46, 23 ),
+ ( 19, 48, 24 ),
+ ( 20, 50, 24 ),
+ ( 21, 51, 25 ),
+ ( 22, 53, 26 ),
+ ( 23, 55, 26 ),
+ ( 23, 57, 27 ),
+ ( 24, 58, 27 ),
+ ( 25, 60, 28 ),
+ ( 26, 62, 28 ),
+ ( 27, 64, 28 ),
+ ( 27, 65, 29 ),
+ ( 28, 67, 29 ),
+ ( 29, 69, 29 ),
+ ( 30, 71, 30 ),
+ ( 31, 72, 30 ),
+ ( 32, 74, 30 ),
+ ( 33, 76, 30 ),
+ ( 35, 78, 30 ),
+ ( 37, 79, 30 ),
+ ( 39, 81, 30 ),
+ ( 42, 82, 30 ),
+ ( 45, 83, 31 ),
+ ( 48, 85, 32 ),
+ ( 51, 86, 34 ),
+ ( 54, 87, 35 ),
+ ( 57, 88, 37 ),
+ ( 60, 90, 38 ),
+ ( 63, 91, 40 ),
+ ( 65, 92, 42 ),
+ ( 68, 93, 43 ),
+ ( 71, 95, 45 ),
+ ( 73, 96, 47 ),
+ ( 76, 97, 48 ),
+ ( 78, 98, 49 ),
+ ( 81, 99, 51 ),
+ ( 84, 101, 52 ),
+ ( 86, 102, 53 ),
+ ( 89, 103, 54 ),
+ ( 92, 104, 55 ),
+ ( 94, 106, 56 ),
+ ( 97, 107, 57 ),
+ ( 100, 108, 58 ),
+ ( 102, 109, 58 ),
+ ( 105, 111, 59 ),
+ ( 107, 112, 60 ),
+ ( 110, 113, 60 ),
+ ( 113, 114, 61 ),
+ ( 115, 116, 61 ),
+ ( 118, 117, 62 ),
+ ( 121, 118, 62 ),
+ ( 123, 119, 62 ),
+ ( 126, 121, 63 ),
+ ( 129, 122, 63 ),
+ ( 131, 123, 63 ),
+ ( 134, 124, 63 ),
+ ( 137, 126, 64 ),
+ ( 140, 127, 64 ),
+ ( 142, 128, 64 ),
+ ( 145, 129, 64 ),
+ ( 148, 131, 64 ),
+ ( 150, 132, 64 ),
+ ( 153, 133, 64 ),
+ ( 156, 134, 64 ),
+ ( 159, 136, 64 ),
+ ( 161, 137, 64 ),
+ ( 164, 138, 63 ),
+ ( 167, 140, 63 ),
+ ( 170, 141, 63 ),
+ ( 173, 142, 63 ),
+ ( 176, 143, 63 ),
+ ( 179, 145, 63 ),
+ ( 182, 146, 63 ),
+ ( 185, 147, 62 ),
+ ( 188, 148, 62 ),
+ ( 191, 149, 63 ),
+ ( 193, 151, 65 ),
+ ( 195, 153, 69 ),
+ ( 196, 155, 72 ),
+ ( 197, 157, 76 ),
+ ( 198, 159, 80 ),
+ ( 199, 161, 83 ),
+ ( 200, 163, 87 ),
+ ( 202, 165, 90 ),
+ ( 203, 167, 94 ),
+ ( 204, 169, 97 ),
+ ( 205, 171, 101 ),
+ ( 206, 173, 104 ),
+ ( 207, 176, 108 ),
+ ( 208, 178, 111 ),
+ ( 209, 180, 115 ),
+ ( 210, 182, 118 ),
+ ( 211, 184, 122 ),
+ ( 212, 187, 125 ),
+ ( 213, 189, 129 ),
+ ( 214, 191, 132 ),
+ ( 215, 193, 136 ),
+ ( 216, 195, 139 ),
+ ( 218, 198, 143 ),
+ ( 219, 200, 146 ),
+ ( 220, 202, 150 ),
+ ( 221, 204, 153 ),
+ ( 222, 207, 157 ),
+ ( 223, 209, 160 ),
+ ( 224, 211, 164 ),
+ ( 226, 213, 167 ),
+ ( 227, 216, 171 ),
+ ( 228, 218, 174 ),
+ ( 229, 220, 178 ),
+ ( 230, 223, 182 ),
+ ( 232, 225, 185 ),
+ ( 233, 227, 189 ),
+ ( 234, 230, 192 ),
+ ( 236, 232, 196 ),
+ ( 237, 234, 199 ),
+ ( 238, 237, 203 ),
+ ( 240, 239, 207 ),
+ ( 241, 241, 210 ),
+ ( 242, 244, 214 ),
+ ( 244, 246, 217 ),
+ ( 245, 249, 221 ),
+ ( 247, 251, 225 ),
+ ( 249, 253, 228 )
+
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbid.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbid.cs
new file mode 100644
index 000000000..86f1c458b
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbid.cs
@@ -0,0 +1,276 @@
+//This is a cmocean colormap
+//All credit to Kristen Thyng
+//This colormap is under the MIT License
+//All cmocean colormaps are available at https://github.com/matplotlib/cmocean/tree/master/cmocean/rgb
+
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Turbid : ByteColormapBase
+ {
+ public override string Name => "Turbid";
+
+ public override (byte r, byte g, byte b)[] Rgbs => _rgbs;
+
+ private static readonly (byte, byte, byte)[] _rgbs = new (byte, byte, byte)[] {
+ ( 233, 246, 171 ),
+ ( 232, 245, 170 ),
+ ( 232, 243, 168 ),
+ ( 231, 242, 167 ),
+ ( 230, 241, 165 ),
+ ( 230, 240, 164 ),
+ ( 229, 239, 162 ),
+ ( 229, 238, 161 ),
+ ( 228, 236, 159 ),
+ ( 228, 235, 158 ),
+ ( 227, 234, 156 ),
+ ( 227, 233, 155 ),
+ ( 226, 232, 154 ),
+ ( 226, 231, 152 ),
+ ( 225, 229, 151 ),
+ ( 224, 228, 149 ),
+ ( 224, 227, 148 ),
+ ( 223, 226, 146 ),
+ ( 223, 225, 145 ),
+ ( 222, 224, 143 ),
+ ( 222, 223, 142 ),
+ ( 221, 221, 141 ),
+ ( 221, 220, 139 ),
+ ( 220, 219, 138 ),
+ ( 220, 218, 136 ),
+ ( 219, 217, 135 ),
+ ( 219, 216, 134 ),
+ ( 218, 215, 132 ),
+ ( 218, 213, 131 ),
+ ( 217, 212, 130 ),
+ ( 217, 211, 128 ),
+ ( 217, 210, 127 ),
+ ( 216, 209, 126 ),
+ ( 216, 208, 124 ),
+ ( 215, 207, 123 ),
+ ( 215, 206, 122 ),
+ ( 214, 204, 120 ),
+ ( 214, 203, 119 ),
+ ( 213, 202, 118 ),
+ ( 213, 201, 116 ),
+ ( 212, 200, 115 ),
+ ( 212, 199, 114 ),
+ ( 211, 198, 113 ),
+ ( 211, 197, 111 ),
+ ( 211, 195, 110 ),
+ ( 210, 194, 109 ),
+ ( 210, 193, 108 ),
+ ( 209, 192, 107 ),
+ ( 209, 191, 105 ),
+ ( 208, 190, 104 ),
+ ( 208, 189, 103 ),
+ ( 207, 188, 102 ),
+ ( 207, 187, 101 ),
+ ( 207, 186, 100 ),
+ ( 206, 184, 98 ),
+ ( 206, 183, 97 ),
+ ( 205, 182, 96 ),
+ ( 205, 181, 95 ),
+ ( 204, 180, 94 ),
+ ( 204, 179, 93 ),
+ ( 203, 178, 92 ),
+ ( 203, 177, 91 ),
+ ( 202, 176, 90 ),
+ ( 202, 175, 89 ),
+ ( 202, 174, 88 ),
+ ( 201, 172, 87 ),
+ ( 201, 171, 86 ),
+ ( 200, 170, 85 ),
+ ( 200, 169, 84 ),
+ ( 199, 168, 83 ),
+ ( 199, 167, 82 ),
+ ( 198, 166, 81 ),
+ ( 198, 165, 81 ),
+ ( 197, 164, 80 ),
+ ( 197, 163, 79 ),
+ ( 196, 162, 78 ),
+ ( 196, 161, 77 ),
+ ( 195, 160, 77 ),
+ ( 195, 159, 76 ),
+ ( 194, 158, 75 ),
+ ( 194, 156, 74 ),
+ ( 193, 155, 74 ),
+ ( 193, 154, 73 ),
+ ( 192, 153, 72 ),
+ ( 192, 152, 72 ),
+ ( 191, 151, 71 ),
+ ( 191, 150, 71 ),
+ ( 190, 149, 70 ),
+ ( 189, 148, 69 ),
+ ( 189, 147, 69 ),
+ ( 188, 146, 68 ),
+ ( 188, 145, 68 ),
+ ( 187, 144, 67 ),
+ ( 187, 143, 67 ),
+ ( 186, 142, 66 ),
+ ( 185, 141, 66 ),
+ ( 185, 140, 66 ),
+ ( 184, 139, 65 ),
+ ( 183, 138, 65 ),
+ ( 183, 137, 64 ),
+ ( 182, 137, 64 ),
+ ( 182, 136, 64 ),
+ ( 181, 135, 64 ),
+ ( 180, 134, 63 ),
+ ( 179, 133, 63 ),
+ ( 179, 132, 63 ),
+ ( 178, 131, 62 ),
+ ( 177, 130, 62 ),
+ ( 177, 129, 62 ),
+ ( 176, 128, 62 ),
+ ( 175, 127, 61 ),
+ ( 175, 126, 61 ),
+ ( 174, 125, 61 ),
+ ( 173, 125, 61 ),
+ ( 172, 124, 61 ),
+ ( 172, 123, 61 ),
+ ( 171, 122, 60 ),
+ ( 170, 121, 60 ),
+ ( 169, 120, 60 ),
+ ( 168, 119, 60 ),
+ ( 168, 119, 60 ),
+ ( 167, 118, 60 ),
+ ( 166, 117, 60 ),
+ ( 165, 116, 60 ),
+ ( 164, 115, 59 ),
+ ( 164, 114, 59 ),
+ ( 163, 114, 59 ),
+ ( 162, 113, 59 ),
+ ( 161, 112, 59 ),
+ ( 160, 111, 59 ),
+ ( 159, 110, 59 ),
+ ( 158, 110, 59 ),
+ ( 158, 109, 59 ),
+ ( 157, 108, 59 ),
+ ( 156, 107, 59 ),
+ ( 155, 107, 59 ),
+ ( 154, 106, 59 ),
+ ( 153, 105, 59 ),
+ ( 152, 104, 59 ),
+ ( 151, 104, 58 ),
+ ( 150, 103, 58 ),
+ ( 150, 102, 58 ),
+ ( 149, 101, 58 ),
+ ( 148, 101, 58 ),
+ ( 147, 100, 58 ),
+ ( 146, 99, 58 ),
+ ( 145, 98, 58 ),
+ ( 144, 98, 58 ),
+ ( 143, 97, 58 ),
+ ( 142, 96, 58 ),
+ ( 141, 96, 58 ),
+ ( 140, 95, 58 ),
+ ( 139, 94, 58 ),
+ ( 138, 94, 58 ),
+ ( 137, 93, 58 ),
+ ( 136, 92, 58 ),
+ ( 135, 92, 57 ),
+ ( 134, 91, 57 ),
+ ( 133, 90, 57 ),
+ ( 132, 90, 57 ),
+ ( 131, 89, 57 ),
+ ( 130, 88, 57 ),
+ ( 129, 88, 57 ),
+ ( 128, 87, 57 ),
+ ( 127, 86, 57 ),
+ ( 126, 86, 57 ),
+ ( 125, 85, 56 ),
+ ( 124, 84, 56 ),
+ ( 123, 84, 56 ),
+ ( 122, 83, 56 ),
+ ( 121, 83, 56 ),
+ ( 120, 82, 56 ),
+ ( 119, 81, 56 ),
+ ( 118, 81, 56 ),
+ ( 117, 80, 55 ),
+ ( 116, 79, 55 ),
+ ( 115, 79, 55 ),
+ ( 114, 78, 55 ),
+ ( 113, 78, 55 ),
+ ( 112, 77, 55 ),
+ ( 111, 76, 54 ),
+ ( 110, 76, 54 ),
+ ( 109, 75, 54 ),
+ ( 108, 75, 54 ),
+ ( 107, 74, 53 ),
+ ( 106, 73, 53 ),
+ ( 105, 73, 53 ),
+ ( 103, 72, 53 ),
+ ( 102, 72, 53 ),
+ ( 101, 71, 52 ),
+ ( 100, 70, 52 ),
+ ( 99, 70, 52 ),
+ ( 98, 69, 52 ),
+ ( 97, 69, 51 ),
+ ( 96, 68, 51 ),
+ ( 95, 67, 51 ),
+ ( 94, 67, 51 ),
+ ( 93, 66, 50 ),
+ ( 92, 66, 50 ),
+ ( 91, 65, 50 ),
+ ( 90, 65, 49 ),
+ ( 89, 64, 49 ),
+ ( 88, 63, 49 ),
+ ( 87, 63, 48 ),
+ ( 86, 62, 48 ),
+ ( 85, 62, 48 ),
+ ( 84, 61, 48 ),
+ ( 83, 60, 47 ),
+ ( 82, 60, 47 ),
+ ( 81, 59, 47 ),
+ ( 80, 59, 46 ),
+ ( 79, 58, 46 ),
+ ( 78, 57, 46 ),
+ ( 77, 57, 45 ),
+ ( 75, 56, 45 ),
+ ( 74, 56, 44 ),
+ ( 73, 55, 44 ),
+ ( 72, 54, 44 ),
+ ( 71, 54, 43 ),
+ ( 70, 53, 43 ),
+ ( 69, 53, 43 ),
+ ( 68, 52, 42 ),
+ ( 67, 51, 42 ),
+ ( 66, 51, 41 ),
+ ( 65, 50, 41 ),
+ ( 64, 50, 41 ),
+ ( 63, 49, 40 ),
+ ( 62, 48, 40 ),
+ ( 61, 48, 39 ),
+ ( 60, 47, 39 ),
+ ( 59, 47, 39 ),
+ ( 58, 46, 38 ),
+ ( 57, 45, 38 ),
+ ( 56, 45, 37 ),
+ ( 55, 44, 37 ),
+ ( 54, 43, 36 ),
+ ( 53, 43, 36 ),
+ ( 52, 42, 36 ),
+ ( 51, 42, 35 ),
+ ( 50, 41, 35 ),
+ ( 49, 40, 34 ),
+ ( 48, 40, 34 ),
+ ( 47, 39, 33 ),
+ ( 46, 38, 33 ),
+ ( 45, 38, 32 ),
+ ( 44, 37, 32 ),
+ ( 43, 36, 31 ),
+ ( 42, 36, 31 ),
+ ( 41, 35, 31 ),
+ ( 40, 35, 30 ),
+ ( 39, 34, 30 ),
+ ( 38, 33, 29 ),
+ ( 37, 33, 29 ),
+ ( 36, 32, 28 ),
+ ( 35, 31, 28 ),
+ ( 34, 31, 27 )
+
+ };
+ }
+}
+
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbo.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbo.cs
new file mode 100644
index 000000000..8ec5f2721
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Turbo.cs
@@ -0,0 +1,50 @@
+// This colormap was created by Scott Harden on 2020-06-16 and is released under a MIT license.
+// It was designed to mimic Turbo, but is not a copy of or derived from Turbo source code.
+// https://ai.googleblog.com/2019/08/turbo-improved-rainbow-colormap-for.html
+
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Turbo : ArgbColormapBase
+ {
+ public override string Name => "Turbo";
+
+ public override uint[] Argbs => _argbs;
+
+ private static readonly uint[] _argbs = new int[]
+ {
+ -13559489, -13493436, -13427382, -13361328, -13295018, -13228964, -13162911, -13096857,
+ -13030547, -12964493, -12898440, -12832130, -12766077, -12700023, -12633970, -12567660,
+ -12501607, -12435554, -12369245, -12303192, -12237139, -12171086, -12170313, -12104260,
+ -12038208, -12037436, -11971383, -11905331, -11904559, -11838507, -11837991, -11771940,
+ -11771168, -11770653, -11770138, -11703831, -11703316, -11702801, -11702287, -11701517,
+ -11701003, -11700489, -11765255, -11764742, -11764228, -11828995, -11828482, -11893506,
+ -11892737, -11957761, -12022785, -12022017, -12087042, -12152067, -12217092, -12347397,
+ -12412423, -12477448, -12542218, -12672780, -12737806, -12802577, -12933139, -12998166,
+ -13128729, -13193500, -13324063, -13389091, -13519654, -13584682, -13714989, -13780017,
+ -13910581, -13975609, -14106173, -14171201, -14301765, -14366793, -14431822, -14562386,
+ -14627414, -14692442, -14757471, -14822499, -14887527, -14952556, -14952048, -15017332,
+ -15082361, -15081853, -15147137, -15146629, -15146121, -15145869, -15145361, -15145109,
+ -15079065, -15078812, -15013024, -15012515, -14946726, -14880938, -14749356, -14683567,
+ -14617778, -14486453, -14355127, -14223801, -14092475, -13961405, -13764543, -13633217,
+ -13436355, -13239748, -13108422, -12911559, -12714952, -12518089, -12255946, -12059339,
+ -11862476, -11600333, -11403725, -11141582, -10879182, -10682575, -10420431, -10158287,
+ -09896143, -09633999, -09372111, -09175503, -08913359, -08651215, -08389327, -08127183,
+ -07865294, -07603150, -07341262, -07079117, -06817229, -06555341, -06293452, -06031308,
+ -05834955, -05573067, -05311178, -05114826, -04852937, -04656585, -04394952, -04198600,
+ -04002247, -03740358, -03544262, -03347910, -03217349, -03020997, -02824900, -02628804,
+ -02497987, -02301891, -02171331, -02040770, -01910210, -01779394, -01648834, -01518273,
+ -01387713, -01257153, -01126849, -01061824, -00931264, -00866240, -00801216, -00670656,
+ -00605888, -00540864, -00475840, -00411072, -00346048, -00346560, -00281792, -00282304,
+ -00217536, -00218048, -00153280, -00153793, -00154561, -00155073, -00155841, -00156354,
+ -00157122, -00157634, -00158403, -00224451, -00225219, -00291524, -00292036, -00358341,
+ -00424389, -00490694, -00491206, -00557511, -00623559, -00755400, -00821705, -00887754,
+ -00954058, -01085643, -01151948, -01283533, -01349837, -01481422, -01613263, -01679312,
+ -01811153, -01942738, -02074579, -02206164, -02337749, -02469590, -02601175, -02733016,
+ -02930137, -03061978, -03193563, -03390940, -03522526, -03654111, -03851488, -03983073,
+ -04180450, -04377572, -04509157, -04706534, -04838119, -05035497, -05232618, -05429739,
+ -05561580, -05758702, -05956079, -06153200, -06350322, -06482163, -06679284, -06876662,
+ -07073783, -07270904, -07468282, -07665403, -07862524, -08059902, -08257023, -08388608,
+ }.Select(argb => (uint)argb).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Viridis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Viridis.cs
new file mode 100644
index 000000000..a8cb3e8bb
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Color Maps/Viridis.cs
@@ -0,0 +1,54 @@
+/* Viridis is a colormap by Nathaniel J. Smith, Stefan van der Walt, and Eric Firing
+ * https://bids.github.io/colormap/
+ * https://github.com/BIDS/colormap/blob/master/colormaps.py
+ *
+ * This colormap is provided under the CC0 license / public domain dedication
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Viridis : ArgbColormapBase
+ {
+ public override string Name => "Viridis";
+ public override uint[] Argbs => _argbs;
+
+ private static readonly uint[] _rgbs =
+ {
+ 04456788, 04457045, 04457303, 04523352, 04523610, 04524123, 04589916, 04590430,
+ 04590687, 04591201, 04656994, 04657507, 04657765, 04658278, 04658535, 04658793,
+ 04659306, 04725099, 04725356, 04725870, 04726127, 04726384, 04726897, 04727154,
+ 04727411, 04727668, 04662645, 04662902, 04663159, 04663416, 04663929, 04664186,
+ 04664443, 04599164, 04599676, 04599933, 04600190, 04534911, 04535423, 04535680,
+ 04535937, 04470657, 04471170, 04405891, 04406147, 04406404, 04341124, 04341381,
+ 04341893, 04276614, 04276870, 04211591, 04211847, 04146567, 04147080, 04081800,
+ 04082057, 04016777, 04017033, 04017289, 03952010, 03952266, 03887242, 03887498,
+ 03822219, 03822475, 03757195, 03757451, 03692171, 03692428, 03627148, 03627404,
+ 03562124, 03562380, 03497100, 03497356, 03432077, 03432333, 03367053, 03367309,
+ 03302029, 03302285, 03237005, 03237261, 03237517, 03172237, 03172493, 03107213,
+ 03107469, 03042190, 03042446, 03042702, 02977422, 02977678, 02912398, 02912654,
+ 02912910, 02847630, 02847886, 02782606, 02782862, 02783118, 02717838, 02718094,
+ 02652814, 02652814, 02653070, 02587790, 02588046, 02588302, 02523022, 02523278,
+ 02523534, 02458254, 02458509, 02393229, 02393485, 02393741, 02328461, 02328717,
+ 02328973, 02263437, 02263693, 02263949, 02198669, 02198924, 02199180, 02133900,
+ 02134156, 02134412, 02069132, 02069387, 02069643, 02069899, 02070155, 02004874,
+ 02005130, 02005386, 02005386, 02005641, 02005897, 02006153, 02006408, 02006664,
+ 02006920, 02007175, 02072967, 02073222, 02073478, 02139269, 02139525, 02205317,
+ 02205572, 02271108, 02336899, 02337154, 02402946, 02468737, 02534529, 02600320,
+ 02666111, 02731903, 02797694, 02863485, 02929021, 03060348, 03126139, 03191930,
+ 03323258, 03389049, 03520376, 03586167, 03717494, 03783030, 03914357, 04045684,
+ 04111475, 04242802, 04374129, 04505200, 04570991, 04702318, 04833645, 04964972,
+ 05096043, 05227369, 05358696, 05490023, 05621350, 05752421, 05883748, 06015074,
+ 06211937, 06343008, 06474335, 06605661, 06802524, 06933595, 07064921, 07196248,
+ 07392854, 07524181, 07655508, 07852114, 07983441, 08180303, 08311374, 08508236,
+ 08639307, 08836169, 08967495, 09164102, 09295428, 09492035, 09623361, 09819967,
+ 09951294, 10147900, 10344762, 10475832, 10672695, 10869301, 11000627, 11197234,
+ 11394096, 11525166, 11722028, 11918635, 12049705, 12246567, 12443174, 12574500,
+ 12771106, 12967713, 13099039, 13295646, 13492253, 13623580, 13820187, 13951258,
+ 14148121, 14344728, 14475800, 14672664, 14803736, 15000344, 15197209, 15328281,
+ 15524890, 15656219, 15852828, 15983902, 16180767, 16311841, 16442914, 16639780,
+ };
+
+ private static readonly uint[] _argbs = _rgbs.Select(rgb => unchecked((uint)(0xFF << 24) | rgb)).ToArray();
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/ContextMenuItem.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/ContextMenuItem.cs
new file mode 100644
index 000000000..32411b549
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/ContextMenuItem.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Represents a single item in a right-click pop-up menu
+ ///
+ public struct ContextMenuItem
+ {
+ public string Label { get; set; }
+
+ public Action OnInvoke { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/InputBindings.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/InputBindings.cs
new file mode 100644
index 000000000..bfc7b2f8d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/InputBindings.cs
@@ -0,0 +1,80 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This class defines which buttons and keys perform which actions to manipulate the plot.
+ ///
+ public class InputBindings
+ {
+ public MouseButton? DragPanButton = null;
+ public MouseButton? DragZoomButton = null;
+ public MouseButton? DragZoomRectangleButton = null;
+ public MouseButton? DoubleClickButton = null;
+ public MouseButton? ClickAutoAxisButton = null;
+ public MouseButton? ClickContextMenuButton = null;
+
+ public MouseWheelDirection? ZoomInWheelDirection = null;
+ public MouseWheelDirection? ZoomOutWheelDirection = null;
+ public MouseWheelDirection? PanUpWheelDirection = null;
+ public MouseWheelDirection? PanDownWheelDirection = null;
+ public MouseWheelDirection? PanLeftWheelDirection = null;
+ public MouseWheelDirection? PanRightWheelDirection = null;
+
+ public Key? LockHorizontalAxisKey = null;
+ public Key? LockVerticalAxisKey = null;
+ public Key? PanZoomRectangleKey = null;
+
+ ///
+ /// Returns if contains the key which locks the X axis
+ ///
+ public bool ShouldLockX(IEnumerable keys)
+ {
+ return LockHorizontalAxisKey.HasValue ? keys.Contains(LockHorizontalAxisKey.Value) : false;
+ }
+
+ ///
+ /// Returns if contains the key which locks the Y axis
+ ///
+ public bool ShouldLockY(IEnumerable keys)
+ {
+ return LockVerticalAxisKey.HasValue ? keys.Contains(LockVerticalAxisKey.Value) : false;
+ }
+
+ ///
+ /// Returns if the combination of pressed buttons and keys results in a click-drag zoom rectangle
+ ///
+ public bool ShouldZoomRectangle(MouseButton button, IEnumerable keys)
+ {
+ if (button == DragZoomRectangleButton)
+ {
+ return true;
+ }
+
+ if (button == DragPanButton)
+ {
+ if (PanZoomRectangleKey.HasValue && keys.Contains(PanZoomRectangleKey.Value))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static InputBindings Standard() => new()
+ {
+ DragPanButton = MouseButton.Left,
+ DragZoomRectangleButton = MouseButton.Middle,
+ DragZoomButton = MouseButton.Right,
+ ClickAutoAxisButton = MouseButton.Middle,
+ ClickContextMenuButton = MouseButton.Right,
+ DoubleClickButton = MouseButton.Left,
+ ZoomInWheelDirection = MouseWheelDirection.Up,
+ ZoomOutWheelDirection = MouseWheelDirection.Down,
+ LockHorizontalAxisKey = Key.Shift,
+ LockVerticalAxisKey = Key.Ctrl,
+ PanZoomRectangleKey = Key.Alt,
+ };
+
+ public static InputBindings NonInteractive() => new() { };
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Interaction.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Interaction.cs
new file mode 100644
index 000000000..af5c07a30
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Interaction.cs
@@ -0,0 +1,199 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This class contains logic to perform plot manipulations in response to UI actions.
+ /// To customize how user inputs are interpreted, inherit and override functions in this class.
+ /// To customize behavior of actions, replace properties of with custom delegates.
+ /// To customize UI inputs, assign desired button and key properties of .
+ ///
+ public class Interaction : IPlotInteraction
+ {
+ public IPlotControl PlotControl { get; private set; }
+
+ ///
+ /// Buttons and keys in this object can be overwritten to customize actions for specific user input events.
+ /// (e.g., make left-click-drag zoom instead of pan)
+ ///
+ public InputBindings Inputs = InputBindings.Standard();
+
+ ///
+ /// Delegates in this object can be overwritten with custom functions that manipulate the plot.
+ /// (e.g., changing the sensitivity of click-drag-zooming)
+ ///
+ public PlotActions Actions = PlotActions.Standard();
+
+ protected readonly KeyboardState Keyboard = new();
+ protected readonly MouseState Mouse = new();
+
+ public bool IsDraggingMouse(Pixel pos) => Mouse.PressedButtons.Any() && Mouse.IsDragging(pos);
+ protected bool LockX => Inputs.ShouldLockX(Keyboard.PressedKeys);
+ protected bool LockY => Inputs.ShouldLockY(Keyboard.PressedKeys);
+ protected bool IsZoomingRectangle = false;
+
+ public Interaction(IPlotControl control)
+ {
+ PlotControl = control;
+ }
+
+ ///
+ /// Disable all mouse interactivity
+ ///
+ public void Disable()
+ {
+ Actions = PlotActions.NonInteractive();
+ }
+
+ ///
+ /// Enable mouse interactivity using the default mouse actions
+ ///
+ public void Enable()
+ {
+ Actions = PlotActions.Standard();
+ }
+
+ ///
+ /// Enable mouse interactivity using custom mouse actions
+ ///
+ public void Enable(PlotActions customActions)
+ {
+ Actions = customActions;
+ }
+
+ ///
+ /// Return the last observed location of the mouse in coordinate units
+ ///
+ public Coordinates GetMouseCoordinates(IXAxis? xAxis = null, IYAxis? yAxis = null)
+ {
+ return PlotControl.Plot.GetCoordinates(Mouse.LastPosition, xAxis, yAxis);
+ }
+
+ public virtual void OnMouseMove(Pixel newPosition)
+ {
+ Mouse.LastPosition = newPosition;
+
+ if (IsDraggingMouse(newPosition))
+ {
+ MouseDrag(
+ from: Mouse.MouseDownPosition,
+ to: newPosition,
+ button: Mouse.PressedButtons.First(),
+ keys: Keyboard.PressedKeys,
+ start: Mouse.MouseDownAxisLimits);
+ }
+ }
+
+ protected virtual void MouseDrag(Pixel from, Pixel to, MouseButton button, IEnumerable keys, MultiAxisLimitManager start)
+ {
+ var lockY = Inputs.ShouldLockY(keys);
+ var lockX = Inputs.ShouldLockX(keys);
+ LockedAxes locks = new(lockX, LockY);
+
+ MouseDrag drag = new(start, from, to);
+
+ if (Inputs.ShouldZoomRectangle(button, keys))
+ {
+ Actions.DragZoomRectangle(PlotControl, drag, locks);
+ IsZoomingRectangle = true;
+ }
+ else if (button == Inputs.DragPanButton)
+ {
+ Actions.DragPan(PlotControl, drag, locks);
+ }
+ else if (button == Inputs.DragZoomButton)
+ {
+
+ Actions.DragZoom(PlotControl, drag, locks);
+ }
+ }
+
+ public virtual void KeyUp(Key key)
+ {
+ Keyboard.Up(key);
+ }
+
+ public virtual void KeyDown(Key key)
+ {
+ Keyboard.Down(key);
+ }
+
+ public virtual void MouseDown(Pixel position, MouseButton button)
+ {
+ Mouse.Down(position, button, new MultiAxisLimitManager(PlotControl));
+ }
+
+ public virtual void MouseUp(Pixel position, MouseButton button)
+ {
+ var isDragging = Mouse.IsDragging(position);
+
+ var droppedZoomRectangle =
+ isDragging &&
+ Inputs.ShouldZoomRectangle(button, Keyboard.PressedKeys) &&
+ IsZoomingRectangle;
+
+ if (droppedZoomRectangle)
+ {
+ Actions.ZoomRectangleApply(PlotControl);
+ Actions.ZoomRectangleClear(PlotControl);
+ IsZoomingRectangle = false;
+ }
+
+ // this covers the case where an extremely tiny zoom rectangle was made
+ if (isDragging == false && button == Inputs.ClickAutoAxisButton)
+ {
+ Actions.AutoScale(PlotControl);
+ }
+
+ if (button == Inputs.DragZoomRectangleButton)
+ {
+ Actions.ZoomRectangleClear(PlotControl);
+ IsZoomingRectangle = false;
+ }
+
+ if (!isDragging && button == Inputs.ClickContextMenuButton)
+ {
+ Actions.ShowContextMenu(PlotControl, position);
+ }
+
+ Mouse.Up(button);
+ }
+
+ public virtual void DoubleClick()
+ {
+ Actions.ToggleBenchmark(PlotControl);
+ }
+
+ public virtual void MouseWheelVertical(Pixel pixel, float delta)
+ {
+ var direction = delta > 0 ? MouseWheelDirection.Up : MouseWheelDirection.Down;
+
+ if (Inputs.ZoomInWheelDirection.HasValue && Inputs.ZoomInWheelDirection == direction)
+ {
+ Actions.ZoomIn(PlotControl, pixel, new LockedAxes(LockX, LockY));
+ }
+ else if (Inputs.ZoomOutWheelDirection.HasValue && Inputs.ZoomOutWheelDirection == direction)
+ {
+ Actions.ZoomOut(PlotControl, pixel, new LockedAxes(LockX, LockY));
+ }
+ else if (Inputs.PanUpWheelDirection.HasValue && Inputs.PanUpWheelDirection == direction)
+ {
+ Actions.PanUp(PlotControl);
+ }
+ else if (Inputs.PanDownWheelDirection.HasValue && Inputs.PanDownWheelDirection == direction)
+ {
+ Actions.PanDown(PlotControl);
+ }
+ else if (Inputs.PanRightWheelDirection.HasValue && Inputs.PanRightWheelDirection == direction)
+ {
+ Actions.PanRight(PlotControl);
+ }
+ else if (Inputs.PanLeftWheelDirection.HasValue && Inputs.PanLeftWheelDirection == direction)
+ {
+ Actions.PanLeft(PlotControl);
+ }
+ else
+ {
+ return;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Key.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Key.cs
new file mode 100644
index 000000000..0b0343d07
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/Key.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public enum Key
+ {
+ Unknown,
+ Ctrl,
+ Alt,
+ Shift
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/KeyboardState.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/KeyboardState.cs
new file mode 100644
index 000000000..852d13085
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/KeyboardState.cs
@@ -0,0 +1,29 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class KeyboardState
+ {
+ private readonly HashSet _pressed = new();
+
+ public IReadOnlyCollection PressedKeys => _pressed.ToArray();
+
+ public void Down(Key key)
+ {
+ if (key == Key.Unknown)
+ {
+ return;
+ }
+
+ _pressed.Add(key);
+ }
+
+ public void Up(Key key)
+ {
+ if (key == Key.Unknown)
+ {
+ return;
+ }
+
+ _pressed.Remove(key);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/LockedAxes.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/LockedAxes.cs
new file mode 100644
index 000000000..e704c851a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/LockedAxes.cs
@@ -0,0 +1,14 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public struct LockedAxes
+ {
+ public bool X = false;
+ public bool Y = false;
+
+ public LockedAxes(bool lockedX, bool lockedY)
+ {
+ X = lockedX;
+ Y = lockedY;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseButton.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseButton.cs
new file mode 100644
index 000000000..c698224c6
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseButton.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public enum MouseButton
+ {
+ Unknown,
+ Left,
+ Right,
+ Middle,
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseDrag.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseDrag.cs
new file mode 100644
index 000000000..e94d2c97d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseDrag.cs
@@ -0,0 +1,16 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public struct MouseDrag
+ {
+ public readonly MultiAxisLimitManager InitialLimits;
+ public readonly Pixel From;
+ public readonly Pixel To;
+
+ public MouseDrag(MultiAxisLimitManager limits, Pixel from, Pixel to)
+ {
+ InitialLimits = limits;
+ From = from;
+ To = to;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseState.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseState.cs
new file mode 100644
index 000000000..ac5238b09
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseState.cs
@@ -0,0 +1,66 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class MouseState
+ {
+ ///
+ /// A click-drag must exceed this number of pixels before it is considered a drag.
+ ///
+ public float MinimumDragDistance = 5;
+
+ private readonly HashSet _pressed = new();
+
+ public Pixel LastPosition = new(float.NaN, float.NaN);
+
+ public void Down(MouseButton button) => _pressed.Add(button);
+
+ public bool IsDown(MouseButton button) => _pressed.Contains(button);
+
+ public IReadOnlyCollection PressedButtons => _pressed.ToArray();
+
+ public Pixel MouseDownPosition { get; private set; }
+
+ public MultiAxisLimitManager MouseDownAxisLimits = new();
+
+ public void Up(MouseButton button)
+ {
+ ForgetMouseDown();
+ _pressed.Remove(button);
+ }
+
+ public void Down(Pixel position, MouseButton button, MultiAxisLimitManager limits)
+ {
+ RememberMouseDown(position, limits);
+ Down(button);
+ }
+
+ private void RememberMouseDown(Pixel position, MultiAxisLimitManager limits)
+ {
+ MouseDownPosition = position;
+ MouseDownAxisLimits.Remember(limits);
+ }
+
+ private void ForgetMouseDown()
+ {
+ MouseDownPosition = Pixel.NaN;
+ }
+
+ public bool IsDragging(Pixel position)
+ {
+ if (float.IsNaN(MouseDownPosition.X))
+ {
+ return false;
+ }
+
+ Pixel pixelDifference = MouseDownPosition - position;
+ PixelSize ps = new(pixelDifference.X, pixelDifference.Y);
+
+ float dragDistance = ps.Diagonal;
+ if (dragDistance > MinimumDragDistance)
+ {
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseWheelDirection.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseWheelDirection.cs
new file mode 100644
index 000000000..07a2558d0
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MouseWheelDirection.cs
@@ -0,0 +1,11 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public enum MouseWheelDirection
+ {
+ Unknown,
+ Up,
+ Down,
+ Left,
+ Right,
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MultiAxisLimitManager.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MultiAxisLimitManager.cs
new file mode 100644
index 000000000..b1c474209
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/MultiAxisLimitManager.cs
@@ -0,0 +1,70 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This object remembers limits of all axes so it can restore them later.
+ /// It is used for mouse interaction to translate pixel distances
+ /// to coordinate distances based on previous renders.
+ ///
+ public class MultiAxisLimitManager
+ {
+ private readonly Dictionary _rememberedLimits = new();
+
+ public MultiAxisLimitManager()
+ {
+
+ }
+
+ public MultiAxisLimitManager(Plot plot)
+ {
+ Remember(plot.Axes.GetAxes());
+ }
+
+ public MultiAxisLimitManager(IPlotControl control)
+ {
+ Remember(control.Plot.Axes.GetAxes());
+ }
+
+ ///
+ /// Remember the current limits of the given axis
+ ///
+ private void Remember(IAxis axis)
+ {
+ _rememberedLimits[axis] = new(axis.Min, axis.Max);
+ }
+
+ ///
+ /// Remember the current limits of all given axes
+ ///
+ private void Remember(IEnumerable axes)
+ {
+ foreach (IAxis axis in axes)
+ {
+ Remember(axis);
+ }
+ }
+
+ ///
+ /// Clear memory of previous axes and remember all the given axis limits
+ ///
+ public void Remember(MultiAxisLimitManager newMultiLimits)
+ {
+ foreach (IAxis axis in newMultiLimits._rememberedLimits.Keys)
+ {
+ CoordinateRange range = newMultiLimits._rememberedLimits[axis];
+ _rememberedLimits[axis] = new(range.Min, range.Max);
+ }
+ }
+
+ ///
+ /// Update all axis limits of the given plot with those previously remembered
+ ///
+ public void Apply(Plot plot)
+ {
+ foreach (IAxis axis in plot.Axes.GetAxes())
+ {
+ axis.Range.Min = _rememberedLimits[axis].Min;
+ axis.Range.Max = _rememberedLimits[axis].Max;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/PlotActions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/PlotActions.cs
new file mode 100644
index 000000000..e7992c1ed
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/PlotActions.cs
@@ -0,0 +1,66 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This object holds actions which manipulate the plot.
+ /// To customize plot manipulation behavior, replace these delegates with custom ones.
+ ///
+ public class PlotActions
+ {
+ public Action ZoomIn = delegate { };
+ public Action ZoomOut = delegate { };
+ public Action PanUp = delegate { };
+ public Action PanDown = delegate { };
+ public Action PanLeft = delegate { };
+ public Action PanRight = delegate { };
+ public Action DragPan = delegate { };
+ public Action DragZoom = delegate { };
+ public Action DragZoomRectangle = delegate { };
+ public Action ZoomRectangleClear = delegate { };
+ public Action ZoomRectangleApply = delegate { };
+ public Action ToggleBenchmark = delegate { };
+ public Action AutoScale = delegate { };
+ public Action ShowContextMenu = delegate { };
+
+ public static PlotActions Standard()
+ {
+ return new PlotActions()
+ {
+ ZoomIn = StandardActions.ZoomIn,
+ ZoomOut = StandardActions.ZoomOut,
+ PanUp = StandardActions.PanUp,
+ PanDown = StandardActions.PanDown,
+ PanLeft = StandardActions.PanLeft,
+ PanRight = StandardActions.PanRight,
+ DragPan = StandardActions.DragPan,
+ DragZoom = StandardActions.DragZoom,
+ DragZoomRectangle = StandardActions.DragZoomRectangle,
+ ZoomRectangleClear = StandardActions.ZoomRectangleClear,
+ ZoomRectangleApply = StandardActions.ZoomRectangleApply,
+ ToggleBenchmark = StandardActions.ToggleBenchmark,
+ AutoScale = StandardActions.AutoScale,
+ ShowContextMenu = StandardActions.ShowContextMenu,
+ };
+ }
+
+ public static PlotActions NonInteractive()
+ {
+ return new PlotActions()
+ {
+ ZoomIn = delegate { },
+ ZoomOut = delegate { },
+ PanUp = delegate { },
+ PanDown = delegate { },
+ PanLeft = delegate { },
+ PanRight = delegate { },
+ DragPan = delegate { },
+ DragZoom = delegate { },
+ DragZoomRectangle = delegate { },
+ ZoomRectangleClear = delegate { },
+ ZoomRectangleApply = delegate { },
+ ToggleBenchmark = delegate { },
+ AutoScale = delegate { },
+ ShowContextMenu = delegate { },
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardActions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardActions.cs
new file mode 100644
index 000000000..35e26f619
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardActions.cs
@@ -0,0 +1,139 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class StandardActions
+ {
+ public static void ZoomIn(IPlotControl control, Pixel pixel, LockedAxes locked)
+ {
+ var zoomInFraction = 1.15;
+
+ var xFrac = locked.X ? 1 : zoomInFraction;
+ var yFrac = locked.Y ? 1 : zoomInFraction;
+
+ control.Plot.MouseZoom(xFrac, yFrac, pixel);
+ control.Refresh();
+ }
+
+ public static void ZoomOut(IPlotControl control, Pixel pixel, LockedAxes locked)
+ {
+ var zoomOutFraction = 0.85;
+
+ var xFrac = locked.X ? 1 : zoomOutFraction;
+ var yFrac = locked.Y ? 1 : zoomOutFraction;
+
+ control.Plot.MouseZoom(xFrac, yFrac, pixel);
+ control.Refresh();
+ }
+
+ public static void PanUp(IPlotControl control)
+ {
+ var panFraction = 0.1;
+ AxisLimits limits = control.Plot.Axes.GetLimits();
+ var deltaY = limits.Rect.Height * panFraction;
+ control.Plot.Axes.SetLimits(limits.WithPan(0, deltaY));
+ control.Refresh();
+ }
+
+ public static void PanDown(IPlotControl control)
+ {
+ var panFraction = 0.1;
+ AxisLimits limits = control.Plot.Axes.GetLimits();
+ var deltaY = limits.Rect.Height * panFraction;
+ control.Plot.Axes.SetLimits(limits.WithPan(0, -deltaY));
+ control.Refresh();
+ }
+
+ public static void PanLeft(IPlotControl control)
+ {
+ var panFraction = 0.1;
+ AxisLimits limits = control.Plot.Axes.GetLimits();
+ var deltaX = limits.Rect.Width * panFraction;
+ control.Plot.Axes.SetLimits(limits.WithPan(-deltaX, 0));
+ control.Refresh();
+ }
+
+ public static void PanRight(IPlotControl control)
+ {
+ var panFraction = 0.1;
+ AxisLimits limits = control.Plot.Axes.GetLimits();
+ var deltaX = limits.Rect.Width * panFraction;
+ control.Plot.Axes.SetLimits(limits.WithPan(deltaX, 0));
+ control.Refresh();
+ }
+
+ public static void DragPan(IPlotControl control, MouseDrag drag, LockedAxes locked)
+ {
+ Pixel to2 = new(
+ x: locked.X ? drag.From.X : drag.To.X,
+ y: locked.Y ? drag.From.Y : drag.To.Y);
+
+ control.Plot.MousePan(drag.InitialLimits, drag.From, to2);
+ control.Refresh();
+ }
+
+ public static void DragZoom(IPlotControl control, MouseDrag drag, LockedAxes locked)
+ {
+ Pixel to2 = new(
+ x: locked.X ? drag.From.X : drag.To.X,
+ y: locked.Y ? drag.From.Y : drag.To.Y);
+
+ control.Plot.MouseZoom(drag.InitialLimits, drag.From, to2);
+ control.Refresh();
+ }
+
+ public static void ZoomRectangleClear(IPlotControl control)
+ {
+ control.Plot.ZoomRectangle.IsVisible = false;
+ control.Refresh();
+ }
+
+ public static void ZoomRectangleApply(IPlotControl control)
+ {
+ Pixel px1 = control.Plot.ZoomRectangle.MouseDown;
+ Pixel px2 = control.Plot.ZoomRectangle.MouseUp;
+ PixelRect dataRect = control.Plot.RenderManager.LastRender.DataRect;
+
+ foreach (IXAxis xAxis in control.Plot.Axes.XAxes)
+ {
+ double x1 = xAxis.GetCoordinate(px1.X, dataRect);
+ double x2 = xAxis.GetCoordinate(px2.X, dataRect);
+ var xMin = Math.Min(x1, x2);
+ var xMax = Math.Max(x1, x2);
+ xAxis.Range.Set(xMin, xMax);
+ }
+
+ foreach (IYAxis yAxis in control.Plot.Axes.YAxes)
+ {
+ double y1 = yAxis.GetCoordinate(px1.Y, dataRect);
+ double y2 = yAxis.GetCoordinate(px2.Y, dataRect);
+ var xMin = Math.Min(y1, y2);
+ var xMax = Math.Max(y1, y2);
+ yAxis.Range.Set(xMin, xMax);
+ }
+
+ control.Refresh();
+ }
+
+ public static void DragZoomRectangle(IPlotControl control, MouseDrag drag, LockedAxes locked)
+ {
+ control.Plot.MouseZoomRectangle(drag.From, drag.To, vSpan: locked.Y, hSpan: locked.X);
+ control.Refresh();
+ }
+
+ public static void ToggleBenchmark(IPlotControl control)
+ {
+ control.Plot.Benchmark.IsVisible = !control.Plot.Benchmark.IsVisible;
+ control.Refresh();
+ }
+
+ public static void AutoScale(IPlotControl control)
+ {
+ control.Plot.Axes.AutoScale();
+ control.Refresh();
+ }
+
+ public static void ShowContextMenu(IPlotControl control, Pixel position)
+ {
+ control.ShowContextMenu(position);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardZoomRectangle.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardZoomRectangle.cs
new file mode 100644
index 000000000..d2683c361
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Control/StandardZoomRectangle.cs
@@ -0,0 +1,74 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Logic for drawing the shaded region on the plot when the user middle-click-drags to zoom
+ ///
+ public class StandardZoomRectangle : IZoomRectangle
+ {
+ public bool IsVisible { get; set; } = false;
+
+ public Color FillColor = new Color(255, 0, 0).WithAlpha(100);
+
+ public LineStyle LineStyle { get; } = new() { Color = new Color(255, 0, 0).WithAlpha(200) };
+
+ public Pixel MouseDown { get; private set; }
+ public Pixel MouseUp { get; private set; }
+ public bool HorizontalSpan { get; set; } = false;
+ public bool VerticalSpan { get; set; } = false;
+
+ public StandardZoomRectangle()
+ {
+ }
+
+ public void Update(Pixel mouseDown, Pixel mouseUp)
+ {
+ MouseDown = mouseDown;
+ MouseUp = mouseUp;
+ IsVisible = true;
+ }
+
+ public void Clear()
+ {
+ IsVisible = false;
+ }
+
+ public void Render(RenderPack rp)
+ {
+ var canvas = rp.Canvas;
+ PixelRect dataRect = rp.DataRect;
+
+ SKRect rect = new(MouseDown.X, MouseDown.Y, MouseUp.X, MouseUp.Y);
+
+ canvas.Save();
+ canvas.ClipRect(dataRect.ToSkRect());
+
+ if (HorizontalSpan)
+ {
+ rect.Left = dataRect.Left;
+ rect.Right = dataRect.Right;
+ }
+
+ if (VerticalSpan)
+ {
+ rect.Bottom = dataRect.Bottom;
+ rect.Top = dataRect.Top;
+ }
+
+ using SKPaint paint = new()
+ {
+ IsAntialias = true
+ };
+
+ paint.Color = FillColor.ToSkColor();
+ paint.IsStroke = false;
+ canvas.DrawRect(rect, paint);
+
+ paint.Color = LineStyle.Color.ToSkColor();
+ paint.StrokeWidth = LineStyle.Width;
+ paint.IsStroke = true;
+ canvas.DrawRect(rect, paint);
+
+ canvas.Restore();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Data/SampleData.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Data/SampleData.cs
new file mode 100644
index 000000000..7c186aec1
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Data/SampleData.cs
@@ -0,0 +1,131 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Sample data used for testing
+ ///
+ public static class SampleData
+ {
+ ///
+ /// The first 100 prime numbers
+ ///
+ public static readonly double[] FirstHundredPrimes =
+ {
+ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
+ 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167,
+ 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263,
+ 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367,
+ 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
+ 467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
+ };
+
+ ///
+ /// The Mona Lisa represented as as a 2D array (65 x 100)
+ /// of grayscale values from 0 (dark) to 255 (bright)
+ ///
+ public static double[,] MonaLisa()
+ {
+ return new double[,] {
+ { 95, 113, 117, 118, 120, 126, 135, 125, 120, 117, 120, 122, 124, 125, 118, 114, 113, 109, 108, 111, 113, 114, 113, 116, 114, 111, 113, 114, 111, 108, 111, 114, 116, 118, 114, 112, 116, 120, 116, 113, 109, 111, 108, 105, 104, 104, 108, 108, 109, 108, 107, 107, 108, 111, 111, 111, 111, 117, 116, 116, 117, 114, 112, 107, 100 },
+ { 99, 117, 121, 122, 120, 125, 133, 125, 114, 117, 122, 125, 126, 129, 121, 117, 117, 111, 112, 112, 113, 114, 118, 122, 122, 118, 116, 116, 114, 112, 113, 116, 122, 124, 121, 120, 120, 121, 117, 116, 118, 117, 116, 117, 113, 111, 111, 113, 117, 118, 120, 116, 117, 116, 112, 116, 118, 118, 120, 118, 121, 124, 121, 122, 117},
+ { 100, 116, 126, 126, 124, 128, 125, 125, 124, 126, 130, 133, 126, 121, 121, 121, 116, 111, 114, 113, 112, 112, 118, 121, 121, 121, 120, 113, 113, 114, 116, 118, 120, 118, 117, 121, 122, 125, 125, 125, 128, 124, 125, 124, 116, 117, 117, 118, 121, 122, 122, 117, 121, 116, 116, 117, 126, 121, 120, 121, 124, 121, 114, 114, 107},
+ { 103, 121, 134, 134, 133, 133, 131, 130, 128, 128, 130, 130, 125, 125, 126, 118, 116, 116, 116, 116, 116, 117, 120, 122, 126, 129, 124, 121, 121, 121, 120, 120, 126, 125, 124, 125, 126, 125, 125, 130, 134, 134, 134, 134, 126, 129, 129, 125, 124, 125, 125, 125, 124, 124, 125, 131, 137, 131, 128, 129, 129, 128, 124, 114, 101},
+ { 107, 131, 137, 137, 143, 142, 137, 134, 135, 142, 141, 138, 137, 138, 134, 126, 124, 118, 120, 122, 121, 126, 126, 129, 129, 129, 124, 125, 128, 133, 131, 133, 134, 133, 131, 125, 125, 128, 126, 130, 133, 133, 138, 137, 137, 134, 133, 128, 129, 133, 135, 130, 129, 129, 134, 139, 143, 138, 130, 128, 128, 131, 125, 120, 107},
+ { 108, 133, 134, 141, 142, 139, 141, 144, 146, 152, 152, 150, 141, 135, 133, 129, 134, 129, 129, 130, 126, 129, 126, 135, 135, 131, 129, 130, 134, 137, 141, 144, 147, 151, 143, 137, 137, 133, 129, 130, 133, 138, 148, 144, 141, 137, 135, 131, 137, 139, 138, 133, 134, 134, 141, 142, 141, 138, 135, 133, 129, 129, 124, 120, 108},
+ { 113, 133, 138, 139, 138, 142, 139, 144, 154, 154, 151, 152, 151, 146, 144, 141, 138, 135, 135, 134, 133, 134, 135, 141, 137, 138, 138, 141, 141, 141, 147, 143, 148, 152, 155, 151, 146, 139, 138, 137, 141, 148, 155, 150, 146, 141, 138, 138, 143, 141, 141, 138, 141, 138, 141, 143, 138, 137, 137, 135, 130, 129, 128, 122, 111},
+ { 121, 134, 139, 141, 143, 148, 150, 155, 158, 154, 150, 151, 154, 154, 155, 148, 142, 142, 142, 138, 134, 138, 141, 139, 141, 147, 147, 146, 147, 150, 148, 143, 146, 146, 150, 150, 147, 143, 141, 144, 150, 151, 154, 151, 146, 141, 138, 137, 141, 139, 139, 141, 144, 139, 142, 146, 141, 142, 144, 138, 131, 129, 130, 128, 118},
+ { 126, 139, 147, 154, 158, 156, 155, 159, 156, 152, 151, 154, 152, 150, 148, 150, 150, 151, 143, 142, 138, 139, 139, 143, 150, 155, 154, 150, 142, 122, 103, 84, 79, 83, 95, 111, 126, 137, 141, 143, 147, 150, 148, 150, 147, 139, 138, 135, 141, 143, 139, 141, 144, 144, 143, 150, 143, 146, 151, 142, 134, 128, 130, 126, 124},
+ { 128, 141, 152, 160, 168, 158, 151, 155, 158, 155, 155, 154, 150, 151, 154, 158, 158, 155, 150, 143, 143, 142, 143, 148, 158, 154, 143, 105, 65, 54, 37, 28, 27, 32, 36, 44, 56, 77, 112, 137, 148, 152, 155, 152, 150, 141, 141, 138, 139, 144, 144, 146, 148, 146, 148, 152, 148, 151, 155, 148, 139, 131, 131, 130, 122},
+ { 126, 147, 151, 158, 160, 151, 152, 160, 163, 159, 159, 156, 155, 156, 160, 164, 161, 156, 156, 154, 155, 150, 152, 158, 155, 133, 75, 37, 45, 67, 37, 24, 19, 18, 19, 23, 36, 43, 40, 82, 138, 152, 158, 155, 148, 143, 144, 144, 144, 151, 152, 156, 156, 148, 150, 152, 151, 152, 155, 148, 143, 138, 137, 133, 125},
+ { 125, 144, 151, 155, 159, 160, 161, 169, 172, 164, 163, 163, 163, 164, 167, 164, 159, 152, 155, 159, 158, 158, 163, 164, 138, 75, 45, 52, 67, 73, 45, 37, 27, 23, 22, 16, 14, 23, 27, 23, 71, 141, 158, 161, 160, 155, 148, 146, 148, 158, 159, 163, 164, 156, 155, 155, 152, 151, 151, 150, 144, 146, 139, 135, 122},
+ { 121, 150, 168, 169, 169, 168, 172, 171, 173, 172, 172, 164, 167, 169, 169, 169, 164, 156, 156, 161, 161, 165, 169, 161, 87, 41, 56, 78, 103, 96, 70, 54, 35, 26, 26, 19, 15, 14, 15, 19, 22, 83, 152, 167, 165, 158, 148, 151, 151, 156, 161, 161, 161, 161, 165, 163, 158, 156, 151, 150, 143, 147, 139, 135, 128},
+ { 118, 151, 173, 180, 177, 173, 182, 175, 173, 172, 167, 165, 167, 173, 176, 172, 165, 161, 159, 164, 168, 177, 175, 131, 56, 83, 128, 159, 172, 167, 146, 124, 97, 58, 36, 27, 18, 16, 15, 16, 15, 26, 112, 163, 167, 169, 164, 161, 158, 161, 164, 164, 165, 167, 172, 164, 160, 159, 151, 151, 147, 144, 139, 137, 130},
+ { 118, 147, 165, 177, 176, 176, 181, 177, 175, 175, 172, 171, 175, 178, 176, 173, 167, 165, 164, 171, 181, 182, 159, 80, 82, 143, 186, 205, 207, 205, 190, 169, 142, 101, 70, 44, 23, 18, 14, 15, 18, 16, 48, 146, 173, 175, 171, 171, 167, 168, 169, 171, 172, 167, 167, 165, 161, 160, 156, 154, 148, 148, 142, 139, 129},
+ { 133, 154, 167, 168, 168, 180, 182, 188, 186, 185, 180, 180, 176, 181, 178, 175, 176, 175, 169, 177, 185, 177, 112, 50, 118, 186, 214, 216, 218, 215, 208, 192, 167, 129, 88, 57, 35, 22, 14, 14, 18, 18, 22, 105, 177, 173, 172, 169, 175, 175, 175, 176, 173, 168, 171, 176, 173, 171, 167, 158, 152, 150, 142, 143, 138},
+ { 142, 164, 180, 173, 173, 181, 190, 199, 197, 194, 188, 186, 185, 184, 181, 180, 186, 180, 173, 188, 198, 167, 65, 50, 135, 193, 214, 212, 214, 214, 208, 195, 173, 137, 96, 67, 44, 26, 23, 15, 13, 14, 14, 54, 161, 168, 164, 171, 172, 172, 177, 178, 175, 168, 172, 177, 181, 178, 171, 163, 158, 150, 143, 148, 144},
+ { 139, 164, 182, 178, 168, 171, 193, 199, 201, 202, 199, 201, 194, 185, 178, 181, 185, 176, 171, 188, 189, 130, 53, 60, 141, 189, 203, 202, 203, 206, 201, 186, 159, 135, 111, 86, 61, 37, 22, 15, 14, 10, 10, 27, 125, 143, 152, 159, 151, 158, 168, 164, 168, 171, 171, 172, 176, 180, 173, 168, 163, 152, 147, 152, 144},
+ { 118, 144, 163, 161, 144, 150, 182, 194, 201, 197, 185, 197, 197, 192, 181, 182, 189, 177, 181, 192, 158, 87, 39, 78, 148, 188, 199, 203, 203, 202, 201, 186, 163, 147, 133, 114, 94, 60, 26, 19, 15, 11, 10, 14, 78, 113, 130, 131, 131, 150, 158, 155, 154, 165, 168, 175, 173, 175, 172, 165, 163, 155, 144, 147, 143},
+ { 94, 114, 117, 131, 122, 126, 161, 177, 178, 161, 156, 169, 193, 195, 194, 192, 195, 192, 198, 192, 131, 65, 32, 92, 160, 186, 194, 203, 206, 203, 197, 182, 172, 163, 147, 133, 108, 65, 28, 16, 11, 13, 10, 10, 58, 94, 101, 101, 112, 139, 141, 143, 137, 163, 173, 178, 175, 171, 171, 168, 163, 151, 134, 139, 137},
+ { 79, 94, 87, 105, 117, 114, 128, 141, 141, 139, 130, 133, 150, 163, 190, 199, 198, 198, 203, 184, 111, 53, 27, 90, 156, 165, 167, 190, 199, 188, 146, 129, 134, 138, 129, 112, 91, 56, 22, 13, 9, 11, 13, 10, 45, 75, 82, 99, 111, 114, 118, 126, 117, 148, 168, 175, 171, 172, 180, 177, 155, 138, 121, 121, 101},
+ { 49, 73, 77, 95, 111, 112, 121, 116, 109, 113, 105, 108, 108, 120, 139, 185, 193, 198, 195, 158, 90, 56, 30, 65, 101, 104, 100, 144, 178, 133, 73, 86, 99, 82, 66, 61, 65, 53, 23, 15, 10, 9, 13, 13, 33, 60, 70, 80, 99, 101, 108, 113, 105, 126, 156, 173, 176, 175, 186, 181, 159, 143, 130, 112, 96},
+ { 40, 69, 82, 94, 100, 104, 109, 100, 96, 97, 87, 87, 99, 118, 114, 176, 193, 186, 181, 141, 75, 52, 32, 50, 65, 79, 56, 113, 172, 100, 75, 118, 78, 50, 49, 61, 91, 70, 33, 22, 15, 7, 11, 11, 26, 60, 61, 64, 82, 91, 97, 80, 82, 111, 147, 175, 176, 169, 175, 163, 147, 135, 124, 112, 116},
+ { 41, 71, 90, 99, 97, 107, 97, 95, 97, 95, 74, 82, 92, 104, 111, 163, 148, 114, 133, 131, 67, 47, 26, 90, 125, 131, 104, 143, 180, 105, 109, 154, 133, 105, 112, 143, 131, 82, 32, 16, 14, 10, 11, 13, 22, 53, 57, 61, 71, 78, 77, 73, 77, 94, 141, 176, 177, 172, 168, 155, 141, 131, 111, 109, 111},
+ { 44, 71, 84, 97, 94, 99, 94, 87, 88, 83, 71, 77, 77, 80, 80, 108, 97, 86, 79, 99, 65, 39, 22, 117, 173, 169, 164, 175, 178, 125, 137, 173, 173, 172, 172, 160, 126, 73, 24, 10, 10, 9, 10, 15, 16, 43, 52, 62, 77, 82, 74, 69, 73, 83, 122, 165, 167, 164, 154, 147, 143, 133, 112, 108, 100},
+ { 50, 64, 75, 78, 84, 88, 78, 75, 78, 67, 71, 71, 60, 65, 57, 65, 71, 75, 54, 69, 60, 33, 19, 105, 173, 192, 192, 185, 184, 137, 150, 190, 199, 197, 181, 143, 105, 58, 20, 10, 10, 10, 10, 14, 15, 45, 64, 66, 74, 74, 69, 62, 62, 67, 99, 143, 154, 154, 147, 143, 143, 129, 118, 112, 87},
+ { 50, 43, 57, 64, 64, 69, 66, 70, 82, 70, 69, 62, 53, 53, 53, 56, 58, 57, 44, 48, 45, 40, 26, 86, 176, 192, 186, 186, 184, 134, 141, 178, 189, 185, 163, 120, 84, 45, 18, 13, 11, 11, 9, 13, 18, 47, 71, 86, 99, 97, 96, 96, 96, 100, 105, 122, 134, 134, 129, 121, 113, 107, 107, 99, 75},
+ { 39, 33, 47, 61, 58, 61, 64, 69, 82, 79, 74, 66, 56, 54, 58, 53, 49, 41, 31, 30, 33, 39, 23, 66, 156, 184, 173, 178, 172, 121, 126, 175, 181, 167, 137, 100, 70, 37, 16, 15, 13, 11, 7, 10, 16, 28, 39, 49, 65, 73, 77, 79, 83, 96, 105, 116, 120, 114, 99, 91, 73, 75, 92, 73, 49},
+ { 31, 31, 40, 58, 61, 56, 62, 60, 61, 67, 75, 71, 64, 60, 58, 53, 50, 40, 28, 24, 27, 32, 19, 43, 121, 159, 168, 146, 103, 58, 86, 171, 171, 144, 114, 84, 58, 35, 19, 13, 10, 9, 7, 11, 15, 19, 27, 35, 40, 45, 52, 50, 50, 54, 67, 80, 77, 75, 69, 71, 53, 45, 44, 35, 28},
+ { 24, 28, 35, 52, 60, 57, 61, 57, 58, 54, 66, 67, 57, 56, 57, 53, 48, 37, 33, 28, 24, 23, 19, 31, 97, 131, 171, 168, 82, 58, 97, 137, 135, 128, 104, 80, 60, 33, 19, 13, 10, 7, 11, 15, 16, 22, 30, 35, 41, 45, 47, 41, 43, 47, 49, 49, 50, 56, 60, 62, 52, 41, 40, 30, 27},
+ { 24, 31, 35, 52, 61, 57, 54, 54, 60, 54, 60, 57, 53, 53, 53, 49, 43, 36, 33, 31, 23, 30, 28, 23, 87, 126, 126, 142, 120, 86, 83, 90, 122, 126, 105, 80, 57, 32, 16, 13, 10, 7, 9, 11, 16, 26, 36, 40, 47, 48, 49, 43, 40, 40, 41, 45, 56, 65, 70, 61, 50, 36, 32, 28, 26},
+ { 27, 30, 41, 57, 60, 54, 53, 57, 62, 57, 52, 48, 47, 48, 43, 43, 41, 39, 40, 37, 31, 36, 24, 16, 58, 125, 154, 159, 131, 101, 88, 113, 129, 122, 97, 73, 49, 28, 18, 14, 13, 10, 7, 9, 15, 22, 37, 43, 47, 47, 47, 43, 41, 43, 47, 53, 64, 67, 62, 54, 40, 35, 33, 28, 22},
+ { 24, 28, 43, 49, 49, 48, 50, 52, 49, 47, 44, 45, 44, 44, 47, 47, 49, 50, 50, 44, 37, 31, 22, 18, 23, 75, 135, 160, 134, 113, 108, 108, 112, 100, 77, 60, 44, 28, 16, 15, 13, 9, 7, 9, 13, 24, 43, 44, 43, 47, 45, 44, 41, 41, 45, 48, 52, 47, 40, 43, 44, 45, 37, 28, 27},
+ { 23, 28, 33, 39, 45, 49, 53, 49, 43, 44, 45, 45, 48, 54, 57, 58, 60, 60, 62, 54, 45, 28, 24, 24, 16, 20, 78, 161, 193, 172, 129, 108, 94, 73, 56, 49, 36, 23, 18, 16, 11, 7, 7, 7, 13, 23, 45, 48, 44, 50, 54, 54, 44, 41, 47, 48, 48, 44, 44, 52, 50, 50, 39, 24, 23},
+ { 20, 28, 27, 28, 27, 41, 53, 50, 43, 44, 40, 43, 43, 49, 48, 52, 54, 57, 61, 57, 41, 33, 33, 33, 22, 10, 20, 91, 150, 138, 107, 78, 58, 49, 44, 37, 26, 19, 18, 16, 14, 11, 10, 9, 14, 22, 36, 49, 52, 58, 61, 54, 45, 49, 49, 54, 53, 47, 47, 52, 45, 41, 30, 22, 23},
+ { 22, 28, 36, 36, 28, 36, 50, 52, 49, 43, 36, 40, 43, 52, 52, 60, 67, 80, 87, 66, 37, 36, 26, 23, 15, 9, 7, 19, 52, 60, 52, 44, 39, 33, 28, 23, 27, 24, 19, 19, 16, 15, 11, 9, 13, 16, 27, 40, 40, 43, 48, 47, 43, 47, 45, 45, 45, 37, 37, 44, 43, 50, 43, 30, 22},
+ { 22, 27, 32, 22, 32, 33, 48, 54, 54, 54, 54, 58, 64, 71, 74, 84, 88, 95, 94, 75, 39, 27, 22, 24, 18, 9, 6, 6, 10, 35, 31, 26, 22, 20, 26, 33, 37, 37, 35, 23, 16, 11, 10, 10, 14, 13, 20, 33, 36, 41, 48, 48, 41, 39, 39, 40, 32, 28, 30, 35, 43, 40, 35, 35, 22},
+ { 22, 23, 22, 16, 33, 30, 40, 54, 58, 61, 66, 73, 75, 84, 88, 99, 103, 100, 91, 77, 45, 26, 26, 24, 20, 11, 10, 7, 13, 69, 74, 54, 37, 36, 44, 52, 60, 61, 49, 28, 19, 11, 10, 13, 22, 16, 26, 39, 43, 44, 52, 54, 47, 43, 41, 40, 31, 31, 39, 40, 40, 35, 24, 31, 27},
+ { 23, 24, 27, 22, 23, 33, 48, 53, 71, 78, 80, 84, 86, 92, 90, 94, 99, 95, 90, 73, 50, 28, 27, 24, 20, 13, 11, 9, 11, 80, 116, 94, 71, 62, 64, 70, 82, 83, 65, 39, 23, 15, 11, 13, 22, 18, 23, 37, 47, 61, 73, 62, 65, 60, 60, 61, 60, 62, 71, 77, 66, 44, 32, 37, 31},
+ { 26, 32, 39, 44, 48, 58, 61, 67, 77, 69, 70, 70, 64, 78, 84, 83, 87, 86, 79, 58, 43, 26, 24, 20, 16, 14, 14, 11, 14, 70, 128, 122, 105, 91, 91, 95, 105, 104, 86, 50, 31, 19, 15, 19, 27, 15, 14, 27, 36, 49, 54, 58, 70, 77, 79, 71, 86, 94, 91, 86, 66, 58, 39, 28, 30},
+ { 27, 44, 54, 62, 67, 78, 80, 84, 82, 67, 52, 50, 52, 40, 53, 62, 53, 57, 43, 37, 23, 15, 15, 14, 14, 14, 14, 19, 44, 91, 126, 135, 126, 118, 117, 121, 125, 122, 101, 64, 33, 27, 26, 27, 33, 13, 10, 11, 11, 19, 28, 27, 49, 50, 32, 60, 101, 107, 90, 74, 67, 62, 32, 16, 14},
+ { 28, 49, 60, 62, 64, 77, 71, 74, 77, 61, 52, 54, 64, 32, 22, 26, 24, 28, 18, 18, 15, 14, 15, 14, 13, 16, 31, 67, 113, 142, 148, 150, 141, 139, 142, 146, 143, 141, 121, 79, 41, 35, 41, 35, 33, 13, 10, 10, 13, 18, 24, 26, 30, 28, 26, 45, 91, 103, 79, 69, 69, 64, 32, 11, 15},
+ { 23, 40, 58, 54, 44, 56, 66, 73, 64, 48, 54, 57, 54, 30, 18, 15, 14, 24, 23, 11, 10, 15, 16, 18, 19, 50, 96, 126, 159, 176, 175, 169, 161, 163, 169, 171, 164, 154, 137, 94, 53, 40, 50, 43, 32, 15, 14, 13, 18, 30, 40, 53, 73, 82, 87, 95, 109, 97, 65, 62, 61, 53, 27, 15, 22},
+ { 27, 36, 43, 41, 35, 57, 69, 66, 60, 56, 66, 71, 54, 22, 23, 27, 9, 26, 22, 14, 14, 16, 16, 19, 48, 114, 152, 175, 188, 190, 192, 186, 182, 186, 190, 185, 175, 159, 133, 86, 49, 49, 62, 45, 27, 16, 18, 15, 15, 26, 41, 56, 90, 124, 121, 104, 94, 83, 75, 69, 58, 47, 37, 31, 23},
+ { 28, 44, 40, 37, 36, 64, 69, 67, 67, 75, 84, 71, 50, 24, 32, 35, 11, 23, 26, 18, 15, 19, 19, 37, 87, 158, 182, 195, 203, 203, 206, 199, 192, 194, 197, 190, 178, 160, 138, 91, 62, 53, 58, 39, 19, 15, 20, 19, 22, 20, 27, 32, 60, 104, 109, 108, 96, 94, 86, 77, 71, 79, 64, 41, 22},
+ { 26, 43, 47, 58, 49, 69, 78, 79, 75, 82, 77, 61, 49, 39, 37, 44, 26, 33, 32, 15, 14, 22, 36, 64, 125, 182, 195, 205, 214, 211, 205, 199, 197, 201, 203, 194, 184, 165, 137, 96, 67, 54, 56, 33, 14, 15, 22, 33, 31, 24, 22, 28, 49, 73, 86, 95, 96, 97, 86, 87, 90, 86, 60, 44, 24},
+ { 27, 47, 47, 64, 48, 61, 99, 97, 94, 95, 82, 70, 53, 48, 50, 52, 40, 33, 19, 10, 13, 37, 67, 91, 151, 194, 207, 211, 212, 210, 205, 202, 201, 207, 205, 194, 184, 167, 134, 83, 61, 53, 53, 28, 13, 19, 41, 62, 53, 44, 26, 19, 37, 52, 73, 88, 94, 96, 83, 96, 91, 87, 82, 67, 26},
+ { 32, 37, 40, 53, 37, 47, 74, 97, 114, 107, 94, 88, 64, 54, 61, 57, 32, 15, 11, 13, 18, 66, 103, 120, 175, 201, 208, 215, 215, 212, 207, 206, 203, 208, 205, 192, 178, 165, 133, 92, 74, 56, 50, 32, 35, 53, 69, 74, 65, 52, 33, 15, 16, 31, 49, 62, 78, 96, 101, 107, 117, 122, 121, 96, 50},
+ { 31, 44, 47, 45, 36, 47, 52, 47, 73, 103, 99, 87, 77, 61, 60, 43, 16, 13, 15, 13, 30, 94, 133, 163, 194, 206, 208, 212, 212, 215, 216, 214, 208, 208, 205, 198, 186, 167, 134, 92, 70, 52, 58, 71, 84, 92, 96, 95, 83, 65, 45, 20, 15, 10, 16, 27, 32, 50, 64, 60, 69, 79, 84, 71, 61},
+ { 37, 52, 60, 67, 60, 56, 52, 40, 48, 66, 91, 86, 90, 86, 57, 19, 11, 15, 16, 14, 48, 118, 163, 189, 202, 210, 210, 211, 212, 215, 222, 219, 215, 212, 211, 205, 186, 163, 128, 95, 78, 70, 78, 90, 108, 114, 99, 83, 62, 45, 28, 14, 10, 9, 7, 11, 24, 26, 24, 27, 40, 60, 75, 80, 66},
+ { 32, 50, 60, 66, 57, 57, 62, 56, 53, 64, 73, 67, 87, 101, 41, 11, 13, 16, 15, 18, 50, 116, 185, 205, 210, 207, 205, 205, 210, 220, 224, 227, 222, 216, 215, 210, 192, 164, 131, 104, 83, 84, 103, 100, 80, 57, 43, 33, 23, 18, 13, 10, 6, 7, 9, 6, 18, 26, 22, 19, 23, 52, 86, 109, 80},
+ { 35, 49, 49, 52, 57, 67, 77, 67, 71, 82, 87, 95, 96, 69, 20, 13, 14, 20, 16, 27, 53, 83, 152, 192, 207, 206, 194, 198, 211, 223, 228, 228, 225, 222, 219, 211, 194, 159, 125, 91, 80, 79, 60, 39, 31, 30, 23, 15, 11, 9, 6, 6, 6, 6, 6, 6, 7, 22, 23, 23, 22, 27, 41, 61, 48},
+ { 31, 50, 57, 73, 80, 92, 96, 83, 91, 103, 101, 88, 53, 23, 15, 13, 18, 24, 23, 37, 60, 75, 92, 111, 150, 169, 168, 197, 216, 219, 222, 222, 220, 218, 208, 198, 163, 116, 88, 67, 47, 33, 27, 24, 18, 13, 11, 10, 6, 6, 5, 5, 6, 6, 5, 7, 7, 18, 36, 36, 32, 27, 32, 28, 20},
+ { 26, 52, 69, 83, 95, 87, 79, 79, 83, 77, 70, 50, 19, 18, 15, 13, 22, 20, 35, 50, 64, 64, 71, 77, 84, 86, 103, 137, 168, 185, 194, 202, 206, 201, 185, 148, 100, 75, 66, 40, 28, 24, 20, 14, 10, 15, 15, 16, 10, 6, 5, 5, 6, 6, 6, 7, 9, 10, 35, 45, 50, 37, 31, 31, 14},
+ { 23, 52, 71, 78, 90, 86, 75, 80, 86, 79, 65, 30, 16, 19, 15, 14, 18, 20, 44, 60, 61, 56, 52, 64, 65, 73, 78, 83, 88, 97, 105, 112, 121, 124, 108, 84, 67, 53, 48, 28, 19, 13, 13, 23, 31, 35, 24, 20, 13, 5, 5, 5, 6, 6, 5, 7, 7, 7, 20, 35, 44, 32, 27, 35, 19},
+ { 16, 39, 67, 74, 86, 94, 94, 95, 101, 103, 90, 30, 19, 16, 14, 13, 15, 23, 47, 49, 53, 41, 47, 53, 52, 69, 73, 70, 75, 78, 77, 75, 74, 78, 73, 64, 43, 41, 24, 11, 10, 10, 15, 32, 49, 32, 26, 18, 10, 6, 6, 6, 6, 5, 6, 5, 5, 6, 10, 18, 24, 22, 19, 31, 22},
+ { 14, 22, 45, 58, 70, 82, 88, 87, 84, 80, 67, 24, 16, 15, 14, 13, 14, 20, 44, 39, 48, 32, 39, 33, 50, 65, 69, 66, 69, 66, 61, 57, 56, 61, 60, 43, 31, 19, 13, 13, 14, 19, 24, 35, 45, 28, 30, 22, 26, 27, 22, 22, 11, 7, 9, 5, 5, 6, 10, 28, 30, 27, 24, 18, 7},
+ { 13, 18, 36, 53, 60, 67, 70, 64, 64, 65, 49, 20, 13, 13, 11, 11, 13, 23, 36, 28, 30, 31, 32, 28, 44, 58, 64, 64, 60, 50, 45, 45, 52, 50, 37, 20, 13, 11, 11, 15, 19, 26, 27, 31, 28, 32, 39, 58, 60, 43, 39, 31, 22, 13, 10, 9, 7, 9, 11, 28, 48, 43, 32, 13, 5},
+ { 15, 19, 37, 54, 60, 61, 58, 60, 65, 58, 44, 18, 11, 9, 7, 9, 11, 22, 28, 27, 20, 31, 31, 26, 40, 43, 50, 49, 45, 35, 36, 47, 40, 32, 20, 10, 7, 7, 7, 13, 16, 23, 19, 19, 26, 36, 52, 64, 57, 41, 40, 33, 23, 10, 7, 10, 7, 7, 9, 15, 41, 48, 30, 9, 5},
+ { 18, 23, 57, 77, 86, 86, 80, 80, 82, 54, 31, 14, 11, 7, 7, 9, 13, 19, 22, 22, 16, 28, 23, 20, 32, 23, 31, 35, 33, 28, 39, 37, 33, 28, 15, 9, 6, 6, 7, 10, 14, 15, 10, 14, 32, 39, 56, 62, 57, 52, 44, 22, 11, 6, 7, 9, 10, 7, 7, 6, 11, 15, 15, 6, 5},
+ { 19, 37, 79, 92, 97, 96, 94, 99, 96, 69, 33, 18, 11, 7, 9, 10, 13, 14, 15, 16, 16, 24, 18, 16, 19, 19, 20, 22, 22, 35, 36, 36, 27, 11, 9, 7, 6, 7, 9, 9, 14, 14, 10, 20, 37, 44, 60, 61, 58, 41, 20, 6, 6, 5, 6, 6, 13, 11, 9, 7, 20, 32, 30, 10, 5},
+ { 20, 61, 88, 96, 101, 103, 105, 105, 99, 50, 19, 15, 10, 9, 10, 9, 11, 13, 13, 15, 16, 22, 13, 15, 16, 20, 15, 13, 22, 35, 37, 28, 15, 11, 9, 5, 6, 9, 7, 7, 10, 10, 13, 30, 39, 43, 60, 52, 43, 19, 6, 5, 5, 6, 6, 6, 15, 18, 10, 9, 19, 40, 43, 27, 7},
+ { 39, 70, 79, 87, 90, 91, 101, 94, 78, 28, 18, 14, 13, 11, 11, 11, 9, 11, 13, 11, 13, 19, 11, 13, 14, 15, 10, 11, 24, 31, 27, 18, 16, 14, 7, 5, 6, 7, 6, 7, 10, 11, 20, 35, 40, 40, 49, 36, 14, 9, 6, 5, 5, 6, 5, 5, 13, 18, 11, 7, 14, 41, 44, 43, 23},
+ { 28, 41, 48, 58, 62, 65, 67, 58, 36, 18, 15, 15, 19, 22, 16, 11, 7, 9, 11, 9, 10, 16, 11, 10, 10, 13, 10, 16, 20, 23, 18, 18, 15, 11, 5, 3, 5, 6, 6, 7, 7, 11, 22, 37, 31, 27, 23, 14, 7, 10, 9, 6, 6, 6, 5, 5, 9, 13, 10, 6, 6, 19, 23, 20, 16},
+ { 20, 28, 39, 49, 56, 50, 41, 30, 19, 15, 11, 15, 22, 28, 23, 16, 11, 9, 9, 9, 9, 14, 10, 9, 9, 9, 10, 16, 19, 20, 18, 16, 14, 7, 6, 5, 5, 6, 6, 6, 6, 9, 20, 22, 18, 14, 10, 7, 6, 13, 9, 6, 6, 5, 5, 5, 6, 7, 6, 5, 3, 6, 9, 9, 10},
+ { 24, 36, 44, 50, 54, 44, 30, 19, 18, 15, 14, 20, 28, 32, 31, 20, 15, 13, 13, 10, 9, 13, 11, 10, 9, 7, 13, 15, 20, 18, 19, 14, 9, 9, 7, 6, 6, 5, 5, 5, 6, 9, 19, 18, 11, 7, 6, 6, 9, 11, 9, 6, 6, 6, 5, 3, 6, 6, 6, 6, 7, 13, 13, 11, 9},
+ { 24, 36, 41, 47, 40, 22, 16, 18, 19, 16, 16, 26, 35, 36, 37, 28, 18, 15, 14, 10, 10, 14, 13, 13, 9, 6, 11, 15, 20, 19, 18, 7, 7, 11, 11, 9, 7, 5, 5, 5, 6, 6, 18, 13, 5, 5, 6, 7, 13, 13, 7, 6, 5, 5, 3, 5, 6, 7, 6, 7, 13, 15, 20, 18, 11},
+ { 22, 28, 37, 30, 16, 14, 14, 19, 19, 24, 26, 33, 41, 44, 39, 26, 19, 16, 14, 11, 13, 14, 13, 13, 9, 9, 11, 20, 23, 14, 9, 6, 7, 10, 11, 9, 6, 5, 5, 5, 6, 6, 9, 5, 3, 3, 6, 10, 11, 9, 6, 5, 3, 3, 3, 5, 6, 6, 6, 6, 13, 14, 18, 15, 7},
+ { 22, 28, 32, 16, 14, 13, 19, 22, 30, 35, 30, 24, 28, 30, 32, 24, 26, 19, 14, 11, 13, 13, 9, 9, 9, 10, 16, 26, 16, 7, 6, 6, 6, 7, 7, 6, 5, 5, 5, 5, 6, 7, 5, 3, 3, 3, 7, 13, 14, 11, 9, 7, 3, 5, 3, 3, 6, 7, 6, 7, 13, 15, 19, 18, 7},
+ { 19, 27, 19, 16, 14, 18, 15, 15, 23, 23, 16, 16, 22, 23, 18, 14, 18, 18, 11, 9, 10, 10, 7, 7, 9, 14, 20, 15, 9, 6, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 6, 7, 5, 3, 3, 5, 9, 13, 16, 15, 18, 15, 7, 3, 3, 3, 6, 7, 9, 11, 14, 14, 18, 20, 7},
+ { 14, 18, 14, 16, 22, 20, 11, 14, 16, 19, 16, 20, 24, 19, 14, 10, 18, 15, 10, 7, 9, 9, 6, 6, 10, 13, 11, 9, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 7, 10, 13, 14, 22, 18, 11, 5, 3, 5, 3, 7, 11, 14, 14, 11, 14, 20, 9},
+ { 9, 10, 9, 14, 16, 13, 18, 24, 44, 52, 49, 44, 43, 40, 33, 14, 13, 15, 10, 10, 9, 11, 7, 6, 7, 7, 9, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 6, 9, 14, 11, 13, 14, 13, 7, 3, 3, 5, 3, 6, 10, 13, 11, 7, 9, 14, 10},
+ { 9, 10, 13, 14, 15, 14, 31, 41, 56, 67, 37, 41, 48, 52, 40, 19, 13, 11, 10, 13, 14, 16, 10, 10, 6, 6, 9, 7, 6, 6, 7, 6, 6, 6, 5, 6, 7, 7, 7, 6, 5, 3, 5, 6, 6, 7, 11, 13, 10, 9, 7, 7, 7, 5, 3, 3, 2, 5, 10, 9, 5, 3, 2, 5, 3},
+ { 11, 9, 11, 16, 16, 15, 33, 43, 52, 53, 74, 75, 56, 61, 50, 52, 39, 16, 22, 35, 37, 32, 16, 13, 9, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 9, 10, 7, 6, 5, 5, 9, 10, 9, 9, 7, 11, 13, 15, 11, 9, 9, 6, 3, 3, 2, 5, 10, 9, 5, 2, 2, 1, 0},
+ { 11, 9, 13, 16, 14, 19, 33, 52, 74, 87, 82, 50, 69, 65, 67, 77, 54, 84, 137, 165, 158, 133, 92, 52, 23, 10, 6, 6, 6, 7, 6, 6, 6, 7, 9, 9, 7, 7, 6, 6, 6, 6, 7, 6, 6, 7, 7, 10, 15, 18, 13, 6, 6, 3, 3, 2, 2, 5, 7, 10, 10, 3, 2, 1, 0},
+ { 9, 9, 13, 15, 14, 19, 30, 60, 77, 62, 56, 80, 56, 61, 64, 58, 96, 158, 194, 202, 192, 177, 156, 144, 113, 71, 39, 18, 9, 7, 6, 6, 6, 7, 7, 7, 5, 5, 5, 6, 6, 6, 6, 5, 6, 7, 9, 13, 16, 16, 10, 6, 5, 3, 2, 2, 2, 6, 6, 7, 9, 3, 1, 1, 0},
+ { 10, 10, 13, 15, 14, 15, 26, 54, 65, 50, 69, 56, 44, 50, 41, 56, 111, 171, 186, 194, 186, 184, 173, 167, 152, 143, 142, 114, 52, 10, 6, 6, 6, 7, 7, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 9, 10, 11, 11, 7, 6, 3, 3, 3, 3, 3, 5, 5, 3, 2, 2, 2, 1, 0},
+ { 13, 11, 11, 14, 13, 14, 23, 41, 37, 57, 56, 33, 37, 47, 39, 61, 107, 154, 165, 169, 167, 175, 176, 173, 165, 158, 158, 150, 120, 71, 37, 11, 6, 6, 6, 6, 5, 5, 5, 5, 6, 5, 6, 5, 5, 5, 6, 7, 10, 11, 7, 6, 5, 6, 5, 3, 3, 3, 3, 2, 2, 3, 2, 1, 0},
+ { 15, 15, 15, 14, 13, 14, 18, 26, 26, 49, 36, 35, 40, 48, 39, 50, 86, 126, 135, 139, 142, 158, 168, 169, 171, 165, 161, 158, 151, 148, 128, 86, 36, 11, 7, 6, 5, 6, 5, 6, 6, 5, 6, 5, 5, 5, 5, 5, 7, 11, 7, 6, 5, 5, 3, 5, 3, 3, 3, 3, 2, 3, 2, 1, 0},
+ { 15, 16, 18, 15, 16, 15, 15, 23, 24, 28, 23, 28, 27, 32, 28, 44, 54, 90, 96, 101, 116, 135, 150, 159, 165, 164, 164, 168, 165, 165, 164, 151, 104, 53, 19, 6, 6, 10, 11, 9, 10, 19, 37, 41, 30, 23, 20, 14, 7, 7, 7, 7, 6, 5, 6, 6, 3, 5, 3, 3, 2, 2, 2, 1, 0},
+ { 14, 15, 15, 15, 18, 18, 18, 18, 19, 19, 14, 15, 18, 23, 19, 30, 32, 49, 57, 71, 100, 121, 134, 144, 152, 150, 148, 159, 151, 126, 146, 175, 155, 84, 56, 45, 50, 77, 71, 56, 44, 45, 69, 73, 57, 53, 52, 41, 22, 7, 5, 9, 6, 6, 6, 6, 5, 5, 3, 3, 3, 2, 2, 1, 1},
+ { 13, 14, 13, 11, 13, 15, 14, 13, 14, 14, 10, 10, 19, 20, 18, 18, 26, 30, 44, 73, 95, 114, 124, 131, 138, 135, 134, 146, 143, 100, 70, 113, 143, 126, 87, 75, 77, 90, 90, 67, 70, 62, 58, 69, 67, 48, 40, 33, 31, 14, 6, 5, 5, 5, 6, 6, 5, 3, 3, 3, 3, 3, 2, 1, 1},
+ { 10, 11, 10, 9, 9, 11, 11, 11, 10, 10, 10, 11, 14, 15, 16, 26, 54, 88, 117, 125, 95, 97, 107, 114, 118, 122, 125, 118, 133, 142, 84, 41, 66, 97, 90, 75, 73, 61, 57, 58, 56, 60, 48, 54, 67, 62, 37, 32, 31, 20, 9, 5, 5, 3, 5, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1},
+ { 11, 13, 10, 9, 9, 10, 11, 11, 11, 10, 13, 14, 11, 13, 36, 90, 105, 105, 139, 146, 112, 83, 86, 97, 103, 116, 126, 105, 92, 129, 139, 91, 44, 48, 69, 80, 73, 65, 47, 52, 56, 57, 57, 40, 33, 44, 40, 33, 32, 27, 14, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3},
+ { 10, 10, 10, 9, 7, 9, 10, 11, 13, 13, 11, 14, 11, 15, 71, 91, 84, 111, 137, 144, 137, 97, 67, 75, 87, 95, 117, 137, 99, 77, 109, 121, 83, 47, 40, 56, 70, 53, 45, 37, 45, 49, 62, 48, 31, 26, 32, 24, 24, 26, 19, 5, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 6},
+ { 9, 9, 10, 9, 10, 11, 11, 11, 14, 13, 11, 13, 14, 19, 73, 74, 96, 118, 118, 150, 141, 116, 79, 61, 75, 78, 74, 109, 138, 96, 61, 86, 99, 73, 39, 32, 33, 35, 31, 32, 32, 23, 45, 44, 24, 27, 26, 20, 14, 14, 9, 3, 3, 2, 3, 2, 3, 3, 3, 5, 3, 5, 3, 3, 7},
+ { 10, 10, 11, 13, 13, 13, 11, 14, 15, 15, 14, 15, 15, 24, 73, 84, 104, 88, 111, 137, 138, 113, 87, 58, 53, 74, 64, 60, 101, 120, 70, 47, 75, 90, 69, 33, 33, 30, 19, 26, 24, 15, 24, 24, 19, 18, 24, 18, 11, 10, 7, 3, 3, 2, 2, 3, 3, 2, 3, 5, 5, 5, 5, 3, 6},
+ { 10, 10, 11, 13, 13, 13, 13, 14, 16, 15, 15, 15, 16, 30, 67, 82, 78, 80, 112, 129, 118, 88, 69, 53, 37, 39, 56, 49, 50, 71, 66, 48, 39, 61, 86, 54, 26, 23, 15, 19, 15, 11, 15, 14, 11, 13, 15, 14, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 5, 3, 5, 5, 5, 2, 3},
+ { 10, 10, 11, 11, 11, 11, 11, 13, 13, 13, 14, 16, 18, 24, 48, 64, 69, 91, 114, 113, 79, 58, 41, 32, 24, 20, 26, 32, 33, 31, 35, 43, 37, 24, 41, 48, 15, 11, 10, 14, 10, 9, 10, 9, 7, 7, 9, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1, 1},
+ { 9, 10, 11, 13, 11, 11, 11, 10, 11, 13, 14, 15, 18, 20, 28, 47, 64, 94, 109, 73, 39, 31, 31, 32, 31, 35, 35, 28, 30, 33, 30, 24, 22, 15, 10, 11, 6, 7, 7, 7, 6, 6, 7, 6, 6, 6, 6, 5, 5, 3, 3, 3, 3, 3, 5, 5, 3, 3, 3, 5, 6, 3, 3, 1, 1},
+ { 10, 10, 11, 13, 14, 14, 13, 13, 14, 14, 15, 14, 15, 18, 19, 26, 47, 84, 73, 40, 22, 30, 30, 28, 23, 26, 23, 22, 26, 28, 26, 16, 13, 11, 10, 9, 9, 9, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 3, 5, 5, 6, 5, 2, 2, 1, 1},
+ { 11, 13, 13, 14, 16, 15, 14, 13, 13, 15, 18, 16, 15, 15, 14, 16, 24, 61, 50, 26, 18, 26, 23, 19, 16, 15, 16, 18, 19, 16, 14, 11, 10, 10, 9, 9, 9, 9, 7, 7, 7, 6, 6, 6, 5, 5, 5, 3, 3, 5, 3, 3, 5, 3, 3, 5, 3, 7, 5, 6, 5, 3, 2, 1, 1},
+ { 11, 13, 14, 15, 16, 13, 11, 11, 11, 15, 18, 16, 15, 14, 14, 16, 20, 47, 40, 24, 20, 23, 19, 18, 18, 20, 23, 20, 18, 14, 13, 11, 11, 13, 11, 10, 9, 9, 7, 7, 6, 6, 6, 7, 9, 6, 5, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 5, 5, 5, 2, 3, 2, 1, 1},
+ { 9, 10, 13, 14, 14, 14, 14, 14, 11, 15, 18, 16, 15, 14, 15, 18, 18, 27, 26, 18, 15, 15, 15, 15, 16, 18, 16, 14, 13, 11, 10, 9, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 9, 11, 9, 6, 5, 3, 3, 3, 2, 3, 3, 5, 3, 3, 7, 5, 2, 2, 5, 3, 1, 0},
+ { 9, 10, 11, 13, 13, 14, 14, 13, 14, 15, 15, 14, 16, 15, 16, 16, 16, 18, 15, 11, 10, 11, 11, 9, 10, 9, 9, 7, 7, 7, 6, 6, 6, 6, 7, 7, 6, 5, 5, 6, 6, 5, 5, 6, 9, 7, 6, 5, 5, 3, 2, 2, 2, 2, 3, 3, 2, 9, 6, 3, 3, 11, 6, 2, 0},
+ { 9, 9, 10, 13, 14, 14, 15, 13, 13, 15, 15, 15, 15, 15, 16, 18, 15, 16, 14, 11, 9, 9, 13, 10, 9, 7, 7, 6, 5, 6, 7, 6, 6, 9, 10, 11, 7, 6, 6, 5, 5, 5, 5, 6, 7, 6, 5, 5, 5, 3, 2, 3, 2, 2, 3, 3, 2, 5, 5, 2, 3, 10, 6, 2, 0},
+ { 9, 9, 11, 13, 13, 14, 14, 13, 11, 13, 14, 13, 14, 14, 14, 14, 10, 11, 11, 10, 9, 10, 14, 15, 15, 9, 9, 6, 6, 6, 9, 7, 6, 7, 7, 7, 6, 5, 5, 6, 6, 6, 6, 7, 7, 5, 5, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, 7, 5, 1, 0},
+ { 10, 10, 11, 11, 11, 11, 13, 13, 13, 14, 15, 18, 16, 15, 14, 13, 11, 10, 9, 9, 10, 11, 11, 14, 15, 10, 9, 9, 9, 9, 11, 9, 6, 6, 5, 6, 6, 6, 5, 6, 7, 6, 6, 6, 5, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 3, 1, 3, 3, 0, 0},
+ { 10, 11, 11, 13, 13, 11, 11, 13, 14, 15, 16, 16, 16, 16, 14, 14, 11, 10, 10, 10, 11, 14, 14, 14, 18, 14, 11, 11, 13, 10, 10, 10, 7, 6, 6, 6, 7, 7, 7, 10, 10, 6, 6, 6, 3, 3, 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 3, 2, 1, 0},
+ { 11, 13, 13, 13, 13, 14, 11, 14, 14, 15, 16, 16, 16, 15, 13, 13, 11, 11, 11, 13, 14, 15, 14, 14, 19, 18, 15, 13, 13, 11, 13, 11, 11, 7, 7, 7, 10, 10, 10, 11, 13, 9, 9, 10, 6, 5, 5, 5, 5, 7, 5, 5, 5, 5, 3, 3, 2, 3, 3, 3, 2, 2, 3, 1, 0}
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/CacheScatterLimitsDecorator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/CacheScatterLimitsDecorator.cs
new file mode 100644
index 000000000..0f8c33039
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/CacheScatterLimitsDecorator.cs
@@ -0,0 +1,53 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class CacheScatterLimitsDecorator : IScatterSource
+ {
+ private readonly IScatterSource _source;
+
+ private AxisLimits? _axisLimits = null;
+ private CoordinateRange _limitsX = CoordinateRange.NotSet;
+ private CoordinateRange _limitsY = CoordinateRange.NotSet;
+
+ public CacheScatterLimitsDecorator(IScatterSource source)
+ {
+ _source = source;
+ }
+
+ public AxisLimits GetLimits()
+ {
+ _axisLimits ??= _source.GetLimits();
+
+ return _axisLimits.Value;
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ if (_limitsX == CoordinateRange.NotSet)
+ {
+ _limitsX = _source.GetLimitsX();
+ }
+
+ return _limitsX;
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ if (_limitsY == CoordinateRange.NotSet)
+ {
+ _limitsY = _source.GetLimitsY();
+ }
+
+ return _limitsY;
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ return _source.GetNearest(mouseLocation, renderInfo, maxDistance);
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ return _source.GetScatterPoints();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataLoggerSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataLoggerSource.cs
new file mode 100644
index 000000000..5de2bcb7b
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataLoggerSource.cs
@@ -0,0 +1,62 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class DataLoggerSource
+ {
+ // TODO: support unevenly spaced X positions
+
+ // TODO: render using SignalXY binary search strategy
+
+ public readonly List Coordinates = [];
+ public double Period = 1;
+
+ private double _yMin = double.PositiveInfinity;
+ private double _yMax = double.NegativeInfinity;
+
+ public int CountOnLastRender = -1;
+ public int CountTotal => Coordinates.Count;
+
+ public DataLoggerSource()
+ {
+ }
+
+ public void Add(double y)
+ {
+ var x = Coordinates.Count * Period;
+ Add(x, y);
+ }
+
+ public void Add(double x, double y)
+ {
+ Add(new Coordinates(x, y));
+ }
+
+ public void Add(Coordinates coordinates)
+ {
+ if (Coordinates.Any())
+ {
+ if (coordinates.X < Coordinates.Last().X)
+ {
+ throw new ArgumentException("new X values cannot be smaller than existing ones");
+ }
+ }
+
+ Coordinates.Add(coordinates);
+ _yMin = Math.Min(_yMin, coordinates.Y);
+ _yMax = Math.Max(_yMax, coordinates.Y);
+ }
+
+ public void Clear()
+ {
+ Coordinates.Clear();
+ _yMin = double.PositiveInfinity;
+ _yMax = double.NegativeInfinity;
+ }
+
+ public AxisLimits GetAxisLimits()
+ {
+ return Coordinates.Any()
+ ? new AxisLimits(Coordinates.First().X, Coordinates.Last().X, _yMin, _yMax)
+ : AxisLimits.NoLimits;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataStreamerSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataStreamerSource.cs
new file mode 100644
index 000000000..069696a77
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/DataStreamerSource.cs
@@ -0,0 +1,112 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class DataStreamerSource
+ {
+ ///
+ /// Fixed-length array used as a circular buffer to shift data in at the position defined by .
+ /// Values in this array should not be modified externally if is enabled.
+ ///
+ public double[] Data { get; }
+
+ ///
+ /// Index in where the next point will be added
+ ///
+ public int NextIndex { get; private set; } = 0;
+
+ ///
+ /// The fied number of visible data points to display
+ ///
+ public int Length => Data.Length;
+
+ ///
+ /// The total number of data points added
+ ///
+ public int CountTotal { get; private set; } = 0;
+
+ ///
+ /// Total of data points added the last time this plottable was rendered.
+ /// This can be compared with to determine if a new render is required.
+ ///
+ public int CountTotalOnLastRender { get; set; } = -1;
+
+ ///
+ /// Minimum value of all known data (not just the data in view)
+ ///
+ public double DataMin { get; private set; } = double.PositiveInfinity;
+
+ ///
+ /// Maximum value of all known data (not just the data in view)
+ ///
+ public double DataMax { get; private set; } = double.NegativeInfinity;
+
+ public double OffsetX { get; set; } = 0;
+
+ public double OffsetY { get; set; } = 0;
+
+ public double SamplePeriod { get; set; } = 1;
+
+ public DataStreamerSource(double[] data)
+ {
+ Data = data;
+ }
+
+ ///
+ /// Shift in a new Y value
+ ///
+ public void Add(double value)
+ {
+ Data[NextIndex] = value;
+ NextIndex += 1;
+
+ if (NextIndex >= Data.Length)
+ {
+ NextIndex = 0;
+ }
+
+ DataMin = Math.Min(value, DataMin);
+ DataMax = Math.Max(value, DataMax);
+
+ CountTotal += 1;
+ }
+
+ ///
+ /// Shift in a collection of new Y values
+ ///
+ public void AddRange(IEnumerable values)
+ {
+ foreach (var value in values)
+ {
+ Add(value);
+ }
+ }
+
+ ///
+ /// Clear the buffer by setting all Y points to the given value
+ ///
+ public void Clear(double value = 0)
+ {
+ for (var i = 0; i < Data.Length; i++)
+ {
+ Data[i] = 0;
+ }
+
+ DataMin = value;
+ DataMax = value;
+
+ NextIndex = 0;
+ CountTotal = 0;
+ }
+
+ public AxisLimits GetAxisLimits()
+ {
+ if (double.IsInfinity(DataMin) || double.IsInfinity(DataMax))
+ {
+ return AxisLimits.NoLimits;
+ }
+
+ var xMin = OffsetX;
+ var xMax = xMin + Data.Length * SamplePeriod;
+ return new AxisLimits(xMin, xMax, DataMin, DataMax);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/FunctionSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/FunctionSource.cs
new file mode 100644
index 000000000..f2bc7ef21
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/FunctionSource.cs
@@ -0,0 +1,16 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class FunctionSource(Func func) : IFunctionSource
+ {
+ public CoordinateRange RangeX { get; set; } = CoordinateRange.Infinity;
+ public Func Function { get; set; } = func;
+ public Func? GetRangeYFunc { get; set; } = null;
+
+ public double Get(double x) => Function(x);
+
+ public CoordinateRange GetRangeY(CoordinateRange xs)
+ {
+ return GetRangeYFunc is null ? CoordinateRange.NotSet : GetRangeYFunc(xs);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/OHLCSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/OHLCSource.cs
new file mode 100644
index 000000000..aa8d41484
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/OHLCSource.cs
@@ -0,0 +1,36 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class OhlcSource : IOhlcSource
+ {
+ private readonly List _prices;
+
+ public OhlcSource(List prices)
+ {
+ _prices = prices;
+ }
+
+ public List GetOhlCs()
+ {
+ return _prices;
+ }
+
+ public AxisLimits GetLimits()
+ {
+ return _prices.Any() ? new AxisLimits(GetLimitsX(), GetLimitsY()) : AxisLimits.NoLimits;
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ var dates = _prices.Select(x => x.DateTime);
+ return new CoordinateRange(dates.Min().ToNumber(), dates.Max().ToNumber());
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ var priceRanges = _prices.Select(x => x.GetPriceRange());
+ double min = priceRanges.Select(x => x.Min).Min();
+ double max = priceRanges.Select(x => x.Max).Max();
+ return new CoordinateRange(min, max);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesArray.cs
new file mode 100644
index 000000000..5b68f3303
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesArray.cs
@@ -0,0 +1,67 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This data source manages X/Y points as a collection of coordinates
+ ///
+ public class ScatterSourceCoordinatesArray : IScatterSource
+ {
+ private readonly Coordinates[] _coordinates;
+
+ public ScatterSourceCoordinatesArray(Coordinates[] coordinates)
+ {
+ _coordinates = coordinates;
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ // TODO: try to avoid calling this
+ return _coordinates;
+ }
+
+ public AxisLimits GetLimits()
+ {
+ ExpandingAxisLimits limits = new();
+ limits.Expand(_coordinates);
+ return limits.AxisLimits;
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ return GetLimits().Rect.XRange;
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ return GetLimits().Rect.YRange;
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ double maxDistanceSquared = maxDistance * maxDistance;
+ var closestDistanceSquared = double.PositiveInfinity;
+
+ var closestIndex = 0;
+ var closestX = double.PositiveInfinity;
+ var closestY = double.PositiveInfinity;
+
+ for (var i = 0; i < _coordinates.Length; i++)
+ {
+ double dX = (_coordinates[i].X - mouseLocation.X) * renderInfo.PxPerUnitX;
+ double dY = (_coordinates[i].Y - mouseLocation.Y) * renderInfo.PxPerUnitY;
+ var distanceSquared = dX * dX + dY * dY;
+
+ if (distanceSquared <= closestDistanceSquared)
+ {
+ closestDistanceSquared = distanceSquared;
+ closestX = _coordinates[i].X;
+ closestY = _coordinates[i].Y;
+ closestIndex = i;
+ }
+ }
+
+ return closestDistanceSquared <= maxDistanceSquared
+ ? new DataPoint(closestX, closestY, closestIndex)
+ : DataPoint.None;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesList.cs
new file mode 100644
index 000000000..3762e7807
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceCoordinatesList.cs
@@ -0,0 +1,67 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This data source manages X/Y points as a collection of coordinates
+ ///
+ public class ScatterSourceCoordinatesList : IScatterSource
+ {
+ private readonly List _coordinates;
+
+ public ScatterSourceCoordinatesList(List coordinates)
+ {
+ _coordinates = coordinates;
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ // TODO: try to avoid calling this
+ return _coordinates;
+ }
+
+ public AxisLimits GetLimits()
+ {
+ ExpandingAxisLimits limits = new();
+ limits.Expand(_coordinates);
+ return limits.AxisLimits;
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ return GetLimits().Rect.XRange;
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ return GetLimits().Rect.YRange;
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ double maxDistanceSquared = maxDistance * maxDistance;
+ var closestDistanceSquared = double.PositiveInfinity;
+
+ var closestIndex = 0;
+ var closestX = double.PositiveInfinity;
+ var closestY = double.PositiveInfinity;
+
+ for (var i = 0; i < _coordinates.Count; i++)
+ {
+ double dX = (_coordinates[i].X - mouseLocation.X) * renderInfo.PxPerUnitX;
+ double dY = (_coordinates[i].Y - mouseLocation.Y) * renderInfo.PxPerUnitY;
+ var distanceSquared = dX * dX + dY * dY;
+
+ if (distanceSquared <= closestDistanceSquared)
+ {
+ closestDistanceSquared = distanceSquared;
+ closestX = _coordinates[i].X;
+ closestY = _coordinates[i].Y;
+ closestIndex = i;
+ }
+ }
+
+ return closestDistanceSquared <= maxDistanceSquared
+ ? new DataPoint(closestX, closestY, closestIndex)
+ : DataPoint.None;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceDoubleArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceDoubleArray.cs
new file mode 100644
index 000000000..61e2453f5
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceDoubleArray.cs
@@ -0,0 +1,77 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This data source manages X/Y points as separate X and Y collections
+ ///
+ public class ScatterSourceDoubleArray : IScatterSource
+ {
+ private readonly double[] _xs;
+ private readonly double[] _ys;
+
+ public ScatterSourceDoubleArray(double[] xs, double[] ys)
+ {
+ _xs = xs;
+ _ys = ys;
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ // TODO: try to avoid calling this
+ return _xs.Zip(_ys, (x, y) => new Coordinates(x, y)).ToArray();
+ }
+
+ public AxisLimits GetLimits()
+ {
+ return new AxisLimits(GetLimitsX(), GetLimitsY());
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ if (!_xs.Any())
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ return new CoordinateRange(_xs.Min(), _xs.Max());
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ if (!_ys.Any())
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ return new CoordinateRange(_ys.Min(), _ys.Max());
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ double maxDistanceSquared = maxDistance * maxDistance;
+ var closestDistanceSquared = double.PositiveInfinity;
+
+ var closestIndex = 0;
+ var closestX = double.PositiveInfinity;
+ var closestY = double.PositiveInfinity;
+
+ for (var i = 0; i < _xs.Length; i++)
+ {
+ var dX = (_xs[i] - mouseLocation.X) * renderInfo.PxPerUnitX;
+ var dY = (_ys[i] - mouseLocation.Y) * renderInfo.PxPerUnitY;
+ var distanceSquared = dX * dX + dY * dY;
+
+ if (distanceSquared <= closestDistanceSquared)
+ {
+ closestDistanceSquared = distanceSquared;
+ closestX = _xs[i];
+ closestY = _ys[i];
+ closestIndex = i;
+ }
+ }
+
+ return closestDistanceSquared <= maxDistanceSquared
+ ? new DataPoint(closestX, closestY, closestIndex)
+ : DataPoint.None;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericArray.cs
new file mode 100644
index 000000000..40f504a9e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericArray.cs
@@ -0,0 +1,90 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This data source manages X/Y points as separate X and Y collections
+ ///
+ public class ScatterSourceGenericArray : IScatterSource
+ {
+ private readonly T1[] _xs;
+ private readonly T2[] _ys;
+
+ public ScatterSourceGenericArray(T1[] xs, T2[] ys)
+ {
+ if (xs.Length != ys.Length)
+ {
+ throw new ArgumentException($"{nameof(xs)} and {nameof(ys)} must have equal length");
+ }
+
+ _xs = xs;
+ _ys = ys;
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ // TODO: try to avoid calling this
+ return _xs.Zip(_ys, (x, y) => NumericConversion.GenericToCoordinates(ref x, ref y)).ToArray();
+ }
+
+ public AxisLimits GetLimits()
+ {
+ return new AxisLimits(GetLimitsX(), GetLimitsY());
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ if (_xs.Length == 0)
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ var values = NumericConversion.GenericToDoubleArray(_xs);
+
+ return new CoordinateRange(values.Min(), values.Max());
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ if (_ys.Length == 0)
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ var values = NumericConversion.GenericToDoubleArray(_ys);
+
+ return new CoordinateRange(values.Min(), values.Max());
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ double maxDistanceSquared = maxDistance * maxDistance;
+ var closestDistanceSquared = double.PositiveInfinity;
+
+ var closestIndex = 0;
+ var closestX = double.PositiveInfinity;
+ var closestY = double.PositiveInfinity;
+
+ for (var i = 0; i < _xs.Length; i++)
+ {
+ var xValue = _xs[i];
+ var yValue = _ys[i];
+ var xValueDouble = NumericConversion.GenericToDouble(ref xValue);
+ var yValueDouble = NumericConversion.GenericToDouble(ref yValue);
+ var dX = (xValueDouble - mouseLocation.X) * renderInfo.PxPerUnitX;
+ var dY = (yValueDouble - mouseLocation.Y) * renderInfo.PxPerUnitY;
+ var distanceSquared = dX * dX + dY * dY;
+
+ if (distanceSquared <= closestDistanceSquared)
+ {
+ closestDistanceSquared = distanceSquared;
+ closestX = xValueDouble;
+ closestY = yValueDouble;
+ closestIndex = i;
+ }
+ }
+
+ return closestDistanceSquared <= maxDistanceSquared
+ ? new DataPoint(closestX, closestY, closestIndex)
+ : DataPoint.None;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericList.cs
new file mode 100644
index 000000000..2c383ef7f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/ScatterSourceGenericList.cs
@@ -0,0 +1,90 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This data source manages X/Y points as separate X and Y collections
+ ///
+ public class ScatterSourceGenericList : IScatterSource
+ {
+ private readonly List _xs;
+ private readonly List _ys;
+
+ public ScatterSourceGenericList(List xs, List ys)
+ {
+ if (xs.Count != ys.Count)
+ {
+ throw new ArgumentException($"{nameof(xs)} and {nameof(ys)} must have equal length");
+ }
+
+ _xs = xs;
+ _ys = ys;
+ }
+
+ public IReadOnlyList GetScatterPoints()
+ {
+ // TODO: try to avoid calling this
+ return _xs.Zip(_ys, (x, y) => NumericConversion.GenericToCoordinates(ref x, ref y)).ToArray();
+ }
+
+ public AxisLimits GetLimits()
+ {
+ return new AxisLimits(GetLimitsX(), GetLimitsY());
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ if (_xs.Count == 0)
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ var values = NumericConversion.GenericToDoubleArray(_xs);
+
+ return new CoordinateRange(values.Min(), values.Max());
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ if (_ys.Count == 0)
+ {
+ return CoordinateRange.NotSet;
+ }
+
+ var values = NumericConversion.GenericToDoubleArray(_ys);
+
+ return new CoordinateRange(values.Min(), values.Max());
+ }
+
+ public DataPoint GetNearest(Coordinates mouseLocation, RenderDetails renderInfo, float maxDistance = 15)
+ {
+ double maxDistanceSquared = maxDistance * maxDistance;
+ var closestDistanceSquared = double.PositiveInfinity;
+
+ var closestIndex = 0;
+ var closestX = double.PositiveInfinity;
+ var closestY = double.PositiveInfinity;
+
+ for (var i = 0; i < _xs.Count; i++)
+ {
+ var xValue = _xs[i];
+ var yValue = _ys[i];
+ var xValueDouble = NumericConversion.GenericToDouble(ref xValue);
+ var yValueDouble = NumericConversion.GenericToDouble(ref yValue);
+ var dX = (xValueDouble - mouseLocation.X) * renderInfo.PxPerUnitX;
+ var dY = (yValueDouble - mouseLocation.Y) * renderInfo.PxPerUnitY;
+ var distanceSquared = dX * dX + dY * dY;
+
+ if (distanceSquared <= closestDistanceSquared)
+ {
+ closestDistanceSquared = distanceSquared;
+ closestX = xValueDouble;
+ closestY = yValueDouble;
+ closestIndex = i;
+ }
+ }
+
+ return closestDistanceSquared <= maxDistanceSquared
+ ? new DataPoint(closestX, closestY, closestIndex)
+ : DataPoint.None;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SegmentedTree.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SegmentedTree.cs
new file mode 100644
index 000000000..e60f00dc7
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SegmentedTree.cs
@@ -0,0 +1,331 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SegmentedTree where T : struct, IComparable
+ {
+ private T[] _sourceArray;
+
+ private T[]? _treeMin;
+ private T[]? _treeMax;
+ private int _n = 0; // size of each Tree
+ public bool TreesReady = false;
+
+ // precompiled lambda expressions for fast math on generic
+ private static Func _minExp;
+ private static Func _maxExp;
+ private static Func _equalExp;
+ private static Func _maxValue;
+ private static Func _minValue;
+ private static Func _lessThanExp;
+ private static Func _greaterThanExp;
+
+ public T[] SourceArray
+ {
+ get => _sourceArray;
+ set
+ {
+ _sourceArray = value ?? throw new Exception("Source Array cannot be null");
+ UpdateTrees();
+ }
+ }
+
+ public SegmentedTree()
+ {
+ try // runtime check
+ {
+ var v = new T();
+ NumericConversion.GenericToDouble(ref v);
+ }
+ catch
+ {
+ throw new ArgumentOutOfRangeException("Unsupported data type, provide convertable to double data types");
+ }
+ InitExp();
+ }
+
+ public async Task SetSourceAsync(T[] data)
+ {
+ _sourceArray = data ?? throw new ArgumentNullException("Data cannot be null");
+ await Task.Run(() => UpdateTrees());
+ }
+
+ private void InitExp()
+ {
+ var paramA = Expression.Parameter(typeof(T), "a");
+ var paramB = Expression.Parameter(typeof(T), "b");
+ // add the parameters together
+ var bodyMin = Expression.Condition(Expression.LessThanOrEqual(paramA, paramB), paramA, paramB);
+ var bodyMax = Expression.Condition(Expression.GreaterThanOrEqual(paramA, paramB), paramA, paramB);
+ var bodyEqual = Expression.Equal(paramA, paramB);
+ var bodyMaxValue = Expression.MakeMemberAccess(null, typeof(T).GetField("MaxValue"));
+ var bodyMinValue = Expression.MakeMemberAccess(null, typeof(T).GetField("MinValue"));
+ var bodyLessThan = Expression.LessThan(paramA, paramB);
+ var bodyGreaterThan = Expression.GreaterThan(paramA, paramB);
+ // compile it
+ _minExp = Expression.Lambda>(bodyMin, paramA, paramB).Compile();
+ _maxExp = Expression.Lambda>(bodyMax, paramA, paramB).Compile();
+ _equalExp = Expression.Lambda>(bodyEqual, paramA, paramB).Compile();
+ _maxValue = Expression.Lambda>(bodyMaxValue).Compile();
+ _minValue = Expression.Lambda>(bodyMinValue).Compile();
+ _lessThanExp = Expression.Lambda>(bodyLessThan, paramA, paramB).Compile();
+ _greaterThanExp = Expression.Lambda>(bodyGreaterThan, paramA, paramB).Compile();
+ }
+
+ public void UpdateElement(int index, T newValue)
+ {
+ _sourceArray[index] = newValue;
+ // Update Tree, can be optimized
+ if (index == _sourceArray.Length - 1) // last elem haven't pair
+ {
+ _treeMin![_n / 2 + index / 2] = _sourceArray[index];
+ _treeMax![_n / 2 + index / 2] = _sourceArray[index];
+ }
+ else if (index % 2 == 0) // even elem have right pair
+ {
+ _treeMin![_n / 2 + index / 2] = _minExp(_sourceArray[index], _sourceArray[index + 1]);
+ _treeMax![_n / 2 + index / 2] = _maxExp(_sourceArray[index], _sourceArray[index + 1]);
+ }
+ else // odd elem have left pair
+ {
+ _treeMin![_n / 2 + index / 2] = _minExp(_sourceArray[index], _sourceArray[index - 1]);
+ _treeMax![_n / 2 + index / 2] = _maxExp(_sourceArray[index], _sourceArray[index - 1]);
+ }
+
+ T candidate;
+ for (var i = (_n / 2 + index / 2) / 2; i > 0; i /= 2)
+ {
+ candidate = _minExp(_treeMin[i * 2], _treeMin[i * 2 + 1]);
+ if (_equalExp(_treeMin[i], candidate)) // if node same then new value don't need to recalc all upper
+ {
+ break;
+ }
+
+ _treeMin[i] = candidate;
+ }
+ for (var i = (_n / 2 + index / 2) / 2; i > 0; i /= 2)
+ {
+ candidate = _maxExp(_treeMax[i * 2], _treeMax[i * 2 + 1]);
+ if (_equalExp(_treeMax[i], candidate)) // if node same then new value don't need to recalc all upper
+ {
+ break;
+ }
+
+ _treeMax[i] = candidate;
+ }
+ }
+
+ public void UpdateRange(int from, int to, T[] newData, int fromData = 0) // RangeUpdate
+ {
+ //update source signal
+ for (var i = from; i < to; i++)
+ {
+ _sourceArray[i] = newData[i - from + fromData];
+ }
+
+ for (var i = _n / 2 + from / 2; i < _n / 2 + to / 2; i++)
+ {
+ _treeMin![i] = _minExp(_sourceArray[i * 2 - _n], _sourceArray[i * 2 + 1 - _n]);
+ _treeMax![i] = _maxExp(_sourceArray[i * 2 - _n], _sourceArray[i * 2 + 1 - _n]);
+ }
+ if (to == _sourceArray.Length) // last elem haven't pair
+ {
+ _treeMin![_n / 2 + to / 2] = _sourceArray[to - 1];
+ _treeMax![_n / 2 + to / 2] = _sourceArray[to - 1];
+ }
+ else if (to % 2 == 1) //last elem even(to-1) and not last
+ {
+ _treeMin![_n / 2 + to / 2] = _minExp(_sourceArray[to - 1], _sourceArray[to]);
+ _treeMax![_n / 2 + to / 2] = _maxExp(_sourceArray[to - 1], _sourceArray[to]);
+ }
+
+ from = (_n / 2 + from / 2) / 2;
+ to = (_n / 2 + to / 2) / 2;
+
+ T candidate;
+ while (from != 0) // up to root elem, that is [1], [0] - is free elem
+ {
+ if (from != to)
+ {
+ for (var i = from; i <= to; i++) // Recalc all level nodes in range
+ {
+ _treeMin![i] = _minExp(_treeMin[i * 2], _treeMin[i * 2 + 1]);
+ _treeMax![i] = _maxExp(_treeMax[i * 2], _treeMax[i * 2 + 1]);
+ }
+ }
+ else
+ {
+ // left == right, so no need more from to loop
+ for (var i = from; i > 0; i /= 2) // up to root node
+ {
+ candidate = _minExp(_treeMin![i * 2], _treeMin[i * 2 + 1]);
+ if (_equalExp(_treeMin[i], candidate)) // if node same then new value don't need to recalc all upper
+ {
+ break;
+ }
+
+ _treeMin[i] = candidate;
+ }
+
+ for (var i = from; i > 0; i /= 2) // up to root node
+ {
+ candidate = _maxExp(_treeMax![i * 2], _treeMax[i * 2 + 1]);
+ if (_equalExp(_treeMax[i], candidate)) // if node same then new value don't need to recalc all upper
+ {
+ break;
+ }
+
+ _treeMax[i] = candidate;
+ }
+ // all work done exit while loop
+ break;
+ }
+ // level up
+ from = from / 2;
+ to = to / 2;
+ }
+ }
+
+ public void UpdateData(int from, T[] newData)
+ {
+ UpdateRange(from, newData.Length, newData);
+ }
+
+ public void UpdateData(T[] newData)
+ {
+ UpdateRange(0, newData.Length, newData);
+ }
+
+ public void UpdateTreesInBackground()
+ {
+ Task.Run(() => { UpdateTrees(); });
+ }
+
+ public void UpdateTrees()
+ {
+ // O(n) to build trees
+ TreesReady = false;
+ try
+ {
+ if (_sourceArray.Length == 0)
+ {
+ throw new ArgumentOutOfRangeException($"Array cant't be empty");
+ }
+
+ // Size up to pow2
+ if (_sourceArray.Length > 0x40_00_00_00) // pow 2 must be more then int.MaxValue
+ {
+ throw new ArgumentOutOfRangeException($"Array higher than {0x40_00_00_00} not supported by SignalConst");
+ }
+
+ var pow2 = 1;
+ while (pow2 < 0x40_00_00_00 && pow2 < _sourceArray.Length)
+ pow2 <<= 1;
+ _n = pow2;
+ _treeMin = new T[_n];
+ _treeMax = new T[_n];
+ var maxValue = _maxValue();
+ var minValue = _minValue();
+
+ // fill bottom layer of tree
+ for (var i = 0; i < _sourceArray.Length / 2; i++) // with source array pairs min/max
+ {
+ _treeMin[_n / 2 + i] = _minExp(_sourceArray[i * 2], _sourceArray[i * 2 + 1]);
+ _treeMax[_n / 2 + i] = _maxExp(_sourceArray[i * 2], _sourceArray[i * 2 + 1]);
+ }
+ if (_sourceArray.Length % 2 == 1) // if array size odd, last element haven't pair to compare
+ {
+ _treeMin[_n / 2 + _sourceArray.Length / 2] = _sourceArray[_sourceArray.Length - 1];
+ _treeMax[_n / 2 + _sourceArray.Length / 2] = _sourceArray[_sourceArray.Length - 1];
+ }
+ for (var i = _n / 2 + (_sourceArray.Length + 1) / 2; i < _n; i++) // min/max for pairs of nonexistent elements
+ {
+ _treeMin[i] = minValue;
+ _treeMax[i] = maxValue;
+ }
+ // fill other layers
+ for (var i = _n / 2 - 1; i > 0; i--)
+ {
+ _treeMin[i] = _minExp(_treeMin[2 * i], _treeMin[2 * i + 1]);
+ _treeMax[i] = _maxExp(_treeMax[2 * i], _treeMax[2 * i + 1]);
+ }
+ TreesReady = true;
+ }
+ catch (OutOfMemoryException oem)
+ {
+ _treeMin = null;
+ _treeMax = null;
+ TreesReady = false;
+ DebugUtilities.WriteLine(oem);
+ }
+ }
+
+ // O(log(n)) for each range min/max query
+ public void MinMaxRangeQuery(int l, int r, out double lowestValue, out double highestValue)
+ {
+ T lowestValueT;
+ T highestValueT;
+ // if the tree calculation isn't finished or if it crashed
+ if (!TreesReady)
+ {
+ // use the original (slower) min/max calculated method
+ lowestValueT = _sourceArray[l];
+ highestValueT = _sourceArray[l];
+ for (var i = l; i < r; i++)
+ {
+ if (_lessThanExp(_sourceArray[i], lowestValueT))
+ {
+ lowestValueT = _sourceArray[i];
+ }
+
+ if (_greaterThanExp(_sourceArray[i], highestValueT))
+ {
+ highestValueT = _sourceArray[i];
+ }
+ }
+ lowestValue = NumericConversion.GenericToDouble(ref lowestValueT);
+ highestValue = NumericConversion.GenericToDouble(ref highestValueT);
+ return;
+ }
+
+ lowestValueT = _maxValue();
+ highestValueT = _minValue();
+ if (l == r)
+ {
+ lowestValue = highestValue = NumericConversion.GenericToDouble(ref _sourceArray[l]);
+ return;
+ }
+ // first iteration on source array that virtualy bottom of tree
+ if ((l & 1) == 1) // l is right child
+ {
+ lowestValueT = _minExp(lowestValueT, _sourceArray[l]);
+ highestValueT = _maxExp(highestValueT, _sourceArray[l]);
+ }
+ if ((r & 1) != 1) // r is left child
+ {
+ lowestValueT = _minExp(lowestValueT, _sourceArray[r]);
+ highestValueT = _maxExp(highestValueT, _sourceArray[r]);
+ }
+ // go up from array to bottom of Tree
+ l = (l + _n + 1) / 2;
+ r = (r + _n - 1) / 2;
+ // next iterations on tree
+ while (l <= r)
+ {
+ if ((l & 1) == 1) // l is right child
+ {
+ lowestValueT = _minExp(lowestValueT, _treeMin![l]);
+ highestValueT = _maxExp(highestValueT, _treeMax![l]);
+ }
+ if ((r & 1) != 1) // r is left child
+ {
+ lowestValueT = _minExp(lowestValueT, _treeMin![r]);
+ highestValueT = _maxExp(highestValueT, _treeMax![r]);
+ }
+ // go up one level
+ l = (l + 1) / 2;
+ r = (r - 1) / 2;
+ }
+ lowestValue = NumericConversion.GenericToDouble(ref lowestValueT);
+ highestValue = NumericConversion.GenericToDouble(ref highestValueT);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalConstSourceDoubleArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalConstSourceDoubleArray.cs
new file mode 100644
index 000000000..e0fb41a53
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalConstSourceDoubleArray.cs
@@ -0,0 +1,110 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalConstSourceDoubleArray
+ where T : struct, IComparable
+ {
+ public readonly SegmentedTree SegmentedTree = new();
+
+ public readonly T[] Ys;
+ public readonly double Period;
+
+ public double XOffset = 0;
+ public double YOffset = 0;
+ public int MinRenderIndex = 0;
+ public int MaxRenderIndex = int.MaxValue;
+
+ public SignalConstSourceDoubleArray(T[] ys, double period)
+ {
+ Ys = ys;
+ Period = period;
+ SegmentedTree.SourceArray = ys;
+ MaxRenderIndex = ys.Length - 1;
+ }
+ public AxisLimits GetAxisLimits()
+ {
+ SegmentedTree.MinMaxRangeQuery(0, Ys.Length - 1, out double low, out double high);
+ return new AxisLimits(0, Ys.Length * Period, low, high);
+ }
+
+ public int GetIndex(double x, bool visibleDataOnly)
+ {
+ int i = (int)((x - XOffset) / Period);
+
+ if (visibleDataOnly)
+ {
+ i = Math.Max(i, MinRenderIndex);
+ i = Math.Min(i, MaxRenderIndex);
+ }
+
+ return i;
+ }
+
+ public bool RangeContainsSignal(double xMin, double xMax)
+ {
+ int xMinIndex = GetIndex(xMin, false);
+ int xMaxIndex = GetIndex(xMax, false);
+ return xMaxIndex >= MinRenderIndex && xMinIndex <= MaxRenderIndex;
+ }
+
+ public SignalRangeY GetLimitsY(int firstIndex, int lastIndex)
+ {
+ double min = double.PositiveInfinity;
+ double max = double.NegativeInfinity;
+
+ for (int i = firstIndex; i <= lastIndex; i++)
+ {
+ double value = NumericConversion.GenericToDouble(Ys, i);
+ min = Math.Min(min, value);
+ max = Math.Max(max, value);
+ }
+
+ return new SignalRangeY(min, max);
+ }
+
+ public List GetPixelColumns(IAxes axes)
+ {
+ List cols = new();
+
+ // ensure the same i1 isn't sampled twice
+ int latIndex1 = int.MinValue;
+ for (int xPixelIndex = 0; xPixelIndex < (int)axes.DataRect.Width; xPixelIndex++)
+ {
+ float xPixel = axes.DataRect.Left + xPixelIndex;
+ double xRangeMin = axes.GetCoordinateX(xPixel);
+ float xUnitsPerPixel = (float)(axes.XAxis.Width / axes.DataRect.Width);
+ double xRangeMax = xRangeMin + xUnitsPerPixel;
+
+ // off the edge of the data
+ if (RangeContainsSignal(xRangeMin, xRangeMax) == false)
+ {
+ continue;
+ }
+
+ // determine column limits horizontally
+ int i1 = GetIndex(xRangeMin, true);
+ int i2 = GetIndex(xRangeMax, true);
+ if (i1 == latIndex1)
+ {
+ continue;
+ }
+
+ latIndex1 = i1;
+
+ // first and last Y vales for this column
+ double y1 = NumericConversion.GenericToDouble(Ys, i1);
+ double y2 = NumericConversion.GenericToDouble(Ys, i2);
+ float yEnter = axes.GetPixelY(y1 + YOffset);
+ float yExit = axes.GetPixelY(y2 + YOffset);
+
+ // column min and max
+ SignalRangeY rangeY = GetLimitsY(i1, i2);
+ float yBottom = axes.GetPixelY(rangeY.Min + YOffset);
+ float yTop = axes.GetPixelY(rangeY.Max + YOffset);
+
+ cols.Add(new PixelColumn(xPixel, yEnter, yExit, yBottom, yTop));
+ }
+
+ return cols;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalInterpolation.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalInterpolation.cs
new file mode 100644
index 000000000..f263b3d1d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalInterpolation.cs
@@ -0,0 +1,109 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class SignalInterpolation
+ {
+ ///
+ /// If the point to the left of the graph is extremely far outside the data area,
+ /// modify it using interpolation so it's closer to the data area to prevent render artifacts.
+ ///
+ public static void InterpolateBeforeX(RenderPack rp, Pixel[] pixels)
+ {
+ if (pixels.Length <= 2)
+ {
+ return;
+ }
+
+ Pixel lastOutsidePoint = pixels[0];
+ Pixel firstInsidePoint = pixels[1];
+ if (lastOutsidePoint.X == firstInsidePoint.X)
+ {
+ return;
+ }
+
+ float x = rp.DataRect.Left - 1;
+ float yDelta = lastOutsidePoint.Y - firstInsidePoint.Y;
+ float xDelta1 = x - firstInsidePoint.X;
+ float xDelta2 = lastOutsidePoint.X - firstInsidePoint.X;
+ float y = firstInsidePoint.Y + yDelta * xDelta1 / xDelta2;
+ pixels[0] = new Pixel(x, y);
+ }
+
+ ///
+ /// If the point to the bottom of the graph is extremely far outside the data area,
+ /// modify it using interpolation so it's closer to the data area to prevent render artifacts.
+ ///
+ public static void InterpolateBeforeY(RenderPack rp, Pixel[] pixels)
+ {
+ if (pixels.Length <= 2)
+ {
+ return;
+ }
+
+ Pixel lastOutsidePoint = pixels[0];
+ Pixel firstInsidePoint = pixels[1];
+ if (lastOutsidePoint.Y == firstInsidePoint.Y)
+ {
+ return;
+ }
+
+ float y = rp.DataRect.Bottom + 1;
+ float xDelta = lastOutsidePoint.X - firstInsidePoint.X;
+ float yDelta1 = y - firstInsidePoint.Y;
+ float yDelta2 = lastOutsidePoint.Y - firstInsidePoint.Y;
+ float x = firstInsidePoint.X + xDelta * yDelta1 / yDelta2;
+ pixels[0] = new Pixel(x, y);
+ }
+
+ ///
+ /// If the point to the right of the graph is extremely far outside the data area,
+ /// modify it using interpolation so it's closer to the data area to prevent render artifacts.
+ ///
+ public static void InterpolateAfterX(RenderPack rp, Pixel[] pixels)
+ {
+ if (pixels.Length <= 2)
+ {
+ return;
+ }
+
+ Pixel lastInsidePoint = pixels[pixels.Length - 2];
+ Pixel firstOutsidePoint = pixels[pixels.Length - 1];
+ if (firstOutsidePoint.X == lastInsidePoint.X)
+ {
+ return;
+ }
+
+ float x = rp.DataRect.Right + 1;
+ float yDelta = firstOutsidePoint.Y - lastInsidePoint.Y;
+ float xDelta1 = x - lastInsidePoint.X;
+ float xDelta2 = firstOutsidePoint.X - lastInsidePoint.X;
+ float y = lastInsidePoint.Y + yDelta * xDelta1 / xDelta2;
+ pixels[pixels.Length - 1] = new Pixel(x, y);
+ }
+
+ ///
+ /// If the point to the top of the graph is extremely far outside the data area,
+ /// modify it using interpolation so it's closer to the data area to prevent render artifacts.
+ ///
+ public static void InterpolateAfterY(RenderPack rp, Pixel[] pixels)
+ {
+ if (pixels.Length <= 2)
+ {
+ return;
+ }
+
+ Pixel lastInsidePoint = pixels[pixels.Length - 2];
+ Pixel firstOutsidePoint = pixels[pixels.Length - 1];
+ if (firstOutsidePoint.Y == lastInsidePoint.Y)
+ {
+ return;
+ }
+
+ float y = rp.DataRect.Top - 1;
+ float xDelta = firstOutsidePoint.X - lastInsidePoint.X;
+ float yDelta1 = y - lastInsidePoint.Y;
+ float yDelta2 = firstOutsidePoint.Y - lastInsidePoint.Y;
+ float x = lastInsidePoint.X + xDelta * yDelta1 / yDelta2;
+ pixels[pixels.Length - 1] = new Pixel(x, y);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalRangeY.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalRangeY.cs
new file mode 100644
index 000000000..6227604f8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalRangeY.cs
@@ -0,0 +1,14 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public readonly struct SignalRangeY
+ {
+ public double Min { get; }
+ public double Max { get; }
+ public SignalRangeY(double min, double max)
+ {
+ Min = min;
+ Max = max;
+ }
+ public override string ToString() => $"Range [{Min}, {Max}]";
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceBase.cs
new file mode 100644
index 000000000..ff858dc4a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceBase.cs
@@ -0,0 +1,67 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public abstract class SignalSourceBase
+ {
+ public double Period { get; set; }
+ public abstract int Length { get; }
+
+ public int MinimumIndex { get; set; } = 0;
+ public int MaximumIndex { get; set; } = int.MaxValue;
+
+ public int MinRenderIndex => Math.Max(0, MinimumIndex);
+ public int MaxRenderIndex => Math.Min(Length - 1, MaximumIndex);
+
+ public double XOffset { get; set; }
+ public double YOffset { get; set; }
+
+ public int GetIndex(double x, bool visibleDataOnly)
+ {
+ int i = (int)((x - XOffset) / Period);
+
+ if (visibleDataOnly)
+ {
+ i = Math.Max(i, MinRenderIndex);
+ i = Math.Min(i, MaxRenderIndex);
+ }
+
+ return i;
+ }
+
+ public bool RangeContainsSignal(double xMin, double xMax)
+ {
+ int xMinIndex = GetIndex(xMin, false);
+ int xMaxIndex = GetIndex(xMax, false);
+ return xMaxIndex >= MinRenderIndex && xMinIndex <= MaxRenderIndex;
+ }
+
+ public double GetX(int index)
+ {
+ return index * Period + XOffset;
+ }
+
+ public CoordinateRange GetLimitsX()
+ {
+ CoordinateRect rect = GetLimits().Rect;
+ return new CoordinateRange(rect.Left, rect.Left);
+ }
+
+ public CoordinateRange GetLimitsY()
+ {
+ CoordinateRect rect = GetLimits().Rect;
+ return new CoordinateRange(rect.Bottom, rect.Bottom);
+ }
+
+ public abstract SignalRangeY GetLimitsY(int firstIndex, int lastIndex);
+
+ public AxisLimits GetLimits()
+ {
+ SignalRangeY rangeY = GetLimitsY(MinRenderIndex, MaxRenderIndex);
+
+ return new AxisLimits(
+ left: XOffset + MinRenderIndex * Period,
+ right: XOffset + MaxRenderIndex * Period,
+ bottom: rangeY.Min + YOffset,
+ top: rangeY.Max + YOffset);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceDouble.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceDouble.cs
new file mode 100644
index 000000000..c9196cdb1
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceDouble.cs
@@ -0,0 +1,61 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalSourceDouble : SignalSourceBase, ISignalSource
+ {
+ private readonly IReadOnlyList _ys;
+ public override int Length => _ys.Count;
+
+ public SignalSourceDouble(IReadOnlyList ys, double period)
+ {
+ _ys = ys;
+ Period = period;
+ }
+
+ public IReadOnlyList GetYs()
+ {
+ return _ys;
+ }
+
+ public override SignalRangeY GetLimitsY(int firstIndex, int lastIndex)
+ {
+ double min = double.PositiveInfinity;
+ double max = double.NegativeInfinity;
+
+ for (int i = firstIndex; i <= lastIndex; i++)
+ {
+ min = Math.Min(min, _ys[i]);
+ max = Math.Max(max, _ys[i]);
+ }
+
+ return new SignalRangeY(min, max);
+ }
+
+ public PixelColumn GetPixelColumn(IAxes axes, int xPixelIndex)
+ {
+ float xPixel = axes.DataRect.Left + xPixelIndex;
+ double xRangeMin = axes.GetCoordinateX(xPixel);
+ float xUnitsPerPixel = (float)(axes.XAxis.Width / axes.DataRect.Width);
+ double xRangeMax = xRangeMin + xUnitsPerPixel;
+
+ if (RangeContainsSignal(xRangeMin, xRangeMax) == false)
+ {
+ return PixelColumn.WithoutData(xPixel);
+ }
+
+ // determine column limits horizontally
+ int i1 = GetIndex(xRangeMin, true);
+ int i2 = GetIndex(xRangeMax, true);
+
+ // first and last Y vales for this column
+ float yEnter = axes.GetPixelY(_ys[i1] + YOffset);
+ float yExit = axes.GetPixelY(_ys[i2] + YOffset);
+
+ // column min and max
+ SignalRangeY rangeY = GetLimitsY(i1, i2);
+ float yBottom = axes.GetPixelY(rangeY.Min + YOffset);
+ float yTop = axes.GetPixelY(rangeY.Max + YOffset);
+
+ return new PixelColumn(xPixel, yEnter, yExit, yBottom, yTop);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericArray.cs
new file mode 100644
index 000000000..391307691
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericArray.cs
@@ -0,0 +1,70 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalSourceGenericArray : SignalSourceBase, ISignalSource
+ {
+ private readonly T[] _ys;
+ public override int Length => _ys.Length;
+
+ public SignalSourceGenericArray(T[] ys, double period)
+ {
+ _ys = ys;
+ Period = period;
+ }
+
+ public IReadOnlyList GetYs()
+ {
+ return NumericConversion.GenericToDoubleArray(_ys);
+ }
+
+ public override SignalRangeY GetLimitsY(int firstIndex, int lastIndex)
+ {
+ double min = double.PositiveInfinity;
+ double max = double.NegativeInfinity;
+
+ for (int i = firstIndex; i <= lastIndex; i++)
+ {
+ double value = NumericConversion.GenericToDouble(ref _ys[i]);
+ min = Math.Min(min, value);
+ max = Math.Max(max, value);
+ }
+
+ return new SignalRangeY(min, max);
+ }
+
+ public PixelColumn GetPixelColumn(IAxes axes, int xPixelIndex)
+ {
+ float xPixel = axes.DataRect.Left + xPixelIndex;
+ double xRangeMin = axes.GetCoordinateX(xPixel);
+ float xUnitsPerPixel = (float)(axes.XAxis.Width / axes.DataRect.Width);
+ double xRangeMax = xRangeMin + xUnitsPerPixel;
+
+ if (RangeContainsSignal(xRangeMin, xRangeMax) == false)
+ {
+ return PixelColumn.WithoutData(xPixel);
+ }
+
+ // determine column limits horizontally
+ int i1 = GetIndex(xRangeMin, true);
+ int i2 = GetIndex(xRangeMax, true);
+ float yEnter = axes.GetPixelY(NumericConversion.GenericToDouble(_ys, i1) + YOffset);
+ float yExit = axes.GetPixelY(NumericConversion.GenericToDouble(_ys, i2) + YOffset);
+
+ // determine column span vertically
+ double yMin = double.PositiveInfinity;
+ double yMax = double.NegativeInfinity;
+ for (int i = i1; i <= i2; i++)
+ {
+ double value = NumericConversion.GenericToDouble(_ys, i);
+ yMin = Math.Min(yMin, value);
+ yMax = Math.Max(yMax, value);
+ }
+ yMin += YOffset;
+ yMax += YOffset;
+
+ float yBottom = axes.GetPixelY(yMin);
+ float yTop = axes.GetPixelY(yMax);
+
+ return new PixelColumn(xPixel, yEnter, yExit, yBottom, yTop);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericList.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericList.cs
new file mode 100644
index 000000000..cba74b272
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalSourceGenericList.cs
@@ -0,0 +1,71 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalSourceGenericList : SignalSourceBase, ISignalSource
+ {
+ private readonly List _ys;
+ public override int Length => _ys.Count;
+
+ public SignalSourceGenericList(List ys, double period)
+ {
+ _ys = ys;
+ Period = period;
+ }
+
+ public IReadOnlyList GetYs()
+ {
+ return NumericConversion.GenericToDoubleArray(_ys);
+ }
+
+ public override SignalRangeY GetLimitsY(int firstIndex, int lastIndex)
+ {
+ double min = double.PositiveInfinity;
+ double max = double.NegativeInfinity;
+
+ for (int i = firstIndex; i <= lastIndex; i++)
+ {
+ T genericValue = _ys[i];
+ double value = NumericConversion.GenericToDouble(ref genericValue);
+ min = Math.Min(min, value);
+ max = Math.Max(max, value);
+ }
+
+ return new SignalRangeY(min, max);
+ }
+
+ public PixelColumn GetPixelColumn(IAxes axes, int xPixelIndex)
+ {
+ float xPixel = axes.DataRect.Left + xPixelIndex;
+ double xRangeMin = axes.GetCoordinateX(xPixel);
+ float xUnitsPerPixel = (float)(axes.XAxis.Width / axes.DataRect.Width);
+ double xRangeMax = xRangeMin + xUnitsPerPixel;
+
+ if (RangeContainsSignal(xRangeMin, xRangeMax) == false)
+ {
+ return PixelColumn.WithoutData(xPixel);
+ }
+
+ // determine column limits horizontally
+ int i1 = GetIndex(xRangeMin, true);
+ int i2 = GetIndex(xRangeMax, true);
+ float yEnter = axes.GetPixelY(NumericConversion.GenericToDouble(_ys, i1) + YOffset);
+ float yExit = axes.GetPixelY(NumericConversion.GenericToDouble(_ys, i2) + YOffset);
+
+ // determine column span vertically
+ double yMin = double.PositiveInfinity;
+ double yMax = double.NegativeInfinity;
+ for (int i = i1; i <= i2; i++)
+ {
+ double value = NumericConversion.GenericToDouble(_ys, i);
+ yMin = Math.Min(yMin, value);
+ yMax = Math.Max(yMax, value);
+ }
+ yMin += YOffset;
+ yMax += YOffset;
+
+ float yBottom = axes.GetPixelY(yMin);
+ float yTop = axes.GetPixelY(yMax);
+
+ return new PixelColumn(xPixel, yEnter, yExit, yBottom, yTop);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceDoubleArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceDoubleArray.cs
new file mode 100644
index 000000000..360521821
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceDoubleArray.cs
@@ -0,0 +1,292 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalXySourceDoubleArray : ISignalXySource
+ {
+ readonly double[] _xs;
+ readonly double[] _ys;
+ public bool Rotated { get; set; } = false;
+
+ public double XOffset { get; set; } = 0;
+ public double YOffset { get; set; } = 0;
+ public int MinimumIndex { get; set; } = 0;
+ public int MaximumIndex { get; set; }
+
+ public SignalXySourceDoubleArray(double[] xs, double[] ys)
+ {
+ if (xs.Length != ys.Length)
+ {
+ throw new ArgumentException($"{nameof(xs)} and {nameof(ys)} must have equal length");
+ }
+
+ _xs = xs;
+ _ys = ys;
+ MaximumIndex = xs.Length - 1;
+ }
+
+ public AxisLimits GetAxisLimits()
+ {
+ double xMin = _xs[MinimumIndex] + XOffset;
+ double xMax = _xs[MaximumIndex] + XOffset;
+
+ CoordinateRange xRange = new(xMin, xMax);
+ CoordinateRange yRange = GetRange(MinimumIndex, MaximumIndex);
+ return Rotated
+ ? new AxisLimits(yRange, xRange)
+ : new AxisLimits(xRange, yRange);
+ }
+
+ public Pixel[] GetPixelsToDraw(RenderPack rp, IAxes axes)
+ {
+ return Rotated
+ ? GetPixelsToDrawVertically(rp, axes)
+ : GetPixelsToDrawHorizontally(rp, axes);
+ }
+
+ private Pixel[] GetPixelsToDrawHorizontally(RenderPack rp, IAxes axes)
+ {
+ // determine the range of data in view
+ (Pixel[] pointBefore, int dataIndexFirst) = GetFirstPointX(axes);
+ (Pixel[] pointAfter, int dataIndexLast) = GetLastPointX(axes);
+ IndexRange visibileRange = new(dataIndexFirst, dataIndexLast);
+
+ // get all points in view
+ IEnumerable visiblePoints = Enumerable.Range(0, (int)Math.Ceiling(rp.DataRect.Width))
+ .Select(pxColumn => GetColumnPixelsX(pxColumn, visibileRange, rp, axes))
+ .SelectMany(x => x);
+
+ // combine with one extra point before and after
+ Pixel[] points = [.. pointBefore, .. visiblePoints, .. pointAfter];
+
+ // use interpolation at the edges to prevent points from going way off the screen
+ if (pointBefore.Length > 0)
+ {
+ SignalInterpolation.InterpolateBeforeX(rp, points);
+ }
+
+ if (pointAfter.Length > 0)
+ {
+ SignalInterpolation.InterpolateAfterX(rp, points);
+ }
+
+ return points;
+ }
+
+ private Pixel[] GetPixelsToDrawVertically(RenderPack rp, IAxes axes)
+ {
+ // determine the range of data in view
+ (Pixel[] pointBefore, int dataIndexFirst) = GetFirstPointY(axes);
+ (Pixel[] pointAfter, int dataIndexLast) = GetLastPointY(axes);
+ IndexRange visibleRange = new(dataIndexFirst, dataIndexLast);
+
+ // get all points in view
+ IEnumerable visiblePoints = Enumerable.Range(0, (int)Math.Ceiling(rp.DataRect.Height))
+ .Select(pxRow => GetColumnPixelsY(pxRow, visibleRange, rp, axes))
+ .SelectMany(x => x);
+
+ // combine with one extra point before and after
+ Pixel[] points = [.. pointBefore, .. visiblePoints, .. pointAfter];
+
+ // use interpolation at the edges to prevent points from going way off the screen
+ if (pointBefore.Length > 0)
+ {
+ SignalInterpolation.InterpolateBeforeY(rp, points);
+ }
+
+ if (pointAfter.Length > 0)
+ {
+ SignalInterpolation.InterpolateAfterY(rp, points);
+ }
+
+ return points;
+ }
+
+ ///
+ /// Return the vertical range covered by data between the given indices (inclusive)
+ ///
+ public CoordinateRange GetRange(int index1, int index2)
+ {
+ double min = _ys[index1];
+ double max = _ys[index1];
+
+ for (int i = index1; i <= index2; i++)
+ {
+ min = Math.Min(_ys[i], min);
+ max = Math.Max(_ys[i], max);
+ }
+
+ return new CoordinateRange(min + YOffset, max + YOffset);
+ }
+
+ ///
+ /// Get the index associated with the given X position
+ ///
+ public int GetIndex(double x)
+ {
+ IndexRange range = new(MinimumIndex, MaximumIndex);
+ return GetIndex(x, range);
+ }
+
+ ///
+ /// Get the index associated with the given X position limited to the given range
+ ///
+ public int GetIndex(double x, IndexRange indexRange)
+ {
+ int index = Array.BinarySearch(_xs, indexRange.Min, indexRange.Length, x - XOffset);
+
+ if (index < 0)
+ {
+ index = ~index; // read BinarySearch() docs
+ }
+
+ return index;
+ }
+
+ ///
+ /// Given a pixel column, return the pixels to render its line.
+ /// If the column contains no data, no pixels are returned.
+ /// If the column contains one point, return that one pixel.
+ /// If the column contains multiple points, return 4 pixels: enter, min, max, and exit
+ ///
+ public IEnumerable GetColumnPixelsX(int pixelColumnIndex, IndexRange rng, RenderPack rp, IAxes axes)
+ {
+ float xPixel = pixelColumnIndex + rp.DataRect.Left;
+ double unitsPerPixelX = axes.XAxis.Width / rp.DataRect.Width;
+ double start = axes.XAxis.Min + unitsPerPixelX * pixelColumnIndex;
+ double end = start + unitsPerPixelX;
+ int startIndex = GetIndex(start, rng);
+ int endIndex = GetIndex(end, rng);
+ int pointsInRange = endIndex - startIndex;
+
+ if (pointsInRange == 0)
+ {
+ yield break;
+ }
+
+ yield return new Pixel(xPixel, axes.GetPixelY(_ys[startIndex] + YOffset)); // enter
+
+ if (pointsInRange > 1)
+ {
+ CoordinateRange yRange = GetRange(startIndex, endIndex - 1);
+ yield return new Pixel(xPixel, axes.GetPixelY(yRange.Min)); // min
+ yield return new Pixel(xPixel, axes.GetPixelY(yRange.Max)); // max
+ yield return new Pixel(xPixel, axes.GetPixelY(_ys[endIndex - 1] + YOffset)); // exit
+ }
+ }
+
+ ///
+ /// Given a pixel column, return the pixels to render its line.
+ /// If the column contains no data, no pixels are returned.
+ /// If the column contains one point, return that one pixel.
+ /// If the column contains multiple points, return 4 pixels: enter, min, max, and exit
+ ///
+ public IEnumerable GetColumnPixelsY(int rowColumnIndex, IndexRange rng, RenderPack rp, IAxes axes)
+ {
+ float yPixel = rp.DataRect.Bottom - rowColumnIndex;
+ double unitsPerPixelY = axes.YAxis.Height / rp.DataRect.Height;
+ double start = axes.YAxis.Min + unitsPerPixelY * rowColumnIndex;
+ double end = start + unitsPerPixelY;
+ int startIndex = GetIndex(start, rng);
+ int endIndex = GetIndex(end, rng);
+ int pointsInRange = endIndex - startIndex;
+
+ if (pointsInRange == 0)
+ {
+ yield break;
+ }
+
+ yield return new Pixel(axes.GetPixelX(_ys[startIndex] + XOffset), yPixel); // enter
+
+ if (pointsInRange > 1)
+ {
+ CoordinateRange yRange = GetRange(startIndex, endIndex - 1);
+ yield return new Pixel(axes.GetPixelX(yRange.Min), yPixel); // min
+ yield return new Pixel(axes.GetPixelX(yRange.Max), yPixel); // max
+ yield return new Pixel(axes.GetPixelX(_ys[endIndex - 1] + XOffset), yPixel); // exit
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the left,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int firstIndex) GetFirstPointX(IAxes axes)
+ {
+ int pointBeforeIndex = GetIndex(axes.XAxis.Min);
+
+ if (pointBeforeIndex > MinimumIndex)
+ {
+ float beforeX = axes.GetPixelX(_xs[pointBeforeIndex - 1] + XOffset);
+ float beforeY = axes.GetPixelY(_ys[pointBeforeIndex - 1] + YOffset);
+ Pixel beforePoint = new(beforeX, beforeY);
+ return ([beforePoint], pointBeforeIndex);
+ }
+ else
+ {
+ return ([], MinimumIndex);
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the bottom,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int firstIndex) GetFirstPointY(IAxes axes)
+ {
+ int pointBeforeIndex = GetIndex(axes.YAxis.Min);
+
+ if (pointBeforeIndex > MinimumIndex)
+ {
+ float beforeX = axes.GetPixelX(_ys[pointBeforeIndex - 1] + XOffset);
+ float beforeY = axes.GetPixelY(_xs[pointBeforeIndex - 1] + YOffset);
+ Pixel beforePoint = new(beforeX, beforeY);
+ return ([beforePoint], pointBeforeIndex);
+ }
+ else
+ {
+ return ([], MinimumIndex);
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the right,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int lastIndex) GetLastPointX(IAxes axes)
+ {
+ int pointAfterIndex = GetIndex(axes.XAxis.Max);
+
+ if (pointAfterIndex <= MaximumIndex)
+ {
+ float afterX = axes.GetPixelX(_xs[pointAfterIndex] + XOffset);
+ float afterY = axes.GetPixelY(_ys[pointAfterIndex] + YOffset);
+ Pixel afterPoint = new(afterX, afterY);
+ return ([afterPoint], pointAfterIndex);
+ }
+ else
+ {
+ return ([], MaximumIndex);
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the top,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int lastIndex) GetLastPointY(IAxes axes)
+ {
+ int pointAfterIndex = GetIndex(axes.YAxis.Max);
+
+ if (pointAfterIndex <= MaximumIndex)
+ {
+ float afterX = axes.GetPixelX(_ys[pointAfterIndex] + XOffset);
+ float afterY = axes.GetPixelY(_xs[pointAfterIndex] + YOffset);
+ Pixel afterPoint = new(afterX, afterY);
+ return ([afterPoint], pointAfterIndex);
+ }
+ else
+ {
+ return ([], MaximumIndex);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceGenericArray.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceGenericArray.cs
new file mode 100644
index 000000000..08eec5e70
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataSources/SignalXYSourceGenericArray.cs
@@ -0,0 +1,191 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SignalXySourceGenericArray : ISignalXySource
+ {
+ public TX[] Xs { get; set; }
+ public TY[] Ys { get; set; }
+ public bool Rotated
+ {
+ get => false;
+ set => throw new NotImplementedException("rotation is not yet supported for generic SignalXY plots");
+ }
+
+ public double XOffset { get; set; } = 0;
+ public double YOffset { get; set; } = 0;
+ public int MinimumIndex { get; set; } = 0;
+ public int MaximumIndex { get; set; }
+
+ public SignalXySourceGenericArray(TX[] xs, TY[] ys)
+ {
+ if (xs.Length != ys.Length)
+ {
+ throw new InvalidOperationException($"{nameof(xs)} and {nameof(ys)} must have equal length");
+ }
+
+ Xs = xs;
+ Ys = ys;
+ MaximumIndex = xs.Length - 1;
+ }
+
+ public AxisLimits GetAxisLimits()
+ {
+ double xMin = NumericConversion.GenericToDouble(Xs, MinimumIndex) + XOffset;
+ double xMax = NumericConversion.GenericToDouble(Xs, MaximumIndex) + XOffset;
+ CoordinateRange xRange = new(xMin, xMax);
+ CoordinateRange yRange = GetRangeY(MinimumIndex, MaximumIndex);
+ return new AxisLimits(xRange, yRange);
+ }
+
+ public Pixel[] GetPixelsToDraw(RenderPack rp, IAxes axes)
+ {
+ // determine the range of data in view
+ (Pixel[] pointBefore, int dataIndexFirst) = GetFirstPoint(axes);
+ (Pixel[] pointAfter, int dataIndexLast) = GetLastPoint(axes);
+ IndexRange columnIndexRange = new(dataIndexFirst, dataIndexLast);
+
+ // get all points in view
+ IEnumerable visiblePoints = Enumerable.Range(0, (int)Math.Ceiling(rp.DataRect.Width))
+ .Select(pixelColumnIndex => GetColumnPixels(pixelColumnIndex, columnIndexRange, rp, axes))
+ .SelectMany(x => x);
+
+ // combine with one extra point before and after
+ Pixel[] points = [.. pointBefore, .. visiblePoints, .. pointAfter];
+
+ // use interpolation at the edges to prevent points from going way off the screen
+ if (pointBefore.Length > 0)
+ {
+ SignalInterpolation.InterpolateBeforeX(rp, points);
+ }
+
+ if (pointAfter.Length > 0)
+ {
+ SignalInterpolation.InterpolateAfterX(rp, points);
+ }
+
+ return points;
+ }
+
+ ///
+ /// Return the vertical range covered by data between the given indices (inclusive)
+ ///
+ public CoordinateRange GetRangeY(int index1, int index2)
+ {
+ double min = NumericConversion.GenericToDouble(Ys, index1);
+ double max = NumericConversion.GenericToDouble(Ys, index1);
+
+ for (int i = index1; i <= index2; i++)
+ {
+ double value = NumericConversion.GenericToDouble(Ys, i);
+ min = Math.Min(value, min);
+ max = Math.Max(value, max);
+ }
+
+ return new CoordinateRange(min + YOffset, max + YOffset);
+ }
+
+ ///
+ /// Get the index associated with the given X position
+ ///
+ public int GetIndexX(double x)
+ {
+ IndexRange range = new(MinimumIndex, MaximumIndex);
+ return GetIndex(x, range);
+ }
+
+ ///
+ /// Get the index associated with the given X position limited to the given range
+ ///
+ public int GetIndex(double x, IndexRange indexRange)
+ {
+ NumericConversion.DoubleToGeneric(x - XOffset, out TX x2);
+ int index = Array.BinarySearch(Xs, indexRange.Min, indexRange.Length, x2);
+
+ if (index < 0)
+ {
+ index = ~index; // read BinarySearch() docs
+ }
+
+ return index;
+ }
+
+ ///
+ /// Given a pixel column, return the pixels to render its line.
+ /// If the column contains no data, no pixels are returned.
+ /// If the column contains one point, return that one pixel.
+ /// If the column contains multiple points, return 4 pixels: enter, min, max, and exit
+ ///
+ public IEnumerable GetColumnPixels(int pixelColumnIndex, IndexRange rng, RenderPack rp, IAxes axes)
+ {
+ float xPixel = pixelColumnIndex + rp.DataRect.Left;
+ double unitsPerPixelX = axes.XAxis.Width / rp.DataRect.Width;
+ double start = axes.XAxis.Min + unitsPerPixelX * pixelColumnIndex;
+ double end = start + unitsPerPixelX;
+ int startIndex = GetIndex(start, rng);
+ int endIndex = GetIndex(end, rng);
+ int pointsInRange = endIndex - startIndex;
+
+ if (pointsInRange == 0)
+ {
+ yield break;
+ }
+
+ double yStart = NumericConversion.GenericToDouble(Ys, startIndex);
+ yield return new Pixel(xPixel, axes.GetPixelY(yStart + YOffset)); // enter
+
+ if (pointsInRange > 1)
+ {
+ double yEnd = NumericConversion.GenericToDouble(Ys, endIndex - 1);
+ CoordinateRange yRange = GetRangeY(startIndex, endIndex - 1);
+ yield return new Pixel(xPixel, axes.GetPixelY(yRange.Min)); // min
+ yield return new Pixel(xPixel, axes.GetPixelY(yRange.Max)); // max
+ yield return new Pixel(xPixel, axes.GetPixelY(yEnd) + YOffset); // exit
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the left,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int firstIndex) GetFirstPoint(IAxes axes)
+ {
+ int pointBeforeIndex = GetIndexX(axes.XAxis.Min);
+
+ if (pointBeforeIndex > MinimumIndex)
+ {
+ double x = NumericConversion.GenericToDouble(Xs, pointBeforeIndex - 1) + XOffset;
+ double y = NumericConversion.GenericToDouble(Ys, pointBeforeIndex - 1) + YOffset;
+ float beforeX = axes.GetPixelX(x);
+ float beforeY = axes.GetPixelY(y);
+ Pixel beforePoint = new(beforeX, beforeY);
+ return ([beforePoint], pointBeforeIndex);
+ }
+ else
+ {
+ return ([], MinimumIndex);
+ }
+ }
+
+ ///
+ /// If data is off to the screen to the right,
+ /// returns information about the closest point off the screen
+ ///
+ private (Pixel[] pointsBefore, int lastIndex) GetLastPoint(IAxes axes)
+ {
+ int pointAfterIndex = GetIndexX(axes.XAxis.Max);
+
+ if (pointAfterIndex <= MaximumIndex)
+ {
+ double x = NumericConversion.GenericToDouble(Xs, pointAfterIndex) + XOffset;
+ double y = NumericConversion.GenericToDouble(Ys, pointAfterIndex) + YOffset;
+ float afterX = axes.GetPixelX(x);
+ float afterY = axes.GetPixelY(y);
+ Pixel afterPoint = new(afterX, afterY);
+ return ([afterPoint], pointAfterIndex);
+ }
+ else
+ {
+ return ([], MaximumIndex);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/IDataStreamerView.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/IDataStreamerView.cs
new file mode 100644
index 000000000..e73559f27
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/IDataStreamerView.cs
@@ -0,0 +1,11 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Contains logic for rendering fixed-length data in a streaming data logger.
+ ///
+ public interface IDataStreamerView
+ {
+ DataStreamer Streamer { get; }
+ void Render(RenderPack rp);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Scroll.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Scroll.cs
new file mode 100644
index 000000000..c581b3b07
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Scroll.cs
@@ -0,0 +1,35 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Scroll : IDataStreamerView
+ {
+ private readonly bool _newOnRight;
+
+ public DataStreamer Streamer { get; }
+
+ public Scroll(DataStreamer streamer, bool newOnRight)
+ {
+ Streamer = streamer;
+ _newOnRight = newOnRight;
+ }
+
+ public void Render(RenderPack rp)
+ {
+ Pixel[] points = new Pixel[Streamer.Data.Length];
+
+ int oldPointCount = Streamer.Data.Length - Streamer.Data.NextIndex;
+
+ for (int i = 0; i < Streamer.Data.Length; i++)
+ {
+ bool isNewPoint = i < oldPointCount;
+ int sourceIndex = isNewPoint ? Streamer.Data.NextIndex + i : i - oldPointCount;
+ int targetIndex = _newOnRight ? i : Streamer.Data.Data.Length - 1 - i;
+ points[targetIndex] = new(
+ x: Streamer.Axes.GetPixelX(targetIndex * Streamer.Data.SamplePeriod + Streamer.Data.OffsetX),
+ y: Streamer.Axes.GetPixelY(Streamer.Data.Data[sourceIndex] + Streamer.Data.OffsetY));
+ }
+
+ using SKPaint paint = new();
+ Drawing.DrawLines(rp.Canvas, paint, points, Streamer.LineStyle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Wipe.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Wipe.cs
new file mode 100644
index 000000000..7c6f418bb
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/DataViews/Wipe.cs
@@ -0,0 +1,48 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Wipe : IDataStreamerView
+ {
+ private readonly bool _wipeRight;
+
+ public DataStreamer Streamer { get; }
+
+ //TODO: Add a BlankFraction property that adds a gap between old and new data
+
+ public Wipe(DataStreamer streamer, bool wipeRight)
+ {
+ Streamer = streamer;
+ _wipeRight = wipeRight;
+ }
+
+ public void Render(RenderPack rp)
+ {
+ int newestCount = Streamer.Data.NextIndex;
+ int oldestCount = Streamer.Data.Data.Length - newestCount;
+
+ double xMax = Streamer.Data.Data.Length * Streamer.Data.SamplePeriod + Streamer.Data.OffsetX;
+
+ Pixel[] newest = new Pixel[newestCount];
+ Pixel[] oldest = new Pixel[oldestCount];
+
+ for (int i = 0; i < newest.Length; i++)
+ {
+ double xPos = i * Streamer.Data.SamplePeriod + Streamer.Data.OffsetX;
+ float x = Streamer.Axes.GetPixelX(_wipeRight ? xPos : xMax - xPos);
+ float y = Streamer.Axes.GetPixelY(Streamer.Data.Data[i] + Streamer.Data.OffsetY);
+ newest[i] = new(x, y);
+ }
+
+ for (int i = 0; i < oldest.Length; i++)
+ {
+ double xPos = (i + Streamer.Data.NextIndex) * Streamer.Data.SamplePeriod + Streamer.Data.OffsetX;
+ float x = Streamer.Axes.GetPixelX(_wipeRight ? xPos : xMax - xPos);
+ float y = Streamer.Axes.GetPixelY(Streamer.Data.Data[i + Streamer.Data.NextIndex] + Streamer.Data.OffsetY);
+ oldest[i] = new(x, y);
+ }
+
+ using SKPaint paint = new();
+ Drawing.DrawLines(rp.Canvas, paint, oldest, Streamer.LineStyle);
+ Drawing.DrawLines(rp.Canvas, paint, newest, Streamer.LineStyle);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/DateTimeExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/DateTimeExtensions.cs
new file mode 100644
index 000000000..4123a7dcd
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/DateTimeExtensions.cs
@@ -0,0 +1,39 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// These methods hold conversion logic between DateTime (used for representing dates)
+ /// and double (used for defining positions on a Cartesian coordinate plane).
+ ///
+ /// Converting double <-> OADate has issues (e.g., OADates have a limited range), so by
+ /// isolating the conversion here we can ensure we can change the logic later without
+ /// hunting around the code base finding all the OADate conversion calls.
+ ///
+ public static class DateTimeExtensions
+ {
+ ///
+ /// Convert a number that can be plotted on a numeric axis into a DateTime
+ ///
+ public static DateTime ToDateTime(this double value)
+ {
+ return value switch
+ {
+ <= -657435 => new DateTime(100, 1, 1),
+ >= 2958466 => new DateTime(9_999, 1, 1),
+ _ => DateTime.FromOADate(value)
+ };
+ }
+
+ ///
+ /// Convert a DateTime into a number that can be plotted on a numeric axis
+ ///
+ public static double ToNumber(this DateTime value)
+ {
+ return value.Year switch
+ {
+ < 100 => new DateTime(100, 1, 1).ToOADate(),
+ >= 10_000 => new DateTime(10_000, 1, 1).ToOADate(),
+ _ => value.ToOADate()
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/EnumerableExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/EnumerableExtensions.cs
new file mode 100644
index 000000000..9aa1a0ad0
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/EnumerableExtensions.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ internal static class EnumerableExtensions
+ {
+ public static IEnumerable One(T item)
+ {
+ yield return item;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/InternationalizationExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/InternationalizationExtensions.cs
new file mode 100644
index 000000000..1099b74d6
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/InternationalizationExtensions.cs
@@ -0,0 +1,8 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ internal static class InternationalizationExtensions
+ {
+ public static bool Uses24HourClock(this CultureInfo culture) =>
+ culture.DateTimeFormat.LongTimePattern.Contains('H');
+ }
+}
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/NumericExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/NumericExtensions.cs
new file mode 100644
index 000000000..28a32a4c8
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/NumericExtensions.cs
@@ -0,0 +1,55 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class NumericExtensions
+ {
+ public static bool IsInfiniteOrNaN(this double x)
+ {
+ return !IsFinite(x);
+ }
+
+ public static bool IsFinite(this double x)
+ {
+ if (double.IsInfinity(x))
+ {
+ return false;
+ }
+
+ return !double.IsNaN(x);
+ }
+
+ public static float ToDegrees(this double radians)
+ {
+ return (float)(radians * 180.0 / Math.PI);
+ }
+
+ public static float ToRadians(this double degrees)
+ {
+ return (float)(degrees / 180.0 * Math.PI);
+ }
+
+ public static float ToRadians(this float degrees)
+ {
+ return (float)(degrees / 180.0 * Math.PI);
+ }
+
+ public static float ToRadians(this int degrees)
+ {
+ return (float)(degrees / 180.0 * Math.PI);
+ }
+
+ ///
+ /// Returns the fallback value if the given value is infinity
+ ///
+ public static double FiniteCoallesce(this double value, double fallback)
+ {
+ if (double.IsInfinity(value) || double.IsNaN(value))
+ {
+ return fallback;
+ }
+ else
+ {
+ return value;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SkiaSharpExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SkiaSharpExtensions.cs
new file mode 100644
index 000000000..6064aeac5
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SkiaSharpExtensions.cs
@@ -0,0 +1,102 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class SkiaSharpExtensions
+ {
+ public static PixelSize ToPixelSize(this SKRect rect)
+ {
+ return new PixelSize(rect.Width, rect.Height);
+ }
+
+ public static SKTextAlign ToSkTextAlign(this Alignment alignment)
+ {
+ return alignment switch
+ {
+ Alignment.UpperLeft => SKTextAlign.Left,
+ Alignment.UpperCenter => SKTextAlign.Center,
+ Alignment.UpperRight => SKTextAlign.Right,
+ Alignment.MiddleLeft => SKTextAlign.Left,
+ Alignment.MiddleCenter => SKTextAlign.Center,
+ Alignment.MiddleRight => SKTextAlign.Right,
+ Alignment.LowerLeft => SKTextAlign.Left,
+ Alignment.LowerCenter => SKTextAlign.Center,
+ Alignment.LowerRight => SKTextAlign.Right,
+ _ => throw new NotImplementedException(),
+ };
+ }
+
+ public static SKEncodedImageFormat ToSkFormat(this ImageFormat fmt)
+ {
+ return fmt switch
+ {
+ ImageFormat.Jpeg => SKEncodedImageFormat.Jpeg,
+ ImageFormat.Png => SKEncodedImageFormat.Png,
+ ImageFormat.Bmp => SKEncodedImageFormat.Bmp,
+ ImageFormat.Webp => SKEncodedImageFormat.Webp,
+ _ => throw new NotImplementedException($"unsupported format: {fmt}")
+ };
+ }
+
+ public static Pixel CenterPixel(this SKBitmap bmp)
+ {
+ return new Pixel(bmp.Width / 2, bmp.Height / 2);
+ }
+
+ public static PixelSize GetPixelSize(this SKSurface surface)
+ {
+ return new PixelSize(
+ width: surface.Canvas.LocalClipBounds.Width,
+ height: surface.Canvas.LocalClipBounds.Height);
+ }
+
+ public static PixelRect GetPixelRect(this SKSurface surface)
+ {
+ return new PixelRect(
+ left: 0,
+ right: surface.Canvas.LocalClipBounds.Width,
+ bottom: surface.Canvas.LocalClipBounds.Height,
+ top: 0);
+ }
+
+ public static PixelRect ToPixelRect(this SKRect rect)
+ {
+ return new PixelRect(rect.Left, rect.Right, rect.Bottom, rect.Top);
+ }
+
+ public static void ApplyToPaint(this LineStyle style, SKPaint paint)
+ {
+ paint.Shader = null;
+ paint.IsStroke = true;
+ paint.Color = style.Color.ToSkColor();
+ paint.StrokeWidth = style.Width;
+ paint.PathEffect = style.Pattern.GetPathEffect();
+ paint.IsAntialias = style.AntiAlias;
+ }
+
+ public static void ApplyToPaint(this FillStyle fs, SKPaint paint)
+ {
+ paint.Color = fs.Color.ToSkColor();
+ paint.IsStroke = false;
+ paint.IsAntialias = fs.AntiAlias;
+
+ if (fs.Hatch is not null)
+ {
+ paint.Shader = fs.Hatch.GetShader(fs.Color, fs.HatchColor);
+ }
+ else
+ {
+ paint.Shader = null;
+ }
+ }
+
+ public static void ApplyToPaint(this FontStyle fontStyle, SKPaint paint)
+ {
+ paint.Shader = null;
+ paint.IsStroke = false;
+ paint.Typeface = fontStyle.Typeface;
+ paint.TextSize = fontStyle.Size;
+ paint.Color = fontStyle.Color.ToSkColor();
+ paint.IsAntialias = fontStyle.AntiAlias;
+ paint.FakeBoldText = fontStyle.Bold;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SystemDrawingExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SystemDrawingExtensions.cs
new file mode 100644
index 000000000..d50cdc446
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Extensions/SystemDrawingExtensions.cs
@@ -0,0 +1,19 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class SystemDrawingExtensions
+ {
+ public static Color ToColor(this System.Drawing.Color color) => new Color(color.R, color.G, color.B, color.A);
+
+ public static PixelRect ToPixelRect(this System.Drawing.Rectangle rect) => new PixelRect(rect.Left, rect.Right, rect.Bottom, rect.Top);
+
+ public static PixelRect ToPixelRect(this System.Drawing.RectangleF rect) => new PixelRect(rect.Left, rect.Right, rect.Bottom, rect.Top);
+
+ public static PixelSize ToPixelSize(this System.Drawing.Size size) => new PixelSize(size.Width, size.Height);
+
+ public static PixelSize ToPixelSize(this System.Drawing.SizeF size) => new PixelSize(size.Width, size.Height);
+
+ public static Pixel ToPixel(this System.Drawing.Point point) => new Pixel(point.X, point.Y);
+
+ public static Pixel ToPixel(this System.Drawing.PointF point) => new Pixel(point.X, point.Y);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/BollingerBands.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/BollingerBands.cs
new file mode 100644
index 000000000..ce7828302
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/BollingerBands.cs
@@ -0,0 +1,33 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class BollingerBands
+ {
+ public readonly double[] Means;
+ public readonly double[] UpperValues;
+ public readonly double[] LowerValues;
+ public readonly DateTime[] DateTimes;
+ public readonly double[] Dates;
+
+ public BollingerBands(List ohlcs, int n, double sdCoeff = 2)
+ {
+ double[] prices = ohlcs.Select(x => x.Close).ToArray();
+ double[] sma = Series.MovingAverage(prices, n, preserveLength: true);
+ double[] smstd = Series.SimpleMovingStandardDeviation(prices, n, preserveLength: true);
+
+ UpperValues = new double[prices.Length];
+ LowerValues = new double[prices.Length];
+ for (int i = 0; i < prices.Length; i++)
+ {
+ LowerValues[i] = sma[i] - sdCoeff * smstd[i];
+ UpperValues[i] = sma[i] + sdCoeff * smstd[i];
+ }
+
+ // skip the first points which all contain NaN
+ Means = sma.Skip(n).ToArray();
+ LowerValues = LowerValues.Skip(n).ToArray();
+ UpperValues = UpperValues.Skip(n).ToArray();
+ DateTimes = ohlcs.Skip(n).Select(x => x.DateTime).ToArray();
+ Dates = DateTimes.Select(x => x.ToOADate()).ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/SimpleMovingAverage.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/SimpleMovingAverage.cs
new file mode 100644
index 000000000..b26b74aaf
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Finance/SimpleMovingAverage.cs
@@ -0,0 +1,17 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class SimpleMovingAverage
+ {
+ public readonly double[] Means;
+ public readonly DateTime[] DateTimes;
+ public readonly double[] Dates;
+
+ public SimpleMovingAverage(List ohlcs, int n)
+ {
+ double[] prices = ohlcs.Select(x => x.Close).ToArray();
+ Means = Series.MovingAverage(prices, n);
+ DateTimes = ohlcs.Skip(n).Select(x => x.DateTime).ToArray();
+ Dates = DateTimes.Select(x => x.ToOADate()).ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/AxisManager.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/AxisManager.cs
new file mode 100644
index 000000000..2c9c1b7f3
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/AxisManager.cs
@@ -0,0 +1,450 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class AxisManager
+ {
+ private readonly Plot _plot;
+
+ ///
+ /// Logic that determines padding around the data area when is called
+ ///
+ public IAutoScaler AutoScaler { get; set; } = new FractionalAutoScaler(.1, .15);
+
+ ///
+ /// Horizontal axes
+ ///
+ internal List XAxes { get; } = new();
+
+ ///
+ /// Vertical axes
+ ///
+ internal List YAxes { get; } = new();
+
+ ///
+ /// Panels take up spce on one side of the data area (like a colorbar)
+ ///
+ internal List Panels { get; } = new();
+
+ ///
+ /// A special panel
+ ///
+ public TitlePanel Title { get; } = new();
+
+ ///
+ /// All axes
+ ///
+ public IEnumerable GetAxes() => XAxes.Cast().Concat(YAxes);
+
+ ///
+ /// All axes with the given edge
+ ///
+ public IEnumerable GetAxes(Edge edge) => GetAxes().Where(x => x.Edge == edge).ToArray();
+
+ ///
+ /// Returns all axes, panels, and the title
+ ///
+ ///
+ internal IPanel[] GetPanels() => GetAxes().Concat(Panels).Concat(new[] { Title }).ToArray();
+
+ ///
+ /// The primary horizontal axis above the plot
+ ///
+ public IXAxis Top => XAxes.First(x => x.Edge == Edge.Top);
+
+ ///
+ /// The primary horizontal axis below the plot
+ ///
+ public IXAxis Bottom => XAxes.First(x => x.Edge == Edge.Bottom);
+
+ ///
+ /// The primary vertical axis to the left of the plot
+ ///
+ public IYAxis Left => YAxes.First(x => x.Edge == Edge.Left);
+
+ ///
+ /// The primary vertical axis to the right of the plot
+ ///
+ public IYAxis Right => YAxes.First(x => x.Edge == Edge.Right);
+
+ ///
+ /// All grids
+ ///
+ public List Grids { get; } = new();
+
+ ///
+ /// Rules that are applied before each render
+ ///
+ public List Rules { get; } = new();
+
+ ///
+ /// Contains state and logic for axes
+ ///
+ public AxisManager(Plot plot)
+ {
+ _plot = plot;
+
+ // setup the default primary X and Y axes
+ IXAxis xAxisPrimary = new BottomAxis();
+ IYAxis yAxisPrimary = new LeftAxis();
+ XAxes.Add(xAxisPrimary);
+ YAxes.Add(yAxisPrimary);
+
+ // add labeless secondary axes to get right side ticks and padding
+ IXAxis xAxisSecondary = new TopAxis();
+ IYAxis yAxisSecondary = new RightAxis();
+ XAxes.Add(xAxisSecondary);
+ YAxes.Add(yAxisSecondary);
+
+ // add a default grid using the primary axes
+ IGrid grid = new DefaultGrid(xAxisPrimary, yAxisPrimary);
+ Grids.Add(grid);
+ }
+
+ public void Clear()
+ {
+ Grids.Clear();
+ Panels.Clear();
+ YAxes.Clear();
+ XAxes.Clear();
+ }
+
+ ///
+ /// Remove all axes that lie on the given edge.
+ ///
+ public void Remove(Edge edge)
+ {
+ foreach (IAxis axis in GetAxes(edge).ToArray())
+ {
+ if (axis is IXAxis xAxis)
+ {
+ _plot.Axes.XAxes.Remove(xAxis);
+ }
+
+ if (axis is IYAxis yAxis)
+ {
+ _plot.Axes.YAxes.Remove(yAxis);
+ }
+ }
+ }
+
+ ///
+ /// Remove all axes on the given edge and add a new one that displays DateTime ticks
+ ///
+ public void DateTimeTicks(Edge edge)
+ {
+ Remove(edge);
+
+ IXAxis dateAxis = edge switch
+ {
+ Edge.Left => throw new NotImplementedException(), // TODO: support vertical DateTime axes
+ Edge.Right => throw new NotImplementedException(),
+ Edge.Bottom => new DateTimeXAxis(),
+ Edge.Top => throw new NotImplementedException(),
+ _ => throw new NotImplementedException(),
+ };
+
+ _plot.Axes.XAxes.Add(dateAxis);
+
+ foreach (IGrid grid in _plot.Axes.Grids)
+ {
+ grid.Replace(dateAxis);
+ }
+ }
+
+ ///
+ /// Crete a new axis, add it to the plot, and return it
+ ///
+ public LeftAxis AddLeftAxis()
+ {
+ LeftAxis axis = new();
+ YAxes.Add(axis);
+ return axis;
+ }
+
+ ///
+ /// Crete a new axis, add it to the plot, and return it
+ ///
+ public RightAxis AddRightAxis()
+ {
+ RightAxis axis = new();
+ YAxes.Add(axis);
+ return axis;
+ }
+
+ ///
+ /// Crete a new axis, add it to the plot, and return it
+ ///
+ public BottomAxis AddBottomAxis()
+ {
+ BottomAxis axis = new();
+ XAxes.Add(axis);
+ return axis;
+ }
+
+ ///
+ /// Crete a new axis, add it to the plot, and return it
+ ///
+ public TopAxis AddTopAxis()
+ {
+ TopAxis axis = new();
+ XAxes.Add(axis);
+ return axis;
+ }
+
+
+ public void SetLimitsX(double left, double right, IXAxis xAxis)
+ {
+ xAxis.Min = left;
+ xAxis.Max = right;
+ }
+
+ public void SetLimitsY(double bottom, double top, IYAxis yAxis)
+ {
+ yAxis.Min = bottom;
+ yAxis.Max = top;
+ }
+
+ public void SetLimitsX(double left, double right)
+ {
+ SetLimitsX(left, right, Bottom);
+ }
+
+ public void SetLimitsY(double bottom, double top)
+ {
+ SetLimitsY(bottom, top, Left);
+ }
+
+ public void SetLimits(double left, double right, double bottom, double top)
+ {
+ SetLimitsX(left, right, Bottom);
+ SetLimitsY(bottom, top, Left);
+ }
+
+ public void SetLimits(double left, double right, double bottom, double top, IXAxis xAxis, IYAxis yAxis)
+ {
+ SetLimitsX(left, right, xAxis);
+ SetLimitsY(bottom, top, yAxis);
+ }
+
+ public void SetLimits(double? left = null, double? right = null, double? bottom = null, double? top = null)
+ {
+ SetLimitsX(left ?? Bottom.Min, right ?? Bottom.Max);
+ SetLimitsY(bottom ?? Left.Min, top ?? Left.Max);
+ }
+
+ public void SetLimits(CoordinateRect rect)
+ {
+ SetLimits(rect.Left, rect.Right, rect.Bottom, rect.Top);
+ }
+
+ public void SetLimitsX(CoordinateRect limits)
+ {
+ SetLimitsX(limits.Left, limits.Right, Bottom);
+ }
+
+ public void SetLimitsY(CoordinateRect limits)
+ {
+ SetLimitsY(limits.Bottom, limits.Top, Left);
+ }
+
+ public void SetLimitsX(AxisLimits limits)
+ {
+ SetLimitsX(limits.Left, limits.Right);
+ }
+
+ public void SetLimitsX(AxisLimits limits, IXAxis xAxis)
+ {
+ SetLimitsX(limits.Left, limits.Right, xAxis);
+ }
+
+ public void SetLimitsY(AxisLimits limits)
+ {
+ SetLimitsY(limits.Bottom, limits.Top);
+ }
+
+ public void SetLimitsY(AxisLimits limits, IYAxis yAxis)
+ {
+ SetLimitsY(limits.Bottom, limits.Top, yAxis);
+ }
+
+ public void SetLimits(AxisLimits limits)
+ {
+ SetLimits(limits, Bottom, Left);
+ }
+
+ public void SetLimits(AxisLimits limits, IXAxis xAxis, IYAxis yAxis)
+ {
+ SetLimitsX(limits.Left, limits.Right, xAxis);
+ SetLimitsY(limits.Bottom, limits.Top, yAxis);
+ }
+
+ public void SetLimits(CoordinateRange xRange, CoordinateRange yRange)
+ {
+ AxisLimits limits = new(xRange.Min, xRange.Max, yRange.Min, yRange.Max);
+ SetLimits(limits);
+ }
+
+ ///
+ /// Return the 2D axis limits for the default axes
+ ///
+ public AxisLimits GetLimits()
+ {
+ return new AxisLimits(
+ Bottom.Min,
+ Bottom.Max,
+ Left.Min,
+ Left.Max);
+ }
+
+ ///
+ /// Return the 2D axis limits for the given X/Y axis pair
+ ///
+ public AxisLimits GetLimits(IXAxis xAxis, IYAxis yAxis)
+ {
+ return new AxisLimits(xAxis.Min, xAxis.Max, yAxis.Min, yAxis.Max);
+ }
+
+ ///
+ /// Return the 2D axis limits for the given X/Y axis pair
+ ///
+ public AxisLimits GetLimits(IAxes axes)
+ {
+ return GetLimits(axes.XAxis, axes.YAxis);
+ }
+
+ ///
+ /// Adds the default X and Y axes to all plottables with unset axes
+ ///
+ internal void ReplaceNullAxesWithDefaults()
+ {
+ foreach (var plottable in _plot.PlottableList)
+ {
+ if (plottable.Axes.XAxis is null)
+ {
+ plottable.Axes.XAxis = Bottom;
+ }
+
+ if (plottable.Axes.YAxis is null)
+ {
+ plottable.Axes.YAxis = Left;
+ }
+ }
+ }
+
+ ///
+ /// Automatically scale all axes to fit the data in all plottables
+ ///
+ public void AutoScale()
+ {
+ ReplaceNullAxesWithDefaults();
+ AutoScaler.AutoScaleAll(_plot.PlottableList); // TODO: this should call the autoscaler's GetAxisLimits()
+ }
+
+ public void AutoScaleX()
+ {
+ AutoScaleX(Bottom);
+ }
+
+ public void AutoScaleY()
+ {
+ AutoScaleY(Left);
+ }
+
+ public void AutoScaleX(IXAxis xAxis)
+ {
+ ReplaceNullAxesWithDefaults();
+ AxisLimits limits = AutoScaler.GetAxisLimits(_plot, xAxis, Left);
+ SetLimitsX(limits.Left, limits.Right, xAxis);
+ }
+
+ public void AutoScaleY(IYAxis yAxis)
+ {
+ ReplaceNullAxesWithDefaults();
+ AxisLimits limits = AutoScaler.GetAxisLimits(_plot, Bottom, yAxis);
+ SetLimitsY(limits.Bottom, limits.Top, yAxis);
+ }
+
+ ///
+ /// Autoscale the given axes to accommodate the data from all plottables that use them
+ ///
+ public void AutoScale(IXAxis xAxis, IYAxis yAxis, bool horizontal = true, bool vertical = true)
+ {
+ ReplaceNullAxesWithDefaults();
+
+ AxisLimits limits = AutoScaler.GetAxisLimits(_plot, xAxis, yAxis);
+
+ if (horizontal)
+ {
+ SetLimitsX(limits.Left, limits.Right, xAxis);
+ }
+
+ if (vertical)
+ {
+ SetLimitsY(limits.Bottom, limits.Top, yAxis);
+ }
+ }
+
+ ///
+ /// Adjust limits all axes to pan by the given distance in coordinate space
+ ///
+ public void Pan(CoordinateSize distance)
+ {
+ XAxes.ForEach(x => x.Range.Pan(distance.Width));
+ YAxes.ForEach(x => x.Range.Pan(distance.Height));
+ }
+
+ ///
+ /// Adjust limits all axes to pan by the given distance in pixel space
+ ///
+ public void Pan(PixelSize distance)
+ {
+ if (_plot.RenderManager.LastRender.Count == 0)
+ {
+ throw new InvalidOperationException("at least one render is required before pixel panning is possible");
+ }
+
+ XAxes.ForEach(ax =>
+ ax.Range.Pan(ax.GetCoordinateDistance(distance.Width, _plot.RenderManager.LastRender.DataRect)));
+ YAxes.ForEach(ax =>
+ ax.Range.Pan(ax.GetCoordinateDistance(distance.Height, _plot.RenderManager.LastRender.DataRect)));
+ }
+
+ ///
+ /// Modify limits of all axes to apply the given zoom.
+ /// Fractional values >1 zoom in and <1 zoom out.
+ ///
+ public void Zoom(double fracX = 1.0, double fracY = 1.0)
+ {
+ XAxes.ForEach(xAxis => xAxis.Range.ZoomFrac(fracX));
+ YAxes.ForEach(yAxis => yAxis.Range.ZoomFrac(fracY));
+ }
+
+ ///
+ /// Reset plot data margins to their default value.
+ ///
+ public void Margins()
+ {
+ AutoScaler = new FractionalAutoScaler();
+ AutoScale();
+ }
+
+ ///
+ /// Define the amount of whitespace to place around the data area when calling .
+ /// Values are a fraction from 0 (tightly fit the data) to 1 (lots of whitespace).
+ ///
+ public void Margins(double horizontal = 0.1, double vertical = .15)
+ {
+ AutoScaler = new FractionalAutoScaler(horizontal, vertical);
+ AutoScale();
+ }
+
+ ///
+ /// Define the amount of whitespace to place around the data area when calling .
+ /// Values are a fraction from 0 (tightly fit the data) to 1 (lots of whitespace).
+ ///
+ public void Margins(double left = .05, double right = .05, double bottom = .07, double top = .07)
+ {
+ AutoScaler = new FractionalAutoScaler(left, right, bottom, top);
+ AutoScale();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/CompilerFeatureRequiredAttribute.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/CompilerFeatureRequiredAttribute.cs
new file mode 100644
index 000000000..bc7483434
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/CompilerFeatureRequiredAttribute.cs
@@ -0,0 +1,13 @@
+namespace System.Runtime.CompilerServices
+{
+ ///
+ /// Allows required members in older .NET versions
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class CompilerFeatureRequiredAttribute : Attribute
+ {
+ public CompilerFeatureRequiredAttribute(string _)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/DataOperations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/DataOperations.cs
new file mode 100644
index 000000000..473a0f57e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/DataOperations.cs
@@ -0,0 +1,65 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class DataOperations
+ {
+ public static double[,] ResizeHalf(double[,] values)
+ {
+ var height = values.GetLength(0);
+ var width = values.GetLength(1);
+
+ var heightNew = (int)Math.Floor((double)height / 2);
+ var widthNew = (int)Math.Floor((double)width / 2);
+
+ var output = new double[heightNew, widthNew];
+
+ for (var y = 0; y < heightNew; y++)
+ {
+ for (var x = 0; x < widthNew; x++)
+ {
+ double sum = 0;
+ sum += values[y * 2, x * 2];
+ sum += values[y * 2 + 1, x * 2];
+ sum += values[y * 2, x * 2 + 1];
+ sum += values[y * 2 + 1, x * 2 + 1];
+ output[y, x] = sum / 4;
+ }
+ }
+
+ return output;
+ }
+
+ public static double[,] ReplaceNullWithNaN(double?[,] values)
+ {
+ var height = values.GetLength(0);
+ var width = values.GetLength(1);
+ var output = new double[height, width];
+
+ for (var y = 0; y < height; y++)
+ {
+ for (var x = 0; x < width; x++)
+ {
+ output[y, x] = values[y, x] ?? double.NaN;
+ }
+ }
+
+ return output;
+ }
+
+ public static double?[,] ReplaceNaNWithNull(double[,] values)
+ {
+ var height = values.GetLength(0);
+ var width = values.GetLength(1);
+ var output = new double?[height, width];
+
+ for (var y = 0; y < height; y++)
+ {
+ for (var x = 0; x < width; x++)
+ {
+ output[y, x] = double.IsNaN(values[y, x]) ? null : values[y, x];
+ }
+ }
+
+ return output;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Drawing.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Drawing.cs
new file mode 100644
index 000000000..49c1149b5
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Drawing.cs
@@ -0,0 +1,319 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Common operations using the default rendering system.
+ ///
+ public static class Drawing
+ {
+ public static PixelSize MeasureString(string text, SKPaint paint)
+ {
+ var strings = text.Split('\n');
+ if (strings.Length > 1)
+ {
+ return strings
+ .Select(s => MeasureString(s, paint))
+ .Aggregate((a, b) => new PixelSize(Math.Max(a.Width, b.Width), a.Height + b.Height));
+ }
+
+ SKRect bounds = new();
+ paint.MeasureText(text, ref bounds);
+
+ var width = bounds.Width;
+ var height = bounds.Height;
+ return new PixelSize(width, height);
+ }
+
+ public static PixelSize MeasureLargestString(string[] strings, SKPaint paint)
+ {
+ float maxWidth = 0;
+ float maxHeight = 0;
+
+ for (var i = 0; i < strings.Length; i++)
+ {
+ PixelSize tickSize = MeasureString(strings[i], paint);
+ maxWidth = Math.Max(maxWidth, tickSize.Width);
+ maxHeight = Math.Max(maxHeight, tickSize.Height);
+ }
+
+ return new PixelSize(maxWidth, maxHeight);
+ }
+
+ public static void DrawLine(SKCanvas canvas, SKPaint paint, PixelLine pixelLine)
+ {
+ DrawLine(canvas, paint, pixelLine.Pixel1, pixelLine.Pixel2);
+ }
+
+ public static void DrawLine(SKCanvas canvas, SKPaint paint, Pixel pt1, Pixel pt2)
+ {
+ if (paint.StrokeWidth == 0)
+ {
+ return;
+ }
+
+ canvas.DrawLine(pt1.ToSkPoint(), pt2.ToSkPoint(), paint);
+ }
+
+ public static void DrawLine(SKCanvas canvas, SKPaint paint, PixelLine pxLine, LineStyle lineStyle)
+ {
+ DrawLine(canvas, paint, pxLine.Pixel1, pxLine.Pixel2, lineStyle);
+ }
+
+ public static void DrawLine(SKCanvas canvas, SKPaint paint, Pixel pt1, Pixel pt2, LineStyle lineStyle)
+ {
+ if (lineStyle.Width == 0 || lineStyle.IsVisible == false) // TODO: move this check in the LineStyle class
+ {
+ return;
+ }
+
+ lineStyle.ApplyToPaint(paint);
+ if (paint.StrokeWidth == 0)
+ {
+ return;
+ }
+
+ canvas.DrawLine(pt1.ToSkPoint(), pt2.ToSkPoint(), paint);
+ }
+
+ public static void DrawLine(SKCanvas canvas, SKPaint paint, Pixel pt1, Pixel pt2, Color color, float width = 1, bool antiAlias = true, LinePattern pattern = LinePattern.Solid)
+ {
+ if (width == 0)
+ {
+ return;
+ }
+
+ paint.Color = color.ToSkColor();
+ paint.IsStroke = true;
+ paint.IsAntialias = antiAlias;
+ paint.StrokeWidth = width;
+ paint.PathEffect = pattern.GetPathEffect();
+ if (paint.StrokeWidth == 0)
+ {
+ return;
+ }
+
+ canvas.DrawLine(pt1.ToSkPoint(), pt2.ToSkPoint(), paint);
+ }
+
+ public static void DrawLines(SKCanvas canvas, Pixel[] starts, Pixel[] ends, Color color, float width = 1, bool antiAlias = true, LinePattern pattern = LinePattern.Solid)
+ {
+ if (width == 0)
+ {
+ return;
+ }
+
+ if (starts.Length != ends.Length)
+ {
+ throw new ArgumentException($"{nameof(starts)} and {nameof(ends)} must have same length");
+ }
+
+ using SKPaint paint = new()
+ {
+ Color = color.ToSkColor(),
+ IsStroke = true,
+ IsAntialias = antiAlias,
+ StrokeWidth = width,
+ PathEffect = pattern.GetPathEffect(),
+ };
+
+ using SKPath path = new();
+
+ for (var i = 0; i < starts.Length; i++)
+ {
+ path.MoveTo(starts[i].X, starts[i].Y);
+ path.LineTo(ends[i].X, ends[i].Y);
+ }
+
+ canvas.DrawPath(path, paint);
+ }
+
+ public static void DrawLines(SKCanvas canvas, SKPaint paint, IEnumerable pixels, Color color, float width = 1, bool antiAlias = true, LinePattern pattern = LinePattern.Solid)
+ {
+ LineStyle ls = new()
+ {
+ Color = color,
+ AntiAlias = antiAlias,
+ Width = width,
+ Pattern = pattern,
+ };
+
+ DrawLines(canvas, paint, pixels, ls);
+ }
+
+ public static void DrawLines(SKCanvas canvas, SKPaint paint, IEnumerable pixels, LineStyle lineStyle)
+ {
+ if (lineStyle.Width == 0 || lineStyle.IsVisible == false || pixels.Count() < 2)
+ {
+ return;
+ }
+
+ lineStyle.ApplyToPaint(paint);
+
+ using SKPath path = new();
+
+ path.MoveTo(pixels.First().ToSkPoint());
+
+ foreach (var pixel in pixels.Skip(1))
+ {
+ path.LineTo(pixel.ToSkPoint());
+ }
+
+ canvas.DrawPath(path, paint);
+ }
+
+ public static void Fillectangle(SKCanvas canvas, PixelRect rect, SKPaint paint)
+ {
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ }
+
+ public static void Fillectangle(SKCanvas canvas, PixelRect rect, Color color)
+ {
+ using SKPaint paint = new()
+ {
+ Color = color.ToSkColor(),
+ IsStroke = false,
+ IsAntialias = true,
+ };
+
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ }
+
+ public static void DrawRectangle(SKCanvas canvas, PixelRect rect, SKPaint paint)
+ {
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ }
+
+ public static void DrawRectangle(SKCanvas canvas, PixelRect rect, Color color, float lineWidth = 1)
+ {
+ using SKPaint paint = new()
+ {
+ Color = color.ToSkColor(),
+ IsStroke = true,
+ StrokeWidth = lineWidth,
+ IsAntialias = true,
+ };
+
+ DrawRectangle(canvas, rect, paint);
+ }
+
+ public static void DrawDebugRectangle(SKCanvas canvas, PixelRect rect, Pixel point, Color color, float lineWidth = 1)
+ {
+ using SKPaint paint = new()
+ {
+ Color = color.ToSkColor(),
+ IsStroke = true,
+ StrokeWidth = lineWidth,
+ IsAntialias = true,
+ };
+
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ canvas.DrawLine(rect.BottomLeft.ToSkPoint(), rect.TopRight.ToSkPoint(), paint);
+ canvas.DrawLine(rect.TopLeft.ToSkPoint(), rect.BottomRight.ToSkPoint(), paint);
+
+ canvas.DrawCircle(point.ToSkPoint(), 5, paint);
+
+ paint.IsStroke = false;
+ paint.Color = paint.Color.WithAlpha(20);
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ }
+
+ public static void DrawCircle(SKCanvas canvas, Pixel center, Color color, float radius = 5, bool fill = true)
+ {
+ using SKPaint paint = new()
+ {
+ Color = color.ToSkColor(),
+ IsStroke = !fill,
+ IsAntialias = true,
+ };
+
+ canvas.DrawCircle(center.ToSkPoint(), radius, paint);
+ }
+
+ public static void DrawMarker(SKCanvas canvas, SKPaint paint, Pixel pixel, MarkerStyle style)
+ {
+ if (!style.IsVisible)
+ {
+ return;
+ }
+
+ IMarker renderer = style.Shape.GetRenderer();
+
+ renderer.Render(canvas, paint, pixel, style.Size, style.Fill, style.Outline);
+ }
+
+ public static void DrawMarkers(SKCanvas canvas, SKPaint paint, IEnumerable pixels, MarkerStyle style)
+ {
+ if (!style.IsVisible)
+ {
+ return;
+ }
+
+ IMarker renderer = style.Shape.GetRenderer();
+
+ foreach (Pixel pixel in pixels)
+ {
+ renderer.Render(canvas, paint, pixel, style.Size, style.Fill, style.Outline);
+ }
+ }
+
+ public static SKBitmap BitmapFromArgbs(uint[] argbs, int width, int height)
+ {
+ var handle = GCHandle.Alloc(argbs, GCHandleType.Pinned);
+
+ var imageInfo = new SKImageInfo(width, height);
+ var bmp = new SKBitmap(imageInfo);
+ bmp.InstallPixels(
+ info: imageInfo,
+ pixels: handle.AddrOfPinnedObject(),
+ rowBytes: imageInfo.RowBytes,
+ releaseProc: (IntPtr _, object _) => handle.Free());
+
+ return bmp;
+ }
+
+ public static SKColorFilter GetMaskColorFilter(Color foreground, Color? background = null)
+ {
+ // This function and the math is explained here: https://bclehmann.github.io/2022/11/06/UnmaskingWithSKColorFilter.html
+
+ background ??= Colors.Black;
+
+ float redDifference = foreground.Red - background.Value.Red;
+ float greenDifference = foreground.Green - background.Value.Green;
+ float blueDifference = foreground.Blue - background.Value.Blue;
+ float alphaDifference = foreground.Alpha - background.Value.Alpha;
+
+ // See https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/effects/color-filters
+ // for an explanation of this matrix
+ //
+ // Essentially, this matrix maps all gray colours to a line from `background.Value` to `foreground`.
+ // Black and white are at the extremes on this line,
+ // so they get mapped to `background.Value` and `foreground` respectively
+ var mat = new float[] {
+ redDifference / 255, 0, 0, 0, background.Value.Red / 255.0f,
+ 0, greenDifference / 255, 0, 0, background.Value.Green / 255.0f,
+ 0, 0, blueDifference / 255, 0, background.Value.Blue / 255.0f,
+ alphaDifference / 255, 0, 0, 0, background.Value.Alpha / 255.0f,
+ };
+
+ var filter = SKColorFilter.CreateColorMatrix(mat);
+ return filter;
+ }
+
+ public static SKSurface CreateSurface(int width, int height)
+ {
+ SKImageInfo imageInfo = new(
+ width: width,
+ height: height,
+ colorType: SKColorType.Rgba8888,
+ alphaType: SKAlphaType.Premul);
+
+ return SKSurface.Create(imageInfo);
+ }
+
+ public static void SavePng(SKSurface surface, string filename)
+ {
+ using var skimg = surface.Snapshot();
+ Image img = new(skimg);
+ img.SavePng(filename);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Fonts.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Fonts.cs
new file mode 100644
index 000000000..129617e6b
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Fonts.cs
@@ -0,0 +1,283 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Cross-platform tools for working with fonts
+ ///
+ public static class Fonts
+ {
+ ///
+ /// This font is used for almost all text rendering.
+ ///
+ public static string Default { get; set; } = InstalledSansFont();
+
+ ///
+ /// Name of a sans-serif font present on the system
+ ///
+ public static string Sans { get; set; } = InstalledSansFont();
+
+ ///
+ /// Name of a serif font present on the system
+ ///
+ public static string Serif { get; set; } = InstalledSerifFont();
+
+ ///
+ /// Name of a monospace font present on the system
+ ///
+ public static string Monospace { get; set; } = InstalledMonospaceFont();
+
+ ///
+ /// The default font on the system
+ ///
+ public static string System { get; } = SKTypeface.Default.FamilyName;
+
+ ///
+ /// Returns true if the given font is present on the system
+ ///
+ public static bool Exists(string fontName)
+ {
+ return GetInstalledFonts().Contains(fontName);
+ }
+
+ #region PRIVATE
+
+ private static HashSet GetInstalledFonts()
+ {
+ return new(SKFontManager.Default.FontFamilies, StringComparer.InvariantCultureIgnoreCase);
+ }
+
+ private static string InstalledSansFont()
+ {
+ // Prefer the the system default because it is probably the best for international users
+ // https://github.com/ScottPlot/ScottPlot/issues/2746
+ var font = SKTypeface.Default.FamilyName;
+
+ // Favor "Open Sans" over "Segoe UI" because better anti-aliasing
+ var installedFonts = GetInstalledFonts();
+ if (font == "Segoe UI" && installedFonts.Contains("Open Sans"))
+ {
+ font = "Open Sans";
+ }
+
+ return font;
+ }
+
+ private static string InstalledMonospaceFont()
+ {
+ var installedFonts = GetInstalledFonts();
+
+ string[] preferredFonts = { "Roboto Mono", "Consolas", "DejaVu Sans Mono", "Courier" };
+ foreach (var preferredFont in preferredFonts)
+ {
+ if (installedFonts.Contains(preferredFont))
+ {
+ return SKTypeface.FromFamilyName(preferredFont).FamilyName;
+ }
+ }
+
+ return SKTypeface.Default.FamilyName;
+ }
+
+ private static string InstalledSerifFont()
+ {
+ var installedFonts = GetInstalledFonts();
+
+ string[] preferredFonts = { "Times New Roman", "DejaVu Serif", "Times" };
+ foreach (var preferredFont in preferredFonts)
+ {
+ if (installedFonts.Contains(preferredFont))
+ {
+ return SKTypeface.FromFamilyName(preferredFont).FamilyName;
+ }
+ }
+
+ return SKTypeface.Default.FamilyName;
+ }
+
+ #endregion
+
+ #region Font Detection
+
+ ///
+ /// Use the characters in the string to detetermine an installed system font
+ /// most likely to support this character set.
+ /// Returns the system font if an ideal font cannot be determined.
+ ///
+ public static string Detect(string text)
+ {
+ // TODO: Use the ScottPlot default font. Maybe give as an input parameter?
+ // TODO: Replace unrenderable characters with "�"
+ // Should replace characters consisting of multiple code points, as well as missing glyphs.
+ //
+ // We ignore Unicode characters that are made up of multiple code points since it looks like they
+ // cannot be rendered without more work, e.g. by using HarfBuzz or similar at higher levels.
+ //
+ // The function breaks down the input text string into "text elements" (=grapheme clusters).
+ // A text element can consist of multiple Unicode code points.
+ // Each code point can consist of 1 or 2 C# 'char's (=UTF-16 code units).
+
+ var defaultFontFamily = GetDefaultFontFamily(); // Should use the ScottPlot default font instead
+ var standaloneCodePoints = GetStandaloneCodePoints(text);
+
+ List candidateFontNames = GetCandidateFontsForString(standaloneCodePoints);
+
+ if (!candidateFontNames.Any())
+ {
+ return string.Empty; // TODO: Signal an error somehow? Could return default font name.
+ }
+
+ // We prefer the default font if it can render the string without missing glyphs
+ if (candidateFontNames.Contains(defaultFontFamily) &&
+ CountMissingGlyphs(defaultFontFamily, standaloneCodePoints) == 0)
+ {
+ return defaultFontFamily;
+ }
+
+ var bestFontName = candidateFontNames
+ .Select(fontName => new { fontName, NumMissingGlyphs = CountMissingGlyphs(fontName, standaloneCodePoints) })
+ .OrderBy(result => result.NumMissingGlyphs)
+ .First()
+ .fontName;
+
+ return bestFontName;
+ }
+
+ public static string GetDefaultFontFamily()
+ {
+ using var typeface = SKFontManager.Default.MatchCharacter(' ');
+
+ if (typeface != null)
+ {
+ return typeface.FamilyName;
+ }
+ else
+ {
+ return string.Empty;
+ }
+ }
+
+ public static List GetCandidateFontsForString(List standaloneCodePoints)
+ {
+ HashSet candidateFontNames = []; // Using HashSet to avoid duplicates
+
+ foreach (var standaloneCodePoint in standaloneCodePoints)
+ {
+ using var typeface = SKFontManager.Default.MatchCharacter(standaloneCodePoint);
+ if (typeface != null)
+ {
+ candidateFontNames.Add(typeface.FamilyName);
+ }
+
+ var ch = char.ConvertFromUtf32(standaloneCodePoint);
+ DebugUtilities.WriteLine($"Input codepoint '{standaloneCodePoint}', char '{ch}': Typeface = {typeface?.FamilyName}");
+ }
+
+ return candidateFontNames.ToList();
+ }
+
+ public static int CountMissingGlyphs(string fontName, List standaloneCodePoints)
+ {
+ var missingGlyphCount = 0;
+
+ using var typeface = SKTypeface.FromFamilyName(fontName);
+ if (typeface != null)
+ {
+ foreach (var standaloneCodePoint in standaloneCodePoints)
+ {
+ ReadOnlySpan codePoints = [standaloneCodePoint];
+ if (!typeface.ContainsGlyphs(codePoints))
+ {
+ missingGlyphCount++;
+ }
+ }
+ var s = string.Join("", standaloneCodePoints.Select(char.ConvertFromUtf32));
+ DebugUtilities.WriteLine($"Input '{s}': Font {fontName} has {missingGlyphCount} items with missing glyphs");
+ }
+ else
+ {
+ missingGlyphCount = int.MaxValue;
+ }
+
+ return missingGlyphCount;
+ }
+
+ public static List GetStandaloneCodePoints(string inputText)
+ {
+ List textElements = ConvertStringToTextElements(inputText);
+ IEnumerable> codePoints = textElements.Select(ConvertTextElementToUtf32CodePoints);
+ var standaloneCodePoints = GetStandaloneCodePoints(codePoints);
+
+ return standaloneCodePoints;
+ }
+
+ public static List ConvertStringToTextElements(string textString)
+ {
+ List resultList = [];
+
+ var chars = StringInfo.GetTextElementEnumerator(textString);
+ while (chars.MoveNext())
+ {
+ var textElement = chars.GetTextElement();
+
+ resultList.Add(textElement);
+ }
+
+ return resultList;
+ }
+
+
+ ///
+ /// Take a single text element ("grapheme cluster") as input,
+ /// and return one or more Unicode code points.
+ /// The code points are represented with signed ints since that is idiomatic for C#,
+ /// even though they are always unsigned values.
+ ///
+ public static List ConvertTextElementToUtf32CodePoints(string textElement)
+ {
+ List resultList = [];
+
+ var i = 0;
+ while (i < textElement.Length)
+ {
+ // ArgumentOutOfRangeException is possible for malformed input strings,
+ // we let that propagate up to the user
+ var codePoint = char.ConvertToUtf32(textElement, i);
+ resultList.Add(codePoint);
+
+ // Did we consume one or two chars?
+ if (char.IsHighSurrogate(textElement, i))
+ {
+ i += 2;
+ }
+ else
+ {
+ i += 1;
+ }
+ }
+
+ return resultList;
+ }
+
+ public static List GetStandaloneCodePoints(IEnumerable> codePointLists)
+ {
+ // Take a list of code point lists as input.
+ // Each code point list must correspond to a single text element ("grapheme cluster").
+ // Filter the list to retain the code point lists made up of single code points,
+ // i.e. remove combining characters, etc.
+ // Return as a flattened list of the remaining standalone code points.
+
+ List codePoints = [];
+
+ foreach (var codePointList in codePointLists)
+ {
+ if (codePointList.Count == 1)
+ {
+ codePoints.Add(codePointList[0]);
+ }
+ }
+
+ return codePoints;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Generate.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Generate.cs
new file mode 100644
index 000000000..a64ff022f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Generate.cs
@@ -0,0 +1,559 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This class contains methods which generate sample data for testing and demonstration purposes
+ ///
+ public static class Generate
+ {
+ public static RandomDataGenerator RandomData { get; } = new(0);
+
+ #region numerical 1D
+
+ ///
+ /// Return an array of evenly-spaced numbers
+ ///
+ public static double[] Consecutive(int count = 51, double delta = 1, double first = 0)
+ {
+ var ys = new double[count];
+ for (var i = 0; i < ys.Length; i++)
+ {
+ ys[i] = i * delta + first;
+ }
+
+ return ys;
+ }
+
+ ///
+ /// Return an array of sine waves between -1 and 1.
+ /// Values are multiplied by then shifted by .
+ /// Phase shifts the sine wave horizontally between 0 and 2 Pi.
+ ///
+ public static double[] Sin(int count = 51, double mult = 1, double offset = 0, double oscillations = 1, double phase = 0)
+ {
+ var sinScale = 2 * Math.PI * oscillations / (count - 1);
+ var ys = new double[count];
+ for (var i = 0; i < ys.Length; i++)
+ {
+ ys[i] = Math.Sin(i * sinScale + phase * Math.PI * 2) * mult + offset;
+ }
+
+ return ys;
+ }
+
+ ///
+ /// Return an array of cosine waves between -1 and 1.
+ /// Values are multiplied by then shifted by .
+ /// Phase shifts the sine wave horizontally between 0 and 2 Pi.
+ ///
+ public static double[] Cos(int count = 51, double mult = 1, double offset = 0, double oscillations = 1, double phase = 0)
+ {
+ var sinScale = 2 * Math.PI * oscillations / (count - 1);
+ var ys = new double[count];
+ for (var i = 0; i < ys.Length; i++)
+ {
+ ys[i] = Math.Cos(i * sinScale + phase * Math.PI * 2) * mult + offset;
+ }
+
+ return ys;
+ }
+
+ public static double[] NoisySin(Random rand, int count = 51, double noiseLevel = 1)
+ {
+ var data = Sin(count);
+ for (var i = 0; i < data.Length; i++)
+ {
+ data[i] += rand.NextDouble() * noiseLevel;
+ }
+ return data;
+ }
+
+ public static double[] SquareWave(uint cycles = 20, uint pointsPerCycle = 1_000, double duty = .5, double low = 0, double high = 1)
+ {
+ if (duty is < 0 or > 1)
+ {
+ throw new ArgumentException($"{nameof(duty)} must be in the range [0, 1]");
+ }
+
+ var points = cycles * pointsPerCycle;
+ var cyclePointsHigh = (uint)(pointsPerCycle * duty);
+ var cyclePointsLow = pointsPerCycle - cyclePointsHigh;
+
+ var values = new double[points];
+
+ uint i = 0;
+
+ for (var c = 0; c < cycles; c++)
+ {
+ for (var p = 0; p < cyclePointsLow; p++)
+ {
+ values[i++] = low;
+ }
+
+ for (var p = 0; p < cyclePointsHigh; p++)
+ {
+ values[i++] = high;
+ }
+ }
+
+ return values;
+ }
+
+ public static double[] Zeros(int count)
+ {
+ return Repeating(count, 0);
+ }
+
+ public static double[] Ones(int count)
+ {
+ return Repeating(count, 1);
+ }
+
+ public static double[] Repeating(int count, double value)
+ {
+ var values = new double[count];
+
+ for (var i = 0; i < values.Length; i++)
+ {
+ values[i] = value;
+ }
+
+ return values;
+ }
+
+ #endregion
+
+ #region numerical 2D
+
+ ///
+ /// Generates a 2D array of numbers with constant spacing.
+ ///
+ ///
+ ///
+ /// The space between points.
+ /// The first point.
+ ///
+ public static double[,] Consecutive2D(int rows, int columns, double spacing = 1, double offset = 0)
+ {
+ var data = new double[rows, columns];
+
+ var count = offset;
+ for (var y = 0; y < data.GetLength(0); y++)
+ {
+ for (var x = 0; x < data.GetLength(1); x++)
+ {
+ data[y, x] = count;
+ count += spacing;
+ }
+ }
+
+ return data;
+ }
+
+ ///
+ /// Generates a 2D sine pattern.
+ ///
+ ///
+ ///
+ /// Frequency factor in x direction.
+ /// Frequency factor in y direction.
+ /// Intensity factor.
+ public static double[,] Sin2D(int width, int height, double xPeriod = .2, double yPeriod = .2, double multiple = 100)
+ {
+ var intensities = new double[height, width];
+
+ for (var y = 0; y < height; y++)
+ {
+ var siny = Math.Cos(y * yPeriod) * multiple;
+ for (var x = 0; x < width; x++)
+ {
+ var sinx = Math.Sin(x * xPeriod) * multiple;
+ intensities[y, x] = sinx + siny;
+ }
+ }
+
+ return intensities;
+ }
+
+ ///
+ /// Generate a 2D array in a diagonal gradient pattern
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static double[,] Ramp2D(int width, int height, double min = 0, double max = 1)
+ {
+ var intensities = new double[height, width];
+
+ var span = max - min;
+
+ for (var y = 0; y < height; y++)
+ {
+ var fracY = (double)y / height;
+ var valY = fracY * span + min;
+
+ for (var x = 0; x < width; x++)
+ {
+ var fracX = (double)x / width;
+ var valX = fracX * span + min;
+
+ intensities[y, x] = (valX + valY) / 2;
+ }
+ }
+
+ return intensities;
+ }
+
+ #endregion
+
+ #region numerical random
+
+ ///
+ /// Return a series of values starting with and
+ /// each randomly deviating from the previous by at most .
+ ///
+ public static double[] RandomWalk(int count, double mult = 1, double offset = 0)
+ {
+ return RandomData.RandomWalk(count, mult, offset);
+ }
+
+ public class RandomWalker(int seed = 0)
+ {
+ readonly RandomDataGenerator _gen = new(seed);
+ double _lastValue = 0;
+
+ public double GetNext()
+ {
+ var value = _gen.RandomWalk(1, offset: _lastValue)[0];
+ _lastValue = value;
+ return value;
+ }
+
+ public double[] GetNext(int count)
+ {
+ var values = _gen.RandomWalk(count, offset: _lastValue);
+ _lastValue = values[values.Length - 1];
+ return values;
+ }
+ }
+
+ [Obsolete("use RandomSample()")]
+ public static double[] Random(int count, double min = 0, double max = 1)
+ {
+ return RandomSample(count, min, max);
+ }
+
+ ///
+ /// Return an array of random values
+ /// from to
+ ///
+ public static double[] RandomSample(int count, double min = 0, double max = 1)
+ {
+ return Enumerable.Range(0, count)
+ .Select(_ => RandomData.RandomNumber(min, max))
+ .ToArray();
+ }
+
+ public static double[] RandomNormal(int count, double mean = 0, double stdDev = 1)
+ {
+ return Enumerable.Range(0, count)
+ .Select(_ => RandomData.RandomNormalNumber(mean, stdDev))
+ .ToArray();
+ }
+
+ ///
+ /// RandomSample integer between zero (inclusive) and (exclusive)
+ ///
+ public static int RandomInteger(int max)
+ {
+ return RandomData.RandomInteger(max);
+ }
+
+ ///
+ /// RandomSample integer between (inclusive) and (exclusive)
+ ///
+ public static int RandomInteger(int min, int max)
+ {
+ return RandomData.RandomInteger(min, max);
+ }
+
+ ///
+ /// RandomSample integers between zero (inclusive) and (exclusive)
+ ///
+ public static int[] RandomIntegers(int count, int max)
+ {
+ return Enumerable
+ .Range(0, count)
+ .Select(x => RandomData.RandomInteger(max))
+ .ToArray();
+ }
+
+ ///
+ /// RandomSample integers between (inclusive) and (exclusive)
+ ///
+ public static int[] RandomIntegers(int count, int min, int max)
+ {
+ return Enumerable
+ .Range(0, count)
+ .Select(x => RandomData.RandomInteger(min, max))
+ .ToArray();
+ }
+
+ ///
+ /// Return a copy of the given array with random values added to each point
+ ///
+ public static double[] AddNoise(double[] input, double magnitude = 1)
+ {
+ var output = new double[input.Length];
+ Array.Copy(input, 0, output, 0, input.Length);
+ AddNoiseInPlace(output, magnitude);
+ return output;
+ }
+
+ ///
+ /// Mutate the given array by adding a random value to each point
+ ///
+ public static void AddNoiseInPlace(double[] values, double magnitude = 1)
+ {
+ for (var i = 0; i < values.Length; i++)
+ {
+ values[i] = values[i] + RandomData.RandomNumber(-magnitude / 2, magnitude / 2);
+ }
+ }
+
+ #endregion
+
+ #region text
+
+ public static char RandomChar()
+ {
+ return (char)('A' + RandomInteger(26));
+ }
+
+ public static string RandomString(int length)
+ {
+ var chars = new char[length];
+
+ for (var i = 0; i < chars.Length; i++)
+ {
+ chars[i] = RandomChar();
+ }
+
+ return new string(chars);
+ }
+
+ #endregion
+
+ #region Axes
+
+ public static Coordinates RandomCoordinates(double xMult = 1, double yMult = 1, double xOffset = 0, double yOffset = 0)
+ {
+ var x = RandomData.RandomNumber() * xMult + xOffset;
+ var y = RandomData.RandomNumber() * yMult + yOffset;
+ return new Coordinates(x, y);
+ }
+
+ public static Coordinates[] RandomCoordinates(int count, double xMult = 1, double yMult = 1, double xOffset = 0, double yOffset = 0)
+ {
+ Coordinates[] cs = new Coordinates[count];
+
+ for (var i = 0; i < count; i++)
+ {
+ cs[i] = RandomCoordinates(xMult, yMult, xOffset, yOffset);
+ }
+
+ return cs;
+ }
+
+ public static Coordinates RandomLocation()
+ {
+ AxisLimits limits = new(0, 1, 0, 1);
+ return RandomLocation(limits);
+ }
+
+ public static Coordinates RandomLocation(AxisLimits limits)
+ {
+ var x = RandomData.RandomNumber() * limits.HorizontalSpan + limits.Left;
+ var y = RandomData.RandomNumber() * limits.VerticalSpan + limits.Bottom;
+ return new Coordinates(x, y);
+ }
+
+ public static Coordinates[] RandomLocations(int count)
+ {
+ return Enumerable
+ .Range(0, count)
+ .Select(x => RandomCoordinates())
+ .ToArray();
+ }
+
+ public static Coordinates[] RandomLocations(int count, AxisLimits limits)
+ {
+ return Enumerable
+ .Range(0, count)
+ .Select(x => RandomLocation(limits))
+ .ToArray();
+ }
+
+ #endregion
+
+ #region DateTime
+
+ ///
+ /// Contains methods for generating DateTime sequences
+ ///
+ public static class DateTime
+ {
+ ///
+ /// Date of the first ScottPlot commit
+ ///
+ public static readonly System.DateTime ExampleDate = new(2018, 01, 03);
+
+ ///
+ /// Evenly-spaced DateTimes
+ ///
+ public static System.DateTime[] Consecutive(int count, System.DateTime start, TimeSpan step)
+ {
+ var dt = start;
+ var values = new System.DateTime[count];
+ for (var i = 0; i < count; i++)
+ {
+ values[i] = dt;
+ dt += step;
+ }
+ return values;
+ }
+
+ public static System.DateTime[] Weekdays(int count, System.DateTime start)
+ {
+ var dates = new System.DateTime[count];
+ var i = 0;
+ while (i < count)
+ {
+ if (start.DayOfWeek != DayOfWeek.Saturday && start.DayOfWeek != DayOfWeek.Sunday)
+ {
+ dates[i] = start;
+ i++;
+ }
+
+ start = start.AddDays(1);
+ }
+ return dates;
+ }
+
+ public static System.DateTime[] Weekdays(int count) => Weekdays(count, ExampleDate);
+
+ public static System.DateTime[] Days(int count, System.DateTime start) => Consecutive(count, start, TimeSpan.FromDays(1));
+
+ public static System.DateTime[] Days(int count) => Days(count, ExampleDate);
+
+ public static System.DateTime[] Hours(int count, System.DateTime start) => Consecutive(count, start, TimeSpan.FromHours(1));
+
+ public static System.DateTime[] Hours(int count) => Hours(count, ExampleDate);
+
+ public static System.DateTime[] Minutes(int count, System.DateTime start) => Consecutive(count, start, TimeSpan.FromMinutes(1));
+
+ public static System.DateTime[] Minutes(int count) => Hours(count, ExampleDate);
+
+ public static System.DateTime[] Seconds(int count, System.DateTime start) => Consecutive(count, start, TimeSpan.FromSeconds(1));
+
+ public static System.DateTime[] Seconds(int count) => Hours(count, ExampleDate);
+ }
+
+ #endregion
+
+ #region Finance
+
+ public static List RandomOhlCs(int count)
+ {
+ return RandomData.RandomOhlCs(count);
+ }
+
+ #endregion
+
+ #region Plot Items
+
+ public static Box RandomBox(double position)
+ {
+ var n = 50;
+ var mean = RandomData.RandomNumber(3);
+ var stdDev = RandomData.RandomNumber(3);
+
+ var values = RandomNormal(n, mean, stdDev);
+ Array.Sort(values);
+ var min = values[0];
+ var q1 = values[n / 4];
+ var median = values[n / 2];
+ var q3 = values[3 * n / 4];
+ var max = values[n - 1];
+
+ return new Box
+ {
+ Position = position,
+ WhiskerMin = min,
+ BoxMin = q1,
+ BoxMiddle = median,
+ BoxMax = q3,
+ WhiskerMax = max,
+ };
+ }
+
+ public static Color RandomColor()
+ {
+ var r = RandomData.RandomByte();
+ var g = RandomData.RandomByte();
+ var b = RandomData.RandomByte();
+ return new Color(r, g, b);
+ }
+
+ ///
+ /// Generate a dark color by defining the maximum value to use for R, G, and B
+ ///
+ public static Color RandomColor(byte max)
+ {
+ var r = (byte)RandomData.RandomInteger(max);
+ var g = (byte)RandomData.RandomInteger(max);
+ var b = (byte)RandomData.RandomInteger(max);
+ return new Color(r, g, b);
+ }
+
+ public static Color RandomColor(IColormap colormap)
+ {
+ return colormap.GetColor(RandomData.RandomNumber());
+ }
+
+ public static Color[] RandomColors(int count, IColormap colormap)
+ {
+ return RandomSample(count).Select(colormap.GetColor).ToArray();
+ }
+
+ public static MarkerShape RandomMarkerShape()
+ {
+ MarkerShape[] markerShapes = Enum
+ .GetValues(typeof(MarkerShape))
+ .Cast()
+ .ToArray();
+
+ var i = RandomInteger(markerShapes.Length);
+ return markerShapes[i];
+ }
+
+ public static CoordinateLine RandomLine()
+ {
+ return new CoordinateLine(RandomLocation(), RandomLocation());
+ }
+
+ public static LinePattern RandomLinePattern()
+ {
+ LinePattern[] linePatterns = Enum
+ .GetValues(typeof(LinePattern))
+ .Cast()
+ .ToArray();
+
+ var i = RandomInteger(linePatterns.Length);
+ return linePatterns[i];
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IPanelExtensions.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IPanelExtensions.cs
new file mode 100644
index 000000000..0e13e5560
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IPanelExtensions.cs
@@ -0,0 +1,15 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class PanelExtensions
+ {
+ ///
+ /// Returns true for X axes (bottom and top)
+ ///
+ public static bool IsHorizontal(this IPanel panel) => panel.Edge is Edge.Bottom or Edge.Top;
+
+ ///
+ /// Returns true for Y axes (left and right)
+ ///
+ public static bool IsVertical(this IPanel panel) => !panel.IsHorizontal();
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/ImageOperations.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/ImageOperations.cs
new file mode 100644
index 000000000..3b172ba69
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/ImageOperations.cs
@@ -0,0 +1,11 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class ImageOperations
+ {
+ public static string GetImageHtml(byte[] bytes, string imageType = "png")
+ {
+ var b64 = Convert.ToBase64String(bytes);
+ return $"";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IsExternalInit.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IsExternalInit.cs
new file mode 100644
index 000000000..79b1cce91
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/IsExternalInit.cs
@@ -0,0 +1,8 @@
+namespace System.Runtime.CompilerServices
+{
+ ///
+ /// Allows init-only setters in older .NET versions
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ internal static class IsExternalInit { }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/LayoutManager.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/LayoutManager.cs
new file mode 100644
index 000000000..90161e3db
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/LayoutManager.cs
@@ -0,0 +1,53 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// A collection of methods for making common adjustments to plot layouts
+ ///
+ public class LayoutManager
+ {
+ private readonly Plot _plot;
+
+ public ILayoutEngine LayoutEngine { get; set; } = new Automatic();
+
+ public LayoutManager(Plot plot)
+ {
+ _plot = plot;
+ }
+
+ ///
+ /// Automatically resize the layout on each render to acheive the best fit
+ ///
+ public void Default()
+ {
+ LayoutEngine = new Automatic();
+ }
+
+ ///
+ /// Apply a fixed layout using the given rectangle to define the data area
+ ///
+ public void Fixed(PixelRect dataRect)
+ {
+ LayoutEngine = new FixedDataArea(dataRect);
+ }
+
+ ///
+ /// Apply a fixed layout using the given padding to define space between the
+ /// data area and the edge of the figure
+ ///
+ public void Fixed(PixelPadding padding)
+ {
+ LayoutEngine = new FixedPadding(padding);
+ }
+
+ ///
+ /// Disable visibility of all axes and titles so the data area fills the entire figure
+ ///
+ public void Frameless()
+ {
+ _plot.Axes.XAxes.ForEach(x => x.IsVisible = false);
+ _plot.Axes.YAxes.ForEach(x => x.IsVisible = false);
+ _plot.Axes.Title.IsVisible = false;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/NumericConversion.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/NumericConversion.cs
new file mode 100644
index 000000000..2a460513a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/NumericConversion.cs
@@ -0,0 +1,256 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This class contains type-specific methods to convert between generic values and doubles
+ /// optimized for performance using platform-specific features.
+ /// See discussion in https://github.com/ScottPlot/ScottPlot/pull/1927
+ ///
+ public static class NumericConversion
+ {
+ private const MethodImplOptions ImplOptions =
+#if NETCOREAPP
+ MethodImplOptions.AggressiveOptimization |
+#endif
+ MethodImplOptions.AggressiveInlining;
+
+ [MethodImpl(ImplOptions)]
+ public static double[] GenericToDoubleArray(T[] values)
+ {
+ var values2 = new double[values.Length];
+
+ for (var i = 0; i < values.Length; i++)
+ {
+ values2[i] = GenericToDouble(values, i);
+ }
+
+ return values2;
+ }
+
+ [MethodImpl(ImplOptions)]
+ public static double[] GenericToDoubleArray(IEnumerable values)
+ {
+ return values.Select(value => GenericToDouble(ref value)).ToArray();
+ }
+
+ ///
+ /// Returns the double value of a
+ /// using a conversion technique optimized for the platform.
+ ///
+ [MethodImpl(ImplOptions)]
+ public static double GenericToDouble(ref T value)
+ {
+ return value switch
+ {
+ double vDouble => vDouble,
+ float vSingle => Convert.ToDouble(vSingle),
+ int vInt32 => Convert.ToDouble(vInt32),
+ uint vUint32 => Convert.ToDouble(vUint32),
+ long vInt64 => Convert.ToDouble(vInt64),
+ ulong vUint64 => Convert.ToDouble(vUint64),
+ short vInt16 => Convert.ToDouble(vInt16),
+ ushort vUint16 => Convert.ToDouble(vUint16),
+ decimal vDecimal => Convert.ToDouble(vDecimal),
+ byte vByte => Convert.ToDouble(vByte),
+ DateTime vDateTime => vDateTime.ToOADate(),
+ _ => Convert.ToDouble(value),
+ };
+ }
+
+ [MethodImpl(ImplOptions)]
+ public static Coordinates GenericToCoordinates(ref T1 x, ref T2 y) => new Coordinates(GenericToDouble(ref x), GenericToDouble(ref y));
+
+ ///
+ /// Returns the double value of the at position in
+ /// using a conversion technique optimized for the platform.
+ ///
+ [MethodImpl(ImplOptions)]
+ public static double GenericToDouble(IReadOnlyList list, int i)
+ {
+ var v = list[i];
+ return GenericToDouble(ref v);
+ }
+
+ ///
+ /// Returns the double value of the at position in
+ /// using a conversion technique optimized for the platform.
+ ///
+ [MethodImpl(ImplOptions)]
+ public static double GenericToDouble(T[] array, int i)
+ {
+ var v = array[i];
+ return GenericToDouble(ref v);
+ }
+
+ ///
+ /// Creates a for a given double
+ /// using a conversion technique optimized for the platform.
+ ///
+ [MethodImpl(ImplOptions)]
+ public static void DoubleToGeneric(double value, out T v)
+ {
+ if (typeof(T) == typeof(double))
+ {
+ v = (T)(object)value;
+ }
+ else if (typeof(T) == typeof(float))
+ {
+ v = (T)(object)Convert.ToSingle(value);
+ }
+ else if (typeof(T) == typeof(int))
+ {
+ v = (T)(object)Convert.ToInt32(value);
+ }
+ else if (typeof(T) == typeof(uint))
+ {
+ v = (T)(object)Convert.ToUInt32(value);
+ }
+ else if (typeof(T) == typeof(long))
+ {
+ v = (T)(object)Convert.ToInt64(value);
+ }
+ else if (typeof(T) == typeof(ulong))
+ {
+ v = (T)(object)Convert.ToUInt64(value);
+ }
+ else if (typeof(T) == typeof(short))
+ {
+ v = (T)(object)Convert.ToInt16(value);
+ }
+ else if (typeof(T) == typeof(ushort))
+ {
+ v = (T)(object)Convert.ToUInt16(value);
+ }
+ else if (typeof(T) == typeof(decimal))
+ {
+ v = (T)(object)Convert.ToDecimal(value);
+ }
+ else if (typeof(T) == typeof(byte))
+ {
+ v = (T)(object)Convert.ToByte(value);
+ }
+ else if (typeof(T) == typeof(DateTime))
+ {
+ v = (T)(object)DateTime.FromOADate(value);
+ }
+ else
+ {
+ v = (T)Convert.ChangeType(value, typeof(T));
+ }
+ }
+
+ public static T[] DoubleToGeneric(this double[] input)
+ {
+ T[] result = new T[input.Length];
+ for (var i = 0; i < input.Length; i++)
+ {
+ DoubleToGeneric(input[i], out result[i]);
+ }
+ return result;
+ }
+
+ public static T[] ToGenericArray(this double[] input)
+ {
+ T[] result = new T[input.Length];
+ for (var i = 0; i < input.Length; i++)
+ {
+ DoubleToGeneric(input[i], out result[i]);
+ }
+ return result;
+ }
+
+ public static byte AddBytes(byte a, byte b) => (byte)(a + b);
+ public static byte Multiply(byte a, byte b) => (byte)(a * b);
+ public static byte SubtractBytes(byte a, byte b) => (byte)(a - b);
+ public static bool LessThanOrEqualBytes(byte a, byte b) => a <= b;
+
+ public static Func CreateAddFunction()
+ {
+ var paramA = Expression.Parameter(typeof(T), "a");
+ var paramB = Expression.Parameter(typeof(T), "b");
+
+ var body = Type.GetTypeCode(typeof(T)) switch
+ {
+ TypeCode.Byte => Expression.Add(paramA, paramB, typeof(NumericConversion).GetMethod(nameof(AddBytes))),
+ _ => Expression.Add(paramA, paramB),
+ };
+
+ return Expression.Lambda>(body, paramA, paramB).Compile();
+ }
+
+ public static Func CreateMultFunction()
+ {
+ var paramA = Expression.Parameter(typeof(T), "a");
+ var paramB = Expression.Parameter(typeof(T), "b");
+
+ var body = Type.GetTypeCode(typeof(T)) switch
+ {
+ TypeCode.Byte => Expression.Multiply(paramA, paramB, typeof(NumericConversion).GetMethod(nameof(Multiply))),
+ _ => Expression.Multiply(paramA, paramB),
+ };
+
+ return Expression.Lambda>(body, paramA, paramB).Compile();
+
+ }
+
+ public static Func CreateSubtractFunction()
+ {
+ var paramA = Expression.Parameter(typeof(T), "a");
+ var paramB = Expression.Parameter(typeof(T), "b");
+
+ var body = Type.GetTypeCode(typeof(T)) switch
+ {
+ TypeCode.Byte => Expression.Subtract(paramA, paramB, typeof(NumericConversion).GetMethod(nameof(SubtractBytes))),
+ _ => Expression.Subtract(paramA, paramB),
+ };
+
+ return Expression.Lambda>(body, paramA, paramB).Compile();
+ }
+
+ public static Func CreateLessThanOrEqualFunction()
+ {
+ var paramA = Expression.Parameter(typeof(T), "a");
+ var paramB = Expression.Parameter(typeof(T), "b");
+
+ var body = Type.GetTypeCode(typeof(T)) switch
+ {
+ TypeCode.Byte => Expression.LessThanOrEqual(paramA, paramB, false, typeof(NumericConversion).GetMethod(nameof(LessThanOrEqualBytes))),
+ _ => Expression.LessThanOrEqual(paramA, paramB),
+ };
+
+ return Expression.Lambda>(body, paramA, paramB).Compile();
+ }
+
+ public static T Clamp(T input, T min, T max) where T : IComparable
+ {
+ if (input.CompareTo(min) < 0)
+ {
+ return min;
+ }
+
+ if (input.CompareTo(max) > 0)
+ {
+ return max;
+ }
+
+ return input;
+ }
+
+ public static bool AreReal(double x, double y)
+ {
+ // implemented here because older versions of .NET do not support double.IsReal()
+ return IsReal(x) && IsReal(y);
+ }
+
+ public static bool IsReal(double x)
+ {
+ // implemented here because older versions of .NET do not support double.IsReal()
+ return !double.IsNaN(x) && !double.IsInfinity(x);
+ }
+
+ public static bool IsReal(float x)
+ {
+ // implemented here because older versions of .NET do not support double.IsReal()
+ return !float.IsNaN(x) && !float.IsInfinity(x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Plot.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Plot.cs
new file mode 100644
index 000000000..3b6e5b3d9
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Plot.cs
@@ -0,0 +1,438 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Plot : IDisposable
+ {
+ public List PlottableList { get; } = new();
+ public PlottableAdder Add { get; }
+ public IPalette Palette { get => Add.Palette; set => Add.Palette = value; }
+ public RenderManager RenderManager { get; }
+ public RenderDetails LastRender => RenderManager.LastRender;
+ public LayoutManager Layout { get; private set; }
+ public Color FigureBackground { get; set; } = Colors.White;
+ public Color DataBackground { get; set; } = Colors.White;
+ public IZoomRectangle ZoomRectangle { get; set; } = new StandardZoomRectangle();
+ public float ScaleFactor { get; set; } = 1.0f;
+
+ public AxisManager Axes { get; }
+
+ public PlotStyler Style { get; }
+
+ public Legend Legend { get; set; }
+
+ public IPlottable Benchmark { get; set; } = new Benchmark();
+
+ public Plot()
+ {
+ Axes = new(this);
+ Add = new(this);
+ Style = new(this);
+ RenderManager = new(this);
+ Legend = new(this);
+ Layout = new(this);
+ }
+
+ public void Dispose()
+ {
+ PlottableList.Clear();
+ Axes.Clear();
+ }
+
+ #region Mouse Interaction
+
+ ///
+ /// Apply a click-drag pan operation to the plot
+ ///
+ public void MousePan(MultiAxisLimitManager originalLimits, Pixel mouseDown, Pixel mouseNow)
+ {
+ float pixelDeltaX = -(mouseNow.X - mouseDown.X);
+ float pixelDeltaY = mouseNow.Y - mouseDown.Y;
+
+ var scaledDeltaX = pixelDeltaX / ScaleFactor;
+ var scaledDeltaY = pixelDeltaY / ScaleFactor;
+
+ // restore mousedown limits
+ originalLimits.Apply(this);
+
+ // pan in the direction opposite of the mouse movement
+ Axes.XAxes.ForEach(xAxis => xAxis.Range.PanMouse(scaledDeltaX, RenderManager.LastRender.DataRect.Width));
+ Axes.YAxes.ForEach(yAxis => yAxis.Range.PanMouse(scaledDeltaY, RenderManager.LastRender.DataRect.Height));
+ }
+
+ ///
+ /// Apply a click-drag zoom operation to the plot
+ ///
+ public void MouseZoom(MultiAxisLimitManager originalLimits, Pixel mouseDown, Pixel mouseNow)
+ {
+ float pixelDeltaX = mouseNow.X - mouseDown.X;
+ float pixelDeltaY = -(mouseNow.Y - mouseDown.Y);
+
+ // restore mousedown limits
+ originalLimits.Apply(this);
+
+ // apply zoom for each axis
+ Axes.XAxes.ForEach(xAxis => xAxis.Range.ZoomMouseDelta(pixelDeltaX, RenderManager.LastRender.DataRect.Width));
+ Axes.YAxes.ForEach(yAxis => yAxis.Range.ZoomMouseDelta(pixelDeltaY, RenderManager.LastRender.DataRect.Height));
+ }
+
+ ///
+ /// Zoom into the coordinate corresponding to the given pixel.
+ /// Fractional values >1 zoom in and <1 zoom out.
+ ///
+ public void MouseZoom(double fracX, double fracY, Pixel pixel)
+ {
+ Coordinates mouseCoordinate = GetCoordinates(pixel);
+
+ MultiAxisLimitManager originalLimits = new(this);
+
+ // restore mousedown limits
+ originalLimits.Apply(this);
+
+ // apply zoom for each axis
+ Pixel scaledPixel = new(pixel.X / ScaleFactor, pixel.Y / ScaleFactor);
+ Axes.XAxes.ForEach(xAxis => xAxis.Range.ZoomFrac(fracX, xAxis.GetCoordinate(scaledPixel.X, RenderManager.LastRender.DataRect)));
+ Axes.YAxes.ForEach(yAxis => yAxis.Range.ZoomFrac(fracY, yAxis.GetCoordinate(scaledPixel.Y, RenderManager.LastRender.DataRect)));
+ }
+
+ ///
+ /// Update the shape of the zoom rectangle
+ ///
+ /// Location of the mouse at the start of the drag
+ /// Location of the mouse now (after dragging)
+ /// If true, shade the full region between two X positions
+ /// If true, shade the full region between two Y positions
+ public void MouseZoomRectangle(Pixel mouseDown, Pixel mouseNow, bool vSpan, bool hSpan)
+ {
+ Pixel scaledMouseDown = new(mouseDown.X / ScaleFactor, mouseDown.Y / ScaleFactor);
+ Pixel scaledMouseNow = new(mouseNow.X / ScaleFactor, mouseNow.Y / ScaleFactor);
+ ZoomRectangle.Update(scaledMouseDown, scaledMouseNow);
+ ZoomRectangle.VerticalSpan = vSpan;
+ ZoomRectangle.HorizontalSpan = hSpan;
+ }
+
+ ///
+ /// Return the pixel for a specific coordinate using measurements from the most recent render.
+ ///
+ public Pixel GetPixel(Coordinates coordinates)
+ {
+ Coordinates scaledCoordinates = new(coordinates.X * ScaleFactor, coordinates.Y * ScaleFactor);
+ PixelRect dataRect = RenderManager.LastRender.DataRect;
+ float x = Axes.Bottom.GetPixel(scaledCoordinates.X, dataRect);
+ float y = Axes.Left.GetPixel(scaledCoordinates.Y, dataRect);
+ return new Pixel(x, y);
+ }
+
+ ///
+ /// Return the coordinate for a specific pixel using measurements from the most recent render.
+ ///
+ public Coordinates GetCoordinates(Pixel pixel, IXAxis? xAxis = null, IYAxis? yAxis = null)
+ {
+ Pixel scaledPx = new(pixel.X / ScaleFactor, pixel.Y / ScaleFactor);
+ PixelRect dataRect = RenderManager.LastRender.DataRect;
+ double x = (xAxis ?? Axes.Bottom).GetCoordinate(scaledPx.X, dataRect);
+ double y = (yAxis ?? Axes.Left).GetCoordinate(scaledPx.Y, dataRect);
+ return new Coordinates(x, y);
+ }
+
+ ///
+ /// Return the coordinate for a specific pixel using measurements from the most recent render.
+ ///
+ public Coordinates GetCoordinates(float x, float y, IXAxis? xAxis = null, IYAxis? yAxis = null)
+ {
+ Pixel px = new(x, y);
+ return GetCoordinates(px, xAxis, yAxis);
+ }
+
+ ///
+ /// Return a coordinate rectangle centered at a pixel
+ ///
+ public CoordinateRect GetCoordinateRect(float x, float y, float radius = 10)
+ {
+ PixelRect dataRect = RenderManager.LastRender.DataRect;
+ double left = Axes.Bottom.GetCoordinate(x - radius, dataRect);
+ double right = Axes.Bottom.GetCoordinate(x + radius, dataRect);
+ double top = Axes.Left.GetCoordinate(y - radius, dataRect);
+ double bottom = Axes.Left.GetCoordinate(y + radius, dataRect);
+ return new CoordinateRect(left, right, bottom, top);
+ }
+
+ ///
+ /// Return a coordinate rectangle centered at a pixel
+ ///
+ public CoordinateRect GetCoordinateRect(Pixel pixel, float radius = 10)
+ {
+ return GetCoordinateRect(pixel.X, pixel.Y, radius);
+ }
+
+ ///
+ /// Return a coordinate rectangle centered at a pixel
+ ///
+ public CoordinateRect GetCoordinateRect(Coordinates coordinates, float radius = 10)
+ {
+ PixelRect dataRect = RenderManager.LastRender.DataRect;
+ double radiusX = Axes.Bottom.GetCoordinateDistance(radius, dataRect);
+ double radiusY = Axes.Left.GetCoordinateDistance(radius, dataRect);
+ return coordinates.ToRect(radiusX, radiusY);
+ }
+
+ #endregion
+
+ #region Rendering and Image Creation
+
+ ///
+ /// Force the plot to render once by calling but don't return what was rendered.
+ ///
+ public void Render(int width = 400, int height = 300)
+ {
+ if (width < 1)
+ {
+ throw new ArgumentException($"{nameof(width)} must be greater than 0");
+ }
+
+ if (height < 1)
+ {
+ throw new ArgumentException($"{nameof(height)} must be greater than 0");
+ }
+
+ GetImage(width, height);
+ }
+
+ ///
+ /// Render onto an existing canvas
+ ///
+ public void Render(SKCanvas canvas, int width, int height)
+ {
+ // TODO: obsolete this
+ PixelRect rect = new(0, width, height, 0);
+ RenderManager.Render(canvas, rect);
+ }
+
+ ///
+ /// Render onto an existing canvas inside the given rectangle
+ ///
+ public void Render(SKCanvas canvas, PixelRect rect)
+ {
+ RenderManager.Render(canvas, rect);
+ }
+
+ public Image GetImage(int width, int height)
+ {
+ if (width < 1)
+ {
+ throw new ArgumentException($"{nameof(width)} must be greater than 0");
+ }
+
+ if (height < 1)
+ {
+ throw new ArgumentException($"{nameof(height)} must be greater than 0");
+ }
+
+ SKImageInfo info = new(width, height, SKColorType.Rgba8888, SKAlphaType.Premul);
+ using var surface = SKSurface.Create(info);
+ if (surface is null)
+ {
+ throw new NullReferenceException($"invalid SKImageInfo");
+ }
+
+ Render(surface.Canvas, width, height);
+ return new(surface.Snapshot());
+ }
+
+ ///
+ /// Render the plot and return an HTML img element containing a Base64-encoded PNG
+ ///
+ public string GetImageHtml(int width, int height)
+ {
+ var img = GetImage(width, height);
+ byte[] bytes = img.GetImageBytes();
+ return ImageOperations.GetImageHtml(bytes);
+ }
+
+ public void SaveJpeg(string filePath, int width, int height, int quality = 85)
+ {
+ using var image = GetImage(width, height);
+ image.SaveJpeg(filePath, quality);
+ }
+
+ public void SavePng(string filePath, int width, int height)
+ {
+ using var image = GetImage(width, height);
+ image.SavePng(filePath);
+ }
+
+ public void SaveBmp(string filePath, int width, int height)
+ {
+ using var image = GetImage(width, height);
+ image.SaveBmp(filePath);
+ }
+
+ public void SaveWebp(string filePath, int width, int height, int quality = 85)
+ {
+ using var image = GetImage(width, height);
+ image.SaveWebp(filePath, quality);
+ }
+
+ public void SaveSvg(string filePath, int width, int height)
+ {
+ using FileStream fs = new(filePath, FileMode.Create);
+ using var canvas = SKSvgCanvas.Create(new SKRect(0, 0, width, height), fs);
+ Render(canvas, width, height);
+ }
+
+ public void Save(string filePath, int width, int height, ImageFormat format = ImageFormat.Png, int quality = 85)
+ {
+ if (format == ImageFormat.Svg)
+ {
+ SaveSvg(filePath, width, height);
+ return;
+ }
+
+ if (format.IsRasterFormat())
+ {
+ using var image = GetImage(width, height);
+ image.Save(filePath, format, quality);
+ return;
+ }
+
+ throw new NotImplementedException(format.ToString());
+ }
+
+ public byte[] GetImageBytes(int width, int height, ImageFormat format = ImageFormat.Bmp)
+ {
+ using var image = GetImage(width, height);
+ byte[] bytes = image.GetImageBytes(format);
+ return bytes;
+ }
+
+ ///
+ /// Returns the content of the legend as a raster image
+ ///
+ public Image GetLegendImage() => Legend.GetImage(this);
+
+ ///
+ /// Returns the content of the legend as SVG (vector) image
+ ///
+ public string GetLegendSvgXml() => Legend.GetSvgXml(this);
+
+ #endregion
+
+ #region Helper Methods
+
+ ///
+ /// Remove a specific object from the plot.
+ /// This removes the given object from .
+ ///
+ public void Remove(IPlottable plottable)
+ {
+ PlottableList.Remove(plottable);
+ }
+
+ ///
+ /// Disable visibility for all grids
+ ///
+ public void HideGrid()
+ {
+ Axes.Grids.ForEach(x => x.IsVisible = false);
+ }
+
+ ///
+ /// Enable visibility for all grids
+ ///
+ public void ShowGrid()
+ {
+ Axes.Grids.ForEach(x => x.IsVisible = true);
+ }
+
+ ///
+ /// Helper method for setting visibility of the
+ ///
+ public void ShowLegend(Alignment location = Alignment.LowerRight)
+ {
+ Legend.IsVisible = true;
+ Legend.Location = location;
+ }
+
+ ///
+ /// Helper method for setting visibility of the
+ ///
+ public void HideLegend()
+ {
+ Legend.IsVisible = false;
+ }
+
+ ///
+ /// Clears the list
+ ///
+ public void Clear() => PlottableList.Clear();
+
+ ///
+ /// Shortcut to set text of the Label.
+ /// Assign properties of Label to customize size, color, font, etc.
+ ///
+ public void Title(string text, float? size = null)
+ {
+ Axes.Title.Label.Text = text;
+ Axes.Title.IsVisible = !string.IsNullOrWhiteSpace(text);
+ if (size.HasValue)
+ {
+ Axes.Title.Label.FontSize = size.Value;
+ }
+ }
+
+ ///
+ /// Shortcut to set text of the Label
+ /// Assign properties of Label to customize size, color, font, etc.
+ ///
+ public void XLabel(string label, float? size = null)
+ {
+ Axes.Bottom.Label.Text = label;
+ if (size.HasValue)
+ {
+ Axes.Bottom.Label.FontSize = size.Value;
+ }
+ }
+
+ ///
+ /// Shortcut to set text of the Label
+ /// Assign properties of Label to customize size, color, font, etc.
+ ///
+ public void YLabel(string label, float? size = null)
+ {
+ Axes.Left.Label.Text = label;
+ if (size.HasValue)
+ {
+ Axes.Left.Label.FontSize = size.Value;
+ }
+ }
+
+ ///
+ /// Return the first default grid in use.
+ /// Throws an exception if no default grids exist.
+ ///
+ public DefaultGrid GetDefaultGrid()
+ {
+ IEnumerable defaultGrids = Axes.Grids.OfType();
+ if (defaultGrids.Any())
+ {
+ return defaultGrids.First();
+ }
+ else
+ {
+ throw new InvalidOperationException("The plot has no default grids");
+ }
+ }
+
+ #endregion
+
+ #region Developer Tools
+
+ public void Developer_ShowAxisDetails(bool enable = true)
+ {
+ foreach (IPanel panel in Axes.GetAxes())
+ {
+ panel.ShowDebugInformation = enable;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/PlottableAdder.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/PlottableAdder.cs
new file mode 100644
index 000000000..b2a9ab63a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/PlottableAdder.cs
@@ -0,0 +1,536 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Helper methods to create plottable objects and add them to the plot
+ ///
+ public class PlottableAdder
+ {
+ private readonly Plot _plot;
+
+ public PlottableAdder(Plot plot)
+ {
+ _plot = plot;
+ }
+
+ public IPalette Palette { get; set; } = new Category10();
+
+ public Color GetNextColor()
+ {
+ return Palette.Colors[_plot.PlottableList.Count % Palette.Colors.Length];
+ }
+
+ public BarPlot Bar(Bar bar)
+ {
+ BarPlot bp = new(bar);
+ Plottable(bp);
+ return bp;
+ }
+
+ public BarPlot Bar(double position, double value, double error = 0)
+ {
+ Bar bar = new()
+ {
+ Position = position,
+ Value = value,
+ Error = error,
+ FillColor = GetNextColor(),
+ };
+ return Bar(bar);
+ }
+
+ public BarPlot Bars(IEnumerable bars)
+ {
+ BarPlot bp = new(bars);
+
+ // only set bar colors if the user has not already configured them
+ var barColorsAreAllTheSame = bars.Select(x => x.FillColor).Distinct().Count() == 1;
+ if (barColorsAreAllTheSame)
+ {
+ bp.Color = GetNextColor();
+ }
+
+ Plottable(bp);
+ return bp;
+ }
+
+ public BarPlot Bars(double[] values)
+ {
+ var positions = Enumerable.Range(0, values.Length).Select(x => (double)x);
+ return Bars(positions, values);
+ }
+
+ public BarPlot Bars(IEnumerable positions, IEnumerable values)
+ {
+ if (positions.Count() != values.Count())
+ {
+ throw new ArgumentException($"{nameof(positions)} and {nameof(positions)} have different lengths");
+ }
+
+ var color = GetNextColor();
+
+ List bars = new();
+ foreach (var item in positions.Zip(values, (a, b) => new { a, b }))
+ {
+ bars.Add(new Bar()
+ {
+ Position = item.a,
+ Value = item.b,
+ FillColor = color
+ });
+ }
+
+ return Bars(bars);
+ }
+
+ public BoxPlot Box(Box box)
+ {
+ BoxPlot bp = new();
+ bp.Boxes.Add(box);
+ bp.FillColor = GetNextColor();
+ _plot.PlottableList.Add(bp);
+ return bp;
+ }
+
+ public BoxPlot Boxes(IEnumerable boxes)
+ {
+ BoxPlot bp = new();
+ bp.Boxes.AddRange(boxes);
+ bp.FillColor = GetNextColor();
+ _plot.PlottableList.Add(bp);
+ return bp;
+ }
+
+ public CandlestickPlot Candlestick(List ohlcs)
+ {
+ OhlcSource dataSource = new(ohlcs);
+ CandlestickPlot candlestickPlot = new(dataSource);
+ _plot.PlottableList.Add(candlestickPlot);
+ return candlestickPlot;
+ }
+
+ public Crosshair Crosshair(double x, double y)
+ {
+ Crosshair ch = new()
+ {
+ Position = new(x, y)
+ };
+ ch.LineStyle.Color = GetNextColor();
+ _plot.PlottableList.Add(ch);
+ return ch;
+ }
+
+ public ColorBar ColorBar(IHasColorAxis source, Edge edge = Edge.Right)
+ {
+ ColorBar colorBar = new(source, edge);
+
+ _plot.Axes.Panels.Add(colorBar);
+ return colorBar;
+ }
+
+ public DataLogger DataLogger()
+ {
+ DataLogger logger = new()
+ {
+ Color = GetNextColor(),
+ };
+
+ _plot.PlottableList.Add(logger);
+
+ return logger;
+ }
+
+ public DataStreamer DataStreamer(int points, double period = 1)
+ {
+ var data = new double[points];
+
+ DataStreamer streamer = new(_plot, data)
+ {
+ Color = GetNextColor(),
+ Period = period,
+ };
+
+ _plot.PlottableList.Add(streamer);
+
+ return streamer;
+ }
+
+ public ErrorBar ErrorBar(IReadOnlyList xs, IReadOnlyList ys, IReadOnlyList yErrors)
+ {
+ ErrorBar eb = new(xs, ys, null, null, yErrors, yErrors)
+ {
+ Color = GetNextColor(),
+ };
+
+ _plot.PlottableList.Add(eb);
+ return eb;
+ }
+
+ ///
+ /// Fill the vertical range between two Y points for each X point
+ ///
+ public FillY FillY(double[] xs, double[] ys1, double[] ys2)
+ {
+ List<(double, double, double)> data = new();
+
+ for (var i = 0; i < xs.Length; i++)
+ {
+ data.Add((xs[i], ys1[i], ys2[i]));
+ }
+
+ return FillY(data);
+ }
+
+ ///
+ /// Fill the vertical range between two Y points for each X point
+ ///
+ public FillY FillY(Scatter scatter1, Scatter scatter2)
+ {
+ FillY rangePlot = new(scatter1, scatter2);
+ rangePlot.FillStyle.Color = GetNextColor();
+ _plot.PlottableList.Add(rangePlot);
+ return rangePlot;
+ }
+
+ ///
+ /// Fill the vertical range between two Y points for each X point
+ ///
+ public FillY FillY(ICollection<(double X, double Top, double Bottom)> data)
+ {
+ FillY rangePlot = new();
+ rangePlot.FillStyle.Color = GetNextColor();
+ rangePlot.SetDataSource(data);
+ _plot.PlottableList.Add(rangePlot);
+ return rangePlot;
+ }
+
+ ///
+ /// Fill the vertical range between two Y points for each X point
+ /// This overload uses a custom function to calculate X, Y1, and Y2 values
+ ///
+ public FillY FillY(ICollection data, Func function)
+ {
+ var rangePlot = new FillY();
+ rangePlot.FillStyle.Color = GetNextColor();
+ rangePlot.SetDataSource(data, function);
+ _plot.PlottableList.Add(rangePlot);
+ return rangePlot;
+ }
+
+ public FunctionPlot Function(IFunctionSource functionSource)
+ {
+ FunctionPlot functionPlot = new(functionSource);
+ functionPlot.LineStyle.Color = GetNextColor();
+
+ _plot.PlottableList.Add(functionPlot);
+ return functionPlot;
+ }
+
+ public FunctionPlot Function(Func func)
+ {
+ var functionSource = new FunctionSource(func);
+ return Function(functionSource);
+ }
+
+ public Heatmap Heatmap(double[,] intensities)
+ {
+ Heatmap heatmap = new(intensities);
+ _plot.PlottableList.Add(heatmap);
+ return heatmap;
+ }
+
+ public HorizontalLine HorizontalLine(double y, float width = 2, Color? color = null, LinePattern pattern = LinePattern.Solid)
+ {
+ HorizontalLine line = new();
+ line.LineStyle.Width = width;
+ line.LineStyle.Color = color ?? GetNextColor();
+ line.LineStyle.Pattern = pattern;
+ line.Y = y;
+ _plot.PlottableList.Add(line);
+ return line;
+ }
+
+ public LinePlot Line(Coordinates start, Coordinates end)
+ {
+ LinePlot lp = new()
+ {
+ Start = start,
+ End = end,
+ };
+
+ lp.LineStyle.Color = GetNextColor();
+ lp.MarkerStyle.Fill.Color = lp.LineStyle.Color;
+
+ _plot.PlottableList.Add(lp);
+
+ return lp;
+ }
+
+ public LinePlot Line(CoordinateLine line)
+ {
+ return Line(line.Start, line.End);
+ }
+
+ public LinePlot Line(double x1, double y1, double x2, double y2)
+ {
+ Coordinates start = new(x1, y1);
+ Coordinates end = new(x2, y2);
+ return Line(start, end);
+ }
+
+ public Marker Marker(double x, double y, MarkerShape shape = MarkerShape.FilledCircle, float size = 10, Color? color = null)
+ {
+ Marker mp = new()
+ {
+ MarkerStyle = new MarkerStyle(shape, size, color ?? GetNextColor()),
+ Location = new Coordinates(x, y),
+ };
+
+ _plot.PlottableList.Add(mp);
+
+ return mp;
+ }
+
+ public Marker Marker(Coordinates location, MarkerShape shape = MarkerShape.FilledCircle, float size = 10, Color? color = null)
+ {
+ return Marker(location.X, location.Y, shape, size, color);
+ }
+
+ public OhlcPlot Ohlc(List ohlcs)
+ {
+ OhlcSource dataSource = new(ohlcs);
+ OhlcPlot ohlc = new(dataSource);
+ _plot.PlottableList.Add(ohlc);
+ return ohlc;
+ }
+
+ public Pie Pie(IList slices)
+ {
+ Pie pie = new(slices);
+ _plot.PlottableList.Add(pie);
+ return pie;
+ }
+
+ public Pie Pie(IEnumerable values)
+ {
+ var slices = values.Select(v => new PieSlice
+ {
+ Value = v,
+ Fill = new() { Color = GetNextColor() },
+ }).ToList();
+ var pie = Pie(slices);
+ _plot.PlottableList.Add(pie);
+ return pie;
+ }
+
+ public Polygon Polygon(Coordinates[] coordinates)
+ {
+ Polygon poly = new(coordinates);
+ _plot.PlottableList.Add(poly);
+ return poly;
+ }
+
+ public IPlottable Plottable(IPlottable plottable)
+ {
+ _plot.PlottableList.Add(plottable);
+ return plottable;
+ }
+
+ public Polygon Rectangle(double left, double right, double bottom, double top)
+ {
+ Coordinates[] points = {
+ new(left, bottom),
+ new(left, top),
+ new(right, top),
+ new(right, bottom),
+ };
+ return Polygon(points);
+ }
+
+ public Scatter Scatter(IScatterSource source, Color? color = null)
+ {
+ var nextColor = color ?? GetNextColor();
+ Scatter scatter = new(source);
+ scatter.LineStyle.Color = nextColor;
+ scatter.MarkerStyle.Fill.Color = nextColor;
+ _plot.PlottableList.Add(scatter);
+ return scatter;
+ }
+
+ public Scatter Scatter(double x, double y, Color? color = null)
+ {
+ double[] xs = { x };
+ double[] ys = { y };
+ ScatterSourceDoubleArray source = new(xs, ys);
+ return Scatter(source, color);
+ }
+
+ public Scatter Scatter(double[] xs, double[] ys, Color? color = null)
+ {
+ ScatterSourceDoubleArray source = new(xs, ys);
+ return Scatter(source, color);
+ }
+
+ public Scatter Scatter(Coordinates point, Color? color = null)
+ {
+ Coordinates[] coordinates = { point };
+ ScatterSourceCoordinatesArray source = new(coordinates);
+ return Scatter(source, color);
+ }
+
+ public Scatter Scatter(Coordinates[] coordinates, Color? color = null)
+ {
+ ScatterSourceCoordinatesArray source = new(coordinates);
+ return Scatter(source, color);
+ }
+
+ public Scatter Scatter(List coordinates, Color? color = null)
+ {
+ ScatterSourceCoordinatesList source = new(coordinates);
+ return Scatter(source, color);
+ }
+
+ public Scatter Scatter(T1[] xs, T2[] ys, Color? color = null)
+ {
+ var nextColor = color ?? GetNextColor();
+ ScatterSourceGenericArray source = new(xs, ys);
+ Scatter scatter = new(source);
+ scatter.LineStyle.Color = nextColor;
+ scatter.MarkerStyle.Fill.Color = nextColor;
+ _plot.PlottableList.Add(scatter);
+ return scatter;
+ }
+
+ public Scatter Scatter(List xs, List ys, Color? color = null)
+ {
+ var nextColor = color ?? GetNextColor();
+ ScatterSourceGenericList source = new(xs, ys);
+ Scatter scatter = new(source);
+ scatter.LineStyle.Color = nextColor;
+ scatter.MarkerStyle.Fill.Color = nextColor;
+ _plot.PlottableList.Add(scatter);
+ return scatter;
+ }
+
+ public Signal Signal(ISignalSource source, Color? color = null)
+ {
+ Signal sig = new(source)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public Signal Signal(double[] ys, double period = 1, Color? color = null)
+ {
+ SignalSourceDouble source = new(ys, period);
+
+ Signal sig = new(source)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public Signal Signal(T[] ys, double period = 1, Color? color = null)
+ {
+ SignalSourceGenericArray source = new(ys, period);
+
+ Signal sig = new(source)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public Signal Signal(List ys, double period = 1, Color? color = null)
+ {
+ SignalSourceGenericList source = new(ys, period);
+
+ Signal sig = new(source)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public SignalConst SignalConst(T[] ys, double period = 1, Color? color = null)
+ where T : struct, IComparable
+ {
+ SignalConst sig = new(ys, period)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public SignalXy SignalXy(double[] xs, double[] ys, Color? color = null)
+ {
+ SignalXySourceDoubleArray dataSource = new(xs, ys);
+
+ SignalXy sig = new(dataSource)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public SignalXy SignalXy(TX[] xs, TY[] ys, Color? color = null)
+ {
+ var dataSource = new SignalXySourceGenericArray(xs, ys);
+
+ SignalXy sig = new(dataSource)
+ {
+ Color = color ?? GetNextColor()
+ };
+
+ _plot.PlottableList.Add(sig);
+
+ return sig;
+ }
+
+ public Text Text(string text, Coordinates location)
+ {
+ return Text(text, location.X, location.Y);
+ }
+
+ public Text Text(string text, double x, double y)
+ {
+ Text txt = new();
+ txt.Label.Text = text;
+ txt.Label.BackColor = Colors.Transparent;
+ txt.Label.BorderColor = Colors.Transparent;
+ txt.Location = new(x, y);
+ _plot.PlottableList.Add(txt);
+ return txt;
+ }
+
+ public VerticalLine VerticalLine(double x, float width = 2, Color? color = null, LinePattern pattern = LinePattern.Solid)
+ {
+ VerticalLine line = new();
+ line.LineStyle.Width = width;
+ line.LineStyle.Color = color ?? GetNextColor();
+ line.LineStyle.Pattern = pattern;
+ line.X = x;
+ _plot.PlottableList.Add(line);
+ return line;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RandomDataGenerator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RandomDataGenerator.cs
new file mode 100644
index 000000000..aeccfaaea
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RandomDataGenerator.cs
@@ -0,0 +1,206 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class RandomDataGenerator
+ {
+ ///
+ /// Global random number generator, to ensure each generator will returns different data.
+ /// Using ThreadLocal, because Random is not thread safe.
+ ///
+ private static readonly ThreadLocal _globalRandomThread = new(() => new Random(GetCryptoRandomInt()));
+
+ ///
+ /// To select right random number generator
+ ///
+ private readonly Random _rand;
+
+ ///
+ /// Create a random number generator.
+ /// The seed is random by deafult, but could be fixed to the defined value
+ ///
+ public RandomDataGenerator(int? seed = null)
+ {
+ _rand = seed.HasValue
+ ? new Random(seed.Value)
+ : _globalRandomThread.Value!;
+ }
+
+ public static RandomDataGenerator Generate { get; private set; } = new(0);
+
+ private static int GetCryptoRandomInt()
+ {
+ var rng = RandomNumberGenerator.Create();
+ var data = new byte[sizeof(int)];
+ rng.GetBytes(data);
+ return BitConverter.ToInt32(data, 0) & (int.MaxValue - 1);
+ }
+
+ #region Methods that return single numbers
+
+ ///
+ /// Return a uniformly random number between 0 (inclusive) and 1 (exclusive)
+ ///
+ public double RandomNumber()
+ {
+ return _rand.NextDouble();
+ }
+
+ ///
+ /// Return a uniformly random number between 0 (inclusive) and (exclusive)
+ ///
+ public double RandomNumber(double max)
+ {
+ return _rand.NextDouble() * max;
+ }
+
+ ///
+ /// Return a uniformly random number between (inclusive) and (exclusive)
+ ///
+ public double RandomNumber(double min, double max)
+ {
+ return _rand.NextDouble() * (max - min) + min;
+ }
+
+ ///
+ /// Return a random number guaranteed not to be zero
+ ///
+ public double RandomNonZeroNumber(double max = 1)
+ {
+ var randomValue = RandomNumber(max);
+ return randomValue != 0
+ ? randomValue
+ : RandomNonZeroNumber();
+ }
+
+ ///
+ /// Return a random integer up to the maximum integer size
+ ///
+ public int RandomInteger()
+ {
+ return _rand.Next();
+ }
+
+ ///
+ /// Return a random byte (0-255)
+ ///
+ public byte RandomByte()
+ {
+ return (byte)_rand.Next(256);
+ }
+
+ ///
+ /// Return a random integer between zero (inclusive) and (exclusive)
+ ///
+ public int RandomInteger(int max)
+ {
+ return _rand.Next(max);
+ }
+
+ ///
+ /// Return a random integer between (inclusive) and (exclusive)
+ ///
+ public int RandomInteger(int min, int max)
+ {
+ return _rand.Next(min, max);
+ }
+
+ ///
+ /// Return a number normally distributed around the given
+ /// according to the standard deviation.
+ ///
+ public double RandomNormalNumber(double mean = 0, double stdDev = 1)
+ {
+ var u1 = RandomNonZeroNumber();
+ var u2 = RandomNumber();
+ var randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2);
+ return mean + stdDev * randStdNormal;
+ }
+
+ #endregion
+
+ ///
+ /// Uniformly distributed random numbers between 0 and 1
+ /// (multiplied by then added to ).
+ ///
+ public double[] RandomSample(int count, double mult = 1, double offset = 0)
+ {
+ var values = new double[count];
+ for (var i = 0; i < count; i++)
+ {
+ values[i] = _rand.NextDouble() * mult + offset;
+ }
+
+ return values;
+ }
+
+ ///
+ /// Return a collection of numbers normally distributed around the given
+ /// according to the standard deviation.
+ ///
+ public double[] RandomNormalSample(int count, double mean = 0, double stdDev = 1)
+ {
+ var values = new double[count];
+ for (var i = 0; i <= count; i++)
+ {
+ values[i] = RandomNormalNumber(mean, stdDev);
+ }
+ return values;
+ }
+
+ ///
+ /// Sine wave with random frequency, amplitude, and phase
+ ///
+ public double[] RandomSin(int count)
+ {
+ var mult = Math.Pow(2, 1 + _rand.NextDouble() * 10);
+ var offset = mult * (_rand.NextDouble() - .5);
+ var oscillations = 1 + _rand.NextDouble() * 5;
+ var phase = _rand.NextDouble() * Math.PI * 2;
+ return ScottPlot.Generate.Sin(count, mult, offset, oscillations, phase);
+ }
+
+ ///
+ /// A sequence of numbers that starts at
+ /// and "walks" randomly from one point to the next, scaled by
+ /// with an approximate slope of .
+ ///
+ public double[] RandomWalk(int count, double mult = 1, double offset = 0, double slope = 0)
+ {
+ var data = new double[count];
+ data[0] = offset;
+ for (var i = 1; i < data.Length; i++)
+ {
+ // RandomSample number between -1 and 1;
+ var randomStep = _rand.NextDouble() * 2 - 1;
+ // Using linear equation y_2 = m * x + y_1 where x = 1,
+ // then adding a scaled random step simplifies to:
+ data[i] = slope + data[i - 1] + randomStep * mult;
+ }
+ return data;
+ }
+
+ ///
+ /// Return a collection OHLCs representing random price action
+ ///
+ public List RandomOhlCs(int count)
+ {
+ var dates = ScottPlot.Generate.DateTime.Weekdays(count);
+ var span = TimeSpan.FromDays(1);
+
+ double mult = 1;
+
+ List ohlcs = new();
+ var open = RandomNumber(150, 250);
+ for (var i = 0; i < count; i++)
+ {
+ var close = open + RandomNumber(-mult, mult);
+ var high = Math.Max(open, close) + RandomNumber(0, mult);
+ var low = Math.Min(open, close) - RandomNumber(0, mult);
+ Ohlc ohlc = new(open, high, low, close, dates[i], span);
+ ohlcs.Add(ohlc);
+ open = close + RandomNumber(-mult / 2, mult / 2);
+ }
+
+ return ohlcs;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RenderPack.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RenderPack.cs
new file mode 100644
index 000000000..9bcd9cc22
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RenderPack.cs
@@ -0,0 +1,54 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class RenderPack
+ {
+ public SKCanvas Canvas { get; }
+ public PixelRect FigureRect { get; }
+ public PixelRect DataRect { get; private set; }
+ public Layout Layout { get; private set; }
+ public Plot Plot { get; }
+ private Stopwatch Stopwatch { get; }
+ public TimeSpan Elapsed => Stopwatch.Elapsed;
+
+ ///
+ /// This object is passed through the render system.
+ /// The plot will be drawn on the canvas to create a figure of the given size.
+ ///
+ public RenderPack(Plot plot, PixelRect figureRect, SKCanvas canvas)
+ {
+ Canvas = canvas;
+ FigureRect = figureRect;
+ Plot = plot;
+ Stopwatch = Stopwatch.StartNew();
+ }
+
+ public void CalculateLayout()
+ {
+ if (DataRect.HasArea)
+ {
+ throw new InvalidOperationException("DataRect must only be calculated once per render");
+ }
+
+ PixelRect scaledRect = new(
+ left: FigureRect.Left / Plot.ScaleFactor,
+ right: FigureRect.Right / Plot.ScaleFactor,
+ bottom: FigureRect.Bottom / Plot.ScaleFactor,
+ top: FigureRect.Top / Plot.ScaleFactor);
+
+ Layout = Plot.Layout.LayoutEngine.GetLayout(scaledRect, Plot.Axes.GetPanels());
+ DataRect = Layout.DataRect;
+ }
+
+ public override string ToString() => $"RenderPack FigureRect={FigureRect} DataRect={DataRect}";
+
+ public void ClipToDataArea()
+ {
+ Canvas.ClipRect(DataRect.ToSkRect());
+ }
+
+ public void DisableClipping()
+ {
+ Canvas.Restore();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RequiredMemberAttribute.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RequiredMemberAttribute.cs
new file mode 100644
index 000000000..b9fcb991a
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/RequiredMemberAttribute.cs
@@ -0,0 +1,10 @@
+namespace System.Runtime.CompilerServices
+{
+ ///
+ /// Allows required members in older .NET versions
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class RequiredMemberAttribute : Attribute
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Version.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Version.cs
new file mode 100644
index 000000000..5a5611997
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/General/Version.cs
@@ -0,0 +1,61 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public static class Version
+ {
+ public static int Major => int.Parse(VersionString.Split('-')[0].Split('.')[0]);
+ public static int Minor => int.Parse(VersionString.Split('-')[0].Split('.')[1]);
+ public static int Build => int.Parse(VersionString.Split('-')[0].Split('.')[2]);
+
+ ///
+ /// Version formatted like "5.0.0-beta"
+ ///
+ public static string VersionString { get; private set; } = GetVersionString();
+
+ ///
+ /// Version formatted like "ScottPlot 5.0.0-beta"
+ ///
+ public static string LongString { get; private set; } = "ScottPlot " + GetVersionString();
+
+ private static string GetVersionString()
+ {
+ var v = Assembly.GetAssembly(typeof(Plot))!
+ .GetCustomAttribute()!
+ .InformationalVersion;
+
+ return v.Contains("+") ? v.Split('+')[0] : v;
+ }
+
+ ///
+ /// Throws an exception if this version of ScottPlot does not match the expected major version
+ ///
+ public static void ShouldBe(int major)
+ {
+ if (major != Major)
+ {
+ throw new InvalidOperationException($"ScottPlot was expected to be {major}.x.x but is actually {VersionString}");
+ }
+ }
+
+ ///
+ /// Throws an exception if this version of ScottPlot does not match the expected major and minor versions
+ ///
+ public static void ShouldBe(int major, int minor)
+ {
+ if (major != Major || minor != Minor)
+ {
+ throw new InvalidOperationException($"ScottPlot was expected to be {major}.{minor}.x but is actually {VersionString}");
+ }
+ }
+
+ ///
+ /// Throws an exception if this version of ScottPlot does not match the exact one given
+ ///
+ public static void ShouldBe(int major, int minor, int build)
+ {
+ if (major != Major || minor != Minor || build != Build)
+ {
+ throw new InvalidOperationException($"ScottPlot was expected to be {major}.{minor}.{build} but is actually {VersionString}");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Grids/DefaultGrid.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Grids/DefaultGrid.cs
new file mode 100644
index 000000000..1685c88a3
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Grids/DefaultGrid.cs
@@ -0,0 +1,68 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class DefaultGrid(IXAxis xAxis, IYAxis yAxis) : IGrid
+ {
+ public bool IsVisible { get; set; } = true;
+ public LineStyle MajorLineStyle = new() { Width = 1, Color = Colors.Black.WithOpacity(.1) };
+ public LineStyle MinorLineStyle = new() { Width = 0, Color = Colors.Black.WithOpacity(.05) };
+
+ public int MaximumNumberOfGridLines = 1000;
+
+ public bool IsBeneathPlotables { get; set; } = true;
+
+ public IXAxis XAxis { get; private set; } = xAxis;
+ public IYAxis YAxis { get; private set; } = yAxis;
+
+ public void Replace(IXAxis xAxis)
+ {
+ XAxis = xAxis;
+ }
+
+ public void Replace(IYAxis yAxis)
+ {
+ YAxis = yAxis;
+ }
+
+ public void Render(RenderPack rp)
+ {
+ if (!IsVisible)
+ {
+ return;
+ }
+
+ var xTicks = XAxis.TickGenerator.Ticks.Where(x => x.Position >= XAxis.Min && x.Position <= XAxis.Max);
+ var yTicks = YAxis.TickGenerator.Ticks.Where(x => x.Position >= YAxis.Min && x.Position <= YAxis.Max);
+
+ if (MinorLineStyle.Width > 0)
+ {
+ float[] xTicksMinor = xTicks.Where(x => !x.IsMajor).Select(x => XAxis.GetPixel(x.Position, rp.DataRect)).ToArray();
+ float[] yTicksMinor = yTicks.Where(x => !x.IsMajor).Select(x => YAxis.GetPixel(x.Position, rp.DataRect)).ToArray();
+ RenderGridLines(rp, xTicksMinor, XAxis.Edge, MinorLineStyle);
+ RenderGridLines(rp, yTicksMinor, YAxis.Edge, MinorLineStyle);
+ }
+
+ if (MajorLineStyle.Width > 0)
+ {
+ float[] xTicksMajor = xTicks.Where(x => x.IsMajor).Select(x => XAxis.GetPixel(x.Position, rp.DataRect)).ToArray();
+ float[] yTicksMajor = yTicks.Where(x => x.IsMajor).Select(x => YAxis.GetPixel(x.Position, rp.DataRect)).ToArray();
+ RenderGridLines(rp, xTicksMajor, XAxis.Edge, MajorLineStyle);
+ RenderGridLines(rp, yTicksMajor, YAxis.Edge, MajorLineStyle);
+ }
+ }
+
+ private void RenderGridLines(RenderPack rp, float[] positions, Edge edge, LineStyle lineStyle)
+ {
+ Pixel[] starts = new Pixel[positions.Length];
+ Pixel[] ends = new Pixel[positions.Length];
+
+ for (int i = 0; i < positions.Length; i++)
+ {
+ float px = positions[i];
+ starts[i] = edge.IsHorizontal() ? new Pixel(px, rp.DataRect.Bottom) : new Pixel(rp.DataRect.Left, px);
+ ends[i] = edge.IsHorizontal() ? new Pixel(px, rp.DataRect.Top) : new Pixel(rp.DataRect.Right, px);
+ }
+
+ Drawing.DrawLines(rp.Canvas, starts, ends, lineStyle.Color, lineStyle.Width, antiAlias: true, lineStyle.Pattern);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Checker.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Checker.cs
new file mode 100644
index 000000000..79ef6d053
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Checker.cs
@@ -0,0 +1,37 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Checker : IHatch
+ {
+ static Checker()
+ {
+ _bmp = CreateBitmap();
+ }
+ private static readonly SKBitmap _bmp;
+ private static SKBitmap CreateBitmap()
+ {
+ var bmp = new SKBitmap(20, 20);
+ using var paint = new SKPaint()
+ {
+ Color = Colors.White.ToSkColor()
+ };
+ using var path = new SKPath();
+ using var canvas = new SKCanvas(bmp);
+
+ canvas.Clear(Colors.Black.ToSkColor());
+ canvas.DrawRect(new SKRect(0, 0, 10, 10), paint);
+ canvas.DrawRect(new SKRect(10, 10, 20, 20), paint);
+
+ return bmp;
+ }
+
+ public SKShader GetShader(Color backgroundColor, Color hatchColor)
+ {
+ return SKShader.CreateBitmap(
+ _bmp,
+ SKShaderTileMode.Repeat,
+ SKShaderTileMode.Repeat,
+ SKMatrix.CreateScale(0.5f, 0.5f))
+ .WithColorFilter(Drawing.GetMaskColorFilter(hatchColor, backgroundColor));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Dots.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Dots.cs
new file mode 100644
index 000000000..db4933b78
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Dots.cs
@@ -0,0 +1,38 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Dots : IHatch
+ {
+ static Dots()
+ {
+ _bmp = CreateBitmap();
+ }
+ private static readonly SKBitmap _bmp;
+ private static SKBitmap CreateBitmap()
+ {
+ var bmp = new SKBitmap(20, 20);
+ using var paint = new SKPaint()
+ {
+ Color = Colors.White.ToSkColor()
+ };
+ using var path = new SKPath();
+ using var canvas = new SKCanvas(bmp);
+
+ paint.IsAntialias = true; // AA is especially important for circles, it seems to do little for the other shapes
+
+ canvas.Clear(Colors.Black.ToSkColor());
+ canvas.DrawCircle(5, 5, 5, paint);
+
+ return bmp;
+ }
+
+ public SKShader GetShader(Color backgroundColor, Color hatchColor)
+ {
+ return SKShader.CreateBitmap(
+ _bmp,
+ SKShaderTileMode.Repeat,
+ SKShaderTileMode.Repeat,
+ SKMatrix.CreateScale(0.5f, 0.5f))
+ .WithColorFilter(Drawing.GetMaskColorFilter(hatchColor, backgroundColor));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Grid.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Grid.cs
new file mode 100644
index 000000000..a2ab27a86
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Grid.cs
@@ -0,0 +1,48 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Grid : IHatch
+ {
+ public bool Rotate { get; set; }
+
+ static Grid()
+ {
+ _bmp = CreateBitmap();
+ }
+ public Grid(bool rotate = false)
+ {
+ Rotate = rotate;
+ }
+
+ private static readonly SKBitmap _bmp;
+ private static SKBitmap CreateBitmap()
+ {
+ var bmp = new SKBitmap(20, 20);
+ using var paint = new SKPaint()
+ {
+ Color = Colors.White.ToSkColor(),
+ IsStroke = true,
+ StrokeWidth = 3
+ };
+ using var path = new SKPath();
+ using var canvas = new SKCanvas(bmp);
+
+ canvas.Clear(Colors.Black.ToSkColor());
+ canvas.DrawRect(0, 0, 20, 20, paint);
+
+ return bmp;
+ }
+
+ public SKShader GetShader(Color backgroundColor, Color hatchColor)
+ {
+ var rotationMatrix = Rotate ? SKMatrix.CreateRotationDegrees(45) : SKMatrix.Identity;
+
+ return SKShader.CreateBitmap(
+ _bmp,
+ SKShaderTileMode.Repeat,
+ SKShaderTileMode.Repeat,
+ SKMatrix.CreateScale(0.5f, 0.5f)
+ .PostConcat(rotationMatrix))
+ .WithColorFilter(Drawing.GetMaskColorFilter(hatchColor, backgroundColor));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Square.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Square.cs
new file mode 100644
index 000000000..7863d2604
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Square.cs
@@ -0,0 +1,33 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Square : IHatch
+ {
+ static Square()
+ {
+ _bmp = CreateBitmap();
+ }
+ private static readonly SKBitmap _bmp;
+ private static SKBitmap CreateBitmap()
+ {
+ var bitmap = new SKBitmap(20, 20);
+ using var paint = new SKPaint() { Color = Colors.White.ToSkColor() };
+ using var path = new SKPath();
+ using var canvas = new SKCanvas(bitmap);
+
+ canvas.Clear(Colors.Black.ToSkColor());
+ canvas.DrawRect(new SKRect(0, 0, 10, 10), paint);
+
+ return bitmap;
+ }
+
+ public SKShader GetShader(Color backgroundColor, Color hatchColor)
+ {
+ return SKShader.CreateBitmap(
+ _bmp,
+ SKShaderTileMode.Repeat,
+ SKShaderTileMode.Repeat,
+ SKMatrix.CreateScale(0.5f, 0.5f))
+ .WithColorFilter(Drawing.GetMaskColorFilter(hatchColor, backgroundColor));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/StripeDirection.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/StripeDirection.cs
new file mode 100644
index 000000000..93071ea88
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/StripeDirection.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public enum StripeDirection
+ {
+ DiagonalUp,
+ DiagonalDown,
+ Horizontal,
+ Vertical
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Striped.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Striped.cs
new file mode 100644
index 000000000..dbe47fa40
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Hatches/Striped.cs
@@ -0,0 +1,51 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Striped : IHatch
+ {
+ public Striped(StripeDirection stripeDirection = StripeDirection.DiagonalUp)
+ {
+ StripeDirection = stripeDirection;
+ }
+
+ // This is implemented as a transformation of the shader, so we don't need to invalidate the bitmap in the setter
+ public StripeDirection StripeDirection { get; set; }
+ static Striped()
+ {
+ _bmp = CreateBitmap();
+ }
+ private static readonly SKBitmap _bmp;
+ private static SKBitmap CreateBitmap()
+ {
+ var bitmap = new SKBitmap(20, 50);
+
+ using var paint = new SKPaint() { Color = Colors.White.ToSkColor() };
+ using var path = new SKPath();
+ using var canvas = new SKCanvas(bitmap);
+
+ canvas.Clear(Colors.Black.ToSkColor());
+ canvas.DrawRect(new SKRect(0, 0, 20, 20), paint);
+
+ return bitmap;
+ }
+
+ public SKShader GetShader(Color backgroundColor, Color hatchColor)
+ {
+ var rotationMatrix = StripeDirection switch
+ {
+ StripeDirection.DiagonalUp => SKMatrix.CreateRotationDegrees(-45),
+ StripeDirection.DiagonalDown => SKMatrix.CreateRotationDegrees(45),
+ StripeDirection.Horizontal => SKMatrix.Identity,
+ StripeDirection.Vertical => SKMatrix.CreateRotationDegrees(90),
+ _ => throw new NotImplementedException(nameof(StripeDirection))
+ };
+
+ return SKShader.CreateBitmap(
+ _bmp,
+ SKShaderTileMode.Repeat,
+ SKShaderTileMode.Repeat,
+ SKMatrix.CreateScale(0.1f, 0.15f)
+ .PostConcat(rotationMatrix))
+ .WithColorFilter(Drawing.GetMaskColorFilter(hatchColor, backgroundColor));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/IO/BitmapHeader.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/IO/BitmapHeader.cs
new file mode 100644
index 000000000..2bbf06fa0
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/IO/BitmapHeader.cs
@@ -0,0 +1,35 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This struct holds values that define the first several bytes of a bitmap file.
+ ///
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ internal struct BitmapHeader
+ {
+ public const int FileHeaderSize = 54; // number of bytes in the bitmap header
+ public readonly byte MagicNumberHighByte = (byte)'B';
+ public readonly byte MagicNumberLowByte = (byte)'M';
+ public readonly int Size; // number of bytes in the image
+ public readonly short Reserved1;
+ public readonly short Reserved2;
+ public readonly int Offset = FileHeaderSize; // byte where the image data begins
+ public readonly int BitmapInfoHeaderSize = 40;
+ public readonly int Width; // pixel width of the image
+ public readonly int Height; // pixel height of the image (a negative value means rows are encoded top-to-bottom)
+ public readonly short ColorPlanes = 1; // always 1 for standard images
+ public readonly short BitsPerPixel = 32; // typically 8 (grayscale), 24 (RGB), or 32 (RGBA)
+ public readonly int CompressionMethod = 0; // 0 means no compression
+ public readonly int PixelSize = 0; // Size of the compressed image. 0 is valid if compression is disabled.
+ public readonly int HorizontalResolution; // pixels per meter (0 for undefined)
+ public readonly int VerticalResolution; // pixels per meter (0 for undefined)
+ public readonly int ColorsInPalette; // 0 for default
+ public readonly int ImportantColors; // 0 indicates every color is important
+
+ public BitmapHeader(int width, int height)
+ {
+ Size = width * Math.Abs(height) * BitsPerPixel / 8 + FileHeaderSize;
+ Width = width;
+ Height = -height;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxes.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxes.cs
new file mode 100644
index 000000000..87d65eeff
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxes.cs
@@ -0,0 +1,32 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface describes a pair of 1D axes.
+ /// It is intended to be stored inside objects,
+ /// defining which axes they use and providing logic for coordinate/pixel conversions.
+ ///
+ public interface IAxes
+ {
+ ///
+ /// Describes the region in the center of the figure where plottable data will be displayed.
+ /// This region is set by the renderer immediately before a Plottable's Render() method is called.
+ ///
+ PixelRect DataRect { get; set; }
+
+ // Note: Axes (not just the translation logic) are here so ticks are accessible to plottables.
+ // Note: At render time any null axes will be set to the default axes for the plot
+ IXAxis XAxis { get; set; }
+ IYAxis YAxis { get; set; }
+
+ PixelRect GetPixelRect(CoordinateRect rect);
+ PixelLine GetPixelLine(CoordinateLine rect);
+
+ Pixel GetPixel(Coordinates coordinates);
+ float GetPixelX(double xCoordinate);
+ float GetPixelY(double yCoordinate);
+
+ Coordinates GetCoordinates(Pixel pixel);
+ double GetCoordinateX(float pixel);
+ double GetCoordinateY(float pixel);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxis.cs
new file mode 100644
index 000000000..295e44e94
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxis.cs
@@ -0,0 +1,63 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface describes a 1D axis (horizontal or vertical).
+ /// Responsibilities include: min/max management, unit/pixel conversion,
+ /// tick generation (and rendering), axis label rendering,
+ /// and self-measurement for layout purposes.
+ ///
+ public interface IAxis : IPanel
+ {
+ ///
+ /// Min/Max range currently displayed by this axis
+ ///
+ CoordinateRangeMutable Range { get; } // TODO: don't expose this
+
+ double Min { get; set; }
+ double Max { get; set; }
+
+ ///
+ /// Get the pixel position of a coordinate given the location and size of the data area
+ ///
+ float GetPixel(double position, PixelRect dataArea);
+
+ ///
+ /// Get the coordinate of a pixel position given the location and size of the data area
+ ///
+ double GetCoordinate(float pixel, PixelRect dataArea);
+
+ ///
+ /// Given a distance in coordinate space, converts to pixel space
+ ///
+ /// A distance in coordinate units
+ /// The rectangle onto which the coordinates are mapped
+ /// The same distance in pixel units
+ double GetPixelDistance(double coordinateDistance, PixelRect dataArea);
+
+ ///
+ /// Given a distance in pixel space, converts to coordinate space
+ ///
+ /// A distance in pixel units
+ /// The rectangle onto which the coordinates are mapped
+ /// The same distance in coordinate units
+ double GetCoordinateDistance(float pixelDistance, PixelRect dataArea);
+
+ ///
+ /// Logic for determining tick positions and formatting tick labels
+ ///
+ ITickGenerator TickGenerator { get; set; }
+
+ ///
+ /// The label is the text displayed distal to the ticks
+ ///
+ Label Label { get; }
+
+ TickMarkStyle MajorTickStyle { get; set; }
+
+ TickMarkStyle MinorTickStyle { get; set; }
+
+ Label TickLabelStyle { get; set; }
+
+ LineStyle FrameLineStyle { get; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxisRule.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxisRule.cs
new file mode 100644
index 000000000..6522decf7
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IAxisRule.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// These rules are applied just before each render
+ ///
+ public interface IAxisRule
+ {
+ void Apply(RenderPack rp, bool beforeLayout);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IColormap.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IColormap.cs
new file mode 100644
index 000000000..aa99ce308
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IColormap.cs
@@ -0,0 +1,27 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IColormap
+ {
+ ///
+ /// Full name for this colormap
+ ///
+ string Name { get; }
+
+ ///
+ /// Returns the color of a position on this colormap (from 0 to 1).
+ /// Returns transparent if NaN.
+ /// Positions outside the range will be clamped.
+ ///
+ /// position from 0 (first color) to 1 (last color)
+ Color GetColor(double position);
+
+ ///
+ /// Returns the color of a position on this colormap (according to the given range).
+ /// Returns transparent if NaN.
+ /// Positions outside the range will be clamped.
+ ///
+ /// position relative to the given range
+ /// range of values spanned by this colormap
+ Color GetColor(double position, Range range);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IFunctionSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IFunctionSource.cs
new file mode 100644
index 000000000..fe78c9531
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IFunctionSource.cs
@@ -0,0 +1,9 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IFunctionSource
+ {
+ CoordinateRange RangeX { get; }
+ CoordinateRange GetRangeY(CoordinateRange rangeX);
+ double Get(double x);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IGrid.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IGrid.cs
new file mode 100644
index 000000000..07f2cc9a7
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IGrid.cs
@@ -0,0 +1,14 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Implement this interface to create a custom grid
+ ///
+ public interface IGrid
+ {
+ bool IsVisible { get; set; }
+ bool IsBeneathPlotables { get; set; }
+ void Render(RenderPack rp);
+ void Replace(IXAxis xAxis); // TODO: remove this
+ void Replace(IYAxis yAxis); // TODO: remove this
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHasColorAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHasColorAxis.cs
new file mode 100644
index 000000000..5908b888e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHasColorAxis.cs
@@ -0,0 +1,8 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IHasColorAxis
+ {
+ Range GetRange();
+ IColormap Colormap { get; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHatch.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHatch.cs
new file mode 100644
index 000000000..fa3caf01d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IHatch.cs
@@ -0,0 +1,7 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IHatch
+ {
+ SKShader GetShader(Color backgroundColor, Color hatchColor);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ILayoutEngine.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ILayoutEngine.cs
new file mode 100644
index 000000000..8d3ccdacf
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ILayoutEngine.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface describes a class that decides how to lay-out a collection of panels around the
+ /// edges of a figure and create a final layout containing size and position of all panels
+ /// and also the size and position of the data area.
+ ///
+ public interface ILayoutEngine
+ {
+ public Layout GetLayout(PixelRect figureRect, IEnumerable panels);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IManagesAxisLimits.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IManagesAxisLimits.cs
new file mode 100644
index 000000000..960241e2d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IManagesAxisLimits.cs
@@ -0,0 +1,12 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface is applied to plottables which modify axis limits at rendeer time.
+ /// The update method is called at render time before the ticks are calculated.
+ ///
+ public interface IManagesAxisLimits
+ {
+ void UpdateAxisLimits(Plot plot, bool force = false);
+ bool ManageAxisLimits { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IMarker.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IMarker.cs
new file mode 100644
index 000000000..d0b791d59
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IMarker.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Describes logic necessary to render a marker at a point
+ ///
+ public interface IMarker
+ {
+ void Render(SKCanvas canvas, SKPaint paint, Pixel center, float size, FillStyle fill, LineStyle outline);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IOHLCSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IOHLCSource.cs
new file mode 100644
index 000000000..1a9c08964
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IOHLCSource.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IOhlcSource
+ {
+ List GetOhlCs();
+ public CoordinateRange GetLimitsX();
+ public CoordinateRange GetLimitsY();
+ AxisLimits GetLimits();
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPalette.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPalette.cs
new file mode 100644
index 000000000..6bccad68e
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPalette.cs
@@ -0,0 +1,25 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IPalette
+ {
+ ///
+ /// All colors in this palette
+ ///
+ public Color[] Colors { get; }
+
+ ///
+ /// Display name
+ ///
+ public string Name { get; }
+
+ ///
+ /// Additional information such as the source of this palette
+ ///
+ public string Description { get; }
+
+ ///
+ /// Return the Nth color (wrapping around if N is larger than the number of colors)
+ ///
+ public Color GetColor(int index);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPanel.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPanel.cs
new file mode 100644
index 000000000..bb41476ed
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPanel.cs
@@ -0,0 +1,54 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// A panel is a rectangular region outside the data area of a plot.
+ /// Example panels include axes, colorbars, and titles
+ ///
+ public interface IPanel
+ {
+ ///
+ /// If false, the panel will not be displayed or report any size
+ ///
+ public bool IsVisible { get; set; }
+
+ ///
+ /// Disallow the panel to be smaller than this
+ ///
+ public float MinimumSize { get; set; }
+
+ ///
+ /// Disallow the panel to be larger than this
+ ///
+ public float MaximumSize { get; set; }
+
+ ///
+ /// Return the size (in pixels) of the panel in the dimension perpendicular to the edge it lays on
+ ///
+ ///
+ float Measure();
+
+ ///
+ /// Indicates which edge of the data rectangle this panel lays on
+ ///
+ Edge Edge { get; }
+
+ ///
+ /// Draw this panel on a canvas
+ ///
+ /// contains the canvas to draw on
+ /// dimensions of the data area (pixel units)
+ /// size of this panel (pixel units)
+ /// distance from the edge of this panel to the edge of the data area
+ void Render(RenderPack rp, float size, float offset);
+
+ ///
+ /// Enable this to display extra information on the axis to facilitate development
+ ///
+ bool ShowDebugInformation { get; set; }
+
+ ///
+ /// Return the rectangle for this panel
+ ///
+ PixelRect GetPanelRect(PixelRect dataRect, float size, float offset);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotControl.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotControl.cs
new file mode 100644
index 000000000..0b1119f2f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotControl.cs
@@ -0,0 +1,48 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IPlotControl
+ {
+ ///
+ /// The displayed by this interactive control
+ ///
+ Plot Plot { get; }
+
+ ///
+ /// Render the plot and update the image
+ ///
+ void Refresh();
+
+ ///
+ /// Advanced options for configuring how user inputs manipulate the plot
+ ///
+ IPlotInteraction Interaction { get; set; }
+
+ ///
+ /// Platform-specific logic for managing the context menu
+ ///
+ IPlotMenu Menu { get; set; }
+
+ ///
+ /// Launch the default pop-up menu (typically in response to a right-click) at the given position in the control
+ ///
+ void ShowContextMenu(Pixel position);
+
+ ///
+ /// Context for hardware-accelerated graphics (or null if not available)
+ ///
+ GRContext? GrContext { get; }
+
+ ///
+ /// Determine the DPI scaling ratio of the present display.
+ /// A value of 1.0 means no scaling, and 1.5 means 150% scaling.
+ /// This operation may be costly so do not call it frequently.
+ ///
+ float DetectDisplayScale();
+
+ ///
+ /// The value of the present display scaling.
+ /// Mouse positions are multiplied by this value for pixel/coordinate conversions.
+ ///
+ float DisplayScale { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotInteraction.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotInteraction.cs
new file mode 100644
index 000000000..39402cec4
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotInteraction.cs
@@ -0,0 +1,34 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IPlotInteraction
+ {
+ IPlotControl PlotControl { get; }
+
+ ///
+ /// Disable all mouse interactivity
+ ///
+ void Disable();
+
+ ///
+ /// Enable mouse interactivity using the default mouse actions
+ ///
+ void Enable();
+
+ ///
+ /// Enable mouse interactivity using custom mouse actions
+ ///
+ void Enable(PlotActions customActions);
+
+ void OnMouseMove(Pixel newPosition);
+
+ void KeyUp(Key key);
+ void KeyDown(Key key);
+
+ void MouseDown(Pixel position, MouseButton button);
+
+ void MouseUp(Pixel position, MouseButton button);
+ void DoubleClick();
+
+ void MouseWheelVertical(Pixel pixel, float delta);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotMenu.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotMenu.cs
new file mode 100644
index 000000000..9e1b1b269
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlotMenu.cs
@@ -0,0 +1,13 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IPlotMenu
+ {
+ public void Reset();
+
+ public void Clear();
+
+ public void Add(string label, Action action);
+
+ void ShowContextMenu(Pixel pixel);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottable.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottable.cs
new file mode 100644
index 000000000..a492b2e3b
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottable.cs
@@ -0,0 +1,37 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Any object that renders shapes on the canvas using scale information from the axes must implement this interface.
+ ///
+ public interface IPlottable
+ {
+ ///
+ /// Toggles whether this plottable is shown and contributes to the automatic axis limit detection.
+ /// The calling method will check this variable (it does not need to be checked inside the Render method).
+ ///
+ bool IsVisible { get; set; }
+
+ ///
+ /// This object performs coordinate/pixel translation at render time based on the latest data area.
+ /// It stores the axes to use for this plottable and also the data area (in pixels) updated just before each render.
+ /// If this object is null it will be constructed using the default X and Y axes at render time.
+ ///
+ IAxes Axes { get; set; }
+
+ ///
+ /// Return the 2D area (in coordinate space) occupied by the data contained in this plottable
+ ///
+ AxisLimits GetAxisLimits();
+
+ ///
+ /// Draw the data from this plottable into the data area defined in the .
+ /// By default the surface is already clipped to the data area, but this can be cleared inside the plottable.
+ ///
+ void Render(RenderPack rp);
+
+ ///
+ /// Items which will appear in the legend
+ ///
+ IEnumerable LegendItems { get; } // TODO: this should be a method GetLegendItems()
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottableGL.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottableGL.cs
new file mode 100644
index 000000000..7ac64fc76
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IPlottableGL.cs
@@ -0,0 +1,19 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface is applied to plottables which can be rendered directly on the GPU using an OpenGL shader
+ ///
+ public interface IPlottableGl : IPlottable
+ {
+ ///
+ /// The control used to display this plottable.
+ /// It is used to access the at render time.
+ ///
+ IPlotControl PlotControl { get; }
+
+ ///
+ /// Used to manually synchronize rendering
+ ///
+ void GlFinish();
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderAction.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderAction.cs
new file mode 100644
index 000000000..9eff0c580
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderAction.cs
@@ -0,0 +1,7 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IRenderAction
+ {
+ void Render(RenderPack renderPack);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderLast.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderLast.cs
new file mode 100644
index 000000000..49d30a954
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IRenderLast.cs
@@ -0,0 +1,11 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IRenderLast
+ {
+ ///
+ /// Plottables that implement this interface have a second render method that runs
+ /// after the axes are drawn, allowing graphics to be placed on top of the axes.
+ ///
+ void RenderLast(RenderPack renderPack);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IScatterSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IScatterSource.cs
new file mode 100644
index 000000000..593d77e89
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IScatterSource.cs
@@ -0,0 +1,25 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Represents a series of data points with distinct X and Y positions in coordinate space.
+ ///
+ public interface IScatterSource
+ {
+ ///
+ /// Return a copy of the data in format.
+ ///
+ IReadOnlyList GetScatterPoints(); // TODO: obsolete this
+
+ ///
+ /// Return the point nearest a specific location given the X/Y pixel scaling information from a previous render.
+ /// Will return if the nearest point is greater than pixels away.
+ ///
+ DataPoint GetNearest(Coordinates location, RenderDetails renderInfo, float maxDistance = 15);
+
+ public CoordinateRange GetLimitsX(); // TODO: struct
+
+ public CoordinateRange GetLimitsY(); // TODO: struct
+
+ AxisLimits GetLimits();
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalSource.cs
new file mode 100644
index 000000000..e88d8779f
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalSource.cs
@@ -0,0 +1,63 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// This interface is used by plottables to access data while rendering.
+ /// This interface describes Y data sampled along an X axis at a fixed period.
+ ///
+ public interface ISignalSource
+ {
+ ///
+ /// X distance between Y points
+ ///
+ double Period { get; set; }
+
+ ///
+ /// X position of the first data point
+ ///
+ double XOffset { get; set; }
+
+ ///
+ /// Shift Y position of all values by this amount
+ ///
+ double YOffset { get; set; }
+
+ ///
+ /// Do not display data above this index
+ ///
+ public int MaximumIndex { get; set; }
+
+ ///
+ /// Do not display data below this index
+ ///
+ public int MinimumIndex { get; set; }
+
+ ///
+ /// Returns range information about the data at a specific pixel location
+ ///
+ PixelColumn GetPixelColumn(IAxes axes, int xPixelIndex);
+
+ ///
+ /// Returns the predicted index for the data point nearest a given X position.
+ /// If clamped, the returned index will be clamped between 0 and Length - 1.
+ ///
+ int GetIndex(double x, bool clamp);
+
+ ///
+ /// Returns the X position for a given index.
+ ///
+ double GetX(int index);
+
+ ///
+ /// Return an object for working with all Y values.
+ ///
+ IReadOnlyList GetYs();
+ // NOTE: GetYs() is only called in low density mode to plot a few ploints
+ // TODO: Add min/max X arguments so large datasets are not copied
+
+ public CoordinateRange GetLimitsX(); // TODO: struct
+
+ public CoordinateRange GetLimitsY(); // TODO: struct
+
+ AxisLimits GetLimits();
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalXYSource.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalXYSource.cs
new file mode 100644
index 000000000..e91791696
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ISignalXYSource.cs
@@ -0,0 +1,41 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface ISignalXySource
+ {
+ ///
+ /// X position of the first data point
+ ///
+ double XOffset { get; set; }
+
+ ///
+ /// Shift Y position of all values by this amount
+ ///
+ double YOffset { get; set; }
+
+ ///
+ /// Do not display data below this index
+ ///
+ public int MinimumIndex { get; set; }
+
+ ///
+ /// Do not display data above this index
+ ///
+ public int MaximumIndex { get; set; }
+
+ ///
+ /// If enabled, Xs will be vertical and Ys will be horizontal.
+ ///
+ public bool Rotated { get; set; }
+
+ ///
+ /// Return the axis limits covered by these data
+ ///
+ AxisLimits GetAxisLimits();
+
+ ///
+ /// Return pixels to render to display this signal.
+ /// May return one extra point on each side of the plot outside the data area.
+ ///
+ Pixel[] GetPixelsToDraw(RenderPack rp, IAxes axes);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ITickGenerator.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ITickGenerator.cs
new file mode 100644
index 000000000..ff23bfe64
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/ITickGenerator.cs
@@ -0,0 +1,21 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface ITickGenerator
+ {
+ ///
+ /// Ticks to display the next time the axis is rendered
+ ///
+ Tick[] Ticks { get; set; }
+
+ ///
+ /// Do not automatically generate more ticks than this
+ ///
+ int MaxTickCount { get; set; }
+
+ ///
+ /// Logic for generating ticks automatically.
+ /// Generated ticks are stored in .
+ ///
+ void Regenerate(CoordinateRange range, Edge edge, PixelLength size);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IXAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IXAxis.cs
new file mode 100644
index 000000000..2c65395c4
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IXAxis.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Horizontal axis
+ ///
+ public interface IXAxis : IAxis
+ {
+ public double Width { get; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IYAxis.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IYAxis.cs
new file mode 100644
index 000000000..24aa86a10
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IYAxis.cs
@@ -0,0 +1,10 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Vertical axis
+ ///
+ public interface IYAxis : IAxis
+ {
+ public double Height { get; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IZoomRectangle.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IZoomRectangle.cs
new file mode 100644
index 000000000..aeec4a8ee
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Interfaces/IZoomRectangle.cs
@@ -0,0 +1,16 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public interface IZoomRectangle
+ {
+ bool VerticalSpan { get; set; }
+ bool HorizontalSpan { get; set; }
+ bool IsVisible { get; set; }
+
+ public Pixel MouseDown { get; }
+ public Pixel MouseUp { get; }
+ void Update(Pixel mouseDown, Pixel mouseUp);
+ void Clear();
+
+ void Render(RenderPack rp);
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/Automatic.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/Automatic.cs
new file mode 100644
index 000000000..320d8545c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/Automatic.cs
@@ -0,0 +1,52 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Generate the layout by measuring all panels and adding
+ /// enough padding around the data area to fit them all exactly.
+ ///
+ public class Automatic : LayoutEngineBase, ILayoutEngine
+ {
+ public Layout GetLayout(PixelRect figureRect, IEnumerable panels)
+ {
+ /* PROBLEM: There is a chicken-or-egg situation
+ * where the ideal layout depends on the ticks,
+ * but the ticks depend on the layout.
+ *
+ * SOLUTION: Regenerate ticks using the figure area (not the data area)
+ * to create a first-pass estimate of the space needed for axis panels.
+ * Ticks require recalculation once more after the axes are repositioned
+ * according to the layout determined by this function.
+ *
+ */
+
+ PixelSize figureSize = figureRect.Size;
+
+ panels.OfType()
+ .ToList()
+ .ForEach(xAxis => xAxis.TickGenerator.Regenerate(xAxis.Range.ToCoordinateRange, xAxis.Edge, figureSize.Width));
+
+ panels.OfType()
+ .ToList()
+ .ForEach(yAxis => yAxis.TickGenerator.Regenerate(yAxis.Range.ToCoordinateRange, yAxis.Edge, figureSize.Height));
+
+ Dictionary panelSizes = MeasurePanels(panels);
+ Dictionary panelOffsets = GetPanelOffsets(panels, panelSizes);
+
+ PixelPadding paddingNeededForPanels = new(
+ left: panels.Where(x => x.Edge == Edge.Left).Select(x => panelSizes[x]).Sum(),
+ right: panels.Where(x => x.Edge == Edge.Right).Select(x => panelSizes[x]).Sum(),
+ bottom: panels.Where(x => x.Edge == Edge.Bottom).Select(x => panelSizes[x]).Sum(),
+ top: panels.Where(x => x.Edge == Edge.Top).Select(x => panelSizes[x]).Sum());
+
+ PixelRect dataRect = new(
+ left: paddingNeededForPanels.Left,
+ right: figureSize.Width - paddingNeededForPanels.Right,
+ bottom: figureSize.Height - paddingNeededForPanels.Bottom,
+ top: paddingNeededForPanels.Top);
+
+ dataRect = dataRect.WithPan(figureRect.Left, figureRect.Top);
+
+ return new Layout(figureRect, dataRect, panelSizes, panelOffsets);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedDataArea.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedDataArea.cs
new file mode 100644
index 000000000..63f83d09c
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedDataArea.cs
@@ -0,0 +1,22 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Generate a layout using a fixed rectangle for the data area
+ ///
+ public class FixedDataArea : LayoutEngineBase, ILayoutEngine
+ {
+ private PixelRect DataRect { get; }
+
+ public FixedDataArea(PixelRect dataRect)
+ {
+ DataRect = dataRect;
+ }
+
+ public Layout GetLayout(PixelRect figureRect, IEnumerable panels)
+ {
+ Dictionary panelSizes = MeasurePanels(panels);
+ Dictionary panelOffsets = GetPanelOffsets(panels, panelSizes);
+ return new Layout(figureRect, DataRect, panelSizes, panelOffsets);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedPadding.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedPadding.cs
new file mode 100644
index 000000000..31ed2e95d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/FixedPadding.cs
@@ -0,0 +1,39 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Generate layouts where the data area has a fixed padding from the edge of the figure
+ ///
+ public class FixedPadding : LayoutEngineBase, ILayoutEngine
+ {
+ private PixelPadding Padding { get; }
+
+ public FixedPadding(PixelPadding padding)
+ {
+ Padding = padding;
+ }
+
+ public Layout GetLayout(PixelRect figureRect, IEnumerable panels)
+ {
+ // must recalculate ticks before measuring panels
+
+ panels.OfType()
+ .ToList()
+ .ForEach(xAxis => xAxis.TickGenerator.Regenerate(xAxis.Range.ToCoordinateRange, xAxis.Edge, figureRect.Width));
+
+ panels.OfType()
+ .ToList()
+ .ForEach(yAxis => yAxis.TickGenerator.Regenerate(yAxis.Range.ToCoordinateRange, yAxis.Edge, figureRect.Height));
+
+ Dictionary panelSizes = MeasurePanels(panels);
+ Dictionary panelOffsets = GetPanelOffsets(panels, panelSizes);
+
+ PixelRect dataRect = new(
+ left: figureRect.Left + Padding.Left,
+ right: figureRect.Left + figureRect.Width - Padding.Right,
+ bottom: figureRect.Top + figureRect.Height - Padding.Bottom,
+ top: figureRect.Top + Padding.Top);
+
+ return new Layout(figureRect, dataRect, panelSizes, panelOffsets);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/LayoutEngineBase.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/LayoutEngineBase.cs
new file mode 100644
index 000000000..a059417c9
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/LayoutEngineBase.cs
@@ -0,0 +1,41 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class LayoutEngineBase
+ {
+ internal static Dictionary MeasurePanels(IEnumerable panels)
+ {
+ Dictionary measuredPanels = new();
+
+ foreach (IPanel panel in panels)
+ {
+ measuredPanels[panel] = panel.MinimumSize == panel.MaximumSize
+ ? panel.MinimumSize
+ : NumericConversion.Clamp(panel.Measure(), panel.MinimumSize, panel.MaximumSize);
+ }
+
+ return measuredPanels;
+ }
+
+ internal static void CalculateOffsets(IEnumerable panels, Dictionary sizes, Dictionary offsets)
+ {
+ float offset = 0;
+ foreach (IPanel panel in panels)
+ {
+ offsets[panel] = offset;
+ offset += sizes[panel];
+ }
+ }
+
+ internal static Dictionary GetPanelOffsets(IEnumerable panels, Dictionary panelSizes)
+ {
+ Dictionary panelOffsets = new();
+
+ CalculateOffsets(panels.Where(x => x.Edge == Edge.Left), panelSizes, panelOffsets);
+ CalculateOffsets(panels.Where(x => x.Edge == Edge.Right), panelSizes, panelOffsets);
+ CalculateOffsets(panels.Where(x => x.Edge == Edge.Bottom), panelSizes, panelOffsets);
+ CalculateOffsets(panels.Where(x => x.Edge == Edge.Top), panelSizes, panelOffsets);
+
+ return panelOffsets;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/MatchedDataRect.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/MatchedDataRect.cs
new file mode 100644
index 000000000..acf09ca2d
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/LayoutEngines/MatchedDataRect.cs
@@ -0,0 +1,24 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Generate layouts that match layouts of another control
+ ///
+ public class MatchedDataRect : LayoutEngineBase, ILayoutEngine
+ {
+ private Plot ReferencePlot { get; }
+
+ public MatchedDataRect(Plot referencePlot)
+ {
+ ReferencePlot = referencePlot;
+ }
+
+ public Layout GetLayout(PixelRect figureRect, IEnumerable panels)
+ {
+ Dictionary panelSizes = MeasurePanels(panels);
+ Dictionary panelOffsets = GetPanelOffsets(panels, panelSizes);
+
+ PixelRect dataRect = ReferencePlot.RenderManager.LastRender.DataRect;
+ return new Layout(figureRect, dataRect, panelSizes, panelOffsets);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Common.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Common.cs
new file mode 100644
index 000000000..253366812
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Common.cs
@@ -0,0 +1,121 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ ///
+ /// Common methods which legends may choose to use for rendering
+ ///
+ public static class Common
+ {
+ ///
+ /// Render a leger item: its label, symbol, and all its children
+ ///
+ public static void RenderItem(
+ SKCanvas canvas,
+ SKPaint paint,
+ SizedLegendItem sizedItem,
+ float x,
+ float y,
+ float symbolWidth,
+ float symbolPadRight,
+ PixelPadding itemPadding)
+ {
+ LegendItem item = sizedItem.Item;
+
+ SKPoint textPoint = new(x, y + paint.TextSize);
+ float ownHeight = sizedItem.Size.OwnSize.Height;
+
+ if (item.HasSymbol)
+ {
+ RenderSymbol(
+ canvas: canvas,
+ item: item,
+ x: x,
+ y: y + itemPadding.Bottom,
+ height: ownHeight - itemPadding.Vertical,
+ symbolWidth: symbolWidth);
+
+ textPoint.X += symbolWidth + symbolPadRight;
+ }
+
+ using SKAutoCanvasRestore _ = new(canvas);
+ if (!string.IsNullOrEmpty(item.Label))
+ {
+ canvas.DrawText(item.Label, textPoint, paint);
+ canvas.Translate(itemPadding.Left, 0);
+ }
+
+ y += ownHeight;
+ foreach (var curr in sizedItem.Children)
+ {
+ RenderItem(canvas, paint, curr, x, y, symbolWidth, symbolPadRight, itemPadding);
+ y += curr.Size.WithChildren.Height;
+ }
+ }
+
+ ///
+ /// Render just the symbol of a legend
+ ///
+ public static void RenderSymbol(
+ SKCanvas canvas,
+ LegendItem item,
+ float x,
+ float y,
+ float height,
+ float symbolWidth)
+ {
+ // TODO: make LegendSymbol its own object that include size and padding
+
+ PixelRect rect = new(x, x + symbolWidth, y + height, y);
+
+ using SKPaint paint = new();
+
+ if (item.Line is not null)
+ {
+ item.Line.ApplyToPaint(paint);
+ canvas.DrawLine(new(rect.Left, rect.VerticalCenter), new(rect.Right, rect.VerticalCenter), paint);
+ }
+
+ if (item.Marker.IsVisible)
+ {
+ Pixel px = new(rect.HorizontalCenter, rect.VerticalCenter);
+ Drawing.DrawMarker(canvas, paint, px, item.Marker);
+ }
+
+ if (item.Fill.HasValue)
+ {
+ item.Fill.ApplyToPaint(paint);
+ canvas.DrawRect(rect.ToSkRect(), paint);
+ }
+ }
+
+ ///
+ /// Return the size of the given item including all its children
+ ///
+ public static LegendItemSize Measure(
+ LegendItem item,
+ SKPaint paint,
+ SizedLegendItem[] children,
+ float symbolWidth,
+ float symbolPadRight,
+ PixelPadding padding,
+ PixelPadding itemPadding)
+ {
+ PixelSize labelRect = !string.IsNullOrWhiteSpace(item.Label)
+ ? Drawing.MeasureString(item.Label ?? string.Empty, paint)
+ : new(0, 0);
+
+ float width2 = item.HasSymbol ? symbolWidth : 0;
+ float width = width2 + symbolPadRight + labelRect.Width + itemPadding.Horizontal;
+ float height = paint.TextSize + padding.Vertical;
+
+ PixelSize ownSize = new(width, height);
+
+ foreach (SizedLegendItem childItem in children)
+ {
+ width = Math.Max(width, padding.Left + childItem.Size.WithChildren.Width);
+ height += childItem.Size.WithChildren.Height;
+ }
+
+ return new LegendItemSize(ownSize, new(width, height));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Legend.cs b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Legend.cs
new file mode 100644
index 000000000..18c13d617
--- /dev/null
+++ b/Source/Krypton Toolkit/Krypton.Toolkit.Suite.Extended.Data.Visualisation/Scott Plot/Core/Legends/Legend.cs
@@ -0,0 +1,227 @@
+namespace Krypton.Toolkit.Suite.Extended.Data.Visualisation.ScottPlot
+{
+ public class Legend
+ {
+ public bool IsVisible { get; set; } = false;
+ public Alignment Location { get; set; } = Alignment.LowerRight;
+ public PixelPadding Margin { get; set; } = new PixelPadding(8);
+ public PixelPadding Padding { get; set; } = new PixelPadding(3);
+ public PixelPadding ItemPadding { get; set; } = new PixelPadding(3);
+
+ public FontStyle Font { get; set; } = new();
+ public LineStyle OutlineStyle { get; set; } = new();
+ public FillStyle BackgroundFill { get; set; } = new() { Color = Colors.White };
+ public FillStyle ShadowFill { get; set; } = new() { Color = Colors.Black.WithOpacity(.2) };
+
+ public float ShadowOffset = 3;
+ public Alignment ShadowAlignment = Alignment.LowerRight;
+
+ private const float SymbolWidth = 20;
+ private const float SymbolLabelSeparation = 5;
+ public List ManualItems { get; set; } = new();
+
+ private readonly Plot _plot;
+
+ public Legend(Plot plot)
+ {
+ _plot = plot;
+ }
+
+ public void Render(RenderPack rp)
+ {
+ if (!IsVisible)
+ {
+ return;
+ }
+
+ IEnumerable allItems = GetItems();
+
+ LegendItem[] items = GetAllLegendItems(allItems).Where(x => x.IsVisible).ToArray();
+ if (!items.Any())
+ {
+ return;
+ }
+
+ // measure all items to determine dimensions of the legend
+ using SKPaint paint = new();
+ SizedLegendItem[] sizedItems = GetSizedLegendItems(rp.Plot, paint);
+
+ if (sizedItems?.Any() != true)
+ {
+ return;
+ }
+
+ float maxWidth = sizedItems.Select(x => x.Size.WithChildren.Width).Max();
+ float totalheight = sizedItems.Select(x => x.Size.WithChildren.Height).Sum();
+
+ PixelSize legendSize = new(maxWidth + Padding.Left + Padding.Right, totalheight + Padding.Top + Padding.Bottom);
+ PixelRect legendRect = legendSize.AlignedInside(rp.DataRect, Location, Margin);
+ PixelRect legendShadowRect = legendRect.WithDelta(ShadowOffset, ShadowOffset, Location);
+ Pixel offset = new(legendRect.Left + Padding.Left, legendRect.Top + Padding.Top);
+
+ // render the legend panel
+ RenderLegend(sizedItems, rp.Canvas, paint, offset, legendRect, legendShadowRect);
+ }
+
+ public void AsSvg(Plot plot, Stream svgStream, int maxWidth = 0, int maxHeight = 0)
+ {
+ if (svgStream is null)
+ {
+ throw new NullReferenceException($"invalid Stream");
+ }
+
+ var canvas = RenderToObject(plot, svgStream: svgStream, maxWidth: maxWidth, maxHeight: maxHeight) as SKCanvas;
+ canvas?.Dispose();
+ }
+
+ public Image GetImage(Plot plot, int maxWidth = 0, int maxHeight = 0)
+ {
+ SKSurface? surface = RenderToObject(plot, maxWidth: maxWidth, maxHeight: maxHeight) as SKSurface
+ ?? throw new NullReferenceException();
+ SKImage skimg = surface.Snapshot();
+ surface.Dispose();
+ return new Image(skimg);
+ }
+
+ public string GetSvgXml(Plot plot)
+ {
+ using SKPaint paint = new();
+ SizedLegendItem[] sizedItems = GetSizedLegendItems(plot, paint);
+ float maxWidth = sizedItems.Select(x => x.Size.WithChildren.Width).Max() + Padding.Left + Padding.Right + 2 * ShadowOffset;
+ float totalHeight = sizedItems.Select(x => x.Size.WithChildren.Height).Sum() + Padding.Top + Padding.Bottom + 2 * ShadowOffset;
+ int width = (int)Math.Ceiling(maxWidth);
+ int height = (int)Math.Ceiling(totalHeight);
+
+ PixelRect legendRect = new(0, width, 0, height);
+ PixelRect legendShadowRect = legendRect.WithDelta(ShadowOffset, ShadowOffset, Location);
+ Pixel offset = new(legendRect.Left + Padding.Left, legendRect.Top + Padding.Top);
+
+ using SvgImage svg = new(width, height);
+ RenderLegend(sizedItems, svg.Canvas, paint, offset, legendRect, legendShadowRect);
+ string svgXml = svg.GetXml();
+ return svgXml;
+ }
+
+ private SKObject RenderToObject(Plot plot, Stream? svgStream = null, int maxWidth = 0, int maxHeight = 0)
+ {
+ // measure all items to determine dimensions of the legend
+ using SKPaint paint = new();
+ SizedLegendItem[] sizedItems = GetSizedLegendItems(plot, paint);
+
+ if (sizedItems.Any() != true)
+ {
+ throw new InvalidOperationException($"empty legend items");
+ }
+
+ float maxItemWidth = sizedItems.Select(x => x.Size.WithChildren.Width).Max() + Padding.Left + Padding.Right + 2 * ShadowOffset;
+ if (maxWidth > 0)
+ {
+ maxItemWidth = Math.Min(maxItemWidth, maxWidth);
+ }
+
+ float totalheight = sizedItems.Select(x => x.Size.WithChildren.Height).Sum() + Padding.Top + Padding.Bottom + 2 * ShadowOffset;
+ if (maxHeight > 0)
+ {
+ totalheight = Math.Min(totalheight, maxHeight);
+ }
+
+ PixelSize legendSize = new(maxItemWidth, totalheight);
+ PixelRect legendRect = new(new Pixel(ShadowOffset, ShadowOffset), legendSize.Width - 2 * ShadowOffset, legendSize.Height - 2 * ShadowOffset);
+ PixelRect legendShadowRect = legendRect.WithDelta(ShadowOffset, ShadowOffset, Location);
+ Pixel offset = new(legendRect.Left + Padding.Left + ShadowOffset, legendRect.Top + Padding.Top + ShadowOffset);
+
+ if (svgStream is null)
+ {
+ SKImageInfo info = new(
+ width: (int)Math.Ceiling(legendSize.Width),
+ height: (int)Math.Ceiling(legendSize.Height),
+ colorType: SKColorType.Rgba8888,
+ alphaType: SKAlphaType.Premul);
+
+ SKSurface surface = SKSurface.Create(info) ?? throw new NullReferenceException($"invalid SKImageInfo");
+
+ RenderLegend(sizedItems, surface.Canvas, paint, offset, legendRect, legendShadowRect);
+ return surface;
+ }
+
+ SKCanvas canvas = SKSvgCanvas.Create(new SKRect(0, 0, legendSize.Width, legendSize.Height), svgStream);
+ RenderLegend(sizedItems, canvas, paint, offset, legendRect, legendShadowRect);
+ return canvas;
+ }
+
+ public IEnumerable GetItems()
+ {
+ return _plot.PlottableList.SelectMany(x => x.LegendItems).Concat(ManualItems);
+ }
+
+ ///
+ /// Recursively walk through children and return a flat array with all legend items
+ ///
+ private LegendItem[] GetAllLegendItems(IEnumerable items)
+ {
+ List allItems = new();
+ foreach (LegendItem item in items)
+ {
+ allItems.Add(item);
+ allItems.AddRange(GetAllLegendItems(item.Children));
+ }
+ return allItems.ToArray();
+ }
+
+ private SizedLegendItem[] GetSizedLegendItems(Plot plot, SKPaint paint)
+ {
+ IEnumerable allItems = plot.PlottableList.Where(x => x.IsVisible).SelectMany(x => x.LegendItems).Concat(ManualItems);
+
+ LegendItem[] items = GetAllLegendItems(allItems).Where(x => x.IsVisible).ToArray();
+ if (!items.Any())
+ {
+ return Array.Empty();
+ }
+
+ // measure all items to determine dimensions of the legend
+ Font.ApplyToPaint(paint);
+ return GetSizedLegendItems(items, paint);
+ }
+
+ private SizedLegendItem[] GetSizedLegendItems(IEnumerable