xref: /AOO41X/main/vcl/inc/vcl/vclevent.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _VCL_VCLEVENT_HXX
29 #define _VCL_VCLEVENT_HXX
30 
31 #include "tools/link.hxx"
32 #include "tools/rtti.hxx"
33 #include "vcl/dllapi.h"
34 #include "vcl/impdel.hxx"
35 
36 #include <com/sun/star/uno/Reference.hxx>
37 
38 #include <list>
39 #include <vector>
40 
41 class Window;
42 class Menu;
43 
44 namespace com { namespace sun { namespace star {
45     namespace accessibility {
46         class XAccessible;
47     }
48 }}}
49 
50 #define VCLEVENT_OBJECT_DYING                  1
51 
52 // VclWindowEvent:
53 #define VCLEVENT_WINDOW_CHILDCREATED         500    // pData = Window*
54 #define VCLEVENT_WINDOW_CHILDDESTROYED       501    // pData = Window*
55 #define VCLEVENT_WINDOW_PAINT               1000    // pData = Rectangle*
56 #define VCLEVENT_WINDOW_MOVE                1001
57 #define VCLEVENT_WINDOW_RESIZE              1002
58 #define VCLEVENT_WINDOW_SHOW                1003
59 #define VCLEVENT_WINDOW_HIDE                1004
60 #define VCLEVENT_WINDOW_ACTIVATE            1005
61 #define VCLEVENT_WINDOW_DEACTIVATE          1006    // pData = Window* = pPrevActiveWindow
62 #define VCLEVENT_WINDOW_CLOSE               1007
63 #define VCLEVENT_WINDOW_GETFOCUS            1008
64 #define VCLEVENT_WINDOW_LOSEFOCUS           1009
65 #define VCLEVENT_WINDOW_MINIMIZE            1010
66 #define VCLEVENT_WINDOW_NORMALIZE           1011
67 #define VCLEVENT_WINDOW_KEYINPUT            1012    // pData = KeyEvent*
68 #define VCLEVENT_WINDOW_KEYUP               1013    // pData = KeyEvent*
69 #define VCLEVENT_WINDOW_COMMAND             1014    // pData = CommandEvent*
70 #define VCLEVENT_WINDOW_MOUSEMOVE           1015    // pData = MouseEvent*
71 #define VCLEVENT_WINDOW_MOUSEBUTTONDOWN     1016    // pData = MouseEvent*
72 #define VCLEVENT_WINDOW_MOUSEBUTTONUP       1017    // pData = MouseEvent*
73 #define VCLEVENT_WINDOW_FRAMETITLECHANGED   1018    // pData = XubString* = oldTitle
74 #define VCLEVENT_APPLICATION_DATACHANGED    1019    // pData = DataChangedEvent*
75 #define VCLEVENT_WINDOW_ENABLED             1020
76 #define VCLEVENT_WINDOW_DISABLED            1021
77 #define VCLEVENT_WINDOW_DATACHANGED         1022    // pData = DataChangedEvent*
78 
79 // VclWindowEvent
80 #define VCLEVENT_CONTROL_GETFOCUS           1100
81 #define VCLEVENT_CONTROL_LOSEFOCUS          1101
82 #define VCLEVENT_BUTTON_CLICK               1102
83 #define VCLEVENT_PUSHBUTTON_TOGGLE          1103
84 #define VCLEVENT_RADIOBUTTON_TOGGLE         1104
85 #define VCLEVENT_CHECKBOX_TOGGLE            1105
86 #define VCLEVENT_COMBOBOX_SELECT            1106
87 #define VCLEVENT_COMBOBOX_DOUBLECLICK       1107
88 #define VCLEVENT_LISTBOX_SELECT             1108
89 #define VCLEVENT_LISTBOX_DOUBLECLICK        1109
90 #define VCLEVENT_EDIT_MODIFY                1110
91 #define VCLEVENT_SCROLLBAR_SCROLL           1111
92 #define VCLEVENT_SCROLLBAR_ENDSCROLL        1112
93 #define VCLEVENT_SPINBUTTON_UP              1113
94 #define VCLEVENT_SPINBUTTON_DOWN            1114
95 #define VCLEVENT_SPINFIELD_UP               1115
96 #define VCLEVENT_SPINFIELD_DOWN             1116
97 #define VCLEVENT_SPINFIELD_FIRST            1117
98 #define VCLEVENT_SPINFIELD_LAST             1118
99 #define VCLEVENT_STATUSBAR_CLICK            1119
100 #define VCLEVENT_STATUSBAR_DOUBLECLICK      1120
101 #define VCLEVENT_TOOLBOX_CLICK              1121
102 #define VCLEVENT_TOOLBOX_DOUBLECLICK        1122
103 #define VCLEVENT_TOOLBOX_ACTIVATE           1123
104 #define VCLEVENT_TOOLBOX_DEACTIVATE         1124
105 #define VCLEVENT_TOOLBOX_HIGHLIGHT          1125
106 #define VCLEVENT_TOOLBOX_SELECT             1126
107 // Resort later...
108 #define VCLEVENT_LISTBOX_SCROLLED           1127
109 #define VCLEVENT_COMBOBOX_SCROLLED          1128
110 #define VCLEVENT_EDIT_SELECTIONCHANGED      1129
111 #define VCLEVENT_DROPDOWN_OPEN				1130
112 #define VCLEVENT_DROPDOWN_CLOSE			    1131
113 
114 #define VCLEVENT_TOOLBOX_ITEMADDED          1132        // pData = itempos
115 #define VCLEVENT_TOOLBOX_ITEMREMOVED        1133        // pData = itempos
116 #define VCLEVENT_TOOLBOX_ALLITEMSCHANGED    1134
117 #define VCLEVENT_TOOLBOX_HIGHLIGHTOFF       1135        // pData = itempos
118 #define VCLEVENT_WINDOW_MENUBARADDED		1136        // pData = pMenuBar
119 #define VCLEVENT_TABPAGE_ACTIVATE           1137        // pData = pageid
120 #define VCLEVENT_TABPAGE_DEACTIVATE         1138        // pData = pageid
121 #define VCLEVENT_TABBAR_PAGEENABLED         1139        // pData = pageid
122 #define VCLEVENT_TABBAR_PAGEDISABLED        1140        // pData = pageid
123 #define VCLEVENT_TABBAR_PAGESELECTED        1141        // pData = pageid
124 #define VCLEVENT_TABBAR_PAGEACTIVATED       1142        // pData = pageid
125 #define VCLEVENT_TABBAR_PAGEDEACTIVATED     1143        // pData = pageid
126 #define VCLEVENT_TABBAR_PAGEINSERTED        1144        // pData = pageid
127 #define VCLEVENT_TABBAR_PAGEREMOVED         1145        // pData = pageid
128 #define VCLEVENT_TABBAR_PAGEMOVED           1146        // pData = Pair( pagepos_old, pagepos_new )
129 #define VCLEVENT_TABBAR_PAGETEXTCHANGED     1147        // pData = pageid
130 #define VCLEVENT_COMBOBOX_DESELECT          1148
131 #define VCLEVENT_TOOLBOX_ITEMTEXTCHANGED    1149        // pData = itempos
132 #define VCLEVENT_TABPAGE_INSERTED           1150        // pData = pageid
133 #define VCLEVENT_TABPAGE_REMOVED            1151        // pData = pageid
134 #define VCLEVENT_TABPAGE_REMOVEDALL         1152
135 #define VCLEVENT_LISTBOX_ITEMADDED          1153        // pData = itempos
136 #define VCLEVENT_LISTBOX_ITEMREMOVED        1154        // pData = itempos, -1=ALL
137 #define VCLEVENT_COMBOBOX_ITEMADDED         1155        // pData = itempos
138 #define VCLEVENT_COMBOBOX_ITEMREMOVED       1156        // pData = itempos, -1=ALL
139 // free                                     1157
140 #define VCLEVENT_WINDOW_MENUBARREMOVED      1158        // pData = pMenuBar
141 #define VCLEVENT_STATUSBAR_ITEMADDED        1159        // pData = itemid
142 #define VCLEVENT_STATUSBAR_ITEMREMOVED      1160        // pData = itemid
143 #define VCLEVENT_STATUSBAR_ALLITEMSREMOVED  1161
144 #define VCLEVENT_STATUSBAR_SHOWITEM         1162        // pData = itemid
145 #define VCLEVENT_STATUSBAR_HIDEITEM         1163        // pData = itemid
146 #define VCLEVENT_STATUSBAR_SHOWALLITEMS     1164
147 #define VCLEVENT_STATUSBAR_HIDEALLITEMS     1165
148 #define VCLEVENT_STATUSBAR_DRAWITEM			1166		// pData = itemid
149 #define VCLEVENT_STATUSBAR_NAMECHANGED		1167		// pData = itemid
150 #define VCLEVENT_TOOLBOX_ITEMENABLED        1168        // pData = itempos
151 #define VCLEVENT_TOOLBOX_ITEMDISABLED       1169        // pData = itempos
152 #define VCLEVENT_TABPAGE_PAGETEXTCHANGED    1170        // pData = pageid
153 #define VCLEVENT_ROADMAP_ITEMSELECTED       1171
154 #define VCLEVENT_TOOLBOX_FORMATCHANGED      1172        // request new layout
155 #define VCLEVENT_COMBOBOX_SETTEXT           1173
156 // --> OD 2009-04-01 #i92103#
157 #define VCLEVENT_ITEM_EXPANDED              1174
158 #define VCLEVENT_ITEM_COLLAPSED             1175
159 // <--
160 #define VCLEVENT_DROPDOWN_PRE_OPEN          1176
161 
162 // VclMenuEvent
163 #define VCLEVENT_MENU_ACTIVATE              1200
164 #define VCLEVENT_MENU_DEACTIVATE            1201
165 #define VCLEVENT_MENU_HIGHLIGHT             1202
166 #define VCLEVENT_MENU_SELECT                1203
167 #define VCLEVENT_MENU_ENABLE                1204
168 #define VCLEVENT_MENU_INSERTITEM            1205
169 #define VCLEVENT_MENU_REMOVEITEM            1206
170 #define VCLEVENT_MENU_SUBMENUACTIVATE       1207
171 #define VCLEVENT_MENU_SUBMENUDEACTIVATE     1208
172 #define VCLEVENT_MENU_SUBMENUCHANGED        1209
173 #define VCLEVENT_MENU_DEHIGHLIGHT           1210
174 #define VCLEVENT_MENU_DISABLE               1211
175 #define VCLEVENT_MENU_ITEMTEXTCHANGED		1212
176 #define VCLEVENT_MENU_ITEMCHECKED			1213
177 #define VCLEVENT_MENU_ITEMUNCHECKED			1214
178 #define VCLEVENT_MENU_ACCESSIBLENAMECHANGED	1215
179 
180 #define VCLEVENT_MENU_SHOW                  1250
181 #define VCLEVENT_MENU_HIDE                  1251
182 
183 #define VCLEVENT_TOOLBOX_ITEMWINDOWCHANGED  1216
184 
185 // DockingWindow
186 #define VCLEVENT_WINDOW_STARTDOCKING            1217    // pData = DockingData
187 #define VCLEVENT_WINDOW_DOCKING                 1218
188 #define VCLEVENT_WINDOW_ENDDOCKING              1219    // pData = EndDockingData
189 #define VCLEVENT_WINDOW_PREPARETOGGLEFLOATING   1220    // pData = sal_Bool
190 #define VCLEVENT_WINDOW_TOGGLEFLOATING          1221
191 #define VCLEVENT_WINDOW_ENDPOPUPMODE            1222    // pData = EndPopupModeData
192 
193 #define VCLEVENT_TOOLBOX_BUTTONSTATECHANGED     1223    // pData = itempos
194 #define VCLEVENT_TABLECELL_NAMECHANGED          1224    // pData = struct(Entry, Column, oldText)
195 #define VCLEVENT_TABLEROW_SELECT				1225
196 
197 class VCL_DLLPUBLIC VclSimpleEvent
198 {
199 private:
200     sal_uLong nId;
201 
202 public:
203     VclSimpleEvent( sal_uLong n ) { nId = n; }
204 	TYPEINFO();
205 
206 	sal_uLong GetId() const { return nId; }
207 };
208 
209 class VCL_DLLPUBLIC VclWindowEvent : public VclSimpleEvent
210 {
211 private:
212     Window* pWindow;
213     void*   pData;
214 
215 public:
216     VclWindowEvent( Window* pWin, sal_uLong n, void* pDat = NULL ) : VclSimpleEvent(n) { pWindow = pWin; pData = pDat; }
217 	TYPEINFO();
218 
219 	Window* GetWindow() const { return pWindow; }
220 	void*   GetData() const { return pData; }
221 };
222 
223 /*
224 class VclMouseEvent : public VclWindowEvent
225 {
226 private:
227     MouseEvent aEvent;
228 
229 public:
230     VclMouseEvent( Window* pWin, sal_uLong n, const MouseEvent& rEvent ) : VclWindowEvent( pWin, n ), aEvent(rEvent) { ; }
231 	TYPEINFO();
232 
233 	const MouseEvent& GetEvent() const { return aEvent; }
234 };
235 */
236 
237 class VCL_DLLPUBLIC VclMenuEvent : public VclSimpleEvent
238 {
239 private:
240     Menu* pMenu;
241     sal_uInt16 mnPos;
242 
243 public:
244     VclMenuEvent( Menu* pM, sal_uLong n, sal_uInt16 nPos ) : VclSimpleEvent(n) { pMenu = pM; mnPos = nPos; }
245 	TYPEINFO();
246 
247 	Menu* GetMenu() const { return pMenu; }
248     sal_uInt16 GetItemPos() const { return mnPos; }
249 };
250 
251 class VCL_DLLPUBLIC VclAccessibleEvent: public VclSimpleEvent
252 {
253 public:
254     VclAccessibleEvent( sal_uLong n, const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rxAccessible );
255     virtual ~VclAccessibleEvent();
256     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GetAccessible() const;
257 
258 private:
259     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > mxAccessible;
260 };
261 
262 class VCL_DLLPUBLIC VclEventListeners : public std::list<Link>
263 {
264 public:
265     void Call( VclSimpleEvent* pEvent ) const;
266 
267     // stops notifying when any handler has processed the event
268     // and returns sal_True in that case
269     // a handler must return sal_True to signal that it has processed the event
270     sal_Bool Process( VclSimpleEvent* pEvent ) const;
271 };
272 
273 class VCL_DLLPUBLIC VclEventListeners2 : public vcl::DeletionNotifier
274 {
275     std::list< Link >                               m_aListeners;
276 
277     struct ListenerIt
278     {
279         std::list< Link >::iterator     m_aIt;
280         bool                            m_bWasInvalidated;
281 
282         ListenerIt(const std::list<Link>::iterator& rIt)
283             : m_aIt(rIt)
284             , m_bWasInvalidated( false )
285         {}
286     };
287 
288     std::vector< ListenerIt >      m_aIterators;
289 
290 
291 public:
292     VclEventListeners2();
293     ~VclEventListeners2();
294 
295     void addListener( const Link& );
296     void removeListener( const Link& );
297 
298     void callListeners( VclSimpleEvent* );
299 };
300 
301 #endif // _VCL_VCLEVENT_HXX
302