1/*
2 Copyright 2006-2007 Kevin Ottens <ervin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#ifndef SOLID_OPTICALDISC_H
22#define SOLID_OPTICALDISC_H
23
24#include <solid/solid_export.h>
25
26#include <solid/storagevolume.h>
27
28namespace Solid
29{
30 class OpticalDiscPrivate;
31 class Device;
32
33 /**
34 * This device interface is available on optical discs.
35 *
36 * An optical disc is a volume that can be inserted in CD-R*,DVD*,Blu-Ray,HD-DVD drives.
37 */
38 class SOLID_EXPORT OpticalDisc : public StorageVolume
39 {
40 Q_OBJECT
41 Q_ENUMS(ContentType DiscType)
42 Q_FLAGS(ContentTypes)
43 Q_PROPERTY(ContentTypes availableContent READ availableContent)
44 Q_PROPERTY(DiscType discType READ discType)
45 Q_PROPERTY(bool appendable READ isAppendable)
46 Q_PROPERTY(bool blank READ isBlank)
47 Q_PROPERTY(bool rewritable READ isRewritable)
48 Q_PROPERTY(qulonglong capacity READ capacity)
49 Q_DECLARE_PRIVATE(OpticalDisc)
50 friend class Device;
51
52 public:
53 /**
54 * This enum type defines the type of content available in an optical disc.
55 *
56 * - Audio : A disc containing audio
57 * - Data : A disc containing data
58 * - VideoCd : A Video Compact Disc (VCD)
59 * - SuperVideoCd : A Super Video Compact Disc (SVCD)
60 * - VideoDvd : A Video Digital Versatile Disc (DVD-Video)
61 */
62 enum ContentType {
63 NoContent = 0x00,
64 Audio = 0x01,
65 Data = 0x02,
66 VideoCd = 0x04,
67 SuperVideoCd = 0x08,
68 VideoDvd = 0x10,
69 VideoBluRay = 0x20
70 };
71
72 /**
73 * This type stores an OR combination of ContentType values.
74 */
75 Q_DECLARE_FLAGS(ContentTypes, ContentType)
76
77 /**
78 * This enum type defines the type of optical disc it can be.
79 *
80 * - UnknownDiscType : An undetermined disc type
81 * - CdRom : A Compact Disc Read-Only Memory (CD-ROM)
82 * - CdRecordable : A Compact Disc Recordable (CD-R)
83 * - CdRewritable : A Compact Disc ReWritable (CD-RW)
84 * - DvdRom : A Digital Versatile Disc Read-Only Memory (DVD-ROM)
85 * - DvdRam : A Digital Versatile Disc Random Access Memory (DVD-RAM)
86 * - DvdRecordable : A Digital Versatile Disc Recordable (DVD-R)
87 * - DvdRewritable : A Digital Versatile Disc ReWritable (DVD-RW)
88 * - DvdPlusRecordable : A Digital Versatile Disc Recordable (DVD+R)
89 * - DvdPlusRewritable : A Digital Versatile Disc ReWritable (DVD+RW)
90 * - DvdPlusRecordableDuallayer : A Digital Versatile Disc Recordable Dual-Layer (DVD+R DL)
91 * - DvdPlusRewritableDuallayer : A Digital Versatile Disc ReWritable Dual-Layer (DVD+RW DL)
92 * - BluRayRom : A Blu-ray Disc (BD)
93 * - BluRayRecordable : A Blu-ray Disc Recordable (BD-R)
94 * - BluRayRewritable : A Blu-ray Disc (BD-RE)
95 * - HdDvdRom: A High Density Digital Versatile Disc (HD DVD)
96 * - HdDvdRecordable : A High Density Digital Versatile Disc Recordable (HD DVD-R)
97 * - HdDvdRewritable : A High Density Digital Versatile Disc ReWritable (HD DVD-RW)
98 */
99 enum DiscType { UnknownDiscType = -1,
100 CdRom, CdRecordable, CdRewritable, DvdRom, DvdRam,
101 DvdRecordable, DvdRewritable,
102 DvdPlusRecordable, DvdPlusRewritable,
103 DvdPlusRecordableDuallayer, DvdPlusRewritableDuallayer,
104 BluRayRom, BluRayRecordable, BluRayRewritable,
105 HdDvdRom, HdDvdRecordable, HdDvdRewritable };
106
107
108 private:
109 /**
110 * Creates a new OpticalDisc object.
111 * You generally won't need this. It's created when necessary using
112 * Device::as().
113 *
114 * @param backendObject the device interface object provided by the backend
115 * @see Solid::Device::as()
116 */
117 explicit OpticalDisc(QObject *backendObject);
118
119 public:
120 /**
121 * Destroys an OpticalDisc object.
122 */
123 virtual ~OpticalDisc();
124
125
126 /**
127 * Get the Solid::DeviceInterface::Type of the OpticalDisc device interface.
128 *
129 * @return the OpticalDisc device interface type
130 * @see Solid::Ifaces::Enums::DeviceInterface::Type
131 */
132 static Type deviceInterfaceType() { return DeviceInterface::OpticalDisc; }
133
134
135 /**
136 * Retrieves the content types this disc contains (audio, video,
137 * data...).
138 *
139 * @return the flag set indicating the available contents
140 * @see Solid::OpticalDisc::ContentType
141 */
142 ContentTypes availableContent() const;
143
144 /**
145 * Retrieves the disc type (cdr, cdrw...).
146 *
147 * @return the disc type
148 */
149 DiscType discType() const;
150
151 /**
152 * Indicates if it's possible to write additional data to the disc.
153 *
154 * @return true if the disc is appendable, false otherwise
155 */
156 bool isAppendable() const;
157
158 /**
159 * Indicates if the disc is blank.
160 *
161 * @return true if the disc is blank, false otherwise
162 */
163 bool isBlank() const;
164
165 /**
166 * Indicates if the disc is rewritable.
167 *
168 * A disc is rewritable if you can write on it several times.
169 *
170 * @return true if the disc is rewritable, false otherwise
171 */
172 bool isRewritable() const;
173
174 /**
175 * Retrieves the disc capacity (that is the maximum size of a
176 * volume could have on this disc).
177 *
178 * @return the capacity of the disc in bytes
179 */
180 qulonglong capacity() const;
181 };
182}
183
184Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::OpticalDisc::ContentTypes)
185
186#endif
187