mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-23 10:22:13 +08:00
refactor: move context menu creation from ViewModels to Views (PART 10)
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user