Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohosprintdevice.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
include
"qohosnativeprint.h"
5
#
include
"qohosprintdevice.h"
6
#
include
<
QtGui
/
qpagesize
.
h
>
7
#
include
<
QtCore
/
private
/
qohoslogger_p
.
h
>
8
#
include
<
QtCore
/
qjsondocument
.
h
>
9
#
include
<
QtCore
/
qjsonobject
.
h
>
10
#
if
__has_include
(
<
BasicServicesKit
/
ohprint
.
h
>
)
11
#
include
<
BasicServicesKit
/
ohprint
.
h
>
12
#
else
13
#
include
<
ohprint
/
print_base
.
h
>
14
#
endif
15
16
QT_BEGIN_NAMESPACE
17
18
namespace
19
{
20
21
QPrint
::
DuplexMode
convertOhosToQtDuplexMode
(Print_DuplexMode nativeDuplexMode)
22
{
23
switch
(nativeDuplexMode) {
24
case
DUPLEX_MODE_ONE_SIDED:
25
return
QPrint::DuplexNone;
26
case
DUPLEX_MODE_TWO_SIDED_LONG_EDGE:
27
return
QPrint::DuplexLongSide;
28
case
DUPLEX_MODE_TWO_SIDED_SHORT_EDGE:
29
return
QPrint::DuplexShortSide;
30
}
31
}
32
33
QPrint
::
ColorMode
convertOhosToQtColorMode
(Print_ColorMode nativeColorMode)
34
{
35
switch
(nativeColorMode) {
36
case
COLOR_MODE_MONOCHROME:
37
return
QPrint::GrayScale;
38
case
COLOR_MODE_COLOR:
39
return
QPrint::Color;
40
case
COLOR_MODE_AUTO:
41
// NOTE: Qt doesn't have a QPrint::ColorMode::Auto option. Use GrayScale for safety.
42
return
QPrint::GrayScale;
43
}
44
}
45
46
QString
printerAliasFromDetailedInfo
(
const
QString &detailedInfo)
47
{
48
if
(detailedInfo.isEmpty())
49
return
QString();
50
51
QJsonParseError error;
52
const
auto
detailedInfoDoc = QJsonDocument::fromJson(detailedInfo.toUtf8(), &error);
53
if
(error.error != QJsonParseError::NoError) {
54
qOhosWarning(QtForOhos) <<
"Failed to parse PrinterInfo.detailedInfo:"
55
<< error.errorString();
56
return
QString();
57
}
58
59
const
auto
alias = detailedInfoDoc.object().value(QLatin1String(
"printerAlias"
));
60
if
(alias.isUndefined()) {
61
qOhosWarning(QtForOhos) <<
"PrinterInfo.detailedInfo has no \"printerAlias\" key; "
62
"it is available since OHOS API 24"
;
63
return
QString();
64
}
65
66
return
alias.toString();
67
}
68
69
}
70
71
QOhosPrintDevice
::
QOhosPrintDevice
()
72
:
QPlatformPrintDevice
()
73
{
74
}
75
76
QOhosPrintDevice
::
QOhosPrintDevice
(
const
QString &id)
77
:
QPlatformPrintDevice
(
id
)
78
{
79
QOhosNativePrint
::
PrinterInfo
printerInfo;
80
if
(
QOhosNativePrint
::
queryPrinterInfo
(m_id, printerInfo)) {
81
m_location = printerInfo.location;
82
m_makeAndModel = printerInfo.makeAndModel;
83
m_supportsMultipleCopies = printerInfo.capabilities.supportedCopies > 1;
84
}
85
}
86
87
QOhosPrintDevice
::~
QOhosPrintDevice
() =
default
;
88
89
QString
QOhosPrintDevice
::
name
()
const
90
{
91
QOhosNativePrint
::
PrinterInfo
printerInfo;
92
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
93
qOhosWarning(QtForOhos) <<
"Failed to get printerInfo for"
94
<< m_id;
95
return
QString();
96
}
97
98
const
QString alias = printerAliasFromDetailedInfo(printerInfo.detailedInfo);
99
return
alias.isEmpty() ? printerInfo.name : alias;
100
}
101
102
bool
QOhosPrintDevice
::
isValid
()
const
103
{
104
QStringList printerIdList;
105
if
(!QOhosNativePrint::queryPrinterIdList(printerIdList))
106
return
false
;
107
return
printerIdList.contains(m_id);
108
}
109
110
bool
QOhosPrintDevice
::
isDefault
()
const
111
{
112
QOhosNativePrint
::
PrinterInfo
printerInfo;
113
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
114
qOhosCritical(QtForOhos) <<
"QOhosPrintDevice::isDefault: Failed to get printerInfo"
;
115
return
false
;
116
}
117
118
return
printerInfo
.
isDefault
;
119
}
120
121
QPrint
::
DeviceState
QOhosPrintDevice
::
state
()
const
122
{
123
if
(!isValid())
124
return
QPrint::Error;
125
126
QOhosNativePrint
::
PrinterInfo
pi;
127
if
(!QOhosNativePrint::queryPrinterInfo(m_id, pi)) {
128
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
129
return
QPrint::Error;
130
}
131
132
switch
(pi.state) {
133
case
PRINTER_IDLE:
134
return
QPrint::Idle;
135
136
case
PRINTER_BUSY:
137
return
QPrint::Active;
138
139
case
PRINTER_UNAVAILABLE:
140
return
QPrint::Error;
141
}
142
}
143
144
QPageSize
QOhosPrintDevice
::
defaultPageSize
()
const
145
{
146
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultPageSize"
);
147
148
QOhosNativePrint
::
PrinterInfo
printerInfo;
149
if
(
QOhosNativePrint
::
queryPrinterInfo
(m_id, printerInfo)) {
150
for
(
const
auto
&pageSize : supportedPageSizes()) {
151
if
(pageSize.key() == printerInfo.defaultValues.pageSizeId)
152
return
pageSize;
153
}
154
}
155
156
// NOTE: OHOS provides just a page size ID of the default page size. It does not provide the
157
// size, which is required by Qt. Use the A4 format as a backup for default page. However, we
158
// cannot simply return QPageSize(QPageSize::A4) as a backup. The problem is that page size IDs
159
// provided by OHOS are different than what Qt uses. For example, the A4 size has ID "ISO_A4" in
160
// OHOS, while Qt uses "A4".
161
QString isoA4OhosId = QString::fromLocal8Bit(
"ISO_A4"
);
162
QString isoA4OhosName = QString::fromLocal8Bit(
"iso_a4_210x297mm"
);
163
return
createPageSize(isoA4OhosId, QPageSize(QPageSize::A4).sizePoints(), isoA4OhosName);
164
}
165
166
QPrint
::
DuplexMode
QOhosPrintDevice
::
defaultDuplexMode
()
const
167
{
168
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultDuplexMode"
);
169
170
QOhosNativePrint
::
PrinterInfo
printerInfo;
171
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
172
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
173
return
QPrint::DuplexNone;
174
}
175
176
return
convertOhosToQtDuplexMode(printerInfo.defaultValues.duplexMode);
177
}
178
179
QPrint
::
ColorMode
QOhosPrintDevice
::
defaultColorMode
()
const
180
{
181
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultColorMode"
);
182
183
QOhosNativePrint
::
PrinterInfo
printerInfo;
184
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
185
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
186
return
QPrint::GrayScale;
187
}
188
189
return
convertOhosToQtColorMode(printerInfo.defaultValues.colorMode);
190
}
191
192
int
QOhosPrintDevice
::
defaultResolution
()
const
193
{
194
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultResolution"
);
195
196
QOhosNativePrint
::
PrinterInfo
printerInfo;
197
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
198
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
199
return
0;
200
}
201
202
return
printerInfo.defaultValues.resolution.verticalDpi;
203
}
204
205
QStringList
QOhosPrintDevice
::availablePrintDeviceIds()
206
{
207
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::availablePrintDeviceIds"
);
208
209
QStringList printerIdList;
210
if
(!QOhosNativePrint::queryPrinterIdList(printerIdList))
211
return
{};
212
213
return
printerIdList;
214
}
215
216
QString
QOhosPrintDevice
::defaultPrintDeviceId()
217
{
218
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultPrintDeviceId"
);
219
220
for
(
const
auto
&printerId : availablePrintDeviceIds()) {
221
QOhosNativePrint::PrinterInfo printerInfo;
222
if
(QOhosNativePrint::queryPrinterInfo(printerId, printerInfo) && printerInfo.isDefault)
223
return
printerId;
224
}
225
226
return
QString();
227
}
228
229
void
QOhosPrintDevice
::
loadPageSizes
()
const
230
{
231
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadPageSizes"
);
232
233
QOhosNativePrint
::
PrinterInfo
printerInfo;
234
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
235
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
236
return
;
237
}
238
239
qOhosDebug(QtForOhos) <<
"Available page sizes:"
;
240
241
m_pageSizes.clear();
242
for
(
const
auto
&nativePageSize : printerInfo.capabilities.supportedPageSizes) {
243
QSize size(
244
QOhosNativePrint::convertPixelsPerThousandDpiToPoints(nativePageSize.width),
245
QOhosNativePrint::convertPixelsPerThousandDpiToPoints(nativePageSize.height));
246
QPageSize pageSize = createPageSize(nativePageSize.id, size, nativePageSize.name);
247
248
qOhosDebug(QtForOhos) <<
"\t*"
<< pageSize;
249
250
m_pageSizes.append(pageSize);
251
}
252
253
m_havePageSizes =
true
;
254
}
255
256
void
QOhosPrintDevice
::
loadDuplexModes
()
const
257
{
258
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadDuplexModes"
);
259
260
QOhosNativePrint
::
PrinterInfo
printerInfo;
261
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
262
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
263
return
;
264
}
265
266
qOhosDebug(QtForOhos) <<
"Available duplex modes:"
;
267
268
m_duplexModes.clear();
269
for
(
auto
nativeDuplexMode : printerInfo.capabilities.supportedDuplexModes) {
270
auto
duplexMode = convertOhosToQtDuplexMode(nativeDuplexMode);
271
272
qOhosDebug(QtForOhos) <<
"\t*"
<< duplexMode;
273
274
m_duplexModes.append(duplexMode);
275
}
276
277
m_haveDuplexModes =
true
;
278
}
279
280
void
QOhosPrintDevice
::
loadColorModes
()
const
281
{
282
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadColorModes"
);
283
284
QOhosNativePrint
::
PrinterInfo
printerInfo;
285
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
286
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
287
return
;
288
}
289
290
qOhosDebug(QtForOhos) <<
"Printer colorModes:"
;
291
292
m_colorModes.clear();
293
for
(
auto
nativeColorMode : printerInfo.capabilities.supportedColorModes) {
294
auto
colorMode = convertOhosToQtColorMode(nativeColorMode);
295
296
qOhosDebug(QtForOhos) <<
"\t*"
<< colorMode;
297
298
m_colorModes.append(colorMode);
299
}
300
301
m_haveColorModes =
true
;
302
}
303
304
void
QOhosPrintDevice
::
loadResolutions
()
const
305
{
306
auto
__dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadResolutions"
);
307
308
QOhosNativePrint
::
PrinterInfo
printerInfo;
309
if
(!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
310
qOhosCritical(QtForOhos) <<
"Failed to get printerInfo"
;
311
return
;
312
}
313
314
qOhosDebug(QtForOhos) <<
"Printer resolutions:"
;
315
316
m_resolutions.clear();
317
for
(
const
auto
&nativeResolution : printerInfo.capabilities.supportedResolutions) {
318
auto
resolution = nativeResolution.verticalDpi;
319
320
qOhosDebug(QtForOhos) <<
"\t*"
<< resolution;
321
322
m_resolutions.append(resolution);
323
}
324
325
m_haveResolutions =
true
;
326
}
327
328
QT_END_NAMESPACE
QOhosPrintDevice
Definition
qohosprintdevice.h:12
QOhosPrintDevice::loadDuplexModes
void loadDuplexModes() const override
Definition
qohosprintdevice.cpp:256
QOhosPrintDevice::loadResolutions
void loadResolutions() const override
Definition
qohosprintdevice.cpp:304
QOhosPrintDevice::QOhosPrintDevice
QOhosPrintDevice()
Definition
qohosprintdevice.cpp:71
QOhosPrintDevice::defaultColorMode
QPrint::ColorMode defaultColorMode() const override
Definition
qohosprintdevice.cpp:179
QOhosPrintDevice::defaultPageSize
QPageSize defaultPageSize() const override
Definition
qohosprintdevice.cpp:144
QOhosPrintDevice::QOhosPrintDevice
QOhosPrintDevice(const QString &id)
Definition
qohosprintdevice.cpp:76
QOhosPrintDevice::defaultResolution
int defaultResolution() const override
Definition
qohosprintdevice.cpp:192
QOhosPrintDevice::isValid
bool isValid() const override
Definition
qohosprintdevice.cpp:102
QOhosPrintDevice::state
QPrint::DeviceState state() const override
Definition
qohosprintdevice.cpp:121
QOhosPrintDevice::defaultDuplexMode
QPrint::DuplexMode defaultDuplexMode() const override
Definition
qohosprintdevice.cpp:166
QOhosPrintDevice::loadColorModes
void loadColorModes() const override
Definition
qohosprintdevice.cpp:280
QOhosPrintDevice::loadPageSizes
void loadPageSizes() const override
Definition
qohosprintdevice.cpp:229
QOhosPrintDevice::name
QString name() const override
Definition
qohosprintdevice.cpp:89
QOhosPrintDevice::~QOhosPrintDevice
virtual ~QOhosPrintDevice()
QOhosPrintDevice::isDefault
bool isDefault() const override
Definition
qohosprintdevice.cpp:110
QOhosNativePrint
Definition
qohosnativeprint.cpp:14
QOhosNativePrint::queryPrinterInfo
bool queryPrinterInfo(const QString &printerId, PrinterInfo &printerInfo)
Definition
qohosnativeprint.cpp:205
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QT_BEGIN_NAMESPACE::printerAliasFromDetailedInfo
QString printerAliasFromDetailedInfo(const QString &detailedInfo)
Definition
qohosprintdevice.cpp:46
QT_BEGIN_NAMESPACE::convertOhosToQtColorMode
QPrint::ColorMode convertOhosToQtColorMode(Print_ColorMode nativeColorMode)
Definition
qohosprintdevice.cpp:33
QT_BEGIN_NAMESPACE::convertOhosToQtDuplexMode
QPrint::DuplexMode convertOhosToQtDuplexMode(Print_DuplexMode nativeDuplexMode)
Definition
qohosprintdevice.cpp:21
__has_include
#define __has_include(x)
Definition
qcompilerdetection.h:459
QOhosNativePrint::PrinterInfo
Definition
qohosnativeprint.h:66
QOhosNativePrint::PrinterInfo::isDefault
bool isDefault
Definition
qohosnativeprint.h:70
qtbase
src
plugins
printsupport
ohos
qohosprintdevice.cpp
Generated on
for Qt by
1.18.0