| // Copyright 2014 PDFium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 
 |  | 
 | #ifndef XFA_FWL_CFWL_BARCODE_H_ | 
 | #define XFA_FWL_CFWL_BARCODE_H_ | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "fxbarcode/BC_Library.h" | 
 | #include "xfa/fwl/cfwl_edit.h" | 
 |  | 
 | class CFX_Barcode; | 
 |  | 
 | enum FWL_BCDAttribute { | 
 |   FWL_BCDATTRIBUTE_NONE = 0, | 
 |   FWL_BCDATTRIBUTE_CHARENCODING = 1 << 0, | 
 |   FWL_BCDATTRIBUTE_MODULEHEIGHT = 1 << 1, | 
 |   FWL_BCDATTRIBUTE_MODULEWIDTH = 1 << 2, | 
 |   FWL_BCDATTRIBUTE_DATALENGTH = 1 << 3, | 
 |   FWL_BCDATTRIBUTE_CALCHECKSUM = 1 << 4, | 
 |   FWL_BCDATTRIBUTE_PRINTCHECKSUM = 1 << 5, | 
 |   FWL_BCDATTRIBUTE_TEXTLOCATION = 1 << 6, | 
 |   FWL_BCDATTRIBUTE_WIDENARROWRATIO = 1 << 7, | 
 |   FWL_BCDATTRIBUTE_STARTCHAR = 1 << 8, | 
 |   FWL_BCDATTRIBUTE_ENDCHAR = 1 << 9, | 
 |   FWL_BCDATTRIBUTE_ECLEVEL = 1 << 10, | 
 | }; | 
 |  | 
 | class CFWL_Barcode final : public CFWL_Edit { | 
 |  public: | 
 |   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; | 
 |   ~CFWL_Barcode() override; | 
 |  | 
 |   // CFWL_Widget | 
 |   FWL_Type GetClassID() const override; | 
 |   void Update() override; | 
 |   void DrawWidget(CFGAS_GEGraphics* pGraphics, | 
 |                   const CFX_Matrix& matrix) override; | 
 |   void OnProcessEvent(CFWL_Event* pEvent) override; | 
 |  | 
 |   // CFWL_Edit | 
 |   void SetText(const WideString& wsText) override; | 
 |   void SetTextSkipNotify(const WideString& wsText) override; | 
 |  | 
 |   void SetType(BC_TYPE type); | 
 |   bool IsProtectedType() const; | 
 |  | 
 |   void SetCharEncoding(BC_CHAR_ENCODING encoding); | 
 |   void SetModuleHeight(int32_t height); | 
 |   void SetModuleWidth(int32_t width); | 
 |   void SetDataLength(int32_t dataLength); | 
 |   void SetCalChecksum(bool calChecksum); | 
 |   void SetPrintChecksum(bool printChecksum); | 
 |   void SetTextLocation(BC_TEXT_LOC location); | 
 |   void SetWideNarrowRatio(int8_t ratio); | 
 |   void SetStartChar(char startChar); | 
 |   void SetEndChar(char endChar); | 
 |   void SetErrorCorrectionLevel(int32_t ecLevel); | 
 |  | 
 |  private: | 
 |   enum class Status : uint8_t { | 
 |     kNormal, | 
 |     kNeedUpdate, | 
 |     kEncodeSuccess, | 
 |   }; | 
 |  | 
 |   explicit CFWL_Barcode(CFWL_App* pApp); | 
 |  | 
 |   void GenerateBarcodeImageCache(); | 
 |   void CreateBarcodeEngine(); | 
 |  | 
 |   BC_TYPE m_type = BC_UNKNOWN; | 
 |   BC_CHAR_ENCODING m_eCharEncoding = CHAR_ENCODING_UTF8; | 
 |   BC_TEXT_LOC m_eTextLocation = BC_TEXT_LOC_NONE; | 
 |   Status m_eStatus = Status::kNormal; | 
 |   bool m_bCalChecksum = false; | 
 |   bool m_bPrintChecksum = false; | 
 |   char m_cStartChar = 0; | 
 |   char m_cEndChar = 0; | 
 |   int8_t m_nWideNarrowRatio = 1; | 
 |   int32_t m_nModuleHeight = -1; | 
 |   int32_t m_nModuleWidth = -1; | 
 |   int32_t m_nDataLength = 0; | 
 |   int32_t m_nECLevel = 0; | 
 |   uint32_t m_dwAttributeMask = 0; | 
 |   std::unique_ptr<CFX_Barcode> m_pBarcodeEngine; | 
 | }; | 
 |  | 
 | #endif  // XFA_FWL_CFWL_BARCODE_H_ |