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:
commit
8e34de65ea
1 changed files with 86 additions and 14 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue