00001 #include "lugre_prefix.h"
00002 #include "lugre_scripting.h"
00003 #include "lugre_luabind.h"
00004 #include "lugre_widget.h"
00005 #include "lugre_gfx2D.h"
00006 #include "lugre_smartptr.h"
00007
00008 using namespace Lugre;
00009
00010 extern "C" {
00011 #include "lua.h"
00012 #include "lauxlib.h"
00013 #include "lualib.h"
00014 }
00015
00016 namespace Lugre {
00017
00018 class cDialog_L : public cLuaBind<cDialog> { public:
00020 virtual void RegisterMethods (lua_State *L) { PROFILE
00021
00022
00023
00024
00025 lua_register(L,"MyCreateDialog", &cDialog_L::MyCreateDialog);
00026
00027 #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cDialog_L::methodname));
00028
00029 REGISTER_METHOD(Destroy);
00030 REGISTER_METHOD(BringToFront);
00031 REGISTER_METHOD(SendToBack);
00032 REGISTER_METHOD(CreateWidget);
00033 REGISTER_METHOD(SetVisible);
00034 REGISTER_METHOD(GetVisible);
00035
00036 #undef REGISTER_METHOD
00037 }
00038
00040 virtual void RegisterMembers () {
00041 cDialog* prototype = new cDialog();
00042 cMemberVar_REGISTER(prototype, kVarType_size_t, miUID, kVarFlag_Readonly);
00043 cMemberVar_REGISTER(prototype, kVarType_bool, mbVisible, kVarFlag_Readonly);
00044 }
00045
00047
00048 static int MyCreateDialog (lua_State *L) { PROFILE
00049 cDialog* target = cDialogManager::GetSingleton().MyCreateDialog();
00050 return CreateUData(L,target);
00051 }
00052
00053 static int Destroy (lua_State *L) { PROFILE
00054 cDialogManager::GetSingleton().DestroyDialog(checkudata_alive(L));
00055 return 0;
00056 }
00057
00058
00059
00060
00061 static int CreateWidget (lua_State *L) { PROFILE
00062 cWidget* target = checkudata_alive(L)->CreateWidget(0);
00063 return cLuaBind<cWidget>::CreateUData(L,target);
00064 return 0;
00065 }
00066
00067
00068 static int BringToFront (lua_State *L) { PROFILE
00069 checkudata_alive(L)->BringToFront();
00070 return 0;
00071 }
00072
00073
00074 static int SendToBack (lua_State *L) { PROFILE
00075 checkudata_alive(L)->SendToBack();
00076 return 0;
00077 }
00078
00079
00080 static int SetVisible (lua_State *L) { PROFILE
00081 checkudata_alive(L)->SetVisible(lua_isboolean(L,2) ? lua_toboolean(L,2) : luaL_checkint(L,2));
00082 return 0;
00083 }
00084
00085
00086 static int GetVisible (lua_State *L) { PROFILE
00087 lua_pushboolean(L,checkudata_alive(L)->GetVisible());
00088 return 1;
00089 }
00090
00091 virtual const char* GetLuaTypeName () { return "lugre.widget.dialog"; }
00092 };
00093
00094 class cWidget_L : public cLuaBind<cWidget> { public:
00096 virtual void RegisterMethods (lua_State *L) { PROFILE
00097
00098
00099
00100
00101 lua_register(L,"GetWidgetUnderPos", &cWidget_L::GetWidgetUnderPos);
00102
00103 #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cWidget_L::methodname));
00104
00105 REGISTER_METHOD(Destroy);
00106 REGISTER_METHOD(CreateChild);
00107 REGISTER_METHOD(UpdateClip);
00108 REGISTER_METHOD(SetBitMask);
00109 REGISTER_METHOD(IsUnderPos);
00110
00111 #undef REGISTER_METHOD
00112 }
00113
00115 virtual void RegisterMembers () { PROFILE
00116 cWidget* prototype = new cWidget();
00117 cMemberVar_REGISTER(prototype, kVarType_size_t, miUID, kVarFlag_Readonly);
00118 cMemberVar_REGISTER(prototype, kVarType_bool, mbIgnoreMouseOver, 0);
00119 cMemberVar_REGISTER(prototype, kVarType_bool, mbClipChildsHitTest, 0);
00120 cMemberVar_REGISTER(prototype, kVarType_Gfx2D, mpGfx2D, kVarFlag_Readonly);
00121 }
00122
00124
00126 static int GetWidgetUnderPos (lua_State *L) { PROFILE
00127 cWidget* p = cDialogManager::GetSingleton().GetWidgetUnderPos(luaL_checkint(L,1),luaL_checkint(L,2));
00128 if (!p) return 0;
00129 lua_pushnumber(L,p->miUID);
00130 return 1;
00131 }
00132
00134
00135
00136 static int Destroy (lua_State *L) { PROFILE
00137 checkudata_alive(L)->Destroy();
00138 return 0;
00139 }
00140
00141
00142 static int CreateChild (lua_State *L) { PROFILE
00143 cWidget* target = checkudata_alive(L)->CreateChild();
00144 return CreateUData(L,target);
00145 }
00146
00147 static int UpdateClip (lua_State *L) { PROFILE
00148 checkudata_alive(L)->UpdateClip(luaL_checknumber(L, 2),luaL_checknumber(L, 3),luaL_checknumber(L, 4),luaL_checknumber(L, 5));
00149 return 0;
00150 }
00151
00152 static int SetBitMask (lua_State *L) { PROFILE
00153 cBitMask* pBitMask = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? cLuaBind<cBitMask>::checkudata(L,2) : 0;
00154 checkudata_alive(L)->mpBitMask = pBitMask;
00155 return 0;
00156 }
00157
00159 static int IsUnderPos (lua_State *L) { PROFILE
00160 lua_pushboolean(L,checkudata_alive(L)->IsUnderPos(luaL_checkint(L,2),luaL_checkint(L,3)));
00161 return 1;
00162 }
00163
00164 virtual const char* GetLuaTypeName () { return "lugre.widget"; }
00165 };
00166
00168 void cDialog::LuaRegister (lua_State *L) { PROFILE
00169 cLuaBind<cDialog>::GetSingletonPtr(new cDialog_L())->LuaRegister(L);
00170 }
00171
00173 void cWidget::LuaRegister (lua_State *L) { PROFILE
00174 cLuaBind<cWidget>::GetSingletonPtr(new cWidget_L())->LuaRegister(L);
00175 }
00176
00177 };