223 lines
4.5 KiB
Lua

require("luacom")
function make_control()
local obj = {}
local cd_canvas = nil
local cd_dbuffer_canvas = nil
local x,y = 0,0
local function draw()
cd.Activate(cd_dbuffer_canvas)
cd.Background(cd.BLACK)
cd.Clear()
cd.Foreground(cd.EncodeColor(255,255,0))
cd.Box(x,x+120,y,y+120)
cd.Flush()
end
local incx = 1
local incy = 1
local function idle()
if not cd_canvas then return end
x = x + incx
y = y + incy
local w, h = cd.GetCanvasSize()
if ((x + 120) > w) or (x < 0) then
x = x - incx
incx = incx * -1
x = x + incx
end
if ((y + 120) > h) or (y < 0) then
y = y - incy
incy = incy * -1
y = y + incy
end
draw()
end
local timer1 = iup.timer{time=10}
local canvas = iup.canvas{
rastersize = "512x512",
expand = "YES",
action = function(self)
if cd_canvas == nil then
cd_canvas = cd.CreateCanvas(cd.IUP, self)
if cd_canvas == nil then
print("Error creating cdCanvas(IUP)!!!")
exit(-1)
end
cd_dbuffer_canvas = cd.CreateCanvas(cd.DBUFFER, cd_canvas)
if cd_dbuffer_canvas == nil then
print("Error creating cdCanvas(DBUFFER)!!!")
exit(-1)
end
-- IupSetIdle(idle)
end
draw()
local w,h = cd.GetCanvasSize()
local color = cd.EncodeColor(1,2,3)
end,
}
function timer1:action_cb()
idle()
return iup.DEFAULT
end
local dialog = iup.dialog{
iup.vbox{
canvas,
}
}
function canvas:keypress_cb(c, press)
draw()
if press == 1 then
if c == iup.K_UP then
local w,h = cd.GetCanvasSize()
y = y + 10
if y + 120 > h then y = 380 end
draw()
elseif c == iup.K_DOWN then
y = y - 10
if y < 0 then y = 0 end
draw()
elseif c == iup.K_LEFT then
x = x - 10
if x < 0 then x = 0 end
draw()
elseif c == iup.K_RIGHT then
local w,h = cd.GetCanvasSize()
x = x + 10
if x + 120 > w then x = 380 end
draw()
end
end
end
-- Methods required for all Lua controls
function obj:InitialSize()
return 500,600
end
function obj:CreateWindow(hwndParent, x, y, cx, cy)
iup.SetAttribute(dialog, "NATIVEPARENT", hwndParent)
iup.SetAttribute(dialog, "CONTROL", "YES")
iup.SetAttribute(dialog, "RASTERSIZE", cx .. "x" .. cy)
timer1.run = "YES"
dialog:map()
return iup.GetAttributeData(dialog, "WID")
end
function obj:SetExtent(cx, cy)
return true
end
function obj:GetClass()
return "{687362C8-00D6-4eff-9207-DDB22EE23A6D}"
end
function obj:DestroyWindow()
timer1.run = "NO"
cd.KillCanvas(cd_dbuffer_canvas)
cd.KillCanvas(cd_canvas)
dialog:destroy()
end
-- ITestLuaControl implementation
luacom.TableVariants = true
function obj:Sum(i1, i2)
print("Calling Sum...",i1,i2.Type)
return i1 + i2.Value
end
function obj:I2A(i1)
print("Calling I2A...",i1)
return tostring(i1)
end
function obj:IntDivide(i1, i2)
print("Calling IntDivide...",i1,i2)
div = {}
div.Type = "decimal"
div.Value = i1/i2
return div,math.mod(i1, i2)
end
return obj
end -- make_control()
local COM = {}
local COMAppObject, events, e, cookie
function COM:StartAutomation()
print("Starting server...")
-- creates the object using its default interface
COMAppObject, events, e = luacom.NewControl(make_control(), "testlua.Teste")
-- This error will be caught by detectAutomation
if COMAppObject == nil then
error("NewObject failed: "..e)
end
-- Exposes the object
cookie = luacom.ExposeObject(COMAppObject)
if cookie == nil then
error("ExposeObject failed!")
end
end
function COM:Register()
-- fills table with registration information
local reginfo = {}
reginfo.VersionIndependentProgID = "testcontrol.Teste"
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "testcontrol.tlb"
reginfo.CoClass = "Teste"
reginfo.ComponentName = "Test Control"
reginfo.Arguments = "/Automation"
reginfo.ScriptFile = "control.lua"
reginfo.Control = true
-- stores component information in the registry
local res = luacom.RegisterObject(reginfo)
if res == nil then
error("RegisterObject failed!")
end
end
function COM:UnRegister()
-- fills table with registration information
local reginfo = {}
reginfo.VersionIndependentProgID = "testcontrol.Teste"
reginfo.ProgID = reginfo.VersionIndependentProgID..".1"
reginfo.TypeLib = "testcontrol.tlb"
reginfo.CoClass = "Teste"
-- deletes component information from the registry
local res = luacom.UnRegisterObject(reginfo)
if res == nil then
error("UnRegisterObject failed!")
end
end
return luacom.DetectAutomation(COM)