----------------------------- -- Levak ©2011 -------------- -- http://levak.free.fr/ ---- -- levak92@gmail.com -------- ----------------------------- ------ Properties management Properties = class(Screen()) function Properties:init(items) self.items = items self.selectedIndex = 0 self.selectedIndex = self:escapeNullElement(1) end function Properties:paint(gc) local obj = objList[selectedObjList[#selectedObjList]] gc:setColorRGB(0, 0, 0) gc:setFont("sansserif", "b", flarge) local x = gc:drawString("Object : ", 0, 0, "top") if not obj then gc:drawString("none", x, 0, "top") else gc:drawString(obj.name, x, 0, "top") for i, v in ipairs(self.items) do if type(v) == "table" then v.active = self.selectedIndex == i v:paint(gc, 10, i * (normal + 5), platform.window:width() - 15, obj) elseif type(v) == "string" then gc:setFont("sansserif", "r", fxsmall) gc:drawString(v, 5, i * (normal + 5), "top") end end end end function Properties:timer() platform.window:invalidate() end function Properties:charIn(ch) self.items[self.selectedIndex]:charIn(ch) platform.window:invalidate() end function Properties:mouseDown(x, y) end function Properties:arrowKey(key) if key == "down" then if self.typing then else self:tabKey() end elseif key == "up" then if self.typing then else self:backtabKey() end end if key == "right" then elseif key == "left" then end self.items[self.selectedIndex]:arrowKey(key) platform.window:invalidate() end function Properties:escapeNullElement(n) local i = (self.selectedIndex + n - 1) % #self.items + 1 -- Is the next item invalid and can we iter anyways ? if type(self.items[i]) == "table" then return i else self.selectedIndex = i return self:escapeNullElement(n) end end function Properties:tabKey() if not self.items[self.selectedIndex].typing then self.selectedIndex = self:escapeNullElement(1) end platform.window:invalidate() end function Properties:backtabKey() if not self.items[self.selectedIndex].typing then self.selectedIndex = self:escapeNullElement(-1) end platform.window:invalidate() end function Properties:clearKey() self.items[self.selectedIndex]:clearKey() platform.window:invalidate() end function Properties:backspaceKey() self.items[self.selectedIndex]:backspaceKey() platform.window:invalidate() end function Properties:enterKey() self.items[self.selectedIndex]:enterKey(objList[selectedObjList[#selectedObjList]]) platform.window:invalidate() end function Properties:escapeKey() self.items[self.selectedIndex]:escapeKey() platform.window:invalidate() end function Properties:help() end PropertiesScreen = Properties({ "Position", TextInput("X : ", function(target) return tostring(target.position[1]) end, function(target, value) target.position[1] = tonumber(value) or target.position[1] var.store(target.name..".position", target.position) end), TextInput("Y : ", function(target) return tostring(target.position[2]) end, function(target, value) target.position[2] = tonumber(value) or target.position[2] var.store(target.name..".position", target.position) end), TextInput("Z : ", function(target) return tostring(target.position[3]) end, function(target, value) target.position[3] = tonumber(value) or target.position[3] var.store(target.name..".position", target.position) end), "", "Rotation", TextInput("X : ", function(target) return tostring(target.rotation[1]) end, function(target, value) target.rotation[1] = tonumber(value) or target.rotation[1] var.store(target.name..".rotation", target.rotation) end), TextInput("Y : ", function(target) return tostring(target.rotation[2]) end, function(target, value) target.rotation[2] = tonumber(value) or target.rotation[2] var.store(target.name..".rotation", target.rotation) end), TextInput("Z : ", function(target) return tostring(target.rotation[3]) end, function(target, value) target.rotation[3] = tonumber(value) or target.rotation[3] var.store(target.name..".rotation", target.rotation) end), "", "Scale", TextInput("X : ", function(target) return tostring(target.scale[1]) end, function(target, value) target.scale[1] = tonumber(value) or target.scale[1] var.store(target.name..".scale", target.scale) end), TextInput("Y : ", function(target) return tostring(target.scale[2]) end, function(target, value) target.scale[2] = tonumber(value) or target.scale[2] var.store(target.name..".scale", target.scale) end), TextInput("Z : ", function(target) return tostring(target.scale[3]) end, function(target, value) target.scale[3] = tonumber(value) or target.scale[3] var.store(target.name..".scale", target.scale) end), })