mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-16 16:05:00 +00:00
code_review: PR #1412
- Use `ViewModels.StashesPage.SelectedStash` instead of `sender is not ListBox { SelectedValue: Models.Stash stash }` - In tags view, `SelectedItem` can be `Models.Tag` or `ViewModels.TagTreeNode` - In logs window, `vm.SelectedLog` may be null Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
196b454ae8
commit
a128b67bd4
10 changed files with 56 additions and 70 deletions
|
@ -1365,12 +1365,6 @@ namespace SourceGit.ViewModels
|
||||||
ShowPopup(new DeleteBranch(this, branch));
|
ShowPopup(new DeleteBranch(this, branch));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteRemote(Models.Remote remote)
|
|
||||||
{
|
|
||||||
if (CanCreatePopup())
|
|
||||||
ShowPopup(new DeleteRemote(this, remote));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DeleteMultipleBranches(List<Models.Branch> branches, bool isLocal)
|
public void DeleteMultipleBranches(List<Models.Branch> branches, bool isLocal)
|
||||||
{
|
{
|
||||||
if (CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
|
@ -1407,6 +1401,12 @@ namespace SourceGit.ViewModels
|
||||||
ShowPopup(new AddRemote(this));
|
ShowPopup(new AddRemote(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DeleteRemote(Models.Remote remote)
|
||||||
|
{
|
||||||
|
if (CanCreatePopup())
|
||||||
|
ShowPopup(new DeleteRemote(this, remote));
|
||||||
|
}
|
||||||
|
|
||||||
public void AddSubmodule()
|
public void AddSubmodule()
|
||||||
{
|
{
|
||||||
if (CanCreatePopup())
|
if (CanCreatePopup())
|
||||||
|
|
|
@ -295,6 +295,12 @@ namespace SourceGit.ViewModels
|
||||||
SearchFilter = string.Empty;
|
SearchFilter = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Drop(Models.Stash stash)
|
||||||
|
{
|
||||||
|
if (stash != null && _repo.CanCreatePopup())
|
||||||
|
_repo.ShowPopup(new DropStash(_repo, stash));
|
||||||
|
}
|
||||||
|
|
||||||
private void RefreshVisible()
|
private void RefreshVisible()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_searchFilter))
|
if (string.IsNullOrEmpty(_searchFilter))
|
||||||
|
@ -314,12 +320,6 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Drop(Models.Stash stash)
|
|
||||||
{
|
|
||||||
if (_repo.CanCreatePopup())
|
|
||||||
_repo.ShowPopup(new DropStash(_repo, stash));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Repository _repo = null;
|
private Repository _repo = null;
|
||||||
private List<Models.Stash> _stashes = [];
|
private List<Models.Stash> _stashes = [];
|
||||||
private List<Models.Stash> _visibleStashes = [];
|
private List<Models.Stash> _visibleStashes = [];
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
ItemsSource="{Binding #ThisControl.Rows}"
|
ItemsSource="{Binding #ThisControl.Rows}"
|
||||||
SelectionMode="Multiple"
|
SelectionMode="Multiple"
|
||||||
SelectionChanged="OnNodesSelectionChanged"
|
SelectionChanged="OnNodesSelectionChanged"
|
||||||
KeyDown="OnListKeyDown"
|
KeyDown="OnTreeKeyDown"
|
||||||
ContextRequested="OnTreeContextRequested">
|
ContextRequested="OnTreeContextRequested">
|
||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
|
|
|
@ -450,7 +450,7 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnListKeyDown(object _, KeyEventArgs e)
|
private void OnTreeKeyDown(object _, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Key is not (Key.Delete or Key.Back))
|
if (e.Key is not (Key.Delete or Key.Back))
|
||||||
return;
|
return;
|
||||||
|
@ -463,7 +463,7 @@ namespace SourceGit.Views
|
||||||
if (selected == null || selected.Count == 0)
|
if (selected == null || selected.Count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (selected is [ViewModels.BranchTreeNode { Backend: Models.Remote remote }])
|
if (selected.Count == 1 && selected[0] is ViewModels.BranchTreeNode { Backend: Models.Remote remote })
|
||||||
{
|
{
|
||||||
repo.DeleteRemote(remote);
|
repo.DeleteRemote(remote);
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
ItemsSource="{Binding VisibleStashes}"
|
ItemsSource="{Binding VisibleStashes}"
|
||||||
SelectedItem="{Binding SelectedStash, Mode=TwoWay}"
|
SelectedItem="{Binding SelectedStash, Mode=TwoWay}"
|
||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
KeyDown="OnStashKeyDown"
|
KeyDown="OnStashListKeyDown"
|
||||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||||
ScrollViewer.VerticalScrollBarVisibility="Auto">
|
ScrollViewer.VerticalScrollBarVisibility="Auto">
|
||||||
<ListBox.Styles>
|
<ListBox.Styles>
|
||||||
|
|
|
@ -24,17 +24,7 @@ namespace SourceGit.Views
|
||||||
layout.StashesLeftWidth = new GridLength(maxLeft, GridUnitType.Pixel);
|
layout.StashesLeftWidth = new GridLength(maxLeft, GridUnitType.Pixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnStashContextRequested(object sender, ContextRequestedEventArgs e)
|
private void OnStashListKeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
|
||||||
if (DataContext is ViewModels.StashesPage vm && sender is Border border)
|
|
||||||
{
|
|
||||||
var menu = vm.MakeContextMenu(border.DataContext as Models.Stash);
|
|
||||||
menu?.Open(border);
|
|
||||||
}
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnStashKeyDown(object sender, KeyEventArgs e)
|
|
||||||
{
|
{
|
||||||
if (e.Key is not (Key.Delete or Key.Back))
|
if (e.Key is not (Key.Delete or Key.Back))
|
||||||
return;
|
return;
|
||||||
|
@ -42,10 +32,17 @@ namespace SourceGit.Views
|
||||||
if (DataContext is not ViewModels.StashesPage vm)
|
if (DataContext is not ViewModels.StashesPage vm)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (sender is not ListBox { SelectedValue: Models.Stash stash })
|
vm.Drop(vm.SelectedStash);
|
||||||
return;
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
vm.Drop(stash);
|
private void OnStashContextRequested(object sender, ContextRequestedEventArgs e)
|
||||||
|
{
|
||||||
|
if (DataContext is ViewModels.StashesPage vm && sender is Border border)
|
||||||
|
{
|
||||||
|
var menu = vm.MakeContextMenu(border.DataContext as Models.Stash);
|
||||||
|
menu?.Open(border);
|
||||||
|
}
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,13 +217,15 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
private void OnKeyDown(object sender, KeyEventArgs e)
|
private void OnKeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is not ListBox { SelectedValue: Models.Tag tag })
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (DataContext is not ViewModels.Repository repo)
|
if (DataContext is not ViewModels.Repository repo)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
repo.DeleteTag(tag);
|
var selected = (sender as ListBox)?.SelectedItem;
|
||||||
|
if (selected is ViewModels.TagTreeNode { Tag: { } tagInNode })
|
||||||
|
repo.DeleteTag(tagInNode);
|
||||||
|
else if (selected is Models.Tag tag)
|
||||||
|
repo.DeleteTag(tag);
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,11 +45,10 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
if (e.Key is not (Key.Delete or Key.Back))
|
if (e.Key is not (Key.Delete or Key.Back))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (DataContext is not ViewModels.ViewLogs vm)
|
|
||||||
return;
|
|
||||||
|
|
||||||
vm.Logs.Remove(vm.SelectedLog);
|
if (DataContext is ViewModels.ViewLogs { SelectedLog: { } log } vm)
|
||||||
|
vm.Logs.Remove(log);
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,7 @@
|
||||||
ItemsSource="{Binding Rows}"
|
ItemsSource="{Binding Rows}"
|
||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
Loaded="SetupTreeViewDragAndDrop"
|
Loaded="SetupTreeViewDragAndDrop"
|
||||||
LostFocus="OnTreeViewLostFocus"
|
LostFocus="OnTreeViewLostFocus">
|
||||||
KeyDown="OnTreeViewKeyDown">
|
|
||||||
<ListBox.Styles>
|
<ListBox.Styles>
|
||||||
<Style Selector="ListBox">
|
<Style Selector="ListBox">
|
||||||
<Setter Property="FocusAdorner">
|
<Setter Property="FocusAdorner">
|
||||||
|
|
|
@ -31,9 +31,25 @@ namespace SourceGit.Views
|
||||||
|
|
||||||
protected override void OnKeyDown(KeyEventArgs e)
|
protected override void OnKeyDown(KeyEventArgs e)
|
||||||
{
|
{
|
||||||
if (SelectedItem is ViewModels.RepositoryNode { IsRepository: false } node && e.KeyModifiers == KeyModifiers.None)
|
if (SelectedItem is ViewModels.RepositoryNode node && e.KeyModifiers == KeyModifiers.None)
|
||||||
{
|
{
|
||||||
if ((node.IsExpanded && e.Key == Key.Left) || (!node.IsExpanded && e.Key == Key.Right))
|
if (e.Key is Key.Delete or Key.Back)
|
||||||
|
{
|
||||||
|
node.Delete();
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
else if (node.IsRepository)
|
||||||
|
{
|
||||||
|
if (e.Key == Key.Enter)
|
||||||
|
{
|
||||||
|
var parent = this.FindAncestorOfType<Launcher>();
|
||||||
|
if (parent is { DataContext: ViewModels.Launcher launcher })
|
||||||
|
launcher.OpenRepositoryInTab(node, null);
|
||||||
|
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((node.IsExpanded && e.Key == Key.Left) || (!node.IsExpanded && e.Key == Key.Right) || e.Key == Key.Enter)
|
||||||
{
|
{
|
||||||
ViewModels.Welcome.Instance.ToggleNodeIsExpanded(node);
|
ViewModels.Welcome.Instance.ToggleNodeIsExpanded(node);
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
|
@ -92,33 +108,6 @@ namespace SourceGit.Views
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTreeViewKeyDown(object _, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (TreeContainer.SelectedItem is ViewModels.RepositoryNode node)
|
|
||||||
{
|
|
||||||
if (e.Key == Key.Enter)
|
|
||||||
{
|
|
||||||
if (node.IsRepository)
|
|
||||||
{
|
|
||||||
var parent = this.FindAncestorOfType<Launcher>();
|
|
||||||
if (parent is { DataContext: ViewModels.Launcher launcher })
|
|
||||||
launcher.OpenRepositoryInTab(node, null);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ViewModels.Welcome.Instance.ToggleNodeIsExpanded(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
else if (e.Key is Key.Delete or Key.Back)
|
|
||||||
{
|
|
||||||
node.Delete();
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e)
|
private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Grid { DataContext: ViewModels.RepositoryNode node } grid)
|
if (sender is Grid { DataContext: ViewModels.RepositoryNode node } grid)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue