VirtualBox

Changeset 30521 in vbox


Ignore:
Timestamp:
Jun 30, 2010 8:24:32 AM (15 years ago)
Author:
vboxsync
Message:

Main: veto event class, more events

Location:
trunk/src/VBox/Main
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/EventImpl.cpp

    r30477 r30521  
    207207
    208208    return S_OK;
     209}
     210
     211typedef std::list<Bstr> VetoList;
     212struct VBoxVetoEvent::Data
     213{
     214    Data()
     215        :
     216        mVetoed(FALSE)
     217    {}
     218    BOOL                    mVetoed;
     219    VetoList                mVetoList;
     220};
     221
     222HRESULT VBoxVetoEvent::FinalConstruct()
     223{
     224    VBoxEvent::FinalConstruct();
     225    m = new Data;
     226    return S_OK;
     227}
     228
     229void VBoxVetoEvent::FinalRelease()
     230{
     231    if (m)
     232    {
     233        uninit();
     234        delete m;
     235        m = 0;
     236    }
     237    VBoxEvent::FinalRelease();
     238}
     239
     240
     241HRESULT VBoxVetoEvent::init(IEventSource *aSource, VBoxEventType_T aType)
     242{
     243    HRESULT rc = S_OK;
     244    // all veto events are waitable
     245    rc = VBoxEvent::init(aSource, aType, TRUE);
     246    if (FAILED(rc)) return rc;
     247
     248    m->mVetoed = FALSE;
     249    m->mVetoList.clear();
     250
     251    return rc;
     252}
     253
     254void VBoxVetoEvent::uninit()
     255{
     256    VBoxEvent::uninit();
     257    if (!m)
     258        return;
     259    m->mVetoed = FALSE;
     260}
     261
     262STDMETHODIMP VBoxVetoEvent::AddVeto(IN_BSTR aVeto)
     263{
     264    AutoCaller autoCaller(this);
     265    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     266
     267    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     268
     269    if (aVeto)
     270        m->mVetoList.push_back(aVeto);
     271
     272    m->mVetoed = TRUE;
     273
     274    return S_OK;
     275}
     276
     277STDMETHODIMP VBoxVetoEvent::IsVetoed(BOOL * aResult)
     278{
     279    CheckComArgOutPointerValid(aResult);
     280
     281    AutoCaller autoCaller(this);
     282    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     283
     284    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     285
     286    *aResult = m->mVetoed;
     287
     288    return S_OK;
     289}
     290
     291STDMETHODIMP  VBoxVetoEvent::GetVetos(ComSafeArrayOut(BSTR, aVetos))
     292{
     293    if (ComSafeArrayOutIsNull(aVetos))
     294        return E_POINTER;
     295
     296    AutoCaller autoCaller(this);
     297    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     298
     299    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     300    com::SafeArray<BSTR> vetos(m->mVetoList.size());
     301    int i = 0;
     302    for (VetoList::const_iterator it = m->mVetoList.begin();
     303         it != m->mVetoList.end();
     304         ++it, ++i)
     305    {
     306        const Bstr &str = *it;
     307        str.cloneTo(&vetos[i]);
     308    }
     309    vetos.detachTo(ComSafeArrayOutArg(aVetos));
     310
     311    return S_OK;
     312
    209313}
    210314
     
    397501}
    398502
    399 HRESULT ListenerRecord::process(IEvent*                     aEvent, 
    400                                 BOOL                        aWaitable, 
    401                                 PendingEventsMap::iterator& pit, 
     503HRESULT ListenerRecord::process(IEvent*                     aEvent,
     504                                BOOL                        aWaitable,
     505                                PendingEventsMap::iterator& pit,
    402506                                AutoLockBase&               aAlock)
    403507{
     
    437541}
    438542
    439 HRESULT ListenerRecord::dequeue (IEvent*       *aEvent, 
    440                                  LONG          aTimeout, 
     543HRESULT ListenerRecord::dequeue (IEvent*       *aEvent,
     544                                 LONG          aTimeout,
    441545                                 AutoLockBase& aAlock)
    442546{
     
    448552        // retain listener record
    449553        ListenerRecordHolder holder(this);
    450         ::RTCritSectLeave(&mcsQLock);       
     554        ::RTCritSectLeave(&mcsQLock);
    451555        // Speed up common case
    452556        if (aTimeout == 0)
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r30510 r30521  
    64226422        issued by <link to="IConsole::attachUSBDevice"/> or
    64236423        <link to="IConsole::detachUSBDevice"/>.
    6424 
    64256424        This notification is sent in case of both a succeeded and a
    64266425        failed request completion. When the request succeeds, the
     
    1475914758      </desc>
    1476014759    </const>
     14760    <const name="OnCPUChange" value="60">
     14761      <desc>
     14762        <see>IConsoleCallback::onCPUChange</see>
     14763      </desc>
     14764    </const>
     14765    <const name="OnRemoteDisplayInfoChange" value="61">
     14766      <desc>
     14767        <see>IConsoleCallback::onRemoteDisplayInfoChange</see>
     14768      </desc>
     14769    </const>
    1476114770    <!-- Last event marker -->
    14762     <const name="Last" value="60">
     14771    <const name="Last" value="62">
    1476314772      <desc>
    1476414773        Must be last event, used for iterations and structures relying on numerical event values.
     
    1519815207
    1519915208  <interface
     15209     name="IKeyboardLedsChangeEvent" extends="IEvent"
     15210     uuid="6DDEF35E-4737-457B-99FC-BC52C851A44F"
     15211     wsmap="managed" autogen="VBoxEvent" id="OnKeyboardLedsChange"
     15212     >
     15213    <desc>
     15214      Notification when the guest OS executes the KBD_CMD_SET_LEDS command
     15215      to alter the state of the keyboard LEDs.
     15216    </desc>
     15217    <attribute name="numLock" type="boolean" readonly="yes">
     15218      <desc>
     15219        NumLock status.
     15220      </desc>
     15221    </attribute>
     15222    <attribute name="capsLock" type="boolean" readonly="yes">
     15223      <desc>
     15224        CapsLock status.
     15225      </desc>
     15226    </attribute>
     15227    <attribute name="scrollLock" type="boolean" readonly="yes">
     15228      <desc>
     15229        ScrollLock status.
     15230      </desc>
     15231    </attribute>
     15232  </interface>
     15233
     15234  <interface
     15235     name="IStateChangeEvent" extends="IEvent"
     15236     uuid="4376693C-CF37-453B-9289-3B0F521CAF27"
     15237     wsmap="managed" autogen="VBoxEvent" id="OnStateChange"
     15238     >
     15239    <desc>
     15240      Notification when the execution state of the machine has changed.
     15241      The new state is given.
     15242    </desc>
     15243    <attribute name="state" type="MachineState" readonly="yes">
     15244      <desc>
     15245        New machine state.
     15246      </desc>
     15247    </attribute>
     15248  </interface>
     15249
     15250  <interface
     15251     name="IAdditionsChangeEvent" extends="IEvent"
     15252     uuid="D70F7915-DA7C-44C8-A7AC-9F173490446A"
     15253     wsmap="managed" autogen="VBoxEvent" id="OnAdditionsStateChange"
     15254     >
     15255    <desc>
     15256      Notification when a Guest Additions property changes.
     15257      Interested callees should query IGuest attributes to
     15258      find out what has changed.
     15259    </desc>
     15260  </interface>
     15261
     15262  <interface
     15263     name="INetworkAdapterChangeEvent" extends="IEvent"
     15264     uuid="4376693C-CF37-453B-9289-3B0F521CAF27"
     15265     wsmap="managed" autogen="VBoxEvent" id="OnNetworkAdapterChange"
     15266     >
     15267    <desc>
     15268      Notification when a property of one of the
     15269      virtual <link to="IMachine::getNetworkAdapter">network adapters</link>
     15270      changes.  Interested callees should use INetworkAdapter methods and
     15271      attributes to find out what has changed.
     15272    </desc>
     15273    <attribute name="networkAdapter" type="INetworkAdapter" readonly="yes">
     15274      <desc>
     15275        Network adapter that is subject to change.
     15276      </desc>
     15277    </attribute>
     15278  </interface>
     15279
     15280  <interface
     15281     name="ISerialPortChangeEvent" extends="IEvent"
     15282     uuid="3BA329DC-659C-488B-835C-4ECA7AE71C6C"
     15283     wsmap="managed" autogen="VBoxEvent" id="OnSerialPortChange"
     15284     >
     15285    <desc>
     15286      Notification when a property of one of the
     15287      virtual <link to="IMachine::getSerialPort">serial ports</link> changes.
     15288      Interested callees should use ISerialPort methods and attributes
     15289      to find out what has changed.
     15290    </desc>
     15291    <attribute name="serialPort" type="ISerialPort" readonly="yes">
     15292      <desc>
     15293        Serial port that is subject to change.
     15294      </desc>
     15295    </attribute>
     15296  </interface>
     15297
     15298  <interface
     15299     name="IParallelPortChangeEvent" extends="IEvent"
     15300     uuid="813C99FC-9849-4F47-813E-24A75DC85615"
     15301     wsmap="managed" autogen="VBoxEvent" id="OnParallelPortChange"
     15302     >
     15303    <desc>
     15304      Notification when a property of one of the
     15305      virtual <link to="IMachine::getParallelPort">parallel ports</link>
     15306      changes.  Interested callees should use ISerialPort methods and
     15307      attributes to find out what has changed.
     15308    </desc>
     15309    <attribute name="parallelPort" type="IParallelPort" readonly="yes">
     15310      <desc>
     15311        Parallel port that is subject to change.
     15312      </desc>
     15313    </attribute>
     15314  </interface>
     15315 
     15316  <interface
     15317     name="IStorageControllerChangeEvent" extends="IEvent"
     15318     uuid="715212BF-DA59-426E-8230-3831FAA52C56"
     15319     wsmap="managed" autogen="VBoxEvent" id="OnStorageControllerChange"
     15320     >
     15321    <desc>
     15322      Notification when a
     15323      <link to="IMachine::mediumAttachments">medium attachment</link>
     15324      changes.
     15325    </desc>
     15326  </interface>
     15327
     15328  <interface
     15329     name="IMediumChangeEvent" extends="IEvent"
     15330     uuid="0FE2DA40-5637-472A-9736-72019EABD7DE"
     15331     wsmap="managed" autogen="VBoxEvent" id="OnMediumChange"
     15332     >
     15333    <desc>
     15334      Notification when a
     15335      <link to="IMachine::mediumAttachments">medium attachment</link>
     15336      changes.
     15337    </desc>
     15338    <attribute name="mediumAttachment" type="IMediumAttachment" readonly="yes">
     15339      <desc>
     15340        Medium attachment that is subject to change.
     15341      </desc>
     15342    </attribute>
     15343  </interface>
     15344 
     15345   <interface
     15346     name="ICPUChangeEvent" extends="IEvent"
     15347     uuid="D0F0BECC-EE17-4D17-A8CC-383B0EB55E9D"
     15348     wsmap="managed" autogen="VBoxEvent" id="OnCPUChange"
     15349     >
     15350    <desc>
     15351      Notification when a CPU changes.
     15352    </desc>
     15353    <attribute name="cpu" type="unsigned long" readonly="yes">
     15354      <desc>
     15355        The CPU which changed.
     15356      </desc>
     15357    </attribute>
     15358    <attribute name="add" type="boolean" readonly="yes">
     15359      <desc>
     15360        Flag whether the CPU was added or removed.
     15361      </desc>
     15362    </attribute>
     15363  </interface>
     15364
     15365  <interface
     15366     name="IVRDPServerChangeEvent" extends="IEvent"
     15367     uuid="726038B6-6279-4A7A-8037-D041693D1915"
     15368     wsmap="managed" autogen="VBoxEvent" id="OnVRDPServerChange"
     15369     >
     15370    <desc>
     15371      Notification when a property of the
     15372      <link to="IMachine::VRDPServer">VRDP server</link> changes.
     15373      Interested callees should use IVRDPServer methods and attributes to
     15374      find out what has changed.
     15375    </desc>
     15376  </interface>
     15377
     15378   <interface
     15379     name="IRemoteDisplayInfoChangeEvent" extends="IEvent"
     15380     uuid="65B556C5-2A99-47D8-B311-FC177F0914CD"
     15381     wsmap="managed" autogen="VBoxEvent" id="OnRemoteDisplayInfoChange"
     15382     >
     15383    <desc>
     15384      Notification when the status of the VRDP server changes. Interested callees
     15385      should use <link to="IConsole::RemoteDisplayInfo">IRemoteDisplayInfo</link>
     15386      attributes to find out what is the current status.
     15387    </desc>
     15388  </interface>
     15389
     15390  <interface
     15391     name="IUSBControllerChangeEvent" extends="IEvent"
     15392     uuid="65B556C5-2A99-47D8-B311-FC177F0914CD"
     15393     wsmap="managed" autogen="VBoxEvent" id="OnUSBControllerChange"
     15394     >
     15395    <desc>
     15396      Notification when a property of the virtual
     15397      <link to="IMachine::USBController">USB controller</link> changes.
     15398      Interested callees should use IUSBController methods and attributes to
     15399      find out what has changed.
     15400    </desc>
     15401  </interface>
     15402
     15403  <interface
     15404     name="IUSBDevceStateChangeEvent" extends="IEvent"
     15405     uuid="65B556C5-2A99-47D8-B311-FC177F0914CD"
     15406     wsmap="managed" autogen="VBoxEvent" id="OnUSBDeviceStateChange"
     15407     >
     15408    <desc>
     15409      Notification when a USB device is attached to or detached from
     15410      the virtual USB controller.
     15411
     15412      This notification is sent as a result of the indirect
     15413      request to attach the device because it matches one of the
     15414      machine USB filters, or as a result of the direct request
     15415      issued by <link to="IConsole::attachUSBDevice"/> or
     15416      <link to="IConsole::detachUSBDevice"/>.
     15417
     15418      This notification is sent in case of both a succeeded and a
     15419      failed request completion. When the request succeeds, the
     15420      @a error parameter is @c null, and the given device has been
     15421      already added to (when @a attached is @c true) or removed from
     15422      (when @a attached is @c false) the collection represented by
     15423      <link to="IConsole::USBDevices"/>. On failure, the collection
     15424      doesn't change and the @a error parameter represents the error
     15425      message describing the failure.
     15426    </desc>
     15427    <attribute name="device" type="IUSBDevice" readonly="yes">
     15428      <desc>
     15429        Device that is subject to state change.
     15430      </desc>
     15431    </attribute>
     15432    <attribute name="attached" type="boolean" readonly="yes">
     15433      <desc>
     15434        @c true if the device was attached and @c false otherwise.
     15435      </desc>
     15436    </attribute>
     15437    <attribute name="error" type="IVirtualBoxErrorInfo" readonly="yes">
     15438      <desc>
     15439        @c null on success or an error message object on failure.
     15440      </desc>
     15441    </attribute>
     15442  </interface>
     15443
     15444   <interface
     15445     name="ISharedFolderChangeEvent" extends="IEvent"
     15446     uuid="B66349B5-3534-4239-B2DE-8E1535D94C0B"
     15447     wsmap="managed" autogen="VBoxEvent" id="OnSharedFolderChange"
     15448     >
     15449    <desc>
     15450      Notification when a shared folder is added or removed.
     15451      The @a scope argument defines one of three scopes:
     15452      <link to="IVirtualBox::sharedFolders">global shared folders</link>
     15453      (<link to="Scope_Global">Global</link>),
     15454      <link to="IMachine::sharedFolders">permanent shared folders</link> of
     15455      the machine (<link to="Scope_Machine">Machine</link>) or <link
     15456      to="IConsole::sharedFolders">transient shared folders</link> of the
     15457      machine (<link to="Scope_Session">Session</link>). Interested callees
     15458      should use query the corresponding collections to find out what has
     15459      changed.
     15460    </desc>
     15461    <attribute name="scope" type="Scope" readonly="yes">
     15462      <desc>
     15463        Scope of the notification.
     15464      </desc>
     15465    </attribute>
     15466  </interface>
     15467
     15468   <interface
     15469     name="IRuntimeErrorEvent" extends="IEvent"
     15470     uuid="883DD18B-0721-4CDE-867C-1A82ABAF914C"
     15471     wsmap="managed" autogen="VBoxEvent" id="OnRuntimeError"
     15472     >
     15473    <desc>
     15474      Notification when an error happens during the virtual
     15475      machine execution.
     15476
     15477      There are three kinds of runtime errors:
     15478      <ul>
     15479        <li><i>fatal</i></li>
     15480        <li><i>non-fatal with retry</i></li>
     15481        <li><i>non-fatal warnings</i></li>
     15482      </ul>
     15483
     15484      <b>Fatal</b> errors are indicated by the @a fatal parameter set
     15485      to @c true. In case of fatal errors, the virtual machine
     15486      execution is always paused before calling this notification, and
     15487      the notification handler is supposed either to immediately save
     15488      the virtual machine state using <link to="IConsole::saveState"/>
     15489      or power it off using <link to="IConsole::powerDown"/>.
     15490      Resuming the execution can lead to unpredictable results.
     15491
     15492      <b>Non-fatal</b> errors and warnings are indicated by the
     15493      @a fatal parameter set to @c false. If the virtual machine
     15494      is in the Paused state by the time the error notification is
     15495      received, it means that the user can <i>try to resume</i> the machine
     15496      execution after attempting to solve the problem that caused the
     15497      error. In this case, the notification handler is supposed
     15498      to show an appropriate message to the user (depending on the
     15499      value of the @a id parameter) that offers several actions such
     15500      as <i>Retry</i>, <i>Save</i> or <i>Power Off</i>. If the user
     15501      wants to retry, the notification handler should continue
     15502      the machine execution using the <link to="IConsole::resume"/>
     15503      call. If the machine execution is not Paused during this
     15504      notification, then it means this notification is a <i>warning</i>
     15505      (for example, about a fatal condition that can happen very soon);
     15506      no immediate action is required from the user, the machine
     15507      continues its normal execution.
     15508
     15509      Note that in either case the notification handler
     15510      <b>must not</b> perform any action directly on a thread
     15511      where this notification is called. Everything it is allowed to
     15512      do is to post a message to another thread that will then talk
     15513      to the user and take the corresponding action.
     15514
     15515      Currently, the following error identifiers are known:
     15516      <ul>
     15517        <li><tt>"HostMemoryLow"</tt></li>
     15518        <li><tt>"HostAudioNotResponding"</tt></li>
     15519        <li><tt>"VDIStorageFull"</tt></li>
     15520        <li><tt>"3DSupportIncompatibleAdditions"</tt></li>
     15521      </ul>
     15522    </desc>
     15523    <attribute name="fatal" type="boolean" readonly="yes">
     15524      <desc>
     15525        Whether the error is fatal or not.
     15526      </desc>
     15527    </attribute>
     15528    <attribute name="id" type="wstring" readonly="yes">
     15529      <desc>
     15530        Error identifier.
     15531      </desc>
     15532    </attribute>
     15533     <attribute name="message" type="wstring" readonly="yes">
     15534      <desc>
     15535        Optional error message.
     15536      </desc>
     15537    </attribute>
     15538  </interface>
     15539 
     15540  <interface
    1520015541      name="IExtraDataChangeEvent" extends="IEvent"
    1520115542      uuid="024F00CE-6E0B-492A-A8D0-968472A94DC7"
     
    1523715578      <param name="reason" type="wstring" dir="in">
    1523815579        <desc>
     15580          Reason for veto, could be null or empty string.
     15581        </desc>
     15582      </param>
     15583    </method>
     15584
     15585    <method name="isVetoed">
     15586      <desc>
     15587        If this event was vetoed.
     15588      </desc>
     15589      <param name="result" type="boolean" dir="return">
     15590        <desc>
    1523915591          Reason for veto.
    1524015592        </desc>
     
    1524215594    </method>
    1524315595
    15244     <method name="isVetoed">
    15245       <desc>
    15246         If this event was vetoed.
    15247       </desc>
    15248       <param name="result" type="boolean" dir="return">
    15249         <desc>
    15250           Reason for veto.
    15251         </desc>
    15252       </param>
    15253     </method>
    15254 
    1525515596    <method name="getVetos">
    1525615597      <desc>
    15257         Current veto list, if size is 0 - no veto.
     15598        Current veto reason list, if size is 0 - no veto.
    1525815599      </desc>
    1525915600      <param name="result" type="wstring" dir="return" safearray="yes">
    1526015601        <desc>
    15261           Reason for veto.
     15602          Array of reasons for veto provided by different event handlers.
    1526215603        </desc>
    1526315604      </param>
     
    1531415655  </interface>
    1531515656
     15657  <interface
     15658      name="IShowWindowEvent" extends="IEvent"
     15659      uuid="B0A0904D-2F05-4D28-855F-488F96BAD2B2"
     15660      wsmap="managed" autogen="VBoxEvent" id="OnShowWindow"
     15661      waitable="true"
     15662      >
     15663    <desc>
     15664       Notification when a call to
     15665        <link to="IMachine::showConsoleWindow"/>
     15666        requests the console window to be activated and brought to
     15667        foreground on the desktop of the host PC.
     15668
     15669        This notification should cause the VM console process to
     15670        perform the requested action as described above. If it is
     15671        impossible to do it at a time of this notification, this
     15672        method should return a failure.
     15673
     15674        Note that many modern window managers on many platforms
     15675        implement some sort of focus stealing prevention logic, so
     15676        that it may be impossible to activate a window without the
     15677        help of the currently active application (which is supposedly
     15678        an initiator of this notification). In this case, this method
     15679        must return a non-zero identifier that represents the
     15680        top-level window of the VM console process. The caller, if it
     15681        represents a currently active process, is responsible to use
     15682        this identifier (in a platform-dependent manner) to perform
     15683        actual window activation.
     15684
     15685        This method must set @a winId to zero if it has performed all
     15686        actions necessary to complete the request and the console
     15687        window is now active and in foreground, to indicate that no
     15688        further action is required on the caller's side.
     15689    </desc>
     15690    <attribute name="winId" type="unsigned long long" readonly="yes">
     15691      <desc>
     15692         Platform-dependent identifier of the top-level VM console
     15693          window, or zero if this method has performed all actions
     15694          necessary to implement the <i>show window</i> semantics for
     15695          the given platform and/or this VirtualBox front-end.
     15696      </desc>
     15697    </attribute>
     15698  </interface>
     15699
    1531615700  <module name="VBoxSVC" context="LocalServer">
    1531715701    <class name="VirtualBox" uuid="B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F"
  • trunk/src/VBox/Main/idl/comimpl.xsl

    r30510 r30521  
    101101      <xsl:value-of select="concat($type,'_T')"/>
    102102    </xsl:when>
     103    <xsl:when test="//interface[@name=$type]">
     104      <xsl:choose>
     105        <xsl:when test="$param='no'">
     106          <xsl:value-of select="concat('ComPtr&lt;',$type,'&gt;')"/>
     107        </xsl:when>
     108        <xsl:when test="$param='yes'">
     109          <xsl:value-of select="concat($type,'*')"/>
     110        </xsl:when>
     111      </xsl:choose>
     112    </xsl:when>
    103113    <xsl:when test="$type='boolean'">
    104114      <xsl:value-of select="'BOOL'" />
     
    109119    <xsl:when test="$type='long'">
    110120      <xsl:value-of select="'LONG'" />
     121    </xsl:when>
     122    <xsl:when test="$type='unsigned long long'">
     123      <xsl:value-of select="'ULONG64'" />
     124    </xsl:when>
     125    <xsl:when test="$type='long long'">
     126      <xsl:value-of select="'LONG64'" />
    111127    </xsl:when>
    112128    <xsl:otherwise>
     
    140156    <xsl:when test="($type='wstring') or ($type = 'uuid')">
    141157      <xsl:value-of select="concat('         ', $member, '.cloneTo(', $param, ');&#10;')"/>
     158    </xsl:when>
     159    <xsl:when test="//interface[@name=$type]">
     160       <xsl:value-of select="concat('         ', $member, '.queryInterfaceTo(', $param, ');&#10;')"/>
    142161    </xsl:when>
    143162    <xsl:otherwise>
     
    429448  <xsl:text><![CDATA[
    430449         default:
    431             if (0) AssertFailed();
     450            if (1) AssertFailed();
    432451    }
    433452    va_end(args);
  • trunk/src/VBox/Main/include/EventImpl.h

    r30477 r30521  
    6161    // for VirtualBoxSupportErrorInfoImpl
    6262    static const wchar_t *getComponentName() { return L"Event"; }
     63
     64private:
     65    struct Data;
     66
     67    Data* m;
     68};
     69
     70class ATL_NO_VTABLE VBoxVetoEvent :
     71    public VBoxEvent,
     72    VBOX_SCRIPTABLE_IMPL(IVetoEvent)
     73{
     74public:
     75    VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(VBoxVetoEvent)
     76
     77    DECLARE_NOT_AGGREGATABLE(VBoxVetoEvent)
     78
     79    DECLARE_PROTECT_FINAL_CONSTRUCT()
     80
     81    BEGIN_COM_MAP(VBoxEvent)
     82        COM_INTERFACE_ENTRY(ISupportErrorInfo)
     83        COM_INTERFACE_ENTRY(IEvent)
     84        COM_INTERFACE_ENTRY(IVetoEvent)
     85        COM_INTERFACE_ENTRY(IDispatch)
     86    END_COM_MAP()
     87
     88    VBoxVetoEvent() {}
     89    virtual ~VBoxVetoEvent() {}
     90
     91    HRESULT FinalConstruct();
     92    void FinalRelease();
     93
     94    // public initializer/uninitializer for internal purposes only
     95    HRESULT init (IEventSource *aSource, VBoxEventType_T aType);
     96    void uninit();
     97
     98     // IVetoEvent methods
     99    STDMETHOD(AddVeto)(IN_BSTR aVeto);
     100    STDMETHOD(IsVetoed)(BOOL *aResult);
     101    STDMETHOD(GetVetos)(ComSafeArrayOut(BSTR, aVetos));
     102
     103    // for VirtualBoxSupportErrorInfoImpl
     104    static const wchar_t *getComponentName() { return L"VetoEvent"; }
    63105
    64106private:
     
    133175
    134176 /**
    135   * This function to be used with some care, as arguments order must match attribute declaration order 
    136   * event class and its superclasses up to IEvent. If unsure, consult implementation in 
     177  * This function to be used with some care, as arguments order must match attribute declaration order
     178  * event class and its superclasses up to IEvent. If unsure, consult implementation in
    137179  * generated VBoxEvents.cpp.
    138180  */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette