Skip to content

Commit

Permalink
extender demo updated
Browse files Browse the repository at this point in the history
  • Loading branch information
nakosung committed Jul 23, 2016
1 parent e7d513a commit 6a8b065
Showing 1 changed file with 149 additions and 35 deletions.
184 changes: 149 additions & 35 deletions Examples/Content/Scripts/extension-extender.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,161 @@
/// <reference path="typings/ue.d.ts" />
"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"]
Expand All @@ -56,5 +167,8 @@ if (!global.$ext) {
}

module.exports = function () {
return function () {}
return function () {
let {$bye} = delegates()
$bye && $bye()
}
}

0 comments on commit 6a8b065

Please sign in to comment.