[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] | 49 | UIMainEventListener::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] | 66 | HRESULT UIMainEventListener::init(QObject * /* pParent */)
|
---|
| 67 | {
|
---|
| 68 | return S_OK;
|
---|
| 69 | }
|
---|
[30698] | 70 |
|
---|
[35722] | 71 | void 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] | 79 | STDMETHODIMP 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 |
|
---|