diff options
Diffstat (limited to 'source/tests/02-luax/main.cpp')
-rw-r--r-- | source/tests/02-luax/main.cpp | 67 |
1 files changed, 64 insertions, 3 deletions
diff --git a/source/tests/02-luax/main.cpp b/source/tests/02-luax/main.cpp index cd718ac..ebb9df8 100644 --- a/source/tests/02-luax/main.cpp +++ b/source/tests/02-luax/main.cpp @@ -140,7 +140,7 @@ int Boy::l_Speak(lua_State* L) LUAX_STATE(L); Boy* self = state.CheckUserdata<Boy>(1); - self->PushMemberRef(state, self->mCallbak); + self->PushLuaxMemberRef(state, self->mCallbak); state.Call(0, 1); return 1; } @@ -150,7 +150,7 @@ int Boy::l_Write(lua_State* L) LUAX_STATE(L); // self, func Boy* self = state.CheckUserdata<Boy>(1); - self->SetMemberRef(state, self->mCallbak, 2); + self->SetLuaxMemberRef(state, self->mCallbak, 2); return 0; } @@ -187,9 +187,70 @@ void Boy::RegisterLuaxPostprocess(LuaxState& state) } //---------------------------------------------------------------------------------------------------------------- +/// +/// Ӧsignalıհ +/// +class Slot +{ +public: + Slot(LuaxState& state, Boy* widget, int refID) + : mState(state) + , mRefID(refID) + , mWidget(widget) + { + } + + void operator()() + { + ASSERT(mState); + ASSERT(mWidget); + + mWidget->PushLuaxMemberRef(mState, mRefID); + if (lua_isfunction(mState, -1)) // callback + { + mState.Call(0, 0); + } + } -class Girl : public LuaxNativeClass<Girl> +private: + LuaxState & mState; // + Boy* mWidget; // ӦĿؼ + int mRefID; // ؼ + +}; +/// +/// ؼ¼ +/// +class Signal { +public: + Signal(); + + /// + /// Fire¼connectļߣãconnectĺ + /// + void operator()() + { + for (auto callback : mCallbacks) + callback(); + } + + /// + /// עص + /// + void Connect(const Slot& callback) + { + mCallbacks.push_back(callback); + } + + /// + /// + /// + void Disconnect(); + +private: + std::vector<Slot> mCallbacks; // + }; //---------------------------------------------------------------------------------------------------------------- |