ZFFramework
Loading...
Searching...
No Matches
Classes | Macros | Functions
ZFObjectObserver.h File Reference

observer types for ZFObject More...

#include "ZFCallback.h"
#include "ZFIdMap.h"
#include "ZFArgs.h"
#include "ZFListenerDeclare.h"

Go to the source code of this file.

Classes

class  ZFListener
 listener as ZFCallback, mostly used by ZFObject::observerNotify More...
 
class  ZFObserver
 holder object for observer logic, see ZFObject::observerNotify More...
 

Macros

#define ZFEVENT(YourEvent)
 see ZFObject::observerNotify
 
#define ZFEVENT_INLINE(YourEvent)
 see ZFEVENT
 
#define ZFEVENT_REGISTER(YourClass, YourEvent)
 see ZFEVENT
 
#define ZFEVENT_GLOBAL(YourEvent)
 declare a observer event in global scope, see ZFEVENT
 
#define ZFEVENT_GLOBAL_REGISTER(YourEvent)
 see ZFEVENT
 

Functions

ZFObserverZFGlobalObserver (void)
 all event notified by ZFObject::observerNotify would also be notified to the observers added by this method, see ZFObject::observerNotify
 
const zfcharZFEventNameForId (zfidentity idValue)
 get id name from id value, or null if no such id, see ZFEventIdForName
 
zfidentity ZFEventIdForName (const zfchar *idName)
 get id value from id name, or zfidentityInvalid if no such id name
 
zfidentity ZFEventDynamicRegister (const zfchar *idName)
 dynamically register your own id
 
void ZFEventDynamicUnregister (zfidentity idValue)
 unregister id that was registered by ZFEventDynamicRegister
 

Detailed Description

observer types for ZFObject

Macro Definition Documentation

◆ ZFEVENT

#define ZFEVENT ( YourEvent)

see ZFObject::observerNotify

usage:

zfclass YourClass ... {
ZFEVENT(YourEvent)
};
ZFEVENT_REGISTER(YourClass, YourEvent)
#define zfclass
same as class, shows that this class is a ZFObject type
Definition ZFObjectClassTypeFwd.h:38
#define ZFEVENT(YourEvent)
see ZFObject::observerNotify
Definition ZFObjectObserver.h:260
#define ZFEVENT_REGISTER(YourClass, YourEvent)
see ZFEVENT
Definition ZFObjectObserver.h:268

declare a event for ZFObject's observer logic, declared event name can be accessed by:

zfidentity eventId = YourClass::EventYourEvent();
const zfchar *eventName = ZFEventNameForId(eventId);
_ZFT_t_zfchar zfchar
char wrapper
Definition ZFCoreTypeDef_CharType.h:17
_zft_zfidentity zfidentity
identity type, ensured at least 32 bit, ensured unsigned
Definition ZFCoreTypeDef_CoreType.h:192
const zfchar * ZFEventNameForId(zfidentity idValue)
get id name from id value, or null if no such id, see ZFEventIdForName
Definition ZFObjectObserver.h:302

note that subclass may declare a event same as parent, while the final event name is different:
ParentClass::EventYourEvent() => "ParentClass.EventYourEvent"
ChildClass::EventYourEvent() => "ChildClass.EventYourEvent"

Note
we declare the event id as int types for performance, it's ensured each event has different event id, but it's only ensured while app is running, after relaunching the app, the event id is not ensured the same, you should use the name of the event to store or pass between apps, and you can use ZFEventIdForName or ZFEventNameForId to convert them easily

◆ ZFEVENT_GLOBAL

#define ZFEVENT_GLOBAL ( YourEvent)

declare a observer event in global scope, see ZFEVENT

usage:

// in header files
ZF_NAMESPACE_BEGIN(YourNamespace)
/ ** @brief you can add doxygen docs here * /
ZFEVENT_GLOBAL(YourEvent)
ZF_NAMESPACE_END(YourNamespace)
ZFEVENT_GLOBAL_REGISTER(YourNamespace, YourEvent)
// use the event
zfidentity eventId = YourNamespace::EventYourEvent();
#define ZF_NAMESPACE_END(NameSpace)
end namespace
Definition ZFCoreEnvDef.h:50
#define ZF_NAMESPACE_BEGIN(NameSpace)
begin namespace
Definition ZFCoreEnvDef.h:42
#define ZFEVENT_GLOBAL_REGISTER(YourEvent)
see ZFEVENT
Definition ZFObjectObserver.h:295
#define ZFEVENT_GLOBAL(YourEvent)
declare a observer event in global scope, see ZFEVENT
Definition ZFObjectObserver.h:291

unlike ZFEVENT, this macro would declare event outside of class scope, typically you should use ZFEVENT_GLOBAL which have "ZFGlobalEvent" as namespace

Function Documentation

◆ ZFGlobalObserver()

ZFObserver & ZFGlobalObserver ( void )
extern

all event notified by ZFObject::observerNotify would also be notified to the observers added by this method, see ZFObject::observerNotify

use only if necessary, which may cause performance issue

◆ ZFEventIdForName()

zfidentity ZFEventIdForName ( const zfchar * idName)
inline

get id value from id name, or zfidentityInvalid if no such id name

the id name should looks like YourClass.EventYourIdName or YourNamespace.EventYourIdName

note: can be found only if:

◆ ZFEventDynamicRegister()

zfidentity ZFEventDynamicRegister ( const zfchar * idName)
inline

dynamically register your own id

assert fail if already registered

◆ ZFEventDynamicUnregister()

void ZFEventDynamicUnregister ( zfidentity idValue)
inline

unregister id that was registered by ZFEventDynamicRegister

do nothing if no such id, assert fail if the id is not dynamically registered