Libmacro  0.2
Libmacro is an extensible macro and hotkey library.
trigger.h
Go to the documentation of this file.
1 /* Libmacro - A multi-platform, extendable macro and hotkey C library
2  Copyright (C) 2013 Jonathan Pelletier, New Paradigm Software
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Lesser General Public
6  License as published by the Free Software Foundation; either
7  version 2.1 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU Lesser General Public
15  License along with this library; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
25 #ifndef MCR_BASE_TRIGGER_H_
26 #define MCR_BASE_TRIGGER_H_
27 
28 #include "mcr/base/itrigger.h"
29 #include "mcr/base/instance.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
36 struct mcr_Trigger {
38  union {
39  struct mcr_ITrigger *itrigger;
40  struct mcr_Instance instance;
41  struct mcr_Interface *interface;
42  };
43  /* Trigger specific */
49  mcr_Trigger_receive_fnc trigger;
51  void *actor;
52 };
53 
66 MCR_API bool mcr_Trigger_receive(struct mcr_DispatchReceiver *dispReceiver,
67  struct mcr_Signal *dispatchSignal, unsigned int mods);
69 MCR_API bool mcr_Macro_receive(struct mcr_DispatchReceiver *dispPt,
70  struct mcr_Signal *sigPt, unsigned int mods);
71 
76 MCR_API void mcr_Trigger_init(struct mcr_Trigger *triggerPt);
84 MCR_API void mcr_Trigger_ctor(struct mcr_Trigger *triggerPt,
85  struct mcr_ITrigger *itrigPt, mcr_Trigger_receive_fnc trigger, void *actor);
88 MCR_API void mcr_Trigger_deinit(struct mcr_Trigger *trigPt);
89 
96 MCR_API int mcr_Trigger_copy(struct mcr_Trigger *dstPt,
97  const struct mcr_Trigger *srcPt);
104 MCR_API int mcr_Trigger_compare(const struct mcr_Trigger *lhsTriggerPt,
105  const struct mcr_Trigger *rhsTriggerPt);
106 
107 /* Dispatch utilities */
114 MCR_API int mcr_Trigger_add_dispatch(struct mcr_context *ctx,
115  struct mcr_Trigger *trigPt, struct mcr_Signal *interceptPt);
121 MCR_API void mcr_Trigger_remove_dispatch(struct mcr_context *ctx,
122  struct mcr_Trigger *trigPt, struct mcr_ISignal *isigPt);
123 
125 #define mcr_Trigger_data(triggerPt) \
126 (triggerPt ? (triggerPt)->instance.data_member.data : NULL)
127 
128 #ifdef __cplusplus
129 }
130 #endif
131 
132 #endif
mcr_ITrigger - Interface for triggers
MCR_API int mcr_Trigger_add_dispatch(struct mcr_context *ctx, struct mcr_Trigger *trigPt, struct mcr_Signal *interceptPt)
MCR_API bool mcr_Trigger_receive(struct mcr_DispatchReceiver *dispReceiver, struct mcr_Signal *dispatchSignal, unsigned int mods)
mcr_DispatchReceiver_fnc for triggers
MCR_API void mcr_Trigger_deinit(struct mcr_Trigger *trigPt)
MCR_API bool mcr_Macro_receive(struct mcr_DispatchReceiver *dispPt, struct mcr_Signal *sigPt, unsigned int mods)
MCR_API int mcr_Trigger_copy(struct mcr_Trigger *dstPt, const struct mcr_Trigger *srcPt)
mcr_Trigger_receive_fnc trigger
Definition: trigger.h:49
mcr_Instance Example and abstraction of an interface instance.
MCR_API void mcr_Trigger_remove_dispatch(struct mcr_context *ctx, struct mcr_Trigger *trigPt, struct mcr_ISignal *isigPt)
void * actor
Definition: trigger.h:51
MCR_API int mcr_Trigger_compare(const struct mcr_Trigger *lhsTriggerPt, const struct mcr_Trigger *rhsTriggerPt)
MCR_API void mcr_Trigger_init(struct mcr_Trigger *triggerPt)
MCR_API void mcr_Trigger_ctor(struct mcr_Trigger *triggerPt, struct mcr_ITrigger *itrigPt, mcr_Trigger_receive_fnc trigger, void *actor)