1 #ifndef _KVI_KVS_EVENTTRIGGERS_H_
2 #define _KVI_KVS_EVENTTRIGGERS_H_
3 //=============================================================================
4 //
5 //   File : KviKvsEventTriggers.h
6 //   Creation date : Thu Oct 22 2005 04:57:12 by Szymon Stefanek
7 //
8 //   This file is part of the KVIrc IRC client distribution
9 //   Copyright (C) 2005-2010 Szymon Stefanek <pragma at kvirc dot net>
10 //
11 //   This program is FREE software. You can redistribute it and/or
12 //   modify it under the terms of the GNU General Public License
13 //   as published by the Free Software Foundation; either version 2
14 //   of the License, or (at your option) any later version.
15 //
16 //   This program is distributed in the HOPE that it will be USEFUL,
17 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
18 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 //   See the GNU General Public License for more details.
20 //
21 //   You should have received a copy of the GNU General Public License
22 //   along with this program. If not, write to the Free Software Foundation,
23 //   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 //
25 //=============================================================================
26 
27 #include "kvi_settings.h"
28 
29 #include "KviKvsEventTable.h"
30 #include "KviKvsEventManager.h"
31 #include "KviKvsVariantList.h"
32 
33 //
34 // KVS Macros for triggering events
35 //
36 // KviKvsVariantList vParams;
37 // vParams.append(bSomething);
38 // vParams.append(iSomething);
39 // vParams.append(szSomething);
40 // KVS_TRIGGER_EVENT(KviEvent_OnSomething,pSomeWindow,&vParams)
41 //
42 // if(KVS_TRIGGER_EVENT_HALTED(KviEvent_OnSomething,pSomeWindow,&vParams))
43 //     msg->haltOutput()
44 //
45 //
46 
47 // These two allow reusing the parameter lists (but may require more code)
48 #define KVS_TRIGGER_EVENT(__idx, __wnd, __parms)              \
49 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx)) \
50 		KviKvsEventManager::instance()->trigger(__idx, __wnd, __parms);
51 
52 #define KVS_TRIGGER_EVENT_HALTED(__idx, __wnd, __parms) \
53 	(KviKvsEventManager::instance()->hasAppHandlers(__idx) ? KviKvsEventManager::instance()->trigger(__idx, __wnd, __parms) : false)
54 
55 // These require less code (but param lists can't be reused)
56 #define KVS_TRIGGER_EVENT_0(__idx, __wnd)                                         \
57 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                     \
58 	{                                                                             \
59 		KviKvsVariantList _vLocalParamList;                                       \
60 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList); \
61 	}
62 
63 #define KVS_TRIGGER_EVENT_1(__idx, __wnd, __param1)                               \
64 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                     \
65 	{                                                                             \
66 		KviKvsVariantList _vLocalParamList(                                       \
67 		    new KviKvsVariant(__param1));                                         \
68 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList); \
69 	}
70 
71 #define KVS_TRIGGER_EVENT_2(__idx, __wnd, __param1, __param2)                     \
72 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                     \
73 	{                                                                             \
74 		KviKvsVariantList _vLocalParamList(                                       \
75 		    new KviKvsVariant(__param1),                                          \
76 		    new KviKvsVariant(__param2));                                         \
77 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList); \
78 	}
79 
80 #define KVS_TRIGGER_EVENT_3(__idx, __wnd, __param1, __param2, __param3)           \
81 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                     \
82 	{                                                                             \
83 		KviKvsVariantList _vLocalParamList(                                       \
84 		    new KviKvsVariant(__param1),                                          \
85 		    new KviKvsVariant(__param2),                                          \
86 		    new KviKvsVariant(__param3));                                         \
87 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList); \
88 	}
89 
90 #define KVS_TRIGGER_EVENT_4(__idx, __wnd, __param1, __param2, __param3, __param4) \
91 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                     \
92 	{                                                                             \
93 		KviKvsVariantList _vLocalParamList(                                       \
94 		    new KviKvsVariant(__param1),                                          \
95 		    new KviKvsVariant(__param2),                                          \
96 		    new KviKvsVariant(__param3),                                          \
97 		    new KviKvsVariant(__param4));                                         \
98 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList); \
99 	}
100 
101 #define KVS_TRIGGER_EVENT_5(__idx, __wnd, __param1, __param2, __param3, __param4, __param5) \
102 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                               \
103 	{                                                                                       \
104 		KviKvsVariantList _vLocalParamList(                                                 \
105 		    new KviKvsVariant(__param1),                                                    \
106 		    new KviKvsVariant(__param2),                                                    \
107 		    new KviKvsVariant(__param3),                                                    \
108 		    new KviKvsVariant(__param4),                                                    \
109 		    new KviKvsVariant(__param5));                                                   \
110 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList);           \
111 	}
112 
113 #define KVS_TRIGGER_EVENT_6(__idx, __wnd, __param1, __param2, __param3, __param4, __param5, __param6) \
114 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                                         \
115 	{                                                                                                 \
116 		KviKvsVariantList _vLocalParamList(                                                           \
117 		    new KviKvsVariant(__param1),                                                              \
118 		    new KviKvsVariant(__param2),                                                              \
119 		    new KviKvsVariant(__param3),                                                              \
120 		    new KviKvsVariant(__param4),                                                              \
121 		    new KviKvsVariant(__param5),                                                              \
122 		    new KviKvsVariant(__param6));                                                             \
123 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList);                     \
124 	}
125 
126 #define KVS_TRIGGER_EVENT_7(__idx, __wnd, __param1, __param2, __param3, __param4, __param5, __param6, __param7) \
127 	if(KviKvsEventManager::instance()->hasAppHandlers(__idx))                                                   \
128 	{                                                                                                           \
129 		KviKvsVariantList _vLocalParamList(                                                                     \
130 		    new KviKvsVariant(__param1),                                                                        \
131 		    new KviKvsVariant(__param2),                                                                        \
132 		    new KviKvsVariant(__param3),                                                                        \
133 		    new KviKvsVariant(__param4),                                                                        \
134 		    new KviKvsVariant(__param5),                                                                        \
135 		    new KviKvsVariant(__param6),                                                                        \
136 		    new KviKvsVariant(__param7));                                                                       \
137 		KviKvsEventManager::instance()->trigger(__idx, __wnd, &_vLocalParamList);                               \
138 	}
139 
140 #define KVS_TRIGGER_EVENT_0_HALTED(__idx, __wnd)                   \
141 	(                                                              \
142 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)      \
143 	        ? KviKvsEventManager::instance()->triggerDeleteParams( \
144 	              __idx,                                           \
145 	              __wnd,                                           \
146 	              new KviKvsVariantList())                         \
147 	        : false)
148 
149 #define KVS_TRIGGER_EVENT_1_HALTED(__idx, __wnd, __param1)         \
150 	(                                                              \
151 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)      \
152 	        ? KviKvsEventManager::instance()->triggerDeleteParams( \
153 	              __idx,                                           \
154 	              __wnd,                                           \
155 	              new KviKvsVariantList(                           \
156 	                  new KviKvsVariant(__param1)))                \
157 	        : false)
158 
159 #define KVS_TRIGGER_EVENT_2_HALTED(__idx, __wnd, __param1, __param2) \
160 	(                                                                \
161 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)        \
162 	        ? KviKvsEventManager::instance()->triggerDeleteParams(   \
163 	              __idx,                                             \
164 	              __wnd,                                             \
165 	              new KviKvsVariantList(                             \
166 	                  new KviKvsVariant(__param1),                   \
167 	                  new KviKvsVariant(__param2)))                  \
168 	        : false)
169 
170 #define KVS_TRIGGER_EVENT_3_HALTED(__idx, __wnd, __param1, __param2, __param3) \
171 	(                                                                          \
172 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)                  \
173 	        ? KviKvsEventManager::instance()->triggerDeleteParams(             \
174 	              __idx,                                                       \
175 	              __wnd,                                                       \
176 	              new KviKvsVariantList(                                       \
177 	                  new KviKvsVariant(__param1),                             \
178 	                  new KviKvsVariant(__param2),                             \
179 	                  new KviKvsVariant(__param3)))                            \
180 	        : false)
181 
182 #define KVS_TRIGGER_EVENT_4_HALTED(__idx, __wnd, __param1, __param2, __param3, __param4) \
183 	(                                                                                    \
184 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)                            \
185 	        ? KviKvsEventManager::instance()->triggerDeleteParams(                       \
186 	              __idx,                                                                 \
187 	              __wnd,                                                                 \
188 	              new KviKvsVariantList(                                                 \
189 	                  new KviKvsVariant(__param1),                                       \
190 	                  new KviKvsVariant(__param2),                                       \
191 	                  new KviKvsVariant(__param3),                                       \
192 	                  new KviKvsVariant(__param4)))                                      \
193 	        : false)
194 
195 #define KVS_TRIGGER_EVENT_5_HALTED(__idx, __wnd, __param1, __param2, __param3, __param4, __param5) \
196 	(                                                                                              \
197 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)                                      \
198 	        ? KviKvsEventManager::instance()->triggerDeleteParams(                                 \
199 	              __idx,                                                                           \
200 	              __wnd,                                                                           \
201 	              new KviKvsVariantList(                                                           \
202 	                  new KviKvsVariant(__param1),                                                 \
203 	                  new KviKvsVariant(__param2),                                                 \
204 	                  new KviKvsVariant(__param3),                                                 \
205 	                  new KviKvsVariant(__param4),                                                 \
206 	                  new KviKvsVariant(__param5)))                                                \
207 	        : false)
208 
209 #define KVS_TRIGGER_EVENT_6_HALTED(__idx, __wnd, __param1, __param2, __param3, __param4, __param5, __param6) \
210 	(                                                                                                        \
211 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)                                                \
212 	        ? KviKvsEventManager::instance()->triggerDeleteParams(                                           \
213 	              __idx,                                                                                     \
214 	              __wnd,                                                                                     \
215 	              new KviKvsVariantList(                                                                     \
216 	                  new KviKvsVariant(__param1),                                                           \
217 	                  new KviKvsVariant(__param2),                                                           \
218 	                  new KviKvsVariant(__param3),                                                           \
219 	                  new KviKvsVariant(__param4),                                                           \
220 	                  new KviKvsVariant(__param5),                                                           \
221 	                  new KviKvsVariant(__param6)))                                                          \
222 	        : false)
223 
224 #define KVS_TRIGGER_EVENT_7_HALTED(__idx, __wnd, __param1, __param2, __param3, __param4, __param5, __param6, __param7) \
225 	(                                                                                                                  \
226 	    KviKvsEventManager::instance()->hasAppHandlers(__idx)                                                          \
227 	        ? KviKvsEventManager::instance()->triggerDeleteParams(                                                     \
228 	              __idx,                                                                                               \
229 	              __wnd,                                                                                               \
230 	              new KviKvsVariantList(                                                                               \
231 	                  new KviKvsVariant(__param1),                                                                     \
232 	                  new KviKvsVariant(__param2),                                                                     \
233 	                  new KviKvsVariant(__param3),                                                                     \
234 	                  new KviKvsVariant(__param4),                                                                     \
235 	                  new KviKvsVariant(__param5),                                                                     \
236 	                  new KviKvsVariant(__param6),                                                                     \
237 	                  new KviKvsVariant(__param7)))                                                                    \
238 	        : false)
239 
240 #endif //!_KVI_KVS_EVENTTRIGGERS_H_
241