7#include <QtCore/private/qohoslogger_p.h>
8#include <QtCore/qjsondocument.h>
9#include <QtCore/qjsonobject.h>
11#include <BasicServicesKit/ohprint.h>
13#include <ohprint/print_base.h>
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;
35 switch (nativeColorMode) {
36 case COLOR_MODE_MONOCHROME:
37 return QPrint::GrayScale;
38 case COLOR_MODE_COLOR:
42 return QPrint::GrayScale;
48 if (detailedInfo.isEmpty())
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();
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";
66 return alias.toString();
81 m_location = printerInfo.location;
82 m_makeAndModel = printerInfo.makeAndModel;
83 m_supportsMultipleCopies = printerInfo.capabilities.supportedCopies > 1;
92 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
93 qOhosWarning(QtForOhos) <<
"Failed to get printerInfo for"
98 const QString alias = printerAliasFromDetailedInfo(printerInfo.detailedInfo);
99 return alias.isEmpty() ? printerInfo.name : alias;
104 QStringList printerIdList;
105 if (!QOhosNativePrint::queryPrinterIdList(printerIdList))
107 return printerIdList.contains(m_id);
113 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
114 qOhosCritical(QtForOhos) <<
"QOhosPrintDevice::isDefault: Failed to get printerInfo";
124 return QPrint::Error;
127 if (!QOhosNativePrint::queryPrinterInfo(m_id, pi)) {
128 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
129 return QPrint::Error;
137 return QPrint::Active;
139 case PRINTER_UNAVAILABLE:
140 return QPrint::Error;
146 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultPageSize");
150 for (
const auto &pageSize : supportedPageSizes()) {
151 if (pageSize.key() == printerInfo.defaultValues.pageSizeId)
161 QString isoA4OhosId = QString::fromLocal8Bit(
"ISO_A4");
162 QString isoA4OhosName = QString::fromLocal8Bit(
"iso_a4_210x297mm");
163 return createPageSize(isoA4OhosId, QPageSize(QPageSize::A4).sizePoints(), isoA4OhosName);
168 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultDuplexMode");
171 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
172 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
173 return QPrint::DuplexNone;
176 return convertOhosToQtDuplexMode(printerInfo.defaultValues.duplexMode);
181 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultColorMode");
184 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
185 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
186 return QPrint::GrayScale;
189 return convertOhosToQtColorMode(printerInfo.defaultValues.colorMode);
194 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultResolution");
197 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
198 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
202 return printerInfo.defaultValues.resolution.verticalDpi;
207 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::availablePrintDeviceIds");
209 QStringList printerIdList;
210 if (!QOhosNativePrint::queryPrinterIdList(printerIdList))
213 return printerIdList;
218 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::defaultPrintDeviceId");
220 for (
const auto &printerId : availablePrintDeviceIds()) {
221 QOhosNativePrint::PrinterInfo printerInfo;
222 if (QOhosNativePrint::queryPrinterInfo(printerId, printerInfo) && printerInfo.isDefault)
231 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadPageSizes");
234 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
235 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
239 qOhosDebug(QtForOhos) <<
"Available page sizes:";
242 for (
const auto &nativePageSize : printerInfo.capabilities.supportedPageSizes) {
244 QOhosNativePrint::convertPixelsPerThousandDpiToPoints(nativePageSize.width),
245 QOhosNativePrint::convertPixelsPerThousandDpiToPoints(nativePageSize.height));
246 QPageSize pageSize = createPageSize(nativePageSize.id, size, nativePageSize.name);
248 qOhosDebug(QtForOhos) <<
"\t*" << pageSize;
250 m_pageSizes.append(pageSize);
253 m_havePageSizes =
true;
258 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadDuplexModes");
261 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
262 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
266 qOhosDebug(QtForOhos) <<
"Available duplex modes:";
268 m_duplexModes.clear();
269 for (
auto nativeDuplexMode : printerInfo.capabilities.supportedDuplexModes) {
270 auto duplexMode = convertOhosToQtDuplexMode(nativeDuplexMode);
272 qOhosDebug(QtForOhos) <<
"\t*" << duplexMode;
274 m_duplexModes.append(duplexMode);
277 m_haveDuplexModes =
true;
282 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadColorModes");
285 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
286 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
290 qOhosDebug(QtForOhos) <<
"Printer colorModes:";
292 m_colorModes.clear();
293 for (
auto nativeColorMode : printerInfo.capabilities.supportedColorModes) {
294 auto colorMode = convertOhosToQtColorMode(nativeColorMode);
296 qOhosDebug(QtForOhos) <<
"\t*" << colorMode;
298 m_colorModes.append(colorMode);
301 m_haveColorModes =
true;
306 auto __dbg = make_QCScopedDebug(
"QOhosPrintDevice::loadResolutions");
309 if (!QOhosNativePrint::queryPrinterInfo(m_id, printerInfo)) {
310 qOhosCritical(QtForOhos) <<
"Failed to get printerInfo";
314 qOhosDebug(QtForOhos) <<
"Printer resolutions:";
316 m_resolutions.clear();
317 for (
const auto &nativeResolution : printerInfo.capabilities.supportedResolutions) {
318 auto resolution = nativeResolution.verticalDpi;
320 qOhosDebug(QtForOhos) <<
"\t*" << resolution;
322 m_resolutions.append(resolution);
325 m_haveResolutions =
true;
void loadDuplexModes() const override
void loadResolutions() const override
QPrint::ColorMode defaultColorMode() const override
QPageSize defaultPageSize() const override
QOhosPrintDevice(const QString &id)
int defaultResolution() const override
bool isValid() const override
QPrint::DeviceState state() const override
QPrint::DuplexMode defaultDuplexMode() const override
void loadColorModes() const override
void loadPageSizes() const override
QString name() const override
virtual ~QOhosPrintDevice()
bool isDefault() const override
bool queryPrinterInfo(const QString &printerId, PrinterInfo &printerInfo)
Combined button and popup list for selecting options.
QString printerAliasFromDetailedInfo(const QString &detailedInfo)
QPrint::ColorMode convertOhosToQtColorMode(Print_ColorMode nativeColorMode)
QPrint::DuplexMode convertOhosToQtDuplexMode(Print_DuplexMode nativeDuplexMode)