mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-23 18:30:34 +08:00
refactor: move context menu creation from ViewModels to Views (PART 6)
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -1564,7 +1564,7 @@ namespace SourceGit.ViewModels
|
||||
IsRepository = true,
|
||||
};
|
||||
|
||||
App.GetLauncher()?.OpenRepositoryInTab(node, null);
|
||||
App.GetLauncher().OpenRepositoryInTab(node, null);
|
||||
}
|
||||
|
||||
public async Task LockWorktreeAsync(Models.Worktree worktree)
|
||||
|
||||
@@ -68,6 +68,18 @@ namespace SourceGit.ViewModels
|
||||
set;
|
||||
} = [];
|
||||
|
||||
public void OpenOrInit()
|
||||
{
|
||||
if (IsRepository)
|
||||
{
|
||||
App.GetLauncher().OpenRepositoryInTab(this, null);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var subNode in SubNodes)
|
||||
subNode.OpenOrInit();
|
||||
}
|
||||
|
||||
public void Edit()
|
||||
{
|
||||
var activePage = App.GetLauncher().ActivePage;
|
||||
@@ -82,6 +94,13 @@ namespace SourceGit.ViewModels
|
||||
activePage.Popup = new CreateGroup(this);
|
||||
}
|
||||
|
||||
public void Move()
|
||||
{
|
||||
var activePage = App.GetLauncher().ActivePage;
|
||||
if (activePage != null && activePage.CanCreatePopup())
|
||||
activePage.Popup = new MoveRepositoryNode(this);
|
||||
}
|
||||
|
||||
public void OpenInFileManager()
|
||||
{
|
||||
if (!IsRepository)
|
||||
|
||||
@@ -3,8 +3,6 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Controls;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace SourceGit.ViewModels
|
||||
@@ -198,111 +196,6 @@ namespace SourceGit.ViewModels
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public ContextMenu CreateContextMenu(RepositoryNode node)
|
||||
{
|
||||
var menu = new ContextMenu();
|
||||
|
||||
if (!node.IsRepository && node.SubNodes.Count > 0)
|
||||
{
|
||||
var openAll = new MenuItem();
|
||||
openAll.Header = App.Text("Welcome.OpenAllInNode");
|
||||
openAll.Icon = App.CreateMenuIcon("Icons.Folder.Open");
|
||||
openAll.Click += (_, e) =>
|
||||
{
|
||||
OpenAllInNode(App.GetLauncher(), node);
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(openAll);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
}
|
||||
|
||||
if (node.IsRepository)
|
||||
{
|
||||
var open = new MenuItem();
|
||||
open.Header = App.Text("Welcome.OpenOrInit");
|
||||
open.Icon = App.CreateMenuIcon("Icons.Folder.Open");
|
||||
open.Click += (_, e) =>
|
||||
{
|
||||
App.GetLauncher()?.OpenRepositoryInTab(node, null);
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var explore = new MenuItem();
|
||||
explore.Header = App.Text("Repository.Explore");
|
||||
explore.Icon = App.CreateMenuIcon("Icons.Explore");
|
||||
explore.Click += (_, e) =>
|
||||
{
|
||||
node.OpenInFileManager();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var terminal = new MenuItem();
|
||||
terminal.Header = App.Text("Repository.Terminal");
|
||||
terminal.Icon = App.CreateMenuIcon("Icons.Terminal");
|
||||
terminal.Click += (_, e) =>
|
||||
{
|
||||
node.OpenTerminal();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(open);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(explore);
|
||||
menu.Items.Add(terminal);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
}
|
||||
else
|
||||
{
|
||||
var addSubFolder = new MenuItem();
|
||||
addSubFolder.Header = App.Text("Welcome.AddSubFolder");
|
||||
addSubFolder.Icon = App.CreateMenuIcon("Icons.Folder.Add");
|
||||
addSubFolder.Click += (_, e) =>
|
||||
{
|
||||
node.AddSubFolder();
|
||||
e.Handled = true;
|
||||
};
|
||||
menu.Items.Add(addSubFolder);
|
||||
}
|
||||
|
||||
var edit = new MenuItem();
|
||||
edit.Header = App.Text("Welcome.Edit");
|
||||
edit.Icon = App.CreateMenuIcon("Icons.Edit");
|
||||
edit.Click += (_, e) =>
|
||||
{
|
||||
node.Edit();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var move = new MenuItem();
|
||||
move.Header = App.Text("Welcome.Move");
|
||||
move.Icon = App.CreateMenuIcon("Icons.MoveTo");
|
||||
move.Click += (_, e) =>
|
||||
{
|
||||
var activePage = App.GetLauncher().ActivePage;
|
||||
if (activePage != null && activePage.CanCreatePopup())
|
||||
activePage.Popup = new MoveRepositoryNode(node);
|
||||
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var delete = new MenuItem();
|
||||
delete.Header = App.Text("Welcome.Delete");
|
||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||
delete.Click += (_, e) =>
|
||||
{
|
||||
node.Delete();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(edit);
|
||||
menu.Items.Add(move);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(delete);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
private void ResetVisibility(RepositoryNode node)
|
||||
{
|
||||
node.IsVisible = true;
|
||||
@@ -355,17 +248,6 @@ namespace SourceGit.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private void OpenAllInNode(Launcher launcher, RepositoryNode node)
|
||||
{
|
||||
foreach (var subNode in node.SubNodes)
|
||||
{
|
||||
if (subNode.IsRepository)
|
||||
launcher.OpenRepositoryInTab(subNode, null);
|
||||
else if (subNode.SubNodes.Count > 0)
|
||||
OpenAllInNode(launcher, subNode);
|
||||
}
|
||||
}
|
||||
|
||||
private string _searchFilter = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,10 +112,106 @@ namespace SourceGit.Views
|
||||
{
|
||||
if (sender is Grid { DataContext: ViewModels.RepositoryNode node } grid)
|
||||
{
|
||||
var menu = ViewModels.Welcome.Instance.CreateContextMenu(node);
|
||||
menu?.Open(grid);
|
||||
e.Handled = true;
|
||||
var menu = new ContextMenu();
|
||||
|
||||
if (!node.IsRepository && node.SubNodes.Count > 0)
|
||||
{
|
||||
var openAll = new MenuItem();
|
||||
openAll.Header = App.Text("Welcome.OpenAllInNode");
|
||||
openAll.Icon = App.CreateMenuIcon("Icons.Folder.Open");
|
||||
openAll.Click += (_, e) =>
|
||||
{
|
||||
node.OpenOrInit();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(openAll);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
}
|
||||
|
||||
if (node.IsRepository)
|
||||
{
|
||||
var open = new MenuItem();
|
||||
open.Header = App.Text("Welcome.OpenOrInit");
|
||||
open.Icon = App.CreateMenuIcon("Icons.Folder.Open");
|
||||
open.Click += (_, e) =>
|
||||
{
|
||||
node.OpenOrInit();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var explore = new MenuItem();
|
||||
explore.Header = App.Text("Repository.Explore");
|
||||
explore.Icon = App.CreateMenuIcon("Icons.Explore");
|
||||
explore.Click += (_, e) =>
|
||||
{
|
||||
node.OpenInFileManager();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var terminal = new MenuItem();
|
||||
terminal.Header = App.Text("Repository.Terminal");
|
||||
terminal.Icon = App.CreateMenuIcon("Icons.Terminal");
|
||||
terminal.Click += (_, e) =>
|
||||
{
|
||||
node.OpenTerminal();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(open);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(explore);
|
||||
menu.Items.Add(terminal);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
}
|
||||
else
|
||||
{
|
||||
var addSubFolder = new MenuItem();
|
||||
addSubFolder.Header = App.Text("Welcome.AddSubFolder");
|
||||
addSubFolder.Icon = App.CreateMenuIcon("Icons.Folder.Add");
|
||||
addSubFolder.Click += (_, e) =>
|
||||
{
|
||||
node.AddSubFolder();
|
||||
e.Handled = true;
|
||||
};
|
||||
menu.Items.Add(addSubFolder);
|
||||
}
|
||||
|
||||
var edit = new MenuItem();
|
||||
edit.Header = App.Text("Welcome.Edit");
|
||||
edit.Icon = App.CreateMenuIcon("Icons.Edit");
|
||||
edit.Click += (_, e) =>
|
||||
{
|
||||
node.Edit();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var move = new MenuItem();
|
||||
move.Header = App.Text("Welcome.Move");
|
||||
move.Icon = App.CreateMenuIcon("Icons.MoveTo");
|
||||
move.Click += (_, e) =>
|
||||
{
|
||||
node.Move();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var delete = new MenuItem();
|
||||
delete.Header = App.Text("Welcome.Delete");
|
||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||
delete.Click += (_, e) =>
|
||||
{
|
||||
node.Delete();
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(edit);
|
||||
menu.Items.Add(move);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(delete);
|
||||
menu.Open(grid);
|
||||
}
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void OnPointerPressedTreeNode(object sender, PointerPressedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user