diff options
author | homeboy445 <akshitsan13@gmail.com> | 2021-04-12 20:31:05 +0530 |
---|---|---|
committer | Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org> | 2021-10-29 13:46:12 +0200 |
commit | d37a44a9ebdafec1435f98194417a1d8cc8208b5 (patch) | |
tree | de021550906549b9ae78d95cef8329bc6afc7a17 /cui | |
parent | 31315fea28ad327f36c0e593156bf808c7af3467 (diff) |
tdf#141193 Added support for bar codes in qrcode dialog box[API Change].
Change-Id: I6b79ece1d5419ef92b76755d3bd921a64d6e38fe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113989
Tested-by: Jenkins
Tested-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/dialogs/QrCodeGenDialog.cxx | 68 | ||||
-rw-r--r-- | cui/source/inc/QrCodeGenDialog.hxx | 1 | ||||
-rw-r--r-- | cui/uiconfig/ui/qrcodegen.ui | 43 |
3 files changed, 83 insertions, 29 deletions
diff --git a/cui/source/dialogs/QrCodeGenDialog.cxx b/cui/source/dialogs/QrCodeGenDialog.cxx index d2a0f42878ff..271d14999cbf 100644 --- a/cui/source/dialogs/QrCodeGenDialog.cxx +++ b/cui/source/dialogs/QrCodeGenDialog.cxx @@ -43,8 +43,8 @@ #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/graphic/GraphicProvider.hpp> #include <com/sun/star/graphic/XGraphic.hpp> -#include <com/sun/star/drawing/QRCode.hpp> -#include <com/sun/star/drawing/QRCodeErrorCorrection.hpp> +#include <com/sun/star/drawing/BarCode.hpp> +#include <com/sun/star/drawing/BarCodeErrorCorrection.hpp> #include <com/sun/star/graphic/XGraphicProvider.hpp> #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> @@ -100,29 +100,40 @@ OString ConvertToSVGFormat(const ZXing::BitMatrix& bitmatrix) return sb.toString(); } -OString GenerateQRCode(std::u16string_view aQRText, tools::Long aQRECC, int aQRBorder) +std::string GetBarCodeType(const int& type) +{ + switch (type) + { + case 1: + return "CODE_128"; + default: + return "QR_CODE"; + } +} + +OString GenerateQRCode(std::u16string_view aQRText, tools::Long aQRECC, int aQRBorder, int aQRType) { // Associated ZXing error correction levels (0-8) to our constants arbitrarily. int bqrEcc = 1; switch (aQRECC) { - case css::drawing::QRCodeErrorCorrection::LOW: + case css::drawing::BarCodeErrorCorrection::LOW: { bqrEcc = 1; break; } - case css::drawing::QRCodeErrorCorrection::MEDIUM: + case css::drawing::BarCodeErrorCorrection::MEDIUM: { bqrEcc = 3; break; } - case css::drawing::QRCodeErrorCorrection::QUARTILE: + case css::drawing::BarCodeErrorCorrection::QUARTILE: { bqrEcc = 5; break; } - case css::drawing::QRCodeErrorCorrection::HIGH: + case css::drawing::BarCodeErrorCorrection::HIGH: { bqrEcc = 7; break; @@ -131,7 +142,7 @@ OString GenerateQRCode(std::u16string_view aQRText, tools::Long aQRECC, int aQRB OString o = OUStringToOString(aQRText, RTL_TEXTENCODING_UTF8); std::string QRText(o.getStr(), o.getLength()); - ZXing::BarcodeFormat format = ZXing::BarcodeFormatFromString("QR_CODE"); + ZXing::BarcodeFormat format = ZXing::BarcodeFormatFromString(GetBarCodeType(aQRType)); auto writer = ZXing::MultiFormatWriter(format).setMargin(aQRBorder).setEccLevel(bqrEcc); writer.setEncoding(ZXing::CharacterSet::UTF8); ZXing::BitMatrix bitmatrix = writer.encode(ZXing::TextUtfEncoding::FromUtf8(QRText), 0, 0); @@ -151,6 +162,7 @@ QrCodeGenDialog::QrCodeGenDialog(weld::Widget* pParent, Reference<XModel> xModel m_xBuilder->weld_radio_button("button_quartile"), m_xBuilder->weld_radio_button("button_high") } , m_xSpinBorder(m_xBuilder->weld_spin_button("edit_margin")) + , m_xComboType(m_xBuilder->weld_combo_box("choose_type")) #if ENABLE_ZXING , mpParent(pParent) #endif @@ -173,15 +185,17 @@ QrCodeGenDialog::QrCodeGenDialog(weld::Widget* pParent, Reference<XModel> xModel Reference<XPropertySet> xProps(xIndexAccess->getByIndex(0), UNO_QUERY_THROW); // Read properties from selected QR Code - css::drawing::QRCode aQRCode; - xProps->getPropertyValue("QRCodeProperties") >>= aQRCode; + css::drawing::BarCode aBarCode; + xProps->getPropertyValue("BarCodeProperties") >>= aBarCode; - m_xEdittext->set_text(aQRCode.Payload); + m_xEdittext->set_text(aBarCode.Payload); //Get Error Correction Constant from selected QR Code - GetErrorCorrection(aQRCode.ErrorCorrection); + GetErrorCorrection(aBarCode.ErrorCorrection); + + m_xSpinBorder->set_value(aBarCode.Border); - m_xSpinBorder->set_value(aQRCode.Border); + m_xComboType->set_active(aBarCode.Type); // Mark this as existing shape m_xExistingShapeProperties = xProps; @@ -221,8 +235,9 @@ short QrCodeGenDialog::run() void QrCodeGenDialog::Apply() { #if ENABLE_ZXING - css::drawing::QRCode aQRCode; - aQRCode.Payload = m_xEdittext->get_text(); + css::drawing::BarCode aBarCode; + aBarCode.Payload = m_xEdittext->get_text(); + aBarCode.Type = m_xComboType->get_active(); bool bLowECCActive(m_xECC[0]->get_active()); bool bMediumECCActive(m_xECC[1]->get_active()); @@ -230,25 +245,26 @@ void QrCodeGenDialog::Apply() if (bLowECCActive) { - aQRCode.ErrorCorrection = css::drawing::QRCodeErrorCorrection::LOW; + aBarCode.ErrorCorrection = css::drawing::BarCodeErrorCorrection::LOW; } else if (bMediumECCActive) { - aQRCode.ErrorCorrection = css::drawing::QRCodeErrorCorrection::MEDIUM; + aBarCode.ErrorCorrection = css::drawing::BarCodeErrorCorrection::MEDIUM; } else if (bQuartileECCActive) { - aQRCode.ErrorCorrection = css::drawing::QRCodeErrorCorrection::QUARTILE; + aBarCode.ErrorCorrection = css::drawing::BarCodeErrorCorrection::QUARTILE; } else { - aQRCode.ErrorCorrection = css::drawing::QRCodeErrorCorrection::HIGH; + aBarCode.ErrorCorrection = css::drawing::BarCodeErrorCorrection::HIGH; } - aQRCode.Border = m_xSpinBorder->get_value(); + aBarCode.Border = m_xSpinBorder->get_value(); // Read svg and replace placeholder texts - OString aSvgImage = GenerateQRCode(aQRCode.Payload, aQRCode.ErrorCorrection, aQRCode.Border); + OString aSvgImage = GenerateQRCode(aBarCode.Payload, aBarCode.ErrorCorrection, aBarCode.Border, + aBarCode.Type); // Insert/Update graphic SvMemoryStream aSvgStream(4096, 4096); @@ -273,7 +289,7 @@ void QrCodeGenDialog::Apply() xShapeProps->setPropertyValue("Graphic", Any(xGraphic)); // Set QRCode properties - xShapeProps->setPropertyValue("QRCodeProperties", Any(aQRCode)); + xShapeProps->setPropertyValue("BarCodeProperties", Any(aBarCode)); if (bIsExistingQRCode) return; @@ -346,22 +362,22 @@ void QrCodeGenDialog::GetErrorCorrection(tools::Long ErrorCorrection) { switch (ErrorCorrection) { - case css::drawing::QRCodeErrorCorrection::LOW: + case css::drawing::BarCodeErrorCorrection::LOW: { m_xECC[0]->set_active(true); break; } - case css::drawing::QRCodeErrorCorrection::MEDIUM: + case css::drawing::BarCodeErrorCorrection::MEDIUM: { m_xECC[1]->set_active(true); break; } - case css::drawing::QRCodeErrorCorrection::QUARTILE: + case css::drawing::BarCodeErrorCorrection::QUARTILE: { m_xECC[2]->set_active(true); break; } - case css::drawing::QRCodeErrorCorrection::HIGH: + case css::drawing::BarCodeErrorCorrection::HIGH: { m_xECC[3]->set_active(true); break; diff --git a/cui/source/inc/QrCodeGenDialog.hxx b/cui/source/inc/QrCodeGenDialog.hxx index 6935c3045869..165bc6d75f4a 100644 --- a/cui/source/inc/QrCodeGenDialog.hxx +++ b/cui/source/inc/QrCodeGenDialog.hxx @@ -33,6 +33,7 @@ private: std::unique_ptr<weld::Entry> m_xEdittext; std::unique_ptr<weld::RadioButton> m_xECC[4]; std::unique_ptr<weld::SpinButton> m_xSpinBorder; + std::unique_ptr<weld::ComboBox> m_xComboType; #if ENABLE_ZXING weld::Widget* mpParent; #endif diff --git a/cui/uiconfig/ui/qrcodegen.ui b/cui/uiconfig/ui/qrcodegen.ui index 51a71f7c39d7..8b1734c5ae1a 100644 --- a/cui/uiconfig/ui/qrcodegen.ui +++ b/cui/uiconfig/ui/qrcodegen.ui @@ -9,9 +9,9 @@ <property name="page-increment">10</property> </object> <object class="GtkDialog" id="QrCodeGenDialog"> - <property name="can-focus">False</property> - <property name="border-width">6</property> - <property name="title" translatable="yes" context="qrcodegen|QrCodeGenDialog">QR Code Generator</property> + <property name="can_focus">False</property> + <property name="border_width">6</property> + <property name="title" translatable="yes" context="qrcodegen|QrCodeGenDialog">QR and Barcode</property> <property name="modal">True</property> <property name="default-width">0</property> <property name="default-height">0</property> @@ -155,6 +155,43 @@ </packing> </child> <child> + <object class="GtkLabel" id="label_type"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes" context="qrcodegen|label_type" comments="Select type">Type:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">choose_type</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="choose_type"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="active">0</property> + <items> + <item translatable="yes" context="qrcodegen|QrCode">QR Code</item> + <item translatable="yes" context="qrcodegen|BarCode">Bar Code</item> + </items> + <child internal-child="accessible"> + <object class="AtkObject" id="choose_type-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="type">The type which is to be generated.</property> + </object> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + <property name="width">2</property> + </packing> + </child> + <child> <!-- n-columns=1 n-rows=1 --> <object class="GtkGrid"> <property name="visible">True</property> |