mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-11-01 13:13:21 -07:00
88 lines
3 KiB
C#
88 lines
3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace SourceGit.Views.Widgets {
|
|
|
|
/// <summary>
|
|
/// 贮藏管理
|
|
/// </summary>
|
|
public partial class Stashes : UserControl {
|
|
private string repo = null;
|
|
private string selected = null;
|
|
private bool isLFSEnabled = false;
|
|
|
|
public Stashes(string repo) {
|
|
this.repo = repo;
|
|
this.isLFSEnabled = new Commands.LFS(repo).IsEnabled();
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void SetData(List<Models.Stash> data) {
|
|
stashList.ItemsSource = data;
|
|
changeList.ItemsSource = null;
|
|
}
|
|
|
|
private async void OnStashSelectionChanged(object sender, SelectionChangedEventArgs e) {
|
|
changeList.ItemsSource = null;
|
|
selected = null;
|
|
|
|
var stash = stashList.SelectedItem as Models.Stash;
|
|
if (stash == null) return;
|
|
|
|
selected = stash.SHA;
|
|
diffViewer.Reset();
|
|
|
|
var changes = await Task.Run(() => new Commands.StashChanges(repo, selected).Result());
|
|
changeList.ItemsSource = changes;
|
|
}
|
|
|
|
private void OnChangeSelectionChanged(object sender, SelectionChangedEventArgs e) {
|
|
var change = changeList.SelectedItem as Models.Change;
|
|
if (change == null) return;
|
|
|
|
diffViewer.Diff(repo, new DiffViewer.Option() {
|
|
RevisionRange = new string[] { selected + "^", selected },
|
|
Path = change.Path,
|
|
OrgPath = change.OriginalPath,
|
|
UseLFS = isLFSEnabled,
|
|
});
|
|
}
|
|
|
|
private void OnStashContextMenuOpening(object sender, ContextMenuEventArgs ev) {
|
|
var stash = (sender as Border).DataContext as Models.Stash;
|
|
if (stash == null) return;
|
|
|
|
var apply = new MenuItem();
|
|
apply.Header = App.Text("StashCM.Apply");
|
|
apply.Click += (o, e) => Start(() => new Commands.Stash(repo).Apply(stash.Name));
|
|
|
|
var pop = new MenuItem();
|
|
pop.Header = App.Text("StashCM.Pop");
|
|
pop.Click += (o, e) => Start(() => new Commands.Stash(repo).Pop(stash.Name));
|
|
|
|
var delete = new MenuItem();
|
|
delete.Header = App.Text("StashCM.Drop");
|
|
delete.Click += (o, e) => Start(() => new Commands.Stash(repo).Drop(stash.Name));
|
|
|
|
var menu = new ContextMenu();
|
|
menu.Items.Add(apply);
|
|
menu.Items.Add(pop);
|
|
menu.Items.Add(delete);
|
|
menu.IsOpen = true;
|
|
ev.Handled = true;
|
|
}
|
|
|
|
private async void Start(Func<bool> job) {
|
|
waiting.Visibility = Visibility.Visible;
|
|
waiting.IsAnimating = true;
|
|
Models.Watcher.SetEnabled(repo, false);
|
|
await Task.Run(job);
|
|
Models.Watcher.SetEnabled(repo, true);
|
|
waiting.Visibility = Visibility.Collapsed;
|
|
waiting.IsAnimating = false;
|
|
}
|
|
}
|
|
}
|