mirror of https://github.com/axmolengine/axmol.git
1052 lines
39 KiB
Lua
1052 lines
39 KiB
Lua
local LINE_SPACE = 40
|
|
local kItemTagBasic = 1000
|
|
|
|
local ExtensionTestEnum =
|
|
{
|
|
TEST_NOTIFICATIONCENTER = 0,
|
|
TEST_CCCONTROLBUTTON = 1,
|
|
TEST_COCOSBUILDER = 2,
|
|
TEST_HTTPCLIENT = 3,
|
|
--TRAGET_PLATFORM
|
|
TEST_EDITBOX = 4,
|
|
TEST_TABLEVIEW = 5,
|
|
TEST_MAX_COUNT = 6,
|
|
}
|
|
|
|
local testsName =
|
|
{
|
|
"NotificationCenterTest",
|
|
"CCControlButtonTest",
|
|
"CocosBuilderTest",
|
|
"HttpClientTest",
|
|
"EditBoxTest",
|
|
"TableViewTest",
|
|
}
|
|
|
|
--Create toMainLayr MenuItem
|
|
function CreateExtensionsBasicLayerMenu(pMenu)
|
|
if nil == pMenu then
|
|
return
|
|
end
|
|
local function toMainLayer()
|
|
local pScene = ExtensionsTestMain()
|
|
if pScene ~= nil then
|
|
CCDirector:sharedDirector():replaceScene(pScene)
|
|
end
|
|
end
|
|
--Create BackMneu
|
|
CCMenuItemFont:setFontName("Arial")
|
|
CCMenuItemFont:setFontSize(24)
|
|
local pMenuItemFont = CCMenuItemFont:create("Back")
|
|
pMenuItemFont:setPosition(ccp(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25))
|
|
pMenuItemFont:registerScriptTapHandler(toMainLayer)
|
|
pMenu:addChild(pMenuItemFont)
|
|
end
|
|
|
|
-------------------------------------
|
|
--Notification Center Test
|
|
-------------------------------------
|
|
local NotificationCenterParam =
|
|
{
|
|
kTagLight = 100,
|
|
kTagConnect = 200,
|
|
|
|
MSG_SWITCH_STATE = "SwitchState"
|
|
}
|
|
local function runNotificationCenterTest()
|
|
|
|
local pNewScene = CCScene:create()
|
|
local pNewLayer = CCLayer:create()
|
|
local function BaseInitSceneLayer(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
local s = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local function toggleSwitch(tag,menuItem)
|
|
local toggleItem = tolua.cast(menuItem,"CCMenuItemToggle")
|
|
local nIndex = toggleItem:getSelectedIndex()
|
|
local selectedItem = toggleItem:selectedItem()
|
|
if 0 == nIndex then
|
|
selectedItem = nil
|
|
end
|
|
CCNotificationCenter:sharedNotificationCenter():postNotification(NotificationCenterParam.MSG_SWITCH_STATE,selectedItem)
|
|
end
|
|
|
|
local switchlabel1 = CCLabelTTF:create("switch off", "Marker Felt", 26)
|
|
local switchlabel2 = CCLabelTTF:create("switch on", "Marker Felt", 26)
|
|
local switchitem1 = CCMenuItemLabel:create(switchlabel1)
|
|
local switchitem2 = CCMenuItemLabel:create(switchlabel2)
|
|
local switchitem = CCMenuItemToggle:create(switchitem1)
|
|
switchitem:addSubItem(switchitem2)
|
|
switchitem:registerScriptTapHandler(toggleSwitch)
|
|
--turn on
|
|
switchitem:setSelectedIndex(1)
|
|
local menu = CCMenu:create()
|
|
menu:addChild(switchitem)
|
|
menu:setPosition(ccp(s.width/2+100, s.height/2))
|
|
pLayer:addChild(menu)
|
|
|
|
local menuConnect = CCMenu:create()
|
|
menuConnect:setPosition(ccp(0,0))
|
|
pLayer:addChild(menuConnect)
|
|
local i = 1
|
|
local bSwitchOn = false
|
|
local bConnectArray =
|
|
{
|
|
false,
|
|
false,
|
|
false
|
|
}
|
|
|
|
local lightArray = {}
|
|
|
|
local function updateLightState()
|
|
for i = 1, 3 do
|
|
if bSwitchOn and bConnectArray[i] then
|
|
lightArray[i]:setOpacity(255)
|
|
else
|
|
lightArray[i]:setOpacity(50)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function switchStateChanged()
|
|
local nIndex = switchitem:getSelectedIndex()
|
|
|
|
if 0 == nIndex then
|
|
bSwitchOn = false
|
|
else
|
|
bSwitchOn = true
|
|
end
|
|
updateLightState()
|
|
end
|
|
|
|
local function setIsConnectToSwitch(pLight,bConnect,nIdx)
|
|
bConnectArray[nIdx] = bConnect
|
|
print("come in")
|
|
if bConnect then
|
|
CCNotificationCenter:sharedNotificationCenter():registerScriptObserver(pLight, switchStateChanged,NotificationCenterParam.MSG_SWITCH_STATE)
|
|
else
|
|
CCNotificationCenter:sharedNotificationCenter():unregisterScriptObserver(pLight,NotificationCenterParam.MSG_SWITCH_STATE)
|
|
end
|
|
updateLightState()
|
|
end
|
|
|
|
|
|
for i = 1, 3 do
|
|
lightArray[i] = CCSprite:create("Images/Pea.png")
|
|
lightArray[i]:setTag(NotificationCenterParam.kTagLight + i)
|
|
lightArray[i]:setPosition(ccp(100, s.height / 4 * i) )
|
|
pLayer:addChild(lightArray[i])
|
|
|
|
local connectlabel1 = CCLabelTTF:create("not connected", "Marker Felt", 26)
|
|
|
|
local connectlabel2 = CCLabelTTF:create("connected", "Marker Felt", 26)
|
|
local connectitem1 = CCMenuItemLabel:create(connectlabel1)
|
|
local connectitem2 = CCMenuItemLabel:create(connectlabel2)
|
|
local connectitem = CCMenuItemToggle:create(connectitem1)
|
|
connectitem:addSubItem(connectitem2)
|
|
|
|
connectitem:setTag(NotificationCenterParam.kTagConnect+i)
|
|
|
|
local function connectToSwitch(tag,menuItem)
|
|
local connectMenuitem = tolua.cast(menuItem,"CCMenuItemToggle")
|
|
local bConnected = true
|
|
if connectMenuitem:getSelectedIndex() == 0 then
|
|
bConnected = false
|
|
end
|
|
local nIdx = connectMenuitem:getTag()-NotificationCenterParam.kTagConnect
|
|
setIsConnectToSwitch(lightArray[nIdx],bConnected,nIdx)
|
|
end
|
|
|
|
connectitem:registerScriptTapHandler(connectToSwitch)
|
|
local nX,nY = lightArray[i]:getPosition()
|
|
connectitem:setPosition(ccp(nX,nY+50))
|
|
|
|
menuConnect:addChild(connectitem, 0,connectitem:getTag())
|
|
|
|
if i == 2 then
|
|
connectitem:setSelectedIndex(1)
|
|
end
|
|
bConnectArray[i] = false
|
|
if 1 == connectitem:getSelectedIndex() then
|
|
bConnectArray[i] = true
|
|
end
|
|
end
|
|
|
|
for i = 1, 3 do
|
|
setIsConnectToSwitch(lightArray[i],bConnectArray[i],i)
|
|
end
|
|
local toggleSelectIndex = switchitem:getSelectedIndex()
|
|
local toggleSelectedItem = switchitem:selectedItem()
|
|
if 0 == toggleSelectIndex then
|
|
toggleSelectedItem = nil
|
|
end
|
|
CCNotificationCenter:sharedNotificationCenter():postNotification(NotificationCenterParam.MSG_SWITCH_STATE, toggleSelectedItem)
|
|
|
|
--for testing removeAllObservers */
|
|
local function doNothing()
|
|
end
|
|
CCNotificationCenter:sharedNotificationCenter():registerScriptObserver(pNewLayer,doNothing, "random-observer1")
|
|
CCNotificationCenter:sharedNotificationCenter():registerScriptObserver(pNewLayer,doNothing, "random-observer2")
|
|
CCNotificationCenter:sharedNotificationCenter():registerScriptObserver(pNewLayer,doNothing, "random-observer3")
|
|
|
|
local function CreateToMainMenu(pMenu)
|
|
if nil == pMenu then
|
|
return
|
|
end
|
|
local function toMainLayer()
|
|
local numObserversRemoved = CCNotificationCenter:sharedNotificationCenter():removeAllObservers(pNewLayer)
|
|
if 3 ~= numObserversRemoved then
|
|
print("All observers were not removed!")
|
|
end
|
|
|
|
for i = 1 , 3 do
|
|
if bConnectArray[i] then
|
|
CCNotificationCenter:sharedNotificationCenter():unregisterScriptObserver(lightArray[i],NotificationCenterParam.MSG_SWITCH_STATE)
|
|
end
|
|
end
|
|
|
|
local pScene = ExtensionsTestMain()
|
|
if pScene ~= nil then
|
|
CCDirector:sharedDirector():replaceScene(pScene)
|
|
end
|
|
end
|
|
--Create BackMneu
|
|
CCMenuItemFont:setFontName("Arial")
|
|
CCMenuItemFont:setFontSize(24)
|
|
local pMenuItemFont = CCMenuItemFont:create("Back")
|
|
pMenuItemFont:setPosition(ccp(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25))
|
|
pMenuItemFont:registerScriptTapHandler(toMainLayer)
|
|
pMenu:addChild(pMenuItemFont)
|
|
end
|
|
--Add Menu
|
|
local pToMainMenu = CCMenu:create()
|
|
CreateToMainMenu(pToMainMenu)
|
|
pToMainMenu:setPosition(ccp(0, 0))
|
|
pLayer:addChild(pToMainMenu,10)
|
|
end
|
|
|
|
BaseInitSceneLayer(pNewLayer)
|
|
pNewScene:addChild(pNewLayer)
|
|
|
|
return pNewScene
|
|
end
|
|
-------------------------------------
|
|
-- Control Extensions Test
|
|
-------------------------------------
|
|
local ControlExtensionsTestEnum =
|
|
{
|
|
kCCControlSliderTest = 0,
|
|
kCCControlColourPickerTest = 1,
|
|
kCCControlSwitchTest = 2,
|
|
kCCControlButtonTest_HelloVariableSize = 3,
|
|
kCCControlButtonTest_Event = 4,
|
|
kCCControlButtonTest_Styling = 5,
|
|
kCCControlPotentiometerTest = 6,
|
|
kCCControlStepperTest = 7,
|
|
kCCControlTestMax = 8
|
|
}
|
|
|
|
local ControlExtensionsTestArray =
|
|
{
|
|
"CCControlSliderTest",
|
|
"ControlColourPickerTest",
|
|
"ControlSwitchTest",
|
|
"ControlButtonTest_HelloVariableSize",
|
|
"ControlButtonTest_Event",
|
|
"ControlButtonTest_Styling",
|
|
"ControlPotentiometerTest",
|
|
"CCControlStepperTest",
|
|
}
|
|
local function runCCControlTest()
|
|
local nMaxCases = ControlExtensionsTestEnum.kCCControlTestMax
|
|
--kCCControlSliderTest
|
|
local nCurCase = ControlExtensionsTestEnum.kCCControlSliderTest
|
|
local pSceneTitleLabel = nil
|
|
|
|
local function GetSceneTitleLabel()
|
|
return pSceneTitleLabel
|
|
end
|
|
|
|
local function SetSceneTitleLabel(pLabel)
|
|
pSceneTitleLabel = pLabel
|
|
end
|
|
|
|
local function GetControlExtensionsTitle()
|
|
return ControlExtensionsTestArray[nCurCase + 1]
|
|
end
|
|
|
|
local pNewScene = CCScene:create()
|
|
|
|
local function CreateBasicMenu(pMenu)
|
|
if nil == pMenu then
|
|
return
|
|
end
|
|
|
|
local function backCallback()
|
|
nCurCase = nCurCase - 1
|
|
if nCurCase < 0 then
|
|
nCurCase = nCurCase + nMaxCases
|
|
end
|
|
CurrentControlScene()
|
|
end
|
|
|
|
local function restartCallback()
|
|
CurrentControlScene()
|
|
end
|
|
|
|
local function nextCallback()
|
|
nCurCase = nCurCase + 1
|
|
--No check nMaxCases
|
|
nCurCase = nCurCase % nMaxCases
|
|
CurrentControlScene()
|
|
end
|
|
|
|
local size = CCDirector:sharedDirector():getWinSize()
|
|
local item1 = CCMenuItemImage:create(s_pPathB1, s_pPathB2)
|
|
item1:registerScriptTapHandler(backCallback)
|
|
pMenu:addChild(item1,kItemTagBasic)
|
|
local item2 = CCMenuItemImage:create(s_pPathR1, s_pPathR2)
|
|
item2:registerScriptTapHandler(restartCallback)
|
|
pMenu:addChild(item2,kItemTagBasic)
|
|
local item3 = CCMenuItemImage:create(s_pPathF1, s_pPathF2)
|
|
pMenu:addChild(item3,kItemTagBasic)
|
|
item3:registerScriptTapHandler(nextCallback)
|
|
|
|
local size = CCDirector:sharedDirector():getWinSize()
|
|
item1:setPosition(CCPointMake(size.width / 2 - item2:getContentSize().width * 2, item2:getContentSize().height / 2))
|
|
item2:setPosition(CCPointMake(size.width / 2, item2:getContentSize().height / 2))
|
|
item3:setPosition(CCPointMake(size.width / 2 + item2:getContentSize().width * 2, item2:getContentSize().height / 2))
|
|
|
|
end
|
|
|
|
local function BaseInitSceneLayer(pLayer,pStrTitle)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
--Add Menu
|
|
local pToMainMenu = CCMenu:create()
|
|
CreateExtensionsBasicLayerMenu(pToMainMenu)
|
|
pToMainMenu:setPosition(ccp(0, 0))
|
|
pLayer:addChild(pToMainMenu,10)
|
|
|
|
--Add the generated background
|
|
local pBackground = CCSprite:create("extensions/background.png")
|
|
pBackground:setPosition(VisibleRect:center())
|
|
pLayer:addChild(pBackground)
|
|
|
|
--Add the ribbon
|
|
local pRibbon = CCScale9Sprite:create("extensions/ribbon.png", CCRectMake(1, 1, 48, 55))
|
|
pRibbon:setContentSize(CCSizeMake(VisibleRect:getVisibleRect().size.width, 57))
|
|
pRibbon:setPosition(ccp(VisibleRect:center().x, VisibleRect:top().y - pRibbon:getContentSize().height / 2.0))
|
|
pLayer:addChild(pRibbon)
|
|
|
|
--Add the title
|
|
pSceneTitleLabel = CCLabelTTF:create("Title", "Arial", 12)
|
|
pSceneTitleLabel:setPosition(ccp (VisibleRect:center().x, VisibleRect:top().y - pSceneTitleLabel:getContentSize().height / 2 - 5))
|
|
pLayer:addChild(pSceneTitleLabel, 1)
|
|
pSceneTitleLabel:setString(pStrTitle)
|
|
|
|
local pOperateMenu = CCMenu:create()
|
|
CreateBasicMenu(pOperateMenu)
|
|
pOperateMenu:setPosition(ccp(0, 0))
|
|
pLayer:addChild(pOperateMenu,1)
|
|
end
|
|
|
|
local function InitSliderTest(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
--Add a label in which the slider value will be displayed
|
|
local pDisplayValueLabel = CCLabelTTF:create("Move the slider thumb!\nThe lower slider is restricted." ,"Marker Felt", 32)
|
|
pDisplayValueLabel:retain()
|
|
pDisplayValueLabel:setAnchorPoint(ccp(0.5, -1.0))
|
|
pDisplayValueLabel:setPosition(ccp(screenSize.width / 1.7, screenSize.height / 2.0))
|
|
pLayer:addChild(pDisplayValueLabel)
|
|
|
|
local function valueChanged(strEventName,pSender)
|
|
if nil == pSender or nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
local pControl = tolua.cast(pSender,"CCControlSlider")
|
|
local strFmt = nil
|
|
if pControl:getTag() == 1 then
|
|
strFmt = string.format("Upper slider value = %.02f",pControl:getValue())
|
|
elseif pControl:getTag() == 2 then
|
|
strFmt = string.format("Lower slider value = %.02f",pControl:getValue())
|
|
end
|
|
|
|
if nil ~= strFmt then
|
|
pDisplayValueLabel:setString(CCString:create(strFmt):getCString())
|
|
end
|
|
end
|
|
--Add the slider
|
|
local pSlider = CCControlSlider:create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png")
|
|
pSlider:setAnchorPoint(ccp(0.5, 1.0))
|
|
pSlider:setMinimumValue(0.0)
|
|
pSlider:setMaximumValue(5.0)
|
|
pSlider:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0 + 16))
|
|
pSlider:setTag(1)
|
|
|
|
--When the value of the slider will change, the given selector will be call
|
|
pSlider:addHandleOfControlEvent(valueChanged, CCControlEventValueChanged)
|
|
|
|
local pRestrictSlider = CCControlSlider:create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png")
|
|
pRestrictSlider:setAnchorPoint(ccp(0.5, 1.0))
|
|
pRestrictSlider:setMinimumValue(0.0)
|
|
pRestrictSlider:setMaximumValue(5.0)
|
|
pRestrictSlider:setMaximumAllowedValue(4.0)
|
|
pRestrictSlider:setMinimumAllowedValue(1.5)
|
|
pRestrictSlider:setValue(3.0)
|
|
pRestrictSlider:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0 - 24))
|
|
pRestrictSlider:setTag(2)
|
|
--same with restricted
|
|
pRestrictSlider:addHandleOfControlEvent(valueChanged, CCControlEventValueChanged)
|
|
pLayer:addChild(pSlider)
|
|
pLayer:addChild(pRestrictSlider)
|
|
end
|
|
|
|
--ColourPickerTest
|
|
local function InitColourPickerTest(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
local pColorLabel = nil
|
|
|
|
local pNode = CCNode:create()
|
|
pNode:setPosition(ccp (screenSize.width / 2, screenSize.height / 2))
|
|
pLayer:addChild(pNode, 1)
|
|
|
|
local dLayer_width = 0
|
|
|
|
--Create the colour picker,pStrEventName not use
|
|
local function colourValueChanged(pStrEventName,pSender)
|
|
if nil == pSender or nil == pColorLabel then
|
|
return
|
|
end
|
|
|
|
local pPicker = tolua.cast(pSender,"CCControlColourPicker")
|
|
local strFmt = string.format("#%02X%02X%02X",pPicker:getColor().r, pPicker:getColor().g, pPicker:getColor().b)
|
|
pColorLabel:setString(CCString:create(strFmt):getCString())
|
|
end
|
|
local pColourPicker = CCControlColourPicker:create()
|
|
pColourPicker:setColor(ccc3(37, 46, 252))
|
|
pColourPicker:setPosition(ccp (pColourPicker:getContentSize().width / 2, 0))
|
|
pColourPicker:addHandleOfControlEvent(colourValueChanged, CCControlEventValueChanged)
|
|
pNode:addChild(pColourPicker)
|
|
|
|
dLayer_width = dLayer_width + pColourPicker:getContentSize().width
|
|
|
|
--Add the black background for the text
|
|
local pBackground = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackground:setContentSize(CCSizeMake(150, 50))
|
|
pBackground:setPosition(ccp(dLayer_width + pBackground:getContentSize().width / 2.0, 0))
|
|
pNode:addChild(pBackground)
|
|
dLayer_width = dLayer_width + pBackground:getContentSize().width
|
|
|
|
pColorLabel = CCLabelTTF:create("#color", "Marker Felt", 30)
|
|
pColorLabel:retain()
|
|
pColorLabel:setPosition(pBackground:getPosition())
|
|
pNode:addChild(pColorLabel)
|
|
|
|
--Set the layer size
|
|
pNode:setContentSize(CCSizeMake(dLayer_width, 0))
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
|
|
--Update the color text
|
|
colourValueChanged("", pColourPicker)
|
|
end
|
|
|
|
--SwitchTest
|
|
local function InitSwitchTest(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local pNode = CCNode:create()
|
|
pNode:setPosition(ccp (screenSize.width / 2, screenSize.height / 2))
|
|
pLayer:addChild(pNode, 1)
|
|
|
|
local dLayer_width = 0
|
|
|
|
--Add the black background for the text
|
|
local pBackground = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackground:setContentSize(CCSizeMake(80, 50))
|
|
pBackground:setPosition(ccp(dLayer_width + pBackground:getContentSize().width / 2.0, 0))
|
|
pNode:addChild(pBackground)
|
|
dLayer_width = dLayer_width + pBackground:getContentSize().width
|
|
|
|
local pDisplayValueLabel = CCLabelTTF:create("#color" ,"Marker Felt" ,30)
|
|
pDisplayValueLabel:retain()
|
|
|
|
pDisplayValueLabel:setPosition(pBackground:getPosition())
|
|
pNode:addChild(pDisplayValueLabel)
|
|
|
|
--Create the switch
|
|
local function valueChanged(strEventName,pSender)
|
|
if nil == pDisplayValueLabel or nil == pSender then
|
|
return
|
|
end
|
|
|
|
local pControl = tolua.cast(pSender,"CCControlSwitch")
|
|
if pControl:isOn() then
|
|
pDisplayValueLabel:setString("On")
|
|
else
|
|
pDisplayValueLabel:setString("Off")
|
|
end
|
|
end
|
|
local pSwitchControl = CCControlSwitch:create(
|
|
CCSprite:create("extensions/switch-mask.png"),
|
|
CCSprite:create("extensions/switch-on.png"),
|
|
CCSprite:create("extensions/switch-off.png"),
|
|
CCSprite:create("extensions/switch-thumb.png"),
|
|
CCLabelTTF:create("On", "Arial-BoldMT", 16),
|
|
CCLabelTTF:create("Off", "Arial-BoldMT", 16)
|
|
)
|
|
pSwitchControl:setPosition(ccp (dLayer_width + 10 + pSwitchControl:getContentSize().width / 2, 0))
|
|
pNode:addChild(pSwitchControl)
|
|
pSwitchControl:addHandleOfControlEvent(valueChanged, CCControlEventValueChanged)
|
|
|
|
--Set the layer size
|
|
pNode:setContentSize(CCSizeMake(dLayer_width, 0))
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
|
|
--Update the value label
|
|
valueChanged("", pSwitchControl)
|
|
end
|
|
|
|
--Hvs:HelloVariableSize
|
|
local function HvsStandardButtonWithTitle(pStrTitle)
|
|
-- Creates and return a button with a default background and title color.
|
|
local pBackgroundButton = CCScale9Sprite:create("extensions/button.png")
|
|
local pBackgroundHighlightedButton = CCScale9Sprite:create("extensions/buttonHighlighted.png")
|
|
|
|
pTitleButton = CCLabelTTF:create(pStrTitle, "Marker Felt", 30)
|
|
|
|
pTitleButton:setColor(ccc3(159, 168, 176))
|
|
|
|
local pButton = CCControlButton:create(pTitleButton, pBackgroundButton)
|
|
pButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, CCControlStateHighlighted)
|
|
pButton:setTitleColorForState(ccc3(255,255,255), CCControlStateHighlighted)
|
|
|
|
return pButton
|
|
end
|
|
|
|
local function InitHelloVariableSize(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
local strArray = CCArray:create()
|
|
strArray:addObject(CCString:create("Hello"))
|
|
strArray:addObject(CCString:create("Variable"))
|
|
strArray:addObject(CCString:create("Size"))
|
|
strArray:addObject(CCString:create("!"))
|
|
|
|
local pNode = CCNode:create()
|
|
pLayer:addChild(pNode,1)
|
|
local dTotalWidth = 0
|
|
local dHeight = 0
|
|
local pObj = nil
|
|
|
|
local i = 0
|
|
local nLen = strArray:count()
|
|
for i = 0, nLen - 1 do
|
|
pObj = tolua.cast(strArray:objectAtIndex(i), "CCString")
|
|
--Creates a button with pLayer string as title
|
|
local pButton = HvsStandardButtonWithTitle(pObj:getCString())
|
|
pButton:setPosition(ccp (dTotalWidth + pButton:getContentSize().width / 2, pButton:getContentSize().height / 2))
|
|
pNode:addChild(pButton)
|
|
|
|
--Compute the size of the layer
|
|
dHeight = pButton:getContentSize().height
|
|
dTotalWidth = dTotalWidth + pButton:getContentSize().width
|
|
end
|
|
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
pNode:setContentSize(CCSizeMake(dTotalWidth, dHeight))
|
|
pNode:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
|
|
--Add the black background
|
|
local pBackground = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackground:setContentSize(CCSizeMake(dTotalWidth + 14, dHeight + 14))
|
|
pBackground:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
pLayer:addChild(pBackground)
|
|
end
|
|
|
|
local function StylingStandardButtonWithTitle(pStrTitle)
|
|
local pBackgroundButton = CCScale9Sprite:create("extensions/button.png")
|
|
pBackgroundButton:setPreferredSize(CCSizeMake(45, 45))
|
|
local pBackgroundHighlightedButton = CCScale9Sprite:create("extensions/buttonHighlighted.png")
|
|
pBackgroundHighlightedButton:setPreferredSize(CCSizeMake(45, 45))
|
|
|
|
local pTitleButton = CCLabelTTF:create(pStrTitle, "Marker Felt", 30)
|
|
|
|
pTitleButton:setColor(ccc3(159, 168, 176))
|
|
|
|
local pButton = CCControlButton:create(pTitleButton, pBackgroundButton)
|
|
pButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, CCControlStateHighlighted)
|
|
pButton:setTitleColorForState(ccc3(255,255,255), CCControlStateHighlighted)
|
|
|
|
return pButton
|
|
end
|
|
|
|
local function InitStyling(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local pNode = CCNode:create()
|
|
pLayer:addChild(pNode, 1)
|
|
|
|
local nSpace = 10
|
|
|
|
local nMax_w = 0
|
|
local nMax_h = 0
|
|
local i = 0
|
|
local j = 0
|
|
for i = 0, 2 do
|
|
for j = 0, 2 do
|
|
--Add the buttons
|
|
local strFmt = string.format("%d",math.random(0,32767) % 30)
|
|
local pButton = StylingStandardButtonWithTitle(CCString:create(strFmt):getCString())
|
|
pButton:setAdjustBackgroundImage(false)
|
|
pButton:setPosition(ccp (pButton:getContentSize().width / 2 + (pButton:getContentSize().width + nSpace) * i,
|
|
pButton:getContentSize().height / 2 + (pButton:getContentSize().height + nSpace) * j))
|
|
|
|
pNode:addChild(pButton)
|
|
|
|
nMax_w = math.max(pButton:getContentSize().width * (i + 1) + nSpace * i, nMax_w)
|
|
nMax_h = math.max(pButton:getContentSize().height * (j + 1) + nSpace * j, nMax_h)
|
|
end
|
|
end
|
|
|
|
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
pNode:setContentSize(CCSizeMake(nMax_w, nMax_h))
|
|
pNode:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
|
|
--Add the black background
|
|
local pBackgroundButton = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackgroundButton:setContentSize(CCSizeMake(nMax_w + 14, nMax_h + 14))
|
|
pBackgroundButton:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
pLayer:addChild(pBackgroundButton)
|
|
end
|
|
|
|
local function InitButtonTestEvent(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
|
|
--Add a label in which the button events will be displayed
|
|
local pDisplayValueLabel = nil
|
|
pDisplayValueLabel = CCLabelTTF:create("No Event", "Marker Felt", 32)
|
|
pDisplayValueLabel:setAnchorPoint(ccp(0.5, -1))
|
|
pDisplayValueLabel:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
pLayer:addChild(pDisplayValueLabel, 1)
|
|
|
|
--Add the button
|
|
local pBackgroundButton = CCScale9Sprite:create("extensions/button.png")
|
|
local pBackgroundHighlightedButton = CCScale9Sprite:create("extensions/buttonHighlighted.png")
|
|
|
|
local pTitleButtonLabel = CCLabelTTF:create("Touch Me!", "Marker Felt", 30)
|
|
pTitleButtonLabel:setColor(ccc3(159, 168, 176))
|
|
|
|
local pControlButton = CCControlButton:create(pTitleButtonLabel, pBackgroundButton)
|
|
local function touchDownAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Touch Down"):getCString())
|
|
end
|
|
|
|
local function touchDragInsideAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Drag Inside"):getCString())
|
|
end
|
|
|
|
local function touchDragOutsideAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Drag Outside"):getCString())
|
|
end
|
|
|
|
local function touchDragEnterAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Drag Enter"):getCString())
|
|
end
|
|
|
|
local function touchDragExitAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Drag Exit"):getCString())
|
|
end
|
|
|
|
local function touchUpInsideAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Touch Up Inside."):getCString())
|
|
end
|
|
|
|
local function touchUpOutsideAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Touch Up Outside."):getCString())
|
|
end
|
|
|
|
local function touchCancelAction()
|
|
if nil == pDisplayValueLabel then
|
|
return
|
|
end
|
|
pDisplayValueLabel:setString(CCString:create("Touch Cancel"):getCString())
|
|
end
|
|
|
|
|
|
|
|
pControlButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, CCControlStateHighlighted)
|
|
pControlButton:setTitleColorForState(ccc3(255, 255, 255), CCControlStateHighlighted)
|
|
pControlButton:setAnchorPoint(ccp(0.5, 1))
|
|
pControlButton:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
pControlButton:addHandleOfControlEvent(touchDownAction,CCControlEventTouchDown)
|
|
pControlButton:addHandleOfControlEvent(touchDragInsideAction,CCControlEventTouchDragInside)
|
|
pControlButton:addHandleOfControlEvent(touchDragOutsideAction,CCControlEventTouchDragOutside)
|
|
pControlButton:addHandleOfControlEvent(touchDragEnterAction,CCControlEventTouchDragEnter)
|
|
pControlButton:addHandleOfControlEvent(touchDragExitAction,CCControlEventTouchDragExit)
|
|
pControlButton:addHandleOfControlEvent(touchUpInsideAction,CCControlEventTouchUpInside)
|
|
pControlButton:addHandleOfControlEvent(touchUpOutsideAction,CCControlEventTouchUpOutside)
|
|
pControlButton:addHandleOfControlEvent(touchCancelAction,CCControlEventTouchCancel)
|
|
pLayer:addChild(pControlButton, 1)
|
|
|
|
--Add the black background
|
|
local pBackgroundButton = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackgroundButton:setContentSize(CCSizeMake(300, 170))
|
|
pBackgroundButton:setPosition(ccp(screenSize.width / 2.0, screenSize.height / 2.0))
|
|
pLayer:addChild(pBackgroundButton)
|
|
end
|
|
--PotentiometerTest
|
|
local function InitPotentiometerTest(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local pNode = CCNode:create()
|
|
pNode:setPosition(ccp (screenSize.width / 2, screenSize.height / 2))
|
|
pLayer:addChild(pNode, 1)
|
|
|
|
local dLayer_width = 0
|
|
|
|
-- Add the black background for the text
|
|
local pBackground = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
pBackground:setContentSize(CCSizeMake(80, 50))
|
|
pBackground:setPosition(ccp(dLayer_width + pBackground:getContentSize().width / 2.0, 0))
|
|
pNode:addChild(pBackground)
|
|
|
|
dLayer_width = dLayer_width + pBackground:getContentSize().width
|
|
|
|
local pDisplayValueLabel = CCLabelTTF:create("", "HelveticaNeue-Bold", 30)
|
|
pDisplayValueLabel:setPosition(pBackground:getPosition())
|
|
pNode:addChild(pDisplayValueLabel)
|
|
|
|
-- Add the slider
|
|
local function valueChanged(strEventName,pSender)
|
|
if nil == pSender then
|
|
return
|
|
end
|
|
|
|
local pControl = tolua.cast(pSender,"CCControlPotentiometer")
|
|
local strFmt = string.format("%0.2f",pControl:getValue())
|
|
pDisplayValueLabel:setString(CCString:create(strFmt):getCString())
|
|
end
|
|
local pPotentiometer = CCControlPotentiometer:create("extensions/potentiometerTrack.png","extensions/potentiometerProgress.png"
|
|
,"extensions/potentiometerButton.png")
|
|
pPotentiometer:setPosition(ccp (dLayer_width + 10 + pPotentiometer:getContentSize().width / 2, 0))
|
|
|
|
-- When the value of the slider will change, the given selector will be call
|
|
pPotentiometer:addHandleOfControlEvent(valueChanged, CCControlEventValueChanged)
|
|
|
|
pNode:addChild(pPotentiometer)
|
|
|
|
dLayer_width = dLayer_width + pPotentiometer:getContentSize().width
|
|
|
|
-- Set the layer size
|
|
pNode:setContentSize(CCSizeMake(dLayer_width, 0))
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
|
|
-- Update the value label
|
|
valueChanged("", pPotentiometer)
|
|
end
|
|
|
|
local function InitStepperTest(pLayer)
|
|
if nil == pLayer then
|
|
return
|
|
end
|
|
|
|
local screenSize = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local pNode = CCNode:create()
|
|
pNode:setPosition(ccp (screenSize.width / 2, screenSize.height / 2))
|
|
pLayer:addChild(pNode, 1)
|
|
|
|
local layer_width = 0
|
|
|
|
-- Add the black background for the text
|
|
local background = CCScale9Sprite:create("extensions/buttonBackground.png")
|
|
background:setContentSize(CCSizeMake(100, 50))
|
|
background:setPosition(ccp(layer_width + background:getContentSize().width / 2.0, 0))
|
|
pNode:addChild(background)
|
|
|
|
local pDisplayValueLabel = CCLabelTTF:create("0", "HelveticaNeue-Bold", 30)
|
|
|
|
pDisplayValueLabel:setPosition(background:getPosition())
|
|
pNode:addChild(pDisplayValueLabel)
|
|
|
|
layer_width = layer_width + background:getContentSize().width
|
|
|
|
local minusSprite = CCSprite:create("extensions/stepper-minus.png")
|
|
local plusSprite = CCSprite:create("extensions/stepper-plus.png")
|
|
|
|
local function valueChanged(strEventName,pSender)
|
|
if nil == pDisplayValueLabel or nil == pSender then
|
|
return
|
|
end
|
|
|
|
local pControl = tolua.cast(pSender,"CCControlStepper")
|
|
local strFmt = string.format("%0.02f",pControl:getValue() )
|
|
pDisplayValueLabel:setString(CCString:create(strFmt):getCString())
|
|
end
|
|
local stepper = CCControlStepper:create(minusSprite, plusSprite)
|
|
stepper:setPosition(ccp (layer_width + 10 + stepper:getContentSize().width / 2, 0))
|
|
stepper:addHandleOfControlEvent(valueChanged, CCControlEventValueChanged)
|
|
pNode:addChild(stepper)
|
|
|
|
layer_width = layer_width + stepper:getContentSize().width
|
|
|
|
-- Set the layer size
|
|
pNode:setContentSize(CCSizeMake(layer_width, 0))
|
|
pNode:setAnchorPoint(ccp (0.5, 0.5))
|
|
|
|
-- Update the value label
|
|
valueChanged("", stepper)
|
|
end
|
|
|
|
local function InitSpecialSceneLayer(pLayer)
|
|
if ControlExtensionsTestEnum.kCCControlSliderTest == nCurCase then
|
|
InitSliderTest(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlColourPickerTest == nCurCase then
|
|
InitColourPickerTest(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlSwitchTest == nCurCase then
|
|
InitSwitchTest(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlButtonTest_HelloVariableSize == nCurCase then
|
|
InitHelloVariableSize(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlButtonTest_Event == nCurCase then
|
|
InitButtonTestEvent(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlButtonTest_Styling == nCurCase then
|
|
InitStyling(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlPotentiometerTest == nCurCase then
|
|
InitPotentiometerTest(pLayer)
|
|
elseif ControlExtensionsTestEnum.kCCControlStepperTest == nCurCase then
|
|
InitStepperTest(pLayer)
|
|
end
|
|
end
|
|
|
|
function CurrentControlScene()
|
|
pNewScene = nil
|
|
pNewScene = CCScene:create()
|
|
local pNewLayer = CCLayer:create()
|
|
BaseInitSceneLayer(pNewLayer,GetControlExtensionsTitle())
|
|
InitSpecialSceneLayer(pNewLayer)
|
|
pNewScene:addChild(pNewLayer)
|
|
if nil ~= pNewScene then
|
|
CCDirector:sharedDirector():replaceScene(pNewScene)
|
|
end
|
|
|
|
end
|
|
|
|
local pNewLayer = CCLayer:create()
|
|
BaseInitSceneLayer(pNewLayer,GetControlExtensionsTitle())
|
|
InitSpecialSceneLayer(pNewLayer)
|
|
pNewScene:addChild(pNewLayer)
|
|
|
|
return pNewScene
|
|
end
|
|
|
|
local function runEditBoxTest()
|
|
local newScene = CCScene:create()
|
|
local newLayer = CCLayer:create()
|
|
local visibleOrigin = CCEGLView:sharedOpenGLView():getVisibleOrigin()
|
|
local visibleSize = CCEGLView:sharedOpenGLView():getVisibleSize()
|
|
|
|
local pBg = CCSprite:create("Images/HelloWorld.png")
|
|
pBg:setPosition(ccp(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/2))
|
|
newLayer:addChild(pBg)
|
|
|
|
local TTFShowEditReturn = CCLabelTTF:create("No edit control return!", "", 30)
|
|
TTFShowEditReturn:setPosition(ccp(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y + visibleSize.height - 50))
|
|
newLayer:addChild(TTFShowEditReturn)
|
|
|
|
-- Back Menu
|
|
local pToMainMenu = CCMenu:create()
|
|
CreateExtensionsBasicLayerMenu(pToMainMenu)
|
|
pToMainMenu:setPosition(ccp(0, 0))
|
|
newLayer:addChild(pToMainMenu,10)
|
|
|
|
local editBoxSize = CCSizeMake(visibleSize.width - 100, 60)
|
|
local EditName = nil
|
|
local EditPassword = nil
|
|
local EditEmail = nil
|
|
|
|
local function editBoxTextEventHandle(strEventName,pSender)
|
|
local edit = tolua.cast(pSender,"CCEditBox")
|
|
local strFmt
|
|
if strEventName == "began" then
|
|
strFmt = string.format("editBox %p DidBegin !", edit)
|
|
print(strFmt)
|
|
elseif strEventName == "ended" then
|
|
strFmt = string.format("editBox %p DidEnd !", edit)
|
|
print(strFmt)
|
|
elseif strEventName == "return" then
|
|
strFmt = string.format("editBox %p was returned !",edit)
|
|
if edit == EditName then
|
|
TTFShowEditReturn:setString("Name EditBox return !")
|
|
elseif edit == EditPassword then
|
|
TTFShowEditReturn:setString("Password EditBox return !")
|
|
elseif edit == EditEmail then
|
|
TTFShowEditReturn:setString("Email EditBox return !")
|
|
end
|
|
print(strFmt)
|
|
elseif strEventName == "changed" then
|
|
strFmt = string.format("editBox %p TextChanged, text: %s ", edit, edit:getText())
|
|
print(strFmt)
|
|
end
|
|
end
|
|
-- top
|
|
EditName = CCEditBox:create(editBoxSize, CCScale9Sprite:create("extensions/green_edit.png"))
|
|
EditName:setPosition(ccp(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height*3/4))
|
|
local targetPlatform = CCApplication:sharedApplication():getTargetPlatform()
|
|
if kTargetIphone == targetPlatform or kTargetIpad == targetPlatform then
|
|
EditName:setFontName("Paint Boy")
|
|
else
|
|
EditName:setFontName("fonts/Paint Boy.ttf")
|
|
end
|
|
EditName:setFontSize(25)
|
|
EditName:setFontColor(ccc3(255,0,0))
|
|
EditName:setPlaceHolder("Name:")
|
|
EditName:setPlaceholderFontColor(ccc3(255,255,255))
|
|
EditName:setMaxLength(8)
|
|
EditName:setReturnType(kKeyboardReturnTypeDone)
|
|
--Handler
|
|
EditName:registerScriptEditBoxHandler(editBoxTextEventHandle)
|
|
newLayer:addChild(EditName)
|
|
|
|
--middle
|
|
EditPassword = CCEditBox:create(editBoxSize, CCScale9Sprite:create("extensions/orange_edit.png"))
|
|
EditPassword:setPosition(ccp(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/2))
|
|
if kTargetIphone == targetPlatform or kTargetIpad == targetPlatform then
|
|
EditPassword:setFont("American Typewriter", 30)
|
|
else
|
|
EditPassword:setFont("fonts/American Typewriter.ttf", 30)
|
|
end
|
|
|
|
|
|
EditPassword:setFontColor(ccc3(0,255,0))
|
|
EditPassword:setPlaceHolder("Password:")
|
|
EditPassword:setMaxLength(6)
|
|
EditPassword:setInputFlag(kEditBoxInputFlagPassword)
|
|
EditPassword:setInputMode(kEditBoxInputModeSingleLine)
|
|
EditPassword:registerScriptEditBoxHandler(editBoxTextEventHandle)
|
|
newLayer:addChild(EditPassword)
|
|
|
|
--bottom
|
|
EditEmail = CCEditBox:create(CCSizeMake(editBoxSize.width, editBoxSize.height), CCScale9Sprite:create("extensions/yellow_edit.png"))
|
|
EditEmail:setPosition(ccp(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/4))
|
|
EditEmail:setAnchorPoint(ccp(0.5, 1.0))
|
|
EditEmail:setPlaceHolder("Email:")
|
|
EditEmail:setInputMode(kEditBoxInputModeEmailAddr)
|
|
EditEmail:registerScriptEditBoxHandler(editBoxTextEventHandle)
|
|
newLayer:addChild(EditEmail)
|
|
newLayer:setPosition(ccp(10, 20))
|
|
|
|
|
|
newScene:addChild(newLayer)
|
|
return newScene
|
|
end
|
|
|
|
local CreateExtensionsTestTable =
|
|
{
|
|
runNotificationCenterTest,
|
|
runCCControlTest,
|
|
runCocosBuilder,
|
|
runHttpClientTest,
|
|
runEditBoxTest,
|
|
runTableViewTest,
|
|
}
|
|
|
|
local s = CCDirector:sharedDirector():getWinSize()
|
|
|
|
local function ExtensionsMainLayer()
|
|
|
|
local function CreateExtensionsTestScene(nPerformanceNo)
|
|
local pNewscene = CreateExtensionsTestTable[nPerformanceNo]()
|
|
return pNewscene
|
|
end
|
|
|
|
local function menuCallback(tag, pMenuItem)
|
|
local scene = nil
|
|
local nIdx = pMenuItem:getZOrder() - kItemTagBasic
|
|
local ExtensionsTestScene = CreateExtensionsTestScene(nIdx)
|
|
if nil ~= ExtensionsTestScene then
|
|
CCDirector:sharedDirector():replaceScene(ExtensionsTestScene)
|
|
end
|
|
end
|
|
|
|
local layer = CCLayer:create()
|
|
local menu = CCMenu:create()
|
|
menu:setPosition(CCPointMake(0, 0))
|
|
CCMenuItemFont:setFontName("Arial")
|
|
CCMenuItemFont:setFontSize(24)
|
|
for i = 1, ExtensionTestEnum.TEST_MAX_COUNT do
|
|
local item = CCMenuItemFont:create(testsName[i])
|
|
item:registerScriptTapHandler(menuCallback)
|
|
item:setPosition(s.width / 2, s.height - i * LINE_SPACE)
|
|
menu:addChild(item, kItemTagBasic + i)
|
|
end
|
|
|
|
layer:addChild(menu)
|
|
|
|
return layer
|
|
end
|
|
|
|
-------------------------------------
|
|
-- Extensions Test
|
|
-------------------------------------
|
|
function ExtensionsTestMain()
|
|
local scene = CCScene:create()
|
|
|
|
scene:addChild(ExtensionsMainLayer())
|
|
scene:addChild(CreateBackMenuItem())
|
|
|
|
return scene
|
|
end
|