feature<WorkingCopy>: finish recent commit message picker

This commit is contained in:
leo 2024-02-18 15:44:05 +08:00
parent 88b9b0fb2f
commit b40ca42d73
6 changed files with 45 additions and 28 deletions

View file

@ -1,6 +1,4 @@
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
using System;
using System.Globalization;
namespace SourceGit.Converters { namespace SourceGit.Converters {
public static class IntConverters { public static class IntConverters {
@ -10,18 +8,7 @@ namespace SourceGit.Converters {
public static FuncValueConverter<int, bool> IsZero = public static FuncValueConverter<int, bool> IsZero =
new FuncValueConverter<int, bool>(v => v == 0); new FuncValueConverter<int, bool>(v => v == 0);
public class NotEqualConverter : IValueConverter { public static FuncValueConverter<int, bool> IsOne =
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { new FuncValueConverter<int, bool>(v => v == 1);
int v = (int)value;
int target = (int)parameter;
return v != target;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
public static NotEqualConverter NotEqual = new NotEqualConverter();
} }
} }

View file

@ -557,6 +557,38 @@ namespace SourceGit.ViewModels {
return menu; return menu;
} }
public ContextMenu CreateContextMenuForCommitMessages() {
var menu = new ContextMenu();
if (_repo.CommitMessages.Count == 0) {
var empty = new MenuItem();
empty.Header = App.Text("WorkingCopy.NoCommitHistories");
empty.IsEnabled = false;
menu.Items.Add(empty);
return menu;
}
var tip = new MenuItem();
tip.Header = App.Text("WorkingCopy.HasCommitHistories");
tip.IsEnabled = false;
menu.Items.Add(tip);
menu.Items.Add(new MenuItem() { Header = "-" });
foreach (var message in _repo.CommitMessages) {
var dump = message;
var item = new MenuItem();
item.Header = dump;
item.Click += (o, e) => {
CommitMessage = dump;
e.Handled = true;
};
menu.Items.Add(item);
}
return menu;
}
private Avalonia.Controls.Shapes.Path CreateMenuIcon(string key) { private 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.Width = 12;

View file

@ -1,12 +0,0 @@
using Avalonia.Markup.Xaml;
using System;
namespace SourceGit.Views {
public class IntExtension : MarkupExtension {
public int Value { get; set; }
public IntExtension(int value) { this.Value = value; }
public override object ProvideValue(IServiceProvider serviceProvider) {
return Value;
}
}
}

View file

@ -446,7 +446,7 @@
<TextBlock Grid.Column="0" Margin="8,0" FontWeight="Bold" Foreground="{DynamicResource Brush.FG3}" Text="{DynamicResource Text.Conflict.Tip}"/> <TextBlock Grid.Column="0" Margin="8,0" FontWeight="Bold" Foreground="{DynamicResource Brush.FG3}" Text="{DynamicResource Text.Conflict.Tip}"/>
<Button Grid.Column="1" Classes="flat" FontWeight="Regular" Content="{DynamicResource Text.Repository.Resolve}" Height="20" Padding="8,0" Margin="4,0" Command="{Binding GotoResolve}"> <Button Grid.Column="1" Classes="flat" FontWeight="Regular" Content="{DynamicResource Text.Repository.Resolve}" Height="20" Padding="8,0" Margin="4,0" Command="{Binding GotoResolve}">
<Button.IsVisible> <Button.IsVisible>
<Binding Path="SelectedViewIndex" Converter="{x:Static c:IntConverters.NotEqual}" ConverterParameter="{v:Int 1}"/> <Binding Path="SelectedViewIndex" Converter="{x:Static c:IntConverters.IsOne}"/>
</Button.IsVisible> </Button.IsVisible>
</Button> </Button>
<Button Grid.Column="2" Classes="flat primary" FontWeight="Regular" Content="{DynamicResource Text.Repository.Continue}" Height="20" Padding="8,0" Margin="4,0" Command="{Binding ContinueMerge}" IsVisible="{Binding !HasUnsolvedConflict}"/> <Button Grid.Column="2" Classes="flat primary" FontWeight="Regular" Content="{DynamicResource Text.Repository.Continue}" Height="20" Padding="8,0" Margin="4,0" Command="{Binding ContinueMerge}" IsVisible="{Binding !HasUnsolvedConflict}"/>

View file

@ -354,6 +354,7 @@
<Button Grid.Column="0" <Button Grid.Column="0"
Classes="icon_button" Classes="icon_button"
Width="14" Height="14" Width="14" Height="14"
Click="OnOpenCommitMessagePicker"
ToolTip.Tip="{DynamicResource Text.WorkingCopy.MessageHistories}"> ToolTip.Tip="{DynamicResource Text.WorkingCopy.MessageHistories}">
<Path Width="14" Height="14" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.List}"/> <Path Width="14" Height="14" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.List}"/>
</Button> </Button>

View file

@ -384,5 +384,14 @@ namespace SourceGit.Views {
if (change != null && !outs.Contains(change)) outs.Add(change); if (change != null && !outs.Contains(change)) outs.Add(change);
} }
} }
private void OnOpenCommitMessagePicker(object sender, RoutedEventArgs e) {
if (sender is Button button && DataContext is ViewModels.WorkingCopy vm) {
var menu = vm.CreateContextMenuForCommitMessages();
menu.Placement = PlacementMode.TopEdgeAlignedLeft;
menu.Open(button);
e.Handled = true;
}
}
} }
} }