diff --git a/.github/workflows/build_artifacts.yml b/.github/workflows/build_artifacts.yml index 92e3eae269..ff63712055 100644 --- a/.github/workflows/build_artifacts.yml +++ b/.github/workflows/build_artifacts.yml @@ -32,7 +32,7 @@ jobs: fetch-depth: 0 - name: Setup .NET - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: dotnet-version: | 3.1.x @@ -45,6 +45,10 @@ jobs: - name: Build run: dotnet build ${{ env.solution }} --configuration ${{ inputs.build-configuration }} --no-restore -p:Platform="Any CPU" -p:TreatWarningsAsErrors=True + env: + MDIXVersion: ${{ inputs.mdix-version }} + MDIXColorsVersion: ${{ inputs.mdix-colors-version }} + MDIXMahAppsVersion: ${{ inputs.mdix-mahapps-version }} - name: Test timeout-minutes: 20 diff --git a/.github/workflows/get_versions.yml b/.github/workflows/get_versions.yml index 5a9e75f24e..fd3b057cbe 100644 --- a/.github/workflows/get_versions.yml +++ b/.github/workflows/get_versions.yml @@ -23,9 +23,9 @@ jobs: getting_versions: env: #Update these base version numbers - mdix-version: "4.7.0" - mdix-colors-version: "2.1.0" - mdix-mahapps-version: "0.2.6" + mdix-version: "4.7.1" + mdix-colors-version: "2.1.1" + mdix-mahapps-version: "0.2.7" name: Set version numbers runs-on: ubuntu-latest defaults: diff --git a/.github/workflows/icon_update.yml b/.github/workflows/icon_update.yml index 600809fbd9..b4ede58537 100644 --- a/.github/workflows/icon_update.yml +++ b/.github/workflows/icon_update.yml @@ -5,6 +5,13 @@ on: schedule: - cron: '0 3 * * *' +env: + GH_TOKEN: ${{ secrets.SA_PAT }} + +defaults: + run: + shell: pwsh + jobs: build: #This check prevents this from running on forks @@ -14,6 +21,8 @@ jobs: steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v3 @@ -24,18 +33,19 @@ jobs: run: dotnet run -c Release -- icons working-directory: ./mdresgen - - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 - with: - commit-message: > - [Icon update detected by Github Action]. - Auto generated pull request. - committer: Material Design Service Account - author: Material Design Service Account - branch: pipeline/icons - delete-branch: true - base: master - title: Update Icons [GitHub Action] - body: > - [Icon update detected by Github Action]. - Auto generated pull request. + - name: Check for changes + id: check_for_changes + run: | + $hasChanges = $((git status --porcelain).Length -gt 0).ToString().ToLower() + "has_changes=$hasChanges" >> $env:GITHUB_OUTPUT + + - name: Open Pull Request + if: ${{ steps.check_for_changes.outputs.has_changes == 'true' }} + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git checkout -b "automated/icon_update" + git commit -m "[bot] Pack Icon update" --all + git push -f --set-upstream origin automated/icon_update + gh pr create --fill + gh pr merge automated/icon_update --delete-branch --auto --squash diff --git a/.github/workflows/nightly_release.yml b/.github/workflows/nightly_release.yml index 6b43f11a61..b172d9ee5f 100644 --- a/.github/workflows/nightly_release.yml +++ b/.github/workflows/nightly_release.yml @@ -5,6 +5,9 @@ on: schedule: - cron: '0 9 * * *' +env: + GH_TOKEN: ${{ github.token }} + defaults: run: shell: pwsh @@ -16,29 +19,23 @@ jobs: runs-on: ubuntu-latest outputs: - should_run: ${{ steps.check_tag.outputs.has_changed }} + should_run: ${{ steps.check_for_changes.outputs.has_changed }} steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - id: check_tag - name: Check nightly_release tag + - id: check_for_changes + name: Check for changes run: | - $nightlyReleaseHash = $(git rev-parse nightly_release) - $masterHash = $(git rev-parse origin/master) - $hasChanged = ($nightlyReleaseHash -ne $masterHash).ToString().ToLower() + # Grab the last two run, since the latest run will be the current one executing + $workflowList = gh run list --workflow "${{ github.workflow }}" --branch "${{ github.ref_name }}" --json databaseId --limit 2 --repo "${{ github.repository }}" + $runId = ($workflowList | ConvertFrom-Json)[1].databaseId + $lastRunHash = ((gh run view $runId --json headSha --repo "${{ github.repository }}") | ConvertFrom-Json).headSha + + echo "Last hash $lastRunHash" + echo "Current hash ${{ github.sha }}" + + $hasChanged = ($lastRunHash -ne "${{ github.sha }}").ToString().ToLower() echo "Has updates $hasChanged" "has_changed=$hasChanged" >> $env:GITHUB_OUTPUT - - test: - needs: check_for_changes - runs-on: ubuntu-latest - steps: - - name: Test - run: | - echo "Test ${{ needs.check_for_changes.outputs.should_run }}" get_versions: needs: [check_for_changes] @@ -71,11 +68,3 @@ jobs: - name: Push NuGets run: | dotnet nuget push nugets/*.nupkg --api-key ${{ secrets.PAT }} --source https://api.nuget.org/v3/index.json --skip-duplicate - - - name: Update latest tag - if: ${{ github.event_name != 'push' }} - run: | - git config user.name github-actions - git config user.email github-actions@github.com - git tag -f nightly_release master - git push -f --tags diff --git a/.github/workflows/pr_verification.yml b/.github/workflows/pr_verification.yml index 8a9f70bb20..a5e877c291 100644 --- a/.github/workflows/pr_verification.yml +++ b/.github/workflows/pr_verification.yml @@ -5,15 +5,12 @@ on: branches: [ master ] pull_request: branches: [ master ] + workflow_dispatch: defaults: run: shell: pwsh -env: - solution: MaterialDesignToolkit.Full.sln - buildConfiguration: 'Release' - jobs: build: name: Build artifacts @@ -32,4 +29,4 @@ jobs: contents: write steps: - - uses: fastify/github-action-merge-dependabot@v3.5.3 + - uses: fastify/github-action-merge-dependabot@v3.5.4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e20b6e7c1..e6726ded82 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: with: is-full-release: true - collect_contributors: + build_release_notes: runs-on: ubuntu-latest name: Generate Release Notes @@ -96,9 +96,8 @@ jobs: name: IconChanges path: "IconChanges*.md" - create_release: - needs: [collect_contributors, build_artifacts, build_icon_changes] + needs: [build_release_notes, build_artifacts, build_icon_changes] runs-on: ubuntu-latest name: Create Draft Release diff --git a/MainDemo.Wpf/ComboBoxes.xaml b/MainDemo.Wpf/ComboBoxes.xaml index 8ad717f90b..8101944257 100644 --- a/MainDemo.Wpf/ComboBoxes.xaml +++ b/MainDemo.Wpf/ComboBoxes.xaml @@ -237,7 +237,7 @@ diff --git a/MainDemo.Wpf/Fields.xaml b/MainDemo.Wpf/Fields.xaml index 99f99469bc..6ee2767681 100644 --- a/MainDemo.Wpf/Fields.xaml +++ b/MainDemo.Wpf/Fields.xaml @@ -299,7 +299,7 @@ net462;netcoreapp3.1;net6.0-windows;net7.0-windows true 1.0.1 + $([System.Text.RegularExpressions.Regex]::Replace("$(MDIXColorsVersion)", "-ci\d+$", "")) MaterialDesignColors.Wpf MaterialDesignColors.Wpf Material Design in XAML Toolkit - Colors diff --git a/MaterialDesignThemes.MahApps/MaterialDesignThemes.MahApps.csproj b/MaterialDesignThemes.MahApps/MaterialDesignThemes.MahApps.csproj index 1068242ed4..fd0a17db80 100644 --- a/MaterialDesignThemes.MahApps/MaterialDesignThemes.MahApps.csproj +++ b/MaterialDesignThemes.MahApps/MaterialDesignThemes.MahApps.csproj @@ -4,6 +4,7 @@ net462;netcoreapp3.1;net6.0-windows;net7.0-windows true 1.0.1 + $([System.Text.RegularExpressions.Regex]::Replace("$(MDIXMahAppsVersion)", "-ci\d+$", "")) MaterialDesignThemes.MahApps MaterialDesignThemes.MahApps $(MDIXMahAppsVersion) diff --git a/MaterialDesignThemes.Wpf.Tests/Converters/FloatingHintTransformConverterTests.cs b/MaterialDesignThemes.Wpf.Tests/Converters/FloatingHintTransformConverterTests.cs index 443119cbd7..548586d284 100644 --- a/MaterialDesignThemes.Wpf.Tests/Converters/FloatingHintTransformConverterTests.cs +++ b/MaterialDesignThemes.Wpf.Tests/Converters/FloatingHintTransformConverterTests.cs @@ -3,56 +3,81 @@ using MaterialDesignThemes.Wpf.Converters; using Xunit; -namespace MaterialDesignThemes.Wpf.Tests.Converters +namespace MaterialDesignThemes.Wpf.Tests.Converters; + +public class FloatingHintTransformConverterTests { - public class FloatingHintTransformConverterTests - { - public static IEnumerable InvalidParameters => - new[] - { - new object?[] {null, null, null, null}, - new object?[] {1.0, null, null, null}, - new object?[] {null, 1.0, null, null}, - new object?[] {null, null, 1.0, null}, - new object?[] {null, null, null, new Point()}, - new object?[] {1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, new Point() }, - }; - - [StaTheory] - [MemberData(nameof(InvalidParameters))] - public void WhenParametersAreNotSetItReturnsIdentity(object? scale, object? lower, object? upper, object? offset) + public static IEnumerable InvalidParameters => + new[] { - var converter = new FloatingHintTransformConverter(); + new object?[] {null, null, null, null}, + new object?[] {1.0, null, null, null}, + new object?[] {null, 1.0, null, null}, + new object?[] {null, null, 1.0, null}, + new object?[] {null, null, null, new Point()}, + new object?[] {1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, new Point() }, + }; - var result = converter.Convert(new[] { scale, lower, upper, offset }, - typeof(Transform), null, CultureInfo.CurrentUICulture); + [Theory] + [MemberData(nameof(InvalidParameters))] + public void WhenParametersAreNotSetItReturnsIdentity(object? scale, object? lower, object? upper, object? offset) + { + var converter = new FloatingHintTransformConverter(); - Assert.Equal(Transform.Identity, result); - } + var result = converter.Convert(new[] { scale, lower, upper, offset }, + typeof(Transform), null, CultureInfo.CurrentUICulture); - [StaTheory] - [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] - [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] - public void WhenParametersAreSpecifiedItReturnsTransforms(double scale, double lower, double upper, double x, double y) - { - var converter = new FloatingHintTransformConverter(); + Assert.Equal(Transform.Identity, result); + } + + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter(); - var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); - Assert.NotNull(result); - var scaleTransform = (ScaleTransform)result!.Children[0]; - var translateTransform = (TranslateTransform)result.Children[1]; + Assert.NotNull(result); + var scaleTransform = (ScaleTransform)result!.Children[0]; + var translateTransform = (TranslateTransform)result.Children[1]; - Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleX); - Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleY); + Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleX); + Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleY); - Assert.Equal(scale * x, translateTransform.X); - Assert.Equal(scale * y, translateTransform.Y); - } + Assert.Equal(scale * x, translateTransform.X); + Assert.Equal(scale * y, translateTransform.Y); } + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedAndScaleTransformDisabledItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter { ApplyScaleTransform = false }; + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + + Assert.NotNull(result); + Assert.Single(result.Children); + Assert.IsType(result.Children[0]); + } + + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedAndTranslateTransformDisabledItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter { ApplyTranslateTransform = false }; + + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + + Assert.NotNull(result); + Assert.Single(result.Children); + Assert.IsType(result.Children[0]); + } } diff --git a/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs b/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs index f54292a340..e08f43519e 100644 --- a/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs +++ b/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs @@ -2,40 +2,47 @@ using System.Windows.Data; using System.Windows.Media; -namespace MaterialDesignThemes.Wpf.Converters +namespace MaterialDesignThemes.Wpf.Converters; + +internal class FloatingHintTransformConverter : IMultiValueConverter { - internal class FloatingHintTransformConverter : IMultiValueConverter + public bool ApplyScaleTransform { get; set; } = true; + public bool ApplyTranslateTransform { get; set; } = true; + + public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture) { - public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture) + if (values?.Length != 4 + || values.Any(v => v == null) + || !double.TryParse(values[0]!.ToString(), out double scale) + || !double.TryParse(values[1]!.ToString(), out double lower) + || !double.TryParse(values[2]!.ToString(), out double upper) + || values[3] is not Point floatingOffset) { - if (values == null - || values.Length != 4 - || values.Any(v => v == null) - || !double.TryParse(values[0]?.ToString(), out double scale) - || !double.TryParse(values[1]?.ToString(), out double lower) - || !double.TryParse(values[2]?.ToString(), out double upper) - || !(values[3] is Point floatingOffset)) - { - return Transform.Identity; - } + return Transform.Identity; + } - double result = upper + (lower - upper) * scale; + double result = upper + (lower - upper) * scale; - var transformGroup = new TransformGroup(); + var transformGroup = new TransformGroup(); + if (ApplyScaleTransform) + { transformGroup.Children.Add(new ScaleTransform { ScaleX = result, ScaleY = result }); + } + if (ApplyTranslateTransform) + { transformGroup.Children.Add(new TranslateTransform { X = scale * floatingOffset.X, Y = scale * floatingOffset.Y }); - return transformGroup; } - - public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) - => throw new NotImplementedException(); + return transformGroup; } + + public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); } diff --git a/MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj b/MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj index c20299e99b..57ba5a8f85 100644 --- a/MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj +++ b/MaterialDesignThemes.Wpf/MaterialDesignThemes.Wpf.csproj @@ -4,6 +4,7 @@ net462;netcoreapp3.1;net6.0-windows;net7.0-windows true 1.0.1 + $([System.Text.RegularExpressions.Regex]::Replace("$(MDIXVersion)", "-ci\d+$", "")) MaterialDesignThemes.Wpf MaterialDesignColors.Wpf Material Design in XAML Toolkit - WPF Themes diff --git a/MaterialDesignThemes.Wpf/PackIconDataFactory.cs b/MaterialDesignThemes.Wpf/PackIconDataFactory.cs index 475de1086d..35eae24ba2 100644 --- a/MaterialDesignThemes.Wpf/PackIconDataFactory.cs +++ b/MaterialDesignThemes.Wpf/PackIconDataFactory.cs @@ -1635,6 +1635,8 @@ internal static class PackIconDataFactory {PackIconKind.CheckAll,"M0.41,13.41L6,19L7.41,17.58L1.83,12M22.24,5.58L11.66,16.17L7.5,12L6.07,13.41L11.66,19L23.66,7M18,7L16.59,5.58L10.24,11.93L11.66,13.34L18,7Z"}, {PackIconKind.CheckBold,"M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z"}, {PackIconKind.Checkbook,"M5,14H19V15H5V14M21,17V8H3V17H21M1,5H23V19H1V5M5,10H12V12H5V10Z"}, + {PackIconKind.CheckbookArrowLeft,"M5 14H15.53C15.25 14.31 15 14.64 14.8 15H5V14M21 8V12.08C21.72 12.2 22.39 12.45 23 12.8V5H1V19H14.08C14.03 18.68 14 18.34 14 18C14 17.66 14.03 17.33 14.08 17H3V8H21M5 10H12V12H5V10M16 18L19 15V17H23V19H19V21L16 18Z"}, + {PackIconKind.CheckbookArrowRight,"M5 14H15.53C15.25 14.31 15 14.64 14.8 15H5V14M21 8V12.08C21.72 12.2 22.39 12.45 23 12.8V5H1V19H14.08C14.03 18.68 14 18.34 14 18C14 17.66 14.03 17.33 14.08 17H3V8H21M5 10H12V12H5V10M24 18L21 15V17H17V19H21V21L24 18Z"}, {PackIconKind.CheckboxBlank,"M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z"}, {PackIconKind.CheckboxBlankBadge,"M23 4.5C23 6.43 21.43 8 19.5 8S16 6.43 16 4.5 17.57 1 19.5 1 23 2.57 23 4.5M19.5 10C16.47 10 14 7.53 14 4.5C14 4 14.08 3.5 14.21 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.9 21 5 21H19C20.11 21 21 20.11 21 19V9.79C20.5 9.92 20 10 19.5 10Z"}, {PackIconKind.CheckboxBlankBadgeOutline,"M23 4.5C23 6.43 21.43 8 19.5 8S16 6.43 16 4.5 17.57 1 19.5 1 23 2.57 23 4.5M19.5 10C19.33 10 19.17 10 19 10V19H5V5H14.03C14 4.84 14 4.67 14 4.5C14 4 14.08 3.5 14.21 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.9 21 5 21H19C20.11 21 21 20.11 21 19V9.79C20.5 9.92 20 10 19.5 10Z"}, diff --git a/MaterialDesignThemes.Wpf/PackIconKind.cs b/MaterialDesignThemes.Wpf/PackIconKind.cs index d65fecc6ec..a041e0f2a7 100644 --- a/MaterialDesignThemes.Wpf/PackIconKind.cs +++ b/MaterialDesignThemes.Wpf/PackIconKind.cs @@ -3272,6 +3272,10 @@ public enum PackIconKind SuccessThick=CheckBold, Checkbook, ChequeBook=Checkbook, + CheckbookArrowLeft, + ChequebookArrowLeft=CheckbookArrowLeft, + CheckbookArrowRight, + ChequebookArrowRight=CheckbookArrowRight, CheckboxBlank, CheckboxBlankBadge, AppBadge=CheckboxBlankBadge, diff --git a/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml b/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml index 056e385376..16a33eb6ae 100644 --- a/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml +++ b/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml @@ -1,4 +1,4 @@ - - + + 1.0 - \ No newline at end of file +