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

@ -60,6 +60,7 @@
<DataGrid x:Name="unstagedList"
Background="Transparent"
ItemsSource="{Binding Unstaged}"
SelectedItem="{Binding SelectedUnstagedChange, Mode=TwoWay}"
SelectionMode="Extended"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
@ -70,7 +71,6 @@
RowHeight="26"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
SelectionChanged="OnUnstagedListSelectionChanged"
KeyDown="OnUnstagedListKeyDown"
ContextRequested="OnUnstagedListContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=UnstagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsList}}">
@ -96,6 +96,7 @@
<DataGrid x:Name="unstagedGrid"
Background="Transparent"
ItemsSource="{Binding Unstaged}"
SelectedItem="{Binding SelectedUnstagedChange, Mode=TwoWay}"
SelectionMode="Extended"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
@ -106,7 +107,6 @@
RowHeight="26"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
SelectionChanged="OnUnstagedListSelectionChanged"
KeyDown="OnUnstagedListKeyDown"
ContextRequested="OnUnstagedListContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=UnstagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsGrid}}">
@ -139,11 +139,11 @@
<TreeView x:Name="unstagedTree"
ItemsSource="{Binding UnstagedTree}"
SelectedItem="{Binding SelectedUnstagedTreeNode, Mode=TwoWay}"
SelectionMode="Multiple"
AutoScrollToSelectedItem="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionChanged="OnUnstagedTreeViewSelectionChanged"
KeyDown="OnUnstagedTreeViewKeyDown"
ContextRequested="OnUnstagedTreeViewContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=UnstagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsTree}}">
@ -185,6 +185,7 @@
<DataGrid x:Name="stagedList"
Background="Transparent"
ItemsSource="{Binding Staged}"
SelectedItem="{Binding SelectedStagedChange, Mode=TwoWay}"
SelectionMode="Extended"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
@ -195,7 +196,6 @@
RowHeight="26"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
SelectionChanged="OnStagedListSelectionChanged"
KeyDown="OnStagedListKeyDown"
ContextRequested="OnStagedListContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=StagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsList}}">
@ -221,6 +221,7 @@
<DataGrid x:Name="stagedGrid"
Background="Transparent"
ItemsSource="{Binding Staged}"
SelectedItem="{Binding SelectedStagedChange, Mode=TwoWay}"
SelectionMode="Extended"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
@ -231,7 +232,6 @@
RowHeight="26"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
SelectionChanged="OnStagedListSelectionChanged"
KeyDown="OnStagedListKeyDown"
ContextRequested="OnStagedListContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=StagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsGrid}}">
@ -264,11 +264,11 @@
<TreeView x:Name="stagedTree"
ItemsSource="{Binding StagedTree}"
SelectedItem="{Binding SelectedStagedTreeNode, Mode=TwoWay}"
SelectionMode="Multiple"
AutoScrollToSelectedItem="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionChanged="OnStagedTreeViewSelectionChanged"
KeyDown="OnStagedTreeViewKeyDown"
ContextRequested="OnStagedTreeViewContextRequested"
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=StagedChangeViewMode, Converter={x:Static c:ChangeViewModeConverters.IsTree}}">

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) {