Remove enum FWL_BCDATTRIBUTE

Optional<T> is a simpler (but somewhat less space efficient) mechanism
than a bitmask for keeping track of which fields have been set.

Change-Id: Idd33348983e3f1b0d2d98dc0d7d848f6381c9c97
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84031
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index 65d7f18..ad0a04d 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -91,58 +91,47 @@
 }
 
 void CFWL_Barcode::SetCharEncoding(BC_CHAR_ENCODING encoding) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_CHARENCODING;
   m_eCharEncoding = encoding;
 }
 
 void CFWL_Barcode::SetModuleHeight(int32_t height) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_MODULEHEIGHT;
   m_nModuleHeight = height;
 }
 
 void CFWL_Barcode::SetModuleWidth(int32_t width) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_MODULEWIDTH;
   m_nModuleWidth = width;
 }
 
 void CFWL_Barcode::SetDataLength(int32_t dataLength) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_DATALENGTH;
   m_nDataLength = dataLength;
   SetLimit(dataLength);
 }
 
 void CFWL_Barcode::SetCalChecksum(bool calChecksum) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_CALCHECKSUM;
   m_bCalChecksum = calChecksum;
 }
 
 void CFWL_Barcode::SetPrintChecksum(bool printChecksum) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_PRINTCHECKSUM;
   m_bPrintChecksum = printChecksum;
 }
 
 void CFWL_Barcode::SetTextLocation(BC_TEXT_LOC location) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_TEXTLOCATION;
   m_eTextLocation = location;
 }
 
 void CFWL_Barcode::SetWideNarrowRatio(int8_t ratio) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_WIDENARROWRATIO;
   m_nWideNarrowRatio = ratio;
 }
 
 void CFWL_Barcode::SetStartChar(char startChar) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_STARTCHAR;
   m_cStartChar = startChar;
 }
 
 void CFWL_Barcode::SetEndChar(char endChar) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_ENDCHAR;
   m_cEndChar = endChar;
 }
 
 void CFWL_Barcode::SetErrorCorrectionLevel(int32_t ecLevel) {
-  m_dwAttributeMask |= FWL_BCDATTRIBUTE_ECLEVEL;
   m_nECLevel = ecLevel;
 }
 
@@ -165,28 +154,28 @@
   m_pBarcodeEngine->SetFontColor(pTheme->GetTextColor(part));
   m_pBarcodeEngine->SetHeight(int32_t(GetRTClient().height));
   m_pBarcodeEngine->SetWidth(int32_t(GetRTClient().width));
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_CHARENCODING)
-    m_pBarcodeEngine->SetCharEncoding(m_eCharEncoding);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_MODULEHEIGHT)
-    m_pBarcodeEngine->SetModuleHeight(m_nModuleHeight);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_MODULEWIDTH)
-    m_pBarcodeEngine->SetModuleWidth(m_nModuleWidth);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_DATALENGTH)
-    m_pBarcodeEngine->SetDataLength(m_nDataLength);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_CALCHECKSUM)
-    m_pBarcodeEngine->SetCalChecksum(m_bCalChecksum);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_PRINTCHECKSUM)
-    m_pBarcodeEngine->SetPrintChecksum(m_bPrintChecksum);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_TEXTLOCATION)
-    m_pBarcodeEngine->SetTextLocation(m_eTextLocation);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_WIDENARROWRATIO)
-    m_pBarcodeEngine->SetWideNarrowRatio(m_nWideNarrowRatio);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_STARTCHAR)
-    m_pBarcodeEngine->SetStartChar(m_cStartChar);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_ENDCHAR)
-    m_pBarcodeEngine->SetEndChar(m_cEndChar);
-  if (m_dwAttributeMask & FWL_BCDATTRIBUTE_ECLEVEL)
-    m_pBarcodeEngine->SetErrorCorrectionLevel(m_nECLevel);
+  if (m_eCharEncoding.has_value())
+    m_pBarcodeEngine->SetCharEncoding(m_eCharEncoding.value());
+  if (m_nModuleHeight.has_value())
+    m_pBarcodeEngine->SetModuleHeight(m_nModuleHeight.value());
+  if (m_nModuleWidth.has_value())
+    m_pBarcodeEngine->SetModuleWidth(m_nModuleWidth.value());
+  if (m_nDataLength.has_value())
+    m_pBarcodeEngine->SetDataLength(m_nDataLength.value());
+  if (m_bCalChecksum.value())
+    m_pBarcodeEngine->SetCalChecksum(m_bCalChecksum.value());
+  if (m_bPrintChecksum.has_value())
+    m_pBarcodeEngine->SetPrintChecksum(m_bPrintChecksum.value());
+  if (m_eTextLocation.has_value())
+    m_pBarcodeEngine->SetTextLocation(m_eTextLocation.value());
+  if (m_nWideNarrowRatio.has_value())
+    m_pBarcodeEngine->SetWideNarrowRatio(m_nWideNarrowRatio.value());
+  if (m_cStartChar.has_value())
+    m_pBarcodeEngine->SetStartChar(m_cStartChar.value());
+  if (m_cEndChar.has_value())
+    m_pBarcodeEngine->SetEndChar(m_cEndChar.value());
+  if (m_nECLevel.has_value())
+    m_pBarcodeEngine->SetErrorCorrectionLevel(m_nECLevel.value());
 
   m_eStatus = m_pBarcodeEngine->Encode(GetText().AsStringView())
                   ? Status::kEncodeSuccess
diff --git a/xfa/fwl/cfwl_barcode.h b/xfa/fwl/cfwl_barcode.h
index 31aca8e..846c8ae 100644
--- a/xfa/fwl/cfwl_barcode.h
+++ b/xfa/fwl/cfwl_barcode.h
@@ -7,28 +7,16 @@
 #ifndef XFA_FWL_CFWL_BARCODE_H_
 #define XFA_FWL_CFWL_BARCODE_H_
 
+#include <stdint.h>
+
 #include <memory>
 
 #include "fxbarcode/BC_Library.h"
+#include "third_party/base/optional.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;
@@ -73,19 +61,18 @@
   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;
+  Optional<BC_TEXT_LOC> m_eTextLocation;
+  Optional<BC_CHAR_ENCODING> m_eCharEncoding;
+  Optional<bool> m_bCalChecksum;
+  Optional<bool> m_bPrintChecksum;
+  Optional<char> m_cStartChar;
+  Optional<char> m_cEndChar;
+  Optional<int8_t> m_nWideNarrowRatio;
+  Optional<int32_t> m_nModuleHeight;
+  Optional<int32_t> m_nModuleWidth;
+  Optional<int32_t> m_nDataLength;
+  Optional<int32_t> m_nECLevel;
   std::unique_ptr<CFX_Barcode> m_pBarcodeEngine;
 };