1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-07 19:18:19 +02:00

Fixed crash renaming project with project folders

This commit is contained in:
Brian Fiete 2025-05-29 07:23:55 +02:00
parent 6f35d484b1
commit 2d251fc2e4
2 changed files with 40 additions and 34 deletions

View file

@ -9,13 +9,14 @@ using System.Threading;
using IDE.Util;
using IDE.util;
using System.IO;
using IDE.ui;
namespace IDE
{
public class WorkspaceFolder
{
public String mName ~ delete _;
public IDE.ui.ProjectListViewItem mListView;
public ProjectListViewItem mListViewItem;
public List<Project> mProjects = new List<Project>() ~ delete _;
public Self mParent;

View file

@ -85,7 +85,7 @@ namespace IDE.ui
if (mRefObject != null)
{
float changeX = g.mFont.GetWidth(mLabel) + mLabelOffset + LabelX + GS!(1);
float changeX = mLabelOffset + ((DarkListView)mListView).mLabelX + GS!(1);
bool hasChanged = false;
var workspace = mRefObject as Workspace;
@ -107,8 +107,11 @@ namespace IDE.ui
}
}
if (hasChanged)
{
changeX += g.mFont.GetWidth(mLabel);
g.DrawString("*", changeX, 0);
}
}
}
}
public override void DrawAll(Graphics g)
@ -299,7 +302,7 @@ namespace IDE.ui
ListViewItem folderListView;
WorkspaceFolder targetFolder = null;
if (mListViewToWorkspaceFolderMap.GetValue(target) case .Ok(out targetFolder))
folderListView = targetFolder.mListView;
folderListView = targetFolder.mListViewItem;
else if (target == mWorkspaceListViewItem)
folderListView = mListView.GetRoot();
else
@ -539,29 +542,21 @@ namespace IDE.ui
{
let root = mListView.GetRoot();
root.RemoveChildItem(projectListViewItem, false);
workspaceFolder.mListView.MakeParent();
workspaceFolder.mListView.AddChild(projectListViewItem);
workspaceFolder.mListView.Open(true);
workspaceFolder.mListViewItem.MakeParent();
workspaceFolder.mListViewItem.AddChild(projectListViewItem);
workspaceFolder.mListViewItem.Open(true);
mProjectToWorkspaceFolderMap[project.mRootFolder] = workspaceFolder;
workspaceFolder.mProjects.Add(project);
QueueSortItem(workspaceFolder.mListView);
QueueSortItem(workspaceFolder.mListViewItem);
}
}
public void RebuildUI()
{
mListView.GetRoot().Clear();
/*if (gApp.mWorkspace.mDebugSession != null)
{
var debugSessionItem = (ProjectListViewItem)mListView.GetRoot().CreateChildItem();
debugSessionItem.Label = "Debug Session";
debugSessionItem.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Workspace);
debugSessionItem.mLabelOffset = GS!(-16);
debugSessionItem.mRefObject = IDEApp.sApp.mWorkspace;
SetupItem(debugSessionItem, true);
}*/
for (var workspaceFolder in gApp.mWorkspace.mWorkspaceFolders)
workspaceFolder.mListViewItem = null;
if (!gApp.mWorkspace.IsInitialized)
{
@ -588,27 +583,27 @@ namespace IDE.ui
mListViewToWorkspaceFolderMap.Clear();
mProjectToWorkspaceFolderMap.Clear();
for (var project in IDEApp.sApp.mWorkspace.mProjects)
for (var project in gApp.mWorkspace.mProjects)
InitProject(project, null);
let root = mListView.GetRoot();
HashSet<String> folderMap = scope .();
for (var workspaceFolder in IDEApp.sApp.mWorkspace.mWorkspaceFolders)
for (var workspaceFolder in gApp.mWorkspace.mWorkspaceFolders)
{
void AddFolder(WorkspaceFolder folder)
{
if (folder.mListView == null && folderMap.Add(folder.mName))
if (folder.mListViewItem == null && folderMap.Add(folder.mName))
{
ProjectListViewItem parentListViewItem;
if (folder.mParent == null)
parentListViewItem = (ProjectListViewItem)mListView.GetRoot();
else
{
if (folder.mParent.mListView == null)
if (folder.mParent.mListViewItem == null)
AddFolder(folder.mParent);
parentListViewItem = folder.mParent.mListView;
parentListViewItem = folder.mParent.mListViewItem;
if (parentListViewItem == null)
return;
}
@ -616,7 +611,7 @@ namespace IDE.ui
ProjectListViewItem listViewItem;
listViewItem = (ProjectListViewItem)parentListViewItem.CreateChildItem();
folder.mListView = listViewItem;
folder.mListViewItem = listViewItem;
listViewItem.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.ProjectFolder);
listViewItem.Label = folder.mName;
listViewItem.mRefObject = folder;
@ -633,12 +628,12 @@ namespace IDE.ui
if (mProjectToListViewMap.TryGetValue(project.mRootFolder, let viewItem))
{
root.RemoveChildItem(viewItem, false);
workspaceFolder.mListView.MakeParent();
workspaceFolder.mListView.AddChild(viewItem);
workspaceFolder.mListViewItem.MakeParent();
workspaceFolder.mListViewItem.AddChild(viewItem);
mProjectToWorkspaceFolderMap[project.mRootFolder] = workspaceFolder;
}
}
QueueSortItem(workspaceFolder.mListView);
QueueSortItem(workspaceFolder.mListViewItem);
}
RehupProjects();
@ -1802,7 +1797,7 @@ namespace IDE.ui
if (mListViewToWorkspaceFolderMap.GetValue(selectedItem) case .Ok(let folder))
{
foldersToDelete.Add(folder);
mListViewToWorkspaceFolderMap.Remove(folder.mListView);
mListViewToWorkspaceFolderMap.Remove(folder.mListViewItem);
selectedItem.WithItems(scope [&] (item) => {
if (mListViewToProjectMap.GetValue(item) case .Ok(let project))
{
@ -1812,7 +1807,7 @@ namespace IDE.ui
else if (mListViewToWorkspaceFolderMap.GetValue(item) case .Ok(let itemFolder))
{
foldersToDelete.Add(itemFolder);
mListViewToWorkspaceFolderMap.Remove(itemFolder.mListView);
mListViewToWorkspaceFolderMap.Remove(itemFolder.mListViewItem);
}
});
}
@ -1845,7 +1840,7 @@ namespace IDE.ui
{
if (!HasDeletedParent(folder))
{
let folderItem = folder.mListView;
let folderItem = folder.mListViewItem;
folderItem.mParentItem.RemoveChildItem(folderItem);
}
@ -2546,6 +2541,7 @@ namespace IDE.ui
{
bool changeLabel = true;
var parentLvItem = (ProjectListViewItem)listViewItem.mParentItem;
bool isWorkspaceFolder = parentLvItem.mRefObject is WorkspaceFolder;
if (column == 0)
{
@ -2702,7 +2698,8 @@ namespace IDE.ui
if (projectItem.mIncludeKind != .Auto)
projectItem.mProject.SetChanged();
QueueSortItem(parentLvItem);
if (!isWorkspaceFolder)
QueueSortItem(parentLvItem);
Sort();
}
@ -2746,7 +2743,7 @@ namespace IDE.ui
{
for (let (k,v) in mListViewToWorkspaceFolderMap)
{
if (v.mListView != currentItem && String.Compare(v.mName, name, true) == 0)
if (v.mListViewItem != currentItem && String.Compare(v.mName, name, true) == 0)
{
return false;
}
@ -2774,7 +2771,7 @@ namespace IDE.ui
let folder = new WorkspaceFolder();
folder.mName = name;
folder.mListView = listViewItem;
folder.mListViewItem = listViewItem;
gApp.mWorkspace.mWorkspaceFolders.Add(folder);
listViewItem.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.ProjectFolder);
@ -3108,7 +3105,7 @@ namespace IDE.ui
var workspaceFolder = GetSelectedWorkspaceFolder();
if (workspaceFolder != null)
{
let newFolder = AddWorkspaceFolder(workspaceFolder.mListView);
let newFolder = AddWorkspaceFolder(workspaceFolder.mListViewItem);
newFolder.mParent = workspaceFolder;
}
else
@ -3116,6 +3113,14 @@ namespace IDE.ui
AddWorkspaceFolder((ProjectListViewItem)mListView.GetRoot());
}
});
if (gApp.mSettings.mEnableDevMode)
{
anItem = menu.AddItem("Rebuild UI");
anItem.mOnMenuItemSelected.Add(new (item) => {
RebuildUI();
});
}
}
if (mListViewToWorkspaceFolderMap.TryGetValue(focusedItem, let folder))