1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

Merge pull request #1651 from Fusioon/folders-addproject

Add project import options to workspace folder context menu
This commit is contained in:
Brian Fiete 2022-07-16 06:38:19 -04:00 committed by GitHub
commit 8e34de65ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -134,6 +134,7 @@ namespace IDE.ui
bool mImportFolderDeferred;
bool mImportProjectDeferred;
bool mImportInstalledDeferred;
WorkspaceFolder mAddProjectTargetFolder;
public Dictionary<ListViewItem, ProjectItem> mListViewToProjectMap = new .() ~ delete _;
public Dictionary<ProjectItem, ProjectListViewItem> mProjectToListViewMap = new .() ~ delete _;
public Dictionary<ListViewItem, WorkspaceFolder> mListViewToWorkspaceFolderMap = new .() ~ delete _;
@ -522,6 +523,18 @@ namespace IDE.ui
{
var projectListViewItem = InitProjectItem(project.mRootFolder);
projectListViewItem.mRefObject = project;
if (mAddProjectTargetFolder != null)
{
let root = mListView.GetRoot();
root.RemoveChildItem(projectListViewItem, false);
mAddProjectTargetFolder.mListView.MakeParent();
mAddProjectTargetFolder.mListView.AddChild(projectListViewItem);
mAddProjectTargetFolder.mListView.Open(true);
mProjectToWorkspaceFolderMap[project.mRootFolder] = mAddProjectTargetFolder;
mAddProjectTargetFolder.mProjects.Add(project);
mAddProjectTargetFolder = null;
}
}
public void RebuildUI()
@ -1764,33 +1777,59 @@ namespace IDE.ui
let root = mListView.GetRoot();
List<ListViewItem> itemsToMove = scope .();
List<WorkspaceFolder> foldersToDelete = scope .();
root.WithSelectedItems(scope [&] (selectedItem) => {
if (mListViewToWorkspaceFolderMap.GetValue(selectedItem) case .Ok(let folder))
{
foldersToDelete.Add(folder);
mListViewToWorkspaceFolderMap.Remove(folder.mListView);
selectedItem.WithItems(scope [&] (item) => {
if (mListViewToProjectMap.GetValue(item) case .Ok(let project))
{
if (project.mParentFolder == null)
itemsToMove.Add(item);
}
else if (mListViewToWorkspaceFolderMap.GetValue(item) case .Ok(let itemFolder))
{
foldersToDelete.Add(itemFolder);
mListViewToWorkspaceFolderMap.Remove(itemFolder.mListView);
}
});
}
});
for (let projectListViewItem in itemsToMove)
for (let listViewItem in itemsToMove)
{
projectListViewItem.mParentItem.RemoveChildItem(projectListViewItem, false);
root.AddChildAtIndex(1, projectListViewItem);
if (mListViewToProjectMap.TryGetValue(projectListViewItem, let projectItem))
listViewItem.mParentItem.RemoveChildItem(listViewItem, false);
root.AddChildAtIndex(1, listViewItem);
if (mListViewToProjectMap.TryGetValue(listViewItem, let projectItem))
mProjectToWorkspaceFolderMap.Remove(projectItem);
}
for (let folder in foldersToDelete)
bool HasDeletedParent(WorkspaceFolder folder)
{
WorkspaceFolder parent = folder;
repeat
{
parent = parent.mParent;
if (foldersToDelete.Contains(parent))
return true;
}
while (parent != null);
return false;
}
for (let folder in foldersToDelete)
{
let folderItem = folder.mListView;
mListViewToWorkspaceFolderMap.Remove(folderItem);
folderItem.mParentItem.RemoveChildItem(folderItem);
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
if (!HasDeletedParent(folder))
{
let folderItem = folder.mListView;
folderItem.mParentItem.RemoveChildItem(folderItem);
}
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
delete folder;
}
@ -2374,7 +2413,7 @@ namespace IDE.ui
return true;
}
public void AddWorkspaceFolder(ProjectListViewItem parentListViewItem)
public WorkspaceFolder AddWorkspaceFolder(ProjectListViewItem parentListViewItem)
{
ProjectListViewItem listViewItem;
listViewItem = (ProjectListViewItem)parentListViewItem.CreateChildItem();
@ -2406,6 +2445,7 @@ namespace IDE.ui
mListView.GetRoot().SelectItemExclusively(listViewItem);
EditListViewItem(listViewItem);
gApp.mWorkspace.SetChanged();
return folder;
}
@ -2623,8 +2663,34 @@ namespace IDE.ui
anItem = menu.AddItem("Rename");
anItem.mOnMenuItemSelected.Add(new (item) => { EditListViewItem(focusedItem); });
menu.AddItem();
anItem = menu.AddItem("Add New Project...");
anItem.mOnMenuItemSelected.Add(new (item) => {
mAddProjectTargetFolder = folder;
AddNewProject();
});
if (gApp.IsCompiling)
anItem.SetDisabled(true);
anItem = menu.AddItem("Add Existing Project...");
anItem.mOnMenuItemSelected.Add(new (item) => {
mImportProjectDeferred = true;
mAddProjectTargetFolder = folder;
});
if (gApp.IsCompiling)
anItem.SetDisabled(true);
anItem = menu.AddItem("Add From Installed...");
anItem.mOnMenuItemSelected.Add(new (item) => {
mImportInstalledDeferred = true;
mAddProjectTargetFolder = folder;
});
if (gApp.IsCompiling)
anItem.SetDisabled(true);
anItem = menu.AddItem("New Folder");
anItem.mOnMenuItemSelected.Add(new (item) => { AddWorkspaceFolder(folder.mListView); });
anItem.mOnMenuItemSelected.Add(new (item) => {
let newfolder = AddWorkspaceFolder(folder.mListView);
newfolder.mParent = folder;
});
handled = true;
}
else if (gApp.mWorkspace.IsInitialized)
@ -2633,12 +2699,18 @@ namespace IDE.ui
menu.AddItem();
anItem = menu.AddItem("Add New Project...");
anItem.mOnMenuItemSelected.Add(new (item) => { AddNewProject(); });
anItem.mOnMenuItemSelected.Add(new (item) => {
mAddProjectTargetFolder = null;
AddNewProject();
});
if (gApp.IsCompiling)
anItem.SetDisabled(true);
anItem = menu.AddItem("Add Existing Project...");
anItem.mOnMenuItemSelected.Add(new (item) => { mImportProjectDeferred = true; });
anItem.mOnMenuItemSelected.Add(new (item) => {
mAddProjectTargetFolder = null;
mImportProjectDeferred = true;
});
if (gApp.IsCompiling)
anItem.SetDisabled(true);