Skip to content

Commit 4ec007e

Browse files
committed
UI Extender is working
1 parent aa29dc9 commit 4ec007e

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

Content/Scripts/editor.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,20 @@
4545
module.exports = () => {
4646
try {
4747
let cleanup = main()
48+
49+
global.$$exit = cleanup
50+
4851
return () => cleanup()
4952
} catch (e) {
5053
console.error(String(e))
5154
return () => {}
5255
}
5356
}
5457
} else {
58+
global.$$exit = function() {}
59+
global.$exit = function () {
60+
global.$$exit()
61+
}
5562
Context.WriteDTS(Context.Paths[0] + 'typings/ue.d.ts')
5663
Context.WriteAliases(Context.Paths[0] + 'aliases.js')
5764

Source/JavascriptEditor/JavascriptEditor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ void FJavascriptEditorModule::Unregister()
179179
for (auto e : Extensions) { e->Unregister(); }
180180
Extensions.Empty();
181181

182+
JavascriptContext->RunScript(TEXT("this['$exit'] && this['$exit']()"));
182183
JavascriptContext->RunScript(TEXT("gc()"));
183184

184185
JavascriptContext->JavascriptContext.Reset();

Source/JavascriptUMG/JavascriptMenuLibrary.cpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,35 +167,32 @@ FJavascriptUICommandInfo UJavascriptMenuLibrary::UI_COMMAND_Function(FJavascript
167167

168168
FJavascriptExtensionBase UJavascriptMenuLibrary::AddToolBarExtension(FJavascriptExtender Extender, FName ExtensionHook, EJavascriptExtensionHook::Type HookPosition, FJavascriptUICommandList CommandList, FJavascriptFunction Function)
169169
{
170-
auto Copy = new FJavascriptFunction;
171-
*Copy = Function;
170+
TSharedPtr<FJavascriptFunction> Copy(new FJavascriptFunction);
171+
*(Copy.Get()) = Function;
172172
return { Extender->AddToolBarExtension(ExtensionHook, (EExtensionHook::Position)HookPosition, CommandList.Handle, FToolBarExtensionDelegate::CreateLambda([=](class FToolBarBuilder& Builder) {
173173
FJavascriptMenuBuilder Out;
174174
Out.MultiBox = Out.ToolBar = &Builder;
175175
Copy->Execute(FJavascriptMenuBuilder::StaticStruct(), &Out);
176-
delete Copy;
177176
}))};
178177
}
179178
FJavascriptExtensionBase UJavascriptMenuLibrary::AddMenuExtension(FJavascriptExtender Extender, FName ExtensionHook, EJavascriptExtensionHook::Type HookPosition, FJavascriptUICommandList CommandList, FJavascriptFunction Function)
180179
{
181-
auto Copy = new FJavascriptFunction;
182-
*Copy = Function;
180+
TSharedPtr<FJavascriptFunction> Copy(new FJavascriptFunction);
181+
*(Copy.Get()) = Function;
183182
return{ Extender->AddMenuExtension(ExtensionHook, (EExtensionHook::Position)HookPosition, CommandList.Handle, FMenuExtensionDelegate::CreateLambda([=](class FMenuBuilder& Builder) {
184183
FJavascriptMenuBuilder Out;
185184
Out.MultiBox = Out.Menu = &Builder;
186185
Copy->Execute(FJavascriptMenuBuilder::StaticStruct(), &Out);
187-
delete Copy;
188186
})) };
189187
}
190188
FJavascriptExtensionBase UJavascriptMenuLibrary::AddMenubarExtension(FJavascriptExtender Extender, FName ExtensionHook, EJavascriptExtensionHook::Type HookPosition, FJavascriptUICommandList CommandList, FJavascriptFunction Function)
191189
{
192-
auto Copy = new FJavascriptFunction;
193-
*Copy = Function;
190+
TSharedPtr<FJavascriptFunction> Copy(new FJavascriptFunction);
191+
*(Copy.Get()) = Function;
194192
return{ Extender->AddMenuBarExtension(ExtensionHook, (EExtensionHook::Position)HookPosition, CommandList.Handle, FMenuBarExtensionDelegate::CreateLambda([=](class FMenuBarBuilder& Builder) {
195193
FJavascriptMenuBuilder Out;
196194
Out.MultiBox = Out.MenuBar = &Builder;
197195
Copy->Execute(FJavascriptMenuBuilder::StaticStruct(), &Out);
198-
delete Copy;
199196
})) };
200197
}
201198

@@ -236,4 +233,19 @@ FJavascriptExtender::FJavascriptExtender()
236233

237234
FJavascriptExtender::FJavascriptExtender(TSharedPtr<FExtender> Extender)
238235
: Handle(Extender)
239-
{}
236+
{}
237+
238+
void UJavascriptMenuLibrary::AddPullDownMenu(FJavascriptMenuBuilder& MenuBuilder, const FText& InMenuLabel, const FText& InToolTip, FJavascriptFunction InPullDownMenu, FName InExtensionHook, FName InTutorialHighlightName)
239+
{
240+
if (MenuBuilder.MenuBar)
241+
{
242+
TSharedPtr<FJavascriptFunction> Copy(new FJavascriptFunction);
243+
*(Copy.Get()) = InPullDownMenu;
244+
auto Delegate = FNewMenuDelegate::CreateLambda([=](class FMenuBuilder& Builder) {
245+
FJavascriptMenuBuilder Out;
246+
Out.MultiBox = Out.Menu = &Builder;
247+
Copy->Execute(FJavascriptMenuBuilder::StaticStruct(), &Out);
248+
});
249+
MenuBuilder.MenuBar->AddPullDownMenu(InMenuLabel, InToolTip, Delegate, InExtensionHook, InTutorialHighlightName);
250+
}
251+
}

Source/JavascriptUMG/JavascriptMenuLibrary.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ class JAVASCRIPTUMG_API UJavascriptMenuLibrary : public UBlueprintFunctionLibrar
186186
UFUNCTION(BlueprintCallable, Category = "Scripting | Javascript")
187187
static void PopCommandList(FJavascriptMenuBuilder& Builder);
188188

189+
UFUNCTION(BlueprintCallable, Category = "Scripting | Javascript")
190+
static void AddPullDownMenu(FJavascriptMenuBuilder& MenuBuilder, const FText& InMenuLabel, const FText& InToolTip, FJavascriptFunction InPullDownMenu, FName InExtensionHook, FName InTutorialHighlightName);
191+
189192
UFUNCTION(BlueprintCallable, Category = "Scripting | Javascript")
190193
static FJavascriptBindingContext NewBindingContext(const FName InContextName, const FText& InContextDesc, const FName InContextParent, const FName InStyleSetName);
191194

0 commit comments

Comments
 (0)