Browse Source

Fixed crash renaming project with project folders

Brian Fiete 3 months ago
parent
commit
2d251fc2e4
2 changed files with 40 additions and 34 deletions
  1. 2 1
      IDE/src/Workspace.bf
  2. 38 33
      IDE/src/ui/ProjectPanel.bf

+ 2 - 1
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<Project> mProjects = new List<Project>() ~ delete _;
 		public Self mParent;
 

+ 38 - 33
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<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))