VirtualBox

source: vbox/trunk/src/VBox/Main/include/DVDDriveImpl.h@ 14959

Last change on this file since 14959 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.6 KB
Line 
1/* $Id: DVDDriveImpl.h 14949 2008-12-03 15:17:16Z vboxsync $ */
2
3/** @file
4 *
5 * VirtualBox COM class implementation
6 */
7
8/*
9 * Copyright (C) 2006-2008 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24#ifndef ____H_DVDDRIVEIMPL
25#define ____H_DVDDRIVEIMPL
26
27#include "VirtualBoxBase.h"
28
29#include "MediumImpl.h"
30
31class Machine;
32
33class ATL_NO_VTABLE DVDDrive :
34 public VirtualBoxBaseNEXT,
35 public VirtualBoxSupportErrorInfoImpl <DVDDrive, IDVDDrive>,
36 public VirtualBoxSupportTranslation <DVDDrive>,
37 public IDVDDrive
38{
39public:
40
41 struct Data
42 {
43 Data()
44 {
45 mState = DriveState_NotMounted;
46 mPassthrough = false;
47 }
48
49 bool operator== (const Data &that) const
50 {
51 return this == &that ||
52 (mState == that.mState &&
53 mImage.equalsTo (that.mImage) &&
54 mHostDrive.equalsTo (that.mHostDrive));
55 }
56
57 ComObjPtr <DVDImage2> mImage;
58 ComPtr <IHostDVDDrive> mHostDrive;
59 DriveState_T mState;
60 BOOL mPassthrough;
61 };
62
63 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (DVDDrive)
64
65 DECLARE_NOT_AGGREGATABLE(DVDDrive)
66
67 DECLARE_PROTECT_FINAL_CONSTRUCT()
68
69 BEGIN_COM_MAP(DVDDrive)
70 COM_INTERFACE_ENTRY(ISupportErrorInfo)
71 COM_INTERFACE_ENTRY(IDVDDrive)
72 END_COM_MAP()
73
74 NS_DECL_ISUPPORTS
75
76 DECLARE_EMPTY_CTOR_DTOR (DVDDrive)
77
78 HRESULT FinalConstruct();
79 void FinalRelease();
80
81 // public initializer/uninitializer for internal purposes only
82 HRESULT init (Machine *aParent);
83 HRESULT init (Machine *aParent, DVDDrive *aThat);
84 HRESULT initCopy (Machine *aParent, DVDDrive *aThat);
85 void uninit();
86
87 // IDVDDrive properties
88 STDMETHOD(COMGETTER(State)) (DriveState_T *aState);
89 STDMETHOD(COMGETTER(Passthrough)) (BOOL *aPassthrough);
90 STDMETHOD(COMSETTER(Passthrough)) (BOOL aPassthrough);
91
92 // IDVDDrive methods
93 STDMETHOD(MountImage) (INPTR GUIDPARAM aImageId);
94 STDMETHOD(CaptureHostDrive) (IHostDVDDrive *aHostDVDDrive);
95 STDMETHOD(Unmount)();
96 STDMETHOD(GetImage) (IDVDImage2 **aDVDImage);
97 STDMETHOD(GetHostDrive) (IHostDVDDrive **aHostDVDDrive);
98
99 // public methods only for internal purposes
100
101 HRESULT loadSettings (const settings::Key &aMachineNode);
102 HRESULT saveSettings (settings::Key &aMachineNode);
103
104 bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); }
105 bool isReallyModified() { AutoWriteLock alock (this); return mData.hasActualChanges(); }
106 bool rollback();
107 void commit();
108 void copyFrom (DVDDrive *aThat);
109
110 // public methods for internal purposes only
111 // (ensure there is a caller and a read lock before calling them!)
112
113 Backupable <Data> &data() { return mData; }
114
115 // for VirtualBoxSupportErrorInfoImpl
116 static const wchar_t *getComponentName() { return L"DVDDrive"; }
117
118private:
119
120 HRESULT unmount();
121
122 const ComObjPtr <Machine, ComWeakRef> mParent;
123 const ComObjPtr <DVDDrive> mPeer;
124
125 Backupable <Data> mData;
126};
127
128#endif // ____H_DVDDRIVEIMPL
129
130/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

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