Skip to content

Instantly share code, notes, and snippets.

@devilstower
Created April 14, 2013 20:34
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save devilstower/5384102 to your computer and use it in GitHub Desktop.
Save devilstower/5384102 to your computer and use it in GitHub Desktop.
Cider 1.6
--# UIElement
UIElement = class()
CONTROLTYPE = 0
LABELTYPE = 1
BUTTONTYPE = 2
TEXTBOXTYPE = 3
SWITCHTYPE = 4
SLIDERTYPE = 5
DROPLISTTYPE = 6
MULTIBUTTONTYPE = 7
CHECKBOXTYPE = 8
NOTCHSLIDERTYPE = 9
ICONBUTTONTYPE = 10
DIALTYPE = 11
DOUGHNUTTYPE = 12
SELECTLISTTYPE = 13
TABBARTYPE = 14
function UIElement:init(type, text, left, bottom, right, top, tab)
self.type = type
self.element = nil
self.tab = tab
self.source = 1
if type == CONTROLTYPE then
self.element = Control(text, left, bottom, right, top)
self.name = "control"
elseif type == LABELTYPE then
self.element = Label(text, left, bottom, right, top)
self.name = "label"
elseif type == BUTTONTYPE then
self.element = TextButton(text, left, bottom, right, top)
self.name = "button"
elseif type == TEXTBOXTYPE then
self.element = TextBox(text, left, bottom, right, top)
self.name = "textBox"
elseif type == SWITCHTYPE then
self.element = Switch(text, left, bottom, right, top)
self.name = "switch"
elseif type == SLIDERTYPE then
self.element = Slider(text, left, bottom, right, top,
0, 100, 50)
self.name = "slider"
elseif type == DROPLISTTYPE then
self.element = DropList(text, left, bottom, right, top)
self.name = "dropList"
elseif type == MULTIBUTTONTYPE then
self.element = MultiButton(text, left, bottom, right, top)
self.name = "multiButton"
elseif type == CHECKBOXTYPE then
self.element = CheckBox(text, left, bottom, right, top)
self.name = "checkBox"
elseif type == NOTCHSLIDERTYPE then
self.element = NotchSlider(text, left, bottom, right, top)
self.name = "notchSlider"
elseif type == ICONBUTTONTYPE then
self.element = IconButton(text, left, bottom, right, top,
"Cargo Bot:Crate Goal Red")
self.name = "iconButton"
elseif type == DIALTYPE then
self.element = Dial(text, left, bottom, right, top, 0, 100, 35)
self.name = "dial"
elseif type == DOUGHNUTTYPE then
self.element = Doughnut(text, left, bottom, right, top,
0, 100, 35)
self.name = "doughnut"
elseif type == SELECTLISTTYPE then
self.element = SelectList(text, left, bottom, right, top, true)
self.name = "list"
elseif type == TABBARTYPE then
self.element = TabBar(text, left, bottom, right, top, true)
self.name = "tabbar"
end
end
function UIElement:draw()
self.element:draw()
end
function UIElement:printInit()
local s
s = " "..self.name.." = "..self.element:initString("test").."\n"
if self.element.fontSize ~= 16 then
s = s.." "..self.name..".fontSize = "..self.element.fontSize
.."\n"
end
if self.element.font ~= "HelveticaNeue-Bold" then
s = s.." "..self.name..".font = '"..self.element.font.."'\n"
end
return s
end
function UIElement:printDraw()
return " "..self.name..":draw()\n"
end
function UIElement:printTouched()
return " "..self.name..":touched(touch)\n"
end
function UIElement:touched(touch)
return self.element:ptIn(touch.x, touch.y)
end
--# Main
-- Cider
-- an interactive interface builder for Codea
-- version 1.6
-- 14 April 2013
-- Mark Sumner
-- devilstower@gmail.com
-- 1.6 added SelectList and TabBar, changes in most controls
-- revised control tray with tabs
-- 1.5 revised for Codea 1.5 code output
-- 1.35 adds visible grid, size display
-- 1.3 adds CheckBox, bug fixes, code refactoring
-- 1.2 adds CCActiveTextBox to help simplify and manage text boxes
displayMode(FULLSCREEN)
minSize = 30
function setup()
setInstructionLimit(0)
dragIndex = 0
activeTextBox = nil
controlCount = 1000
trayOpen = false
trayTab = Frame(WIDTH - 25, HEIGHT / 2 - 30,
WIDTH + 25, HEIGHT / 2 + 30)
trayWidth = 0
trayMaxWidth = 250
trayFrame = Frame(WIDTH - trayWidth, 0, trayMaxWidth, HEIGHT)
elements = {}
trayElement = {}
traySpeed = 50
tabbar = TabBar("Simple;Complex;Display",0,
HEIGHT-35,trayMaxWidth,HEIGHT)
trayElement[1] = UIElement(0, "Control Panel", 10, HEIGHT - 120,
200, HEIGHT - 50, 1)
trayElement[2] = UIElement(1, "Text Label", 40, HEIGHT - 500,
170, HEIGHT - 475, 1)
trayElement[3] = UIElement(2, "Button", 40, HEIGHT - 190,
170, HEIGHT - 150, 1)
trayElement[4] = UIElement(3, "Text Box", 10, HEIGHT - 590,
200, HEIGHT - 540, 1)
trayElement[5] = UIElement(4, "ON;OFF", 55, HEIGHT - 360,
155, HEIGHT - 330, 1)
trayElement[6] = UIElement(5, "Range", 10, HEIGHT - 110,
200, HEIGHT - 70, 2)
trayElement[7] = UIElement(6, "Drop List", 10, HEIGHT - 350,
140, HEIGHT - 320, 4)
trayElement[8] = UIElement(7, "Multi;Choice;Button", 10,
HEIGHT - 290, 220, HEIGHT - 250, 2)
trayElement[9] = UIElement(8, "Check Box", 40,
HEIGHT - 430, 170, HEIGHT - 390, 1)
trayElement[10] = UIElement(9, "A;B;C", 30,
HEIGHT - 210, 200, HEIGHT - 160, 2)
trayElement[11] = UIElement(10, "IconButton", 40,
HEIGHT - 290, 170, HEIGHT - 220, 1)
trayElement[12] = UIElement(11, "Dial", 20,
HEIGHT - 210, 150, HEIGHT - 70, 3)
trayElement[13] = UIElement(12, "Ring", 20,
HEIGHT - 380, 150, HEIGHT - 240, 3)
trayElement[14] = UIElement(13, "Item 1;Item 2;Item 3", 30,
HEIGHT - 460, 200, HEIGHT - 330, 2)
trayElement[15] = UIElement(14, "Tab 1;Tab 2;Tab 3", 10,
HEIGHT - 550, 240, HEIGHT - 500, 2)
swtGrid = Switch("ON;OFF", 55, 90, 150, 120)
lblGrid = Label("Grid", 10, 90, 35, 100)
btnCode = TextButton("Save Code", 10, 30, 150, 70)
lblMain = Label("Main", 10, 130, 35, 140)
swtMain = Switch("ON;OFF", 55, 130, 150, 160)
eSelected = 0
eType = 0
dragElement = nil
leftTopSize = Frame(0, 0, 0, 0)
rightTopSize = Frame(0, 0, 0, 0)
leftBottomSize = Frame(0, 0, 0, 0)
rightBottomSize = Frame(0, 0, 0, 0)
infoRect = Frame(-90, 0, -90, 0)
startRect = Frame(0, 0, 0, 0)
stretch = 0
dialog = Dialog("Properties", 200, HEIGHT - 750,
WIDTH - 200, HEIGHT - 30)
showProperties = false
showHandles = false
l = dialog.left + 100
r = dialog.right - 30
b = dialog.bottom + 40
t = dialog.top - 75
txtName = TextBox("", l, t-10, r, t + 20)
txtText = TextBox("", l, t - 70, r, t - 40)
font("HelveticaNeue-Bold")
drpFont = DropList("HelveticaNeue-Bold;ArialMT;"..
"Arial-BoldMT;Copperplate;"..
"Courier;TimesNewRomanPSMT", l, t - 130, r, t - 100)
drpFont.selected = 1
sldFontSize = Slider("", l, t - 200, r, t - 165,
8 , 48, 14)
ctlBackground = Control("", l, t - 250, r, t - 220)
ctlForeground = Control("", l, t - 310, r, t - 280)
ctlHighlight = Control("", l, t - 370, r, t - 340)
deleteBtn = TextButton("Delete", l - 80, b - 15, l + 60, b + 20)
deleteBtn.highlight = color(224, 94, 94, 255)
-- optional properties
mlbTextAlign = MultiButton("Left;Center;Right", l, t - 430,
r, t - 400)
swtMulti = Switch("ON;OFF", l, t-430, l+100, t-400)
drpSource = DropList("None;Gravity X;Gravity Y;Gravity Z;"..
"Acceleration X;Acceleration Y;Acceleration Z"
, l, t - 430, r, t - 400)
drpSource.selected = 1
clrChooser = nil
showBackgroundColor = false
showForegroundColor = false
showHighlightColor = false
dragElement = nil
offsetX = 0
offsetY = 0
stretch = 0
end
function drawTray()
pushMatrix()
pushStyle()
translate(WIDTH - trayWidth, 0)
for i, e in ipairs(trayElement) do
if e.tab == tabbar.selected then
e:draw()
--print(i,e.element.controlName)
fill(255, 255, 255, 255)
text(e.element.controlName, e.element:midX(),
e.element.bottom - 10)
end
end
lblGrid:draw()
swtGrid:draw()
lblMain:draw()
swtMain:draw()
btnCode:draw()
tabbar:draw()
popStyle()
popMatrix()
end
function drawProperties()
local i
pushStyle()
fontSize(14)
font("ArialMT")
dialog:draw()
strokeWidth(2)
stroke(30, 30, 30, 255)
for i = 1,10 do
line(dialog.left, dialog.top - i * 60 - 40,
dialog.right, dialog.top - i * 60 - 40)
end
deleteBtn:draw()
textMode(CORNER)
textAlign(LEFT)
fill(0, 0, 0, 255)
txtName:draw()
txtText:draw()
text("Name", dialog.left + 10, dialog.top - 70)
text("Text", dialog.left + 10, dialog.top - 130)
text("Font", dialog.left + 10, dialog.top - 190)
text("Font Size", dialog.left + 10, dialog.top - 250)
text("Background", dialog.left + 10, dialog.top - 310)
text("Foreground", dialog.left + 10, dialog.top - 370)
text("Highlight", dialog.left + 10, dialog.top - 430)
-- optional
if dragElement.type == TEXTBOXTYPE then
text("Text Align", dialog.left + 10, dialog.top - 490)
mlbTextAlign:draw()
elseif dragElement.type == ICONBUTTONTYPE then
text("Image", dialog.left + 10, dialog.top - 490)
text(dragElement.element.img, dialog.left + 100,
dialog.top - 490)
elseif dragElement.type == SELECTLISTTYPE then
text("Multiselect", dialog.left + 10, dialog.top - 490)
swtMulti:draw()
elseif dragElement.type == DIALTYPE then
text("Data source", dialog.left + 10, dialog.top - 490)
drpSource:draw()
end
sldFontSize:draw()
drpFont:draw()
ctlBackground:draw()
ctlForeground:draw()
ctlHighlight:draw()
popStyle()
end
function draw()
local i, x
-- This sets a dark background color
background(194, 194, 194, 255)
font("ArialMT")
fontSize(222)
stroke(146, 138, 138, 44)
strokeWidth(2)
if swtGrid.selected then
for x=0, WIDTH, 20 do
line(x, 0, x, HEIGHT)
end
for x=0, HEIGHT, 20 do
line(0, x, WIDTH, x)
end
end
fill(146, 140, 140, 29)
text("Cider", WIDTH / 2, HEIGHT / 2 + 200)
fontSize(72)
text("Interface Designer", WIDTH / 2, HEIGHT / 2 - 100)
fontSize(14)
for i, e in ipairs(elements) do
e:draw()
end
if trayOpen then
if trayWidth < trayMaxWidth then
trayWidth = trayWidth + traySpeed
trayTab:offset(-traySpeed , 0)
end
else
if trayWidth > 0 then
trayWidth = trayWidth - traySpeed
trayTab:offset(traySpeed , 0)
end
end
strokeWidth(2)
fill(107, 107, 107, 255)
ellipse(WIDTH - trayWidth, HEIGHT / 2, 40)
rect(WIDTH - trayWidth, 0, trayWidth, HEIGHT)
noStroke()
rect(WIDTH - trayWidth -5, HEIGHT / 2 - 18, 10, 36)
trayFrame.left = WIDTH - trayWidth
trayFrame.right = trayFrame.left + trayMaxWidth
strokeWidth(5)
stroke(127, 127, 127, 255)
line(WIDTH - trayWidth - 10, HEIGHT / 2,
WIDTH - trayWidth - 0, HEIGHT / 2 - 5)
line(WIDTH - trayWidth - 10, HEIGHT / 2,
WIDTH - trayWidth - 0, HEIGHT / 2 + 5)
strokeWidth(2)
line(WIDTH - trayWidth + 5, 200, WIDTH, 200)
if trayWidth > 0 then
drawTray()
end
if dragElement then
dragElement:draw()
end
if showHandles then
fontSize(14)
font("ArialMT")
strokeWidth(4)
stroke(78, 175, 203, 197)
noFill()
line(leftTopSize.left, leftTopSize.top,
leftTopSize.left + 15, leftTopSize.top)
line(leftTopSize.left, leftTopSize.top,
leftTopSize.left, leftTopSize.top - 15)
line(leftBottomSize.left, leftBottomSize.bottom,
leftBottomSize.left + 15, leftBottomSize.bottom)
line(leftBottomSize.left, leftBottomSize.bottom,
leftBottomSize.left, leftBottomSize.bottom + 15)
line(rightBottomSize.right - 15, rightBottomSize.bottom,
rightBottomSize.right, rightBottomSize.bottom)
line(rightBottomSize.right, rightBottomSize.bottom,
rightBottomSize.right, rightBottomSize.bottom + 15)
line(rightTopSize.right - 15, rightTopSize.top,
rightTopSize.right, rightTopSize.top)
line(rightTopSize.right, rightTopSize.top,
rightTopSize.right, rightTopSize.top - 15)
strokeWidth(1)
stroke(255, 255, 255, 255)
fill(93, 103, 230, 255)
ellipse(infoRect:midX(), infoRect:midY(), 25)
fill(255, 255, 255, 255)
text("i", infoRect:midX(), infoRect:midY())
text(dragElement.element:width(), infoRect:midX(),
rightBottomSize.bottom)
text(dragElement.element:height(), leftBottomSize:midX(),
dragElement.element:midY())
strokeWidth(2)
stroke(255, 255, 255, 255)
line(dragElement.element.left - 30, dragElement.element.top,
dragElement.element.left - 10, dragElement.element.top)
end
if showProperties then
drawProperties()
end
if showBackgroundColor or showForegroundColor
or showHighlightColor then
clrChooser:draw()
end
end
function resetHandles(x, y)
l = dragElement.element.left - minSize
b = dragElement.element.bottom - minSize
r = dragElement.element.right
t = dragElement.element.top
x = dragElement.element:midX()
leftTopSize.left = l
leftTopSize.right = l + minSize
leftTopSize.bottom = t
leftTopSize.top = t + minSize
rightTopSize.left = r
rightTopSize.right = r + minSize
rightTopSize.bottom = t
rightTopSize.top = t + minSize
rightBottomSize.left = r
rightBottomSize.right = r + minSize
rightBottomSize.bottom = b
rightBottomSize.top = b + minSize
leftBottomSize.left = l
leftBottomSize.right = l + minSize
leftBottomSize.bottom = b
leftBottomSize.top = b + minSize
infoRect.left = x - minSize / 2
infoRect.right = x + minSize / 2
infoRect.bottom = t + minSize
infoRect.top = t + minSize * 2
end
function printElements()
s = ""
if swtMain.selected then
s = s.."-- Generated by Cider\n"
s = s.."--\n"
s = s.."-- Add CiderControls as a dependency\n"
s = s.."--\n"
s = s.." \n"
s = s.."displayMode(FULLSCREEN)\n"
s = s.." \n"
s = s.."function setup()\n"
else
s = "-- ===================\n"
s = s.."-- Copy code into the setup function\n"
s = s.."-- ===================\n"
end
for i, e in ipairs(elements) do
s = s..e:printInit().."\n"
if e.type == SELECTLISTTYPE then
if e.element.multi then
s = s.." "..e.name..".multi = true\n"
else
s = s.." "..e.name..".multi = false\n"
end
end
end
if swtMain.selected then
s = s.."end\n"
s = s.."\n"
s = s.."function draw()\n"
s = s.." background(194, 194, 194, 255)\n"
else
s = s.." \n"
s = s.."-- ===================\n"
s = s.."-- Copy into the draw function\n"
s = s.."-- ===================\n"
end
for i, e in ipairs(elements) do
s = s..e:printDraw().."\n"
if e.type == DIALTYPE then
if e.source == 2 then
s = s.." "..e.name..".val = Gravity.x * 50 + 50\n"
elseif e.source == 3 then
s = s.." "..e.name..".val = Gravity.y * 50 + 50\n"
elseif e.source == 4 then
s = s.." "..e.name..".val = Gravity.z * 50 + 50\n"
elseif e.source == 5 then
s = s.." "..e.name..".val = UserAcceleration.x"..
" * 50 + 50\n"
elseif e.source == 6 then
s = s.." "..e.name..".val = UserAcceleration.y"..
" * 50 + 50\n"
elseif e.source == 7 then
s = s.." "..e.name..".val = UserAcceleration.z"..
" * 50 + 50\n"
end
end
end
if swtMain.selected then
s = s.."end\n"
s = s.."\n"
s = s.."function touched(touch)\n"
else
s = s.." \n"
s = s.."-- ===================\n"
s = s.."-- Copy into the touched function\n"
s = s.."-- ===================\n"
end
for i, e in ipairs(elements) do
s = s..e:printTouched().."\n"
end
if swtMain.selected then
s = s.."end\n"
s = s.."\n"
else
s = s.." \n"
s = s.."-- ===================\n"
s = s.."-- Copy into main, or modify your\n"
s = s.."-- existing keyboard function\n"
s = s.."-- ===================\n"
s = s.." \n"
end
s = s.."function keyboard(key)\n"
s = s.." if CCActiveTextBox then\n"
s = s.." CCActiveTextBox:acceptKey(key)\n"
s = s.." end\n"
s = s.."end\n"
s = s.." \n"
saveProjectTab("Output", s)
end
function closeDialog()
showProperties = false
if string.len(txtName.text) > 0 then
dragElement.name = txtName.text
end
dragElement.element.text = txtText.text
if dragElement.type == SWITCHTYPE or
dragElement.type == MULTIBUTTONTYPE or
dragElement.type == NOTCHSLIDERTYPE or
dragElement.type == SELECTLISTTYPE or
dragElement.type == DROPLISTTYPE then
dragElement.element.itemText = {}
dragElement.element:splitText()
end
dragElement.element.font = drpFont.itemText[drpFont.selected]
dragElement.element.fontSize = sldFontSize.val
dragElement.element.background = ctlBackground.background
dragElement.element.foreground = ctlForeground.background
dragElement.element.highlight = ctlHighlight.background
if isKeyboardShowing() then hideKeyboard() end
if dragElement.type == TEXTBOXTYPE then
if mlbTextAlign.selected == 1 then
dragElement.element.textAlign = LEFT
elseif mlbTextAlign.selected == 2 then
dragElement.element.textAlign = CENTER
elseif mlbTextAlign.selected == 3 then
dragElement.element.textAlign = RIGHT
end
end
sound(SOUND_HIT, 28774)
end
function touchedProperties(touch)
if touch.state == BEGAN and oldState ~= BEGAN then
if dialog:touched(touch) then
txtName:touched(touch)
txtText:touched(touch)
if drpFont:touched(touch) then return nil end
sldFontSize:touched(touch)
mlbTextAlign:touched(touch)
if dragElement.type == SELECTLISTTYPE then
swtMulti:touched(touch)
dragElement.element.multi = swtMulti.selected
elseif dragElement.type == DIALTYPE then
drpSource:touched(touch)
dragElement.source = drpSource.selected
end
if ctlBackground:touched(touch) then
clrChooser = ColorSelector(ctlBackground:midX(),
ctlBackground.bottom)
clrChooser:setColor(ctlBackground.background)
showBackgroundColor = true
end
if ctlForeground:touched(touch) then
clrChooser = ColorSelector(ctlForeground:midX(),
ctlForeground.bottom)
clrChooser:setColor(ctlForeground.background)
showForegroundColor = true
end
if ctlHighlight:touched(touch) then
clrChooser = ColorSelector(ctlHighlight:midX(),
ctlHighlight.bottom)
clrChooser:setColor(ctlHighlight.background)
showHighlightColor = true
end
deleteBtn:touched(touch)
else
closeDialog()
end
end
if touch.state == MOVING or touch.state == ENDED then
if dragElement.type == DIALTYPE then
drpSource:touched(touch)
dragElement.source = drpSource.selected
end
if dialog:touched(touch) then
drpFont:touched(touch)
sldFontSize:touched(touch)
end
if deleteBtn:touched(touch) then
dragElement = nil
table.remove(elements, dragIndex)
showProperties = false
showHandles = false
end
end
oldState = touch.state
end
function touchedHandles(touch)
if touch.state == BEGAN and oldState ~= BEGAN then
stretch = 0
if leftTopSize:touched(touch) then stretch = 1
elseif rightTopSize:touched(touch) then stretch = 2
elseif leftBottomSize:touched(touch) then stretch = 3
elseif rightBottomSize:touched(touch) then stretch = 4
elseif infoRect:touched(touch) then
stretch = 5
showProperties = true
txtName.text = dragElement.name
txtText.text = dragElement.element.text
sldFontSize.val = dragElement.element.fontSize
if dragElement.type == LABELTYPE then
mlbTextAlign.selected = dragElement.element.textAlign
end
ctlBackground.background = dragElement.element.background
ctlForeground.background = dragElement.element.foreground
ctlHighlight.background = dragElement.element.highlight
end
if stretch == 0 then
showHandles = false
end
elseif touch.state == MOVING then
if swtGrid.selected then
x = math.floor(touch.x / 20) * 20
y = math.floor(touch.y / 20) * 20
else
x = touch.x
y = touch.y
end
if stretch == 1 then
-- top left
if x > rightTopSize.left - minSize then
x = rightTopSize.left - minSize
end
if y < leftBottomSize.top + minSize then
y = leftBottomSize.top + minSize
end
dragElement.element.left = x
dragElement.element.top = y
elseif stretch == 2 then
-- top right
if x < leftTopSize.right + minSize then
x = leftTopSize.right + minSize
end
if y < leftBottomSize.top + minSize then
y = leftBottomSize.top + minSize
end
dragElement.element.right = x
dragElement.element.top = y
elseif stretch == 3 then
-- bottom left
if x > rightTopSize.left - minSize then
x = rightTopSize.left - minSize
end
if y > leftTopSize.bottom - minSize then
y = leftTopSize.bottom - minSize
end
dragElement.element.left = x
dragElement.element.bottom = y
elseif stretch == 4 then
-- bottom right
if x < leftTopSize.right + minSize then
x = leftTopSize.right + minSize
end
if y > leftTopSize.bottom - minSize then
y = leftTopSize.bottom - minSize
end
dragElement.element.right = x
dragElement.element.bottom = y
end
resetHandles()
elseif touch.state == ENDED and oldState == MOVING then
resetHandles()
end
end
function placeDragElement()
local e
if dragElement then
dragElement = nil
showHandles = false
end
end
function liftDragElement(e, l)
local ui
if l > 0 then
ui = UIElement(e.type, e.element.text, e.element.left + l,
e.element.bottom, e.element.right + l, e.element.top)
dragElement = ui
table.insert(elements, ui)
else
dragElement = e
end
showHandles = false
end
function touched(touch)
if showBackgroundColor then
showBackgroundColor = clrChooser:touched(touch)
ctlBackground.background = clrChooser:getColor()
return false
elseif showForegroundColor then
showForegroundColor = clrChooser:touched(touch)
ctlForeground.background = clrChooser:getColor()
return false
elseif showHighlightColor then
showHighlightColor = clrChooser:touched(touch)
ctlHighlight.background = clrChooser:getColor()
return false
elseif showProperties then
touchedProperties(touch)
oldState = touch.state
return false
elseif showHandles and dragElement then
touchedHandles(touch)
if showProperties then return false end
end
if trayOpen and trayFrame:touched(touch) then
if dragElement then placeDragElement() end
tt = Ttouch(touch)
tt:translate(trayFrame.left, 0)
swtGrid:touched(tt)
swtMain:touched(tt)
if btnCode:touched(tt) then
printElements()
end
if touch.state == BEGAN then
if tabbar:touched(tt) then
else
for i, e in ipairs(trayElement) do
if e.tab == tabbar.selected and
e:touched(tt) then
-- drag a new element into the table
liftDragElement(e, trayFrame.left)
dragElement.name =
dragElement.name..controlCount
controlCount = controlCount + 1
offsetX = 0
trayOpen = false
end
end
end
end
end
if touch.state == BEGAN and oldState ~= BEGAN then
if dragElement and not showHandles then
if dragElement:touched(touch) then
showHandles = true
resetHandles(e)
end
end
if trayTab:touched(touch) then
placeDragElement()
trayOpen = not trayOpen
else
-- pick up element
for i, e in ipairs(elements) do
if e:touched(touch) then
if dragElement then placeDragElement() end
liftDragElement(e, 0)
dragIndex = i
offsetX = e.element.left - touch.x
--table.remove(elements, i)
end
end
end
end
if touch.state == MOVING and dragElement
and showHandles == false then
w = dragElement.element:width()
h = dragElement.element:height()
if swtGrid.selected then
x = math.floor((touch.x + offsetX) / 20) * 20
y = math.floor(touch.y / 20) * 20
else
x = touch.x + offsetX
y = touch.y
end
dragElement.element.left = x
dragElement.element.right = x + w
dragElement.element.bottom = y
dragElement.element.top = y + h
elseif touch.state == ENDED and dragElement
and oldState == MOVING then
placeDragElement()
elseif touch.state == ENDED and dragElement
and oldState == BEGAN then
if dragElement:touched(touch) then
resetHandles(dragElement.element.left,
dragElement.element.right)
showHandles = true
else
showHandles = false
end
end
oldState = touch.state
end
function keyboard(key)
if showProperties then
if CCActiveTextBox then
CCActiveTextBox:acceptKey(key)
end
end
end
--# Output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment