using the new syntax

This commit is contained in:
qiufeng 2025-04-12 14:08:53 +08:00
parent 81f02a20c5
commit 478280625d
9 changed files with 69 additions and 95 deletions

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Windows.Input; using System.Windows.Input;
using Avalonia.Controls; using Avalonia.Controls;
@ -37,16 +37,15 @@ namespace SourceGit
} }
} }
public static readonly Command OpenPreferencesCommand = new Command(_ => OpenDialog(new Views.Preferences())); public static readonly Command OpenPreferencesCommand = new(_ => OpenDialog(new Views.Preferences()));
public static readonly Command OpenHotkeysCommand = new Command(_ => OpenDialog(new Views.Hotkeys())); public static readonly Command OpenHotkeysCommand = new(_ => OpenDialog(new Views.Hotkeys()));
public static readonly Command OpenAppDataDirCommand = new Command(_ => Native.OS.OpenInFileManager(Native.OS.DataDir)); public static readonly Command OpenAppDataDirCommand = new(_ => Native.OS.OpenInFileManager(Native.OS.DataDir));
public static readonly Command OpenAboutCommand = new Command(_ => OpenDialog(new Views.About())); public static readonly Command OpenAboutCommand = new(_ => OpenDialog(new Views.About()));
public static readonly Command CheckForUpdateCommand = new Command(_ => (Current as App)?.Check4Update(true)); public static readonly Command CheckForUpdateCommand = new(_ => (Current as App)?.Check4Update(true));
public static readonly Command QuitCommand = new Command(_ => Quit(0)); public static readonly Command QuitCommand = new(_ => Quit(0));
public static readonly Command CopyTextBlockCommand = new Command(p => public static readonly Command CopyTextBlockCommand = new(p =>
{ {
var textBlock = p as TextBlock; if (p is not TextBlock textBlock)
if (textBlock == null)
return; return;
if (textBlock.Inlines is { Count: > 0 } inlines) if (textBlock.Inlines is { Count: > 0 } inlines)

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -283,10 +283,12 @@ namespace SourceGit
public static Avalonia.Controls.Shapes.Path CreateMenuIcon(string key) public static Avalonia.Controls.Shapes.Path CreateMenuIcon(string key)
{ {
var icon = new Avalonia.Controls.Shapes.Path(); var icon = new Avalonia.Controls.Shapes.Path
icon.Width = 12; {
icon.Height = 12; Width = 12,
icon.Stretch = Stretch.Uniform; Height = 12,
Stretch = Stretch.Uniform
};
var geo = Current?.FindResource(key) as StreamGeometry; var geo = Current?.FindResource(key) as StreamGeometry;
if (geo != null) if (geo != null)
@ -429,7 +431,7 @@ namespace SourceGit
if (!File.Exists(doneFile)) if (!File.Exists(doneFile))
return true; return true;
var done = File.ReadAllText(doneFile).Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); var done = File.ReadAllText(doneFile).Split(['\n', '\r'], StringSplitOptions.RemoveEmptyEntries);
if (done.Length > collection.Jobs.Count) if (done.Length > collection.Jobs.Count)
return true; return true;

View file

@ -4,16 +4,12 @@ namespace SourceGit.Converters
{ {
public static class DoubleConverters public static class DoubleConverters
{ {
public static readonly FuncValueConverter<double, double> Increase = public static readonly FuncValueConverter<double, double> Increase = new(v => v + 1.0);
new FuncValueConverter<double, double>(v => v + 1.0);
public static readonly FuncValueConverter<double, double> Decrease = public static readonly FuncValueConverter<double, double> Decrease = new(v => v - 1.0);
new FuncValueConverter<double, double>(v => v - 1.0);
public static readonly FuncValueConverter<double, string> ToPercentage = public static readonly FuncValueConverter<double, string> ToPercentage = new(v => $"{v * 100:F3}%");
new FuncValueConverter<double, string>(v => (v * 100).ToString("F3") + "%");
public static readonly FuncValueConverter<double, string> OneMinusToPercentage = public static readonly FuncValueConverter<double, string> OneMinusToPercentage = new(v => $"{(1.0 - v) * 100:F3}%");
new FuncValueConverter<double, string>(v => ((1.0 - v) * 100).ToString("F3") + "%");
} }
} }

View file

@ -6,17 +6,14 @@ namespace SourceGit.Converters
public static class FilterModeConverters public static class FilterModeConverters
{ {
public static readonly FuncValueConverter<Models.FilterMode, IBrush> ToBorderBrush = public static readonly FuncValueConverter<Models.FilterMode, IBrush> ToBorderBrush =
new FuncValueConverter<Models.FilterMode, IBrush>(v => new(v =>
{ {
switch (v) return v switch
{ {
case Models.FilterMode.Included: Models.FilterMode.Included => Brushes.Green,
return Brushes.Green; Models.FilterMode.Excluded => Brushes.Red,
case Models.FilterMode.Excluded: _ => Brushes.Transparent,
return Brushes.Red; };
default:
return Brushes.Transparent;
}
}); });
} }
} }

View file

@ -7,32 +7,24 @@ namespace SourceGit.Converters
{ {
public static class IntConverters public static class IntConverters
{ {
public static readonly FuncValueConverter<int, bool> IsGreaterThanZero = public static readonly FuncValueConverter<int, bool> IsGreaterThanZero = new(v => v > 0);
new FuncValueConverter<int, bool>(v => v > 0);
public static readonly FuncValueConverter<int, bool> IsGreaterThanFour = public static readonly FuncValueConverter<int, bool> IsGreaterThanFour = new(v => v > 4);
new FuncValueConverter<int, bool>(v => v > 4);
public static readonly FuncValueConverter<int, bool> IsZero = public static readonly FuncValueConverter<int, bool> IsZero = new(v => v == 0);
new FuncValueConverter<int, bool>(v => v == 0);
public static readonly FuncValueConverter<int, bool> IsOne = public static readonly FuncValueConverter<int, bool> IsOne = new(v => v == 1);
new FuncValueConverter<int, bool>(v => v == 1);
public static readonly FuncValueConverter<int, bool> IsNotOne = public static readonly FuncValueConverter<int, bool> IsNotOne = new(v => v != 1);
new FuncValueConverter<int, bool>(v => v != 1);
public static readonly FuncValueConverter<int, bool> IsSubjectLengthBad = public static readonly FuncValueConverter<int, bool> IsSubjectLengthBad = new(v => v > ViewModels.Preferences.Instance.SubjectGuideLength);
new FuncValueConverter<int, bool>(v => v > ViewModels.Preferences.Instance.SubjectGuideLength);
public static readonly FuncValueConverter<int, bool> IsSubjectLengthGood = public static readonly FuncValueConverter<int, bool> IsSubjectLengthGood = new(v => v <= ViewModels.Preferences.Instance.SubjectGuideLength);
new FuncValueConverter<int, bool>(v => v <= ViewModels.Preferences.Instance.SubjectGuideLength);
public static readonly FuncValueConverter<int, Thickness> ToTreeMargin = public static readonly FuncValueConverter<int, Thickness> ToTreeMargin = new(v => new Thickness(v * 16, 0, 0, 0));
new FuncValueConverter<int, Thickness>(v => new Thickness(v * 16, 0, 0, 0));
public static readonly FuncValueConverter<int, IBrush> ToBookmarkBrush = public static readonly FuncValueConverter<int, IBrush> ToBookmarkBrush =
new FuncValueConverter<int, IBrush>(bookmark => new(bookmark =>
{ {
if (bookmark == 0) if (bookmark == 0)
return Application.Current?.FindResource("Brush.FG1") as IBrush; return Application.Current?.FindResource("Brush.FG1") as IBrush;

View file

@ -6,46 +6,34 @@ namespace SourceGit.Converters
public static class InteractiveRebaseActionConverters public static class InteractiveRebaseActionConverters
{ {
public static readonly FuncValueConverter<Models.InteractiveRebaseAction, IBrush> ToIconBrush = public static readonly FuncValueConverter<Models.InteractiveRebaseAction, IBrush> ToIconBrush =
new FuncValueConverter<Models.InteractiveRebaseAction, IBrush>(v => new(v =>
{ {
switch (v) return v switch
{ {
case Models.InteractiveRebaseAction.Pick: Models.InteractiveRebaseAction.Pick => Brushes.Green,
return Brushes.Green; Models.InteractiveRebaseAction.Edit => Brushes.Orange,
case Models.InteractiveRebaseAction.Edit: Models.InteractiveRebaseAction.Reword => Brushes.Orange,
return Brushes.Orange; Models.InteractiveRebaseAction.Squash => Brushes.LightGray,
case Models.InteractiveRebaseAction.Reword: Models.InteractiveRebaseAction.Fixup => Brushes.LightGray,
return Brushes.Orange; _ => Brushes.Red,
case Models.InteractiveRebaseAction.Squash: };
return Brushes.LightGray;
case Models.InteractiveRebaseAction.Fixup:
return Brushes.LightGray;
default:
return Brushes.Red;
}
}); });
public static readonly FuncValueConverter<Models.InteractiveRebaseAction, string> ToName = public static readonly FuncValueConverter<Models.InteractiveRebaseAction, string> ToName =
new FuncValueConverter<Models.InteractiveRebaseAction, string>(v => new(v =>
{ {
switch (v) return v switch
{ {
case Models.InteractiveRebaseAction.Pick: Models.InteractiveRebaseAction.Pick => "Pick",
return "Pick"; Models.InteractiveRebaseAction.Edit => "Edit",
case Models.InteractiveRebaseAction.Edit: Models.InteractiveRebaseAction.Reword => "Reword",
return "Edit"; Models.InteractiveRebaseAction.Squash => "Squash",
case Models.InteractiveRebaseAction.Reword: Models.InteractiveRebaseAction.Fixup => "Fixup",
return "Reword"; _ => "Drop",
case Models.InteractiveRebaseAction.Squash: };
return "Squash";
case Models.InteractiveRebaseAction.Fixup:
return "Fixup";
default:
return "Drop";
}
}); });
public static readonly FuncValueConverter<Models.InteractiveRebaseAction, bool> CanEditMessage = public static readonly FuncValueConverter<Models.InteractiveRebaseAction, bool> CanEditMessage =
new FuncValueConverter<Models.InteractiveRebaseAction, bool>(v => v == Models.InteractiveRebaseAction.Reword || v == Models.InteractiveRebaseAction.Squash); new(v => v == Models.InteractiveRebaseAction.Reword || v == Models.InteractiveRebaseAction.Squash);
} }
} }

View file

@ -8,18 +8,18 @@ namespace SourceGit.Converters
public static class ListConverters public static class ListConverters
{ {
public static readonly FuncValueConverter<IList, string> ToCount = public static readonly FuncValueConverter<IList, string> ToCount =
new FuncValueConverter<IList, string>(v => v == null ? " (0)" : $" ({v.Count})"); new(v => v == null ? " (0)" : $" ({v.Count})");
public static readonly FuncValueConverter<IList, bool> IsNullOrEmpty = public static readonly FuncValueConverter<IList, bool> IsNullOrEmpty =
new FuncValueConverter<IList, bool>(v => v == null || v.Count == 0); new(v => v == null || v.Count == 0);
public static readonly FuncValueConverter<IList, bool> IsNotNullOrEmpty = public static readonly FuncValueConverter<IList, bool> IsNotNullOrEmpty =
new FuncValueConverter<IList, bool>(v => v != null && v.Count > 0); new(v => v != null && v.Count > 0);
public static readonly FuncValueConverter<List<Models.Change>, List<Models.Change>> Top100Changes = public static readonly FuncValueConverter<List<Models.Change>, List<Models.Change>> Top100Changes =
new FuncValueConverter<List<Models.Change>, List<Models.Change>>(v => (v == null || v.Count < 100) ? v : v.GetRange(0, 100)); new(v => (v == null || v.Count < 100) ? v : v.GetRange(0, 100));
public static readonly FuncValueConverter<IList, bool> IsOnlyTop100Shows = public static readonly FuncValueConverter<IList, bool> IsOnlyTop100Shows =
new FuncValueConverter<IList, bool>(v => v != null && v.Count > 100); new(v => v != null && v.Count > 100);
} }
} }

View file

@ -22,7 +22,7 @@ namespace SourceGit.Converters
var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
var prefixLen = home.EndsWith('/') ? home.Length - 1 : home.Length; var prefixLen = home.EndsWith('/') ? home.Length - 1 : home.Length;
if (v.StartsWith(home, StringComparison.Ordinal)) if (v.StartsWith(home, StringComparison.Ordinal))
return "~" + v.Substring(prefixLen); return $"~{v.AsSpan()[prefixLen..]}";
return v; return v;
}); });

View file

@ -21,7 +21,7 @@ namespace SourceGit.Converters
} }
} }
public static readonly ToLocaleConverter ToLocale = new ToLocaleConverter(); public static readonly ToLocaleConverter ToLocale = new();
public class ToThemeConverter : IValueConverter public class ToThemeConverter : IValueConverter
{ {
@ -46,7 +46,7 @@ namespace SourceGit.Converters
} }
} }
public static readonly ToThemeConverter ToTheme = new ToThemeConverter(); public static readonly ToThemeConverter ToTheme = new();
public class FormatByResourceKeyConverter : IValueConverter public class FormatByResourceKeyConverter : IValueConverter
{ {
@ -62,24 +62,24 @@ namespace SourceGit.Converters
} }
} }
public static readonly FormatByResourceKeyConverter FormatByResourceKey = new FormatByResourceKeyConverter(); public static readonly FormatByResourceKeyConverter FormatByResourceKey = new();
public static readonly FuncValueConverter<string, string> ToShortSHA = public static readonly FuncValueConverter<string, string> ToShortSHA =
new FuncValueConverter<string, string>(v => v == null ? string.Empty : (v.Length > 10 ? v.Substring(0, 10) : v)); new(v => v == null ? string.Empty : (v.Length > 10 ? v.Substring(0, 10) : v));
public static readonly FuncValueConverter<string, string> TrimRefsPrefix = public static readonly FuncValueConverter<string, string> TrimRefsPrefix =
new FuncValueConverter<string, string>(v => new(v =>
{ {
if (v == null) if (v == null)
return string.Empty; return string.Empty;
if (v.StartsWith("refs/heads/", StringComparison.Ordinal)) if (v.StartsWith("refs/heads/", StringComparison.Ordinal))
return v.Substring(11); return v[11..];
if (v.StartsWith("refs/remotes/", StringComparison.Ordinal)) if (v.StartsWith("refs/remotes/", StringComparison.Ordinal))
return v.Substring(13); return v[13..];
return v; return v;
}); });
public static readonly FuncValueConverter<string, bool> ContainsSpaces = public static readonly FuncValueConverter<string, bool> ContainsSpaces =
new FuncValueConverter<string, bool>(v => v != null && v.Contains(' ')); new(v => v != null && v.Contains(' '));
} }
} }