VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp@ 43138

Last change on this file since 43138 was 42553, checked in by vboxsync, 12 years ago

FE/Qt: 6234: Support for VM groups: Restoring snapshot-view auto-update functionality, using valid events for that.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.8 KB
Line 
1/* $Id: UIMainEventListener.cpp 42553 2012-08-02 17:36:40Z vboxsync $ */
2/** @file
3 *
4 * VBox frontends: Qt GUI ("VirtualBox"):
5 * UIMainEventListener class implementation
6 */
7
8/*
9 * Copyright (C) 2010 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
49UIMainEventListener::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
66HRESULT UIMainEventListener::init(QObject * /* pParent */)
67{
68 return S_OK;
69}
70
71void 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 */
79STDMETHODIMP 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
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use