| Index: fpdfsdk/fsdk_baseform.cpp
|
| diff --git a/fpdfsdk/fsdk_baseform.cpp b/fpdfsdk/fsdk_baseform.cpp
|
| index f22111ce73493aa14bf4f0e0a81ac3fe7ea54e95..be92b4a7e2c4f5be39dc537825beb4c4befc4fb6 100644
|
| --- a/fpdfsdk/fsdk_baseform.cpp
|
| +++ b/fpdfsdk/fsdk_baseform.cpp
|
| @@ -27,6 +27,7 @@
|
| #ifdef PDF_ENABLE_XFA
|
| #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
|
| #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
|
| +#include "xfa/include/fxfa/xfa_ffwidget.h"
|
| #endif // PDF_ENABLE_XFA
|
|
|
| #define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01)
|
| @@ -189,14 +190,14 @@ FX_BOOL CPDFSDK_Widget::HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT) {
|
| if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
|
| GetFieldType() == FIELDTYPE_RADIOBUTTON) {
|
| if (CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget()) {
|
| - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
|
| + CXFA_WidgetAcc* pAcc = hGroupWidget->GetDataAcc();
|
| if (pXFAWidgetHandler->HasEvent(pAcc, eEventType))
|
| return TRUE;
|
| }
|
| }
|
|
|
| {
|
| - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
|
| + CXFA_WidgetAcc* pAcc = hWidget->GetDataAcc();
|
| return pXFAWidgetHandler->HasEvent(pAcc, eEventType);
|
| }
|
| }
|
| @@ -236,7 +237,7 @@ FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
|
| if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
|
| GetFieldType() == FIELDTYPE_RADIOBUTTON) {
|
| if (CXFA_FFWidget* hGroupWidget = GetGroupMixXFAWidget()) {
|
| - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
|
| + CXFA_WidgetAcc* pAcc = hGroupWidget->GetDataAcc();
|
| param.m_pTarget = pAcc;
|
| if (pXFAWidgetHandler->ProcessEvent(pAcc, ¶m) !=
|
| XFA_EVENTERROR_Success) {
|
| @@ -244,7 +245,7 @@ FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
|
| }
|
| }
|
| }
|
| - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
|
| + CXFA_WidgetAcc* pAcc = hWidget->GetDataAcc();
|
| param.m_pTarget = pAcc;
|
| int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m);
|
|
|
| @@ -261,48 +262,44 @@ FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
|
|
|
| void CPDFSDK_Widget::Synchronize(FX_BOOL bSynchronizeElse) {
|
| if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
|
| - CPDF_FormField* pFormField = GetFormField();
|
| - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - switch (GetFieldType()) {
|
| - case FIELDTYPE_CHECKBOX:
|
| - case FIELDTYPE_RADIOBUTTON: {
|
| - CPDF_FormControl* pFormCtrl = GetFormControl();
|
| - XFA_CHECKSTATE eCheckState =
|
| - pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off;
|
| - pWidgetAcc->SetCheckState(eCheckState);
|
| - } break;
|
| - case FIELDTYPE_TEXTFIELD:
|
| - pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
|
| - break;
|
| - case FIELDTYPE_LISTBOX: {
|
| - pWidgetAcc->ClearAllSelections();
|
| -
|
| - for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
|
| - i++) {
|
| - int nIndex = pFormField->GetSelectedIndex(i);
|
| - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| - pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
|
| - }
|
| - } break;
|
| - case FIELDTYPE_COMBOBOX: {
|
| - pWidgetAcc->ClearAllSelections();
|
| -
|
| - for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
|
| - i++) {
|
| - int nIndex = pFormField->GetSelectedIndex(i);
|
| - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| - pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
|
| - }
|
| + CPDF_FormField* pFormField = GetFormField();
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + switch (GetFieldType()) {
|
| + case FIELDTYPE_CHECKBOX:
|
| + case FIELDTYPE_RADIOBUTTON: {
|
| + CPDF_FormControl* pFormCtrl = GetFormControl();
|
| + XFA_CHECKSTATE eCheckState =
|
| + pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off;
|
| + pWidgetAcc->SetCheckState(eCheckState);
|
| + } break;
|
| + case FIELDTYPE_TEXTFIELD:
|
| + pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
|
| + break;
|
| + case FIELDTYPE_LISTBOX: {
|
| + pWidgetAcc->ClearAllSelections();
|
| +
|
| + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
|
| + int nIndex = pFormField->GetSelectedIndex(i);
|
| + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| + pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
|
| }
|
| + } break;
|
| + case FIELDTYPE_COMBOBOX: {
|
| + pWidgetAcc->ClearAllSelections();
|
|
|
| - pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
|
| - break;
|
| + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
|
| + int nIndex = pFormField->GetSelectedIndex(i);
|
| + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| + pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
|
| + }
|
| }
|
|
|
| - if (bSynchronizeElse)
|
| - pWidgetAcc->ProcessValueChanged();
|
| + pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
|
| + break;
|
| }
|
| +
|
| + if (bSynchronizeElse)
|
| + pWidgetAcc->ProcessValueChanged();
|
| }
|
| }
|
| }
|
| @@ -340,71 +337,62 @@ void CPDFSDK_Widget::SynchronizeXFAValue(CXFA_FFDocView* pXFADocView,
|
| CPDF_FormField* pFormField,
|
| CPDF_FormControl* pFormControl) {
|
| ASSERT(hWidget);
|
| + ASSERT(pFormControl);
|
| +
|
| + switch (pFormField->GetFieldType()) {
|
| + case FIELDTYPE_CHECKBOX: {
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + pFormField->CheckControl(
|
| + pFormField->GetControlIndex(pFormControl),
|
| + pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On, true);
|
| + }
|
| + } break;
|
| + case FIELDTYPE_RADIOBUTTON: {
|
| + // TODO(weili): Check whether we need to handle checkbox and radio
|
| + // button differently, otherwise, merge these two cases.
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + pFormField->CheckControl(
|
| + pFormField->GetControlIndex(pFormControl),
|
| + pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On, true);
|
| + }
|
| + } break;
|
| + case FIELDTYPE_TEXTFIELD: {
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + CFX_WideString sValue;
|
| + pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
|
| + pFormField->SetValue(sValue, TRUE);
|
| + }
|
| + } break;
|
| + case FIELDTYPE_LISTBOX: {
|
| + pFormField->ClearSelection(FALSE);
|
|
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler =
|
| - pXFADocView->GetWidgetHandler()) {
|
| - ASSERT(pFormControl);
|
| -
|
| - switch (pFormField->GetFieldType()) {
|
| - case FIELDTYPE_CHECKBOX: {
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - pFormField->CheckControl(
|
| - pFormField->GetControlIndex(pFormControl),
|
| - pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On, true);
|
| - }
|
| - } break;
|
| - case FIELDTYPE_RADIOBUTTON: {
|
| - // TODO(weili): Check whether we need to handle checkbox and radio
|
| - // button differently, otherwise, merge these two cases.
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - pFormField->CheckControl(
|
| - pFormField->GetControlIndex(pFormControl),
|
| - pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On, true);
|
| - }
|
| - } break;
|
| - case FIELDTYPE_TEXTFIELD: {
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - CFX_WideString sValue;
|
| - pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
|
| - pFormField->SetValue(sValue, TRUE);
|
| - }
|
| - } break;
|
| - case FIELDTYPE_LISTBOX: {
|
| - pFormField->ClearSelection(FALSE);
|
| -
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
|
| - int nIndex = pWidgetAcc->GetSelectedItem(i);
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
|
| + int nIndex = pWidgetAcc->GetSelectedItem(i);
|
|
|
| - if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
|
| - pFormField->SetItemSelection(nIndex, TRUE, TRUE);
|
| - }
|
| + if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
|
| + pFormField->SetItemSelection(nIndex, TRUE, TRUE);
|
| }
|
| }
|
| - } break;
|
| - case FIELDTYPE_COMBOBOX: {
|
| - pFormField->ClearSelection(FALSE);
|
| + }
|
| + } break;
|
| + case FIELDTYPE_COMBOBOX: {
|
| + pFormField->ClearSelection(FALSE);
|
|
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
|
| - int nIndex = pWidgetAcc->GetSelectedItem(i);
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
|
| + int nIndex = pWidgetAcc->GetSelectedItem(i);
|
|
|
| - if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
|
| - pFormField->SetItemSelection(nIndex, TRUE, TRUE);
|
| - }
|
| + if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
|
| + pFormField->SetItemSelection(nIndex, TRUE, TRUE);
|
| }
|
| -
|
| - CFX_WideString sValue;
|
| - pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
|
| - pFormField->SetValue(sValue, TRUE);
|
| }
|
| - } break;
|
| - }
|
| +
|
| + CFX_WideString sValue;
|
| + pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
|
| + pFormField->SetValue(sValue, TRUE);
|
| + }
|
| + } break;
|
| }
|
| }
|
|
|
| @@ -414,42 +402,35 @@ void CPDFSDK_Widget::SynchronizeXFAItems(CXFA_FFDocView* pXFADocView,
|
| CPDF_FormControl* pFormControl) {
|
| ASSERT(hWidget);
|
|
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler =
|
| - pXFADocView->GetWidgetHandler()) {
|
| - switch (pFormField->GetFieldType()) {
|
| - case FIELDTYPE_LISTBOX: {
|
| - pFormField->ClearSelection(FALSE);
|
| - pFormField->ClearOptions(TRUE);
|
| -
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
|
| - i++) {
|
| - CFX_WideString swText;
|
| - pWidgetAcc->GetChoiceListItem(swText, i);
|
| -
|
| - pFormField->InsertOption(swText, i, TRUE);
|
| - }
|
| + switch (pFormField->GetFieldType()) {
|
| + case FIELDTYPE_LISTBOX: {
|
| + pFormField->ClearSelection(FALSE);
|
| + pFormField->ClearOptions(TRUE);
|
| +
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz; i++) {
|
| + CFX_WideString swText;
|
| + pWidgetAcc->GetChoiceListItem(swText, i);
|
| +
|
| + pFormField->InsertOption(swText, i, TRUE);
|
| }
|
| - } break;
|
| - case FIELDTYPE_COMBOBOX: {
|
| - pFormField->ClearSelection(FALSE);
|
| - pFormField->ClearOptions(FALSE);
|
| -
|
| - if (CXFA_WidgetAcc* pWidgetAcc =
|
| - pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
|
| - i++) {
|
| - CFX_WideString swText;
|
| - pWidgetAcc->GetChoiceListItem(swText, i);
|
| -
|
| - pFormField->InsertOption(swText, i, FALSE);
|
| - }
|
| + }
|
| + } break;
|
| + case FIELDTYPE_COMBOBOX: {
|
| + pFormField->ClearSelection(FALSE);
|
| + pFormField->ClearOptions(FALSE);
|
| +
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz; i++) {
|
| + CFX_WideString swText;
|
| + pWidgetAcc->GetChoiceListItem(swText, i);
|
| +
|
| + pFormField->InsertOption(swText, i, FALSE);
|
| }
|
| + }
|
|
|
| - pFormField->SetValue(L"", TRUE);
|
| - } break;
|
| - }
|
| + pFormField->SetValue(L"", TRUE);
|
| + } break;
|
| }
|
| }
|
| #endif // PDF_ENABLE_XFA
|
| @@ -595,11 +576,9 @@ FX_FLOAT CPDFSDK_Widget::GetFontSize() const {
|
| int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const {
|
| #ifdef PDF_ENABLE_XFA
|
| if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
|
| - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - if (nIndex < pWidgetAcc->CountSelectedItems())
|
| - return pWidgetAcc->GetSelectedItem(nIndex);
|
| - }
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + if (nIndex < pWidgetAcc->CountSelectedItems())
|
| + return pWidgetAcc->GetSelectedItem(nIndex);
|
| }
|
| }
|
| #endif // PDF_ENABLE_XFA
|
| @@ -610,13 +589,11 @@ int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const {
|
| #ifdef PDF_ENABLE_XFA
|
| CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) const {
|
| if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
|
| - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - CFX_WideString sValue;
|
| - pWidgetAcc->GetValue(sValue, bDisplay ? XFA_VALUEPICTURE_Display
|
| - : XFA_VALUEPICTURE_Edit);
|
| - return sValue;
|
| - }
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + CFX_WideString sValue;
|
| + pWidgetAcc->GetValue(
|
| + sValue, bDisplay ? XFA_VALUEPICTURE_Display : XFA_VALUEPICTURE_Edit);
|
| + return sValue;
|
| }
|
| }
|
| #else
|
| @@ -644,13 +621,11 @@ int CPDFSDK_Widget::CountOptions() const {
|
| FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const {
|
| #ifdef PDF_ENABLE_XFA
|
| if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
|
| - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
|
| - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| - return pWidgetAcc->GetItemState(nIndex);
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
|
| + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
|
| + return pWidgetAcc->GetItemState(nIndex);
|
|
|
| - return FALSE;
|
| - }
|
| + return FALSE;
|
| }
|
| }
|
| #endif // PDF_ENABLE_XFA
|
| @@ -665,11 +640,9 @@ int CPDFSDK_Widget::GetTopVisibleIndex() const {
|
|
|
| bool CPDFSDK_Widget::IsChecked() const {
|
| #ifdef PDF_ENABLE_XFA
|
| - if (CXFA_FFWidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
|
| - if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget))
|
| - return pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
|
| - }
|
| + if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
|
| + if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc())
|
| + return pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
|
| }
|
| #endif // PDF_ENABLE_XFA
|
| CPDF_FormControl* pFormCtrl = GetFormControl();
|
| @@ -1900,7 +1873,7 @@ FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type,
|
| param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]);
|
| param.m_wsPrevText = data.sValue;
|
|
|
| - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
|
| + CXFA_WidgetAcc* pAcc = hWidget->GetDataAcc();
|
| param.m_pTarget = pAcc;
|
| int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m);
|
|
|
| @@ -2001,15 +1974,8 @@ CFX_ByteString CPDFSDK_XFAWidget::GetType() const {
|
| }
|
|
|
| CFX_FloatRect CPDFSDK_XFAWidget::GetRect() const {
|
| - CPDFSDK_PageView* pPageView = GetPageView();
|
| - CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
|
| - CPDFXFA_Document* pDoc = pDocument->GetXFADocument();
|
| - CXFA_FFDocView* pDocView = pDoc->GetXFADocView();
|
| - CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
|
| -
|
| CFX_RectF rcBBox;
|
| - pWidgetHandler->GetRect(GetXFAWidget(), rcBBox);
|
| -
|
| + GetXFAWidget()->GetRect(rcBBox);
|
| return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
|
| rcBBox.top + rcBBox.height);
|
| }
|
|
|