Allow the self object to be specified

This commit is contained in:
smallmodel 2025-02-03 19:22:29 +01:00
parent e37a5f4d06
commit 033b76af14
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
2 changed files with 29 additions and 17 deletions

View file

@ -29,11 +29,11 @@ ScriptRegisteredDelegate_Script::ScriptRegisteredDelegate_Script(const ScriptThr
: label(inLabel)
{}
void ScriptRegisteredDelegate_Script::Execute(const Event& ev)
void ScriptRegisteredDelegate_Script::Execute(Listener *object, const Event& ev)
{
Event newev = ev;
label.Execute(NULL, newev);
label.Execute(object, newev);
}
bool ScriptRegisteredDelegate_Script::operator==(const ScriptRegisteredDelegate_Script& registeredDelegate) const
@ -48,13 +48,13 @@ ScriptRegisteredDelegate_CodeMember::ScriptRegisteredDelegate_CodeMember(
, response(inResponse)
{}
void ScriptRegisteredDelegate_CodeMember::Execute(const Event& ev)
void ScriptRegisteredDelegate_CodeMember::Execute(Listener *object, const Event& ev)
{
if (!object) {
return;
}
(object->*response)(ev);
(object->*response)(object, ev);
}
bool ScriptRegisteredDelegate_CodeMember::operator==(const ScriptRegisteredDelegate_CodeMember& registeredDelegate
@ -67,9 +67,9 @@ ScriptRegisteredDelegate_Code::ScriptRegisteredDelegate_Code(DelegateResponse in
: response(inResponse)
{}
void ScriptRegisteredDelegate_Code::Execute(const Event& ev)
void ScriptRegisteredDelegate_Code::Execute(Listener *object, const Event& ev)
{
(*response)(ev);
(*response)(object, ev);
}
bool ScriptRegisteredDelegate_Code::operator==(const ScriptRegisteredDelegate_Code& registeredDelegate) const
@ -134,27 +134,32 @@ void ScriptDelegate::Unregister(Class *object, ScriptRegisteredDelegate_CodeMemb
}
void ScriptDelegate::Trigger(const Event& ev) const
{
Trigger(NULL, ev);
}
void ScriptDelegate::Trigger(Listener *object, const Event& ev) const
{
size_t i;
{
const Container<ScriptRegisteredDelegate_Script> tmpList = list_script;
for (i = 1; i <= tmpList.NumObjects(); i++) {
tmpList.ObjectAt(i).Execute(ev);
tmpList.ObjectAt(i).Execute(object, ev);
}
}
{
const Container<ScriptRegisteredDelegate_Code> tmpList = list_code;
for (i = 1; i <= tmpList.NumObjects(); i++) {
tmpList.ObjectAt(i).Execute(ev);
tmpList.ObjectAt(i).Execute(object, ev);
}
}
{
const Container<ScriptRegisteredDelegate_CodeMember> tmpList = list_codeMember;
for (i = 1; i <= tmpList.NumObjects(); i++) {
tmpList.ObjectAt(i).Execute(ev);
tmpList.ObjectAt(i).Execute(object, ev);
}
}
}
@ -179,7 +184,7 @@ void ScriptDelegate::Reset()
void ScriptDelegate::ResetAllDelegates()
{
for (ScriptDelegate* delegate = root; delegate; delegate = delegate->next) {
for (ScriptDelegate *delegate = root; delegate; delegate = delegate->next) {
delegate->Reset();
}
}

View file

@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
class ScriptRegisteredDelegate
{
public:
void Execute(const Event& ev);
void Execute(Listener *object, const Event& ev);
};
/**
@ -41,7 +41,7 @@ class ScriptRegisteredDelegate_Script : public ScriptRegisteredDelegate
public:
ScriptRegisteredDelegate_Script(const ScriptThreadLabel& inLabel);
void Execute(const Event& ev);
void Execute(Listener *object, const Event& ev);
bool operator==(const ScriptRegisteredDelegate_Script& registeredDelegate) const;
@ -56,12 +56,12 @@ private:
class ScriptRegisteredDelegate_Code : public ScriptRegisteredDelegate
{
public:
using DelegateResponse = void (*)(const Event& ev);
using DelegateResponse = void (*)(Listener *object, const Event& ev);
public:
ScriptRegisteredDelegate_Code(DelegateResponse inResponse);
void Execute(const Event& ev);
void Execute(Listener *object, const Event& ev);
bool operator==(const ScriptRegisteredDelegate_Code& registeredDelegate) const;
@ -77,12 +77,12 @@ private:
class ScriptRegisteredDelegate_CodeMember : public ScriptRegisteredDelegate
{
public:
using DelegateClassResponse = void (Class::*)(const Event& ev);
using DelegateClassResponse = void (Class::*)(Listener *object, const Event& ev);
public:
ScriptRegisteredDelegate_CodeMember(Class *inObject, DelegateClassResponse inResponse);
void Execute(const Event& ev);
void Execute(Listener *object, const Event& ev);
bool operator==(const ScriptRegisteredDelegate_CodeMember& registeredDelegate) const;
@ -156,6 +156,13 @@ public:
*/
void Trigger(const Event& ev) const;
/**
* Executes all registered delegates with the specified event.
*
* @param ev Parameter list
*/
void Trigger(Listener *object, const Event& ev) const;
/**
* Reset the delegate, unregister callbacks.
*/
@ -167,7 +174,7 @@ public:
* @param name The name to search for
*/
static ScriptDelegate *GetScriptDelegate(const char *name);
static void ResetAllDelegates();
static void ResetAllDelegates();
// non-movable and non-copyable
ScriptDelegate(ScriptDelegate&& other) = delete;