1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.core.filedevice;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.datetime;
17 import qt.core.flags;
18 import qt.core.global;
19 import qt.core.iodevice;
20 import qt.core.object;
21 import qt.core.string;
22 import qt.helpers;
23 
24 extern(C++, class) struct QFileDevicePrivate;
25 
26 /// Binding for C++ class [QFileDevice](https://doc.qt.io/qt-6/qfiledevice.html).
27 class /+ Q_CORE_EXPORT +/ QFileDevice : QIODevice
28 {
29 /+ #ifndef QT_NO_QOBJECT +/
30     mixin(Q_OBJECT);
31 /+ #endif
32     Q_DECLARE_PRIVATE(QFileDevice) +/
33 
34 public:
35     enum FileError {
36         NoError = 0,
37         ReadError = 1,
38         WriteError = 2,
39         FatalError = 3,
40         ResourceError = 4,
41         OpenError = 5,
42         AbortError = 6,
43         TimeOutError = 7,
44         UnspecifiedError = 8,
45         RemoveError = 9,
46         RenameError = 10,
47         PositionError = 11,
48         ResizeError = 12,
49         PermissionsError = 13,
50         CopyError = 14
51     }
52 
53     enum FileTime {
54         FileAccessTime,
55         FileBirthTime,
56         FileMetadataChangeTime,
57         FileModificationTime
58     }
59 
60     enum Permission {
61         ReadOwner = 0x4000, WriteOwner = 0x2000, ExeOwner = 0x1000,
62         ReadUser  = 0x0400, WriteUser  = 0x0200, ExeUser  = 0x0100,
63         ReadGroup = 0x0040, WriteGroup = 0x0020, ExeGroup = 0x0010,
64         ReadOther = 0x0004, WriteOther = 0x0002, ExeOther = 0x0001
65     }
66     /+ Q_DECLARE_FLAGS(Permissions, Permission) +/
67 alias Permissions = QFlags!(Permission);
68     enum FileHandleFlag {
69         AutoCloseHandle = 0x0001,
70         DontCloseHandle = 0
71     }
72     /+ Q_DECLARE_FLAGS(FileHandleFlags, FileHandleFlag) +/
73 alias FileHandleFlags = QFlags!(FileHandleFlag);
74     ~this();
75 
76     final FileError error() const;
77     final void unsetError();
78 
79     override void close();
80 
81     override bool isSequential() const;
82 
83     final int handle() const;
84     /+ virtual +/ QString fileName() const;
85 
86     override qint64 pos() const;
87     override bool seek(qint64 offset);
88     override bool atEnd() const;
89     final bool flush();
90 
91     override qint64 size() const;
92 
93     /+ virtual +/ bool resize(qint64 sz);
94     /+ virtual +/ Permissions permissions() const;
95     /+ virtual +/ bool setPermissions(Permissions permissionSpec);
96 
97     enum MemoryMapFlag {
98         NoOptions = 0,
99         MapPrivateOption = 0x0001
100     }
101     /+ Q_DECLARE_FLAGS(MemoryMapFlags, MemoryMapFlag) +/
102 alias MemoryMapFlags = QFlags!(MemoryMapFlag);
103     final uchar* map(qint64 offset, qint64 size, MemoryMapFlags flags = MemoryMapFlag.NoOptions);
104     final bool unmap(uchar* address);
105 
106     final QDateTime fileTime(FileTime time) const;
107     final bool setFileTime(ref const(QDateTime) newDate, FileTime fileTime);
108 
109 protected:
110     this();
111 /+ #ifdef QT_NO_QOBJECT
112     QFileDevice(QFileDevicePrivate &dd);
113 #else +/
114     /+ explicit +/this(QObject parent);
115     this(ref QFileDevicePrivate dd, QObject parent = null);
116 /+ #endif +/
117 
118     override qint64 readData(char* data, qint64 maxlen);
119     override qint64 writeData(const(char)* data, qint64 len);
120     override qint64 readLineData(char* data, qint64 maxlen);
121 
122 private:
123     /+ Q_DISABLE_COPY(QFileDevice) +/
124     mixin(CREATE_CONVENIENCE_WRAPPERS);
125 }
126 /+pragma(inline, true) QFlags!(QFileDevice.Permissions.enum_type) operator |(QFileDevice.Permissions.enum_type f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.Permissions.enum_type)(f1)|f2;}+/
127 /+pragma(inline, true) QFlags!(QFileDevice.Permissions.enum_type) operator |(QFileDevice.Permissions.enum_type f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/{return f2|f1;}+/
128 /+pragma(inline, true) QFlags!(QFileDevice.Permissions.enum_type) operator &(QFileDevice.Permissions.enum_type f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.Permissions.enum_type)(f1)&f2;}+/
129 /+pragma(inline, true) QFlags!(QFileDevice.Permissions.enum_type) operator &(QFileDevice.Permissions.enum_type f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/{return f2&f1;}+/
130 /+pragma(inline, true) void operator +(QFileDevice.Permissions.enum_type f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/;+/
131 /+pragma(inline, true) void operator +(QFileDevice.Permissions.enum_type f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/;+/
132 /+pragma(inline, true) void operator +(int f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/;+/
133 /+pragma(inline, true) void operator -(QFileDevice.Permissions.enum_type f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/;+/
134 /+pragma(inline, true) void operator -(QFileDevice.Permissions.enum_type f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/;+/
135 /+pragma(inline, true) void operator -(int f1, QFlags!(QFileDevice.Permissions.enum_type) f2)/+noexcept+/;+/
136 /+pragma(inline, true) QIncompatibleFlag operator |(QFileDevice.Permissions.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
137 /+pragma(inline, true) void operator +(int f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/;+/
138 /+pragma(inline, true) void operator +(QFileDevice.Permissions.enum_type f1, int f2)/+noexcept+/;+/
139 /+pragma(inline, true) void operator -(int f1, QFileDevice.Permissions.enum_type f2)/+noexcept+/;+/
140 /+pragma(inline, true) void operator -(QFileDevice.Permissions.enum_type f1, int f2)/+noexcept+/;+/
141 
142 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDevice::Permissions) +/
143 /+pragma(inline, true) QFlags!(QFileDevice.FileHandleFlags.enum_type) operator |(QFileDevice.FileHandleFlags.enum_type f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.FileHandleFlags.enum_type)(f1)|f2;}+/
144 /+pragma(inline, true) QFlags!(QFileDevice.FileHandleFlags.enum_type) operator |(QFileDevice.FileHandleFlags.enum_type f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/{return f2|f1;}+/
145 /+pragma(inline, true) QFlags!(QFileDevice.FileHandleFlags.enum_type) operator &(QFileDevice.FileHandleFlags.enum_type f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.FileHandleFlags.enum_type)(f1)&f2;}+/
146 /+pragma(inline, true) QFlags!(QFileDevice.FileHandleFlags.enum_type) operator &(QFileDevice.FileHandleFlags.enum_type f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/{return f2&f1;}+/
147 /+pragma(inline, true) void operator +(QFileDevice.FileHandleFlags.enum_type f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/;+/
148 /+pragma(inline, true) void operator +(QFileDevice.FileHandleFlags.enum_type f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/;+/
149 /+pragma(inline, true) void operator +(int f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/;+/
150 /+pragma(inline, true) void operator -(QFileDevice.FileHandleFlags.enum_type f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/;+/
151 /+pragma(inline, true) void operator -(QFileDevice.FileHandleFlags.enum_type f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/;+/
152 /+pragma(inline, true) void operator -(int f1, QFlags!(QFileDevice.FileHandleFlags.enum_type) f2)/+noexcept+/;+/
153 /+pragma(inline, true) QIncompatibleFlag operator |(QFileDevice.FileHandleFlags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
154 /+pragma(inline, true) void operator +(int f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/;+/
155 /+pragma(inline, true) void operator +(QFileDevice.FileHandleFlags.enum_type f1, int f2)/+noexcept+/;+/
156 /+pragma(inline, true) void operator -(int f1, QFileDevice.FileHandleFlags.enum_type f2)/+noexcept+/;+/
157 /+pragma(inline, true) void operator -(QFileDevice.FileHandleFlags.enum_type f1, int f2)/+noexcept+/;+/
158 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDevice::FileHandleFlags) +/
159 /+pragma(inline, true) QFlags!(QFileDevice.MemoryMapFlags.enum_type) operator |(QFileDevice.MemoryMapFlags.enum_type f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.MemoryMapFlags.enum_type)(f1)|f2;}+/
160 /+pragma(inline, true) QFlags!(QFileDevice.MemoryMapFlags.enum_type) operator |(QFileDevice.MemoryMapFlags.enum_type f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/{return f2|f1;}+/
161 /+pragma(inline, true) QFlags!(QFileDevice.MemoryMapFlags.enum_type) operator &(QFileDevice.MemoryMapFlags.enum_type f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/{return QFlags!(QFileDevice.MemoryMapFlags.enum_type)(f1)&f2;}+/
162 /+pragma(inline, true) QFlags!(QFileDevice.MemoryMapFlags.enum_type) operator &(QFileDevice.MemoryMapFlags.enum_type f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/{return f2&f1;}+/
163 /+pragma(inline, true) void operator +(QFileDevice.MemoryMapFlags.enum_type f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/;+/
164 /+pragma(inline, true) void operator +(QFileDevice.MemoryMapFlags.enum_type f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/;+/
165 /+pragma(inline, true) void operator +(int f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/;+/
166 /+pragma(inline, true) void operator -(QFileDevice.MemoryMapFlags.enum_type f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/;+/
167 /+pragma(inline, true) void operator -(QFileDevice.MemoryMapFlags.enum_type f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/;+/
168 /+pragma(inline, true) void operator -(int f1, QFlags!(QFileDevice.MemoryMapFlags.enum_type) f2)/+noexcept+/;+/
169 /+pragma(inline, true) QIncompatibleFlag operator |(QFileDevice.MemoryMapFlags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
170 /+pragma(inline, true) void operator +(int f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/;+/
171 /+pragma(inline, true) void operator +(QFileDevice.MemoryMapFlags.enum_type f1, int f2)/+noexcept+/;+/
172 /+pragma(inline, true) void operator -(int f1, QFileDevice.MemoryMapFlags.enum_type f2)/+noexcept+/;+/
173 /+pragma(inline, true) void operator -(QFileDevice.MemoryMapFlags.enum_type f1, int f2)/+noexcept+/;+/
174 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDevice::MemoryMapFlags) +/