1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +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 IDE.util; using IDE.util;
using System.IO; using System.IO;
using IDE.ui;
namespace IDE namespace IDE
{ {
public class WorkspaceFolder public class WorkspaceFolder
{ {
public String mName ~ delete _; public String mName ~ delete _;
public IDE.ui.ProjectListViewItem mListView; public ProjectListViewItem mListViewItem;
public List<Project> mProjects = new List<Project>() ~ delete _; public List<Project> mProjects = new List<Project>() ~ delete _;
public Self mParent; public Self mParent;

View file

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