aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua/wslua_gui.c
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2006-09-27 17:12:42 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2006-09-27 17:12:42 +0000
commit2e7726b3ffd6ec3d87742219ad944645ebc24edb (patch)
tree21aaca41aab6c93abea5ea9532f92244ddf88bbe /epan/wslua/wslua_gui.c
parente21c2fe5b5fcab0ab732cb7962afa6720eb50306 (diff)
* rename REGISTER_STAT_GROUP_E -> register_stat_group_t
* Add a "Tools" menu * allow wslua's register_menu to register menu items into more menus svn path=/trunk/; revision=19338
Diffstat (limited to 'epan/wslua/wslua_gui.c')
-rw-r--r--epan/wslua/wslua_gui.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/epan/wslua/wslua_gui.c b/epan/wslua/wslua_gui.c
index 9c7c563913..bd174041b8 100644
--- a/epan/wslua/wslua_gui.c
+++ b/epan/wslua/wslua_gui.c
@@ -1,5 +1,5 @@
/*
- * lua_gui.c
+ * wslua_gui.c
*
* (c) 2006, Luis E. Garcia Ontanon <luis.ontanon@gmail.com>
*
@@ -31,7 +31,6 @@ static const funnel_ops_t* ops = NULL;
struct _lua_menu_data {
lua_State* L;
int cb_ref;
- int data_ref;
};
static int menu_cb_error_handler(lua_State* L) {
@@ -50,9 +49,9 @@ void lua_menu_callback(gpointer data) {
lua_pushcfunction(md->L,menu_cb_error_handler);
lua_rawgeti(md->L, LUA_REGISTRYINDEX, md->cb_ref);
- lua_rawgeti(md->L, LUA_REGISTRYINDEX, md->data_ref);
-
- lua_pcall(md->L,1,0,1);
+
+ /* XXX handle error */
+ lua_pcall(md->L,0,0,1);
return;
}
@@ -60,33 +59,31 @@ void lua_menu_callback(gpointer data) {
WSLUA_FUNCTION wslua_register_menu(lua_State* L) { /* Register a menu item in the Statistics menu. */
#define WSLUA_ARG_register_menu_NAME 1 /* The name of the menu item. */
#define WSLUA_ARG_register_menu_ACTION 2 /* The function to be called when the menu item is invoked. */
-#define WSLUA_OPTARG_register_menu_USERDATA 3 /* To be passed to the action. */
-
+#define WSLUA_ARG_register_menu_GROUP 3 /* The menu group into which the menu item is to be inserted. */
+
const gchar* name = luaL_checkstring(L,WSLUA_ARG_register_menu_NAME);
struct _lua_menu_data* md;
gboolean retap = FALSE;
-
+ register_stat_group_t group = luaL_optnumber(L,WSLUA_ARG_register_menu_GROUP,REGISTER_STAT_GROUP_GENERIC);
+
+ if ( group > REGISTER_TOOLS_GROUP_NONE)
+ WSLUA_ARG_ERROR(register_menu,GROUP,"must be a defined MENU_* (see init.lua)");
+
if(!name)
WSLUA_ARG_ERROR(register_menu,NAME,"must be a string");
if (!lua_isfunction(L,WSLUA_ARG_register_menu_ACTION))
WSLUA_ARG_ERROR(register_menu,ACTION,"must be a function");
-
+
md = g_malloc(sizeof(struct _lua_menu_data));
md->L = L;
-
- lua_pushvalue(L, 2);
- md->cb_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-
- if ( lua_gettop(L) > 2) {
- lua_pushvalue(L, WSLUA_OPTARG_register_menu_USERDATA);
- md->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- } else {
- md->data_ref = LUA_NOREF;
- }
+
+ lua_pushvalue(L, 2);
+ md->cb_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ lua_remove(L,2);
funnel_register_menu(name,
- REGISTER_STAT_GROUP_GENERIC,
+ group,
lua_menu_callback,
md,
retap);