diff options
author | Kornelius Kalnbach <murphy@rubychan.de> | 2012-07-18 11:46:41 +0200 |
---|---|---|
committer | Kornelius Kalnbach <murphy@rubychan.de> | 2012-07-18 11:46:41 +0200 |
commit | a1582d7856bc385b7bad492d8fc3f02e2b9f4d94 (patch) | |
tree | 3abdb3a7d6aa00edca62fc5b36cf9a9a8242b245 /etc/todo/example.lua | |
parent | a4b8b094da5525354cb8a927761385825236c5a1 (diff) | |
download | coderay-a1582d7856bc385b7bad492d8fc3f02e2b9f4d94.tar.gz |
remove etc folder
Diffstat (limited to 'etc/todo/example.lua')
-rw-r--r-- | etc/todo/example.lua | 8289 |
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 - - |