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
RevLine 
[30677]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
[41587]20/* GUI includes: */
[30677]21#include "UIMainEventListener.h"
22
[41587]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"
[42553]34#include "CSnapshotTakenEvent.h"
35#include "CSnapshotDeletedEvent.h"
[41587]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"
[30677]48
[35722]49UIMainEventListener::UIMainEventListener()
[30677]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");
[41051]63 qRegisterMetaType<KGuestMonitorChangedEventType>("KGuestMonitorChangedEventType");
[30677]64}
65
[35722]66HRESULT UIMainEventListener::init(QObject * /* pParent */)
67{
68 return S_OK;
69}
[30698]70
[35722]71void UIMainEventListener::uninit()
72{
73}
74
[30698]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 */
[34527]79STDMETHODIMP UIMainEventListener::HandleEvent(VBoxEventType_T /* type */, IEvent *pEvent)
[30677]80{
81 CEvent event(pEvent);
[35722]82 // printf("Event received: %d\n", event.GetType());
[30677]83 switch(event.GetType())
84 {
85 /*
86 * All VirtualBox Events
87 */
[30871]88 case KVBoxEventType_OnMachineStateChanged:
[30677]89 {
[31811]90 CMachineStateChangedEvent es(pEvent);
[30677]91 emit sigMachineStateChange(es.GetMachineId(), es.GetState());
92 break;
93 }
[30871]94 case KVBoxEventType_OnMachineDataChanged:
[30677]95 {
[31813]96 CMachineDataChangedEvent es(pEvent);
[30677]97 emit sigMachineDataChange(es.GetMachineId());
98 break;
99 }
100 case KVBoxEventType_OnExtraDataCanChange:
101 {
[31811]102 CExtraDataCanChangeEvent es(pEvent);
[30677]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 }
[30871]111 case KVBoxEventType_OnExtraDataChanged:
[30677]112 {
[31811]113 CExtraDataChangedEvent es(pEvent);
[30677]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 {
[31811]122 CMachineRegisteredEvent es(pEvent);
[30677]123 emit sigMachineRegistered(es.GetMachineId(), es.GetRegistered());
124 break;
125 }
[30871]126 case KVBoxEventType_OnSessionStateChanged:
[30677]127 {
[31811]128 CSessionStateChangedEvent es(pEvent);
[30677]129 emit sigSessionStateChange(es.GetMachineId(), es.GetState());
130 break;
131 }
132 case KVBoxEventType_OnSnapshotTaken:
[42553]133 {
134 CSnapshotTakenEvent es(pEvent);
135 emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
136 break;
137 }
[30677]138 case KVBoxEventType_OnSnapshotDeleted:
[42553]139 {
140 CSnapshotDeletedEvent es(pEvent);
141 emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
142 break;
143 }
[30871]144 case KVBoxEventType_OnSnapshotChanged:
[30677]145 {
[31811]146 CSnapshotChangedEvent es(pEvent);
[30677]147 emit sigSnapshotChange(es.GetMachineId(), es.GetSnapshotId());
148 break;
149 }
150 /* Not used:
151 case KVBoxEventType_OnGuestPropertyChange:
152 */
153 /*
154 * All Console Events
155 */
[30871]156 case KVBoxEventType_OnMousePointerShapeChanged:
[30677]157 {
[31811]158 CMousePointerShapeChangedEvent es(pEvent);
[30677]159 emit sigMousePointerShapeChange(es.GetVisible(), es.GetAlpha(), QPoint(es.GetXhot(), es.GetYhot()), QSize(es.GetWidth(), es.GetHeight()), es.GetShape());
160 break;
161 }
[30871]162 case KVBoxEventType_OnMouseCapabilityChanged:
[30677]163 {
[31811]164 CMouseCapabilityChangedEvent es(pEvent);
[30677]165 emit sigMouseCapabilityChange(es.GetSupportsAbsolute(), es.GetSupportsRelative(), es.GetNeedsHostCursor());
166 break;
167 }
[30871]168 case KVBoxEventType_OnKeyboardLedsChanged:
[30677]169 {
[31811]170 CKeyboardLedsChangedEvent es(pEvent);
[30677]171 emit sigKeyboardLedsChangeEvent(es.GetNumLock(), es.GetCapsLock(), es.GetScrollLock());
172 break;
173 }
[30871]174 case KVBoxEventType_OnStateChanged:
[30677]175 {
[31811]176 CStateChangedEvent es(pEvent);
[30677]177 emit sigStateChange(es.GetState());
178 break;
179 }
[30871]180 case KVBoxEventType_OnAdditionsStateChanged:
[30677]181 {
182 emit sigAdditionsChange();
183 break;
184 }
[30871]185 case KVBoxEventType_OnNetworkAdapterChanged:
[30677]186 {
[31811]187 CNetworkAdapterChangedEvent es(pEvent);
[30677]188 emit sigNetworkAdapterChange(es.GetNetworkAdapter());
189 break;
190 }
191 /* Not used *
[30871]192 case KVBoxEventType_OnSerialPortChanged:
193 case KVBoxEventType_OnParallelPortChanged:
194 case KVBoxEventType_OnStorageControllerChanged:
[30677]195 */
[30871]196 case KVBoxEventType_OnMediumChanged:
[30677]197 {
[31811]198 CMediumChangedEvent es(pEvent);
[30677]199 emit sigMediumChange(es.GetMediumAttachment());
200 break;
201 }
202 /* Not used *
203 case KVBoxEventType_OnCPUChange:
204 */
[36364]205 case KVBoxEventType_OnVRDEServerChanged:
206 case KVBoxEventType_OnVRDEServerInfoChanged:
207 {
208 emit sigVRDEChange();
209 break;
210 }
[30871]211 case KVBoxEventType_OnUSBControllerChanged:
[30677]212 {
213 emit sigUSBControllerChange();
214 break;
215 }
[30871]216 case KVBoxEventType_OnUSBDeviceStateChanged:
[30677]217 {
[31811]218 CUSBDeviceStateChangedEvent es(pEvent);
[30677]219 emit sigUSBDeviceStateChange(es.GetDevice(), es.GetAttached(), es.GetError());
220 break;
221 }
[30871]222 case KVBoxEventType_OnSharedFolderChanged:
[30677]223 {
[30679]224 emit sigSharedFolderChange();
[30677]225 break;
226 }
227 case KVBoxEventType_OnRuntimeError:
228 {
[31811]229 CRuntimeErrorEvent es(pEvent);
[30677]230 emit sigRuntimeError(es.GetFatal(), es.GetId(), es.GetMessage());
231 break;
232 }
233 case KVBoxEventType_OnCanShowWindow:
234 {
[31811]235 CCanShowWindowEvent es(pEvent);
[30677]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 {
[31811]246 CShowWindowEvent es(pEvent);
[30677]247 /* Has to be done in place to give an answer */
[31813]248 LONG64 winId;
[30677]249 emit sigShowWindow(winId);
250 es.SetWinId(winId);
251 break;
252 }
[37712]253 case KVBoxEventType_OnCPUExecutionCapChanged:
254 {
255 emit sigCPUExecutionCapChange();
256 break;
257 }
[41051]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 }
[30677]265 default: break;
266 }
267 return S_OK;
268}
[34527]269
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use