mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-12 13:24:09 +02:00
Code generator support
This commit is contained in:
parent
195c705a46
commit
73099e4a04
15 changed files with 1472 additions and 83 deletions
|
@ -792,16 +792,96 @@ namespace IDE.ui
|
|||
}
|
||||
}
|
||||
|
||||
public void NewClass(ProjectFolder folder)
|
||||
public void GenerateCode(ProjectFolder folder)
|
||||
{
|
||||
DarkDialog dialog = (DarkDialog)ThemeFactory.mDefault.CreateDialog("New Class", "Class Name");
|
||||
/*DarkDialog dialog = (DarkDialog)ThemeFactory.mDefault.CreateDialog("New Class", "Class Name");
|
||||
dialog.mMinWidth = GS!(300);
|
||||
dialog.mDefaultButton = dialog.AddButton("OK", new (evt) => DoNewClass(folder, evt));
|
||||
dialog.mEscButton = dialog.AddButton("Cancel");
|
||||
dialog.AddEdit("Unnamed");
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());*/
|
||||
|
||||
var dialog = new GenerateDialog(folder);
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
|
||||
public void Regenerate(bool allowHashMismatch)
|
||||
{
|
||||
mListView.GetRoot().WithSelectedItems(scope (selectedItem) =>
|
||||
{
|
||||
if (mListViewToProjectMap.GetValue(selectedItem) case .Ok(var sourceProjectItem))
|
||||
{
|
||||
var dialog = new GenerateDialog(sourceProjectItem, allowHashMismatch);
|
||||
dialog.PopupWindow(gApp.GetActiveWindow());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void Regenerate(ProjectSource projectSource, StringView fileText)
|
||||
{
|
||||
var sourceViewPanel = gApp.ShowProjectItem(projectSource, false);
|
||||
sourceViewPanel.mEditWidget.SetText(scope .(fileText));
|
||||
}
|
||||
|
||||
public void Generate(ProjectFolder folder, StringView fileName, StringView fileText)
|
||||
{
|
||||
let project = folder.mProject;
|
||||
if (project.mNeedsCreate)
|
||||
project.FinishCreate();
|
||||
String relFileName = scope .(fileName);
|
||||
if (!relFileName.Contains('.'))
|
||||
relFileName.Append(".bf");
|
||||
|
||||
String fullFilePath = scope String();
|
||||
String relPath = scope String();
|
||||
folder.GetRelDir(relPath);
|
||||
if (relPath.Length > 0)
|
||||
relPath.Append("/");
|
||||
relPath.Append(relFileName);
|
||||
folder.mProject.GetProjectFullPath(relPath, fullFilePath);
|
||||
String dirName = scope String();
|
||||
Path.GetDirectoryPath(fullFilePath, dirName);
|
||||
Directory.CreateDirectory(dirName).IgnoreError();
|
||||
|
||||
if (File.Exists(fullFilePath))
|
||||
{
|
||||
var error = scope String();
|
||||
error.AppendF("File '{0}' already exists", fullFilePath);
|
||||
IDEApp.sApp.Fail(error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (File.WriteAllText(fullFilePath, fileText) case .Err)
|
||||
{
|
||||
var error = scope String();
|
||||
error.AppendF("Failed to create file '{0}'", fullFilePath);
|
||||
gApp.Fail(error);
|
||||
return;
|
||||
}
|
||||
|
||||
ProjectSource projectSource = new ProjectSource();
|
||||
projectSource.mIncludeKind = (folder.mIncludeKind == .Auto) ? .Auto : .Manual;
|
||||
projectSource.mName.Set(relFileName);
|
||||
projectSource.mPath = new String();
|
||||
folder.mProject.GetProjectRelPath(fullFilePath, projectSource.mPath);
|
||||
projectSource.mProject = folder.mProject;
|
||||
projectSource.mParentFolder = folder;
|
||||
folder.AddChild(projectSource);
|
||||
let projectItem = AddProjectItem(projectSource);
|
||||
if (projectItem != null)
|
||||
{
|
||||
mListView.GetRoot().SelectItemExclusively(projectItem);
|
||||
mListView.EnsureItemVisible(projectItem, false);
|
||||
}
|
||||
Sort();
|
||||
if (folder.mIncludeKind != .Auto)
|
||||
folder.mProject.SetChanged();
|
||||
|
||||
gApp.RecordHistoryLocation(true);
|
||||
gApp.ShowProjectItem(projectSource);
|
||||
gApp.RecordHistoryLocation(true);
|
||||
}
|
||||
|
||||
void DoNewClass(ProjectFolder folder, DialogEvent evt)
|
||||
{
|
||||
Dialog dlg = (Dialog)evt.mSender;
|
||||
|
@ -1470,7 +1550,10 @@ namespace IDE.ui
|
|||
}
|
||||
|
||||
if (doReleaseRef)
|
||||
{
|
||||
projectItem.mDetached = true;
|
||||
projectItem.ReleaseRef();
|
||||
}
|
||||
//TODO: Defer this, projectItem is needed for a backgrounded QueueProjectSourceRemoved
|
||||
//delete projectItem;
|
||||
}
|
||||
|
@ -2471,17 +2554,26 @@ namespace IDE.ui
|
|||
}
|
||||
});
|
||||
|
||||
item = menu.AddItem("New Class...");
|
||||
item = menu.AddItem("Generate...");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
var projectFolder = GetSelectedProjectFolder();
|
||||
if (projectFolder != null)
|
||||
{
|
||||
if (CheckProjectModify(projectFolder.mProject))
|
||||
NewClass(projectFolder);
|
||||
GenerateCode(projectFolder);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if ((projectItem != null) && (projectItem is ProjectSource) && (!isProject))
|
||||
{
|
||||
item = menu.AddItem("Regenerate");
|
||||
item.mOnMenuItemSelected.Add(new (item) =>
|
||||
{
|
||||
Regenerate(false);
|
||||
});
|
||||
}
|
||||
|
||||
item = menu.AddItem("Import File...");
|
||||
item.mOnMenuItemSelected.Add(new (item) => { mImportFileDeferred = true; /* ImportFile();*/ });
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue