optimize<*>: add a static method CreateMenuIcon to App. Restore working copy changes' selection state after refreshed

This commit is contained in:
leo 2024-02-27 18:26:05 +08:00
parent 9c3294c285
commit 2aacec75b4
7 changed files with 217 additions and 292 deletions

View file

@ -19,132 +19,6 @@ namespace SourceGit.Views {
GC.Collect();
}
private void OnUnstagedListSelectionChanged(object sender, SelectionChangedEventArgs e) {
var vm = DataContext as ViewModels.WorkingCopy;
if (vm == null) return;
var datagrid = sender as DataGrid;
if (datagrid.SelectedItems.Count == 0) {
if (stagedList.SelectedItem == null &&
stagedGrid.SelectedItem == null &&
stagedTree.SelectedItem == null) {
vm.SetDetail(null, true);
}
e.Handled = true;
return;
}
stagedList.SelectedItems.Clear();
stagedGrid.SelectedItems.Clear();
stagedTree.SelectedItems.Clear();
if (datagrid.SelectedItems.Count == 1) {
vm.SetDetail(datagrid.SelectedItem as Models.Change, true);
} else {
vm.SetDetail(null, true);
}
e.Handled = true;
}
private void OnUnstagedTreeViewSelectionChanged(object sender, SelectionChangedEventArgs e) {
var vm = DataContext as ViewModels.WorkingCopy;
if (vm == null) return;
var tree = sender as TreeView;
if (tree.SelectedItems.Count == 0) {
if (stagedList.SelectedItem == null &&
stagedGrid.SelectedItem == null &&
stagedTree.SelectedItem == null) {
vm.SetDetail(null, true);
}
e.Handled = true;
return;
}
stagedList.SelectedItems.Clear();
stagedGrid.SelectedItems.Clear();
stagedTree.SelectedItems.Clear();
if (tree.SelectedItems.Count == 1) {
var node = tree.SelectedItem as ViewModels.FileTreeNode;
if (node != null && !node.IsFolder) {
vm.SetDetail(node.Backend as Models.Change, true);
} else {
vm.SetDetail(null, true);
}
} else {
vm.SetDetail(null, true);
}
e.Handled = true;
}
private void OnStagedListSelectionChanged(object sender, SelectionChangedEventArgs e) {
var vm = DataContext as ViewModels.WorkingCopy;
if (vm == null) return;
var datagrid = sender as DataGrid;
if (datagrid.SelectedItems.Count == 0) {
if (unstagedList.SelectedItem == null &&
unstagedGrid.SelectedItem == null &&
unstagedTree.SelectedItem == null) {
vm.SetDetail(null, false);
}
e.Handled = true;
return;
}
unstagedList.SelectedItems.Clear();
unstagedGrid.SelectedItems.Clear();
unstagedTree.SelectedItems.Clear();
if (datagrid.SelectedItems.Count == 1) {
vm.SetDetail(datagrid.SelectedItem as Models.Change, false);
} else {
vm.SetDetail(null, false);
}
e.Handled = true;
}
private void OnStagedTreeViewSelectionChanged(object sender, SelectionChangedEventArgs e) {
var vm = DataContext as ViewModels.WorkingCopy;
if (vm == null) return;
var tree = sender as TreeView;
if (tree.SelectedItems.Count == 0) {
if (unstagedList.SelectedItem == null &&
unstagedGrid.SelectedItem == null &&
unstagedTree.SelectedItem == null) {
vm.SetDetail(null, false);
}
e.Handled = true;
return;
}
unstagedList.SelectedItems.Clear();
unstagedGrid.SelectedItems.Clear();
unstagedTree.SelectedItems.Clear();
if (tree.SelectedItems.Count == 1) {
var node = tree.SelectedItem as ViewModels.FileTreeNode;
if (node != null && !node.IsFolder) {
vm.SetDetail(node.Backend as Models.Change, false);
} else {
vm.SetDetail(null, false);
}
} else {
vm.SetDetail(null, false);
}
e.Handled = true;
}
private void ViewAssumeUnchanged(object sender, RoutedEventArgs e) {
var repoPage = this.FindAncestorOfType<Repository>();
if (repoPage != null) {