| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/parser/cxfa_widgetdata.h" | 7 #include "xfa/fxfa/parser/cxfa_widgetdata.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 #include "xfa/fxbarcode/include/BC_Library.h" | 10 #include "xfa/fxbarcode/include/BC_Library.h" |
| (...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 break; | 813 break; |
| 814 } | 814 } |
| 815 } | 815 } |
| 816 SetSelectedItems(iSelArray, bNotify, bScriptModify, bSyncData); | 816 SetSelectedItems(iSelArray, bNotify, bScriptModify, bSyncData); |
| 817 } | 817 } |
| 818 } else { | 818 } else { |
| 819 if (bSelected) { | 819 if (bSelected) { |
| 820 if (iSel < 0) { | 820 if (iSel < 0) { |
| 821 CFX_WideString wsSaveText = wsSaveTextArray[nIndex]; | 821 CFX_WideString wsSaveText = wsSaveTextArray[nIndex]; |
| 822 CFX_WideString wsFormatText(wsSaveText); | 822 CFX_WideString wsFormatText(wsSaveText); |
| 823 GetFormatDataValue(wsSaveText.AsWideStringC(), wsFormatText); | 823 GetFormatDataValue(wsSaveText.AsStringC(), wsFormatText); |
| 824 m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, | 824 m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, |
| 825 bSyncData); | 825 bSyncData); |
| 826 } | 826 } |
| 827 } else if (iSel >= 0) { | 827 } else if (iSel >= 0) { |
| 828 m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, | 828 m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, |
| 829 bScriptModify, bSyncData); | 829 bScriptModify, bSyncData); |
| 830 } | 830 } |
| 831 } | 831 } |
| 832 } | 832 } |
| 833 | 833 |
| 834 void CXFA_WidgetData::SetSelectedItems(CFX_Int32Array& iSelArray, | 834 void CXFA_WidgetData::SetSelectedItems(CFX_Int32Array& iSelArray, |
| 835 FX_BOOL bNotify, | 835 FX_BOOL bNotify, |
| 836 FX_BOOL bScriptModify, | 836 FX_BOOL bScriptModify, |
| 837 FX_BOOL bSyncData) { | 837 FX_BOOL bSyncData) { |
| 838 CFX_WideString wsValue; | 838 CFX_WideString wsValue; |
| 839 int32_t iSize = iSelArray.GetSize(); | 839 int32_t iSize = iSelArray.GetSize(); |
| 840 if (iSize >= 1) { | 840 if (iSize >= 1) { |
| 841 CFX_WideStringArray wsSaveTextArray; | 841 CFX_WideStringArray wsSaveTextArray; |
| 842 GetChoiceListItems(wsSaveTextArray, TRUE); | 842 GetChoiceListItems(wsSaveTextArray, TRUE); |
| 843 CFX_WideString wsItemValue; | 843 CFX_WideString wsItemValue; |
| 844 for (int32_t i = 0; i < iSize; i++) { | 844 for (int32_t i = 0; i < iSize; i++) { |
| 845 wsItemValue = (iSize == 1) | 845 wsItemValue = (iSize == 1) |
| 846 ? wsSaveTextArray[iSelArray[i]] | 846 ? wsSaveTextArray[iSelArray[i]] |
| 847 : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); | 847 : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); |
| 848 wsValue += wsItemValue; | 848 wsValue += wsItemValue; |
| 849 } | 849 } |
| 850 } | 850 } |
| 851 CFX_WideString wsFormat(wsValue); | 851 CFX_WideString wsFormat(wsValue); |
| 852 if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) | 852 if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) |
| 853 GetFormatDataValue(wsValue.AsWideStringC(), wsFormat); | 853 GetFormatDataValue(wsValue.AsStringC(), wsFormat); |
| 854 | 854 |
| 855 m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); | 855 m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); |
| 856 } | 856 } |
| 857 | 857 |
| 858 void CXFA_WidgetData::ClearAllSelections() { | 858 void CXFA_WidgetData::ClearAllSelections() { |
| 859 CXFA_Node* pBind = m_pNode->GetBindData(); | 859 CXFA_Node* pBind = m_pNode->GetBindData(); |
| 860 if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | 860 if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { |
| 861 while (CXFA_Node* pChildNode = | 861 while (CXFA_Node* pChildNode = |
| 862 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 862 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
| 863 pBind->RemoveChild(pChildNode); | 863 pBind->RemoveChild(pChildNode); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 882 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 882 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 883 if (pItemNode->GetClassID() != XFA_ELEMENT_Items) | 883 if (pItemNode->GetClassID() != XFA_ELEMENT_Items) |
| 884 continue; | 884 continue; |
| 885 | 885 |
| 886 listitems.Add(pItemNode); | 886 listitems.Add(pItemNode); |
| 887 iCount++; | 887 iCount++; |
| 888 } | 888 } |
| 889 if (iCount < 1) { | 889 if (iCount < 1) { |
| 890 CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 890 CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
| 891 m_pNode->InsertChild(-1, pItems); | 891 m_pNode->InsertChild(-1, pItems); |
| 892 InsertListTextItem(pItems, wsLabel.AsWideStringC(), nIndex); | 892 InsertListTextItem(pItems, wsLabel.AsStringC(), nIndex); |
| 893 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 893 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
| 894 m_pNode->InsertChild(-1, pSaveItems); | 894 m_pNode->InsertChild(-1, pSaveItems); |
| 895 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | 895 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); |
| 896 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); | 896 InsertListTextItem(pSaveItems, wsNewValue.AsStringC(), nIndex); |
| 897 } else if (iCount > 1) { | 897 } else if (iCount > 1) { |
| 898 for (int32_t i = 0; i < 2; i++) { | 898 for (int32_t i = 0; i < 2; i++) { |
| 899 CXFA_Node* pNode = listitems[i]; | 899 CXFA_Node* pNode = listitems[i]; |
| 900 FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); | 900 FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); |
| 901 if (bHasSave) | 901 if (bHasSave) |
| 902 InsertListTextItem(pNode, wsNewValue.AsWideStringC(), nIndex); | 902 InsertListTextItem(pNode, wsNewValue.AsStringC(), nIndex); |
| 903 else | 903 else |
| 904 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); | 904 InsertListTextItem(pNode, wsLabel.AsStringC(), nIndex); |
| 905 } | 905 } |
| 906 } else { | 906 } else { |
| 907 CXFA_Node* pNode = listitems[0]; | 907 CXFA_Node* pNode = listitems[0]; |
| 908 pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); | 908 pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); |
| 909 pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); | 909 pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); |
| 910 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 910 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
| 911 m_pNode->InsertChild(-1, pSaveItems); | 911 m_pNode->InsertChild(-1, pSaveItems); |
| 912 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | 912 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); |
| 913 pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); | 913 pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); |
| 914 listitems.RemoveAll(); | 914 listitems.RemoveAll(); |
| 915 CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 915 CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 916 int32_t i = 0; | 916 int32_t i = 0; |
| 917 while (pListNode) { | 917 while (pListNode) { |
| 918 CFX_WideString wsOldValue; | 918 CFX_WideString wsOldValue; |
| 919 pListNode->TryContent(wsOldValue); | 919 pListNode->TryContent(wsOldValue); |
| 920 InsertListTextItem(pSaveItems, wsOldValue.AsWideStringC(), i); | 920 InsertListTextItem(pSaveItems, wsOldValue.AsStringC(), i); |
| 921 i++; | 921 i++; |
| 922 pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 922 pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 923 } | 923 } |
| 924 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); | 924 InsertListTextItem(pNode, wsLabel.AsStringC(), nIndex); |
| 925 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); | 925 InsertListTextItem(pSaveItems, wsNewValue.AsStringC(), nIndex); |
| 926 } | 926 } |
| 927 if (!bNotify) | 927 if (!bNotify) |
| 928 return; | 928 return; |
| 929 | 929 |
| 930 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( | 930 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( |
| 931 this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, | 931 this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, |
| 932 (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); | 932 (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); |
| 933 } | 933 } |
| 934 | 934 |
| 935 void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, | 935 void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1474 return pLocale; | 1474 return pLocale; |
| 1475 | 1475 |
| 1476 FX_BOOL bLocale = FALSE; | 1476 FX_BOOL bLocale = FALSE; |
| 1477 CFX_WideString wsLocaleName; | 1477 CFX_WideString wsLocaleName; |
| 1478 bLocale = m_pNode->GetLocaleName(wsLocaleName); | 1478 bLocale = m_pNode->GetLocaleName(wsLocaleName); |
| 1479 if (bLocale) { | 1479 if (bLocale) { |
| 1480 if (wsLocaleName == FX_WSTRC(L"ambient")) { | 1480 if (wsLocaleName == FX_WSTRC(L"ambient")) { |
| 1481 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); | 1481 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); |
| 1482 } else { | 1482 } else { |
| 1483 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName( | 1483 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName( |
| 1484 wsLocaleName.AsWideStringC()); | 1484 wsLocaleName.AsStringC()); |
| 1485 } | 1485 } |
| 1486 } | 1486 } |
| 1487 return pLocale; | 1487 return pLocale; |
| 1488 } | 1488 } |
| 1489 | 1489 |
| 1490 FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, | 1490 FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, |
| 1491 XFA_VALUEPICTURE eValueType) { | 1491 XFA_VALUEPICTURE eValueType) { |
| 1492 wsValue = m_pNode->GetContent(); | 1492 wsValue = m_pNode->GetContent(); |
| 1493 | 1493 |
| 1494 if (eValueType == XFA_VALUEPICTURE_Display) | 1494 if (eValueType == XFA_VALUEPICTURE_Display) |
| 1495 GetItemLabel(wsValue.AsWideStringC(), wsValue); | 1495 GetItemLabel(wsValue.AsStringC(), wsValue); |
| 1496 | 1496 |
| 1497 CFX_WideString wsPicture; | 1497 CFX_WideString wsPicture; |
| 1498 GetPictureContent(wsPicture, eValueType); | 1498 GetPictureContent(wsPicture, eValueType); |
| 1499 CXFA_Node* pNode = GetUIChild(); | 1499 CXFA_Node* pNode = GetUIChild(); |
| 1500 if (!pNode) | 1500 if (!pNode) |
| 1501 return TRUE; | 1501 return TRUE; |
| 1502 | 1502 |
| 1503 XFA_ELEMENT uiType = GetUIChild()->GetClassID(); | 1503 XFA_ELEMENT uiType = GetUIChild()->GetClassID(); |
| 1504 switch (uiType) { | 1504 switch (uiType) { |
| 1505 case XFA_ELEMENT_ChoiceList: { | 1505 case XFA_ELEMENT_ChoiceList: { |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1731 } | 1731 } |
| 1732 | 1732 |
| 1733 void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, | 1733 void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, |
| 1734 FX_BOOL bNotify) { | 1734 FX_BOOL bNotify) { |
| 1735 if (!m_pNode) | 1735 if (!m_pNode) |
| 1736 return; | 1736 return; |
| 1737 | 1737 |
| 1738 CFX_WideString wsFormatValue(wsValue); | 1738 CFX_WideString wsFormatValue(wsValue); |
| 1739 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | 1739 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); |
| 1740 if (pContainerWidgetData) | 1740 if (pContainerWidgetData) |
| 1741 pContainerWidgetData->GetFormatDataValue(wsValue.AsWideStringC(), | 1741 pContainerWidgetData->GetFormatDataValue(wsValue.AsStringC(), |
| 1742 wsFormatValue); | 1742 wsFormatValue); |
| 1743 | 1743 |
| 1744 m_pNode->SetContent(wsValue, wsFormatValue, bNotify); | 1744 m_pNode->SetContent(wsValue, wsFormatValue, bNotify); |
| 1745 } | 1745 } |
| 1746 | 1746 |
| 1747 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, | 1747 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, |
| 1748 const CFX_WideStringC& wsText, | 1748 const CFX_WideStringC& wsText, |
| 1749 int32_t nIndex) { | 1749 int32_t nIndex) { |
| 1750 CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); | 1750 CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); |
| 1751 pItems->InsertChild(nIndex, pText); | 1751 pItems->InsertChild(nIndex, pText); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1773 FX_WCHAR wc = wsValue[i]; | 1773 FX_WCHAR wc = wsValue[i]; |
| 1774 if (XFA_IsDigit(wc)) { | 1774 if (XFA_IsDigit(wc)) { |
| 1775 if (iLead >= 0) { | 1775 if (iLead >= 0) { |
| 1776 iLead_++; | 1776 iLead_++; |
| 1777 if (iLead_ > iLead) | 1777 if (iLead_ > iLead) |
| 1778 return L"0"; | 1778 return L"0"; |
| 1779 } else if (iTread_ >= 0) { | 1779 } else if (iTread_ >= 0) { |
| 1780 iTread_++; | 1780 iTread_++; |
| 1781 if (iTread_ > iTread) { | 1781 if (iTread_ > iTread) { |
| 1782 if (iTread != -1) { | 1782 if (iTread != -1) { |
| 1783 CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsWideStringC()); | 1783 CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsStringC()); |
| 1784 wsDeci.SetScale(iTread); | 1784 wsDeci.SetScale(iTread); |
| 1785 wsRet = wsDeci; | 1785 wsRet = wsDeci; |
| 1786 } | 1786 } |
| 1787 return wsRet; | 1787 return wsRet; |
| 1788 } | 1788 } |
| 1789 } | 1789 } |
| 1790 } else if (wc == L'.') { | 1790 } else if (wc == L'.') { |
| 1791 iTread_ = 0; | 1791 iTread_ = 0; |
| 1792 iLead = -1; | 1792 iLead = -1; |
| 1793 } | 1793 } |
| 1794 wsRet += wc; | 1794 wsRet += wc; |
| 1795 } | 1795 } |
| 1796 return wsRet; | 1796 return wsRet; |
| 1797 } | 1797 } |
| OLD | NEW |