summaryrefslogtreecommitdiff
path: root/iup/srclua3/iuplua_widgets.c
diff options
context:
space:
mode:
Diffstat (limited to 'iup/srclua3/iuplua_widgets.c')
-rwxr-xr-xiup/srclua3/iuplua_widgets.c662
1 files changed, 662 insertions, 0 deletions
diff --git a/iup/srclua3/iuplua_widgets.c b/iup/srclua3/iuplua_widgets.c
new file mode 100755
index 0000000..f6b801b
--- /dev/null
+++ b/iup/srclua3/iuplua_widgets.c
@@ -0,0 +1,662 @@
+/** \file
+ * \brief IULUA core - Bindig of iup to Lua 3.
+ *
+ * See Copyright Notice in "iup.h"
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <lua.h>
+#include <lauxlib.h>
+
+#include "iup.h"
+
+#include "iuplua.h"
+#include "il.h"
+
+
+static int iuplua_tag = 0;
+
+static int valuechanged_cb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "valuechanged_cb");
+ return iuplua_call();
+}
+
+static int file_cb(Ihandle* handle, char* file_name, char* status)
+{
+ iuplua_call_start(handle, "file_cb");
+ lua_pushstring(file_name);
+ lua_pushstring(status);
+ return iuplua_call();
+}
+
+static int text_action(Ihandle* handle, int carac, char *newtext)
+{
+ iuplua_call_start(handle, "action");
+ lua_pushnumber(carac);
+ lua_pushstring(newtext);
+ return iuplua_call();
+}
+
+static int timer_action(Ihandle* handle)
+{
+ iuplua_call_start(handle, "actioncb");
+ return iuplua_call();
+}
+
+static int button_action(Ihandle* handle)
+{
+ iuplua_call_start(handle, "action");
+ return iuplua_call();
+}
+
+static int toggle_action(Ihandle* handle, int v)
+{
+ iuplua_call_start(handle, "action");
+ lua_pushnumber(v);
+ return iuplua_call();
+}
+
+static int iupluaCanvasFocusCb(Ihandle* handle, int focus)
+{
+ iuplua_call_start(handle, "focus");
+ lua_pushnumber(focus);
+ return iuplua_call();
+}
+
+static int iupluaGetfocusCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "getfocus");
+ return iuplua_call();
+}
+
+static int iupluaKillfocusCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "killfocus");
+ return iuplua_call();
+}
+
+static int item_highlight(Ihandle* handle)
+{
+ iuplua_call_start(handle, "highlight");
+ return iuplua_call();
+}
+
+static int menu_open(Ihandle* handle)
+{
+ iuplua_call_start(handle, "open");
+ return iuplua_call();
+}
+
+static int menu_close(Ihandle* handle)
+{
+ iuplua_call_start(handle, "menu_close");
+ return iuplua_call();
+}
+
+static int iupluaKanyCb(Ihandle* handle, int carac)
+{
+ iuplua_call_start(handle, "k_any");
+ lua_pushnumber(carac);
+ return iuplua_call();
+}
+
+static int iupluaHelpCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "help");
+ return iuplua_call();
+}
+
+static int iupluaCanvasKeypressCb(Ihandle *handle, int carac, int press)
+{
+ iuplua_call_start(handle, "keypress");
+ lua_pushnumber(carac);
+ lua_pushnumber(press);
+ return iuplua_call();
+}
+
+static int iupluaCanvasScrollCb(Ihandle *handle, int op, float posx, float posy)
+{
+ iuplua_call_start(handle, "scroll");
+ lua_pushnumber(op);
+ lua_pushnumber(posx);
+ lua_pushnumber(posy);
+ return iuplua_call();
+}
+
+static int text_caret(Ihandle *handle, int row, int col, int pos)
+{
+ iuplua_call_start(handle, "caretcb");
+ lua_pushnumber(row);
+ lua_pushnumber(col);
+ lua_pushnumber(pos);
+ return iuplua_call();
+}
+
+static int list_dblclick_cb(Ihandle *handle, int p0, char * p1)
+{
+ iuplua_call_start(handle, "dblclick_cb");
+ lua_pushnumber(p0);
+ lua_pushstring(p1);
+ return iuplua_call();
+}
+
+static int list_dropdown_cb(Ihandle *handle, int p0)
+{
+ iuplua_call_start(handle, "dropdown_cb");
+ lua_pushnumber(p0);
+ return iuplua_call();
+}
+
+static int dialog_close(Ihandle* handle)
+{
+ iuplua_call_start(handle, "close");
+ return iuplua_call();
+}
+
+static int dialog_show(Ihandle* handle, int v)
+{
+ iuplua_call_start(handle, "showcb");
+ lua_pushnumber(v);
+ return iuplua_call();
+}
+
+static int iupluaUnMapCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "unmapcb");
+ return iuplua_call();
+}
+
+static int iupluaMapCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "mapcb");
+ return iuplua_call();
+}
+
+static int iupluaDropfilesCb(Ihandle *handle, char* filename, int numFile, int posx, int posy)
+{
+ iuplua_call_start(handle, "dropfiles");
+ lua_pushstring(filename);
+ lua_pushnumber(numFile);
+ lua_pushnumber(posx);
+ lua_pushnumber(posy);
+ return iuplua_call();
+}
+
+static int dialog_trayclick(Ihandle *handle, int p1, int p2, int p3)
+{
+ iuplua_call_start(handle, "trayclick");
+ lua_pushnumber(p1);
+ lua_pushnumber(p2);
+ lua_pushnumber(p3);
+ return iuplua_call();
+}
+
+static int iupluaCanvasAction(Ihandle* handle, float x, float y)
+{
+ iuplua_call_start(handle, "action");
+ lua_pushnumber(x);
+ lua_pushnumber(y);
+ return iuplua_call();
+}
+
+static int iupluaCanvasButtonCb(Ihandle* handle, int b, int e, int x, int y, char *r)
+{
+ iuplua_call_start(handle, "button");
+ lua_pushnumber(b);
+ lua_pushnumber(e);
+ lua_pushnumber(x);
+ lua_pushnumber(y);
+ lua_pushstring(r);
+ return iuplua_call();
+}
+
+static int iupluaCanvasResizeCb(Ihandle* handle, int w, int h)
+{
+ iuplua_call_start(handle, "resize");
+ lua_pushnumber(w);
+ lua_pushnumber(h);
+ return iuplua_call();
+}
+
+static int iupluaCanvasMotionCb(Ihandle* handle, int x, int y, char *r)
+{
+ iuplua_call_start(handle, "motion");
+ lua_pushnumber(x);
+ lua_pushnumber(y);
+ lua_pushstring(r);
+ return iuplua_call();
+}
+
+static int iupluaDialogMoveCb(Ihandle* handle, int x, int y)
+{
+ iuplua_call_start(handle, "move");
+ lua_pushnumber(x);
+ lua_pushnumber(y);
+ return iuplua_call();
+}
+
+static int canvas_mdiactivate(Ihandle* handle)
+{
+ iuplua_call_start(handle, "mdiactivatecb");
+ return iuplua_call();
+}
+
+static int iupluaCanvasEnterwindowCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "enterwindow");
+ return iuplua_call();
+}
+
+static int iupluaCanvasLeavewindowCb(Ihandle* handle)
+{
+ iuplua_call_start(handle, "leavewindow");
+ return iuplua_call();
+}
+
+static int iupluaCanvasWheelCb(Ihandle* handle, float delta, int x, int y, char *r)
+{
+ iuplua_call_start(handle, "wheel");
+ lua_pushnumber(delta);
+ lua_pushnumber(x);
+ lua_pushnumber(y);
+ lua_pushstring(r);
+ return iuplua_call();
+}
+
+static int iupluaCanvasWomCb(Ihandle* handle, int i)
+{
+ iuplua_call_start(handle, "wom");
+ lua_pushnumber(i);
+ return iuplua_call();
+}
+
+static int list_edit(Ihandle *handle, int c, char *after)
+{
+ iuplua_call_start(handle, "edit");
+ lua_pushnumber(c);
+ lua_pushstring(after);
+ return iuplua_call();
+}
+
+static int list_action(Ihandle* handle, char *text, int opt, int select)
+{
+ iuplua_call_start(handle, "action");
+ lua_pushstring(text);
+ lua_pushnumber(opt);
+ lua_pushnumber(select);
+ return iuplua_call();
+}
+
+static int list_multiselect(Ihandle *handle, char *value)
+{
+ iuplua_call_start(handle, "multiselect");
+ lua_pushstring(value);
+ return iuplua_call();
+}
+
+/***********************************************************************************
+***********************************************************************************/
+
+static void CreateTimer(void)
+{
+ lua_pushusertag(IupTimer(), iuplua_tag);
+}
+
+static void CreateClipboard(void)
+{
+ lua_pushusertag(IupClipboard(), iuplua_tag);
+}
+
+static void CreateDialog(void)
+{
+ lua_pushusertag(IupDialog(iuplua_checkihandle(1)), iuplua_tag);
+}
+
+static void CreateRadio(void)
+{
+ lua_pushusertag(IupRadio(iuplua_checkihandle(1)), iuplua_tag);
+}
+
+static void CreateMenu(void)
+{
+ lua_pushusertag(IupMenu(NULL), iuplua_tag);
+}
+
+static void CreateHbox(void)
+{
+ lua_pushusertag(IupHbox(NULL), iuplua_tag);
+}
+
+static void CreateVbox(void)
+{
+ lua_pushusertag(IupVbox(NULL), iuplua_tag);
+}
+
+static void CreateZbox(void)
+{
+ lua_pushusertag(IupZbox(NULL), iuplua_tag);
+}
+
+static void CreateFill(void)
+{
+ lua_pushusertag(IupFill(), iuplua_tag);
+}
+
+static void CreateNormalizer(void)
+{
+ lua_pushusertag(IupNormalizer(NULL), iuplua_tag);
+}
+
+static void CreateButton(void)
+{
+ lua_pushusertag(IupButton(luaL_opt_string(1, NULL), NULL), iuplua_tag);
+}
+
+static void CreateText(void)
+{
+ lua_pushusertag(IupText(NULL), iuplua_tag);
+}
+
+static void CreateMultiLine(void)
+{
+ lua_pushusertag(IupMultiLine(NULL), iuplua_tag);
+}
+
+static void CreateLabel(void)
+{
+ lua_pushusertag(IupLabel(luaL_opt_string(1, NULL)), iuplua_tag);
+}
+
+static void CreateToggle(void)
+{
+ lua_pushusertag(IupToggle(luaL_opt_string(1, NULL), NULL), iuplua_tag);
+}
+
+static void CreateItem(void)
+{
+ lua_pushusertag(IupItem(luaL_opt_string(1, NULL), NULL), iuplua_tag);
+}
+
+static void CreateSubmenu(void)
+{
+ lua_pushusertag(IupSubmenu(luaL_opt_string(1, NULL), iuplua_checkihandle(2)), iuplua_tag);
+}
+
+static void CreateSeparator(void)
+{
+ lua_pushusertag(IupSeparator(), iuplua_tag);
+}
+
+static void CreateFileDlg(void)
+{
+ lua_pushusertag(IupFileDlg(), iuplua_tag);
+}
+
+static void CreateMessageDlg(void)
+{
+ lua_pushusertag(IupMessageDlg(), iuplua_tag);
+}
+
+static void CreateFontDlg(void)
+{
+ lua_pushusertag(IupFontDlg(), iuplua_tag);
+}
+
+static void CreateColorDlg(void)
+{
+ lua_pushusertag(IupColorDlg(), iuplua_tag);
+}
+
+static void CreateProgressBar(void)
+{
+ lua_pushusertag(IupProgressBar(), iuplua_tag);
+}
+
+static void CreateUser(void)
+{
+ lua_pushusertag(IupUser(), iuplua_tag);
+}
+
+static void CreateFrame(void)
+{
+ lua_pushusertag(IupFrame(iuplua_checkihandle(1)), iuplua_tag);
+}
+
+static void CreateCanvas(void)
+{
+ lua_pushusertag(IupCanvas(NULL), iuplua_tag);
+}
+
+static void CreateList(void)
+{
+ lua_pushusertag(IupList(NULL), iuplua_tag);
+}
+
+static void CreateImage(void)
+{
+ int i, j;
+ lua_Object linha;
+ int width, height;
+ unsigned char *pixels;
+ lua_Object obj = luaL_tablearg(3);
+ width = luaL_check_int(1);
+ height = luaL_check_int(2);
+ pixels = (unsigned char *) malloc(width*height);
+
+ for (i = 1; i <= height; i++)
+ {
+ lua_beginblock();
+ lua_pushobject(obj);
+ lua_pushnumber(i);
+ linha = lua_gettable();
+ if (!lua_istable(linha))
+ {
+ lua_endblock();
+ lua_error("iupCreateImage: incorrect value in argument");
+ }
+
+ for (j = 1; j <= width; j++)
+ {
+ lua_Object n;
+ lua_beginblock();
+ lua_pushobject(linha);
+ lua_pushnumber(j);
+ n = lua_gettable();
+ if (!lua_isnumber(n))
+ {
+ lua_endblock();
+ lua_error("iupCreateImage: incorrect value in argument");
+ }
+ pixels[(i - 1) * width + (j - 1)] = (unsigned char) lua_getnumber(n);
+ lua_endblock();
+ }
+
+ lua_pushobject(obj);
+ lua_pushnumber(i);
+ lua_pushnil();
+ lua_settable();
+ lua_endblock();
+ }
+
+ lua_pushusertag(IupImage(width, height, pixels), iuplua_tag);
+ free(pixels);
+}
+
+static void CreateImageRGB(void)
+{
+ int i, count, width, height;
+ unsigned char *pixels;
+ lua_Object n, obj = luaL_tablearg(3);
+ width = luaL_check_int(1);
+ height = luaL_check_int(2);
+ count = width * height * 3;
+ pixels = (unsigned char *) malloc(count);
+
+ for (i = 0; i < count; i++)
+ {
+ lua_beginblock();
+ lua_pushobject(obj);
+ lua_pushnumber(i+1);
+
+ n = lua_gettable();
+ if (!lua_isnumber(n))
+ {
+ lua_endblock();
+ lua_error("iupCreateImage: incorrect value in argument");
+ }
+ pixels[i] = (unsigned char)lua_getnumber(n);
+ lua_endblock();
+ }
+
+ lua_pushusertag(IupImageRGB(width, height, pixels), iuplua_tag);
+ free(pixels);
+}
+
+static void CreateImageRGBA(void)
+{
+ int i, count, width, height;
+ unsigned char *pixels;
+ lua_Object n, obj = luaL_tablearg(3);
+ width = luaL_check_int(1);
+ height = luaL_check_int(2);
+ count = width * height * 4;
+ pixels = (unsigned char *) malloc(count);
+
+ for (i = 0; i < count; i++)
+ {
+ lua_beginblock();
+ lua_pushobject(obj);
+ lua_pushnumber(i+1);
+
+ n = lua_gettable();
+ if (!lua_isnumber(n))
+ {
+ lua_endblock();
+ lua_error("iupCreateImage: incorrect value in argument");
+ }
+ pixels[i] = (unsigned char)lua_getnumber(n);
+ lua_endblock();
+ }
+
+ lua_pushusertag(IupImageRGBA(width, height, pixels), iuplua_tag);
+ free(pixels);
+}
+
+/***********************************************************************************
+***********************************************************************************/
+
+int iupluawidgets_open(int tag)
+{
+ struct FuncList {
+ char *name;
+ lua_CFunction func;
+ } FuncList[] = {
+
+ { "iupCreateButton", CreateButton },
+ { "iupCreateDialog", CreateDialog },
+ { "iupCreateTimer", CreateTimer },
+ { "iupCreateClipboard", CreateClipboard },
+ { "iupCreateHbox", CreateHbox },
+ { "iupCreateVbox", CreateVbox },
+ { "iupCreateZbox", CreateZbox },
+ { "iupCreateText", CreateText },
+ { "iupCreateMultiLine", CreateMultiLine },
+ { "iupCreateLabel", CreateLabel },
+ { "iupCreateToggle", CreateToggle },
+ { "iupCreateItem", CreateItem },
+ { "iupCreateSubmenu", CreateSubmenu },
+ { "iupCreateSeparator", CreateSeparator },
+ { "iupCreateFileDlg", CreateFileDlg },
+ { "iupCreateMessageDlg", CreateMessageDlg},
+ { "iupCreateColorDlg", CreateColorDlg},
+ { "iupCreateFontDlg", CreateFontDlg},
+ { "iupCreateUser", CreateUser },
+ { "iupCreateFrame", CreateFrame },
+ { "iupCreateCanvas", CreateCanvas },
+ { "iupCreateList", CreateList },
+ { "iupCreateImage", CreateImage },
+ { "iupCreateImageRGB", CreateImageRGB },
+ { "iupCreateImageRGBA", CreateImageRGBA },
+ { "iupCreateFill", CreateFill },
+ { "iupCreateRadio", CreateRadio },
+ { "iupCreateMenu", CreateMenu },
+ { "iupCreateProgressBar", CreateProgressBar },
+ { "iupCreateNormalizer", CreateNormalizer },
+
+ { "iup_action_timer", (lua_CFunction)timer_action},
+ { "iup_action_text", (lua_CFunction)text_action},
+ { "iup_action_toggle", (lua_CFunction)toggle_action},
+ { "iup_action_button", (lua_CFunction)button_action},
+ { "iup_action_list", (lua_CFunction)list_action},
+ { "iup_action_canvas", (lua_CFunction)iupluaCanvasAction},
+ { "iup_focus_cb", (lua_CFunction)iupluaCanvasFocusCb},
+ { "iup_keypress_cb", (lua_CFunction)iupluaCanvasKeypressCb},
+ { "iup_scroll_cb", (lua_CFunction)iupluaCanvasScrollCb},
+ { "iup_resize_cb", (lua_CFunction)iupluaCanvasResizeCb},
+ { "iup_move_cb", (lua_CFunction)iupluaDialogMoveCb},
+ { "iup_motion_cb", (lua_CFunction)iupluaCanvasMotionCb},
+ { "iup_mdiactivate_cb", (lua_CFunction)canvas_mdiactivate},
+ { "iup_enterwindow_cb", (lua_CFunction)iupluaCanvasEnterwindowCb},
+ { "iup_leavewindow_cb", (lua_CFunction)iupluaCanvasLeavewindowCb},
+ { "iup_wom_cb", (lua_CFunction)iupluaCanvasWomCb},
+ { "iup_wheel_cb", (lua_CFunction)iupluaCanvasWheelCb},
+ { "iup_highlight_cb", (lua_CFunction)item_highlight},
+ { "iup_button_cb", (lua_CFunction)iupluaCanvasButtonCb},
+ { "iup_close_cb", (lua_CFunction)dialog_close},
+ { "iup_show_cb", (lua_CFunction)dialog_show},
+ { "iup_map_cb", (lua_CFunction)iupluaMapCb},
+ { "iup_unmap_cb", (lua_CFunction)iupluaUnMapCb},
+ { "iup_dropfiles_cb", (lua_CFunction)iupluaDropfilesCb},
+ { "iup_trayclick_cb", (lua_CFunction)dialog_trayclick},
+ { "iup_getfocus_cb", (lua_CFunction)iupluaGetfocusCb},
+ { "iup_killfocus_cb", (lua_CFunction)iupluaKillfocusCb},
+ { "iup_k_any", (lua_CFunction)iupluaKanyCb},
+ { "iup_help_cb", (lua_CFunction)iupluaHelpCb},
+ { "iup_edit_cb", (lua_CFunction)list_edit},
+ { "iup_caret_cb", (lua_CFunction)text_caret},
+ { "iup_multiselect_cb", (lua_CFunction)list_multiselect},
+ { "iup_open_cb", (lua_CFunction)menu_open},
+ { "iup_menuclose_cb", (lua_CFunction)menu_close},
+ { "iup_file_cb", (lua_CFunction)file_cb},
+ { "iup_dropdown_cb", (lua_CFunction)list_dropdown_cb},
+ { "iup_dblclick_cb", (lua_CFunction)list_dblclick_cb},
+ { "iup_valuechanged_cb", (lua_CFunction)valuechanged_cb}
+ };
+
+ int SizeFuncList = (sizeof(FuncList)/sizeof(struct FuncList));
+ int ret_val = 1;
+ int i;
+
+ iuplua_tag = tag;
+
+ for (i = 0; i < SizeFuncList; i++)
+ lua_register(FuncList[i].name, FuncList[i].func);
+
+#ifdef IUPLUA_USELOH
+#ifdef TEC_BIGENDIAN
+#ifdef TEC_64
+#include "loh/iuplua_widgets_be64.loh"
+#else
+#include "loh/iuplua_widgets_be32.loh"
+#endif
+#else
+#ifdef TEC_64
+#ifdef WIN64
+#include "loh/iuplua_widgets_le64w.loh"
+#else
+#include "loh/iuplua_widgets_le64.loh"
+#endif
+#else
+#include "loh/iuplua_widgets.loh"
+#endif
+#endif
+#else
+ iuplua_dofile("iuplua_widgets.lua");
+#endif
+
+ return ret_val;
+}