mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 07:44:09 +02:00
Fixed some IDE issues
Fixed some issues related to creating new projects and workspace Added 'Refresh' option to project Fixed auto-include refresh Fixed folder rename Fixed EOF issue involving DbgModule string table
This commit is contained in:
parent
8a02874b51
commit
0ce6e44523
14 changed files with 374 additions and 163 deletions
|
@ -7,6 +7,7 @@ using Beefy;
|
|||
using Beefy.gfx;
|
||||
using Beefy.theme.dark;
|
||||
using Beefy.widgets;
|
||||
using Beefy.theme;
|
||||
|
||||
namespace IDE.ui
|
||||
{
|
||||
|
@ -33,8 +34,14 @@ namespace IDE.ui
|
|||
mWidth = GS!(320);
|
||||
mHeight = GS!(200);
|
||||
}
|
||||
|
||||
bool CreateProject()
|
||||
|
||||
enum CreateFlags
|
||||
{
|
||||
None,
|
||||
NonEmptyDirOkay = 1,
|
||||
}
|
||||
|
||||
bool CreateProject(CreateFlags createFlags = .None)
|
||||
{
|
||||
var app = IDEApp.sApp;
|
||||
String projName = scope String();
|
||||
|
@ -44,6 +51,13 @@ namespace IDE.ui
|
|||
mDirectoryEdit.GetText(projDirectory);
|
||||
projDirectory.Trim();
|
||||
|
||||
if (projName.IsEmpty)
|
||||
{
|
||||
while ((projDirectory.EndsWith('/')) || (projDirectory.EndsWith('\\')))
|
||||
projDirectory.RemoveFromEnd(1);
|
||||
Path.GetFileName(projDirectory, projName);
|
||||
}
|
||||
|
||||
bool isNameValid = projName.Length > 0;
|
||||
for (int32 i = 0; i < projName.Length; i++)
|
||||
{
|
||||
|
@ -75,6 +89,24 @@ namespace IDE.ui
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((!createFlags.HasFlag(.NonEmptyDirOkay)) && (!IDEUtils.IsDirectoryEmpty(projDirectory)))
|
||||
{
|
||||
var dialog = ThemeFactory.mDefault.CreateDialog("Create Project?",
|
||||
scope String()..AppendF("The selected directory '{}' is not empty. Are you sure you want to create a project there?", projDirectory), DarkTheme.sDarkTheme.mIconWarning);
|
||||
dialog.AddButton("Yes", new (evt) =>
|
||||
{
|
||||
CreateProject(createFlags | .NonEmptyDirOkay);
|
||||
});
|
||||
dialog.AddButton("No", new (evt) =>
|
||||
{
|
||||
mDirectoryEdit.SetFocus();
|
||||
});
|
||||
dialog.PopupWindow(mWidgetWindow);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
String projectFilePath = scope String()..Append(projDirectory, "/BeefProj.toml");
|
||||
if (File.Exists(projectFilePath))
|
||||
|
@ -93,7 +125,28 @@ namespace IDE.ui
|
|||
}
|
||||
|
||||
IDEUtils.FixFilePath(projDirectory);
|
||||
app.CreateProject(projName, projDirectory, targetType);
|
||||
|
||||
Project project = null;
|
||||
|
||||
// If we don't yet have a workspace then create one now...
|
||||
if (!app.mWorkspace.IsInitialized)
|
||||
{
|
||||
app.mWorkspace.mDir = new String(projDirectory);
|
||||
app.mWorkspace.mName = new String(projName);
|
||||
|
||||
app.[Friend]LoadWorkspace(.OpenOrNew);
|
||||
app.[Friend]FinishShowingNewWorkspace(false);
|
||||
|
||||
project = app.mWorkspace.FindProject(projName);
|
||||
if (project != null)
|
||||
{
|
||||
project.mGeneralOptions.mTargetType = targetType;
|
||||
project.FinishCreate();
|
||||
}
|
||||
}
|
||||
|
||||
if (project == null)
|
||||
project = app.CreateProject(projName, projDirectory, targetType);
|
||||
|
||||
app.mWorkspace.SetChanged();
|
||||
|
||||
|
@ -116,7 +169,7 @@ namespace IDE.ui
|
|||
{
|
||||
mDefaultButton = AddButton("Create", new (evt) => { if (!CreateProject()) evt.mCloseDialog = false; });
|
||||
mEscButton = AddButton("Cancel", new (evt) => Close());
|
||||
mNameEdit = AddEdit("NewProject");
|
||||
mNameEdit = AddEdit("");
|
||||
mNameEdit.mOnContentChanged.Add(new (dlg) =>
|
||||
{
|
||||
UpdateProjectDir();
|
||||
|
|
|
@ -127,7 +127,7 @@ namespace IDE.ui
|
|||
if (nextSlash != -1)
|
||||
selStr.Append(editText, startSlash + 1, nextSlash - startSlash - 1);
|
||||
else
|
||||
selStr.Append(editText, startSlash + 1, cursorPos - startSlash - 1);
|
||||
selStr.Append(editText, startSlash + 1, Math.Max(cursorPos - startSlash - 1, 0));
|
||||
|
||||
String info = scope .();
|
||||
info.Append("uncertain\n");
|
||||
|
|
|
@ -415,6 +415,8 @@ namespace IDE.ui
|
|||
{
|
||||
None = 0,
|
||||
ApplyAutoToChildren = 1,
|
||||
ClearAutoItems = 2,
|
||||
FullTraversal = 4,
|
||||
}
|
||||
|
||||
public void RehupFolder(ProjectFolder projectFolder, RehupFlags rehupFlags = .None)
|
||||
|
@ -429,7 +431,7 @@ namespace IDE.ui
|
|||
var dirPath = scope String();
|
||||
projectFolder.GetFullImportPath(dirPath);
|
||||
|
||||
bool clearAutoItems = (!rehupFlags.HasFlag(.ApplyAutoToChildren)) && (projectFolder.mIncludeKind == .Auto);
|
||||
bool clearAutoItems = (!rehupFlags.HasFlag(.ApplyAutoToChildren)) && (projectFolder.mAutoInclude); // && (rehupFlags.HasFlag(.ClearAutoItems));
|
||||
HashSet<ProjectItem> foundAutoItems = scope .();
|
||||
|
||||
for (let fileEntry in Directory.EnumerateFiles(dirPath))
|
||||
|
@ -482,6 +484,8 @@ namespace IDE.ui
|
|||
projectItem.mIncludeKind = .Auto;
|
||||
if (projectItem.mIncludeKind == .Auto)
|
||||
RehupFolder(childProjectFolder, rehupFlags);
|
||||
if ((clearAutoItems) && (projectItem.mIncludeKind == .Auto))
|
||||
foundAutoItems.Add(projectItem);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -501,6 +505,11 @@ namespace IDE.ui
|
|||
childProjectFolder.mAutoInclude = true;
|
||||
projectFolder.AddChild(childProjectFolder);
|
||||
|
||||
if (clearAutoItems)
|
||||
{
|
||||
foundAutoItems.Add(childProjectFolder);
|
||||
}
|
||||
|
||||
AddProjectItem(childProjectFolder);
|
||||
|
||||
RehupFolder(childProjectFolder, rehupFlags);
|
||||
|
@ -516,11 +525,19 @@ namespace IDE.ui
|
|||
for (int childIdx = projectFolder.mChildItems.Count - 1; childIdx >= 0; childIdx--)
|
||||
{
|
||||
var child = projectFolder.mChildItems[childIdx];
|
||||
|
||||
|
||||
if (((rehupFlags.HasFlag(.ApplyAutoToChildren)) && (child.mIncludeKind == .Manual)) ||
|
||||
((clearAutoItems) && (child.mIncludeKind == .Auto) && (!foundAutoItems.Contains(child))))
|
||||
{
|
||||
var listItem = mProjectToListViewMap[child];
|
||||
DoDeleteItem(listItem, null, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((rehupFlags.HasFlag(.FullTraversal)) && (child.mIncludeKind == .Manual) && (var childProjectFolder = child as ProjectFolder))
|
||||
{
|
||||
RehupFolder(childProjectFolder, rehupFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -583,7 +600,7 @@ namespace IDE.ui
|
|||
dialog.mDefaultButton = dialog.AddButton("OK", new (evt) => DoNewClass(folder, evt));
|
||||
dialog.mEscButton = dialog.AddButton("Cancel");
|
||||
dialog.AddEdit("Unnamed");
|
||||
dialog.PopupWindow(mWidgetWindow);
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
|
||||
void DoNewClass(ProjectFolder folder, DialogEvent evt)
|
||||
|
@ -596,6 +613,8 @@ namespace IDE.ui
|
|||
return;
|
||||
|
||||
let project = folder.mProject;
|
||||
if (project.mNeedsCreate)
|
||||
project.FinishCreate();
|
||||
String relFileName = scope String(className, ".bf");
|
||||
|
||||
String fullFilePath = scope String();
|
||||
|
@ -680,6 +699,11 @@ namespace IDE.ui
|
|||
if (rightProjectItem == null)
|
||||
return 1;
|
||||
|
||||
if ((leftProjectItem.mParentFolder == null) && (rightProjectItem.mParentFolder == null))
|
||||
{
|
||||
return String.Compare(leftProjectItem.mProject.mProjectName, rightProjectItem.mProject.mProjectName, true);
|
||||
}
|
||||
|
||||
return ProjectItem.Compare(leftProjectItem, rightProjectItem);
|
||||
}
|
||||
|
||||
|
@ -811,7 +835,7 @@ namespace IDE.ui
|
|||
fileDialog.Multiselect = true;
|
||||
fileDialog.InitialDirectory = fullDir;
|
||||
fileDialog.ValidateNames = true;
|
||||
mWidgetWindow.PreModalChild();
|
||||
gApp.GetActiveWindow().PreModalChild();
|
||||
if (fileDialog.ShowDialog(gApp.GetActiveWindow()).GetValueOrDefault() == .OK)
|
||||
{
|
||||
if (mSelectedParentItem.mOpenButton != null)
|
||||
|
@ -1291,7 +1315,7 @@ namespace IDE.ui
|
|||
|
||||
aDialog.mDefaultButton = aDialog.AddButton("Yes", new (evt) => RemoveSelectedItems(false));
|
||||
aDialog.mEscButton = aDialog.AddButton("No");
|
||||
aDialog.PopupWindow(mWidgetWindow);
|
||||
aDialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
}
|
||||
else if((fileCount > 0) || (folderCount > 0))
|
||||
|
@ -1345,7 +1369,7 @@ namespace IDE.ui
|
|||
RemoveSelectedItems(true);
|
||||
});
|
||||
aDialog.mEscButton = aDialog.AddButton("Cancel");
|
||||
aDialog.PopupWindow(mWidgetWindow);
|
||||
aDialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1591,7 +1615,7 @@ namespace IDE.ui
|
|||
Sort();
|
||||
}
|
||||
~ delete oldValue);
|
||||
dialog.PopupWindow(mWidgetWindow);
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
|
||||
didRename = false;
|
||||
}
|
||||
|
@ -1712,7 +1736,7 @@ namespace IDE.ui
|
|||
fileDialog.ValidateNames = true;
|
||||
fileDialog.DefaultExt = ".toml";
|
||||
fileDialog.SetFilter("Beef projects (BeefProj.toml)|BeefProj.toml|All files (*.*)|*.*");
|
||||
mWidgetWindow.PreModalChild();
|
||||
gApp.GetActiveWindow().PreModalChild();
|
||||
if (fileDialog.ShowDialog(gApp.GetActiveWindow()).GetValueOrDefault() == .OK)
|
||||
{
|
||||
for (String origProjFilePath in fileDialog.FileNames)
|
||||
|
@ -1734,13 +1758,13 @@ namespace IDE.ui
|
|||
public void ShowProjectProperties(Project project)
|
||||
{
|
||||
var projectProperties = new ProjectProperties(project);
|
||||
projectProperties.PopupWindow(mWidgetWindow);
|
||||
projectProperties.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
|
||||
public void ShowWorkspaceProperties()
|
||||
{
|
||||
var workspaceProperties = new WorkspaceProperties();
|
||||
workspaceProperties.PopupWindow(mWidgetWindow);
|
||||
workspaceProperties.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
|
||||
public void RehupProjects()
|
||||
|
@ -1768,7 +1792,7 @@ namespace IDE.ui
|
|||
{
|
||||
var newProjectDialog = new NewProjectDialog();
|
||||
newProjectDialog.Init();
|
||||
newProjectDialog.PopupWindow(mWidgetWindow);
|
||||
newProjectDialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
|
||||
protected override void ShowRightClickMenu(Widget relWidget, float x, float y)
|
||||
|
@ -1832,6 +1856,55 @@ namespace IDE.ui
|
|||
if ((projectItem != null) && (!handled))
|
||||
{
|
||||
Menu item = null;
|
||||
|
||||
if (isProject)
|
||||
{
|
||||
item = menu.AddItem("Set as Startup Project");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectItem = GetSelectedProjectItem();
|
||||
if (projectItem != null)
|
||||
SetAsStartupProject(projectItem.mProject);
|
||||
});
|
||||
|
||||
item = menu.AddItem("Lock Project");
|
||||
if (projectItem.mProject.mLocked)
|
||||
item.mIconImage = DarkTheme.sDarkTheme.GetImage(.Check);
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectItem = GetSelectedProjectItem();
|
||||
if (projectItem != null)
|
||||
{
|
||||
projectItem.mProject.mLocked = !projectItem.mProject.mLocked;
|
||||
gApp.mWorkspace.SetChanged();
|
||||
}
|
||||
});
|
||||
|
||||
item = menu.AddItem("Refresh");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectItem = GetSelectedProjectItem();
|
||||
if (projectItem != null)
|
||||
{
|
||||
let project = projectItem.mProject;
|
||||
if (project.mNeedsCreate)
|
||||
{
|
||||
project.FinishCreate(false);
|
||||
RebuildUI();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (project.mRootFolder.mIsWatching)
|
||||
project.mRootFolder.StopWatching();
|
||||
project.mRootFolder.StartWatching();
|
||||
RehupFolder(project.mRootFolder, .FullTraversal);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
menu.AddItem();
|
||||
}
|
||||
|
||||
if ((projectItem != null) && (!isProject))
|
||||
{
|
||||
item = menu.AddItem("Remove ...");
|
||||
|
@ -1933,7 +2006,7 @@ namespace IDE.ui
|
|||
RehupFolder(projectFolder);
|
||||
}
|
||||
});
|
||||
dialog.PopupWindow(mWidgetWindow);
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
else
|
||||
RehupFolder(projectFolder);
|
||||
|
@ -1988,17 +2061,8 @@ namespace IDE.ui
|
|||
var process = scope SpawnedProcess();
|
||||
process.Start(psi).IgnoreError();
|
||||
});
|
||||
}
|
||||
|
||||
if (isProject)
|
||||
{
|
||||
item = menu.AddItem("Set as Startup Project");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectItem = GetSelectedProjectItem();
|
||||
if (projectItem != null)
|
||||
SetAsStartupProject(projectItem.mProject);
|
||||
});
|
||||
menu.AddItem();
|
||||
}
|
||||
|
||||
//menu.AddItem();
|
||||
|
@ -2026,19 +2090,7 @@ namespace IDE.ui
|
|||
|
||||
if (isProject)
|
||||
{
|
||||
item = menu.AddItem("Lock Project");
|
||||
if (projectItem.mProject.mLocked)
|
||||
item.mIconImage = DarkTheme.sDarkTheme.GetImage(.Check);
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectItem = GetSelectedProjectItem();
|
||||
if (projectItem != null)
|
||||
{
|
||||
projectItem.mProject.mLocked = !projectItem.mProject.mLocked;
|
||||
gApp.mWorkspace.SetChanged();
|
||||
}
|
||||
});
|
||||
|
||||
menu.AddItem();
|
||||
item = menu.AddItem("Properties...");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
|
@ -2047,7 +2099,6 @@ namespace IDE.ui
|
|||
ShowProjectProperties(projectItem.mProject);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
/*else if (!handled)
|
||||
{
|
||||
|
@ -2070,7 +2121,6 @@ namespace IDE.ui
|
|||
mMenuWidget = null;
|
||||
});
|
||||
|
||||
//menuWidget.mWidgetWindow.mWindowClosedHandler.Add(new => DeselectFolder);
|
||||
}
|
||||
|
||||
void ListViewItemClicked(MouseEvent theEvent)
|
||||
|
|
|
@ -1315,6 +1315,9 @@ namespace IDE.ui
|
|||
{
|
||||
var editWidgetContent = (SourceEditWidgetContent)mEditWidget.Content;
|
||||
|
||||
if (mWidgetWindow == null)
|
||||
return;
|
||||
|
||||
bool wantOpen = (autocompleteInfo.Length > 0);
|
||||
if ((editWidgetContent.mAutoComplete != null) && (editWidgetContent.mAutoComplete.mIsAsync) &&
|
||||
(editWidgetContent.mAutoComplete.mInvokeWidget != null))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue