Skip to content

Commit 80086d8

Browse files
authored
Merge pull request #23 from USACE-RMC/oxyplot-improvements
Oxyplot improvements
2 parents 1604a32 + 9504ecb commit 80086d8

551 files changed

Lines changed: 11489 additions & 14209 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ type: software
44
title: "WPF Framework"
55
version: "1.0.0"
66
date-released: "2026-04-29"
7-
license: BSD-3-Clause
7+
license: 0BSD
88
repository-code: "https://github.com/USACE-RMC/WPF-Framework"
99
url: "https://github.com/USACE-RMC/WPF-Framework"
1010
abstract: >-

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,4 @@ If you discover a security vulnerability, please do **not** open a public issue.
5757

5858
## License
5959

60-
See [LICENSE](LICENSE) for details. This software is provided by USACE-RMC under a BSD-style license with a no-endorsement clause.
60+
See [LICENSE](LICENSE) for details. This software is provided under the Zero-Clause BSD (0BSD) license.

Directory.Build.props

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
<Authors>C. Haden Smith, Woodrow L. Fields, Julian Gonzalez</Authors>
1212
<Company>USACE-RMC</Company>
1313
<Product>WPF Framework</Product>
14-
<Copyright>Copyright (c) 2026 U.S. Army Corps of Engineers, Risk Management Center</Copyright>
1514
<PackageProjectUrl>https://github.com/USACE-RMC/WPF-Framework</PackageProjectUrl>
1615
<RepositoryUrl>https://github.com/USACE-RMC/WPF-Framework</RepositoryUrl>
1716
<RepositoryType>git</RepositoryType>
@@ -23,9 +22,8 @@
2322
<EmbedUntrackedSources>true</EmbedUntrackedSources>
2423
<DebugType>embedded</DebugType>
2524

26-
<PackageLicenseFile>LICENSE</PackageLicenseFile>
25+
<PackageLicenseExpression>0BSD</PackageLicenseExpression>
2726
<PackageReadmeFile>README.md</PackageReadmeFile>
28-
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
2927

3028
<!--
3129
Treat XML-doc warnings as errors so missing or malformed documentation on public
@@ -42,7 +40,6 @@
4240
</PropertyGroup>
4341

4442
<ItemGroup Condition="'$(IsWpfFrameworkLibrary)' == 'true'">
45-
<None Include="$(MSBuildThisFileDirectory)LICENSE" Pack="true" PackagePath="\" Visible="false" />
4643
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="\" Visible="false" />
4744

4845
<!-- Reproducible builds: https://github.com/dotnet/reproducible-builds -->

LICENSE

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
NOTICE:
2-
The U.S. Army Corps of Engineers, Risk Management Center (USACE-RMC) makes no guarantees about the results, or appropriateness of outputs, obtained from WPF Framework.
3-
4-
LIST OF CONDITIONS:
5-
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6-
* Redistributions of source code must retain the above notice, this list of conditions, and the following disclaimer.
7-
* Redistributions in binary form must reproduce the above notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution.
8-
* The names of the U.S. Government, the U.S. Army Corps of Engineers, the Institute for Water Resources, or the Risk Management Center may not be used to endorse or promote products derived from this software without specific prior written permission. Nor may the names of its contributors be used to endorse or promote products derived from this software without specific prior written permission.
9-
10-
DISCLAIMER:
11-
THIS SOFTWARE IS PROVIDED BY THE U.S. ARMY CORPS OF ENGINEERS RISK MANAGEMENT CENTER (USACE-RMC) "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL USACE-RMC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1+
Permission to use, copy, modify, and/or distribute this software for
2+
any purpose with or without fee is hereby granted.
123

4+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
5+
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
6+
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
7+
FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
8+
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
9+
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
10+
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# WPF Framework
22

33
[![CI](https://github.com/USACE-RMC/WPF-Framework/actions/workflows/Integration.yml/badge.svg)](https://github.com/USACE-RMC/WPF-Framework/actions/workflows/Integration.yml)
4-
[![License: BSD-3-Clause](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](LICENSE)
4+
[![License: 0BSD](https://img.shields.io/badge/License-0BSD-blue.svg)](LICENSE)
55

66
WPF Framework is a free and open-source .NET 10.0 application framework for building desktop project management applications, developed by the U.S. Army Corps of Engineers Risk Management Center ([USACE-RMC](https://www.rmc.usace.army.mil/)). It provides a complete application shell with docking layout, project explorer, theme switching, undo/redo, and specialized controls for charting, databases, expression parsing, and directed acyclic graphs.
77

@@ -150,7 +150,7 @@ Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines
150150

151151
## License
152152

153-
This project is licensed under a BSD-3-Clause license. See [LICENSE](LICENSE) for details.
153+
This project is licensed under the Zero-Clause BSD (0BSD) license — a permissive license with no attribution or notice requirements. See [LICENSE](LICENSE) for details.
154154

155155
## Authors
156156

codemeta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"version": "1.0.0",
77
"dateCreated": "2025-12-29",
88
"dateModified": "2026-04-29",
9-
"license": "https://spdx.org/licenses/BSD-3-Clause",
9+
"license": "https://spdx.org/licenses/0BSD",
1010
"codeRepository": "https://github.com/USACE-RMC/WPF-Framework",
1111
"issueTracker": "https://github.com/USACE-RMC/WPF-Framework/issues",
1212
"applicationCategory": "Desktop application framework",

docs/oxyplot-controls.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ The OxyPlotControls library provides WPF controls for configuring and interactin
1919

2020
## OxyPlotToolbar
2121

22-
`OxyPlotToolbar` is a `UserControl` (implementing `IDisposable`) that attaches to an `OxyPlot.Wpf.Plot` and provides interactive charting tools.
22+
`OxyPlotToolbar` is a `UserControl` that attaches to an `OxyPlot.Wpf.Plot` and provides interactive charting tools. Custom cursors are held in a process-wide static cache, so each toolbar instance is cheap and no explicit disposal is required.
2323

2424
### Dependency Properties
2525

@@ -244,7 +244,7 @@ The `OxyPlotControls.Demo` project demonstrates the toolbar, property editors, a
244244

245245
## Best Practices
246246

247-
- **Dispose the toolbar** -- `OxyPlotToolbar` implements `IDisposable` for cursor cleanup. The `Unloaded` event handles this automatically, but explicit disposal is recommended when programmatically removing toolbars.
247+
- **No toolbar disposal required** -- `OxyPlotToolbar` keeps its custom cursors in a static `CursorCache`, so individual toolbar instances do not own disposable resources. Theme-event subscriptions are released by the `Unloaded` handler, and Plot-side event subscriptions are released when the `Plot` dependency property is cleared or replaced.
248248
- **Refresh bindings after deserialization** -- call `OxyPlotPropertiesControl.RefreshPlotBindings()` after `OxyPlotSettingsSerializer.FromXelement()` to ensure all property editors reflect the restored values.
249249
- **Use `WithThemedModel` for export** -- when exporting to images or PDF, use `OxyPlotThemeManager.WithThemedModel` to temporarily apply the report theme without permanently modifying the plot.
250250
- **Suppress property changes during theme application** -- set `Plot.SuppressPropertyChanged = true` before calling `ApplyTheme` to prevent undo/redo recording of theme changes. The toolbar handles this automatically.

src/AvalonDock/Xceed.Wpf.AvalonDock.Themes.VS2013/BlueBrushs.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<Color x:Key="{x:Static reskeys:ResourceKeys.ControlAccentColorKey}">#1ba1e2</Color>
99

1010
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.ControlAccentBrushKey}"
11-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
11+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
1212

1313
<!-- General -->
1414
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.Background}" Color="#293955" options:Freeze="true" />
@@ -150,7 +150,7 @@
150150
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonBackgroundBrushKey}"
151151
Color="#20000000" options:Freeze="true" />
152152
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundBrushKey}"
153-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
153+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
154154
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundArrowBrusKey}"
155155
Color="Black" options:Freeze="true" />
156156

@@ -162,7 +162,7 @@
162162

163163
<!-- Preview Box is the highlighted rectangle that shows when a drop area in a window is indicated -->
164164
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBorderBrushKey}"
165-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
165+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
166166
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBackgroundBrushKey}"
167167
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}"
168168
Opacity="0.5"

src/AvalonDock/Xceed.Wpf.AvalonDock.Themes.VS2013/DarkBrushs.xaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<Color x:Key="{x:Static reskeys:ResourceKeys.ControlAccentColorKey}">#1ba1e2</Color>
1212

1313
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.ControlAccentBrushKey}"
14-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
14+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
1515

1616
<!-- General -->
1717
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.Background}" Color="#2D2D30" options:Freeze="true" />
@@ -31,7 +31,7 @@
3131

3232
<!--AccentColor -->
3333
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.AutoHideTabHoveredText}"
34-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
34+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
3535

3636
<!-- Document Well : Overflow Button -->
3737
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DocumentWellOverflowButtonDefaultGlyph}" Color="#F1F1F1" options:Freeze="true" />
@@ -155,7 +155,7 @@
155155
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonBackgroundBrushKey}"
156156
Color="#20000000" options:Freeze="true" />
157157
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundBrushKey}"
158-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
158+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
159159
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundArrowBrusKey}"
160160
Color="White" options:Freeze="true" />
161161

@@ -167,7 +167,7 @@
167167

168168
<!-- Preview Box is the highlighted rectangle that shows when a drop area in a window is indicated -->
169169
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBorderBrushKey}"
170-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
170+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
171171
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBackgroundBrushKey}"
172172
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}"
173173
Opacity="0.5"

src/AvalonDock/Xceed.Wpf.AvalonDock.Themes.VS2013/LightBrushs.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
<!--AccentColor -->
3333
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.AutoHideTabHoveredText}"
34-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
34+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
3535

3636
<!-- Document Well : Overflow Button -->
3737
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DocumentWellOverflowButtonDefaultGlyph}" Color="#717171" options:Freeze="true" />
@@ -156,7 +156,7 @@
156156
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonBackgroundBrushKey}"
157157
Color="#20000000" options:Freeze="true" />
158158
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundBrushKey}"
159-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
159+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
160160
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.DockingButtonForegroundArrowBrusKey}"
161161
Color="Black" options:Freeze="true" />
162162

@@ -168,7 +168,7 @@
168168

169169
<!-- Preview Box is the highlighted rectangle that shows when a drop area in a window is indicated -->
170170
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBorderBrushKey}"
171-
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" options:Freeze="true" />
171+
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}" />
172172
<SolidColorBrush x:Key="{x:Static reskeys:ResourceKeys.PreviewBoxBackgroundBrushKey}"
173173
Color="{DynamicResource {x:Static reskeys:ResourceKeys.ControlAccentColorKey}}"
174174
Opacity="0.5"

0 commit comments

Comments
 (0)