// 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 _FXFA_FORMFILLER_BARCODE_IMP_H
#define _FXFA_FORMFILLER_BARCODE_IMP_H
class CXFA_FFTextEdit;
class CXFA_FFBarcode : public CXFA_FFTextEdit {
 public:
  CXFA_FFBarcode(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
  virtual ~CXFA_FFBarcode();
  virtual FX_BOOL LoadWidget();
  virtual void RenderWidget(CFX_Graphics* pGS,
                            CFX_Matrix* pMatrix = NULL,
                            FX_DWORD dwStatus = 0,
                            int32_t iRotate = 0);
  virtual void UpdateWidgetProperty();
  virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
  virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
};
enum XFA_BARCODETYPEENUM {
  XFA_BARCODETYPE_aztec,
  XFA_BARCODETYPE_codabar,
  XFA_BARCODETYPE_code11,
  XFA_BARCODETYPE_code128,
  XFA_BARCODETYPE_code128A,
  XFA_BARCODETYPE_code128B,
  XFA_BARCODETYPE_code128C,
  XFA_BARCODETYPE_code128SSCC,
  XFA_BARCODETYPE_code2Of5Industrial,
  XFA_BARCODETYPE_code2Of5Interleaved,
  XFA_BARCODETYPE_code2Of5Matrix,
  XFA_BARCODETYPE_code2Of5Standard,
  XFA_BARCODETYPE_code3Of9,
  XFA_BARCODETYPE_code3Of9extended,
  XFA_BARCODETYPE_code49,
  XFA_BARCODETYPE_code93,
  XFA_BARCODETYPE_dataMatrix,
  XFA_BARCODETYPE_ean13,
  XFA_BARCODETYPE_ean13add2,
  XFA_BARCODETYPE_ean13add5,
  XFA_BARCODETYPE_ean13pwcd,
  XFA_BARCODETYPE_ean8,
  XFA_BARCODETYPE_ean8add2,
  XFA_BARCODETYPE_ean8add5,
  XFA_BARCODETYPE_fim,
  XFA_BARCODETYPE_logmars,
  XFA_BARCODETYPE_maxicode,
  XFA_BARCODETYPE_msi,
  XFA_BARCODETYPE_pdf417,
  XFA_BARCODETYPE_pdf417macro,
  XFA_BARCODETYPE_plessey,
  XFA_BARCODETYPE_postAUSCust2,
  XFA_BARCODETYPE_postAUSCust3,
  XFA_BARCODETYPE_postAUSReplyPaid,
  XFA_BARCODETYPE_postAUSStandard,
  XFA_BARCODETYPE_postUKRM4SCC,
  XFA_BARCODETYPE_postUS5Zip,
  XFA_BARCODETYPE_postUSDPBC,
  XFA_BARCODETYPE_postUSIMB,
  XFA_BARCODETYPE_postUSStandard,
  XFA_BARCODETYPE_QRCode,
  XFA_BARCODETYPE_rfid,
  XFA_BARCODETYPE_rss14,
  XFA_BARCODETYPE_rss14Expanded,
  XFA_BARCODETYPE_rss14Limited,
  XFA_BARCODETYPE_rss14Stacked,
  XFA_BARCODETYPE_rss14StackedOmni,
  XFA_BARCODETYPE_rss14Truncated,
  XFA_BARCODETYPE_telepen,
  XFA_BARCODETYPE_ucc128,
  XFA_BARCODETYPE_ucc128random,
  XFA_BARCODETYPE_ucc128sscc,
  XFA_BARCODETYPE_upcA,
  XFA_BARCODETYPE_upcAadd2,
  XFA_BARCODETYPE_upcAadd5,
  XFA_BARCODETYPE_upcApwcd,
  XFA_BARCODETYPE_upcE,
  XFA_BARCODETYPE_upcEadd2,
  XFA_BARCODETYPE_upcEadd5,
  XFA_BARCODETYPE_upcean2,
  XFA_BARCODETYPE_upcean5,
  XFA_BARCODETYPE_upsMaxicode
};
struct XFA_BARCODETYPEENUMINFO {
  uint32_t uHash;
  const FX_WCHAR* pName;
  XFA_BARCODETYPEENUM eName;
  BC_TYPE eBCType;
};
typedef XFA_BARCODETYPEENUMINFO const* XFA_LPCBARCODETYPEENUMINFO;
extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[];
#endif
