refactor: move context menu creation from ViewModels to Views (PART 10)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-07-23 17:01:22 +08:00
parent c08f15827f
commit 6b9ba599d2
10 changed files with 1162 additions and 1156 deletions

View File

@@ -17,7 +17,6 @@ using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Media.Fonts;
using Avalonia.Platform.Storage;
using Avalonia.Styling;
using Avalonia.Threading;
@@ -344,14 +343,6 @@ namespace SourceGit
return icon;
}
public static IStorageProvider GetStorageProvider()
{
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
return desktop.MainWindow?.StorageProvider;
return null;
}
public static ViewModels.Launcher GetLauncher()
{
return Current is App app ? app._launcher : null;

View File

@@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
namespace SourceGit.ViewModels
{
@@ -101,19 +102,19 @@ namespace SourceGit.ViewModels
}
}
public void UseTheirs()
public async Task UseTheirsAsync()
{
_wc.UseTheirs([_change]);
await _wc.UseTheirsAsync([_change]);
}
public void UseMine()
public async Task UseMineAsync()
{
_wc.UseMine([_change]);
await _wc.UseMineAsync([_change]);
}
public async void OpenExternalMergeTool()
public async Task OpenExternalMergeToolAsync()
{
await _wc.UseExternalMergeTool(_change);
await _wc.UseExternalMergeToolAsync(_change);
}
private WorkingCopy _wc = null;

File diff suppressed because it is too large Load Diff

View File

@@ -45,7 +45,7 @@ namespace SourceGit.Views
patch.Icon = App.CreateMenuIcon("Icons.Diff");
patch.Click += async (_, e) =>
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;
@@ -146,7 +146,7 @@ namespace SourceGit.Views
patch.Icon = App.CreateMenuIcon("Icons.Diff");
patch.Click += async (_, e) =>
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;

View File

@@ -113,13 +113,13 @@
</Border>
<StackPanel Margin="0,8,0,0" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Classes="flat" Margin="0,0,0,0" Command="{Binding UseTheirs}">
<Button Classes="flat" Margin="0,0,0,0" Click="OnUseTheirs">
<StackPanel Orientation="Horizontal">
<Path Width="12" Height="12" Data="{StaticResource Icons.Incoming}"/>
<TextBlock Margin="6,0,0,0" Text="{DynamicResource Text.WorkingCopy.Conflicts.UseTheirs}" VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Classes="flat" Margin="8,0,0,0" Command="{Binding UseMine}">
<Button Classes="flat" Margin="8,0,0,0" Click="OnUseMine">
<StackPanel Orientation="Horizontal">
<Path Width="12" Height="12" Data="{StaticResource Icons.Local}"/>
<TextBlock Margin="6,0,0,0" Text="{DynamicResource Text.WorkingCopy.Conflicts.UseMine}" VerticalAlignment="Center"/>
@@ -127,7 +127,7 @@
</Button>
<Button Classes="flat"
Margin="8,0,0,0"
Command="{Binding OpenExternalMergeTool}"
Click="OnOpenExternalMergeTool"
IsVisible="{Binding CanUseExternalMergeTool}"
HotKey="{OnPlatform Ctrl+Shift+D, macOS=⌘+Shift+D}">
<StackPanel Orientation="Horizontal">

View File

@@ -1,5 +1,6 @@
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.VisualTree;
namespace SourceGit.Views
@@ -19,5 +20,29 @@ namespace SourceGit.Views
e.Handled = true;
}
private async void OnUseTheirs(object _, RoutedEventArgs e)
{
if (DataContext is ViewModels.Conflict vm)
await vm.UseTheirsAsync();
e.Handled = true;
}
private async void OnUseMine(object _, RoutedEventArgs e)
{
if (DataContext is ViewModels.Conflict vm)
await vm.UseMineAsync();
e.Handled = true;
}
private async void OnOpenExternalMergeTool(object _, RoutedEventArgs e)
{
if (DataContext is ViewModels.Conflict vm)
await vm.OpenExternalMergeToolAsync();
e.Handled = true;
}
}
}

View File

@@ -362,7 +362,7 @@ namespace SourceGit.Views
saveToPatch.Header = App.Text("CommitCM.SaveAsPatch");
saveToPatch.Click += async (_, e) =>
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;
@@ -802,7 +802,7 @@ namespace SourceGit.Views
saveToPatch.Header = App.Text("CommitCM.SaveAsPatch");
saveToPatch.Click += async (_, e) =>
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;

View File

@@ -141,7 +141,7 @@ namespace SourceGit.Views
var detailView = this.FindAncestorOfType<CommitDetail>();
if (detailView is { DataContext: ViewModels.CommitDetail detail })
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;
@@ -488,7 +488,7 @@ namespace SourceGit.Views
saveAs.Tag = OperatingSystem.IsMacOS() ? "⌘+⇧+S" : "Ctrl+Shift+S";
saveAs.Click += async (_, ev) =>
{
var storageProvider = TopLevel.GetTopLevel(this).StorageProvider;
var storageProvider = TopLevel.GetTopLevel(this)?.StorageProvider;
if (storageProvider == null)
return;

View File

@@ -112,7 +112,7 @@
Width="26" Height="14"
Padding="0"
ToolTip.Tip="{DynamicResource Text.WorkingCopy.Unstaged.StageAll}"
Command="{Binding StageAll}">
Click="OnStageAllButtonClicked">
<Path Width="14" Height="14" Data="{StaticResource Icons.DoubleDown}"/>
</Button>
<v:ChangeViewModeSwitcher Grid.Column="9"
@@ -166,7 +166,7 @@
</ToolTip.Tip>
<Path Width="14" Height="14" Margin="0,6,0,0" Data="{StaticResource Icons.Up}"/>
</Button>
<Button Grid.Column="5" Classes="icon_button" Width="26" Height="14" Padding="0" ToolTip.Tip="{DynamicResource Text.WorkingCopy.Staged.UnstageAll}" Command="{Binding UnstageAll}">
<Button Grid.Column="5" Classes="icon_button" Width="26" Height="14" Padding="0" ToolTip.Tip="{DynamicResource Text.WorkingCopy.Staged.UnstageAll}" Click="OnUnstageAllButtonClicked">
<Path Width="14" Height="14" Data="{StaticResource Icons.DoubleUp}"/>
</Button>
<v:ChangeViewModeSwitcher Grid.Column="6"

File diff suppressed because it is too large Load Diff