1 | /* $Id: UIMainEventListener.cpp 44528 2013-02-04 14:27:54Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | *
|
---|
4 | * VBox frontends: Qt GUI ("VirtualBox"):
|
---|
5 | * UIMainEventListener class implementation
|
---|
6 | */
|
---|
7 |
|
---|
8 | /*
|
---|
9 | * Copyright (C) 2012 Oracle Corporation
|
---|
10 | *
|
---|
11 | * This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
12 | * available from http://www.virtualbox.org. This file is free software;
|
---|
13 | * you can redistribute it and/or modify it under the terms of the GNU
|
---|
14 | * General Public License (GPL) as published by the Free Software
|
---|
15 | * Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
16 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
17 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
18 | */
|
---|
19 |
|
---|
20 | /* GUI includes: */
|
---|
21 | #include "UIMainEventListener.h"
|
---|
22 |
|
---|
23 | /* COM includes: */
|
---|
24 | #include "COMEnums.h"
|
---|
25 | #include "CVirtualBoxErrorInfo.h"
|
---|
26 | #include "CUSBDevice.h"
|
---|
27 | #include "CEvent.h"
|
---|
28 | #include "CMachineStateChangedEvent.h"
|
---|
29 | #include "CMachineDataChangedEvent.h"
|
---|
30 | #include "CExtraDataCanChangeEvent.h"
|
---|
31 | #include "CExtraDataChangedEvent.h"
|
---|
32 | #include "CMachineRegisteredEvent.h"
|
---|
33 | #include "CSessionStateChangedEvent.h"
|
---|
34 | #include "CSnapshotTakenEvent.h"
|
---|
35 | #include "CSnapshotDeletedEvent.h"
|
---|
36 | #include "CSnapshotChangedEvent.h"
|
---|
37 | #include "CMousePointerShapeChangedEvent.h"
|
---|
38 | #include "CMouseCapabilityChangedEvent.h"
|
---|
39 | #include "CKeyboardLedsChangedEvent.h"
|
---|
40 | #include "CStateChangedEvent.h"
|
---|
41 | #include "CNetworkAdapterChangedEvent.h"
|
---|
42 | #include "CMediumChangedEvent.h"
|
---|
43 | #include "CUSBDeviceStateChangedEvent.h"
|
---|
44 | #include "CRuntimeErrorEvent.h"
|
---|
45 | #include "CCanShowWindowEvent.h"
|
---|
46 | #include "CShowWindowEvent.h"
|
---|
47 | #include "CGuestMonitorChangedEvent.h"
|
---|
48 |
|
---|
49 | UIMainEventListener::UIMainEventListener()
|
---|
50 | : QObject()
|
---|
51 | {
|
---|
52 | /* For queued events we have to extra register our enums/interface classes
|
---|
53 | * (Q_DECLARE_METATYPE isn't sufficient).
|
---|
54 | * Todo: Try to move this to a global function, which is auto generated
|
---|
55 | * from xslt. */
|
---|
56 | qRegisterMetaType<KMachineState>("KMachineState");
|
---|
57 | qRegisterMetaType<KSessionState>("KSessionState");
|
---|
58 | qRegisterMetaType< QVector<uint8_t> >("QVector<uint8_t>");
|
---|
59 | qRegisterMetaType<CNetworkAdapter>("CNetworkAdapter");
|
---|
60 | qRegisterMetaType<CMediumAttachment>("CMediumAttachment");
|
---|
61 | qRegisterMetaType<CUSBDevice>("CUSBDevice");
|
---|
62 | qRegisterMetaType<CVirtualBoxErrorInfo>("CVirtualBoxErrorInfo");
|
---|
63 | qRegisterMetaType<KGuestMonitorChangedEventType>("KGuestMonitorChangedEventType");
|
---|
64 | }
|
---|
65 |
|
---|
66 | HRESULT UIMainEventListener::init(QObject * /* pParent */)
|
---|
67 | {
|
---|
68 | return S_OK;
|
---|
69 | }
|
---|
70 |
|
---|
71 | void UIMainEventListener::uninit()
|
---|
72 | {
|
---|
73 | }
|
---|
74 |
|
---|
75 | /**
|
---|
76 | * @todo: instead of double wrapping of events into signals maybe it
|
---|
77 | * make sense to use passive listeners, and peek up events in main thread.
|
---|
78 | */
|
---|
79 | STDMETHODIMP UIMainEventListener::HandleEvent(VBoxEventType_T /* type */, IEvent *pEvent)
|
---|
80 | {
|
---|
81 | CEvent event(pEvent);
|
---|
82 | // printf("Event received: %d\n", event.GetType());
|
---|
83 | switch(event.GetType())
|
---|
84 | {
|
---|
85 | /*
|
---|
86 | * All VirtualBox Events
|
---|
87 | */
|
---|
88 | case KVBoxEventType_OnMachineStateChanged:
|
---|
89 | {
|
---|
90 | CMachineStateChangedEvent es(pEvent);
|
---|
91 | emit sigMachineStateChange(es.GetMachineId(), es.GetState());
|
---|
92 | break;
|
---|
93 | }
|
---|
94 | case KVBoxEventType_OnMachineDataChanged:
|
---|
95 | {
|
---|
96 | CMachineDataChangedEvent es(pEvent);
|
---|
97 | emit sigMachineDataChange(es.GetMachineId());
|
---|
98 | break;
|
---|
99 | }
|
---|
100 | case KVBoxEventType_OnExtraDataCanChange:
|
---|
101 | {
|
---|
102 | CExtraDataCanChangeEvent es(pEvent);
|
---|
103 | /* Has to be done in place to give an answer */
|
---|
104 | bool fVeto = false;
|
---|
105 | QString strReason;
|
---|
106 | emit sigExtraDataCanChange(es.GetMachineId(), es.GetKey(), es.GetValue(), fVeto, strReason);
|
---|
107 | if (fVeto)
|
---|
108 | es.AddVeto(strReason);
|
---|
109 | break;
|
---|
110 | }
|
---|
111 | case KVBoxEventType_OnExtraDataChanged:
|
---|
112 | {
|
---|
113 | CExtraDataChangedEvent es(pEvent);
|
---|
114 | emit sigExtraDataChange(es.GetMachineId(), es.GetKey(), es.GetValue());
|
---|
115 | break;
|
---|
116 | }
|
---|
117 | /* Not used:
|
---|
118 | case KVBoxEventType_OnMediumRegistered:
|
---|
119 | */
|
---|
120 | case KVBoxEventType_OnMachineRegistered:
|
---|
121 | {
|
---|
122 | CMachineRegisteredEvent es(pEvent);
|
---|
123 | emit sigMachineRegistered(es.GetMachineId(), es.GetRegistered());
|
---|
124 | break;
|
---|
125 | }
|
---|
126 | case KVBoxEventType_OnSessionStateChanged:
|
---|
127 | {
|
---|
128 | CSessionStateChangedEvent es(pEvent);
|
---|
129 | emit sigSessionStateChange(es.GetMachineId(), es.GetState());
|
---|
130 | break;
|
---|
131 | }
|
---|
132 | case KVBoxEventType_OnSnapshotTaken:
|
---|
133 | {
|
---|
134 | CSnapshotTakenEvent es(pEvent);
|
---|
135 | emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
|
---|
136 | break;
|
---|
137 | }
|
---|
138 | case KVBoxEventType_OnSnapshotDeleted:
|
---|
139 | {
|
---|
140 | CSnapshotDeletedEvent es(pEvent);
|
---|
141 | emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
|
---|
142 | break;
|
---|
143 | }
|
---|
144 | case KVBoxEventType_OnSnapshotChanged:
|
---|
145 | {
|
---|
146 | CSnapshotChangedEvent es(pEvent);
|
---|
147 | emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
|
---|
148 | break;
|
---|
149 | }
|
---|
150 | /* Not used:
|
---|
151 | case KVBoxEventType_OnGuestPropertyChange:
|
---|
152 | */
|
---|
153 | /*
|
---|
154 | * All Console Events
|
---|
155 | */
|
---|
156 | case KVBoxEventType_OnMousePointerShapeChanged:
|
---|
157 | {
|
---|
158 | CMousePointerShapeChangedEvent es(pEvent);
|
---|
159 | emit sigMousePointerShapeChange(es.GetVisible(), es.GetAlpha(), QPoint(es.GetXhot(), es.GetYhot()), QSize(es.GetWidth(), es.GetHeight()), es.GetShape());
|
---|
160 | break;
|
---|
161 | }
|
---|
162 | case KVBoxEventType_OnMouseCapabilityChanged:
|
---|
163 | {
|
---|
164 | CMouseCapabilityChangedEvent es(pEvent);
|
---|
165 | emit sigMouseCapabilityChange(es.GetSupportsAbsolute(), es.GetSupportsRelative(), es.GetNeedsHostCursor());
|
---|
166 | break;
|
---|
167 | }
|
---|
168 | case KVBoxEventType_OnKeyboardLedsChanged:
|
---|
169 | {
|
---|
170 | CKeyboardLedsChangedEvent es(pEvent);
|
---|
171 | emit sigKeyboardLedsChangeEvent(es.GetNumLock(), es.GetCapsLock(), es.GetScrollLock());
|
---|
172 | break;
|
---|
173 | }
|
---|
174 | case KVBoxEventType_OnStateChanged:
|
---|
175 | {
|
---|
176 | CStateChangedEvent es(pEvent);
|
---|
177 | emit sigStateChange(es.GetState());
|
---|
178 | break;
|
---|
179 | }
|
---|
180 | case KVBoxEventType_OnAdditionsStateChanged:
|
---|
181 | {
|
---|
182 | emit sigAdditionsChange();
|
---|
183 | break;
|
---|
184 | }
|
---|
185 | case KVBoxEventType_OnNetworkAdapterChanged:
|
---|
186 | {
|
---|
187 | CNetworkAdapterChangedEvent es(pEvent);
|
---|
188 | emit sigNetworkAdapterChange(es.GetNetworkAdapter());
|
---|
189 | break;
|
---|
190 | }
|
---|
191 | /* Not used *
|
---|
192 | case KVBoxEventType_OnSerialPortChanged:
|
---|
193 | case KVBoxEventType_OnParallelPortChanged:
|
---|
194 | case KVBoxEventType_OnStorageControllerChanged:
|
---|
195 | */
|
---|
196 | case KVBoxEventType_OnMediumChanged:
|
---|
197 | {
|
---|
198 | CMediumChangedEvent es(pEvent);
|
---|
199 | emit sigMediumChange(es.GetMediumAttachment());
|
---|
200 | break;
|
---|
201 | }
|
---|
202 | /* Not used *
|
---|
203 | case KVBoxEventType_OnCPUChange:
|
---|
204 | */
|
---|
205 | case KVBoxEventType_OnVRDEServerChanged:
|
---|
206 | case KVBoxEventType_OnVRDEServerInfoChanged:
|
---|
207 | {
|
---|
208 | emit sigVRDEChange();
|
---|
209 | break;
|
---|
210 | }
|
---|
211 | case KVBoxEventType_OnUSBControllerChanged:
|
---|
212 | {
|
---|
213 | emit sigUSBControllerChange();
|
---|
214 | break;
|
---|
215 | }
|
---|
216 | case KVBoxEventType_OnUSBDeviceStateChanged:
|
---|
217 | {
|
---|
218 | CUSBDeviceStateChangedEvent es(pEvent);
|
---|
219 | emit sigUSBDeviceStateChange(es.GetDevice(), es.GetAttached(), es.GetError());
|
---|
220 | break;
|
---|
221 | }
|
---|
222 | case KVBoxEventType_OnSharedFolderChanged:
|
---|
223 | {
|
---|
224 | emit sigSharedFolderChange();
|
---|
225 | break;
|
---|
226 | }
|
---|
227 | case KVBoxEventType_OnRuntimeError:
|
---|
228 | {
|
---|
229 | CRuntimeErrorEvent es(pEvent);
|
---|
230 | emit sigRuntimeError(es.GetFatal(), es.GetId(), es.GetMessage());
|
---|
231 | break;
|
---|
232 | }
|
---|
233 | case KVBoxEventType_OnCanShowWindow:
|
---|
234 | {
|
---|
235 | CCanShowWindowEvent es(pEvent);
|
---|
236 | /* Has to be done in place to give an answer */
|
---|
237 | bool fVeto = false;
|
---|
238 | QString strReason;
|
---|
239 | emit sigCanShowWindow(fVeto, strReason);
|
---|
240 | if (fVeto)
|
---|
241 | es.AddVeto(strReason);
|
---|
242 | break;
|
---|
243 | }
|
---|
244 | case KVBoxEventType_OnShowWindow:
|
---|
245 | {
|
---|
246 | CShowWindowEvent es(pEvent);
|
---|
247 | /* Has to be done in place to give an answer */
|
---|
248 | LONG64 winId;
|
---|
249 | emit sigShowWindow(winId);
|
---|
250 | es.SetWinId(winId);
|
---|
251 | break;
|
---|
252 | }
|
---|
253 | case KVBoxEventType_OnCPUExecutionCapChanged:
|
---|
254 | {
|
---|
255 | emit sigCPUExecutionCapChange();
|
---|
256 | break;
|
---|
257 | }
|
---|
258 | case KVBoxEventType_OnGuestMonitorChanged:
|
---|
259 | {
|
---|
260 | CGuestMonitorChangedEvent es(pEvent);
|
---|
261 | emit sigGuestMonitorChange(es.GetChangeType(), es.GetScreenId(),
|
---|
262 | QRect(es.GetOriginX(), es.GetOriginY(), es.GetWidth(), es.GetHeight()));
|
---|
263 | break;
|
---|
264 | }
|
---|
265 | default: break;
|
---|
266 | }
|
---|
267 | return S_OK;
|
---|
268 | }
|
---|
269 |
|
---|