浏览代码

Added minimum Fl_Menu_Item to FLTK module.

mingodad 13 年之前
父节点
当前提交
8ef86f43e0
共有 1 个文件被更改,包括 85 次插入8 次删除
  1. 85 8
      SquiLu-ext/sq_fltk.cpp

+ 85 - 8
SquiLu-ext/sq_fltk.cpp

@@ -480,7 +480,7 @@ GETINSTANCE_FOR_FL_KLASS(Fl_Group);
 #define SETUP_FL_IMAGE(v) SETUP_FL_IMAGE_AT(v, 1, self)
 #define SETUP_FL_IMAGE(v) SETUP_FL_IMAGE_AT(v, 1, self)
 
 
 
 
-static SQRESULT fltk_pushinstance(HSQUIRRELVM v, const SQChar *klass, SQUserPointer self){
+static SQRESULT fltk_pushinstance(HSQUIRRELVM v, const SQChar *klass, const SQUserPointer self){
 	if(fltk_get_registered_instance(v, self) == SQ_OK) return 1;
 	if(fltk_get_registered_instance(v, self) == SQ_OK) return 1;
 	sq_pushstring(v, klass,-1);
 	sq_pushstring(v, klass,-1);
 	if(sq_getonroottable(v) == SQ_OK){
 	if(sq_getonroottable(v) == SQ_OK){
@@ -1014,17 +1014,55 @@ static SQRegFunction fl_round_button_obj_funcs[]={
 };
 };
 #undef _DECL_FUNC
 #undef _DECL_FUNC
 
 
-/*
-FLTK_CONSTRUCTOR(Fl_Menu_Item);
-#define _DECL_FL_MENU_ITEM_FUNC(name,nparams,pmask) {_SC(#name),_Fl_Menu_Item_##name,nparams,pmask,isStatic}
+#define SETUP_FL_MENU__AT(v, idx, Var) SETUP_FL_KLASS_AT(v, idx, Var, Fl_Menu_)
+#define SETUP_FL_MENU_(v) SETUP_FL_MENU__AT(v, 1, self)
+
+#define SETUP_FL_MENU_ITEM_AT(v, idx, Var) SETUP_FL_KLASS_AT(v, idx, Var, Fl_Menu_Item)
+#define SETUP_FL_MENU_ITEM(v) SETUP_FL_MENU_ITEM_AT(v, 1, self)
+#define FL_MENU_ITEM_GETSET_INT_CAST(funcNAME, typeNAME) FUNC_GETSET_INT(_Fl_Menu_Item_, SETUP_FL_MENU_ITEM, self->, funcNAME, typeNAME)
+#define FL_MENU_ITEM_GETSET_INT(funcNAME) FL_MENU_ITEM_GETSET_INT_CAST(funcNAME, int)
+#define FL_MENU_ITEM_GETSET_BOOL(funcNAME) FUNC_GETSET_BOOL(_Fl_Menu_Item_, SETUP_FL_MENU_ITEM, self->,funcNAME)
+#define FL_MENU_ITEM_GET_BOOL(funcNAME) FUNC_GET_BOOL(_Fl_Menu_Item_, SETUP_FL_MENU_ITEM, funcNAME)
+
+static SQRESULT _Fl_Menu_Item_pulldown(HSQUIRRELVM v)
+{
+    SQ_FUNC_VARS(v);
+    SETUP_FL_MENU_ITEM(v);
+    const Fl_Menu_Item *mi = 0;
+    SQ_GET_INTEGER(v, 2, x);
+    SQ_GET_INTEGER(v, 3, y);
+    SQ_GET_INTEGER(v, 4, w);
+    SQ_GET_INTEGER(v, 5, h);
+    if(_top_ > 5) {
+        Fl_Menu_Item *picked =0, *title = 0;
+        Fl_Menu_ *mn = 0;
+
+        if(sq_gettype(v, 6) != OT_NULL)
+            if(SQ_FAILED(sq_getinstanceup(v,6,(SQUserPointer*)&picked,(void*)FLTK_TAG(Fl_Menu_Item)))) return SQ_ERROR;
+
+        if(sq_gettype(v, 7) != OT_NULL)
+            if(SQ_FAILED(sq_getinstanceup(v,7,(SQUserPointer*)&mn,(void*)FLTK_TAG(Fl_Menu_)))) return SQ_ERROR;
+
+        if(sq_gettype(v, 8) != OT_NULL)
+            if(SQ_FAILED(sq_getinstanceup(v,8,(SQUserPointer*)&title,(void*)FLTK_TAG(Fl_Menu_Item)))) return SQ_ERROR;
+
+        SQ_OPT_INTEGER(v, 9, menubar, 0);
+        mi = self->pulldown(x, y, w, h, picked, mn, title, menubar);
+    }
+    else mi = self->pulldown(x, y, w, h);
+    if(mi) return fltk_pushinstance(v, FLTK_TAG(Fl_Menu_Item), (void*)mi);
+    sq_pushnull(v);
+    return 1;
+}
+
+#define _DECL_FUNC(name,nparams,pmask,isStatic) {_SC(#name),_Fl_Menu_Item_##name,nparams,pmask,isStatic}
 static SQRegFunction fl_menu_item_obj_funcs[]={
 static SQRegFunction fl_menu_item_obj_funcs[]={
-	_DECL_FL_MENU_ITEM_FUNC(constructor,-5,FLTK_constructor_Mask, SQFalse),
+	_DECL_FUNC(pulldown,-5, _SC("xiiii x|o x|o x|o i"), SQFalse),
 	{0,0}
 	{0,0}
 };
 };
-*/
+#undef _DECL_FUNC
 
 
 FLTK_CONSTRUCTOR(Fl_Menu_);
 FLTK_CONSTRUCTOR(Fl_Menu_);
-#define SETUP_FL_MENU_(v) SETUP_FL_KLASS(v, Fl_Menu_)
 
 
 static SQRESULT _Fl_Menu__copy(HSQUIRRELVM v)
 static SQRESULT _Fl_Menu__copy(HSQUIRRELVM v)
 {
 {
@@ -1096,6 +1134,38 @@ static SQRESULT _Fl_Menu__text(HSQUIRRELVM v)
     return 1;
     return 1;
 }
 }
 
 
+static SQRESULT _Fl_Menu__menu(HSQUIRRELVM v)
+{
+    SQ_FUNC_VARS_NO_TOP(v);
+    SETUP_FL_MENU_(v);
+    const Fl_Menu_Item *mi = self->menu();
+    if(mi) return fltk_pushinstance(v, FLTK_TAG(Fl_Menu_Item), (void*)mi);
+    sq_pushnull(v);
+    return 1;
+}
+
+static SQRESULT _Fl_Menu__menu_at(HSQUIRRELVM v)
+{
+    SQ_FUNC_VARS_NO_TOP(v);
+    SETUP_FL_MENU_(v);
+    SQ_GET_INTEGER(v, 2, idx);
+    const Fl_Menu_Item *mi = self->menu_at(idx);
+    if(mi) return fltk_pushinstance(v, FLTK_TAG(Fl_Menu_Item), (void*)mi);
+    sq_pushnull(v);
+    return 1;
+}
+
+static SQRESULT _Fl_Menu__picked(HSQUIRRELVM v)
+{
+    SQ_FUNC_VARS_NO_TOP(v);
+    SETUP_FL_MENU_(v);
+    SETUP_FL_MENU_ITEM_AT(v, 2, arg_mi);
+    const Fl_Menu_Item *mi = self->picked(arg_mi);
+    if(mi) return fltk_pushinstance(v, FLTK_TAG(Fl_Menu_Item), (void*)mi);
+    sq_pushnull(v);
+    return 1;
+}
+
 FUNC_GETSET_INT(_Fl_Menu__, SETUP_FL_MENU_, self->, value, int);
 FUNC_GETSET_INT(_Fl_Menu__, SETUP_FL_MENU_, self->, value, int);
 FUNC_GETSET_INT(_Fl_Menu__, SETUP_FL_MENU_, self->, down_box, Fl_Boxtype);
 FUNC_GETSET_INT(_Fl_Menu__, SETUP_FL_MENU_, self->, down_box, Fl_Boxtype);
 
 
@@ -1109,6 +1179,9 @@ static SQRegFunction fl_menu__obj_funcs[]={
 	_DECL_FUNC(value,-1,_SC("xi"),SQFalse),
 	_DECL_FUNC(value,-1,_SC("xi"),SQFalse),
 	_DECL_FUNC(down_box,-1,_SC("xi"), SQFalse),
 	_DECL_FUNC(down_box,-1,_SC("xi"), SQFalse),
 	_DECL_FUNC(text,-1,_SC("xi"), SQFalse),
 	_DECL_FUNC(text,-1,_SC("xi"), SQFalse),
+	_DECL_FUNC(menu,1,_SC("x"), SQFalse),
+	_DECL_FUNC(menu_at,2,_SC("xi"), SQFalse),
+	_DECL_FUNC(picked,2,_SC("xx"), SQFalse),
 	//_DECL_FUNC(value_by_udata,-1,_SC("x."), SQFalse),
 	//_DECL_FUNC(value_by_udata,-1,_SC("x."), SQFalse),
 	{0,0}
 	{0,0}
 };
 };
@@ -1321,7 +1394,10 @@ static SQRESULT _Fl_Group_resizable(HSQUIRRELVM v)
         self->resizable(wdg);
         self->resizable(wdg);
         return 0;
         return 0;
     }
     }
-    return fltk_pushinstance(v, FLTK_TAG(Fl_Widget), self->resizable());
+    Fl_Widget *wdg = self->resizable();
+    if(wdg) return fltk_pushinstance(v, FLTK_TAG(Fl_Widget), wdg);
+    sq_pushnull(v);
+    return 1;
 }
 }
 
 
 static SQRESULT _Fl_Group_add(HSQUIRRELVM v)
 static SQRESULT _Fl_Group_add(HSQUIRRELVM v)
@@ -4350,6 +4426,7 @@ SQRESULT sqext_register_fltklib(HSQUIRRELVM v)
 	PUSH_FL_CLASS(Fl_Repeat_Button, Fl_Button, fl_repeat_button_obj_funcs);
 	PUSH_FL_CLASS(Fl_Repeat_Button, Fl_Button, fl_repeat_button_obj_funcs);
 	PUSH_FL_CLASS(Fl_Round_Button, Fl_Light_Button, fl_round_button_obj_funcs);
 	PUSH_FL_CLASS(Fl_Round_Button, Fl_Light_Button, fl_round_button_obj_funcs);
 
 
+	PUSH_FL_CLASS_NO_PARENT(Fl_Menu_Item, fl_menu_item_obj_funcs);
 	PUSH_FL_CLASS(Fl_Menu_, Fl_Widget, fl_menu__obj_funcs);
 	PUSH_FL_CLASS(Fl_Menu_, Fl_Widget, fl_menu__obj_funcs);
 	PUSH_FL_CLASS(Fl_Menu_Bar, Fl_Menu_, fl_menu_bar_obj_funcs);
 	PUSH_FL_CLASS(Fl_Menu_Bar, Fl_Menu_, fl_menu_bar_obj_funcs);
 	PUSH_FL_CLASS(Fl_Choice, Fl_Menu_, fl_choice_obj_funcs);
 	PUSH_FL_CLASS(Fl_Choice, Fl_Menu_, fl_choice_obj_funcs);