From 2d251fc2e442334a34fcb48acbe3399a99ebc22f Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Thu, 29 May 2025 07:23:55 +0200 Subject: [PATCH] Fixed crash renaming project with project folders --- IDE/src/Workspace.bf | 3 +- IDE/src/ui/ProjectPanel.bf | 71 ++++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/IDE/src/Workspace.bf b/IDE/src/Workspace.bf index a1dab9b6..c8443e34 100644 --- a/IDE/src/Workspace.bf +++ b/IDE/src/Workspace.bf @@ -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 mProjects = new List() ~ delete _; public Self mParent; diff --git a/IDE/src/ui/ProjectPanel.bf b/IDE/src/ui/ProjectPanel.bf index fbdd72b8..2a4ba234 100644 --- a/IDE/src/ui/ProjectPanel.bf +++ b/IDE/src/ui/ProjectPanel.bf @@ -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 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))