mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Fixed crash renaming project with project folders
This commit is contained in:
parent
6f35d484b1
commit
2d251fc2e4
2 changed files with 40 additions and 34 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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,8 +107,11 @@ namespace IDE.ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasChanged)
|
if (hasChanged)
|
||||||
|
{
|
||||||
|
changeX += g.mFont.GetWidth(mLabel);
|
||||||
g.DrawString("*", changeX, 0);
|
g.DrawString("*", changeX, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DrawAll(Graphics g)
|
public override void DrawAll(Graphics g)
|
||||||
|
@ -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))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue