From 6a8b0659b6837119bdcd6aaf798c2ccec9b51945 Mon Sep 17 00:00:00 2001 From: Nako Sung Date: Sat, 23 Jul 2016 13:11:51 +0900 Subject: [PATCH] extender demo updated --- .../Content/Scripts/extension-extender.js | 184 ++++++++++++++---- 1 file changed, 149 insertions(+), 35 deletions(-) diff --git a/Examples/Content/Scripts/extension-extender.js b/Examples/Content/Scripts/extension-extender.js index 66488931..dfa0f04d 100644 --- a/Examples/Content/Scripts/extension-extender.js +++ b/Examples/Content/Scripts/extension-extender.js @@ -1,50 +1,161 @@ /// "use strict" -function main() { - let context = JavascriptMenuLibrary.NewBindingContext('MenuEx','Test menu','','EditorStyle'); - let commands = new JavascriptUICommands - commands.BindingContext = context - commands.Commands = [{ - Id: 'test', - FriendlyName: 'Unreal.js', - Description: 'world', - ActionType: 'Button' - }] - commands.Initialize() +// Live reloadable +function makeDelegates() { + function launchUrl(url) { + return JavascriptProcess.LaunchURL(url) + } + return { + OnExecuteAction: (what) => { + if (what == 'About') { + launchUrl("https://github.com/ncsoft/Unreal.js") + } else { + launchUrl("http://ncsoft.com") + } + }, + $bye: function () { + } + } +} - let list = JavascriptMenuLibrary.CreateUICommandList() - commands.Bind(list) +// builder helper (for better js-ish code) +function make(what) { + if (what instanceof JavascriptUICommandInfo) { + return function (builder) { + builder.AddToolBarButton(what) + } + } else if (what instanceof Array) { + let arr = what.map(make) + return function (builder) { + arr.forEach(fn => fn(builder)) + } + } else if (what.section) { + let fn = make(what.inner) + return function (builder) { + builder.BeginSection(what.section) + fn(builder) + builder.EndSection() + } + } else if (what.pullDown) { + let {tooltip, menu} = what + let fn = make(menu) + return function (builder) { + builder.AddPullDownMenu(what.pullDown, tooltip, fn) + } + } +} + +const key = "$extender-demo-delegates" +function delegates() { + return global[key] +} + +global[key] = makeDelegates() + +function main() { + let style = JavascriptUMGLibrary.CreateSlateStyle('ExtenderDemo') + + function initStyle() { + style.SetContentRoot(Root.GetDir('Game')) + style.AddImageBrush( + 'UnrealJS.About', + style.RootToContentDir('Plugins/UnrealJS/Resources/Icon128.png'), + { X: 40, Y: 40 }, + { R: 1, G: 1, B: 1, A: 1 }, + 'NoTile', + 'FullColor' + ) + style.Register() - commands.OnExecuteAction = (what) => { - console.log("Unreal.js !! :)") + return function () { + style.Unregister() + } } + let byeStyle = initStyle() + + let commands + + function initCommands() { + let context = JavascriptMenuLibrary.NewBindingContext('UnrealJS', 'Test menu', '', 'ExtenderDemo'); + commands = new JavascriptUICommands + commands.BindingContext = context + commands.Commands = [ + { + Id: 'About', + FriendlyName: 'Unreal.js', + Description: 'Learn about unreal.js', + ActionType: 'Button' + }, + { + Id: 'NCsoft', + FriendlyName: 'Visit NCsoft', + Description: 'Learn about NCsoft', + ActionType: 'Button' + }, + ] + + commands.OnExecuteAction = (what) => { + delegates().OnExecuteAction(what) + } + + commands.Initialize() + + return function () { + commands.Uninitialize() + context.Destroy() + } + } + + let byeCommands = initCommands() + + let list = JavascriptMenuLibrary.CreateUICommandList() + commands.Bind(list) + let toolbarExtender = new JavascriptExtender - toolbarExtender.AddToolBarExtension('Content','After',list,builder => { - console.log('toolbar!!') - builder.AddToolBarButton(commands.CommandInfos[0]) - }) + toolbarExtender.AddToolBarExtension('Content', 'After', list, make(commands.CommandInfos[0])) + let menuExtender = new JavascriptExtender - menuExtender.AddMenubarExtension('Help','After',list,builder => { - console.log('menubar!') - builder.AddPullDownMenu("About Unreal.js","Example Menu Tooltip",builder => { - builder.AddToolBarButton(commands.CommandInfos[0]) - console.log('menu!') - }) - }) - let toolbarManager = JavascriptEditorLibrary.GetToolBarExtensibilityManager('LevelEditor') - let menuManager = JavascriptEditorLibrary.GetMenuExtensibilityManager('LevelEditor') - toolbarManager.AddExtender(toolbarExtender) - menuManager.AddExtender(menuExtender) + menuExtender.AddMenubarExtension('Help', 'After', list, make({ + pullDown: 'Unreal.js', + tooltip: 'Unreal.js', + menu: [ + { + section: 'Unreal.js', + inner: commands.CommandInfos[0] + }, + { + section: 'NCsoft', + inner: commands.CommandInfos[1] + } + ] + })) + + // register extenders + function registerExtenders() { + let toolbarManager = JavascriptEditorLibrary.GetToolBarExtensibilityManager('LevelEditor') + let menuManager = JavascriptEditorLibrary.GetMenuExtensibilityManager('LevelEditor') + toolbarManager.AddExtender(toolbarExtender) + menuManager.AddExtender(menuExtender) + + return function () { + toolbarManager.RemoveExtender(toolbarExtender) + menuManager.RemoveExtender(menuExtender) + } + } + + let byeExtenders = registerExtenders() + + // clean up code return function () { - toolbarManager.RemoveExtender(toolbarExtender) - menuManager.RemoveExtender(menuExtender) - commands.Uninitialize() - context.Destroy() + byeExtenders() + byeCommands() + byeStyle() } } +// For graceful shutdown if (!global.$ext) { global.$ext = true let old = global["$exit"] @@ -56,5 +167,8 @@ if (!global.$ext) { } module.exports = function () { - return function () {} + return function () { + let {$bye} = delegates() + $bye && $bye() + } } \ No newline at end of file