1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #include "QRCodeContext.hxx"
12 #include <com/sun/star/beans/XPropertySet.hpp>
13 #include <com/sun/star/embed/XStorage.hpp>
14 #include <com/sun/star/frame/XStorable.hpp>
15 #include <com/sun/star/graphic/XGraphic.hpp>
16 #include <com/sun/star/drawing/QRCode.hpp>
17 #include <com/sun/star/drawing/QRCodeErrorCorrection.hpp>
18 #include <com/sun/star/xml/sax/XAttributeList.hpp>
20 #include <xmloff/xmltoken.hxx>
21 #include <xmloff/xmlimp.hxx>
22 #include <xmloff/xmlnamespace.hxx>
23 #include <xmloff/namespacemap.hxx>
24 #include <sax/tools/converter.hxx>
26 #include <rtl/ustring.hxx>
29 using namespace css::xml::sax
;
30 using namespace css::uno
;
31 using namespace css::drawing
;
32 using namespace css::embed
;
33 using namespace css::frame
;
34 using namespace css::io
;
35 using namespace css::graphic
;
36 using namespace xmloff::token
;
38 QRCodeContext::QRCodeContext(SvXMLImport
& rImport
, sal_uInt16 nPrfx
, const OUString
& rLocalName
,
39 const Reference
<XAttributeList
>& xAttrList
,
40 const Reference
<XShape
>& rxShape
)
41 : SvXMLImportContext(rImport
, nPrfx
, rLocalName
)
43 Reference
<beans::XPropertySet
> xPropSet(rxShape
, UNO_QUERY_THROW
);
45 css::drawing::QRCode aQRCode
;
46 const sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
48 for (sal_Int16 i
= 0; i
< nAttrCount
; i
++)
50 OUString sAttrName
= xAttrList
->getNameByIndex(i
);
52 sal_uInt16 nPrefix
= GetImport().GetNamespaceMap().GetKeyByAttrName(sAttrName
, &aLocalName
);
53 OUString sValue
= xAttrList
->getValueByIndex(i
);
57 case XML_NAMESPACE_LO_EXT
:
58 if (IsXMLToken(aLocalName
, XML_QRCODE_ERROR_CORRECTION
))
60 OUString aErrorCorrValue
= sValue
;
62 if (aErrorCorrValue
== "low")
63 aQRCode
.ErrorCorrection
= css::drawing::QRCodeErrorCorrection::LOW
;
64 else if (aErrorCorrValue
== "medium")
65 aQRCode
.ErrorCorrection
= css::drawing::QRCodeErrorCorrection::MEDIUM
;
66 else if (aErrorCorrValue
== "quartile")
67 aQRCode
.ErrorCorrection
= css::drawing::QRCodeErrorCorrection::QUARTILE
;
69 aQRCode
.ErrorCorrection
= css::drawing::QRCodeErrorCorrection::HIGH
;
72 if (IsXMLToken(aLocalName
, XML_QRCODE_BORDER
))
75 if (sax::Converter::convertNumber(nAttrVal
, sValue
, 0))
76 aQRCode
.Border
= nAttrVal
;
80 case XML_NAMESPACE_OFFICE
:
81 if (IsXMLToken(aLocalName
, XML_STRING_VALUE
))
83 aQRCode
.Payload
= sValue
;
87 xPropSet
->setPropertyValue("QRCodeProperties", Any(aQRCode
));
90 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */