summaryrefslogtreecommitdiff
path: root/etc/todo/example.lua
diff options
context:
space:
mode:
Diffstat (limited to 'etc/todo/example.lua')
-rw-r--r--etc/todo/example.lua8289
1 files changed, 0 insertions, 8289 deletions
diff --git a/etc/todo/example.lua b/etc/todo/example.lua
deleted file mode 100644
index 9d9a404..0000000
--- a/etc/todo/example.lua
+++ /dev/null
@@ -1,8289 +0,0 @@
-
--------------------------------------------------------------------------------
--- Creates a new function, with the name suffixed by "New". This new function
--- creates a new image, based on a source image, and calls the previous function
--- with this new image.
-
-local function OneSourceOneDest (funcname, width, height, color_space, data_type)
- local func = im[funcname]
- assert(func) -- see if function is really defined
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image, ...)
- -- create destination image
- local dst_image = im.ImageCreateBased(src_image, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- func(src_image, dst_image, unpack(arg))
- return dst_image
- end
-end
-
--------------------------------------------------------------------------------
--- This function is similar to OneSourceOneDest, but it receives two source
--- images.
-
-local function TwoSourcesOneDest (funcname, width, height, color_space, data_type)
- local func = im[funcname]
-
- -- see if function is really defined
- assert(func, string.format("undefined function `%s'", funcname))
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image1, src_image2, ...)
- -- create destination image
- local dst_image = im.ImageCreateBased(src_image1, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- func(src_image1, src_image2, dst_image, unpack(arg))
- return dst_image
- end
-end
-
--------------------------------------------------------------------------------
-
-TwoSourcesOneDest("ProcessCrossCorrelation")
-OneSourceOneDest("ProcessAutoCorrelation", nil, nil, nil, im.CFLOAT)
-OneSourceOneDest("ProcessFFT")
-OneSourceOneDest("ProcessIFFT")
-
--------------------------------------------------------------------------------
--- Creates a new function, with the name suffixed by "New". This new function
--- creates a new image, based on a source image, and calls the previous function
--- with this new image.
--- We assume here that the functions returns only one parameter or none.
-
-local function OneSourceOneDest (funcname, width, height, color_space, data_type)
- local func = im[funcname]
- assert(func) -- see if function is really defined
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image, ...)
- -- create destination image
- local dst_image = im.ImageCreateBased(src_image, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- local ret = func(src_image, dst_image, unpack(arg))
- if (ret) then
- return ret, dst_image
- else
- return dst_image
- end
- end
-end
-
--------------------------------------------------------------------------------
--- This function is similar to OneSourceOneDest, but it receives two source
--- images.
-
-local function TwoSourcesOneDest (funcname, width, height, color_space, data_type)
- local func = im[funcname]
-
- -- see if function is really defined
- assert(func, string.format("undefined function `%s'", funcname))
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image1, src_image2, ...)
- -- create destination image
- local dst_image = im.ImageCreateBased(src_image1, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- local ret = func(src_image1, src_image2, dst_image, unpack(arg))
- if (ret) then
- return ret, dst_image
- else
- return dst_image
- end
- end
-end
-
--------------------------------------------------------------------------------
--- This function is similar to OneSourceOneDest, but it receives three source
--- images.
-
-local function ThreeSourcesOneDest (funcname, width, height, color_space, data_type)
- local func = im[funcname]
- assert(func) -- see if function is really defined
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image1, src_image2, src_image3, ...)
- -- create destination image
- local dst_image = im.ImageCreateBased(src_image1, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- local ret = func(src_image1, src_image2, src_image3, dst_image, unpack(arg))
- if (ret) then
- return ret, dst_image
- else
- return dst_image
- end
- end
-end
-
--------------------------------------------------------------------------------
--- This function is similar to OneSourceOneDest, but it creates two destiny
--- images.
-
-local function OneSourceTwoDests (funcname, width, height, color_space, data_type)
- local func = im[funcname]
- assert(func) -- see if function is really defined
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image, ...)
- -- create destination image
- local dst_image1 = im.ImageCreateBased(src_image, width, height, color_space, data_type)
- local dst_image2 = im.ImageCreateBased(src_image, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- local ret = func(src_image, dst_image1, dst_image2, unpack(arg))
- if (ret) then
- return ret, dst_image1, dst_image2
- else
- return dst_image1, dst_image2
- end
- end
-end
-
--------------------------------------------------------------------------------
--- This function is similar to OneSourceOneDest, but it creates three destiny
--- images.
-
-local function OneSourceThreeDests (funcname, width, height, color_space, data_type)
- local func = im[funcname]
- assert(func) -- see if function is really defined
-
- -- define function with "New" suffix
- im[funcname.."New"] = function (src_image, ...)
- -- create destination image
- local dst_image1 = im.ImageCreateBased(src_image, width, height, color_space, data_type)
- local dst_image2 = im.ImageCreateBased(src_image, width, height, color_space, data_type)
- local dst_image3 = im.ImageCreateBased(src_image, width, height, color_space, data_type)
-
- -- call previous method, repassing all parameters
- local ret = func(src_image, dst_image1, dst_image2, dst_image3, unpack(arg))
- if (ret) then
- return ret, dst_image1, dst_image2, dst_image3
- else
- return dst_image1, dst_image2, dst_image3
- end
- end
-end
-
--------------------------------------------------------------------------------
-
-local function hough_height(image)
- local function sqr(x) return x*x end
- local rmax = math.sqrt(sqr(image:Width()) + sqr(image:Height())) / 2
- return 2*rmax+1
-end
-
-OneSourceOneDest("AnalyzeFindRegions", nil, nil, nil, im.USHORT)
-OneSourceOneDest("ProcessPerimeterLine")
-OneSourceOneDest("ProcessPrune")
-OneSourceOneDest("ProcessFillHoles")
-OneSourceOneDest("ProcessHoughLines", 180, hough_height, im.GRAY, im.INT)
-OneSourceOneDest("ProcessHoughLinesDraw")
-OneSourceOneDest("ProcessDistanceTransform", nil, nil, nil, im.FLOAT)
-OneSourceOneDest("ProcessRegionalMaximum", nil, nil, im.BINARY, nil)
-
-function im.ProcessReduceNew (src_image, width, height)
- local dst_image = im.ImageCreateBased(src_image, width, height)
- return im.ProcessReduce(src_image, dst_image), dst_image
-end
-
-function im.ProcessResizeNew (src_image, width, height)
- local dst_image = im.ImageCreateBased(src_image, width, height)
- return im.ProcessResize(src_image, dst_image), dst_image
-end
-
-OneSourceOneDest("ProcessReduceBy4", function (image) return image:Width() / 2 end,
- function (image) return image:Height() / 2 end)
-
-function im.ProcessCropNew (src_image, xmin, xmax, ymin, ymax)
- local width = xmax - xmin + 1
- local height = xmax - ymin + 1
- local dst_image = im.ImageCreateBased(src_image, width, height)
- im.ProcessCrop(src_image, dst_image, xmin, ymin)
- return dst_image
-end
-
-TwoSourcesOneDest("ProcessInsert")
-
-function im.ProcessAddMarginsNew (src_image, xmin, xmax, ymin, ymax)
- local width = xmax - xmin + 1
- local height = xmax - ymin + 1
- local dst_image = im.ImageCreateBased(src_image, width, height)
- im.ProcessAddMargins(src_image, dst_image, xmin, ymin)
- return dst_image
-end
-
-function im.ProcessRotateNew (src_image, cos0, sin0, order)
- local width, height = im.ProcessCalcRotateSize(src_image:Width(), src_image:Height(), cos0, sin0)
- local dst_image = im.ImageCreateBased(src_image, width, height)
- return im.ProcessRotate(src_image, dst_image, cos0, sin0, order), dst_image
-end
-
-OneSourceOneDest("ProcessRotateRef")
-OneSourceOneDest("ProcessRotate90", function (image) return image:Height() end, function (image) return image:Width() end)
-OneSourceOneDest("ProcessRotate180")
-OneSourceOneDest("ProcessMirror")
-OneSourceOneDest("ProcessFlip")
-OneSourceOneDest("ProcessRadial")
-OneSourceOneDest("ProcessGrayMorphConvolve")
-OneSourceOneDest("ProcessGrayMorphErode")
-OneSourceOneDest("ProcessGrayMorphDilate")
-OneSourceOneDest("ProcessGrayMorphOpen")
-OneSourceOneDest("ProcessGrayMorphClose")
-OneSourceOneDest("ProcessGrayMorphTopHat")
-OneSourceOneDest("ProcessGrayMorphWell")
-OneSourceOneDest("ProcessGrayMorphGradient")
-OneSourceOneDest("ProcessBinMorphConvolve")
-OneSourceOneDest("ProcessBinMorphErode")
-OneSourceOneDest("ProcessBinMorphDilate")
-OneSourceOneDest("ProcessBinMorphOpen")
-OneSourceOneDest("ProcessBinMorphClose")
-OneSourceOneDest("ProcessBinMorphOutline")
-OneSourceOneDest("ProcessBinMorphThin")
-OneSourceOneDest("ProcessMedianConvolve")
-OneSourceOneDest("ProcessRangeConvolve")
-OneSourceOneDest("ProcessRankClosestConvolve")
-OneSourceOneDest("ProcessRankMaxConvolve")
-OneSourceOneDest("ProcessRankMinConvolve")
-OneSourceOneDest("ProcessConvolve")
-OneSourceOneDest("ProcessConvolveSep")
-OneSourceOneDest("ProcessConvolveRep")
-OneSourceOneDest("ProcessConvolveDual")
-OneSourceOneDest("ProcessCompassConvolve")
-OneSourceOneDest("ProcessMeanConvolve")
-OneSourceOneDest("ProcessGaussianConvolve")
-OneSourceOneDest("ProcessBarlettConvolve")
-OneSourceTwoDests("ProcessInterlaceSplit", nil, function (image) if (image:Height()) then return image:Height() else return image:Height()/2 end end)
-
-function im.ProcessInterlaceSplitNew(src_image)
- -- create destination image
- local dst_height1 = src_image:Height()/2
- if math.mod(src_image:Height(), 2) then
- dst_height1 = dst_height1 + 1
- end
-
- local dst_image1 = im.ImageCreateBased(src_image, nil, dst_height1)
- local dst_image2 = im.ImageCreateBased(src_image, nil, src_image:Height()/2)
-
- -- call method, repassing all parameters
- im.ProcessInterlaceSplit(src_image, dst_image1, dst_image2)
- return dst_image1, dst_image2
-end
-
-local function int_datatype (image)
- local data_type = image:DataType()
- if data_type == im.BYTE or data_type == im.USHORT then
- data_type = im.INT
- end
- return data_type
-end
-
-OneSourceOneDest("ProcessDiffOfGaussianConvolve", nil, nil, nil, int_datatype)
-OneSourceOneDest("ProcessLapOfGaussianConvolve", nil, nil, nil, int_datatype)
-OneSourceOneDest("ProcessSobelConvolve")
-OneSourceOneDest("ProcessSplineEdgeConvolve")
-OneSourceOneDest("ProcessPrewittConvolve")
-OneSourceOneDest("ProcessZeroCrossing")
-OneSourceOneDest("ProcessCanny")
-OneSourceOneDest("ProcessUnArithmeticOp")
-TwoSourcesOneDest("ProcessArithmeticOp")
-
-function im.ProcessArithmeticConstOpNew (src_image, src_const, op)
- local dst_image = im.ImageCreateBased(src_image)
- im.ProcessArithmeticConstOp(src_image, src_const, dst_image, op)
- return dst_image
-end
-
-TwoSourcesOneDest("ProcessBlendConst")
-ThreeSourcesOneDest("ProcessBlend")
-OneSourceTwoDests("ProcessSplitComplex")
-TwoSourcesOneDest("ProcessMergeComplex", nil, nil, nil, im.CFLOAT)
-
-function im.ProcessMultipleMeanNew (src_image_list, dst_image)
- local dst_image = im.ImageCreateBased(src_image_list[1])
- im.ProcessMultipleMean(src_image_list, dst_image)
- return dst_image
-end
-
-function im.ProcessMultipleStdDevNew (src_image_list, mean_image)
- local dst_image = im.ImageCreateBased(src_image_list[1])
- im.ProcessMultipleStdDev(src_image_list, mean_image, dst_image)
- return dst_image
-end
-
-TwoSourcesOneDest("ProcessAutoCovariance")
-OneSourceOneDest("ProcessMultiplyConj")
-OneSourceOneDest("ProcessQuantizeRGBUniform", nil, nil, im.MAP, nil)
-OneSourceOneDest("ProcessQuantizeGrayUniform")
-OneSourceOneDest("ProcessExpandHistogram")
-OneSourceOneDest("ProcessEqualizeHistogram")
-
-function im.ProcessSplitYChromaNew (src_image)
- local y_image = im.ImageCreateBased(src_image, nil, nil, im.GRAY, im.BYTE)
- local chroma_image = im.ImageCreateBased(src_image, nil, nil, im.RGB, im.BYTE)
- im.ProcessSplitYChroma(src_image, y_image, chroma_image)
- return y_image, chroma_image
-end
-
-OneSourceThreeDests("ProcessSplitHSI", nil, nil, im.GRAY, im.FLOAT)
-ThreeSourcesOneDest("ProcessMergeHSI", nil, nil, im.RGB, im.BYTE)
-
-function im.ProcessSplitComponentsNew (src_image)
- local depth = src_image:Depth()
- local dst_images = {}
- for i = 1, depth do
- table.insert(dst_images, im.ImageCreateBased(src_image, nil, nil, im.GRAY))
- end
- im.ProcessSplitComponents(src_image, dst_images)
- return unpack(dst_images)
-end
-
-function im.ProcessMergeComponentsNew (src_image_list)
- local dst_image = im.ImageCreateBased(src_image_list[1], nil, nil, im.RGB)
- im.ProcessMergeComponents(src_image_list, dst_image)
- return dst_image
-end
-
-OneSourceOneDest("ProcessNormalizeComponents", nil, nil, nil, im.FLOAT)
-OneSourceOneDest("ProcessReplaceColor")
-TwoSourcesOneDest("ProcessBitwiseOp")
-OneSourceOneDest("ProcessBitwiseNot")
-OneSourceOneDest("ProcessBitMask")
-OneSourceOneDest("ProcessBitPlane")
-OneSourceOneDest("ProcessToneGamut")
-OneSourceOneDest("ProcessUnNormalize", nil, nil, nil, im.BYTE)
-OneSourceOneDest("ProcessDirectConv", nil, nil, nil, im.BYTE)
-OneSourceOneDest("ProcessNegative")
-OneSourceOneDest("ProcessRangeContrastThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessLocalMaxThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessThreshold", nil, nil, im.BINARY, nil)
-TwoSourcesOneDest("ProcessThresholdByDiff")
-OneSourceOneDest("ProcessHysteresisThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessUniformErrThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessDifusionErrThreshold")
-OneSourceOneDest("ProcessPercentThreshold")
-OneSourceOneDest("ProcessOtsuThreshold")
-OneSourceOneDest("ProcessMinMaxThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessSliceThreshold", nil, nil, im.BINARY, nil)
-OneSourceOneDest("ProcessPixelate")
-OneSourceOneDest("ProcessPosterize")
-
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "im"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "im"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("libtiff/*.c"),
- matchfiles("libjpeg/*.c"),
- matchfiles("liblzf/*.c"),
- matchfiles("zlib/*.c"),
- "libpng/png.c", "libpng/pngget.c", "libpng/pngread.c", "libpng/pngrutil.c", "libpng/pngwtran.c",
- "libpng/pngerror.c", "libpng/pngmem.c", "libpng/pngrio.c", "libpng/pngset.c", "libpng/pngwio.c",
- "libpng/pngpread.c", "libpng/pngrtran.c", "libpng/pngtrans.c", "libpng/pngwrite.c", "libpng/pngwutil.c",
- matchfiles("libexif/canon/*.c"),
- matchfiles("libexif/olympus/*.c"),
- matchfiles("libexif/pentax/*.c"),
- matchfiles("libexif/*.c"),
- "old_imcolor.c", "old_imresize.c", "tiff_binfile.c", "im_converttype.cpp",
- "im_attrib.cpp", "im_format.cpp", "im_format_tga.cpp", "im_filebuffer.cpp",
- "im_bin.cpp", "im_format_all.cpp", "im_format_tiff.cpp", "im_format_raw.cpp",
- "im_binfile.cpp", "im_format_sgi.cpp", "im_datatype.cpp", "im_format_pcx.cpp",
- "im_colorhsi.cpp", "im_format_bmp.cpp", "im_image.cpp", "im_rgb2map.cpp",
- "im_colormode.cpp", "im_format_gif.cpp", "im_lib.cpp", "im_format_pnm.cpp",
- "im_colorutil.cpp", "im_format_ico.cpp", "im_palette.cpp", "im_format_png.cpp",
- "im_convertbitmap.cpp", "im_format_led.cpp", "im_counter.cpp", "im_str.cpp",
- "im_convertcolor.cpp", "im_format_jpeg.cpp", "im_fileraw.cpp", "im_format_krn.cpp",
- "im_file.cpp", "im_format_ras.cpp", "old_im.cpp", "im_compress.cpp",
-}
-
-package.includepaths = { ".", "../include", "libtiff", "libjpeg", "libexif", "libpng", "zlib" }
-package.defines = { "JPEG_SUPPORT", "ZIP_SUPPORT", "OJPEG_SUPPORT", "PIXARLOG_SUPPORT", "PNG_NO_STDIO", "PNG_TIME_RFC1123_SUPPORTED" }
-
-if (options.os == "windows") then
- tinsert(package.files, {"im_sysfile_win32.cpp", "im_dib.cpp", "im_dibxbitmap.cpp"})
-
- if (options.target ~= "gnu") then
- -- optimize PNG lib for VC
- tinsert(package.files, "libpng/pngvcrd.c")
- tinsert(package.defines, "PNG_USE_PNGVCRD")
- end
-else
- tinsert(package.files, "im_sysfile_unix.cpp")
-
- if (options.os == "linux") then
- --package.buildoptions = { "-W -Wall -ansi -pedantic" }
-
- -- optimize PNG lib for Linux in x86
- tinsert(package.files, "libpng/pnggccrd.c")
- tinsert(package.defines, "PNG_USE_PNGGCCRD")
- end
-end
-
-fixPackagePath(package.files)
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "im_process"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "process/im_arithmetic_bin.cpp", "process/im_morphology_gray.cpp", "process/im_quantize.cpp",
- "process/im_arithmetic_un.cpp", "process/im_geometric.cpp", "process/im_render.cpp",
- "process/im_color.cpp", "process/im_histogram.cpp", "process/im_resize.cpp",
- "process/im_convolve.cpp", "process/im_houghline.cpp", "process/im_statistics.cpp",
- "process/im_convolve_rank.cpp", "process/im_logic.cpp", "process/im_threshold.cpp",
- "process/im_effects.cpp", "process/im_morphology_bin.cpp", "process/im_tonegamut.cpp",
- "process/im_canny.cpp", "process/im_distance.cpp", "process/im_analyze.cpp"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "im_jp2"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("libjasper/base/*.c", "libjasper/jp2/*.c", "libjasper/jpc/*.c"),
- "jas_binfile.c", "im_format_jp2.cpp"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "libjasper" }
-package.defines = { "EXCLUDE_JPG_SUPPORT", "EXCLUDE_MIF_SUPPORT", "EXCLUDE_PNM_SUPPORT",
- "EXCLUDE_BMP_SUPPORT", "EXCLUDE_PGX_SUPPORT", "EXCLUDE_RAS_SUPPORT",
- "EXCLUDE_TIFF_SUPPORT", "JAS_GEO_OMIT_PRINTING_CODE" }
-
-tinsert(package.defines, "JAS_TYPES")
-
-if (options.os == "linux") then
- tinsert(package.defines, "HAVE_UNISTD_H")
-end
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "im_lua3.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(LUA3)/include", "$(CD)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "im_fftw"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("fftw/*.c"),
- "process/im_fft.cpp"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "fftw" }
-package.defines = { "FFTW_ENABLE_FLOAT" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "im_fftw3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("fftw3/api/*.c"),
- matchfiles("fftw3/reodft/*.c"),
- matchfiles("fftw3/kernel/*.c"),
- matchfiles("fftw3/dft/*.c", "fftw3/dft/codelets/*.c", "fftw3/dft/codelets/inplace/*.c", "fftw3/dft/codelets/standard/*.c"),
- matchfiles("fftw3/rdft/*.c", "fftw3/rdft/codelets/*.c", "fftw3/rdft/codelets/hc2r/*.c", "fftw3/rdft/codelets/r2hc/*.c", "fftw3/rdft/codelets/r2r/*.c"),
- "process/im_fft.cpp"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "fftw3/kernel", "fftw3/dft", "fftw3/rdft", "fftw3/api",
- "fftw3/reodft", "fftw3/rdft/codelets", "fftw3/dft/codelets" }
-package.defines = { "USE_FFTW3" }
-
-if (options.os == "windows") then
- if (options.target == "gnu") then
- tinsert(package.defines, "HAVE_UINTPTR_T")
- end
-end
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "lua5/imlua.c", "lua5/imlua_aux.c", "lua5/imlua_convert.c", "lua5/imlua_file.c",
- "lua5/imlua_image.c", "lua5/imlua_palette.c", "lua5/imlua_util.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "lua5", "$(LUA51)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua_cd51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "lua5/imlua_cd.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "lua5", "$(LUA51)/include", "$(CD)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua_process51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "lua5/imlua_process.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "lua5", "$(LUA51)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua_capture51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "lua5/imlua_capture.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "lua5", "$(LUA51)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "imlua_fftw51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "lua5/imlua_fftw.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "lua5", "$(LUA51)/include" }
-
----------------------------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-function tremove(t, value)
- local index = -1
- function f(i, v)
- if (v == value) then
- index = i
- end
- end
- table.foreachi(t, f)
- if (index ~= -1) then
- table.remove(t, index)
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iup"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("*.c")
-}
-
-package.includepaths = { ".", "../include" }
-
-if (options.os == "windows") then
- tinsert(package.files, matchfiles("win/*.c"))
- tinsert(package.includepaths, {"win"})
- package.defines = {"_WIN32_WINNT=0x0400"}
-else
- tinsert(package.files, matchfiles("mot/*.c"))
- tremove(package.files[2], "mot/ComboBox1.c")
- tinsert(package.includepaths, {"mot", "/usr/X11R6/include"})
- package.defines = {"LINUX"}
-end
-
-fixPackagePath(package.files)
-
-----------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iupcontrols"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- matchfiles("*.c"),
- matchfiles("mask/*.c"),
- matchfiles("matrix/*.c"),
- matchfiles("tree/*.c"),
- matchfiles("color/*.c")
-}
-
-package.includepaths = { ".", "../include", "../src", "$(CD)/include" }
-
-if (options.os == "linux") then
- package.defines = { "_MOTIF_" }
- tinsert(package.includepaths, {"/usr/X11R6/include"})
-end
-
-fixPackagePath(package.files)
-
-----------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iupgl"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.includepaths = { ".", "../include" }
-
-if (options.os == "windows") then
- package.files = { "iupglw.c" }
-else
- package.files = { "iupglx.c", "GL/GLwMDrawA.c" }
- tinsert(package.includepaths, {"/usr/X11R6/include"})
-end
-
-fixPackagePath(package.files)
-
-----------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iupim"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.includepaths = { ".", "../include", "$(IM)/include" }
-
-package.files = { "iupim.c" }
-
-fixPackagePath(package.files)
-
-----------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "ledc"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "exe"
-
-package.files =
-{
- "lex.yy.c", "y.tab.c", "main.c"
-}
-
-package.includepaths = { "." }
-
-fixPackagePath(package.files)
-
-----------------------------------------------------
--- Utilities
-
-function printvars()
- local n,v = nextvar(nil)
- print("--printvars Start--")
- while n ~= nil do
- print(tostring(n).."="..tostring(v))
- n,v = nextvar(n)
- end
- print("--printvars End--")
-end
-
-function printtable(t)
- local n,v = next(t, nil)
- print("--printtable Start--")
- while n ~= nil do
- print(tostring(n).."="..tostring(v))
- n,v = next(t, n)
- end
- print("--printtable End--")
-end
-
-function print_version_info()
- print(_VERSION .. " " .. iup._LUA_COPYRIGHT)
- if (im) then print(im._VERSION .. " " .. im._COPYRIGHT) end
- if (cd and cd._VERSION) then print(cd._VERSION .. " " .. cd._COPYRIGHT) end
- print(iup._VERSION .. " " .. iup._COPYRIGHT)
- print("")
- print("IUP Info")
- print(" System: " .. iup.GetGlobal("SYSTEM"))
- print(" System Version: " .. iup.GetGlobal("SYSTEMVERSION"))
- local mot = iup.GetGlobal("MOTIFVERSION")
- if (mot) then print(" Motif Version: ", mot) end
- print(" Screen Size: " .. iup.GetGlobal("SCREENSIZE"))
- print(" Screen Depth: " .. iup.GetGlobal("SCREENDEPTH"))
- if (iup.GL_VENDOR) then print(" OpenGL Vendor: " .. iup.GL_VENDOR) end
- if (iup.GL_RENDERER) then print(" OpenGL Renderer: " .. iup.GL_RENDERER) end
- if (iup.GL_VERSION) then print(" OpenGL Version: " .. iup.GL_VERSION) end
-end
-
--- IUPLUA Full Application
-
-lastfile = nil -- Last file open
-
-mulCommands = iupmultiline{expand=IUP_YES, size="200x120", font="COURIER_NORMAL_10"}
-poslabel = iuplabel{title="0:0", size="50x"}
-filelabel = iuplabel{title="", size="50x", expand="HORIZONTAL"}
-
-mulCommands.caretcb = function(self, lin, col)
- poslabel.title = lin..":"..col
-end
-
-butExecute = iupbutton{size="50x15", title = "Execute", action="dostring(mulCommands.value)"}
-butClearCommands = iupbutton{size="50x15", title = "Clear", action = "mulCommands.value = '' filelabel.title = '' lastfile = nil"}
-butLoadFile = iupbutton{size="50x15", title = "Load..."}
-butSaveasFile = iupbutton{size="50x15", title = "Save As..."}
-butSaveFile = iupbutton{size="50x15", title = "Save"}
-
-function butSaveFile:action()
- if (lastfile == nil) then
- butSaveasFile:action()
- else
- novoarq = openfile (lastfile, "w+")
- if (novoarq ~= nil) then
- write (novoarq,mulCommands.value)
- closefile (novoarq)
- else
- error ("Cannot Save file "..filename)
- end
- end
-end
-
-function butSaveasFile:action()
- local filedlg = iupfiledlg{dialogtype = "SAVE", title = "Save File", filter = "*.lua", filterinfo = "Lua files",allownew=yes}
- IupPopup(filedlg,IUP_LEFT, IUP_LEFT)
- local status = filedlg.status
- lastfile = filedlg.value
- filelabel.title = lastfile
- IupDestroy(filedlg)
- if status ~= "-1" then
- if (lastfile == nil) then
- error ("Cannot Save file "..lastfile)
- end
- local novoarq = openfile (lastfile, "w+")
- if (novoarq ~= nil) then
- write (novoarq,mulCommands.value)
- closefile (novoarq)
- else
- error ("Cannot Save file")
- end
- end
-end
-
-function butLoadFile:action()
- local filedlg = iupfiledlg{dialogtype="OPEN", title="Load File", filter="*.lua", filterinfo="Lua Files", allownew="NO"}
- filedlg:popup(IUP_CENTER, IUP_CENTER)
- local status = filedlg.status
- local newfile = filedlg.value
- IupDestroy(filedlg)
- if (status == "-1") or (status == "1") then
- if (status == "1") then
- error ("Cannot load file "..newfile)
- end
- else
- local fp = openfile (newfile, "r")
- if (fp == nil) then
- error ("Cannot load file "..newfile)
- else
- mulCommands.value = read (fp,"*a")
- closefile (fp)
- lastfile = newfile
- filelabel.title = lastfile
- end
- end
-end
-
-vbxConsole = iupvbox
-{
- iupframe{iuphbox{iupvbox{butLoadFile, butSaveFile, butSaveasFile, butClearCommands, butExecute; margin="0x0", gap="10"}, iupvbox{filelabel, mulCommands, poslabel; alignment="ARIGHT"}; alignment="ATOP"}; title="Commands"}
- ;alignment="ACENTER", margin="5x5", gap="5"
-}
-
--- Main Menu Definition.
-
-mnuMain = iupmenu
-{
- iupsubmenu
- {
- iupmenu
- {
- iupitem{title="Exit", action="return IUP_CLOSE"}
- }; title="File"
- },
- iupsubmenu{iupmenu
- {
- iup.item{title="Print Version Info...", action=print_version_info},
- iupitem{title="About...", action="dlgAbout:popup(IUP_CENTER, IUP_CENTER)"}
- };title="Help"}
-}
-
--- Main Dialog Definition.
-
-dlgMain = iupdialog{vbxConsole; title="Complete IupLua3 Interpreter", menu=mnuMain, close_cb = "return IUP_CLOSE"}
-
--- About Dialog Definition.
-
-dlgAbout = iupdialog
-{
- iupvbox
- {
- iuplabel{title="Complete IupLua3 Interpreter"},
- iupfill{size="5"},
- iupfill{size="5"},
- iupframe
- {
- iupvbox
- {
- iuplabel{title="Tecgraf/PUC-Rio"},
- iuplabel{title="Mark/Ovídio/Scuri"},
- iuplabel{title="iup@tecgraf.puc-rio.br"}
- }
- },
- iupfill{size="5"},
- iupbutton{title="OK", action="return IUP_CLOSE", size="50X20"}
- ;margin="10x10", alignment="ACENTER"
- }
- ;maxbox=IUP_NO, minbox=IUP_NO, resize=IUP_NO, title="About"
-}
-
--- Displays the Main Dialog
-
-dlgMain:show()
-
-IupMainLoop()
-
-IupDestroy(dlgMain)
-IupDestroy(dlgAbout)
-
--- #################################################################################
--- Constants
--- #################################################################################
-
-
-IUP_ERROR = 1 iup.ERROR = IUP_ERROR
-IUP_NOERROR = 0 iup.NOERROR = IUP_NOERROR
-IUP_OPENED = -1 iup.OPENED = IUP_OPENED
-IUP_INVALID = -1 iup.INVALID = IUP_INVALID
-
-IUP_CENTER = 65535 iup.CENTER = IUP_CENTER
-IUP_LEFT = 65534 iup.LEFT = IUP_LEFT
-IUP_RIGHT = 65533 iup.RIGHT = IUP_RIGHT
-IUP_MOUSEPOS = 65532 iup.MOUSEPOS = IUP_MOUSEPOS
-IUP_CURRENT = 65531 iup.CURRENT = IUP_CURRENT
-IUP_CENTERPARENT = 65530 iup.CENTERPARENT = IUP_CENTERPARENT
-IUP_TOP = IUP_LEFT iup.TOP = IUP_TOP
-IUP_BOTTOM = IUP_RIGHT iup.BOTTOM = IUP_BOTTOM
-IUP_ANYWHERE = IUP_CURRENT iup.ANYWHERE = IUP_ANYWHERE
-
-IUP_BUTTON1 = 49 iup.BUTTON1 = IUP_BUTTON1 -- '1'
-IUP_BUTTON2 = 50 iup.BUTTON2 = IUP_BUTTON2 -- '2'
-IUP_BUTTON3 = 51 iup.BUTTON3 = IUP_BUTTON3 -- '3'
-IUP_BUTTON4 = 52 iup.BUTTON4 = IUP_BUTTON4 -- '4'
-IUP_BUTTON5 = 53 iup.BUTTON5 = IUP_BUTTON5 -- '5'
-
-IUP_IGNORE = -1 iup.IGNORE = IUP_IGNORE
-IUP_DEFAULT = -2 iup.DEFAULT = IUP_DEFAULT
-IUP_CLOSE = -3 iup.CLOSE = IUP_CLOSE
-IUP_CONTINUE = -4 iup.CONTINUE = IUP_CONTINUE
-
-IUP_SBUP = 0 iup.SBUP = IUP_SBUP
-IUP_SBDN = 1 iup.SBDN = IUP_SBDN
-IUP_SBPGUP = 2 iup.SBPGUP = IUP_SBPGUP
-IUP_SBPGDN = 3 iup.SBPGDN = IUP_SBPGDN
-IUP_SBPOSV = 4 iup.SBPOSV = IUP_SBPOSV
-IUP_SBDRAGV = 5 iup.SBDRAGV = IUP_SBDRAGV
-IUP_SBLEFT = 6 iup.SBLEFT = IUP_SBLEFT
-IUP_SBRIGHT = 7 iup.SBRIGHT = IUP_SBRIGHT
-IUP_SBPGLEFT = 8 iup.SBPGLEFT = IUP_SBPGLEFT
-IUP_SBPGRIGHT = 9 iup.SBPGRIGHT = IUP_SBPGRIGHT
-IUP_SBPOSH = 10 iup.SBPOSH = IUP_SBPOSH
-IUP_SBDRAGH = 11 iup.SBDRAGH = IUP_SBDRAGH
-
-IUP_SHOW = 0 iup.SHOW = IUP_SHOW
-IUP_RESTORE = 1 iup.RESTORE = IUP_RESTORE
-IUP_MINIMIZE = 2 iup.MINIMIZE = IUP_MINIMIZE
-IUP_MAXIMIZE = 3 iup.MAXIMIZE = IUP_MAXIMIZE
-IUP_HIDE = 4 iup.HIDE = IUP_HIDE
-
-RED = IupRGB(1, 0, 0) iup.RED = RED
-GREEN = IupRGB(0, 1, 0) iup.GREEN = GREEN
-BLUE = IupRGB(0, 0, 1) iup.BLUE = BLUE
-BLACK = IupRGB(0, 0, 0) iup.BLACK = BLACK
-WHITE = IupRGB(1, 1, 1) iup.WHITE = WHITE
-YELLOW = IupRGB(1, 1, 0) iup.YELLOW = YELLOW
-
-IUP_ON = "ON" iup.ON = IUP_ON
-IUP_OFF = "OFF" iup.OFF = IUP_OFF
-IUP_YES = "YES" iup.YES = IUP_YES
-IUP_NO = "NO" iup.NO = IUP_NO
-IUP_APPEND = "APPEND" iup.APPEND = IUP_APPEND
-IUP_VERTICAL = "VERTICAL" iup.VERTICAL = IUP_VERTICAL
-IUP_HORIZONTAL ="HORIZONTAL" iup.HORIZONTAL =IUP_HORIZONTAL
-
-IUP_ACENTER = "ACENTER" iup.ACENTER = IUP_ACENTER
-IUP_ALEFT = "ALEFT" iup.ALEFT = IUP_ALEFT
-IUP_ARIGHT = "ARIGHT" iup.ARIGHT = IUP_ARIGHT
-IUP_ATOP = "ATOP" iup.ATOP = IUP_ATOP
-IUP_ABOTTOM = "ABOTTOM" iup.ABOTTOM = IUP_ABOTTOM
-
-IUP_NORTH = "NORTH" iup.NORTH = IUP_NORTH
-IUP_SOUTH = "SOUTH" iup.SOUTH = IUP_SOUTH
-IUP_WEST = "WEST" iup.WEST = IUP_WEST
-IUP_EAST = "EAST" iup.EAST = IUP_EAST
-IUP_NE = "NE" iup.NE = IUP_NE
-IUP_SE = "SE" iup.SE = IUP_SE
-IUP_NW = "NW" iup.NW = IUP_NW
-IUP_SW = "SW" iup.SW = IUP_SW
-
-IUP_FULL = "FULL" iup.FULL = IUP_FULL
-IUP_HALF = "HALF" iup.HALF = IUP_HALF
-IUP_THIRD = "THIRD" iup.THIRD = IUP_THIRD
-IUP_QUARTER = "QUARTER" iup.QUARTER = IUP_QUARTER
-IUP_EIGHTH = "EIGHTH" iup.EIGHTH = IUP_EIGHTH
-
-IUP_ARROW = "ARROW" iup.ARROW = IUP_ARROW
-IUP_BUSY = "BUSY" iup.BUSY = IUP_BUSY
-IUP_RESIZE_N = "RESIZE_N" iup.RESIZE_N = IUP_RESIZE_N
-IUP_RESIZE_S = "RESIZE_S" iup.RESIZE_S = IUP_RESIZE_S
-IUP_RESIZE_E = "RESIZE_E" iup.RESIZE_E = IUP_RESIZE_E
-IUP_RESIZE_W = "RESIZE_W" iup.RESIZE_W = IUP_RESIZE_W
-IUP_RESIZE_NE = "RESIZE_NE" iup.RESIZE_NE = IUP_RESIZE_NE
-IUP_RESIZE_NW = "RESIZE_NW" iup.RESIZE_NW = IUP_RESIZE_NW
-IUP_RESIZE_SE = "RESIZE_SE" iup.RESIZE_SE = IUP_RESIZE_SE
-IUP_RESIZE_SW = "RESIZE_SW" iup.RESIZE_SW = IUP_RESIZE_SW
-IUP_MOVE = "MOVE" iup.MOVE = IUP_MOVE
-IUP_HAND = "HAND" iup.HAND = IUP_HAND
-IUP_NONE = "NONE" iup.NONE = IUP_NONE
-IUP_IUP = "IUP" iup.IUP = IUP_IUP
-IUP_CROSS = "CROSS" iup.CROSS = IUP_CROSS
-IUP_PEN = "PEN" iup.PEN = IUP_PEN
-IUP_TEXT = "TEXT" iup.TEXT = IUP_TEXT
-IUP_RESIZE_C = "RESIZE_C" iup.RESIZE_C = IUP_RESIZE_C
-IUP_OPENHAND = "OPENHAND" iup.OPENHAND = IUP_OPENHAND
-
-IUP_HELVETICA_NORMAL_8 = "HELVETICA_NORMAL_8" iup.HELVETICA_NORMAL_8 = IUP_HELVETICA_NORMAL_8
-IUP_HELVETICA_ITALIC_8 = "HELVETICA_ITALIC_8" iup.HELVETICA_ITALIC_8 = IUP_HELVETICA_ITALIC_8
-IUP_HELVETICA_BOLD_8 = "HELVETICA_BOLD_8" iup.HELVETICA_BOLD_8 = IUP_HELVETICA_BOLD_8
-IUP_HELVETICA_NORMAL_10 = "HELVETICA_NORMAL_10" iup.HELVETICA_NORMAL_10 = IUP_HELVETICA_NORMAL_10
-IUP_HELVETICA_ITALIC_10 = "HELVETICA_ITALIC_10" iup.HELVETICA_ITALIC_10 = IUP_HELVETICA_ITALIC_10
-IUP_HELVETICA_BOLD_10 = "HELVETICA_BOLD_10" iup.HELVETICA_BOLD_10 = IUP_HELVETICA_BOLD_10
-IUP_HELVETICA_NORMAL_12 = "HELVETICA_NORMAL_12" iup.HELVETICA_NORMAL_12 = IUP_HELVETICA_NORMAL_12
-IUP_HELVETICA_ITALIC_12 = "HELVETICA_ITALIC_12" iup.HELVETICA_ITALIC_12 = IUP_HELVETICA_ITALIC_12
-IUP_HELVETICA_BOLD_12 = "HELVETICA_BOLD_12" iup.HELVETICA_BOLD_12 = IUP_HELVETICA_BOLD_12
-IUP_HELVETICA_NORMAL_14 = "HELVETICA_NORMAL_14" iup.HELVETICA_NORMAL_14 = IUP_HELVETICA_NORMAL_14
-IUP_HELVETICA_ITALIC_14 = "HELVETICA_ITALIC_14" iup.HELVETICA_ITALIC_14 = IUP_HELVETICA_ITALIC_14
-IUP_HELVETICA_BOLD_14 = "HELVETICA_BOLD_14" iup.HELVETICA_BOLD_14 = IUP_HELVETICA_BOLD_14
-IUP_COURIER_NORMAL_8 = "COURIER_NORMAL_8" iup.COURIER_NORMAL_8 = IUP_COURIER_NORMAL_8
-IUP_COURIER_ITALIC_8 = "COURIER_ITALIC_8" iup.COURIER_ITALIC_8 = IUP_COURIER_ITALIC_8
-IUP_COURIER_BOLD_8 = "COURIER_BOLD_8" iup.COURIER_BOLD_8 = IUP_COURIER_BOLD_8
-IUP_COURIER_NORMAL_10 = "COURIER_NORMAL_10" iup.COURIER_NORMAL_10 = IUP_COURIER_NORMAL_10
-IUP_COURIER_ITALIC_10 = "COURIER_ITALIC_10" iup.COURIER_ITALIC_10 = IUP_COURIER_ITALIC_10
-IUP_COURIER_BOLD_10 = "COURIER_BOLD_10" iup.COURIER_BOLD_10 = IUP_COURIER_BOLD_10
-IUP_COURIER_NORMAL_12 = "COURIER_NORMAL_12" iup.COURIER_NORMAL_12 = IUP_COURIER_NORMAL_12
-IUP_COURIER_ITALIC_12 = "COURIER_ITALIC_12" iup.COURIER_ITALIC_12 = IUP_COURIER_ITALIC_12
-IUP_COURIER_BOLD_12 = "COURIER_BOLD_12" iup.COURIER_BOLD_12 = IUP_COURIER_BOLD_12
-IUP_COURIER_NORMAL_14 = "COURIER_NORMAL_14" iup.COURIER_NORMAL_14 = IUP_COURIER_NORMAL_14
-IUP_COURIER_ITALIC_14 = "COURIER_ITALIC_14" iup.COURIER_ITALIC_14 = IUP_COURIER_ITALIC_14
-IUP_COURIER_BOLD_14 = "COURIER_BOLD_14" iup.COURIER_BOLD_14 = IUP_COURIER_BOLD_14
-IUP_TIMES_NORMAL_8 = "TIMES_NORMAL_8" iup.TIMES_NORMAL_8 = IUP_TIMES_NORMAL_8
-IUP_TIMES_ITALIC_8 = "TIMES_ITALIC_8" iup.TIMES_ITALIC_8 = IUP_TIMES_ITALIC_8
-IUP_TIMES_BOLD_8 = "TIMES_BOLD_8" iup.TIMES_BOLD_8 = IUP_TIMES_BOLD_8
-IUP_TIMES_NORMAL_10 = "TIMES_NORMAL_10" iup.TIMES_NORMAL_10 = IUP_TIMES_NORMAL_10
-IUP_TIMES_ITALIC_10 = "TIMES_ITALIC_10" iup.TIMES_ITALIC_10 = IUP_TIMES_ITALIC_10
-IUP_TIMES_BOLD_10 = "TIMES_BOLD_10" iup.TIMES_BOLD_10 = IUP_TIMES_BOLD_10
-IUP_TIMES_NORMAL_12 = "TIMES_NORMAL_12" iup.TIMES_NORMAL_12 = IUP_TIMES_NORMAL_12
-IUP_TIMES_ITALIC_12 = "TIMES_ITALIC_12" iup.TIMES_ITALIC_12 = IUP_TIMES_ITALIC_12
-IUP_TIMES_BOLD_12 = "TIMES_BOLD_12" iup.TIMES_BOLD_12 = IUP_TIMES_BOLD_12
-IUP_TIMES_NORMAL_14 = "TIMES_NORMAL_14" iup.TIMES_NORMAL_14 = IUP_TIMES_NORMAL_14
-IUP_TIMES_ITALIC_14 = "TIMES_ITALIC_14" iup.TIMES_ITALIC_14 = IUP_TIMES_ITALIC_14
-IUP_TIMES_BOLD_14 = "TIMES_BOLD_14" iup.TIMES_BOLD_14 = IUP_TIMES_BOLD_14
-
-
-
--- #################################################################################
--- Private functions
--- #################################################################################
-
--- maps Ihandles into Lua objects
-iup_handles = {}
-
-settagmethod(iuplua_tag, "gettable", iup_gettable)
-settagmethod(iuplua_tag, "settable", iup_settable)
-settagmethod (tag({}), "index", iup_index)
-
-function _ALERT(s)
- local bt = iupbutton{title="Ok", size="60", action="return IUP_CLOSE"}
- local ml = iupmultiline{expand="YES", readonly="YES", value=s, size="300x150"}
- local vb = iupvbox{ml, bt; alignment="ACENTER", margin="10x10", gap="10"}
- local dg = iupdialog{vb; title="Lua Error",defaultesc=bt,defaultenter=bt,startfocus=bt}
- dg:popup(IUP_CENTER, IUP_CENTER)
- dg:destroy()
-end
-
-function type_string (o)
- return type(o) == "string"
-end
-
-function type_number (o)
- return type(o) == "number"
-end
-
-function type_nil (o)
- return type(o) == "nil"
-end
-
-function type_function (o)
- return type(o) == "function"
-end
-
-function type_widget(w)
- if w then
- return iup_handles[w]
- else
- return nil
- end
-end
-
-function type_menu (o)
- return type_widget(o) and (o.parent==IUPMENU)
-end
-
-function type_item (o)
- return type_widget(o) and (o.parent==IUPITEM or o.parent==IUPSUBMENU or o.parent==IUPSEPARATOR)
-end
-
-function iupCallMethod(name, ...)
- local handle = arg[1] -- always the handle
-
- local func = handle[name] -- this is the old name
- if (not func) then
- local full_name = strlower(iup_callbacks[name][1])
- func = handle[full_name] -- check also for the full name
-
- if (not func) then
- return
- end
- end
-
- if type_function (func) then
- return call(func, arg)
- elseif type_string(func) then
- local temp = self
- self = handle
- local result = dostring(func)
- self = temp
- return result
- else
- return IUP_ERROR
- end
-end
-
-function iupSetName (handle)
- if not type_string(iup_handles[handle].IUP_name) then
- iup_handles[handle].IUP_name = format("_IUPLUA_NAME(%s)", tostring(handle))
- IupSetHandle(handle.IUP_name, handle)
- end
-end
-
-function iupCreateChildrenNames (obj)
- if obj.parent.parent == COMPOSITION then
- local i = 1
- while obj[i] do
- iupCreateChildrenNames (obj[i])
- i = i+1
- end
- elseif obj.parent == IUPFRAME then
- iupCreateChildrenNames (obj[1])
- else
- iupSetName (obj)
- end
-end
-
-
--- #################################################################################
--- Public Functions
--- #################################################################################
-
-
-function IupRGB (red, green, blue)
- return floor(red*255).." "..floor(green*255).." "..floor(blue*255)
-end
-iup.RGB = IupRGB
-
-function IupRegisterHandle(handle, typename)
- if not iup_handles[handle] then
- local obj = getglobal("IUP"..strupper(typename))
- if not obj then
- obj = WIDGET
- end
- iup_handles[handle] = { parent=obj, handle=handle }
- end
- return handle
-end
-iup.RegisterHandle = IupRegisterHandle
-
-function IupGetFromC(obj)
- local handle = IupGetHandle(obj[1])
- return IupRegisterHandle(handle, IupGetType(handle))
-end
-
-iup.GetFromC = function (name)
- local handle = IupGetHandle(name)
- return IupRegisterHandle(handle, IupGetType(handle))
-end
-
-
--- #################################################################################
--- Widgets
--- #################################################################################
-
-
--- "type" is used to check the type of each parameter in the creation table
-WIDGET = {type = {}}
-
--- called by the iupxxx functions
--- obj is a lua table
-function WIDGET:Constructor(obj)
- -- the parent of the table is the widget class used to create the control
- obj.parent = self
-
- -- check the table parameters
- self:checkParams(obj)
-
- -- create the IUP control, calling iupCreateXXX
- obj.handle = self:CreateIUPelement(obj)
-
- -- set the parameters that are attributes
- self:setAttributes(obj)
-
- -- save the table indexed by the handle
- iup_handles[obj.handle] = obj
-
- -- the returned value is the handle, not the table
- return obj.handle
-end
-
-function WIDGET:checkParams (obj)
- local type = self.type
- local param, func = next(type, nil)
- while param do
- if not func(obj[param]) then
- error("parameter " .. param .. " has wrong value or is not initialized")
- end
- param, func = next(type, param)
- end
-end
-
-function WIDGET:setAttributes (obj)
- local temp = {}
- local f = next(obj, nil)
- while f do
- temp[f] = 1
- f = next(obj, f)
- end
- f = next(temp, nil)
- while f do
- obj:set (f, obj[f])
- f = next(temp, f)
- end
-end
-
-function WIDGET:get(index)
- if type_string (index) then
- if (iup_callbacks[index]) then
- return self[index]
- else
- local INDEX = strupper (index)
- local value = IupGetAttribute (self.handle, INDEX)
- if value then
- local handle = IupGetHandle (value)
- if handle then
- return handle
- else
- return value
- end
- end
- end
- end
- return self[index]
-end
-
-function WIDGET:set(index, value)
- if type_string (index) then
- local INDEX = strupper (index)
- local cb = iup_callbacks[index]
-
- -- workaround for resize attribute in dialog
- if (index == "resize" and IupGetType(self.handle) == "dialog") then
- cb = nil
- end
-
- if (cb) then
- local func = cb[2]
- if (not func) then
- func = cb[IupGetType(self.handle)]
- end
- iupSetCallback(self.handle, cb[1], func, value)
- self[index] = value
- return
- elseif type_string(value) or type_number(value) then
- IupSetAttribute(self.handle, INDEX, value)
- return
- elseif type_nil(value) then
- local old_value = IupGetAttribute(self.handle, INDEX)
- if old_value then
- IupSetAttribute(self.handle, INDEX, value)
- return
- end
- elseif type_widget(value) then
- iupSetName(value)
- IupSetAttribute(self.handle, INDEX, value.IUP_name)
- return
- end
- end
- self[index] = value
-end
-
-function WIDGET:r_destroy()
- local i = 1
- local elem = self[i]
- while elem do
- if type_widget (elem) and elem.IUP_parent then
- if elem.IUP_parent == self then
- elem.IUP_parent = nil
- elem:r_destroy ()
- else -- wrong parent
- error ("Internal table inconsistency")
- exit()
- end
- end
-
- i = i + 1
- elem = self[i]
- end
- iup_handles[self] = nil
-end
-
-function WIDGET:destroy()
- self:r_destroy ()
- IupDestroy (self)
-end
-
-function WIDGET:detach()
- IupDetach (self)
- local parent = self.IUP_parent
- if parent then
- self.IUP_parent = nil
- local i = 1
- while parent[i] do
- if parent[i] == self then
- while parent[i+1] do
- parent[i] = parent[i+1]
- i = i+1
- end
- parent[i] = nil
- return
- end
- i = i+1
- end
- end
-end
-
-function WIDGET:append(o)
- if IupAppend (self, o) then
- o.IUP_parent = self
- local i = 1
- while self[i] do
- if self[i] == o then
- return i
- end
- i = i+1
- end
- iup_handles[self][i] = o
- return i
- else
- return nil
- end
-end
-
-function WIDGET:map()
- return IupMap(self)
-end
-
-function WIDGET:hide()
- return IupHide(self)
-end
-
-
--- ###############
-IUPTIMER = {parent = WIDGET}
-
-function IUPTIMER:CreateIUPelement (obj)
- return iupCreateTimer()
-end
-
-function iuptimer(o)
- return IUPTIMER:Constructor(o)
-end
-iup.timer = iuptimer
-
-
--- ###############
-IUPDIALOG = {parent = WIDGET, type = {type_widget}}
-
-function IUPDIALOG:CreateIUPelement (obj)
- local handle = iupCreateDialog(obj[1])
- obj[1].IUP_parent = handle
- return handle
-end
-
-function IUPDIALOG:show ()
- return IupShow(self)
-end
-
-function IUPDIALOG:showxy (x,y)
- return IupShowXY(self, x, y)
-end
-
-function IUPDIALOG:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-function iupdialog (o)
- return IUPDIALOG:Constructor (o)
-end
-iup.dialog = iupdialog
-
-
--- ###############
-IUPRADIO = {parent = WIDGET, type = {type_widget}}
-
-function IUPRADIO:CreateIUPelement (obj)
- local handle = iupCreateRadio (obj[1])
- obj[1].IUP_parent = handle
- return handle
-end
-
-function iupradio (o)
- local handle = IUPRADIO:Constructor (o)
- iupCreateChildrenNames (handle[1])
- return handle
-end
-iup.radio = iupradio
-
--- OLD STUFF
-function edntoggles (h)
- local tmp = {}
- local i = 1
- while h[i] do
- if type_string (h[i]) then
- tmp[i] = iuptoggle{title = h[i], action = h.action}
- else
- error ("option "..i.." must be a string")
- end
- i = i + 1
- end
-
- if h.value then
- local j = 1
- while h[j] and (h[j] ~= h.value) do
- j = j + 1
- end
- if h[j] then
- tmp.value = tmp[j]
- end
- elseif h.nvalue then
- tmp.value = tmp[h.nvalue]
- end
-
- return tmp
-end
-
--- OLD STUFF
-function edhradio (o)
- local toggles = edntoggles (o)
- return iupradio{edhbox (toggles); value = toggles.value}
-end
-
--- OLD STUFF
-function edvradio (o)
- local toggles = edntoggles (o)
- return iupradio{edvbox (toggles); value = toggles.value}
-end
-
-
--- ###############
-IUPMENU = {parent = WIDGET}
-
-function IUPMENU:checkParams (obj)
- local i = 1
- while obj[i] do
- local o = obj[i]
- if not type_item (o) then -- not a menu item
- if type (o) ~= 'table' then
- error("parameter " .. i .. " is not a table nor a menu item")
- elseif (o[1] and not type_string (o[1])) then
- error("parameter " .. i .. " does not have a string title")
- elseif (o[2] and not type_string (o[2]) and not type_function (o[2])
- and not type_widget (o[2])) then
- error("parameter " .. i .. " does not have an action nor a menu")
- end
- end
- i = i + 1
- end
-end
-
-function IUPMENU:CreateIUPelement (obj)
- local handle = iupCreateMenu ()
- local i = 1
- while obj[i] do
- local o = obj[i]
- local elem
- if type_widget (o) then -- predefined
- elem = o
- elseif not o[1] then -- Separator
- elem = iupseparator {}
- elseif type_widget (o[2]) then -- SubMenu
- o.title = o[1]
- o[1] = o[2]
- o[2] = nil
- elem = iupsubmenu(o)
- else -- Item
- o.title = o[1]
- o.action = o[2]
- o[1] = nil
- o[2] = nil
- elem = iupitem(o)
- end
- IupAppend (handle, elem)
- elem.IUP_parent = handle
- obj[i] = elem
- i = i + 1
- end
- return handle
-end
-
-function iupmenu (o)
- return IUPMENU:Constructor (o)
-end
-iup.menu = iupmenu
-
-function IUPMENU:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-
--- ###############
-COMPOSITION = {parent = WIDGET}
-
-function COMPOSITION:checkParams (obj)
- local i = 1
- while obj[i] do
- if not type_widget (obj[i]) then
- error("parameter " .. i .. " has wrong value or is not initialized")
- end
- i = i + 1
- end
-end
-
-function COMPOSITION:CreateIUPelement (obj)
- local handle = self:CreateBoxElement ()
- local filled = obj.filled
- local i = 1
- local n = 0
- while obj[i] do
- n = n + 1
- i = i + 1
- end
- i = 1
-
- if filled == IUP_YES then
- obj[i+n] = iupfill{}
- IupAppend (handle, obj[i+n])
- obj[i+n].IUP_parent = handle
- end
-
- while i <= n do
- IupAppend (handle, obj[i])
- obj[i].IUP_parent = handle
- i = i + 1
- if filled == IUP_YES then
- obj[i+n] = iupfill{}
- IupAppend (handle, obj[i+n])
- obj[i+n].IUP_parent = handle
- end
- end
- return handle
-end
-
-
--- ###############
-IUPHBOX = {parent = COMPOSITION}
-
-function IUPHBOX:CreateBoxElement ()
- return iupCreateHbox ()
-end
-
-function iuphbox (o)
- return IUPHBOX:Constructor (o)
-end
-iup.hbox = iuphbox
-
--- OLD STUFF
-function edhbox (o)
- o.filled = IUP_YES
- return IUPHBOX:Constructor (o)
-end
-
--- OLD STUFF
-function edfield (f)
- local l, t
- if (type_string (f.prompt) or type_number (f.prompt)) then
- l = iuplabel {title = f.prompt}
- else
- error ("parameter prompt has wrong value or is not initialized")
- end
- if f.value then
- t = iuptext {value = f.value}
- else
- t = iuptext {value = f.nvalue}
- end
- if t and l then
- return edhbox {l, t}
- else
- return nil
- end
-end
-
-
--- ###############
-IUPVBOX = {parent = COMPOSITION}
-
-function IUPVBOX:CreateBoxElement ()
- return iupCreateVbox ()
-end
-
-function iupvbox (o)
- return IUPVBOX:Constructor (o)
-end
-iup.vbox = iupvbox
-
--- OLD STUFF
-function edvbox (o)
- o.filled = IUP_YES
- return IUPVBOX:Constructor (o)
-end
-
-
--- ###############
-IUPZBOX = {parent = COMPOSITION}
-
-function IUPZBOX:CreateBoxElement ()
- return iupCreateZbox ()
-end
-
-function iupzbox (obj)
- local handle = IUPZBOX:Constructor (obj)
- local i = 1
- while obj[i] do
- iupSetName(handle[i])
- i = i+1
- end
- return handle
-end
-iup.zbox = iupzbox
-
-
--- ###############
-IUPFILL = {parent = WIDGET}
-
-function IUPFILL:CreateIUPelement (obj)
- return iupCreateFill ()
-end
-
-function iupfill (o)
- return IUPFILL:Constructor (o)
-end
-iup.fill = iupfill
-
-
--- ###############
-IUPBUTTON = {parent = WIDGET, type = {title = type_string}}
-
-function IUPBUTTON:CreateIUPelement (obj)
- if not obj.title and obj.image then
- obj.title=''
- end
- return iupCreateButton(obj.title)
-end
-
-function iupbutton (o)
- return IUPBUTTON:Constructor (o)
-end
-iup.button = iupbutton
-
-
--- ###############
-IUPTEXT = {parent = WIDGET}
-
-function IUPTEXT:CreateIUPelement (obj)
- return iupCreateText()
-end
-
-function iuptext (o)
- return IUPTEXT:Constructor (o)
-end
-iup.text = iuptext
-
-
--- ###############
-IUPMULTILINE = {parent = IUPTEXT}
-
-function IUPMULTILINE:CreateIUPelement (obj)
- return iupCreateMultiLine()
-end
-
-function iupmultiline (o)
- return IUPMULTILINE:Constructor (o)
-end
-iup.multiline = iupmultiline
-
-
--- ###############
-IUPLABEL = {parent = WIDGET, type = {title = type_string}}
-
-function IUPLABEL:CreateIUPelement (obj)
- if not obj.title and obj.image then
- obj.title=''
- end
- return iupCreateLabel (obj.title)
-end
-
-function iuplabel (o)
- return IUPLABEL:Constructor (o)
-end
-iup.label = iuplabel
-
-
--- ###############
-IUPTOGGLE = {parent = IUPBUTTON}
-
-function IUPTOGGLE:CreateIUPelement (obj)
- return iupCreateToggle (obj.title)
-end
-
-function iuptoggle (o)
- return IUPTOGGLE:Constructor (o)
-end
-iup.toggle = iuptoggle
-
-
--- ###############
-IUPITEM = {parent = IUPBUTTON}
-
-function IUPITEM:CreateIUPelement (obj)
- return iupCreateItem (obj.title)
-end
-
-function iupitem (o)
- return IUPITEM:Constructor (o)
-end
-iup.item = iupitem
-
-
--- ###############
-IUPSUBMENU = {parent = WIDGET, type = {type_menu; title = type_string}}
-
-function IUPSUBMENU:CreateIUPelement (obj)
- local h = iupCreateSubmenu (obj.title, obj[1])
- obj[1].IUP_parent = h
- return h
-end
-
-function iupsubmenu (o)
- return IUPSUBMENU:Constructor (o)
-end
-iup.submenu = iupsubmenu
-
-
--- ###############
-IUPSEPARATOR = {parent = WIDGET}
-
-function IUPSEPARATOR:CreateIUPelement (obj)
- return iupCreateSeparator ()
-end
-
-function iupseparator (o)
- return IUPSEPARATOR:Constructor (o)
-end
-iup.separator = iupseparator
-
-
--- ###############
-IUPFILEDLG = {parent = WIDGET}
-
-function IUPFILEDLG:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-function IUPFILEDLG:CreateIUPelement ()
- return iupCreateFileDlg ()
-end
-
-function iupfiledlg (o)
- return IUPFILEDLG:Constructor (o)
-end
-iup.filedlg = iupfiledlg
-
-
--- ###############
-IUPMESSAGEDLG = {parent = WIDGET}
-
-function IUPMESSAGEDLG:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-function IUPMESSAGEDLG:CreateIUPelement ()
- return iupCreateMessageDlg ()
-end
-
-function iupmessagedlg (o)
- return IUPMESSAGEDLG:Constructor (o)
-end
-iup.messagedlg = iupmessagedlg
-
-
--- ###############
-IUPCOLORDLG = {parent = WIDGET}
-
-function IUPCOLORDLG:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-function IUPCOLORDLG:CreateIUPelement ()
- return iupCreateColorDlg ()
-end
-
-function iupcolordlg (o)
- return IUPCOLORDLG:Constructor (o)
-end
-iup.colordlg = iupcolordlg
-
-
--- ###############
-IUPFONTDLG = {parent = WIDGET}
-
-function IUPFONTDLG:popup (x, y)
- return IupPopup (self, x, y)
-end
-
-function IUPFONTDLG:CreateIUPelement ()
- return iupCreateFontDlg ()
-end
-
-function iupfontdlg (o)
- return IUPFONTDLG:Constructor (o)
-end
-iup.fontdlg = iupfontdlg
-
-
--- ###############
-IUPUSER = {parent = WIDGET}
-
-function IUPUSER:CreateIUPelement ()
- return iupCreateUser ()
-end
-
-function iupuser ()
- return IUPUSER:Constructor ()
-end
-iup.user = iupuser
-
-
--- ###############
-IUPFRAME = {parent = WIDGET, type = {type_widget}}
-
-function IUPFRAME:CreateIUPelement (obj)
- local h = iupCreateFrame (obj[1])
- obj[1].IUP_parent = h
- return h
-end
-
-function iupframe (o)
- return IUPFRAME:Constructor (o)
-end
-iup.frame = iupframe
-
-
--- ###############
-IUPCANVAS = {parent = WIDGET}
-
-function IUPCANVAS:CreateIUPelement (obj)
- return iupCreateCanvas ()
-end
-
-function iupcanvas (o)
- return IUPCANVAS:Constructor (o)
-end
-iup.canvas = iupcanvas
-
-
--- ###############
-IUPLIST = {parent = WIDGET}
-
-function IUPLIST:CreateIUPelement (obj)
- return iupCreateList ()
-end
-
-function IUPLIST:get(index)
- if type (index) == 'number' then
- return IupGetAttribute (self.handle, ""..index)
- else
- return WIDGET.get(self, index)
- end
-end
-
-function IUPLIST:set (index, value)
- if type (index) == 'number' then
- if (type_string (value) or type_number (value)) then
- return IupSetAttribute (self.handle, ""..index, ""..value)
- elseif value == nil then
- return IupSetAttribute (self.handle, ""..index, value)
- end
- end
- return WIDGET.set(self, index, value)
-end
-
-function iuplist (o)
- return IUPLIST:Constructor (o)
-end
-iup.list = iuplist
-
-
--- ###############
-IUPIMAGE = {parent = WIDGET}
-
-function IUPIMAGE:checkParams (obj)
- local i = 1
- while obj[i] do
- local j = 1
- while obj[i][j] do
- if type (obj[i][j]) ~= 'number' then
- error ("non-numeric value in image definition")
- end
- j = j + 1
- end
-
- if obj.width and (j - 1) ~= obj.width then
- error ("inconsistent image lenght")
- else
- obj.width = j - 1
- end
-
- i = i + 1
- end
-
- obj.height = i - 1
-end
-
-function IUPIMAGE:CreateIUPelement (obj)
- local handle = iupCreateImage (obj.width, obj.height, obj)
- if type (obj.colors) == 'table' then
- local i = 1
- while obj.colors[i] do
- IupSetAttribute (handle, i, obj.colors[i])
- i = i + 1
- end
- end
- return handle
-end
-
-function iupimage (o)
- return IUPIMAGE:Constructor (o)
-end
-iup.image = iupimage
-
-
-IUPIMAGERGB = {parent = WIDGET}
-
-function IUPIMAGERGB:CreateIUPelement (obj)
- return iupCreateImageRGB(obj.width, obj.height, obj.pixels)
-end
-
-function iupimagergb (o)
- return IUPIMAGERGB:Constructor (o)
-end
-iup.imagergb = iupimagergb
-
-
-IUPIMAGERGBA = {parent = WIDGET}
-
-function IUPIMAGERGBA:CreateIUPelement (obj)
- return iupCreateImageRGBA(obj.width, obj.height, obj.pixels)
-end
-
-function iupimagergba (o)
- return IUPIMAGERGBA:Constructor (o)
-end
-iup.imagergba = iupimagergba
-
-
--- #################################################################################
--- Callbacks
--- #################################################################################
-
-
--- global list of callbacks
--- index is the Lua callback name
--- each callback contains the full name, and the C callback
-iup_callbacks =
-{
- action = {"ACTION", nil},
- actioncb = {"ACTION_CB", nil},
- getfocus = {"GETFOCUS_CB", iup_getfocus_cb},
- killfocus = {"KILLFOCUS_CB", iup_killfocus_cb},
- focus = {"FOCUS_CB", iup_focus_cb},
- k_any = {"K_ANY", iup_k_any},
- help = {"HELP_CB", iup_help_cb},
- caretcb = {"CARET_CB", iup_caret_cb},
- keypress = {"KEYPRESS_CB", iup_keypress_cb},
- scroll = {"SCROLL_CB", iup_scroll_cb},
- trayclick = {"TRAYCLICK_CB", iup_trayclick_cb},
- close = {"CLOSE_CB", iup_close_cb},
- open = {"OPEN_CB", iup_open_cb},
- showcb = {"SHOW_CB", iup_show_cb},
- mapcb = {"MAP_CB", iup_map_cb},
- dropfiles = {"DROPFILES_CB", iup_dropfiles_cb},
- menuclose = {"MENUCLOSE_CB", iup_menuclose_cb},
- highlight = {"HIGHLIGHT_CB", iup_highlight_cb},
- wom = {"WOM_CB", iup_wom_cb},
- wheel = {"WHEEL_CB", iup_wheel_cb},
- button = {"BUTTON_CB", iup_button_cb},
- resize = {"RESIZE_CB", iup_resize_cb},
- motion = {"MOTION_CB", iup_motion_cb},
- enterwindow = {"ENTERWINDOW_CB", iup_enterwindow_cb},
- leavewindow = {"LEAVEWINDOW_CB", iup_leavewindow_cb},
- edit = {"EDIT_CB", iup_edit_cb},
- multiselect = {"MULTISELECT_CB", iup_multiselect_cb},
- filecb = {"FILE_CB", iup_file_cb},
- mdiactivatecb = {"MDIACTIVATE_CB", iup_mdiactivate_cb},
-}
-
-iup_callbacks.action.toggle = iup_action_toggle
-iup_callbacks.action.multiline = iup_action_text
-iup_callbacks.action.text = iup_action_text
-iup_callbacks.action.button = iup_action_button
-iup_callbacks.action.list = iup_action_list
-iup_callbacks.action.item = iup_action_button
-iup_callbacks.action.canvas = iup_action_canvas
-
--- must set here because it is also used elsewhere with a different signature
-iup_callbacks.actioncb.timer = iup_action_timer
-
--- aliases for the full names
-iup_callbacks.action_cb = iup_callbacks.actioncb
-iup_callbacks.getfocus_cb = iup_callbacks.getfocus
-iup_callbacks.killfocus_cb = iup_callbacks.killfocus
-iup_callbacks.focus_cb = iup_callbacks.focus
-iup_callbacks.k_any = iup_callbacks.k_any
-iup_callbacks.help_cb = iup_callbacks.help
-iup_callbacks.caret_cb = iup_callbacks.caretcb
-iup_callbacks.keypress_cb = iup_callbacks.keypress
-iup_callbacks.scroll_cb = iup_callbacks.scroll
-iup_callbacks.trayclick_cb = iup_callbacks.trayclick
-iup_callbacks.close_cb = iup_callbacks.close
-iup_callbacks.open_cb = iup_callbacks.open
-iup_callbacks.show_cb = iup_callbacks.showcb
-iup_callbacks.map_cb = iup_callbacks.mapcb
-iup_callbacks.dropfiles_cb = iup_callbacks.dropfiles
-iup_callbacks.menuclose_cb = iup_callbacks.menuclose
-iup_callbacks.highlight_cb = iup_callbacks.highlight
-iup_callbacks.wom_cb = iup_callbacks.wom
-iup_callbacks.wheel_cb = iup_callbacks.wheel
-iup_callbacks.button_cb = iup_callbacks.button
-iup_callbacks.resize_cb = iup_callbacks.resize
-iup_callbacks.motion_cb = iup_callbacks.motion
-iup_callbacks.enterwindow_cb = iup_callbacks.enterwindow
-iup_callbacks.leavewindow_cb = iup_callbacks.leavewindow
-iup_callbacks.edit_cb = iup_callbacks.edit
-iup_callbacks.multiselect_cb = iup_callbacks.multiselect
-iup_callbacks.mdiactivate_cb = iup_callbacks.mdiactivatecb
-iup_callbacks.file_cb = iup_callbacks.filecb
-IUPCOLORBROWSER = {parent = WIDGET}
-
-function IUPCOLORBROWSER:CreateIUPelement(obj)
- return iupCreateColorBrowser(obj)
-end
-
-function iupcolorbrowser (o)
- return IUPCOLORBROWSER:Constructor (o)
-end
-iup.colorbrowser = iupcolorbrowser
-
-
-iup_callbacks.drag = {"DRAG_CB", iup_colorbrowser_drag_cb}
-iup_callbacks.change = {"CHANGE_CB", iup_colorbrowser_change_cb}
-
-iup_callbacks.drag_cb = iup_callbacks.drag
-iup_callbacks.change_cb = iup_callbacks.change
-IUPCELLS = {parent = WIDGET}
-
-function IUPCELLS:CreateIUPelement( obj )
- return iupCreateCells()
-end
-
-function IUPCELLS:redraw()
- self.repaint = IUP_YES
-end
-
-function iupcells(o)
- return IUPCELLS:Constructor(o)
-end
-iup.cells = iupcells
-
-
--- iup_callbacks.draw_cb = iup_callbacks.draw = {"DRAW_CB", iup_mat_draw_cb} -- same callback at IupMatrix
-
-iup_callbacks.mouseclick = {"MOUSECLICK_CB", iup_cells_mouseclick_cb}
-iup_callbacks.mousemotion = {"MOUSEMOTION_CB", iup_cells_mousemotion_cb}
-iup_callbacks.scrolling = {"SCROLLING_CB", iup_cells_scrolling_cb}
-iup_callbacks.width = {"WIDTH_CB", iup_cells_width_cb}
-iup_callbacks.height = {"HEIGHT_CB", iup_cells_height_cb}
-iup_callbacks.nlines = {"NLINES_CB", iup_cells_nlines_cb}
-iup_callbacks.ncols = {"NCOLS_CB", iup_cells_ncols_cb}
-iup_callbacks.hspan = {"HSPAN_CB", iup_cells_hspan_cb}
-iup_callbacks.vspan = {"VSPAN_CB", iup_cells_vspan_cb}
-
-iup_callbacks.mouseclick_cb = iup_callbacks.mouseclick
-iup_callbacks.mousemotion_cb = iup_callbacks.mousemotion
-iup_callbacks.scrolling_cb = iup_callbacks.scrolling
-iup_callbacks.width_cb = iup_callbacks.width
-iup_callbacks.height_cb = iup_callbacks.height
-iup_callbacks.nlines_cb = iup_callbacks.nlines
-iup_callbacks.ncols_cb = iup_callbacks.ncols
-iup_callbacks.hspan_cb = iup_callbacks.hspan
-iup_callbacks.vspan_cb = iup_callbacks.vspan
-IUPCOLORBAR = {parent = WIDGET}
-
-function IUPCOLORBAR:CreateIUPelement(obj)
- return iupCreateColorbar(obj)
-end
-
-function iupcolorbar (o)
- return IUPCOLORBAR:Constructor (o)
-end
-iup.colorbar = iupcolorbar
-
-
-iup_callbacks.cellcb = {"CELL_CB", iup_colorbar_cell_cb}
-iup_callbacks.selectcb = {"SELECT_CB", iup_colorbar_select_cb}
-iup_callbacks.switchcb = {"SWITCH_CB", iup_colorbar_switch_cb}
-iup_callbacks.extendedcb = {"EXTENDED_CB", iup_colorbar_extended_cb}
-
-iup_callbacks.cell_cb = iup_callbacks.cellcb
-iup_callbacks.select_cb = iup_callbacks.selectcb
-iup_callbacks.switch_cb = iup_callbacks.switchcb
-iup_callbacks.extended_cb = iup_callbacks.extendedcb
-IUPDIAL = {parent = WIDGET}
-
-function IUPDIAL:CreateIUPelement (obj)
- return iupCreateDial (obj[1])
-end
-
-function iupdial (o)
- return IUPDIAL:Constructor (o)
-end
-iup.dial = iupdial
-
-iup_callbacks.mousemove.dial = iup_val_mousemove_cb -- same callback at IupVal
-
--- iup_callbacks.buttonpress = {"BUTTON_PRESS_CB", iup_val_button_press_cb} -- same callback at IupVal
--- iup_callbacks.buttonrelease = {"BUTTON_RELEASE_CB", iup_val_button_release_cb} -- same callback at IupVal
-IUPGAUGE = {parent = WIDGET}
-
-function IUPGAUGE:CreateIUPelement (obj)
- return iupCreateGauge ()
-end
-
-function iupgauge (o)
- return IUPGAUGE:Constructor (o)
-end
-iup.gauge = iupgauge
-IUPMATRIX = {parent = WIDGET}
-
-function IUPMATRIX:CreateIUPelement (obj)
- return iupCreateMatrix ()
-end
-
-function IUPMATRIX:setcell(l,c,val)
- IupSetAttribute(self,l..":"..c,val)
-end
-
-function IUPMATRIX:getcell(l,c,val)
- return IupGetAttribute(self,l..":"..c)
-end
-
-function iupmatrix (o)
- return IUPMATRIX:Constructor (o)
-end
-iup.matrix = iupmatrix
-
-
-iup_callbacks.actioncb.matrix = iup_mat_action_cb
-iup_callbacks.mousemove.matrix = iup_mat_mousemove_cb
-
-iup_callbacks.edition = {"EDITION_CB", iup_mat_edition_cb}
-iup_callbacks.drop = {"DROP_CB", iup_mat_drop_cb}
-iup_callbacks.dropselect = {"DROPSELECT_CB", iup_mat_dropselect_cb}
-iup_callbacks.enteritem = {"ENTERITEM_CB", iup_mat_enteritem_cb}
-iup_callbacks.leaveitem = {"LEAVEITEM_CB", iup_mat_leaveitem_cb}
-iup_callbacks.click = {"CLICK_CB", iup_mat_click_cb}
-iup_callbacks.scrolltop = {"SCROLLTOP_CB", iup_mat_scrolltop_cb}
-iup_callbacks.valuecb = {"VALUE_CB", iup_mat_value_cb}
-iup_callbacks.draw = {"DRAW_CB", iup_mat_draw_cb}
-iup_callbacks.dropcheck = {"DROPCHECK_CB", iup_mat_dropcheck_cb}
-iup_callbacks.fgcolorcb = {"FGCOLOR_CB", iup_mat_fgcolor_cb}
-iup_callbacks.bgcolorcb = {"BGCOLOR_CB", iup_mat_bgcolor_cb}
-iup_callbacks.value_edit = {"VALUE_EDIT_CB", iup_mat_value_edit_cb}
-iup_callbacks.markedit_cb = {"MARKEDIT_CB", iup_mat_markedit_cb}
-iup_callbacks.mark_cb = {"MARK_CB", iup_mat_mark_cb}
-iup_callbacks.mouse_cb = {"MOUSE_CB", iup_mat_mouse_cb}
-
-iup_callbacks.edition_cb = iup_callbacks.edition
-iup_callbacks.drop_cb = iup_callbacks.drop
-iup_callbacks.dropselect_cb = iup_callbacks.dropselect
-iup_callbacks.enteritem_cb = iup_callbacks.enteritem
-iup_callbacks.leaveitem_cb = iup_callbacks.leaveitem
-iup_callbacks.click_cb = iup_callbacks.click
-iup_callbacks.scrolltop_cb = iup_callbacks.scrolltop
-iup_callbacks.value_cb = iup_callbacks.valuecb
-iup_callbacks.draw_cb = iup_callbacks.draw
-iup_callbacks.dropcheck_cb = iup_callbacks.dropcheck
-iup_callbacks.fgcolor_cb = iup_callbacks.fgcolorcb
-iup_callbacks.bgcolor_cb = iup_callbacks.bgcolorcb
-iup_callbacks.value_edit_cb = iup_callbacks.value_edit
-IUPPPLOT = {parent = WIDGET}
-
-function IUPPPLOT:CreateIUPelement (obj)
- return iupCreatePPlot ()
-end
-
-function iuppplot (o)
- return IUPPPLOT:Constructor (o)
-end
-iup.pplot = iuppplot
-
-iup_callbacks.edit_cb.pplot = iup_pplot_edit_cb
-
-iup_callbacks.editbegin_cb = {"EDITBEGIN_CB", iup_pplot_editbegin_cb}
-iup_callbacks.editend_cb = {"EDITEND_CB", iup_pplot_editend_cb}
-iup_callbacks.select_cb = {"SELECT_CB", iup_pplot_select_cb}
-iup_callbacks.selectbegin_cb = {"SELECTBEGIN_CB", iup_pplot_selectbegin_cb}
-iup_callbacks.selectend_cb = {"SELECTEND_CB", iup_pplot_selectend_cb}
-iup_callbacks.delete_cb = {"DELETE_CB", iup_pplot_delete_cb}
-iup_callbacks.deletebegin_cb = {"DELETEBEGIN_CB", iup_pplot_deletebegin_cb}
-iup_callbacks.deleteend_cb = {"DELETEEND_CB", iup_pplot_deleteend_cb}
-iup_callbacks.predraw_cb = {"PREDRAW_CB", iup_pplot_predraw_cb}
-iup_callbacks.postdraw_cb = {"POSTDRAW_CB", iup_pplot_postdraw_cb}
-IUPSBOX = {parent = WIDGET}
-
-function IUPSBOX:CreateIUPelement (obj)
- return iupCreateSbox(obj[1])
-end
-
-function iupsbox (o)
- return IUPSBOX:Constructor (o)
-end
-iup.sbox = iupsbox
-IUPSPIN = {parent = WIDGET}
-
-function IUPSPIN:CreateIUPelement (obj)
- return iupCreateSpin ()
-end
-
-function iupspin (o)
- return IUPSPIN:Constructor (o)
-end
-iup.spin = iupspin
-
-IUPSPINBOX = {parent = WIDGET}
-
-function IUPSPINBOX:CreateIUPelement (obj)
- return iupCreateSpinbox (obj[1])
-end
-
-function iupspinbox (o)
- return IUPSPINBOX:Constructor (o)
-end
-iup.spinbox = iupspinbox
-
-iup_callbacks.spincb = {"SPIN_CB", iup_spin_cb}
-iup_callbacks.spin_cb = iup_callbacks.spincb
-IUPTABS = {parent = WIDGET}
-
-function IUPTABS:CreateIUPelement (obj)
- return iupCreateTabs (obj, getn(obj))
-end
-
-function iuptabs (o)
- return IUPTABS:Constructor (o)
-end
-iup.tabs = iuptabs
-
-iup_callbacks.tabchange = {"TABCHANGE_CB", iup_tabchange_cb}
-iup_callbacks.tabchange_cb = iup_callbacks.tabchangeIUPTREE = {parent = WIDGET}
-IUPTREEREFERENCETABLE = {} -- Used in C, see luatree.c
-
-function IUPTREE:CreateIUPelement (obj)
- return iupCreateTree ()
-end
-
-function iuptree (o)
- return IUPTREE:Constructor (o)
-end
-iup.tree = iuptree
-
-function TreeSetValueRec(handle, t, id)
-
- if t == nil then return end
-
- local cont = getn(t)
-
- while cont >= 0 do
- if type (t[cont]) == "table" then
- if t[cont].branchname ~= nil then
- IupSetAttribute(handle, "ADDBRANCH"..id, t[cont].branchname)
- else
- IupSetAttribute(handle, "ADDBRANCH"..id, "")
- end
- TreeSetValueRec(handle, t[cont], id+1)
- else
- if t[cont] then
- IupSetAttribute(handle, "ADDLEAF"..id, t[cont])
- end
- end
- cont = cont - 1
- end
-end
-
-function TreeSetValue(handle, t)
- if type(t) ~= "table" then
- IupMessage("TreeLua Error", "Incorrect arguments to function TreeSetValue")
- return
- end
- if t.branchname ~= nil then
- IupSetAttribute(handle, "NAME", t.branchname)
- end
- TreeSetValueRec(handle, t, 0)
-end
-iup.TreeSetValue = TreeSetValue
-
-iup_callbacks.selection = {"SELECTION_CB", iup_tree_selection_cb}
-iup_callbacks.multiselection = {"MULTISELECTION_CB", iup_tree_multiselection_cb}
-iup_callbacks.branchopen = {"BRANCHOPEN_CB", iup_tree_branchopen_cb}
-iup_callbacks.branchclose = {"BRANCHCLOSE_CB", iup_tree_branchclose_cb}
-iup_callbacks.executeleaf = {"EXECUTELEAF_CB", iup_tree_executeleaf_cb}
-iup_callbacks.renamenode = {"RENAMENODE_CB", iup_tree_renamenode_cb}
-iup_callbacks.renamecb = {"RENAME_CB", iup_tree_renamecb_cb}
-iup_callbacks.showrenamecb = {"SHOWRENAME_CB", iup_tree_showrenamecb_cb}
-iup_callbacks.rightclick = {"RIGHTCLICK_CB", iup_tree_rightclick_cb}
-iup_callbacks.dragdrop = {"DRAGDROP_CB", iup_tree_dragdrop_cb}
-
-iup_callbacks.selection_cb = iup_callbacks.selection
-iup_callbacks.multiselection_cb = iup_callbacks.multiselection
-iup_callbacks.branchopen_cb = iup_callbacks.branchopen
-iup_callbacks.branchclose_cb = iup_callbacks.branchclose
-iup_callbacks.executeleaf_cb = iup_callbacks.executeleaf
-iup_callbacks.renamenode_cb = iup_callbacks.renamenode
-iup_callbacks.rename_cb = iup_callbacks.renamecb
-iup_callbacks.showrename_cb = iup_callbacks.showrenamecb
-iup_callbacks.rightclick_cb = iup_callbacks.rightclick
-iup_callbacks.dragdrop_cb = iup_callbacks.dragdrop
-IUPVAL = {parent = WIDGET}
-
-function IUPVAL:CreateIUPelement (obj)
- return iupCreateVal (obj[1])
-end
-
-function iupval (o)
- return IUPVAL:Constructor (o)
-end
-iup.val = iupval
-
-
--- must set here because it is also used elsewhere with a different signature
-iup_callbacks.mousemove = {"MOUSEMOVE_CB", nil}
-iup_callbacks.mousemove_cb = iup_callbacks.mousemove
-iup_callbacks.mousemove.val = iup_val_mousemove_cb
-
-iup_callbacks.buttonpress = {"BUTTON_PRESS_CB", iup_val_button_press_cb}
-iup_callbacks.buttonrelease = {"BUTTON_RELEASE_CB", iup_val_button_release_cb}
-
-iup_callbacks.button_press_cb = iup_callbacks.buttonpress
-iup_callbacks.button_release_cb = iup_callbacks.buttonrelease
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "iuplua.c", "iuplua_api.c", "iuplua_widgets.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "../src", "$(LUA3)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
--- SRCLUA = iuplua.lua
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluacontrols3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "luaval.c", "luadial.c", "luagauge.c", "luagc.c", "luacbox.c", "luacells.c",
- "luacb.c", "luatabs.c", "luamask.c", "luacontrols.c", "luagetparam.c",
- "luamatrix.c", "luatree.c", "luasbox.c", "luaspin.c", "luacolorbar.c"
-}
-fixPackagePath(package.files)
-
--- SRCLUA = luaval.lua luadial.lua luagauge.lua luacb.lua luatabs.lua luamatrix.lua luatree.lua luasbox.lua luaspin.lua luacells.lua
-
-package.includepaths = { "../include", "$(CD)/include", "$(LUA3)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua_pplot3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "luapplot.c"
-}
-fixPackagePath(package.files)
-
--- SRCLUA = luapplot.lua
-
-package.includepaths = { "../include", "$(CD)/include", "$(LUA3)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluagl3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "luaglcanvas.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(LUA3)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluaim3"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "luaim.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(LUA3)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua3exe"
-package.target = "iuplua3"
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "exe"
-package.linkflags = { "static-runtime" }
-
-package.files =
-{
- "iupluaexe.c"
-}
-fixPackagePath(package.files)
-
--- SRCLUA = console.lua
-
-package.includepaths = { "../include", "$(LUA3)/include", "$(CD)/include", "$(IM)/include" }
-package.defines = {"IUPLUA_USELOH"}
-package.links = { "imlua3", "cdluaiup3", "cdlua3",
- "iupluagl3", "iupluaim3", "iupluacontrols3", "iuplua3",
- "lualib", "lua",
- "iupgl", "iupim", "iupcontrols",
- "cdiup", "cd", "iup", "im" }
-package.libpaths = { "../lib", "$(IM)/lib", "$(CD)/lib", "$(LUA3)/lib" }
-
-if (options.os == "windows") then
- tinsert(package.links, { "comctl32", "ole32", "opengl32", "glu32", "glaux" })
-else
- tinsert(package.links, { "GLU", "GL", "Xm", "Xpm", "Xmu", "Xt", "Xext", "X11", "m" })
- tinsert(package.libpaths, { "/usr/X11R6/lib" })
-end
-
----------------------------------------------------------------------
-------------------------------------------------------------------------------
--- Button class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "button",
- parent = WIDGET,
- creation = "S-",
- callback = {
- action = "",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Button(arg.title)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Canvas class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "canvas",
- parent = WIDGET,
- creation = "-",
- callback = {
- action = "ff",
- button_cb = "nnnns",
- enterwindow_cb = "",
- leavewindow_cb = "",
- motion_cb = "nns",
- resize_cb = "nn",
- scroll_cb = "nff",
- keypress_cb = "nn",
- wom_cb = "n",
- wheel_cb = "fnns",
- mdiactivate_cb = "",
- focus_cb = "n",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Canvas()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Cbox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "cbox",
- parent = WIDGET,
- creation = "v",
- callback = {},
- include = "iupcbox.h",
- funcname = "Cboxv",
- createfunc = [[
-static int Cboxv(lua_State *L)
-{
- Ihandle **hlist = iuplua_checkihandle_array(L, 1);
- Ihandle *h = IupCboxv(hlist);
- iuplua_plugstate(L, h);
- iuplua_pushihandle_raw(L, h);
- free(hlist);
- return 1;
-}
- ]],
-}
-
-function ctrl.createElement(class, arg)
- return Cboxv(arg)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Cells class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "cells",
- parent = WIDGET,
- creation = "",
- callback = {
- mouseclick_cb = "nnnnnns",
- mousemotion_cb = "nnnns",
- scrolling_cb = "nn",
--- draw_cb = "nnnnnnn", -- already registered by the matrix
- width_cb = "n",
- height_cb = "n",
- nlines_cb = "",
- ncols_cb = "",
- hspan_cb = "nn",
- vspan_cb = "nn",
- },
- include = "iupcells.h"
-}
-
-function ctrl.redraw(handle)
- handle.repaint = "YES"
-end
-
-function ctrl.createElement(class, arg)
- return Cells()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Colorbar class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "colorbar",
- parent = WIDGET,
- creation = "",
- callback = {
- select_cb = "nn",
- cell_cb = {"n", ret = "s"},
- switch_cb = "nn",
- extended_cb = "n",
- },
- funcname = "Colorbar",
- include = "iupcolorbar.h",
-}
-
-function ctrl.createElement(class, arg)
- return Colorbar(arg.action)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- ColorBrowser class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "colorbrowser",
- parent = WIDGET,
- creation = "",
- callback = {
- drag_cb = "ccc",
- change_cb = "ccc",
- },
- funcname = "ColorBrowser",
- include = "iupcb.h",
-}
-
-function ctrl.createElement(class, arg)
- return ColorBrowser(arg.action)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- ColorDlg class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "colordlg",
- parent = WIDGET,
- creation = "",
- funcname = "ColorDlg",
- callback = {}
-}
-
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-function ctrl.createElement(class, arg)
- return ColorDlg()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-
--- Utilities
-iupluacmd = {}
-
-function iupluacmd.printtable(t)
- local n,v = next(t, nil)
- print("--printtable Start--")
- while n ~= nil do
- print(tostring(n).."="..tostring(v))
- n,v = next(t, n)
- end
- print("--printtable End--")
-end
-
-function iupluacmd.print_version_info()
- print(_VERSION .. " " .. _COPYRIGHT)
- if (im) then print("IM " .. im._VERSION .. " " .. im._COPYRIGHT) end
- if (cd) then print("CD " .. cd._VERSION .. " " .. cd._COPYRIGHT) end
- print("IUP " .. iup._VERSION .. " " .. iup._COPYRIGHT)
- print("")
- print("IUP Info")
- print(" System: " .. iup.GetGlobal("SYSTEM"))
- print(" System Version: " .. iup.GetGlobal("SYSTEMVERSION"))
- local mot = iup.GetGlobal("MOTIFVERSION")
- if (mot) then print(" Motif Version: ", mot) end
- print(" Screen Size: " .. iup.GetGlobal("SCREENSIZE"))
- print(" Screen Depth: " .. iup.GetGlobal("SCREENDEPTH"))
- if (iup.GL_VENDOR) then print(" OpenGL Vendor: " .. iup.GL_VENDOR) end
- if (iup.GL_RENDERER) then print(" OpenGL Renderer: " .. iup.GL_RENDERER) end
- if (iup.GL_VERSION) then print(" OpenGL Version: " .. iup.GL_VERSION) end
-end
-
--- IUPLUA Full Application
-
-iupluacmd.lastfilename = nil -- Last file open
-iupluacmd.mlCode = iup.multiline{expand="YES", size="200x120", font="COURIER_NORMAL_10"}
-iupluacmd.lblPosition = iup.label{title="0:0", size="50x"}
-iupluacmd.lblFileName = iup.label{title="", size="50x", expand="HORIZONTAL"}
-
-function iupluacmd.mlCode:caret_cb(lin, col)
- iupluacmd.lblPosition.title = lin..":"..col
-end
-
-iupluacmd.butExecute = iup.button{size="50x15", title="Execute",
- action="iup.dostring(iupluacmd.mlCode.value)"}
-iupluacmd.butClearCommands = iup.button{size="50x15", title="Clear",
- action="iupluacmd.mlCode.value='' iupluacmd.lblFileName.title = '' iupluacmd.lastfilename = nil"}
-iupluacmd.butLoadFile = iup.button{size="50x15", title="Load..."}
-iupluacmd.butSaveasFile = iup.button{size="50x15", title="Save As..."}
-iupluacmd.butSaveFile = iup.button{size="50x15", title="Save"}
-
-iupluacmd.butSaveFile.action = function()
- if (iupluacmd.lastfilename == nil) then
- iupluacmd.butSaveasFile:action()
- else
- newfile = io.open(iupluacmd.lastfilename, "w+")
- if (newfile ~= nil) then
- newfile:write(iupluacmd.mlCode.value)
- newfile:close()
- else
- error ("Cannot Save file "..filename)
- end
- end
-end
-
-iupluacmd.butSaveasFile.action = function()
- local fd = iup.filedlg{dialogtype="SAVE", title="Save File",
- filter="*.lua", filterinfo="Lua files",allownew=yes}
- fd:popup(iup.LEFT, iup.LEFT)
- local status = fd.status
- iupluacmd.lastfilename = fd.value
- iupluacmd.lblFileName.title = iupluacmd.lastfilename
- fd:destroy()
- if status ~= "-1" then
- if (iupluacmd.lastfilename == nil) then
- error ("Cannot Save file "..filename)
- end
- local newfile=io.open(iupluacmd.lastfilename, "w+")
- if (newfile ~= nil) then
- newfile:write(iupluacmd.mlCode.value)
- newfile:close(newfile)
- else
- error ("Cannot Save file")
- end
- end
-end
-
-iupluacmd.butLoadFile.action = function ()
- local fd=iup.filedlg{dialogtype="OPEN", title="Load File",
- filter="*.lua", filterinfo="Lua Files", allownew="NO"}
- fd:popup(iup.CENTER, iup.CENTER)
- local status = fd.status
- local filename = fd.value
- fd:destroy()
- if (status == "-1") or (status == "1") then
- if (status == "1") then
- error ("Cannot load file "..filename)
- end
- else
- local newfile = io.open (filename, "r")
- if (newfile == nil) then
- error ("Cannot load file "..filename)
- else
- iupluacmd.mlCode.value=newfile:read("*a")
- newfile:close (newfile)
- iupluacmd.lastfilename = filename
- iupluacmd.lblFileName.title = iupluacmd.lastfilename
- end
- end
-end
-
-iupluacmd.vbxConsole = iup.vbox
-{
- iup.frame{iup.hbox{iup.vbox{iupluacmd.butLoadFile,
- iupluacmd.butSaveFile,
- iupluacmd.butSaveasFile,
- iupluacmd.butClearCommands,
- iupluacmd.butExecute;
- margin="0x0", gap="10"},
- iup.vbox{iupluacmd.lblFileName,
- iupluacmd.mlCode,
- iupluacmd.lblPosition;
- alignment = "ARIGHT"};
- alignment="ATOP"}; title="Commands"}
- ;alignment="ACENTER", margin="5x5", gap="5"
-}
-
--- Main Menu Definition.
-
-iupluacmd.mnuMain = iup.menu
-{
- iup.submenu
- {
- iup.menu
- {
- iup.item{title="Exit", action="return iup.CLOSE"}
- }; title="File"
- },
- iup.submenu{iup.menu
- {
- iup.item{title="Print Version Info...", action=iupluacmd.print_version_info},
- iup.item{title="About...", action="iupluacmd.dlgAbout:popup(iup.CENTER, iup.CENTER)"}
- };title="Help"}
-}
-
--- Main Dialog Definition.
-
-iupluacmd.dlgMain = iup.dialog{iupluacmd.vbxConsole;
- title="IupLua Console",
- menu=iupluacmd.mnuMain,
- defaultenter=iupluacmd.butExecute,
- close_cb = "return iup.CLOSE"}
-
--- About Dialog Definition.
-
-iupluacmd.dlgAbout = iup.dialog
-{
- iup.vbox
- {
- iup.label{title="IupLua5 Console"},
- iup.fill{size="5"},
- iup.fill{size="5"},
- iup.frame
- {
- iup.vbox
- {
- iup.label{title="Tecgraf/PUC-Rio"},
- iup.label{title="iup@tecgraf.puc-rio.br"}
- }
- },
- iup.fill{size="5"},
- iup.button{title="OK", action="return iup.CLOSE", size="50X20"}
- ;margin="10x10", alignment="ACENTER"
- }
- ;maxbox="NO", minbox="NO", resize="NO", title="About"
-}
-
--- Displays the Main Dialog
-
-iupluacmd.dlgMain:show()
-iup.SetFocus(iupluacmd.mlCode)
-
-iup.MainLoop()
-
-iupluacmd.dlgMain:destroy()
-iupluacmd.dlgAbout:destroy()
-----------------------------------------------------------------------------
--- Callback return values
-----------------------------------------------------------------------------
-IGNORE = -1
-DEFAULT = -2
-CLOSE = -3
-CONTINUE = -4
-
-----------------------------------------------------------------------------
--- IupPopup e IupShowXY
-----------------------------------------------------------------------------
-CENTER = 65535
-LEFT = 65534
-RIGHT = 65533
-MOUSEPOS = 65532
-CURRENT = 65531
-CENTERPARENT = 65530
-TOP = LEFT
-BOTTOM = RIGHT
-ANYWHERE = CURRENT
-
-----------------------------------------------------------------------------
--- Scrollbar
-----------------------------------------------------------------------------
-SBUP = 0
-SBDN = 1
-SBPGUP = 2
-SBPGDN = 3
-SBPOSV = 4
-SBDRAGV = 5
-SBLEFT = 6
-SBRIGHT = 7
-SBPGLEFT = 8
-SBPGRIGHT = 9
-SBPOSH = 10
-SBDRAGH = 11
-
-----------------------------------------------------------------------------
--- SHOW_CB
-----------------------------------------------------------------------------
-SHOW = 0
-RESTORE = 1
-MINIMIZE = 2
-MAXIMIZE = 3
-HIDE = 4
-
-----------------------------------------------------------------------------
--- BUTTON_CB
-----------------------------------------------------------------------------
-BUTTON1 = string.byte('1')
-BUTTON2 = string.byte('2')
-BUTTON3 = string.byte('3')
-BUTTON4 = string.byte('4')
-BUTTON5 = string.byte('5')
-
-----------------------------------------------------------------------------
--- IupOpen
-----------------------------------------------------------------------------
-ERROR = 1
-NOERROR = 0
-OPENED = -1
-INVALID = -1
-------------------------------------------------------------------------------
--- Template to create control classes for IupLua5
--- The Lua module is used by the "generator.lua" to build a C module,
--- and loaded during iuplua_open to initialize the control.
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "mycontrol", -- name of the control, used in the control creation: iup.mycontrol{}
- -- also used for the generated C module
- parent = WIDGET, -- used to define a few methods used fro creation and set attribute
- creation = "nn", -- the creation parameters in Lua
- -- "n" = int
- -- "d" = double
- -- "s" = char*
- -- "S" = optional char*, can be nil
- -- "i" = Ihandle*
- -- "-" = NULL, no parameters in Lua, but a NULL parameter in C
- -- "a" = char* array in a table
- -- "t" = int array in a table
- -- "v" = Ihandle* array in a table
-
- funcname = "myControl", -- [optional] name of the function used in C
- -- default is ctrl.nick with first letter uppercase
-
- callback = { -- partial list of callbacks
- -- only the callbacks that are not already defined by other controls needs to be defined
- action = "ff",
- button_cb = "nnnns",
- enterwindow_cb = "",
- leavewindow_cb = "",
- motion_cb = "nns",
- resize_cb = "nn",
- scroll_cb = "nff",
- keypress_cb = "nn",
- wom_cb = "n",
- wheel_cb = "fnns",
- mdiactivate_cb = "",
- focus_cb = "n",
- value_cb = {"nn", ret = "s"}, -- ret is return type, default is n ("int")
-
- -- the following types can be used for callback parameters:
- -- n = "int",
- -- s = "char *",
- -- i = "Ihandle *",
- -- c = "unsigned char ",
- -- d = "double",
- -- f = "float",
- -- v = "Ihandle **",
- --
- -- Other parameters must be implemented in C using the extrafuncs module
-
- -- IMPORTANT: callbacks with the same name in different controls
- -- are assumed to have the same parameters, that's why they are defined only once
- -- When callbacks conflict using the same name, but different parameters
- -- generator.lua must be edited to include the callback in the list of conflicting callbacks
- -- "action" is a common callback that conflicts
- -- In the callback list, just declare the callback with the parameters used in that control.
- }
-
- include = "iupmycontrol.h", -- [optional] header to be included, it is where the creation function is declared.
- extrafuncs = 1, -- [optional] additional module in C called by the initialization function
-
- createfunc = [[ -- [optional] creation function in C,
- -- used if creation parameters needs some interpretation in C
- -- not to be used together with funcname
-#include<stdlib.h>
-static int myControl (lua_State * L)
-{
- xxxx;
- yyyy;
- return 1;
-}
-]]
-
- extracode = [[ -- [optional] extra fucntions to be defined in C.
-int luaopen_iupluamycontrol51(lua_State* L)
-{
- return iupmycontrollua_open(L);
-}
-]]
-
-}
-
--- must be defined so the WIDGET constructor can call it
-function ctrl.createElement(class, arg)
- return myControl()
-end
-
--- here you can add some custom methods to the class
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-iupRegisterWidget(ctrl) -- will make iup.mycontrol available
-iupSetClass(ctrl, "iup widget") -- register the class in the registry
-------------------------------------------------------------------------------
--- Dial class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "dial",
- parent = WIDGET,
- creation = "s",
- callback = {
- mousemove_cb = "d", -- already registered by the val, but has a name conflict
--- button_press_cb = "d", -- already registered by the val
--- button_release_cb = "d", -- already registered by the val
- },
- include = "iupdial.h",
-}
-
-function ctrl.createElement(class, arg)
- return Dial(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Dialog class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "dialog",
- parent = WIDGET,
- creation = "i",
- callback = {
- map_cb = "",
- close_cb = "",
- show_cb = "n",
- trayclick_cb = "nnn",
- dropfiles_cb = "snnn",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Dialog(arg[1])
-end
-
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-function ctrl.showxy(handle, x, y)
- return ShowXY(handle, x, y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- FileDlg class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "filedlg",
- parent = WIDGET,
- creation = "",
- callback = {
- file_cb = "ss",
- },
- funcname = "FileDlg"
-}
-
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-function ctrl.createElement(class, arg)
- return FileDlg()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-
-------------------------------------------------------------------------------
--- Fill class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "fill",
- parent = WIDGET,
- creation = "",
- callback = {}
-}
-
-function ctrl.createElement(class, arg)
- return Fill()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- FontDlg class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "fontdlg",
- parent = WIDGET,
- creation = "",
- funcname = "FontDlg",
- callback = {}
-}
-
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-function ctrl.createElement(class, arg)
- return FontDlg()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-
-------------------------------------------------------------------------------
--- Frame class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "frame",
- parent = WIDGET,
- creation = "i",
- callback = {}
-}
-
-function ctrl.createElement(class, arg)
- return Frame(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Gauge class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "gauge",
- parent = WIDGET,
- creation = "",
- callback = {},
- include = "iupgauge.h",
-}
-
-function ctrl.createElement(class, arg)
- return Gauge(arg.action)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-
-function dofile(f)
- pcall(loadfile(f))
-end
-
--- compatibility functions (with iuplua.lua)
-function iupSetClass(ctrl, name)
- element = ctrl
-end
-
--- dummy functions
-iupluaNewClass = function() end
-iupSetMethod = iupluaNewClass
-iupRegisterWidget = iupluaNewClass
-
-c_types = {
- n = "int",
- s = "char *",
- i = "Ihandle *",
- c = "unsigned char ",
- d = "double",
- f = "float",
- v = "Ihandle **",
-}
-
--- Adjust the callbacks table
-function adjustcallbacktable(c)
- d = {}
- for i,j in pairs(c) do
- if type(j) == "string" then
- d[i] = { j, "IUP_".. string.upper(i)}
- elseif type(j) == "table" then
- d[i] = j
- else
- print("ERROR IN CALLBACK TABLE FORMAT")
- end
- end
- return d
-end
-
-
-function header(o,i)
- io.write [[
-/******************************************************************************
- * Automatically generated file (iuplua5). Please don't change anything. *
- *****************************************************************************/
-
-#include <stdlib.h>
-
-#include <lua.h>
-#include <lauxlib.h>
-
-#include <iup.h>
-#include <iuplua.h>
-]]
- if i then io.write("#include <",i,">\n") end
- io.write('#include "il.h"\n\n\n')
-end
-
-function firstupper(name)
- return string.upper(string.sub(name,1,1)) .. string.sub(name,2,-1)
-end
-
-function write_creation(o, t)
- local aux = {n = 1}
- local u = firstupper(o)
- local v = t.creation
- local c = t.callback
- if t.funcname then
- u = t.funcname
- end
- io.write ("static int ",u,"(lua_State *L)\n")
- io.write ("{\n")
- if t.rettype == nil then io.write(" Ihandle *ih = Iup",u,"(")
- elseif t.rettype == "n" then io.write(" int n = (Iup",u,"(")
- elseif t.rettype == "s" then io.write(" char *s = (Iup",u,"(")
- end
- local max = string.len(v)
- string.gsub(v, "(.)", function(p)
- if p == "n" then io.write("luaL_checkint(L, ",aux.n,")")
- elseif p == "d" then io.write("luaL_number(L, ",aux.n,")")
- elseif p == "s" then io.write("(char *) luaL_checkstring(L, ",aux.n,")")
- elseif p == "S" then io.write("(char *) luaL_optstring(L, ",aux.n,', NULL)')
- elseif p == "i" then io.write("iuplua_checkihandle(L, ",aux.n,")")
- elseif p == "-" then io.write("NULL")
- elseif p == "a" then io.write("iuplua_checkstring_array(L, ",aux.n,")")
- elseif p == "t" then io.write("iuplua_checkint_array(L, ",aux.n,")")
- elseif p == "v" then io.write("iuplua_checkihandle_array(L, ",aux.n,")")
- else io.write("FORMAT '", p, "' NOT SUPPORTED\n")
- end
- if aux.n < max then io.write(", ") end
- aux.n = aux.n + 1
- end)
- io.write(");\n")
-
- io.write(" iuplua_plugstate(L, ih);\n")
- io.write(" iuplua_pushihandle_raw(L, ih);\n")
- io.write(" return 1;\n")
- io.write("}\n\n")
-end
-
-function write_callbacks(o, c)
- local aux = { }
- for i,v in pairs(c) do
- local s = v[1]
- local max = string.len(s)
- aux.n = 0
- io.write("static ")
- if v.ret ~= nil then
- if v.ret == "s" then
- io.write("char * ")
- end
- else
- io.write("int ")
- end
- io.write(o, "_", i, "(Ihandle *self")
- if max > 0 then io.write(", ") end
- string.gsub(s, "(.)", function(p)
- io.write(c_types[p], " p", aux.n)
- aux.n = aux.n + 1
- if aux.n < max then io.write(", ") end
- end)
- io.write(")\n{\n")
- io.write(' lua_State *L = iuplua_call_start(self, "', i, '");')
- aux.n = 0
- string.gsub(s, "(.)", function(p)
- if p == "n" or p == "f" or p == "d" or p == "c" then
- io.write("\n lua_pushnumber(L, p"..aux.n..");")
- elseif p == "s" then
- io.write("\n lua_pushstring(L, p"..aux.n..");")
- elseif p == "i" then
- io.write("\n iuplua_pushihandle(L, p"..aux.n..");")
- else
- io.write("\n ERROR !! ")
- end
- aux.n = aux.n + 1
- end)
- if v.ret ~= nil and v.ret == "s" then
- io.write("\n return iuplua_call_rs(L, " .. max .. ");")
- else
- io.write("\n return iuplua_call(L, " .. max .. ");")
- end
- io.write("\n}\n\n")
- end
-end
-
-function write_initialization(o,t)
- local aux= {n=1}
- local c = t.callback
- local u = firstupper(o)
- if t.extrafuncs then
- io.write('void iuplua_', o,'funcs_open(lua_State *L);\n\n')
- end
- if t.openfuncname then
- io.write("void ", t.openfuncname, "(lua_State * L)\n")
- else
- io.write("int iup", o,"lua_open(lua_State * L)\n")
- end
- io.write("{\n")
- io.write(" iuplua_register(L, ")
- if t.funcname then
- u = t.funcname
- end
- io.write(u, ', "', u,'");\n\n')
-
- for i,v in pairs(c) do
- local type = "NULL"
- if i == "action" or
- i == "action_cb" or
- i == "edit_cb" or
- i == "mousemove_cb" then
- type = '"'..string.lower(o)..'"'
- end
- io.write(' iuplua_register_cb(L, "',string.upper(i),'", (lua_CFunction)',o,'_',i,', ',type,');\n')
- first = 0
- end
- io.write('\n')
-
- if t.extrafuncs then
- io.write(' iuplua_', o,'funcs_open(L);\n\n')
- end
- io.write('#ifdef IUPLUA_USELOH\n')
- io.write('#ifdef TEC_BIGENDIAN\n')
- io.write('#ifdef TEC_64\n')
- io.write('#include "', o,'_be64.loh"\n')
- io.write('#else\n')
- io.write('#include "', o,'_be32.loh"\n')
- io.write('#endif\n')
- io.write('#else\n')
- io.write('#ifdef TEC_64\n')
- io.write('#ifdef WIN64\n')
- io.write('#include "', o,'_le64w.loh"\n')
- io.write('#else\n')
- io.write('#include "', o,'_le64.loh"\n')
- io.write('#endif\n')
- io.write('#else\n')
- io.write('#include "', o,'.loh"\n')
- io.write('#endif\n')
- io.write('#endif\n')
- io.write('#else\n')
- io.write(' iuplua_dofile(L, "', o,'.lua");\n')
- io.write('#endif\n\n')
- io.write(' return 0;\n')
- io.write("}\n\n")
-end
-
-dofile(arg[1])
-element.callback = adjustcallbacktable(element.callback)
-
-io.output(element.nick..".c")
-header(element.nick, element.include)
-write_callbacks(element.nick, element.callback)
-if element.createfunc == nil then
- write_creation(element.nick, element)
-else
- io.write(element.createfunc)
-end
-write_initialization(element.nick, element)
-if element.extracode then
- io.write(element.extracode)
-end
-------------------------------------------------------------------------------
--- GLCanvas class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "glcanvas",
- parent = WIDGET,
- creation = "-",
- funcname = "GLCanvas",
- include = "iupgl.h",
- callback = {
- action = "nn",
- },
- extrafuncs = 1,
- extracode = [[
-int iupgllua_open(lua_State * L)
-{
- if (iuplua_opencall_internal(L))
- IupGLCanvasOpen();
-
- iuplua_changeEnv(L);
- iupglcanvaslua_open(L);
- iuplua_returnEnv(L);
- return 0;
-}
-
-/* obligatory to use require"iupluagl" */
-int luaopen_iupluagl(lua_State* L)
-{
- return iupgllua_open(L);
-}
-
-/* obligatory to use require"iupluagl51" */
-int luaopen_iupluagl51(lua_State* L)
-{
- return iupgllua_open(L);
-}
-
-]]
-}
-
-function ctrl.createElement(class, arg)
- return GLCanvas()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- HBox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "hbox",
- parent = BOX,
- creation = "-",
- callback = {}
-}
-
-function ctrl.append(handle, elem)
- Append(handle, elem)
-end
-
-function ctrl.createElement(class, arg)
- return Hbox()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Image class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "image",
- parent = WIDGET,
- creation = "nns", -- fake definition
- callback = {},
- createfunc = [[
-#include<stdlib.h>
-static int Image (lua_State * L)
-{
- int w, h, i, j;
- char *img;
- Ihandle *image;
-
- h = luaL_getn(L, 1);
- lua_pushnumber(L, 1);
- lua_gettable(L, 1);
- w = luaL_getn(L, -1);
- lua_pop(L, 1);
-
- img = (char *) malloc (h*w);
-
- for (i=1; i<=h; i++)
- {
- lua_pushnumber(L, i);
- lua_gettable(L, 1);
- for (j=1; j<=w; j++)
- {
- int idx = (i-1)*w+(j-1);
- lua_pushnumber(L, j);
- lua_gettable(L, -2);
- img[idx] = (char)lua_tonumber(L, -1);
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
- }
-
- image = IupImage(w,h,img);
- free(img);
-
- w = luaL_getn(L, 2);
-
- for(i=1; i<=w; i++)
- {
- lua_pushnumber(L,i);
- lua_pushnumber(L,i);
- lua_gettable(L, 2);
- IupStoreAttribute(image, (char *) lua_tostring(L,-2), (char *) lua_tostring(L,-1));
- lua_pop(L, 2);
- }
-
- iuplua_plugstate(L, image);
- iuplua_pushihandle_raw(L, image);
- return 1;
-}
-
-]]
-}
-
-function ctrl.createElement(class, arg)
- return Image(arg, arg.colors)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- ImageRGB class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "imagergb",
- parent = WIDGET,
- creation = "nns", -- fake definition
- funcname = "ImageRGB",
- callback = {},
- createfunc = [[
-static int ImageRGB(lua_State *L)
-{
- int w = luaL_checkint(L, 1);
- int h = luaL_checkint(L, 2);
- unsigned char *pixels = iuplua_checkuchar_array(L, 3, w*h*3);
- Ihandle *ih = IupImageRGB(w, h, pixels);
- iuplua_plugstate(L, ih);
- iuplua_pushihandle_raw(L, ih);
- free(pixels);
- return 1;
-}
-
-]]
-}
-
-function ctrl.createElement(class, arg)
- return ImageRGB(arg.width, arg.height, arg.pixels)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- ImageRGBA class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "imagergba",
- parent = WIDGET,
- creation = "nns", -- fake definition
- funcname = "ImageRGBA",
- callback = {},
- createfunc = [[
-static int ImageRGBA(lua_State *L)
-{
- int w = luaL_checkint(L, 1);
- int h = luaL_checkint(L, 2);
- unsigned char *pixels = iuplua_checkuchar_array(L, 3, w*h*4);
- Ihandle *ih = IupImageRGBA(w, h, pixels);
- iuplua_plugstate(L, ih);
- iuplua_pushihandle_raw(L, ih);
- free(pixels);
- return 1;
-}
-
-]]
-}
-
-function ctrl.createElement(class, arg)
- return ImageRGBA(arg.width, arg.height, arg.pixels)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Item class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "item",
- parent = WIDGET,
- creation = "S-",
- callback = {
- action = "",
- highlight_cb = "",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Item(arg.title)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
--- This file is executed with the "iup" table already as the globalindex
-
-------------------------------------------------------------------------------
--- Callback handler
-------------------------------------------------------------------------------
-
-callbacks = {}
-
-function iupCallMethod(name, ...)
- local handle = arg[1] -- always the handle
- local func = handle[name]
- if (not func) then
- return
- end
-
- if type(func) == "function" then
- return func(unpack(arg))
- elseif type(func) == "string" then
- local temp = self
- self = handle
- local result = iup.dostring(func)
- self = temp
- return result
- else
- return iup.ERROR
- end
-end
-
-function RegisterCallback(name, func, type)
- if not callbacks[name] then callbacks[name] = {} end
- local cb = callbacks[name]
- if type then
- cb[type] = func
- else
- cb[1] = func
- end
-end
-
-------------------------------------------------------------------------------
--- Meta Methods
-------------------------------------------------------------------------------
-
-
-local widget_gettable = function(object, index)
- local p = object
- local v
- while 1 do
- v = rawget(p, index)
- if v then return v end
- p = rawget(p, "parent")
- if not p then return nil end
- end
-end
-
-iupNewClass("iup widget")
-iupSetMethod("iup widget", "__index", widget_gettable)
-
-
-local ihandle_gettable = function(handle, index)
- local INDEX = string.upper(index)
- if (callbacks[INDEX]) then
- local object = iupGetWidget(handle)
- if (not object or type(object)~="table") then error("invalid iup handle") end
- return object[index]
- else
- local value = GetAttribute(handle, INDEX)
- if (not value) then
- local object = iupGetWidget(handle)
- if (not object or type(object)~="table") then error("invalid iup handle") end
- return object[index]
- elseif type(value)== "number" or type(value) == "string" then
- local ih = GetHandle(value)
- if ih then return ih
- else return value end
- else
- return value
- end
- end
-end
-
-local ihandle_settable = function(handle, index, value)
- local ti = type(index)
- local tv = type(value)
- local object = iupGetWidget(handle)
- if (not object or type(object)~="table") then error("invalid iup handle") end
- if ti == "number" or ti == "string" then -- check if a valid C name
- local INDEX = string.upper(index)
- local cb = callbacks[INDEX]
- if (cb) then -- if a callback name
- local func = cb[1]
- if (not func) then
- func = cb[GetType(handle)]
- end
- iupSetCallback(handle, INDEX, func, value) -- register the pre-defined C callback
- object[index] = value -- store also in Lua
- elseif iupGetClass(value) == "iup handle" then -- if a iup handle
- local name = ihandle_setname(value)
- StoreAttribute(handle, INDEX, name)
- object[index] = nil -- if there was something in Lua remove it
- elseif tv == "string" or tv == "number" or tv == "nil" then -- if a common value
- StoreAttribute(handle, INDEX, value)
- object[index] = nil -- if there was somthing in Lua remove it
- else
- object[index] = value -- store also in Lua
- end
- else
- object[index] = value -- store also in Lua
- end
-end
-
-iupNewClass("iup handle")
-iupSetMethod("iup handle", "__index", ihandle_gettable)
-iupSetMethod("iup handle", "__newindex", ihandle_settable)
-iupSetMethod("iup handle", "__tostring", ihandle_tostring)
-iupSetMethod("iup handle", "__eq", ihandle_compare) -- implemented in C
-
-
-------------------------------------------------------------------------------
--- Utilities
-------------------------------------------------------------------------------
-
-function ihandle_setname(v) -- used also by radio and zbox
- local name = GetName(v)
- if not name then
- local autoname = string.format("_IUPLUA_NAME(%s)", tostring(v))
- SetHandle(autoname, v)
- return autoname
- end
- return name
-end
-
-function iupRegisterWidget(ctrl) -- called by all the controls initialization functions
- iup[ctrl.nick] = function(arg)
- return ctrl:constructor(arg)
- end
-end
-
-function RegisterHandle(handle, typename)
-
- iupSetClass(handle, "iup handle")
-
- local object = iupGetWidget(handle)
- if not object then
-
- local class = iup[string.upper(typename)]
- if not class then
- class = WIDGET
- end
-
- local object = { parent=class, handle=handle }
- iupSetClass(object, "iup widget")
- iupSetWidget(handle, object)
- end
-
- return handle
-end
-
-------------------------------------------------------------------------------
--- Widget class (top class)
-------------------------------------------------------------------------------
-
-WIDGET = {
- callback = {}
-}
-
-function WIDGET.show(object)
- Show(object.handle)
-end
-
-function WIDGET.hide(object)
- Hide(object.handle)
-end
-
-function WIDGET.map(object)
- Map(object.handle)
-end
-
-function WIDGET.constructor(class, arg)
- local handle = class:createElement(arg)
- local object = {
- parent = class,
- handle = handle
- }
- iupSetClass(handle, "iup handle")
- iupSetClass(object, "iup widget")
- iupSetWidget(handle, object)
- object:setAttributes(arg)
- return handle
-end
-
-function WIDGET.setAttributes(object, arg)
- local handle = object.handle
- for i,v in pairs(arg) do
- if type(i) == "number" and iupGetClass(v) == "iup handle" then
- -- We should not set this or other elements (such as iuptext)
- -- will erroneosly inherit it
- rawset(object, i, v)
- else
- -- this will call settable metamethod
- handle[i] = v
- end
- end
-end
-
--- all the objects in the hierarchy must be "iup widget"
--- Must repeat this call for every new widget
-iupSetClass(WIDGET, "iup widget")
-
-
-------------------------------------------------------------------------------
--- Box class (inherits from WIDGET)
-------------------------------------------------------------------------------
-
-BOX = {
- parent = WIDGET
-}
-
-function BOX.setAttributes(object, arg)
- local handle = rawget(object, "handle")
- local n = table.getn(arg)
- for i = 1, n do
- if iupGetClass(arg[i]) == "iup handle" then
- Append(handle, arg[i])
- end
- end
- WIDGET.setAttributes(object, arg)
-end
-
-iupSetClass(BOX, "iup widget")
-
-
-------------------------------------------------------------------------------
--- Compatibility functions.
-------------------------------------------------------------------------------
-
-error_message_popup = nil
-
-function _ERRORMESSAGE(err)
- if (error_message_popup) then
- error_message_popup.value = err
- else
- local bt = button{title="Ok", size="60", action="error_message_popup = nil; return iup.CLOSE"}
- local ml = multiline{expand="YES", readonly="YES", value=err, size="300x150"}
- local vb = vbox{ml, bt; alignment="ACENTER", margin="10x10", gap="10"}
- local dg = dialog{vb; title="Error Message",defaultesc=bt,defaultenter=bt,startfocus=bt}
- error_message_popup = ml
- dg:popup(CENTER, CENTER)
- dg:destroy()
- error_message_popup = nil
- end
-end
-
-pack = function (...) return arg end
-
-function protectedcall_(f, err)
- if not f then
- _ERRORMESSAGE(err)
- return
- end
- local ret = pack(pcall(f))
- if not ret[1] then
- _ERRORMESSAGE(ret[2])
- return
- else
- table.remove(ret, 1)
- return unpack(ret)
- end
-end
-
-function dostring(s) return protectedcall_(loadstring(s)) end
-function dofile(f) return protectedcall_(loadfile(f)) end
-
-function RGB(r, g, b)
- return string.format("%d %d %d", 255*r, 255*g, 255*b)
-end
-------------------------------------------------------------------------------
--- Label class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "label",
- parent = WIDGET,
- creation = "S",
- callback = {}
-}
-
-function ctrl.createElement(class, arg)
- return Label(arg.title)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- List class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "list",
- parent = WIDGET,
- creation = "-",
- callback = {
- action = "snn",
- multiselect_cb = "s",
- edit_cb = "ns",
- }
-}
-
-function ctrl.createElement(class, arg)
- return List()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Matrix class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "matrix",
- parent = WIDGET,
- creation = "-",
- callback = {
- action_cb = "nnnns",
- click_cb = "nns",
- release_cb = "nns",
- drop_cb = "inn",
- dropcheck_cb = "nn",
- draw_cb = "nnnnnnn", -- fake definitions to be replaced by matrixfuncs module
- dropselect_cb = "nnisnn",
- edition_cb = "nnn",
- enteritem_cb = "nn",
- leaveitem_cb = "nn",
- mousemove_cb = "nn",
- scrolltop_cb = "nn",
- fgcolor_cb = "nn", -- fake definitions to be replaced by matrixfuncs module
- bgcolor_cb = "nn",
- value_cb = {"nn", ret = "s"}, -- ret is return type
- value_edit_cb = "nns",
- mark_cb = "nn",
- markedit_cb = "nnn",
- },
- include = "iupmatrix.h",
- extrafuncs = 1,
-}
-
-function ctrl.createElement(class, arg)
- return Matrix(arg.action)
-end
-
-function ctrl.setcell(handle, l, c, val)
- SetAttribute(handle,l..":"..c,val)
-end
-
-function ctrl.getcell(handle, l, c)
- return GetAttribute(handle,l..":"..c)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Menu class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "menu",
- parent = BOX,
- creation = "-",
- callback = {
- open_cb = "",
- menuclose_cb = "",
- }
-}
-
-function ctrl.popup(handle, x, y)
- Popup(handle, x, y)
-end
-
-function ctrl.append(handle, elem)
- Append(handle, elem)
-end
-
-function ctrl.createElement(class, arg)
- local n = table.getn(arg)
- for i=1,n do
- if type(arg[i]) == "table" then
- itemarg = {}
- for u,v in pairs(arg[i]) do
- if type(u) ~= "number" then
- itemarg[u] = v
- end
- end
- if type(arg[i][1]) == "string" and (type(arg[i][2]) == "function" or type(arg[i][2]) == "string") then
- itemarg.title = arg[i][1]
- itemarg.action = arg[i][2]
- arg[i] = item(itemarg)
- elseif type(arg[i][1]) == "string" and type(arg[i][2]) == "userdata" then
- itemarg[1] = arg[i][2]
- itemarg.title = arg[i][1]
- arg[i] = submenu(itemarg)
- end
- end
- end
- return Menu()
-end
-
-function ctrl.showxy(handle, x, y)
- return ShowXY(handle, x, y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- MessageDlg class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "messagedlg",
- parent = WIDGET,
- creation = "",
- funcname = "MessageDlg",
- callback = {}
-}
-
-function ctrl.popup(handle, x, y)
- Popup(handle,x,y)
-end
-
-function ctrl.destroy(handle)
- return Destroy(handle)
-end
-
-function ctrl.createElement(class, arg)
- return MessageDlg()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-
-------------------------------------------------------------------------------
--- Multiline class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "multiline",
- parent = WIDGET,
- creation = "-",
- callback = {
- action = "ns",
- },
- funcname = "MultiLine",
-}
-
-function ctrl.createElement(class, arg)
- return MultiLine()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- OleControl class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "olecontrol",
- parent = WIDGET,
- creation = "s",
- funcname = "OleControl",
- callback = {},
- include = "iupole.h",
- extracode = [[
-int iupolelua_open(lua_State* L)
-{
- if (iuplua_opencall_internal(L))
- IupOleControlOpen();
-
- iuplua_changeEnv(L);
- iupolecontrollua_open(L);
- iuplua_returnEnv(L);
- return 0;
-}
-
-/* obligatory to use require"iupluaole" */
-int luaopen_iupluaole(lua_State* L)
-{
- return iupolelua_open(L);
-}
-
-/* obligatory to use require"iupluaole51" */
-int luaopen_iupluaole51(lua_State* L)
-{
- return iupolelua_open(L);
-}
-
-]]
-}
-
-function ctrl.createElement(class, arg)
- local ctl = OleControl(arg[1])
-
- -- if luacom is loaded, use it to access methods and properties
- -- of the control
- if luacom then
- local punk = ctl.iunknown
- if punk then
- ctl.com = luacom.MakeLuaCOM(luacom.MakeIUnknown(punk))
- end
- end
-
- return ctl
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- PPlot class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "pplot",
- parent = WIDGET,
- creation = "",
- funcname = "PPlot",
- callback = {
- select_cb = "nnffn",
- selectbegin_cb = "",
- selectend_cb = "",
- predraw_cb = "n", -- fake definitions to be replaced by pplotfuncs module
- postdraw_cb = "n", -- fake definitions to be replaced by pplotfuncs module
- edit_cb = "nnffff", -- fake definitions to be replaced by pplotfuncs module
- editbegin_cb = "",
- editend_cb = "",
- delete_cb = "nnff",
- deletebegin_cb = "",
- deleteend_cb = "",
- },
- include = "iup_pplot.h",
- extrafuncs = 1,
-}
-
-function ctrl.createElement(class, arg)
- return PPlot(arg.action)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "iuplua.c", "scanf.c", "iuplua_api.c", "fontdlg.c",
- "button.c", "canvas.c", "dialog.c", "messagedlg.c",
- "filedlg.c", "fill.c", "frame.c", "hbox.c",
- "item.c", "image.c", "label.c", "menu.c", "multiline.c",
- "list.c", "separator.c", "radio.c", "colordlg.c",
- "submenu.c", "text.c", "toggle.c", "vbox.c", "zbox.c", "timer.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "../src", "$(LUA51)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
---SRCLUA = iuplua.lua constants.lua $(CTRLUA)
---GC = $(addsuffix .c, $(basename $(CTRLUA)))
---$(GC) : %.c : %.lua %.loh generator.lua
--- lua5 generator.lua $<
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluacontrols51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "val.c", "dial.c", "gauge.c", "gc.c", "cbox.c", "cells.c", "getparam.c",
- "colorbrowser.c", "tabs.c", "mask.c", "colorbar.c",
- "matrix.c", "tree.c", "sbox.c", "spin.c", "spinbox.c",
- "controls.c", "mask.c", "treefuncs.c", "matrixfuncs.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(CD)/include", "$(LUA51)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
---SRCLUA = val.lua dial.lua gauge.lua colorbrowser.lua tabs.lua sbox.lua matrix.lua tree.lua spin.lua spinbox.lua
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua_pplot51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "pplot.c", "pplotfuncs.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(CD)/include", "$(LUA51)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
---SRCLUA = pplot.lua
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluagl51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "glcanvas.c", "glcanvasfuncs.c"
-}
-fixPackagePath(package.files)
-
--- SRCLUA = glcanvas.lua
-
-package.includepaths = { "../include", "$(LUA51)/include" }
-package.defines = {"IUPLUA_USELOH"}
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iupluaim51"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.files =
-{
- "iupluaim.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { "../include", "$(LUA51)/include" }
-
----------------------------------------------------------------------
-
-package = newpackage()
-package.name = "iuplua51exe"
-package.target = "iuplua51"
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "exe"
-package.linkflags = { "static-runtime" }
-
-package.files =
-{
- "iupluaexe51.c"
-}
-fixPackagePath(package.files)
-
--- SRCLUA = console.lua
-
-package.includepaths = { "../include", "$(LUA51)/include", "$(CD)/include", "$(IM)/include" }
-
-package.links = { "imlua_process51", "im_process", "imlua_cd51", "imlua51",
- "cdluaiup51", "cdlua51",
- "iupluagl51", "iupluaim51", "iuplua_pplot51.lib", "iupluacontrols51", "iuplua51",
- "lua5.1",
- "iupgl", "iupim", "iup_pplot.lib", "iupcontrols",
- "cdiup", "cd", "iup", "im" }
-package.libpaths = { "../lib", "$(IM)/lib", "$(CD)/lib", "$(LUA51)/lib", }
-
-if (options.os == "windows") then
- tinsert(package.links, { "cdgdiplus", "gdiplus", "comctl32", "opengl32", "glu32", "glaux" })
-else
- tinsert(package.links, { "GLU", "GL", "Xm", "Xpm", "Xmu", "Xt", "Xext", "X11", "m" })
- tinsert(package.libpaths, { "/usr/X11R6/lib" })
-end
-
----------------------------------------------------------------------
-------------------------------------------------------------------------------
--- Radio class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "radio",
- parent = WIDGET,
- creation = "i",
- callback = {}
-}
-
-function ctrl.CreateChildrenNames(obj)
- if obj then
- if obj.parent.parent == BOX then
- local i = 1
- while obj[i] do
- ctrl.CreateChildrenNames (obj[i])
- i = i+1
- end
- elseif obj.parent == IUPFRAME then
- ctrl.CreateChildrenNames (obj[1])
- else
- ihandle_setname(obj)
- end
- end
-end
-
-function ctrl.createElement(class, arg)
- ctrl.CreateChildrenNames(arg[1])
- return Radio(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Sbox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "sbox",
- parent = WIDGET,
- creation = "i",
- callback = {},
- include="iupsbox.h"
-}
-
-function ctrl.createElement(class, arg)
- return Sbox(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Separator class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "separator",
- parent = WIDGET,
- creation = "",
- callback = {}
-}
-
-function ctrl.createElement(class, arg)
- return Separator()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Spin class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "spin",
- parent = WIDGET,
- creation = "",
- callback = {
- spin_cb = "n",
- },
- include = "iupspin.h",
-}
-
-function ctrl.createElement(class, arg)
- return Spin(arg.action)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- SpinBox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "spinbox",
- parent = WIDGET,
- creation = "i",
- callback = {
- spin_cb = "n",
- },
- include = "iupspin.h",
-}
-
-function ctrl.createElement(class, arg)
- return Spinbox(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Submenu class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "submenu",
- parent = WIDGET,
- creation = "Si",
- callback = {
--- open_cb = "", -- already registered by the menu
--- menuclose_cb = "", -- already registered by the menu
- }
-}
-
-function ctrl.createElement(class, arg)
- return Submenu(arg.title, arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Tabs class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "tabs",
- parent = WIDGET,
- creation = "v",
- callback = {
- tabchange_cb = "ii",
- },
- include = "iuptabs.h",
- funcname = "Tabsv",
- createfunc = [[
-static int Tabsv(lua_State *L)
-{
- Ihandle **hlist = iuplua_checkihandle_array(L, 1);
- Ihandle *h = IupTabsv(hlist);
- iuplua_plugstate(L, h);
- iuplua_pushihandle_raw(L, h);
- free(hlist);
- return 1;
-}
-
-]],
-}
-
-function ctrl.createElement(class, arg)
- return Tabsv(arg)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Text class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "text",
- parent = WIDGET,
- creation = "-",
- callback = {
- action = "ns",
- caret_cb = "nn",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Text()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Timer class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "timer",
- parent = WIDGET,
- creation = "",
- callback = {
- action_cb = "",
- },
-}
-
-function ctrl.createElement(class, arg)
- return Timer()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Toggle class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "toggle",
- parent = WIDGET,
- creation = "S-",
- callback = {
- action = "n",
- }
-}
-
-function ctrl.createElement(class, arg)
- return Toggle(arg.title)
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Tree class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "tree",
- parent = WIDGET,
- creation = "",
- callback = {
- selection_cb = "nn",
- multiselection_cb = "nn", -- fake definition to be replaced by treefuncs module
- branchopen_cb = "n",
- branchclose_cb = "n",
- executeleaf_cb = "n",
- renamenode_cb = "ns",
- rename_cb = "ns",
- showrename_cb = "n",
- rightclick_cb = "n",
- dragdrop_cb = "nnnn",
- },
- include = "iuptree.h",
- extrafuncs = 1,
-}
-
-function TreeSetValueRec(handle, t, id)
- if t == nil then return end
- local cont = table.getn(t)
- while cont >= 0 do
- if type (t[cont]) == "table" then
- if t[cont].branchname ~= nil then
- SetAttribute(handle, "ADDBRANCH"..id, t[cont].branchname)
- TreeSetValueRec(handle, t[cont], id+1)
- end
- else
- if t[cont] then
- SetAttribute(handle, "ADDLEAF"..id, t[cont])
- end
- end
- cont = cont - 1
- end
-end
-
-function TreeSetValue(handle, t)
- if t.branchname ~= nil then
- SetAttribute(handle, "NAME", t.branchname)
- end
- TreeSetValueRec(handle, t, 0)
-end
-
-function ctrl.createElement(class, arg)
- return Tree()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- Val class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "val",
- parent = WIDGET,
- creation = "s",
- callback = {
- mousemove_cb = "d",
- button_press_cb = "d",
- button_release_cb = "d",
- },
- include = "iupval.h",
-}
-
-function ctrl.createElement(class, arg)
- return Val(arg[1])
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- VBox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "vbox",
- parent = BOX,
- creation = "-",
- callback = {}
-}
-
-function ctrl.append (handle, elem)
- Append(handle, elem)
-end
-
-function ctrl.createElement(class, arg)
- return Vbox()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-------------------------------------------------------------------------------
--- ZBox class
-------------------------------------------------------------------------------
-local ctrl = {
- nick = "zbox",
- parent = BOX,
- creation = "-",
- callback = {}
-}
-
-function ctrl.append (handle, elem)
- ihandle_setname(elem)
- Append(handle, elem)
-end
-
-function ctrl.SetChildrenNames(obj)
- if obj then
- local i = 1
- while obj[i] do
- ihandle_setname(obj[i])
- i = i+1
- end
- end
-end
-
-function ctrl.createElement(class, arg)
- ctrl.SetChildrenNames(arg)
- return Zbox()
-end
-
-iupRegisterWidget(ctrl)
-iupSetClass(ctrl, "iup widget")
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iup_pplot"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "lib"
-package.buildflags = { "static-runtime" }
-
-package.includepaths = { ".", "../include" }
-
-package.files = { "iup_pplot.cpp", "PPlot.cpp", "PPlotInteraction.cpp" }
-fixPackagePath(package.files)
-
-----------------------------------------------------
-----------------------------------------------------
--- The main porpouse of this file is to build linux gcc makefiles.
--- Must have Premake version 3 installed.
--- Original Premake was changed to remove some parameters and add others.
--- Default parameters:
--- premake3s --target gnu --os linux
--- But it can build windows gcc makefiles, and visual studio projects.
--- premake3s --target gnu --os windows
--- premake3s --target gnu --os macosx
--- premake3s --target vs6
--- premake3s --target vs2002
--- premake3s --target vs2003
--- premake3s --target vs2005
--- In Linux the generated makefiles will not correctly build libraries in 64-bits.
--- must add "-m64 -fPIC" flags
-----------------------------------------------------
-
-if (not options.target) then
- options.target = "gnu"
-end
-
-if (not options.os) then
- if (options.target ~= "gnu") then
- options.os = "windows"
- else
- options.os = "linux"
- end
-end
-
-function fixPackagePath(package_files)
- if (options.os ~= "linux") then
- for i, file in package_files do
- package_files[i] = "../src/"..file
- end
- end
-end
-
-----------------------------------------------------
-
-project.name = "iup"
-project.bindir = "../bin"
-project.libdir = "../lib"
-
-if (options.os ~= "linux") then
- if (options.os == "macosx") then
- project.path = "../mak.macosx"
- else
- project.path = "../mak."..options.target
- end
-end
-
-----------------------------------------------------
-
-package = newpackage()
-package.name = "iupview"
-package.target = package.name
-package.objdir = "../obj/"..package.name
-package.language = "c++"
-package.kind = "winexe"
-package.linkflags = { "static-runtime" }
-
-package.files =
-{
- "iupview.c"
-}
-fixPackagePath(package.files)
-
-package.includepaths = { ".", "../include", "$(CD)/include" }
-package.links = { "iupgl", "iupim", "iupimglib", "iupcontrols", "cdiup", "cd", "iup", "im" }
-package.libpaths = { "../lib", "$(IM)/lib", "$(CD)/lib" }
-
-if (options.os == "windows") then
- tinsert(package.links, { "comctl32", "opengl32", "glu32", "glaux" })
-else
- tinsert(package.links, { "GLU", "GL", "Xm", "Xpm", "Xmu", "Xt", "Xext", "X11", "m" })
- tinsert(package.libpaths, { "/usr/X11R6/lib" })
-end
-
-----------------------------------------------------
-
-l = iup.label{title="1", size="200x"}
-
-function idle_cb()
- local v = tonumber(l.title) + 1
- l.title = v
- if v == 10000 then
- iup.SetIdle(nil)
- end
- return iup.DEFAULT
-end
-
-dlg = iup.dialog{l; title = "Idle Test"}
-
-dlg:showxy(iup.CENTER, iup.CENTER)
-
--- Registers idle callback
-iup.SetIdle(idle_cb)
-
--- Creates a IupColorBrowser control and updates, through
--- callbacks, the values of texts representing the R, G and B
--- components of the selected color.
-
-text_red = iup.text{}
-text_green = iup.text{}
-text_blue = iup.text{}
-
-cb = iup.colorbrowser{}
-
-function update(r, g, b)
- text_red.value = r
- text_green.value = g
- text_blue.value = b
-end
-
-function cb:drag_cb(r, g ,b)
- update(r,g,b)
-end
-
-function cb:change_cb(r, g ,b)
- update(r,g,b)
-end
-
-vbox = iup.vbox {
- iup.fill {},
- text_red,
- iup.fill {},
- text_green,
- iup.fill {},
- text_blue,
- iup.fill {}
- }
-
-dlg = iup.dialog{iup.hbox {cb, iup.fill{}, vbox}; title = "ColorBrowser"}
-dlg:showxy(iup.CENTER, iup.CENTER)
---IupDial Example in IupLua
-
-lbl_h = iup.label{title = "0", alignment = "ACENTER", size = "100x10"}
-lbl_v = iup.label{title = "0", alignment = "ACENTER", size = "100x10"}
-lbl_c = iup.label{title = "0", alignment = "ACENTER", size = "100x10"}
-
-dial_v = iup.dial{"VERTICAL"; size="100x100"}
-dial_h = iup.dial{"HORIZONTAL"; density=0.3}
-
-function dial_v:mousemove_cb(a)
- lbl_v.title = a
- return iup.DEFAULT
-end
-
-function dial_v:button_press_cb(a)
- lbl_v.bgcolor = "255 0 0"
- return iup.DEFAULT
-end
-
-function dial_v:button_release_cb(a)
- lbl_v.bgcolor = nil
- return iup.DEFAULT
-end
-
-function dial_h:mousemove_cb(a)
- lbl_h.title = a
- return iup.DEFAULT
-end
-
-function dial_h:button_press_cb(a)
- lbl_h.bgcolor = "255 0 0"
- return iup.DEFAULT
-end
-
-function dial_h:button_release_cb(a)
- lbl_h.bgcolor = nil
- return iup.DEFAULT
-end
-
-dlg = iup.dialog
-{
- iup.hbox
- {
- iup.fill{},
- iup.vbox
- {
- iup.fill{},
- iup.frame
- {
- iup.vbox
- {
- iup.hbox
- {
- iup.fill{},
- dial_v,
- iup.fill{}
- } ,
- iup.hbox
- {
- iup.fill{},
- lbl_v,
- iup.fill{}
- }
- }
- },
- iup.fill{},
- iup.frame
- {
- iup.vbox
- {
- iup.hbox
- {
- iup.fill{},
- dial_h,
- iup.fill{}
- } ,
- iup.hbox
- {
- iup.fill{},
- lbl_h,
- iup.fill{}
- } ,
- }
- },
- iup.fill{},
- },
- iup.fill{}
- }; title="IupDial"
-}
-
-dlg:showxy(iup.CENTER,iup.CENTER)
-
-
-function idle_cb()
- local value = gauge.value
- value = value + 0.0001;
- if value > 1.0 then
- value = 0.0
- end
- gauge.value = value
- return iup.DEFAULT
-end
-
-gauge = iup.gauge{}
-gauge.size = "QUARTERxEIGHTH"
-gauge.show_text = "YES"
-
-dlg = iup.dialog{gauge; title = "IupGauge"}
-
--- Registers idle callback
-iup.SetIdle(idle_cb)
-
-dlg:showxy(iup.CENTER, iup.CENTER)
---
--- IupGetColor Example in IupLua
---
--- Creates a predefined color selection dialog which returns the
--- selected color in the RGB format.
---
-
-r, g, b = iup.GetColor(100, 100, 255, 255, 255)
-if (r) then
- print("r="..r.." g="..g.." b="..b)
-end
--- IupGetParam Example in IupLua
--- Shows a dialog with all possible fields.
-
-iup.SetLanguage("ENGLISH")
-
-function param_action(dialog, param_index)
- if (param_index == -1) then
- print("OK")
- elseif (param_index == -2) then
- print("Map")
- elseif (param_index == -3) then
- print("Cancel")
- else
- local param = iup.GetParamParam(dialog, param_index)
- print("PARAM"..param_index.." = "..param.value)
- end
- return 1
-end
-
--- set initial values
-pboolean = 1
-pinteger = 3456
-preal = 3.543
-pinteger2 = 192
-preal2 = 0.5
-pangle = 90
-pstring = "string text"
-plist = 2
-pstring2 = "second text\nsecond line"
-
-ret, pboolean, pinteger, preal, pinteger2, preal2, pangle, pstring, plist, pstring2 =
- iup.GetParam("Title", param_action,
- "Boolean: %b\n"..
- "Integer: %i\n"..
- "Real 1: %r\n"..
- "Sep1 %t\n"..
- "Integer: %i[0,255]\n"..
- "Real 2: %r[-1.5,1.5]\n"..
- "Sep2 %t\n"..
- "Angle: %a[0,360]\n"..
- "String: %s\n"..
- "List: %l|item1|item2|item3|\n"..
- "Sep3 %t\n"..
- "Multiline: %m\n",
- pboolean, pinteger, preal, pinteger2, preal2, pangle, pstring, plist, pstring2)
-if (ret == 0) then
- return
-end
-
-iup.Message("IupGetParam",
- "Boolean Value: "..pboolean.."\n"..
- "Integer: "..pinteger.."\n"..
- "Real 1: "..preal.."\n"..
- "Integer: "..pinteger2.."\n"..
- "Real 2: "..preal2.."\n"..
- "Angle: "..pangle.."\n"..
- "String: "..pstring.."\n"..
- "List Index: "..plist.."\n"..
- "String: "..pstring2)
--- Example IupGLCanvas in Lua
--- Creates a OpenGL canvas and draws a line in it.
--- This example uses gllua binding of OpenGL to Lua.
-
-cv = iup.glcanvas{buffer="DOUBLE", rastersize = "300x300"}
-
-function cv:action(x, y)
- iup.GLMakeCurrent(self)
- --glClearColor(1.0, 1.0, 1.0, 1.0)
- --glClear(GL_COLOR_BUFFER_BIT)
- --glClear(GL_DEPTH_BUFFER_BIT)
- --glMatrixMode( GL_PROJECTION )
- --glViewport(0, 0, 300, 300)
- --glLoadIdentity()
- --glBegin( GL_LINES )
- --glColor(1.0, 0.0, 0.0)
- --glVertex(0.0, 0.0)
- --glVertex(10.0, 10.0)
- --glEnd()
- iup.GLSwapBuffers(self)
- return iup.DEFAULT
-end
-
-dg = iup.dialog{cv; title="IupGLCanvas Example"}
-
-function cv:k_any(c)
- if c == iup.K_q then
- return iup.CLOSE
- else
- return iup.DEFAULT
- end
-end
-
-
-dg:show()
-
-canvas = iup.glcanvas{buffer="DOUBLE", rastersize = "640x480"}
-
-function canvas:resize_cb(width, height)
- iup.GLMakeCurrent(self)
-
- gl.Viewport(0, 0, width, height)
-
- gl.MatrixMode('PROJECTION')
- gl.LoadIdentity()
-
- gl.MatrixMode('MODELVIEW')
- gl.LoadIdentity()
-
-end
-
-function canvas:action()
- iup.GLMakeCurrent(self)
-
- gl.MatrixMode("PROJECTION")
- gl.LoadIdentity()
- gl.Ortho(0, 1, 1, 0, -1.0, 1.0)
- gl.MatrixMode("MODELVIEW")
- gl.LoadIdentity()
- gl.PushMatrix()
- gl.Translate(0.25,0.5, 0)
- gl.Scale(0.2, 0.2, 1)
-
- gl.BlendFunc("SRC_ALPHA", "ONE_MINUS_SRC_ALPHA")
-
- gl.ClearColor(0,0,0,1)
- gl.Clear("DEPTH_BUFFER_BIT,COLOR_BUFFER_BIT")
- gl.Enable("BLEND")
-
- -- draw rectangle
- gl.Color( {1, 1, 0, 0.8} )
- gl.Rect(-1,-1,1,1)
-
- --------------------------------------------------------
- -- Create List That Draws the Circle
- --------------------------------------------------------
-
- planet = 1
- orbit = 2
- pi =
-
- gl.NewList(planet, "COMPILE")
- gl.Begin("POLYGON")
- for i=0, 100 do
- cosine = math.cos(i * 2 * math.pi/100.0)
- sine = math.sin(i * 2 * math.pi/100.0)
- gl.Vertex(cosine,sine)
- end
- gl.End()
- gl.EndList()
-
- gl.NewList(orbit, "COMPILE")
- gl.Begin("LINE_LOOP")
- for i=0, 100 do
- cosine = math.cos(i * 2 * math.pi/100.0)
- sine = math.sin(i * 2 * math.pi/100.0)
- gl.Vertex(cosine, sine)
- end
- gl.End()
- gl.EndList()
-
- --------------------------------------------------------
-
- gl.Color( {0, 0.5, 0, 0.8} )
- gl.CallList(planet)
-
- gl.Color( {0, 0, 0, 1} )
- lists = { orbit }
- gl.CallLists(lists)
-
- gl.EnableClientState ("VERTEX_ARRAY")
-
- vertices = { {-3^(1/2)/2, 1/2}, {3^(1/2)/2, 1/2}, {0, -1}, {-3^(1/2)/2, -1/2}, {3^(1/2)/2, -1/2}, {0, 1} }
-
- gl.VertexPointer (vertices)
-
- -- draw first triangle
- gl.Color( {0, 0, 1, 0.5} )
-
- gl.Begin("TRIANGLES")
- gl.ArrayElement (0)
- gl.ArrayElement (1)
- gl.ArrayElement (2)
- gl.End()
-
- -- draw second triangle
- gl.Color( {1, 0, 0, 0.5} )
- gl.VertexPointer (vertices)
- gl.DrawArrays("TRIANGLES", 3, 3)
-
- -- draw triangles outline
- gl.Color(1,1,1,1)
- elements = { 0, 1, 2} gl.DrawElements("LINE_LOOP", elements)
- elements = { 3, 4, 5} gl.DrawElements("LINE_LOOP", elements)
-
- gl.DisableClientState ("VERTEX_ARRAY")
-
- gl.PopMatrix()
- gl.Translate(0.75,0.5, 0)
- gl.Scale(0.2, 0.2, 1)
-
- ----------------------------------------------------------------------------
-
- gl.BlendFunc("SRC_ALPHA", "ONE_MINUS_SRC_ALPHA")
-
- -- draw rectangle
- gl.Color( {1, 1, 0, 0.8} )
-
- gl.Begin("QUADS")
- gl.Vertex(-1,-1)
- gl.Vertex( 1,-1)
- gl.Vertex( 1, 1)
- gl.Vertex(-1, 1)
- gl.End()
- -------------------------------
- gl.Color( {0, 0.5, 0, 0.8} )
- gl.Begin("POLYGON")
- for i=0, 100 do
- cosine = math.cos(i * 2 * math.pi/100.0)
- sine = math.sin(i * 2 * math.pi/100.0)
- gl.Vertex(cosine,sine)
- end
- gl.End()
-
- gl.Color( {0, 0, 0, 1} )
- gl.Begin("LINE_LOOP")
- for i=0, 100 do
- cosine = math.cos(i * 2 * math.pi/100.0)
- sine = math.sin(i * 2 * math.pi/100.0)
- gl.Vertex(cosine, sine)
- end
- gl.End()
-
- -- draw first triangle
- gl.Color( {0, 0, 1, 0.5} )
- gl.Begin("TRIANGLES")
- gl.Vertex (vertices[1])
- gl.Vertex (vertices[2])
- gl.Vertex (vertices[3])
- gl.End()
- -- draw second triangle
- gl.Color( {1, 0, 0, 0.5} )
- gl.Begin("TRIANGLES")
- gl.Vertex (vertices[4])
- gl.Vertex (vertices[5])
- gl.Vertex (vertices[6])
- gl.End()
- -- draw triangles outline
- gl.Color(1,1,1,1)
- gl.Begin("LINE_LOOP")
- gl.Vertex (vertices[1])
- gl.Vertex (vertices[2])
- gl.Vertex (vertices[3])
- gl.End()
- gl.Begin("LINE_LOOP")
- gl.Vertex (vertices[4])
- gl.Vertex (vertices[5])
- gl.Vertex (vertices[6])
- gl.End()
-
- iup.GLSwapBuffers(self)
- gl.Flush()
-
-end
-
-dialog = iup.dialog{canvas; title="Lua GL Test Application"}
-dialog:show()
--- IupMask Example in Lua
--- Creates an IupText that accepts only numbers.
-
-txt = iup.text{}
-iup.maskSet(txt, "/d*", 0, 1) ;
-dg = iup.dialog{txt}
-dg:show()mat= iup.matrix{numlin=3, numcol=3}
-mat:setcell(1,1,"Only numbers")
-iup.maskMatSet(mat, "/d*", 0, 1, 1, 1) ;
-dg = iup.dialog{mat}
-dg:show()
-
-mat = iup.matrix {numcol=5, numlin=3,numcol_visible=5, numlin_visible=3, widthdef=34}
-mat.resizematrix = "YES"
-mat:setcell(0,0,"Inflation")
-mat:setcell(1,0,"Medicine")
-mat:setcell(2,0,"Food")
-mat:setcell(3,0,"Energy")
-mat:setcell(0,1,"January 2000")
-mat:setcell(0,2,"February 2000")
-mat:setcell(1,1,"5.6")
-mat:setcell(2,1,"2.2")
-mat:setcell(3,1,"7.2")
-mat:setcell(1,2,"4.6")
-mat:setcell(2,2,"1.3")
-mat:setcell(3,2,"1.4")
-dlg = iup.dialog{iup.vbox{mat; margin="10x10"}}
-dlg:showxy(iup.CENTER, iup.CENTER)
-matrix = iup.matrix
-{
- numlin=3,
- numcol=3,
- numcol_visible=3,
- height0=10,
- widthdef=30,
- scrollbar="VERTICAL",
-}
-
-data = {
- {"1:1", "1:2", "1:3"},
- {"2:1", "2:2", "2:3"},
- {"3:1", "3:2", "3:3"},
- }
-
-function matrix:value_cb(l, c)
- if l == 0 or c == 0 then
- return "title"
- end
- return data[l][c]
-end
-
-function matrix:value_edit_cb(l, c, newvalue)
- data[l][c] = newvalue
-end
-
-dlg=iup.dialog{matrix; title="IupMatrix in Callback Mode" }
-dlg:show()
-
-bt = iup.button{title="Test"}
-bt.expand = "YES"
-box = iup.sbox{bt}
-box.direction = "SOUTH"
-box.color = "0 0 255"
-
-ml = iup.multiline{}
-ml.expand = "YES"
-vbox = iup.vbox{box, ml}
-
-lb = iup.label{title="Label"}
-lb.expand = "YES"
-dg = iup.dialog{iup.hbox{vbox, lb}}
-dg:show()
---IupSpeech Example in Lua
-
-label = iuplabel{title="Possible commands are defined in xml1.xml"}
-text = iuptext {size="200"}
-
-function reco(self, msg)
- text.value = msg
-end
-
-sk = iupspeech{action=reco, grammar="xml1.xml", say="xml1 loaded"}
-
-dg = iupdialog{iupvbox{label, text}; title = "IupSpeech Test"}
-dg:show()
--- Creates boxes
-vboxA = iup.vbox{iup.label{title="TABS AAA"}, iup.button{title="AAA"}}
-vboxB = iup.vbox{iup.label{title="TABS BBB"}, iup.button{title="BBB"}}
-
--- Sets titles of the vboxes
-vboxA.tabtitle = "AAAAAA"
-vboxB.tabtitle = "BBBBBB"
-
--- Creates tabs
-tabs = iup.tabs{vboxA, vboxB}
-
--- Creates dialog
-dlg = iup.dialog{tabs; title="Test IupTabs", size="200x80"}
-
--- Shows dialog in the center of the screen
-dlg:showxy(iup.CENTER, iup.CENTER)-- IupTree Example in IupLua
--- Creates a tree with some branches and leaves.
--- Two callbacks are registered: one deletes marked nodes when the Del key
--- is pressed, and the other, called when the right mouse button is pressed,
--- opens a menu with options.
-
-tree = iup.tree{}
-
--- Creates rename dialog
-ok = iup.button{title = "OK",size="EIGHTH"}
-cancel = iup.button{title = "Cancel",size="EIGHTH"}
-
-text = iup.text{border="YES",expand="YES"}
-dlg_rename = iup.dialog{iup.vbox{text,iup.hbox{ok,cancel}};
- defaultenter=ok,
- defaultesc=cancel,
- title="Enter node's name",
- size="QUARTER",
- startfocus=text}
-
--- Creates menu displayed when the right mouse button is pressed
-addleaf = iup.item {title = "Add Leaf"}
-addbranch = iup.item {title = "Add Branch"}
-renamenode = iup.item {title = "Rename Node"}
-menu = iup.menu{addleaf, addbranch, renamenode}
-
--- Callback of the right mouse button click
-function tree:rightclick_cb(id)
- tree.value = id
- menu:popup(iup.MOUSEPOS,iup.MOUSEPOS)
- return iup.DEFAULT
-end
-
--- Callback called when a node will be renamed
-function tree:renamenode_cb(id)
- text.value = tree.name
-
- dlg_rename:popup(iup.CENTER, iup.CENTER)
- iup.SetFocus(tree)
-
- return iup.DEFAULT
-end
-
--- Callback called when the rename operation is cancelled
-function cancel:action()
- return iup.CLOSE
-end
-
--- Callback called when the rename operation is confirmed
-function ok:action()
- tree.name = text.value
-
- return iup.CLOSE
-end
-
-function tree:k_any(c)
- if c == 339 then tree.delnode = "MARKED" end
- return iup.DEFAULT
-end
-
--- Callback called when a leaf is added
-function addleaf:action()
- tree.addleaf = ""
- tree.redraw = "YES"
- return iup.DEFAULT
-end
-
--- Callback called when a branch is added
-function addbranch:action()
- tree.addbranch = ""
- tree.redraw = "YES"
- return iup.DEFAULT
-end
-
--- Callback called when a branch will be renamed
-function renamenode:action()
- tree:renamenode_cb(tree.value)
- tree.redraw = "YES"
- return iup.DEFAULT
-end
-
-function init_tree_atributes()
- tree.font = "COURIER_NORMAL_10"
- tree.name = "Figures"
- tree.addbranch = "3D"
- tree.addbranch = "2D"
- tree.addbranch1 = "parallelogram"
- tree.addleaf2 = "diamond"
- tree.addleaf2 = "square"
- tree.addbranch1 = "triangle"
- tree.addleaf2 = "scalenus"
- tree.addleaf2 = "isoceles"
- tree.value = "6"
- tree.ctrl = "YES"
- tree.shift = "YES"
- tree.addexpanded = "NO"
- tree.redraw = "YES"
-end
-
-dlg = iup.dialog{tree; title = "IupTree", size = "QUARTERxTHIRD"}
-dlg:showxy(iup.CENTER,iup.CENTER)
-init_tree_atributes()--IupTree Example in IupLua
---Creates a tree with some branches and leaves. Uses a Lua Table to define the IupTree structure.
-
-tree = iup.tree{}
-dlg = iup.dialog{tree ; title = "TableTree result", size = "200x200"}
-dlg:showxy(iup.CENTER,iup.CENTER)
-
-t = {
- {
- "Horse",
- "Whale";
- branchname = "Mammals"
- },
- {
- "Shrimp",
- "Lobster";
- branchname = "Crustaceans"
- };
- branchname = "Animals"
-}
-iup.TreeSetValue(tree, t)
-
-tree.redraw = "YES"
--- IupTree Example in IupLua
--- Creates a tree with some branches and leaves.
--- Two callbacks are registered: one deletes marked nodes when the Del key
--- is pressed, and the other, called when the right mouse button is pressed,
--- opens a menu with options.
-
-
-tree = iup.tree{}
-
-
-function tree:showrename_cb(id)
- print("SHOWRENAME")
- return iup.DEFAULT
-end
--- Callback called when a node will be renamed
-function tree:renamenode_cb(id)
- print("RENAMENODE")
- return iup.DEFAULT
-end
-
-
-function tree:k_any(c)
- if c == 316 then tree.delnode = "MARKED" end
- return iup.DEFAULT
-end
-
-
-function init_tree_atributes()
- tree.font = "COURIER_NORMAL_10"
- tree.name = "Figures"
- tree.addbranch = "3D"
- tree.addbranch = "2D"
- tree.addbranch1 = "parallelogram"
- tree.addleaf2 = "diamond"
- tree.addleaf2 = "square"
- tree.addbranch1 = "triangle"
- tree.addleaf2 = "scalenus"
- tree.addleaf2 = "isoceles"
- tree.value = "6"
- tree.ctrl = "YES"
- tree.shift = "YES"
- tree.addexpanded = "NO"
- tree.redraw = "YES"
- tree.showrename = "NO"
-end
-
-
-dlg = iup.dialog{tree; title = "IupTree", size = "QUARTERxTHIRD"}
-dlg:showxy(iup.CENTER,iup.CENTER)
-init_tree_atributes()-- IupVal Example in IupLua
--- Creates two Valuator controls, exemplifying the two possible types.
--- When manipulating the Valuator, the label's value changes.
-
-if not string then
- string = {}
- string.format = format
-end
-
-function fbuttonpress(self)
- if(self.type == "VERTICAL") then
- lbl_v.fgcolor = "255 0 0"
- else
- lbl_h.fgcolor = "255 0 0"
- end
- return iup.DEFAULT
-end
-
-function fbuttonrelease(self)
- if(self.type == "VERTICAL") then
- lbl_v.fgcolor = "0 0 0"
- else
- lbl_h.fgcolor = "0 0 0"
- end
- return iup.DEFAULT
-end
-
-function fmousemove(self, val)
- local buffer = "iup.VALUE="..string.format('%.2f', val)
- if (self.type == "VERTICAL") then
- lbl_v.title=buffer
- else
- lbl_h.title=buffer
- end
- return iup.DEFAULT
-end
-
-val_v = iup.val{"VERTICAL"; min=0, max=1, value="0.3",
- mousemove_cb=fmousemove,
- button_press_cb=fbuttonpress,
- button_release_cb=fbuttonrelease
-}
-
-lbl_v = iup.label{title="VALUE= ", size=70, type="1"}
-
-val_h = iup.val{"HORIZONTAL"; min=0, max=1, value=0,
- mousemove_cb=fmousemove,
- button_press_cb=fbuttonpress,
- button_release_cb=fbuttonrelease
-}
-
-lbl_h = iup.label{title="VALUE= ", size=70, type="2"}
-
-dlg_val = iup.dialog
-{
- iup.hbox
- {
- iup.frame
- {
- iup.vbox
- {
- val_v,
- lbl_v
- }
- },
- iup.frame
- {
- iup.vbox
- {
- val_h,
- lbl_h
- }
- }
- };
- title="Valuator Test"
-}
-
-dlg_val:show()
-
--- IupAlarm Example in IupLua
--- Shows a dialog similar to the one shown when you exit a program
--- without saving.
-
-b = iup.Alarm("IupAlarm Example", "File not saved! Save it now?" ,"Yes" ,"No" ,"Cancel")
-
--- Shows a message for each selected button
-if b == 1 then
- iup.Message("Save file", "File saved sucessfully - leaving program")
-elseif b == 2 then
- iup.Message("Save file", "File not saved - leaving program anyway")
-elseif b == 3 then
- iup.Message("Save file", "Operation canceled")
-end-- IupFileDlg Example in IupLua
--- Shows a typical file-saving dialog.
-
--- Creates a file dialog and sets its type, title, filter and filter info
-filedlg = iup.filedlg{dialogtype = "SAVE", title = "File save",
- filter = "*.bmp", filterinfo = "Bitmap files",
- directory="c:\\windows"}
-
--- Shows file dialog in the center of the screen
-filedlg:popup (iup.ANYWHERE, iup.ANYWHERE)
-
--- Gets file dialog status
-status = filedlg.status
-
-if status == "1" then
- iup.Message("New file",filedlg.value)
-elseif status == "0" then
- iup.Message("File already exists", filedlg.value)
-elseif status == "-1" then
- iup.Message("IupFileDlg","Operation canceled")
-end-- IupGetFile Example in IupLua
--- Shows a typical file-selection dialog.
-
-iup.SetLanguage("ENGLISH")
-f, err = iup.GetFile("*.txt")
-if err == 1 then
- iup.Message("New file", f)
-elseif err == 0 then
- iup.Message("File already exists", f)
-elseif err == -1 then
- iup.Message("IupFileDlg", "Operation canceled")
-elseif err == -2 then
- iup.Message("IupFileDlg", "Allocation errr")
-elseif err == -3 then
- iup.Message("IupFileDlg", "Invalid parameter")
-end-- IupListDialog Example in IupLua
--- Shows a color-selection dialog.
-
-iup.SetLanguage("ENGLISH")
-size = 8
-marks = { 0,0,0,0,1,1,0,0 }
-options = {"Blue", "Red", "Green", "Yellow", "Black", "White", "Gray", "Brown"}
-
-error = iup.ListDialog(2,"Color selection",size,options,0,16,5,marks);
-
-if error == -1 then
- iup.Message("IupListDialog", "Operation canceled")
-else
- local selection = ""
- local i = 1
- while i ~= size+1 do
- if marks[i] ~= 0 then
- selection = selection .. options[i] .. "\n"
- end
- i = i + 1
- end
- if selection == "" then
- iup.Message("IupListDialog","No option selected")
- else
- iup.Message("Selected options",selection)
- end
-end-- IupMessage Example in IupLua
--- Shows a dialog with the message: “Click the button”.
-
-iup.Message ("IupMessage", "Press the button")-- IupScanf Example in IupLua
--- Shows a dialog with three fields to be filled.
--- One receives a string, the other receives a real number and
--- the last receives an integer number.
--- Note: In Lua, the function does not return the number of successfully read characters.
-
-iup.SetLanguage("ENGLISH")
-local integer = 12
-local real = 1e-3
-local text ="This is a vector of characters"
-local fmt = "IupScanf\nText:%300.40%s\nReal:%20.10%g\nInteger:%20.10%d\n"
-
-text, real, integer = iup.Scanf (fmt, text, real, integer)
-
-if text then
- local string = "Text: "..text.."\nReal: "..real.."\nInteger: "..integer
- iup.Message("IupScanf", string)
-else
- iup.Message("IupScanf", "Operation canceled");
-end
--- Creates four buttons. The first uses images, the second turns the first
--- on and off, the third exits the application and the last does nothing
-
--- defines released button image
-img_release = iup.image {
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,4,4,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,4,4,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
- colors = { "215 215 215", "40 40 40", "30 50 210", "240 0 0" }
-}
-
--- defines pressed button image
-img_press = iup.image {
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,4,4,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,4,4,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
- colors = { "40 40 40", "215 215 215", "0 20 180", "210 0 0" }
-}
-
--- defines deactivated button image
-img_inactive = iup.image {
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,4,4,3,3,3,2,2},
- {1,1,3,3,3,3,3,4,4,4,4,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,4,4,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,1,3,3,3,3,3,3,3,3,3,3,3,3,2,2},
- {1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
- {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
- colors = { "215 215 215", "40 40 40", "100 100 100", "200 200 200" }
-}
-
--- creates a text box
-text = iup.text{ readonly = "YES", SIZE = "EIGHTH" }
-
--- creates a button with image
-btn_image = iup.button{ title = "Button with image", image = img_release, impress = img_press, iminactive = img_inactive }
-
--- creates a button
-btn_big = iup.button{ title = "Big useless button", size = "EIGHTHxEIGHTH" }
-
--- creates a button entitled Exit
-btn_exit = iup.button{ title = "Exit" }
-
--- creates a button entitled Activate
-btn_on_off = iup.button{ title = "Activate" }
-
--- creates a dialog and sets dialog's title and turns off resize, menubox, maximize and minimize
-dlg = iup.dialog{ iup.vbox{ iup.hbox{ iup.fill{}, btn_image, btn_on_off, btn_exit, iup.fill{} }, text, btn_big }; title = "IupButton", resize = "NO", menubox = "NO", maxbox = "NO", minbox = "NO" }
-
--- callback called when activate button is activated
-function btn_on_off:action()
- if btn_image.active == "YES" then
- btn_image.active = "NO"
- else
- btn_image.active = "YES"
- end
-
- return iup.DEFAULT
-end
-
--- callback called when the button is pressed or released
-function btn_image:button( b, e )
- if( b == iup.BUTTON1 ) then
- if( e == 1 ) then
- -- botão pressionado
- text.value = "Red button pressed"
- else
- -- botão solto
- text.value = "Red button released"
- end
- end
- return iup.DEFAULT
-end
-
--- callback called when the exit button is activated
-function btn_exit:action()
- dlg:hide()
-end
-
--- shows dialog
-dlg:showxy( iup.CENTER, iup.CENTER)--IupCanvas Example in IupLua
-
-cv = iup.canvas {size="300x100", xmin=0, xmax=99, posx=0, dx=10}
-dg = iup.dialog{iup.frame{cv}; title="IupCanvas"}
-
-function cv:motion_cb(x, y, r)
- print(x, y, r)
- return iup.DEFAULT
-end
-
-dg:showxy(iup.CENTER, iup.CENTER)
---IupDialog Example in IupLua
---Creates a simple dialog.
-
-vbox = iup.vbox { iup.label {title="Label"}, iup.button { title="Test" } }
-dlg = iup.dialog{vbox; title="Dialog"}
-dlg:show()
-
-tecgraf = iup.image{
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 04, 05, 05, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 11, 05, 05, 05, 05, 12, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 10, 06, 05, 03, 05, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 07, 05, 01, 01, 03, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 07, 05, 01, 01, 03, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 09, 09, 01, 01, 03, 07, 06, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 07, 06, 01, 01, 01, 01, 02, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 07, 06, 01, 01, 01, 01, 04, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 07, 06, 01, 01, 01, 01, 04, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 11, 02, 07, 05, 04, 04, 04, 04, 04, 04, 11, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 07, 04, 04, 04, 06, 03, 03, 07, 05, 05, 07, 07, 04, 04, 04, 04, 10, 10, 10, 10, 10, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 04, 04, 04, 09, 09, 06, 05, 04, 08, 07, 05, 01, 01, 01, 01, 07, 05, 06, 03, 03, 03, 03, 04, 10, 07, 09, 01, 01, },
- { 01, 01, 01, 04, 04, 06, 06, 08, 01, 01, 01, 01, 01, 10, 05, 01, 01, 01, 01, 10, 06, 01, 01, 01, 01, 01, 03, 03, 07, 07, 07, 01, },
- { 01, 01, 02, 04, 04, 05, 01, 01, 01, 01, 01, 01, 01, 04, 05, 01, 01, 01, 01, 07, 09, 01, 01, 01, 01, 01, 01, 01, 07, 07, 05, 01, },
- { 01, 01, 01, 03, 04, 04, 04, 01, 01, 01, 01, 01, 01, 04, 05, 01, 01, 01, 01, 07, 06, 01, 01, 01, 01, 01, 07, 07, 07, 09, 07, 01, },
- { 01, 01, 01, 01, 03, 03, 03, 04, 10, 10, 10, 11, 01, 04, 05, 01, 01, 01, 01, 05, 06, 15, 05, 07, 07, 07, 09, 06, 05, 05, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 03, 03, 03, 03, 03, 02, 04, 07, 05, 05, 05, 05, 06, 09, 14, 14, 06, 05, 05, 05, 07, 12, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 06, 03, 03, 02, 02, 02, 04, 04, 02, 02, 10, 16, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 05, 01, 01, 01, 01, 06, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 05, 01, 01, 01, 01, 06, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 05, 01, 01, 01, 01, 06, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 03, 07, 09, 01, 01, 04, 09, 05, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 12, 03, 05, 01, 01, 05, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 03, 05, 01, 01, 07, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 03, 05, 05, 04, 07, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 09, 03, 05, 07, 07, 13, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 03, 07, 07, 07, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 03, 04, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, },
- { 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01 };
- colors = {
- "BGCOLOR",
- "079 086 099",
- "040 045 053",
- "104 113 129",
- "136 147 170",
- "155 164 179",
- "121 136 167",
- "239 239 243",
- "176 190 214",
- "127 133 143",
- "207 209 214",
- "247 255 255",
- "244 247 249",
- "212 217 225",
- "215 226 241",
- "231 237 245"
- },
-}
-
-dg = iup.dialog{iup.label{title="Tray example"}; title="Tray",
- tray = "YES", traytip = "This is a tip at tray", trayimage = tecgraf}
-dg:show()
-
-dg.hidetaskbar = "YES"
-
-dg.trayclick_cb = function(self, b, press, dclick)
- if b == 1 and press then
- item_show = iup.item {title = "Show", action = function() dg:show() end}
- item_exit = iup.item {title = "Exit", action = function() dg.tray = "NO" dg:hide() end}
- menu = iup.menu{item_show, item_exit}
- menu:popup(iup.MOUSEPOS, iup.MOUSEPOS)
- end
- return iup.DEFAULT
-end
--- IupFill Example in IupLua
--- Uses the Fill element to horizontally centralize a button and to
--- justify it to the left and right.
-
--- Creates frame with left aligned button
-frame_left = iup.frame
-{
- iup.hbox
- {
- iup.button{ title = "Ok" },
- iup.fill{},
- }; title = "Left aligned" -- Sets frame's title
-}
-
--- Creates frame with centered button
-frame_center = iup.frame
-{
- iup.hbox
- {
- iup.fill{},
- iup.button{ title = "Ok" },
- iup.fill{},
- } ; title = "Centered" -- Sets frame's title
-}
-
--- Creates frame with right aligned button
-frame_right = iup.frame
-{
- iup.hbox
- {
- iup.fill {},
- iup.button { title = "Ok" },
-
- } ; title = "Right aligned" -- Sets frame's title
-}
-
--- Creates dialog with these three frames
-dialog = iup.dialog
-{
- iup.vbox{frame_left, frame_center, frame_right,};
- size = 120, title = "IupFill"
-}
-
--- Shows dialog in the center of the screen
-dialog:showxy(iup.CENTER, iup.CENTER)-- IupFrame Example in IupLua
--- Draws a frame around a button. Note that FGCOLOR is added to the frame but
--- it is inherited by the button.
-
--- Creates frame with a label
-frame = iup.frame
- {
- iup.hbox
- {
- iup.fill{},
- iup.label{title="IupFrame Test"},
- iup.fill{},
- NULL
- }
- } ;
-
--- Sets label's attributes
-frame.fgcolor = "255 0 0"
-frame.size = EIGHTHxEIGHTH
-frame.title = "This is the frame"
-frame.margin = "10x10"
-
--- Creates dialog
-dialog = iup.dialog{frame};
-
--- Sets dialog's title
-dialog.title = "IupFrame"
-
-dialog:showxy(iup.CENTER,iup.CENTER) -- Shows dialog in the center of the screen -- IupHbox Example in IupLua
--- Creates a dialog with buttons placed side by side, with the purpose
--- of showing the organization possibilities of elements inside an hbox.
--- The ALIGNMENT attribute is explored in all its possibilities to obtain
--- the given effect.
-
-fr1 = iup.frame
-{
- iup.hbox
- {
- iup.fill{},
- iup.button{title="1", size="30x30"},
- iup.button{title="2", size="30x40"},
- iup.button{title="3", size="30x50"},
- iup.fill{};
- alignment = "ATOP"
- };
- title = "Alignment = ATOP"
-}
-
-fr2 = iup.frame
-{
- iup.hbox
- {
- iup.fill{},
- iup.button{title="1", size="30x30", action=""},
- iup.button{title="2", size="30x40", action=""},
- iup.button{title="3", size="30x50", action=""},
- iup.fill{};
- alignment = "ACENTER"
- };
- title = "Alignment = ACENTER"
-}
-
-fr3 = iup.frame
-{
- iup.hbox
- {
- iup.fill{},
- iup.button{title="1", size="30x30", action=""},
- iup.button{title="2", size="30x40", action=""},
- iup.button{title="3", size="30x50", action=""},
- iup.fill{};
- alignment = "ABOTTOM"
- };
- title = "Alignment = ABOTTOM"
-}
-
-dlg = iup.dialog
-{
- iup.frame
- {
- iup.vbox
- {
- fr1,
- fr2,
- fr3
- }; title="HBOX",
- };
- title="Alignment",
- size=140
-}
-
-dlg:show()-- IupImage Example in IupLua
--- Creates a button, a label, a toggle and a radio using an image.
--- Uses an image for the cursor as well.
-
--- Defines an "X" image
-img_x = iup.image{
- { 1,2,3,3,3,3,3,3,3,2,1 },
- { 2,1,2,3,3,3,3,3,2,1,2 },
- { 3,2,1,2,3,3,3,2,1,2,3 },
- { 3,3,2,1,2,3,2,1,2,3,3 },
- { 3,3,3,2,1,2,1,2,3,3,3 },
- { 3,3,3,3,2,1,2,3,3,3,3 },
- { 3,3,3,2,1,2,1,2,3,3,3 },
- { 3,3,2,1,2,3,2,1,2,3,3 },
- { 3,2,1,2,3,3,3,2,1,2,3 },
- { 2,1,2,3,3,3,3,3,2,1,2 },
- { 1,2,3,3,3,3,3,3,3,2,1 }
- -- Sets "X" image colors
- ; colors = { "0 1 0", "255 0 0", "255 255 0" }
-}
-
--- Defines a cursor image
-img_cursor = iup.image{
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,2,2,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
- -- Sets cursor image colors
- ; colors = { "255 0 0", "128 0 0" }, hotspot = "21:10"
-}
-
--- Creates a button entitled "Dummy" and associates image img_x to it
-btn = iup.button{ title = "", image = img_x }
-
--- Creates a label entitled "Dummy" and associates image img_x to it
-lbl = iup.label{ title = "", image = img_x }
-
--- Creates toggle entitled "Dummy" and associates image img_x to it
-tgl = iup.toggle{ title = "", image = img_x }
-
--- Creates two toggles entitled "Dummy" and associates image img_x to them
-tgl_radio_1 = iup.toggle{ title = "", image = img_x }
-tgl_radio_2 = iup.toggle{ title = "", image = img_x }
-
--- Creates label showing image size
-lbl_size = iup.label{ title = '"X" image width = '..img_x.width..'; "X" image height = '..img_x.height }
-
--- Creates frames around the elements
-frm_btn = iup.frame{btn; title="button", size="EIGHTHxEIGHTH"}
-frm_lbl = iup.frame{lbl; title="label" , size="EIGHTHxEIGHTH"}
-frm_tgl = iup.frame{tgl; title="toggle", size="EIGHTHxEIGHTH"}
-
-frm_tgl_radio = iup.frame{
- iup.radio{
- iup.vbox
- {
- tgl_radio_1,
- tgl_radio_2
- }
- };
- title="radio", size="EIGHTHxEIGHTH"
- }
-
--- Creates dialog dlg with an hbox containing a button, a label, and a toggle
-dlg = iup.dialog
- {
- iup.vbox
- {
- iup.hbox{frm_btn, frm_lbl, frm_tgl, frm_tgl_radio},
- iup.fill{},
- iup.hbox{iup.fill{}, lbl_size, iup.fill{}}
- }; title = "IupImage Example", size = "HALFxQUARTER",
- cursor = img_cursor
- }
-
--- Shows dialog in the center of the screen
-dlg:showxy(iup.CENTER, iup.CENTER)
-text = iup.text {value = "This is an empty text"}
-
-item_save = iup.item {title = "Save\tCtrl+S", key = "K_cS", active = "NO"}
-item_autosave = iup.item {title = "Auto Save", key = "K_a", value = "ON"}
-item_exit = iup.item {title = "Exit", key = "K_x"}
-
-menu_file = iup.menu {item_save, item_autosave, item_exit}
-
-submenu_file = iup.submenu{menu_file; title = "File"}
-
-menu = iup.menu {submenu_file}
-
-dlg = iup.dialog{text; title ="IupItem", menu = menu}
-
-dlg:showxy(iup.CENTER, iup.CENTER)
-
-function item_autosave:action()
- if item_autosave.value == "ON" then
- iup.Message("Auto Save", "OFF")
- item_autosave.value = "OFF"
- else
- iup.Message("Auto Save", "ON")
- item_autosave.value = "ON"
- end
-
- return iup.DEFAULT
-end
-
-function item_exit:action()
--- return iup.CLOSE
- dlg:hide()
-end
--- IupLabel Example in IupLua
--- Creates three labels, one using all attributes except for image, other
--- with normal text and the last one with an image..
-
--- Defines a star image
-img_star = iup.image {
- { 1,1,1,1,1,1,2,1,1,1,1,1,1 },
- { 1,1,1,1,1,1,2,1,1,1,1,1,1 },
- { 1,1,1,1,1,2,2,2,1,1,1,1,1 },
- { 1,1,1,1,1,2,2,2,1,1,1,1,1 },
- { 1,1,2,2,2,2,2,2,2,2,2,1,1 },
- { 2,2,2,2,2,2,2,2,2,2,2,2,2 },
- { 1,1,1,2,2,2,2,2,2,2,1,1,1 },
- { 1,1,1,1,2,2,2,2,2,1,1,1,1 },
- { 1,1,1,1,2,2,2,2,2,1,1,1,1 },
- { 1,1,1,2,2,1,1,2,2,2,1,1,1 },
- { 1,1,2,2,1,1,1,1,1,2,2,1,1 },
- { 1,2,2,1,1,1,1,1,1,1,2,2,1 },
- { 2,2,1,1,1,1,1,1,1,1,1,2,2 }
- -- Sets star image colors
- ; colors = { "0 0 0", "0 198 0" }
-}
-
--- Creates a label and sets all the attributes of label lbl, except for image
-lbl = iup.label { title = "This label has the following attributes set:\nBGCOLOR = 255 255 0\nFGCOLOR = 0 0 255\nFONT = COURIER_NORMAL_14\nSIZE = HALFxQUARTER\nTITLE = All text contained here\nALIGNMENT = ACENTER\n", bgcolor = "255 255 0", fgcolor = "0 0 255", font = "COURIER_NORMAL_14", size = "HALFxQUARTER", alignment = "ACENTER" }
-
--- Creates a label to explain that the label on the right has an image
-lbl_explain = iup.label { title = "The label on the right has the image of a star" }
-
--- Creates a label whose title is not important, cause it will have an image
-lbl_star = iup.label { title = "Does not matter", image = img_star }
-
--- Creates dialog with these three labels
-dlg = iup.dialog { iup.vbox { lbl, iup.hbox { lbl_explain, lbl_star } }
- ; title = "IupLabel Example" }
-
--- Shows dialog in the center of the screen
-dlg:showxy ( iup.CENTER, iup.CENTER )-- IupList Example in IupLua
--- Creates a dialog with three frames, each one containing a list. The first is a simple list, the second one is a multiple list and the last one is a drop-down list. The second list has a callback associated.
-
--- Creates a list and sets items, initial item and size
-list = iup.list {"Gold", "Silver", "Bronze", "None"
- ; value = 4, size = "EIGHTHxEIGHTH"}
-
--- Creates frame with simple list and sets its title
-frm_medal = iup.frame {list ; title = "Best medal"}
-
--- Creates a list and sets its items, multiple selection, initial items and size
-list_multiple = iup.list {"100m dash", "Long jump", "Javelin throw", "110m hurdlers", "Hammer throw", "High jump"
- ; multiple="YES", value="+--+--", size="EIGHTHxEIGHTH"}
-
--- Creates frame with multiple list and sets its title
-frm_sport = iup.frame {list_multiple
- ; title = "Competed in"}
-
--- Creates a list and sets its items, dropdown and amount of visible items
-list_dropdown = iup.list {"Less than US$ 1000", "US$ 2000", "US$ 5000", "US$ 10000", "US$ 20000", "US$ 50000", "More than US$ 100000"
- ; dropdown="YES", visible_items=5}
-
--- Creates frame with dropdown list and sets its title
-frm_prize = iup.frame {list_dropdown
- ; title = "Prizes won"}
-
--- Creates a dialog with the the frames with three lists and sets its title
-dlg = iup.dialog {iup.hbox {frm_medal, frm_sport, frm_prize}
- ; title = "IupList Example"}
-
--- Shows dialog in the center of the screen
-dlg:showxy(iup.CENTER, iup.CENTER)
-
-function list_multiple:action(t, i, v)
- if v == 0 then
- state = "deselected"
- else
- state = "selected"
- end
- iup.Message("Competed in", "Item "..i.." - "..t.." - "..state)
- return iup.DEFAULT
-end-- IupMenu Example in IupLua
--- Creates a dialog with a menu with two submenus.
-
--- Creates a text, sets its value and turns on text readonly mode
-text = iup.text {readonly = "YES", value = "Selecting show or hide will affect this text"}
-
--- Creates items, sets its shortcut keys and deactivates edit item
-item_show = iup.item {title = "Show", key = "K_S"}
-item_hide = iup.item {title = "Hide\tCtrl+H", key = "K_H"}
-item_edit = iup.item {title = "Edit", key = "K_E", active = "NO"}
-item_exit = iup.item {title = "Exit", key = "K_x"}
-
-function item_show:action()
- text.visible = "YES"
- return iup.DEFAULT
-end
-
-function item_hide:action()
- text.visible = "NO"
- return iup.DEFAULT
-end
-
-function item_exit:action()
- return iup.CLOSE
-end
-
--- Creates two menus
-menu_file = iup.menu {item_exit}
-menu_text = iup.menu {item_show, item_hide, item_edit}
-
--- Creates two submenus
-submenu_file = iup.submenu {menu_file; title = "File"}
-submenu_text = iup.submenu {menu_text; title = "Text"}
-
--- Creates main menu with two submenus
-menu = iup.menu {submenu_file, submenu_text}
-
--- Creates dialog with a text, sets its title and associates a menu to it
-dlg = iup.dialog{text; title="IupMenu Example", menu=menu}
-
--- Shows dialog in the center of the screen
-dlg:showxy(iup.CENTER,iup.CENTER)
-
-
-l = iup.list{dropdown="YES"}
-
-iup.SetAttribute(l, "1", "HELVETICA_NORMAL_8")
-iup.SetAttribute(l, "2", "COURIER_NORMAL_8")
-iup.SetAttribute(l, "3", "TIMES_NORMAL_8")
-iup.SetAttribute(l, "4", "HELVETICA_ITALIC_8")
-iup.SetAttribute(l, "5", "COURIER_ITALIC_8")
-iup.SetAttribute(l, "6", "TIMES_ITALIC_8")
-iup.SetAttribute(l, "7", "HELVETICA_BOLD_8")
-iup.SetAttribute(l, "8", "COURIER_BOLD_8")
-iup.SetAttribute(l, "9", "TIMES_BOLD_8")
-iup.SetAttribute(l, "10", "HELVETICA_NORMAL_10")
-iup.SetAttribute(l, "11", "COURIER_NORMAL_10")
-iup.SetAttribute(l, "12", "TIMES_NORMAL_10")
-iup.SetAttribute(l, "13", "HELVETICA_ITALIC_10")
-iup.SetAttribute(l, "14", "COURIER_ITALIC_10")
-iup.SetAttribute(l, "15", "TIMES_ITALIC_10")
-iup.SetAttribute(l, "16", "HELVETICA_BOLD_10")
-iup.SetAttribute(l, "17", "COURIER_BOLD_10")
-iup.SetAttribute(l, "18", "TIMES_BOLD_10")
-iup.SetAttribute(l, "19", "HELVETICA_NORMAL_12")
-iup.SetAttribute(l, "20", "COURIER_NORMAL_12")
-iup.SetAttribute(l, "21", "TIMES_NORMAL_12")
-iup.SetAttribute(l, "22", "HELVETICA_ITALIC_12")
-iup.SetAttribute(l, "23", "COURIER_ITALIC_12")
-iup.SetAttribute(l, "24", "TIMES_ITALIC_12")
-iup.SetAttribute(l, "25", "HELVETICA_BOLD_12")
-iup.SetAttribute(l, "26", "COURIER_BOLD_12")
-iup.SetAttribute(l, "27", "TIMES_BOLD_12")
-iup.SetAttribute(l, "28", "HELVETICA_NORMAL_14")
-iup.SetAttribute(l, "29", "COURIER_NORMAL_14")
-iup.SetAttribute(l, "30", "TIMES_NORMAL_14")
-iup.SetAttribute(l, "31", "HELVETICA_ITALIC_14")
-iup.SetAttribute(l, "32", "COURIER_ITALIC_14")
-iup.SetAttribute(l, "33", "TIMES_ITALIC_14")
-iup.SetAttribute(l, "34", "HELVETICA_BOLD_14")
-iup.SetAttribute(l, "35", "COURIER_BOLD_14")
-iup.SetAttribute(l, "36", "TIMES_BOLD_14")
-
-dg = iup.dialog{l}
-dg.title = "title"
-
-dg2 = nil
-
-l.action = function(self, t, i ,v)
-
- if dg2 then
- iup.Hide(dg2)
- end
-
- if v == 1 then
- ml = iup.multiline{}
- ml.size = "200x200"
- ml.value = "1234\nmmmmm\niiiii"
-
- ml.font = t
-
- dg2 = iup.dialog{ml}
- dg2.title = t
- dg2:show()
- iup.SetFocus(l)
- end
-end
-
-dg:show()
--- IupMultiline Simple Example in IupLua
--- Shows a multiline that ignores the treatment of the DEL key, canceling its effect.
-
-ml = iup.multiline{expand="YES", value="I ignore the DEL key!", border="YES"}
-
-ml.action = function(self, c, after)
- if c == iup.K_DEL then
- return iup.IGNORE
- else
- return iup.DEFAULT;
- end
-end
-
-dlg = iup.dialog{ml; title="IupMultiline", size="QUARTERxQUARTER"}
-dlg:show()-- IupRadio Example in IupLua
--- Creates a dialog for the user to select his/her gender.
--- In this case, the radio element is essential to prevent the user from
--- selecting both options.
-
-male = iup.toggle{title="Male"}
-female = iup.toggle{title="Female"}
-exclusive = iup.radio
-{
- iup.vbox
- {
- male,
- female
- };
- value=female,
- tip="Two state button - Exclusive - RADIO"
-}
-
-frame = iup.frame{exclusive; title="Gender"}
-
-dialog = iup.dialog
-{
- iup.hbox
- {
- iup.fill{},
- frame,
- iup.fill{}
- };
- title="IupRadio",
- size=140,
- resize="NO",
- minbox="NO",
- maxbox="NO"
-}
-
-dialog:show()-- IupSeparator Example in IupLua
--- Creates a dialog with a menu and some items.
--- A IupSeparator was used to separate the menu items.
-
--- Creates a text, sets its value and turns on text readonly mode
-text = iup.text {value = "This text is here only to compose", expand = "YES"}
-
--- Creates six items
-item_new = iup.item {title = "New"}
-item_open = iup.item {title = "Open"}
-item_close = iup.item {title = "Close"}
-item_pagesetup = iup.item {title = "Page Setup"}
-item_print = iup.item {title = "Print"}
-item_exit = iup.item {title = "Exit", action="return iup.CLOSE"}
-
--- Creates file menus
-menu_file = iup.menu {item_new, item_open, item_close, iup.separator{}, item_pagesetup, item_print, iup.separator{}, item_exit }
-
--- Creates file submenus
-submenu_file = iup.submenu {menu_file; title="File"}
-
--- Creates main menu with file submenu
-menu = iup.menu {submenu_file}
-
--- Creates dialog with a text, sets its title and associates a menu to it
-dlg = iup.dialog {text
- ; title ="IupSeparator Example", menu = menu, size = "QUARTERxEIGHTH"}
-
--- Shows dialog in the center of the screen
-dlg:showxy(iup.CENTER,iup.CENTER)-- IupSubmenu Example in IupLua
--- Creates a dialog with a menu with three submenus. One of the submenus has a submenu, which has another submenu.
-
--- Creates a text, sets its value and turns on text readonly mode
-text = iup.text {value = "This text is here only to compose", expand = "YES"}
-
--- Creates items of menu file
-item_new = iup.item {title = "New"}
-item_open = iup.item {title = "Open"}
-item_close = iup.item {title = "Close"}
-item_exit = iup.item {title = "Exit"}
-
--- Creates items of menu edit
-item_copy = iup.item {title = "Copy"}
-item_paste = iup.item {title = "Paste"}
-
--- Creates items for menu triangle
-item_equilateral = iup.item {title = "Equilateral"}
-item_isoceles = iup.item {title = "Isoceles"}
-item_scalenus = iup.item {title = "Scalenus"}
-
--- Creates menu triangle
-menu_triangle = iup.menu {item_equilateral, item_isoceles, item_scalenus}
-
--- Creates submenu triangle
-submenu_triangle = iup.submenu {menu_triangle; title = "Triangle"}
-
--- Creates items of menu create
-item_line = iup.item {title = "Line"}
-item_circle = iup.item {title = "Circle"}
-
--- Creates menu create
-menu_create = iup.menu {item_line, item_circle, submenu_triangle}
-
--- Creates submenu create
-submenu_create = iup.submenu {menu_create; title = "Create"}
-
--- Creates items of menu help
-item_help = iup.item {title = "Help"}
-
--- Creates menus of the main menu
-menu_file = iup.menu {item_new, item_open, item_close, iup.separator{}, item_exit }
-menu_edit = iup.menu {item_copy, item_paste, iup.separator{}, submenu_create}
-menu_help = iup.menu {item_help}
-
--- Creates submenus of the main menu
-submenu_file = iup.submenu {menu_file; title = "File"}
-submenu_edit = iup.submenu {menu_edit; title = "Edit"}
-submenu_help = iup.submenu {menu_help; title = "Help"}
-
--- Creates main menu with file submenu
-menu = iup.menu {submenu_file, submenu_edit, submenu_help}
-
--- Creates dialog with a text, sets its title and associates a menu to it
-dlg = iup.dialog {text
- ; title ="IupSubmenu Example", menu = menu, size = "QUARTERxEIGHTH"}
-
--- Shows dialog in the center of the screen
-dlg:showxy (iup.CENTER,iup.CENTER)
-
-function item_help:action ()
- iup.Message ("Warning", "Only Help and Exit items performs an operation")
- return iup.DEFAULT
-end
-
-function item_exit:action ()
- return iup.CLOSE
-end-- IupText Example in IupLua
--- Allows the user to execute a Lua command
-
-text = iup.text{value = "Write a text; press Ctrl-Q to exit"}
-
-function text:action(c)
- if c == iup.K_cQ then
- return iup.CLOSE
- end
- return iup.DEFAULT
-end
-
-dlg = iup.dialog{text; title="IupText"}
-
-dlg:showxy(iup.CENTER, iup.CENTER)
-iup.SetFocus(text)
--- IupTimer Example in Lua
-
-timer1 = iup.timer{time=100}
-timer2 = iup.timer{time=2000}
-
-function timer1:action_cb()
- print("timer 1 called")
- return iup.DEFAULT
-end
-
-function timer2:action_cb()
- print("timer 2 called")
- return iup.CLOSE
-end
-
--- can only be set after the time is created
-timer1.run = "YES"
-timer2.run = "YES"
-
-dg = iup.dialog{iup.label{title="Timer example"}}
-dg:show()
--- IupToggle Example in IupLua
--- Creates 9 toggles:
--- the first one has an image and an associated callback;
--- the second has an image and is deactivated;
--- the third is regular;
--- the fourth has its foreground color changed;
--- the fifth has its background color changed;
--- the sixth has its foreground and background colors changed;
--- the seventh is deactivated;
--- the eight has its font changed;
--- the ninth has its size changed.
-
-img1 = iup.image{
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- colors = {"255 255 255", "0 192 0"}
-}
-
-img2 = iup.image{
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1},
- {1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- colors = {"255 255 255", "0 192 0"}
-}
-
-toggle1 = iup.toggle{title = "", image = img1}
-toggle2 = iup.toggle{title = "deactivated toggle with image", image = img2, active="NO"}
-toggle3 = iup.toggle{title = "regular toggle"}
-toggle4 = iup.toggle{title = "toggle with blue foreground color", fgcolor = BLUE }
-toggle5 = iup.toggle{title = "toggle with red background color", bgcolor = RED }
-toggle6 = iup.toggle{title = "toggle with black backgrounf color and green foreground color", fgcolor = GREEN, bgcolor = BLACK }
-toggle7 = iup.toggle{title = "deactivated toggle", active = "NO" }
-toggle8 = iup.toggle{title = "toggle with Courier 14 Bold font", font = "COURIER_BOLD_14" }
-toggle9 = iup.toggle{title = "toggle with size EIGHTxEIGHT", size = "EIGHTHxEIGHTH" }
-
-function toggle1:action(v)
- if v == 1 then estado = "pressed" else estado = "released" end
- iup.Message("Toggle 1",estado)
-end
-
-box = iup.vbox{
- toggle1,
- toggle2,
- toggle3,
- toggle4,
- toggle5,
- toggle6,
- toggle7,
- toggle8,
- toggle9
- }
-
-toggles = iup.radio{box; expand="YES"}
-dlg = iup.dialog{toggles; title = "IupToggle", margin="5x5", gap="5", resize="NO"}
-dlg:showxy(iup.CENTER, iup.CENTER)-- IupVbox Example in IupLua
--- Creates a dialog with buttons placed one above the other, showing
--- the organization possibilities of the elements inside a vbox.
--- The ALIGNMENT attribute is explored in all its possibilities to obtain
--- the effects. The attributes GAP, MARGIN and SIZE are also tested.
-
--- Creates frame 1
-frm_1 = iup.frame
-{
- iup.hbox
- {
- iup.fill {},
- iup.vbox
- {
- iup.button {title = "1", size = "20x30", action = ""},
- iup.button {title = "2", size = "30x30", action = ""},
- iup.button {title = "3", size = "40x30", action = ""} ;
- -- Sets alignment and gap of vbox
- alignment = "ALEFT", gap = 10
- },
- iup.fill {}
- } ;
- -- Sets title of frame 1
- title = "ALIGNMENT = ALEFT, GAP = 10"
-}
-
--- Creates frame 2
-frm_2 = iup.frame
-{
- iup.hbox
- {
- iup.fill {},
- iup.vbox
- {
- iup.button {title = "1", size = "20x30", action = ""},
- iup.button {title = "2", size = "30x30", action = ""},
- iup.button {title = "3", size = "40x30", action = ""} ;
- -- Sets alignment and margin of vbox
- alignment = "ACENTER",
- },
- iup.fill {}
- } ;
- -- Sets title of frame 1
- title = "ALIGNMENT = ACENTER"
-}
-
--- Creates frame 3
-frm_3 = iup.frame
-{
- iup.hbox
- {
- iup.fill {},
- iup.vbox
- {
- iup.button {title = "1", size = "20x30", action = ""},
- iup.button {title = "2", size = "30x30", action = ""},
- iup.button {title = "3", size = "40x30", action = ""} ;
- -- Sets alignment and size of vbox
- alignment = "ARIGHT"
- },
- iup.fill {}
- } ;
- -- Sets title of frame 3
- title = "ALIGNMENT = ARIGHT"
-}
-
-dlg = iup.dialog
-{
- iup.vbox
- {
- frm_1,
- frm_2,
- frm_3
- } ;
- title = "IupVbox Example", size = "QUARTER"
-}
-
--- Shows dialog in the center of the screen
-dlg:showxy (iup.CENTER, iup.CENTER)-- IupZbox Example in IupLua
--- An application of a zbox could be a program requesting several entries from the user according to a previous selection. In this example, a list of possible layouts ,each one consisting of an element, is presented, and according to the selected option the dialog below the list is changed.
-
-fill = iup.fill {}
-text = iup.text {value = "Enter your text here", expand = "YES"}
-lbl = iup.label {title = "This element is a label"}
-btn = iup.button {title = "This button does nothing"}
-zbox = iup.zbox
-{
- fill,
- text,
- lbl,
- btn ;
- alignment = "ACENTER", value=text
-}
-
-list = iup.list { "fill", "text", "lbl", "btn"; value="2"}
-ilist = {fill, text, lbl, btn}
-
-function list:action (t, o, selected)
- if selected == 1 then
- -- Sets the value of the zbox to the selected element
- zbox.value=ilist[o]
- end
-
- return iup.DEFAULT
-end
-
-frm = iup.frame
-{
- iup.hbox
- {
- iup.fill{},
- list,
- iup.fill{}
- } ;
- title = "Select an element"
-}
-
-dlg = iup.dialog
-{
- iup.vbox
- {
- frm,
- zbox
- } ;
- size = "QUARTER",
- title = "IupZbox Example"
-}
-
-dlg:showxy (0, 0)
---[[
-JSON4Lua example script.
-Demonstrates the simple functionality of the json module.
-]]--
-json = require('json')
-
-
--- Object to JSON encode
-test = {
- one='first',two='second',three={2,3,5}
-}
-
-jsonTest = json.encode(test)
-
-print('JSON encoded test is: ' .. jsonTest)
-
--- Now JSON decode the json string
-result = json.decode(jsonTest)
-
-print ("The decoded table result:")
-table.foreach(result,print)
-print ("The decoded table result.three")
-table.foreach(result.three, print)
---
--- jsonrpc.lua
--- Installed in a CGILua webserver environment (with necessary CGI Lua 5.0 patch)
---
-require ('json.rpcserver')
-
--- The Lua class that is to serve JSON RPC requests
-local myServer = {
- echo = function (msg) return msg end,
- average = function(...)
- local total=0
- local count=0
- for i=1, table.getn(arg) do
- total = total + arg[i]
- count = count + 1
- end
- return { average= total/count, sum = total, n=count }
- end
-}
-
-json.rpcserver.serve(myServer)--[[
-Some basic tests for JSON4Lua.
-]]--
-
---- Compares two tables for being data-identical.
-function compareData(a,b)
- if (type(a)=='string' or type(a)=='number' or type(a)=='boolean' or type(a)=='nil') then return a==b end
- -- After basic data types, we're only interested in tables
- if (type(a)~='table') then return true end
- -- Check that a has everything b has
- for k,v in pairs(b) do
- if (not compareData( a[k], v ) ) then return false end
- end
- for k,v in pairs(a) do
- if (not compareData( v, b[k] ) ) then return false end
- end
- return true
-end
-
----
--- Checks that our compareData function works properly
-function testCompareData()
- s = "name"
- r = "name"
- assert(compareData(s,r))
- assert(not compareData('fred',s))
- assert(not compareData(nil, s))
- assert(not compareData("123",123))
- assert(not compareData(false, nil))
- assert(compareData(true, true))
- assert(compareData({1,2,3},{1,2,3}))
- assert(compareData({'one',2,'three'},{'one',2,'three'}))
- assert(not compareData({'one',2,4},{4,2,'one'}))
- assert(compareData({one='ichi',two='nichi',three='san'}, {three='san',two='nichi',one='ichi'}))
- s = { one={1,2,3}, two={one='hitotsu',two='futatsu',three='mitsu'} }
- assert(compareData(s,s))
- t = { one={1,2,3}, two={one='een',two='twee',three='drie'} }
- assert(not compareData(s,t))
-end
-
-testCompareData()
-
---
---
--- Performs some perfunctory tests on JSON module
-function testJSON4Lua()
- json = require('json')
-
- if nil then
- -- Test encodeString
- s = [["\"
-]]
- r = json._encodeString(s)
- assert(r=='\\"\\\\\\"\\n')
- s = [["""\\\"]]
- r = json._encodeString(s)
- assert(r==[[\"\"\"\\\\\\\"]])
-
- end
-
- -- Test encode for basic strings (complicated strings)
- s = [[Hello, Lua!]]
- r = json.encode(s)
- assert(r=='"Hello, Lua!"')
- s = [["\"
-]]
- r = json.encode(s)
- assert(r=='\"\\"\\\\\\"\\n\"')
- s = [["""\\\"]]
- r = json.encode(s)
- assert(r==[["\"\"\"\\\\\\\""]])
-
- -- Test encode for numeric values
- s = 23
- r = json.encode(s)
- assert(r=='23')
- s=48.123
- r = json.encode(s)
- assert(r=='48.123')
-
- -- Test encode for boolean values
- assert(json.encode(true)=='true')
- assert(json.encode(false)=='false')
- assert(json.encode(nil)=='null')
-
- -- Test encode for arrays
- s = {1,2,3}
- r = json.encode(s)
- assert(r=="[1,2,3]")
- s = {9,9,9}
- r = json.encode(s)
- assert(r=="[9,9,9]")
-
- -- Complex array test
- s = { 2, 'joe', false, nil, 'hi' }
- r = json.encode(s)
- assert(r=='[2,"joe",false,null,"hi"]')
-
- -- Test encode for tables
- s = {Name='Craig',email='craig@lateral.co.za',age=35}
- r = json.encode(s)
- -- NB: This test can fail because of order: need to test further once
- -- decoding is supported.
- assert(r==[[{"age":35,"Name":"Craig","email":"craig@lateral.co.za"}]])
-
- -- Test decode_scanWhitespace
- if nil then
- s = " \n \r \t "
- e = json._decode_scanWhitespace(s,1)
- assert(e==string.len(s)+1)
- s = " \n\r\t4"
- assert(json._decode_scanWhitespace(s,1)==5)
-
- -- Test decode_scanString
- s = [["Test"]]
- r,e = json._decode_scanString(s,1)
- assert(r=='Test' and e==7)
- s = [["This\nis a \"test"]]
- r = json._decode_scanString(s,1)
- assert(r=="This\nis a \"test")
-
- -- Test decode_scanNumber
- s = [[354]]
- r,e = json._decode_scanNumber(s,1)
- assert(r==354 and e==4)
- s = [[ 4565.23 AND OTHER THINGS ]]
- r,e = json._decode_scanNumber(s,2)
- assert(r==4565.23 and e==9)
- s = [[ -23.22 and ]]
- r,e = json._decode_scanNumber(s,2)
- assert(r==-23.22 and e==8)
-
- -- Test decode_scanConstant
- s = "true"
- r,e = json._decode_scanConstant(s,1)
- assert(r==true and e==5)
- s = " false "
- r,e = json._decode_scanConstant(s,3)
- assert(r==false and e==8)
- s = "1null6"
- r,e = json._decode_scanConstant(s,2)
- assert(r==nil and e==6)
-
- -- Test decode_scanArray
- s = "[1,2,3]"
- r,e = json._decode_scanArray(s,1)
- assert(compareData(r,{1,2,3}))
- s = [[[ 1 , 3 ,5 , "Fred" , true, false, null, -23 ] ]]
- r,e = json._decode_scanArray(s,1)
- assert(compareData(r, {1,3,5,'Fred',true,false,nil,-23} ) )
- s = "[3,5,null,7,9]"
- r,e = json._decode_scanArray(s,1)
- assert(compareData(r, {3,5,nil,7,9}))
- s = "[3,5,null,7,9,null,null]"
- r,e = json._decode_scanArray(s,1)
- assert(compareData(r, {3,5,nil,7,9,nil,nil}))
-
- end
-
- -- Test decode_scanObject
- s = [[ {"one":1, "two":2, "three":"three", "four":true} ]]
- r,e = json.decode(s)
- assert(compareData(r,{one=1,two=2,three='three',four=true}))
- s = [[ { "one" : { "first":1,"second":2,"third":3}, "two":2, "three":false } ]]
- r,e = json.decode(s)
- assert(compareData(r, {one={first=1,second=2,third=3},two=2,three=false}))
- s = [[ { "primes" : [2,3,5,7,9], "user":{"name":"craig","age":35,"programs_lua":true},
- "lua_is_great":true } ]]
- r,e = json.decode(s)
- assert(compareData(r, {primes={2,3,5,7,9},user={name='craig',age=35,programs_lua=true},lua_is_great=true}))
-
- -- Test json.null management
- t = { 1,2,json.null,4 }
- assert( json.encode(t)=="[1,2,null,4]" )
- t = {x=json.null }
- r = json.encode(t)
- assert( json.encode(t) == '{"x":null}' )
-
- -- Test comment decoding
- s = [[ /* A comment
- that spans
- a few lines
- */
- "test"
- ]]
- r,e = json.decode(s)
- assert(r=='test',"Comment decoding failed")
-end
-
-testJSON4Lua()
-
-print("JSON4Lua tests completed successfully")--[[
- Some Time Trails for the JSON4Lua package
-]]--
-
-
-require('json')
-require('os')
-require('table')
-
-local t1 = os.clock()
-local jstr
-local v
-for i=1,100 do
- local t = {}
- for j=1,500 do
- table.insert(t,j)
- end
- for j=1,500 do
- table.insert(t,"VALUE")
- end
- jstr = json.encode(t)
- v = json.decode(jstr)
- --print(json.encode(t))
-end
-
-for i = 1,100 do
- local t = {}
- for j=1,500 do
- local m= math.mod(j,3)
- if (m==0) then
- t['a'..j] = true
- elseif m==1 then
- t['a'..j] = json.null
- else
- t['a'..j] = j
- end
- end
- jstr = json.encode(t)
- v = json.decode(jstr)
-end
-
-print (jstr)
---print(type(t1))
-local t2 = os.clock()
-
-print ("Elapsed time=" .. os.difftime(t2,t1) .. "s")-----------------------------------------------------------------------------
--- JSON4Lua: JSON encoding / decoding support for the Lua language.
--- json Module.
--- Author: Craig Mason-Jones
--- Homepage: http://json.luaforge.net/
--- Version: 0.9.20
--- This module is released under the The GNU General Public License (GPL).
--- Please see LICENCE.txt for details.
---
--- USAGE:
--- This module exposes two functions:
--- encode(o)
--- Returns the table / string / boolean / number / nil / json.null value as a JSON-encoded string.
--- decode(json_string)
--- Returns a Lua object populated with the data encoded in the JSON string json_string.
---
--- REQUIREMENTS:
--- compat-5.1 if using Lua 5.0
---
--- CHANGELOG
--- 0.9.20 Introduction of local Lua functions for private functions (removed _ function prefix).
--- Fixed Lua 5.1 compatibility issues.
--- Introduced json.null to have null values in associative arrays.
--- encode() performance improvement (more than 50%) through table.concat rather than ..
--- Introduced decode ability to ignore /**/ comments in the JSON string.
--- 0.9.10 Fix to array encoding / decoding to correctly manage nil/null values in arrays.
------------------------------------------------------------------------------
-
------------------------------------------------------------------------------
--- Imports and dependencies
------------------------------------------------------------------------------
-local math = require('math')
-local string = require("string")
-local table = require("table")
-
-local base = _G
-
------------------------------------------------------------------------------
--- Module declaration
------------------------------------------------------------------------------
-module("json")
-
--- Public functions
-
--- Private functions
-local decode_scanArray
-local decode_scanComment
-local decode_scanConstant
-local decode_scanNumber
-local decode_scanObject
-local decode_scanString
-local decode_scanWhitespace
-local encodeString
-local isArray
-local isEncodable
-
------------------------------------------------------------------------------
--- PUBLIC FUNCTIONS
------------------------------------------------------------------------------
---- Encodes an arbitrary Lua object / variable.
--- @param v The Lua object / variable to be JSON encoded.
--- @return String containing the JSON encoding in internal Lua string format (i.e. not unicode)
-function encode (v)
- -- Handle nil values
- if v==nil then
- return "null"
- end
-
- local vtype = base.type(v)
-
- -- Handle strings
- if vtype=='string' then
- return '"' .. encodeString(v) .. '"' -- Need to handle encoding in string
- end
-
- -- Handle booleans
- if vtype=='number' or vtype=='boolean' then
- return base.tostring(v)
- end
-
- -- Handle tables
- if vtype=='table' then
- local rval = {}
- -- Consider arrays separately
- local bArray, maxCount = isArray(v)
- if bArray then
- for i = 1,maxCount do
- table.insert(rval, encode(v[i]))
- end
- else -- An object, not an array
- for i,j in base.pairs(v) do
- if isEncodable(i) and isEncodable(j) then
- table.insert(rval, '"' .. encodeString(i) .. '":' .. encode(j))
- end
- end
- end
- if bArray then
- return '[' .. table.concat(rval,',') ..']'
- else
- return '{' .. table.concat(rval,',') .. '}'
- end
- end
-
- -- Handle null values
- if vtype=='function' and v==null then
- return 'null'
- end
-
- base.assert(false,'encode attempt to encode unsupported type ' .. vtype .. ':' .. base.tostring(v))
-end
-
-
---- Decodes a JSON string and returns the decoded value as a Lua data structure / value.
--- @param s The string to scan.
--- @param [startPos] Optional starting position where the JSON string is located. Defaults to 1.
--- @param Lua object, number The object that was scanned, as a Lua table / string / number / boolean or nil,
--- and the position of the first character after
--- the scanned JSON object.
-function decode(s, startPos)
- startPos = startPos and startPos or 1
- startPos = decode_scanWhitespace(s,startPos)
- base.assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' .. s .. ']')
- local curChar = string.sub(s,startPos,startPos)
- -- Object
- if curChar=='{' then
- return decode_scanObject(s,startPos)
- end
- -- Array
- if curChar=='[' then
- return decode_scanArray(s,startPos)
- end
- -- Number
- if string.find("+-0123456789.e", curChar, 1, true) then
- return decode_scanNumber(s,startPos)
- end
- -- String
- if curChar==[["]] or curChar==[[']] then
- return decode_scanString(s,startPos)
- end
- if string.sub(s,startPos,startPos+1)=='/*' then
- return decode(s, decode_scanComment(s,startPos))
- end
- -- Otherwise, it must be a constant
- return decode_scanConstant(s,startPos)
-end
-
---- The null function allows one to specify a null value in an associative array (which is otherwise
--- discarded if you set the value with 'nil' in Lua. Simply set t = { first=json.null }
-function null()
- return null -- so json.null() will also return null ;-)
-end
------------------------------------------------------------------------------
--- Internal, PRIVATE functions.
--- Following a Python-like convention, I have prefixed all these 'PRIVATE'
--- functions with an underscore.
------------------------------------------------------------------------------
-
---- Scans an array from JSON into a Lua object
--- startPos begins at the start of the array.
--- Returns the array and the next starting position
--- @param s The string being scanned.
--- @param startPos The starting position for the scan.
--- @return table, int The scanned array as a table, and the position of the next character to scan.
-function decode_scanArray(s,startPos)
- local array = {} -- The return value
- local stringLen = string.len(s)
- base.assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' .. startPos .. ' in string:\n'..s )
- startPos = startPos + 1
- -- Infinite loop for array elements
- repeat
- startPos = decode_scanWhitespace(s,startPos)
- base.assert(startPos<=stringLen,'JSON String ended unexpectedly scanning array.')
- local curChar = string.sub(s,startPos,startPos)
- if (curChar==']') then
- return array, startPos+1
- end
- if (curChar==',') then
- startPos = decode_scanWhitespace(s,startPos+1)
- end
- base.assert(startPos<=stringLen, 'JSON String ended unexpectedly scanning array.')
- object, startPos = decode(s,startPos)
- table.insert(array,object)
- until false
-end
-
---- Scans a comment and discards the comment.
--- Returns the position of the next character following the comment.
--- @param string s The JSON string to scan.
--- @param int startPos The starting position of the comment
-function decode_scanComment(s, startPos)
- base.assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " .. startPos)
- local endPos = string.find(s,'*/',startPos+2)
- base.assert(endPos~=nil, "Unterminated comment in string at " .. startPos)
- return endPos+2
-end
-
---- Scans for given constants: true, false or null
--- Returns the appropriate Lua type, and the position of the next character to read.
--- @param s The string being scanned.
--- @param startPos The position in the string at which to start scanning.
--- @return object, int The object (true, false or nil) and the position at which the next character should be
--- scanned.
-function decode_scanConstant(s, startPos)
- local consts = { ["true"] = true, ["false"] = false, ["null"] = nil }
- local constNames = {"true","false","null"}
-
- for i,k in base.pairs(constNames) do
- --print ("[" .. string.sub(s,startPos, startPos + string.len(k) -1) .."]", k)
- if string.sub(s,startPos, startPos + string.len(k) -1 )==k then
- return consts[k], startPos + string.len(k)
- end
- end
- base.assert(nil, 'Failed to scan constant from string ' .. s .. ' at starting position ' .. startPos)
-end
-
---- Scans a number from the JSON encoded string.
--- (in fact, also is able to scan numeric +- eqns, which is not
--- in the JSON spec.)
--- Returns the number, and the position of the next character
--- after the number.
--- @param s The string being scanned.
--- @param startPos The position at which to start scanning.
--- @return number, int The extracted number and the position of the next character to scan.
-function decode_scanNumber(s,startPos)
- local endPos = startPos+1
- local stringLen = string.len(s)
- local acceptableChars = "+-0123456789.e"
- while (string.find(acceptableChars, string.sub(s,endPos,endPos), 1, true)
- and endPos<=stringLen
- ) do
- endPos = endPos + 1
- end
- local stringValue = 'return ' .. string.sub(s,startPos, endPos-1)
- local stringEval = base.loadstring(stringValue)
- base.assert(stringEval, 'Failed to scan number [ ' .. stringValue .. '] in JSON string at position ' .. startPos .. ' : ' .. endPos)
- return stringEval(), endPos
-end
-
---- Scans a JSON object into a Lua object.
--- startPos begins at the start of the object.
--- Returns the object and the next starting position.
--- @param s The string being scanned.
--- @param startPos The starting position of the scan.
--- @return table, int The scanned object as a table and the position of the next character to scan.
-function decode_scanObject(s,startPos)
- local object = {}
- local stringLen = string.len(s)
- local key, value
- base.assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' .. startPos .. ' in string:\n' .. s)
- startPos = startPos + 1
- repeat
- startPos = decode_scanWhitespace(s,startPos)
- base.assert(startPos<=stringLen, 'JSON string ended unexpectedly while scanning object.')
- local curChar = string.sub(s,startPos,startPos)
- if (curChar=='}') then
- return object,startPos+1
- end
- if (curChar==',') then
- startPos = decode_scanWhitespace(s,startPos+1)
- end
- base.assert(startPos<=stringLen, 'JSON string ended unexpectedly scanning object.')
- -- Scan the key
- key, startPos = decode(s,startPos)
- base.assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
- startPos = decode_scanWhitespace(s,startPos)
- base.assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
- base.assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' .. startPos)
- startPos = decode_scanWhitespace(s,startPos+1)
- base.assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
- value, startPos = decode(s,startPos)
- object[key]=value
- until false -- infinite loop while key-value pairs are found
-end
-
---- Scans a JSON string from the opening inverted comma or single quote to the
--- end of the string.
--- Returns the string extracted as a Lua string,
--- and the position of the next non-string character
--- (after the closing inverted comma or single quote).
--- @param s The string being scanned.
--- @param startPos The starting position of the scan.
--- @return string, int The extracted string as a Lua string, and the next character to parse.
-function decode_scanString(s,startPos)
- base.assert(startPos, 'decode_scanString(..) called without start position')
- local startChar = string.sub(s,startPos,startPos)
- base.assert(startChar==[[']] or startChar==[["]],'decode_scanString called for a non-string')
- local escaped = false
- local endPos = startPos + 1
- local bEnded = false
- local stringLen = string.len(s)
- repeat
- local curChar = string.sub(s,endPos,endPos)
- if not escaped then
- if curChar==[[\]] then
- escaped = true
- else
- bEnded = curChar==startChar
- end
- else
- -- If we're escaped, we accept the current character come what may
- escaped = false
- end
- endPos = endPos + 1
- base.assert(endPos <= stringLen+1, "String decoding failed: unterminated string at position " .. endPos)
- until bEnded
- local stringValue = 'return ' .. string.sub(s, startPos, endPos-1)
- local stringEval = base.loadstring(stringValue)
- base.assert(stringEval, 'Failed to load string [ ' .. stringValue .. '] in JSON4Lua.decode_scanString at position ' .. startPos .. ' : ' .. endPos)
- return stringEval(), endPos
-end
-
---- Scans a JSON string skipping all whitespace from the current start position.
--- Returns the position of the first non-whitespace character, or nil if the whole end of string is reached.
--- @param s The string being scanned
--- @param startPos The starting position where we should begin removing whitespace.
--- @return int The first position where non-whitespace was encountered, or string.len(s)+1 if the end of string
--- was reached.
-function decode_scanWhitespace(s,startPos)
- local whitespace=" \n\r\t"
- local stringLen = string.len(s)
- while ( string.find(whitespace, string.sub(s,startPos,startPos), 1, true) and startPos <= stringLen) do
- startPos = startPos + 1
- end
- return startPos
-end
-
---- Encodes a string to be JSON-compatible.
--- This just involves back-quoting inverted commas, back-quotes and newlines, I think ;-)
--- @param s The string to return as a JSON encoded (i.e. backquoted string)
--- @return The string appropriately escaped.
-function encodeString(s)
- s = string.gsub(s,'\\','\\\\')
- s = string.gsub(s,'"','\\"')
- s = string.gsub(s,"'","\\'")
- s = string.gsub(s,'\n','\\n')
- s = string.gsub(s,'\t','\\t')
- return s
-end
-
--- Determines whether the given Lua type is an array or a table / dictionary.
--- We consider any table an array if it has indexes 1..n for its n items, and no
--- other data in the table.
--- I think this method is currently a little 'flaky', but can't think of a good way around it yet...
--- @param t The table to evaluate as an array
--- @return boolean, number True if the table can be represented as an array, false otherwise. If true,
--- the second returned value is the maximum
--- number of indexed elements in the array.
-function isArray(t)
- -- Next we count all the elements, ensuring that any non-indexed elements are not-encodable
- -- (with the possible exception of 'n')
- local maxIndex = 0
- for k,v in base.pairs(t) do
- if (base.type(k)=='number' and math.floor(k)==k and 1<=k) then -- k,v is an indexed pair
- if (not isEncodable(v)) then return false end -- All array elements must be encodable
- maxIndex = math.max(maxIndex,k)
- else
- if (k=='n') then
- if v ~= table.getn(t) then return false end -- False if n does not hold the number of elements
- else -- Else of (k=='n')
- if isEncodable(v) then return false end
- end -- End of (k~='n')
- end -- End of k,v not an indexed pair
- end -- End of loop across all pairs
- return true, maxIndex
-end
-
---- Determines whether the given Lua object / table / variable can be JSON encoded. The only
--- types that are JSON encodable are: string, boolean, number, nil, table and json.null.
--- In this implementation, all other types are ignored.
--- @param o The object to examine.
--- @return boolean True if the object should be JSON encoded, false if it should be ignored.
-function isEncodable(o)
- local t = base.type(o)
- return (t=='string' or t=='boolean' or t=='number' or t=='nil' or t=='table') or (t=='function' and o==null)
-end
-
------------------------------------------------------------------------------
--- JSONRPC4Lua: JSON RPC client calls over http for the Lua language.
--- json.rpc Module.
--- Author: Craig Mason-Jones
--- Homepage: http://json.luaforge.net/
--- Version: 0.9.10
--- This module is released under the The GNU General Public License (GPL).
--- Please see LICENCE.txt for details.
---
--- USAGE:
--- This module exposes two functions:
--- proxy( 'url')
--- Returns a proxy object for calling the JSON RPC Service at the given url.
--- call ( 'url', 'method', ...)
--- Calls the JSON RPC server at the given url, invokes the appropriate method, and
--- passes the remaining parameters. Returns the result and the error. If the result is nil, an error
--- should be there (or the system returned a null). If an error is there, the result should be nil.
---
--- REQUIREMENTS:
--- Lua socket 2.0 (http://www.cs.princeton.edu/~diego/professional/luasocket/)
--- json (The JSON4Lua package with which it is bundled)
--- compat-5.1 if using Lua 5.0.
------------------------------------------------------------------------------
-
-module('json.rpc')
-
------------------------------------------------------------------------------
--- Imports and dependencies
------------------------------------------------------------------------------
-local json = require('json')
-local http = require("socket.http")
-
------------------------------------------------------------------------------
--- PUBLIC functions
------------------------------------------------------------------------------
-
---- Creates an RPC Proxy object for the given Url of a JSON-RPC server.
--- @param url The URL for the JSON RPC Server.
--- @return Object on which JSON-RPC remote methods can be called.
--- EXAMPLE Usage:
--- local jsolait = json.rpc.proxy('http://jsolait.net/testj.py')
--- print(jsolait.echo('This is a test of the echo method!'))
--- print(jsolait.args2String('first','second','third'))
--- table.foreachi( jsolait.args2Array(5,4,3,2,1), print)
-function proxy(url)
- local serverProxy = {}
- local proxyMeta = {
- __index = function(t, key)
- return function(...)
- return json.rpc.call(url, key, unpack(arg))
- end
- end
- }
- setmetatable(serverProxy, proxyMeta)
- return serverProxy
-end
-
---- Calls a JSON RPC method on a remote server.
--- Returns a boolean true if the call succeeded, false otherwise.
--- On success, the second returned parameter is the decoded
--- JSON object from the server.
--- On http failure, returns nil and an error message.
--- On success, returns the result and nil.
--- @param url The url of the JSON RPC server.
--- @param method The method being called.
--- @param ... Parameters to pass to the method.
--- @return result, error The JSON RPC result and error. One or the other should be nil. If both
--- are nil, this means that the result of the RPC call was nil.
--- EXAMPLE Usage:
--- print(json.rpc.call('http://jsolait.net/testj.py','echo','This string will be returned'))
-function call(url, method, ...)
- assert(method,'method param is nil to call')
- local JSONRequestArray = {
- id="httpRequest",
- ["method"]=method,
- params = arg
- }
- local httpResponse, result , code
- local jsonRequest = json.encode(JSONRequestArray)
- -- We use the sophisticated http.request form (with ltn12 sources and sinks) so that
- -- we can set the content-type to text/plain. While this shouldn't strictly-speaking be true,
- -- it seems a good idea (Xavante won't work w/out a content-type header, although a patch
- -- is needed to Xavante to make it work with text/plain)
- local ltn12 = require('ltn12')
- local resultChunks = {}
- httpResponse, code = http.request(
- { ['url'] = url,
- sink = ltn12.sink.table(resultChunks),
- method = 'POST',
- headers = { ['content-type']='text/plain', ['content-length']=string.len(jsonRequest) },
- source = ltn12.source.string(jsonRequest)
- }
- )
- httpResponse = table.concat(resultChunks)
- -- Check the http response code
- if (code~=200) then
- return nil, "HTTP ERROR: " .. code
- end
- -- And decode the httpResponse and check the JSON RPC result code
- result = json.decode( httpResponse )
- if result.result then
- return result.result, nil
- else
- return nil, result.error
- end
-end
------------------------------------------------------------------------------
--- JSONRPC4Lua: JSON RPC server for exposing Lua objects as JSON RPC callable
--- objects via http.
--- json.rpcserver Module.
--- Author: Craig Mason-Jones
--- Homepage: http://json.luaforge.net/
--- Version: 0.9.10
--- This module is released under the The GNU General Public License (GPL).
--- Please see LICENCE.txt for details.
---
--- USAGE:
--- This module exposes one function:
--- server(luaClass, packReturn)
--- Manages incoming JSON RPC request forwarding the method call to the given
--- object. If packReturn is true, multiple return values are packed into an
--- array on return.
---
--- IMPORTANT NOTES:
--- 1. This version ought really not be 0.9.10, since this particular part of the
--- JSONRPC4Lua package is very first-draft. However, the JSON4Lua package with which
--- it comes is quite solid, so there you have it :-)
--- 2. This has only been tested with Xavante webserver, with which it works
--- if you patch CGILua to accept 'text/plain' content type. See doc\cgilua_patch.html
--- for details.
-----------------------------------------------------------------------------
-
-module ('json.rpcserver')
-
----
--- Implements a JSON RPC Server wrapping for luaClass, exposing each of luaClass's
--- methods as JSON RPC callable methods.
--- @param luaClass The JSON RPC class to expose.
--- @param packReturn If true, the server will automatically wrap any
--- multiple-value returns into an array. Single returns remain single returns. If
--- false, when a function returns multiple values, only the first of these values will
--- be returned.
---
-function serve(luaClass, packReturn)
- cgilua.contentheader('text','plain')
- require('cgilua')
- require ('json')
- local postData = ""
-
- if not cgilua.servervariable('CONTENT_LENGTH') then
- cgilua.put("Please access JSON Request using HTTP POST Request")
- return 0
- else
- postData = cgi[1] -- SAPI.Request.getpostdata() --[[{ "id":1, "method":"echo","params":["Hi there"]}]] --
- end
- -- @TODO Catch an error condition on decoding the data
- local jsonRequest = json.decode(postData)
- local jsonResponse = {}
- jsonResponse.id = jsonRequest.id
- local method = luaClass[ jsonRequest.method ]
-
- if not method then
- jsonResponse.error = 'Method ' .. jsonRequest.method .. ' does not exist at this server.'
- else
- local callResult = { pcall( method, unpack( jsonRequest.params ) ) }
- if callResult[1] then -- Function call successfull
- table.remove(callResult,1)
- if packReturn and table.getn(callResult)>1 then
- jsonResponse.result = callResult
- else
- jsonResponse.result = unpack(callResult) -- NB: Does not support multiple argument returns
- end
- else
- jsonResponse.error = callResult[2]
- end
- end
-
- -- Output the result
- -- TODO: How to be sure that the result and error tags are there even when they are nil in Lua?
- -- Can force them by hand... ?
- cgilua.contentheader('text','plain')
- cgilua.put( json.encode( jsonResponse ) )
-end
-
---[[
- Auctioneer Advanced
- Version: <%version%> (<%codename%>)
- Revision: $Id: CoreMain.lua 2233 2007-09-25 03:57:33Z norganna $
- URL: http://auctioneeraddon.com/
-
- This is an addon for World of Warcraft that adds statistical history to the auction data that is collected
- when the auction is scanned, so that you can easily determine what price
- you will be able to sell an item for at auction or at a vendor whenever you
- mouse-over an item in the game
-
- License:
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program(see GPL.txt); if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- Note:
- This AddOn's source code is specifically designed to work with
- World of Warcraft's interpreted AddOn system.
- You have an implicit licence to use this AddOn with these facilities
- since that is its designated purpose as per:
- http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
-]]
-
-
---[[
- See CoreAPI.lua for a description of the modules API
-]]
-
-if (not AucAdvanced) then AucAdvanced = {} end
-if (not AucAdvancedData) then AucAdvancedData = {} end
-if (not AucAdvancedLocal) then AucAdvancedLocal = {} end
-if (not AucAdvancedConfig) then AucAdvancedConfig = {} end
-
-AucAdvanced.Version="<%version%>";
-if (AucAdvanced.Version == "<".."%version%>") then
- AucAdvanced.Version = "5.0.DEV";
-end
-
-local private = {}
-
--- For our modular stats system, each stats engine should add their
--- subclass to AucAdvanced.Modules.<type>.<name> and store their data into their own
--- data table in AucAdvancedData.Stats.<type><name>
-if (not AucAdvanced.Modules) then AucAdvanced.Modules = {Stat={},Util={},Filter={}} end
-if (not AucAdvancedData.Stats) then AucAdvancedData.Stats = {} end
-if (not AucAdvancedLocal.Stats) then AucAdvancedLocal.Stats = {} end
-
-function private.TooltipHook(vars, ret, frame, name, hyperlink, quality, quantity, cost, additional)
- if EnhTooltip.LinkType(hyperlink) ~= "item" then
- return -- Auctioneer hooks into item tooltips only
- end
-
- -- Check to see if we need to force load scandata
- local getter = AucAdvanced.Settings.GetSetting
- if (getter("scandata.tooltip.display") and getter("scandata.force")) then
- AucAdvanced.Scan.GetImage()
- end
-
- for system, systemMods in pairs(AucAdvanced.Modules) do
- for engine, engineLib in pairs(systemMods) do
- if (engineLib.Processor) then engineLib.Processor("tooltip", frame, name, hyperlink, quality, quantity, cost, additional) end
- end
- end
-end
-
-function private.HookAH()
- hooksecurefunc("AuctionFrameBrowse_Update", AucAdvanced.API.ListUpdate)
- for system, systemMods in pairs(AucAdvanced.Modules) do
- for engine, engineLib in pairs(systemMods) do
- if (engineLib.Processor) then
- engineLib.Processor("auctionui")
- end
- end
- end
-end
-
-function private.OnLoad(addon)
- addon = addon:lower()
-
- -- Check if the actual addon itself is loading
- if (addon == "auc-advanced") then
- Stubby.RegisterAddOnHook("Blizzard_AuctionUi", "Auc-Advanced", private.HookAH)
- Stubby.RegisterFunctionHook("EnhTooltip.AddTooltip", 600, private.TooltipHook)
- for pos, module in ipairs(AucAdvanced.EmbeddedModules) do
- -- These embedded modules have also just been loaded
- private.OnLoad(module)
- end
- end
-
- -- Notify the actual module if it exists
- local auc, sys, eng = strsplit("-", addon)
- if (auc == "auc" and sys and eng) then
- for system, systemMods in pairs(AucAdvanced.Modules) do
- if (sys == system:lower()) then
- for engine, engineLib in pairs(systemMods) do
- if (eng == engine:lower() and engineLib.OnLoad) then
- engineLib.OnLoad(addon)
- end
- end
- end
- end
- end
-
- -- Check all modules' load triggers and pass event to processors
- for system, systemMods in pairs(AucAdvanced.Modules) do
- for engine, engineLib in pairs(systemMods) do
- if (engineLib.LoadTriggers and engineLib.LoadTriggers[addon]) then
- if (engineLib.OnLoad) then
- engineLib.OnLoad(addon)
- end
- end
- if (engineLib.Processor and auc == "auc" and sys and eng) then
- engineLib.Processor("load", addon)
- end
- end
- end
-end
-
-function private.OnUnload()
- for system, systemMods in pairs(AucAdvanced.Modules) do
- for engine, engineLib in pairs(systemMods) do
- if (engineLib.OnUnload) then
- engineLib.OnUnload()
- end
- end
- end
-end
-
-private.Schedule = {}
-function private.OnEvent(...)
- local event, arg = select(2, ...)
- if (event == "ADDON_LOADED") then
- local addon = string.lower(arg)
- if (addon:sub(1,4) == "auc-") then
- private.OnLoad(addon)
- end
- elseif (event == "AUCTION_HOUSE_SHOW") then
- -- Do Nothing for now
- elseif (event == "AUCTION_HOUSE_CLOSED") then
- AucAdvanced.Scan.Interrupt()
- elseif (event == "PLAYER_LOGOUT") then
- AucAdvanced.Scan.Commit(true)
- private.OnUnload()
- elseif event == "UNIT_INVENTORY_CHANGED"
- or event == "ITEM_LOCK_CHANGED"
- or event == "CURSOR_UPDATE"
- or event == "BAG_UPDATE"
- then
- private.Schedule["inventory"] = GetTime() + 0.15
- end
-end
-
-function private.OnUpdate(...)
- if event == "inventory" then
- AucAdvanced.Post.AlertBagsChanged()
- end
-
- local now = GetTime()
- for event, time in pairs(private.Schedule) do
- if time > now then
- for system, systemMods in pairs(AucAdvanced.Modules) do
- for engine, engineLib in pairs(systemMods) do
- if engineLib.Processor then
- engineLib.Processor(event, time)
- end
- end
- end
- end
- private.Schedule[event] = nil
- end
-end
-
-private.Frame = CreateFrame("Frame")
-private.Frame:RegisterEvent("ADDON_LOADED")
-private.Frame:RegisterEvent("AUCTION_HOUSE_SHOW")
-private.Frame:RegisterEvent("AUCTION_HOUSE_CLOSED")
-private.Frame:RegisterEvent("UNIT_INVENTORY_CHANGED")
-private.Frame:RegisterEvent("ITEM_LOCK_CHANGED")
-private.Frame:RegisterEvent("CURSOR_UPDATE")
-private.Frame:RegisterEvent("BAG_UPDATE")
-private.Frame:RegisterEvent("PLAYER_LOGOUT")
-private.Frame:SetScript("OnEvent", private.OnEvent)
-private.Frame:SetScript("OnUpdate", private.OnUpdate)
-
--- Auctioneer's debug functions
-AucAdvanced.Debug = {}
-local addonName = "Auctioneer" -- the addon's name as it will be displayed in
- -- the debug messages
--------------------------------------------------------------------------------
--- Prints the specified message to nLog.
---
--- syntax:
--- errorCode, message = debugPrint([message][, category][, title][, errorCode][, level])
---
--- parameters:
--- message - (string) the error message
--- nil, no error message specified
--- category - (string) the category of the debug message
--- nil, no category specified
--- title - (string) the title for the debug message
--- nil, no title specified
--- errorCode - (number) the error code
--- nil, no error code specified
--- level - (string) nLog message level
--- Any nLog.levels string is valid.
--- nil, no level specified
---
--- returns:
--- errorCode - (number) errorCode, if one is specified
--- nil, otherwise
--- message - (string) message, if one is specified
--- nil, otherwise
--------------------------------------------------------------------------------
-function AucAdvanced.Debug.DebugPrint(message, category, title, errorCode, level)
- return DebugLib.DebugPrint(addonName, message, category, title, errorCode, level)
-end
-
--------------------------------------------------------------------------------
--- Used to make sure that conditions are met within functions.
--- If test is false, the error message will be written to nLog and the user's
--- default chat channel.
---
--- syntax:
--- assertion = assert(test, message)
---
--- parameters:
--- test - (any) false/nil, if the assertion failed
--- anything else, otherwise
--- message - (string) the message which will be output to the user
---
--- returns:
--- assertion - (boolean) true, if the test passed
--- false, otherwise
--------------------------------------------------------------------------------
-function AucAdvanced.Debug.Assert(test, message)
- return DebugLib.Assert(addonName, test, message)
-end
-
-