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));
|
||||
}
|
||||
|
||||
public void DeleteRemote(Models.Remote remote)
|
||||
{
|
||||
if (CanCreatePopup())
|
||||
ShowPopup(new DeleteRemote(this, remote));
|
||||
}
|
||||
|
||||
public void DeleteMultipleBranches(List<Models.Branch> branches, bool isLocal)
|
||||
{
|
||||
if (CanCreatePopup())
|
||||
|
@ -1407,6 +1401,12 @@ namespace SourceGit.ViewModels
|
|||
ShowPopup(new AddRemote(this));
|
||||
}
|
||||
|
||||
public void DeleteRemote(Models.Remote remote)
|
||||
{
|
||||
if (CanCreatePopup())
|
||||
ShowPopup(new DeleteRemote(this, remote));
|
||||
}
|
||||
|
||||
public void AddSubmodule()
|
||||
{
|
||||
if (CanCreatePopup())
|
||||
|
|
|
@ -295,6 +295,12 @@ namespace SourceGit.ViewModels
|
|||
SearchFilter = string.Empty;
|
||||
}
|
||||
|
||||
public void Drop(Models.Stash stash)
|
||||
{
|
||||
if (stash != null && _repo.CanCreatePopup())
|
||||
_repo.ShowPopup(new DropStash(_repo, stash));
|
||||
}
|
||||
|
||||
private void RefreshVisible()
|
||||
{
|
||||
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 List<Models.Stash> _stashes = [];
|
||||
private List<Models.Stash> _visibleStashes = [];
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
ItemsSource="{Binding #ThisControl.Rows}"
|
||||
SelectionMode="Multiple"
|
||||
SelectionChanged="OnNodesSelectionChanged"
|
||||
KeyDown="OnListKeyDown"
|
||||
KeyDown="OnTreeKeyDown"
|
||||
ContextRequested="OnTreeContextRequested">
|
||||
<ListBox.ItemsPanel>
|
||||
<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))
|
||||
return;
|
||||
|
@ -463,7 +463,7 @@ namespace SourceGit.Views
|
|||
if (selected == null || selected.Count == 0)
|
||||
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);
|
||||
e.Handled = true;
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
ItemsSource="{Binding VisibleStashes}"
|
||||
SelectedItem="{Binding SelectedStash, Mode=TwoWay}"
|
||||
SelectionMode="Single"
|
||||
KeyDown="OnStashKeyDown"
|
||||
KeyDown="OnStashListKeyDown"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto">
|
||||
<ListBox.Styles>
|
||||
|
|
|
@ -24,17 +24,7 @@ namespace SourceGit.Views
|
|||
layout.StashesLeftWidth = new GridLength(maxLeft, GridUnitType.Pixel);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
private void OnStashKeyDown(object sender, KeyEventArgs e)
|
||||
private void OnStashListKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.Key is not (Key.Delete or Key.Back))
|
||||
return;
|
||||
|
@ -42,10 +32,17 @@ namespace SourceGit.Views
|
|||
if (DataContext is not ViewModels.StashesPage vm)
|
||||
return;
|
||||
|
||||
if (sender is not ListBox { SelectedValue: Models.Stash stash })
|
||||
return;
|
||||
vm.Drop(vm.SelectedStash);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -217,13 +217,15 @@ namespace SourceGit.Views
|
|||
|
||||
private void OnKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (sender is not ListBox { SelectedValue: Models.Tag tag })
|
||||
return;
|
||||
|
||||
if (DataContext is not ViewModels.Repository repo)
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,11 +45,10 @@ namespace SourceGit.Views
|
|||
{
|
||||
if (e.Key is not (Key.Delete or Key.Back))
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,8 +61,7 @@
|
|||
ItemsSource="{Binding Rows}"
|
||||
SelectionMode="Single"
|
||||
Loaded="SetupTreeViewDragAndDrop"
|
||||
LostFocus="OnTreeViewLostFocus"
|
||||
KeyDown="OnTreeViewKeyDown">
|
||||
LostFocus="OnTreeViewLostFocus">
|
||||
<ListBox.Styles>
|
||||
<Style Selector="ListBox">
|
||||
<Setter Property="FocusAdorner">
|
||||
|
|
|
@ -31,9 +31,25 @@ namespace SourceGit.Views
|
|||
|
||||
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);
|
||||
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)
|
||||
{
|
||||
if (sender is Grid { DataContext: ViewModels.RepositoryNode node } grid)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue