summaryrefslogtreecommitdiff
path: root/source/tests/02-luax/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/tests/02-luax/main.cpp')
-rw-r--r--source/tests/02-luax/main.cpp67
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; //
+
};
//----------------------------------------------------------------------------------------------------------------