| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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 "fpdfsdk/formfiller/cffl_textfield.h" | 7 #include "fpdfsdk/formfiller/cffl_textfield.h" |
| 8 | 8 |
| 9 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" | 9 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" |
| 10 #include "fpdfsdk/cpdfsdk_widget.h" | 10 #include "fpdfsdk/cpdfsdk_widget.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 pWnd->SetAlignFormatV(PEAV_CENTER); | 98 pWnd->SetAlignFormatV(PEAV_CENTER); |
| 99 } else { | 99 } else { |
| 100 pWnd->SetLimitChar(nMaxLen); | 100 pWnd->SetLimitChar(nMaxLen); |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 | 103 |
| 104 pWnd->SetText(swValue); | 104 pWnd->SetText(swValue); |
| 105 return pWnd; | 105 return pWnd; |
| 106 } | 106 } |
| 107 | 107 |
| 108 FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, | 108 bool CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, |
| 109 uint32_t nChar, | 109 uint32_t nChar, |
| 110 uint32_t nFlags) { | 110 uint32_t nFlags) { |
| 111 switch (nChar) { | 111 switch (nChar) { |
| 112 case FWL_VKEY_Return: | 112 case FWL_VKEY_Return: |
| 113 if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) { | 113 if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) { |
| 114 CPDFSDK_PageView* pPageView = GetCurPageView(true); | 114 CPDFSDK_PageView* pPageView = GetCurPageView(true); |
| 115 ASSERT(pPageView); | 115 ASSERT(pPageView); |
| 116 m_bValid = !m_bValid; | 116 m_bValid = !m_bValid; |
| 117 CFX_FloatRect rcAnnot = pAnnot->GetRect(); | 117 CFX_FloatRect rcAnnot = pAnnot->GetRect(); |
| 118 m_pFormFillEnv->Invalidate(pAnnot->GetUnderlyingPage(), rcAnnot.left, | 118 m_pFormFillEnv->Invalidate(pAnnot->GetUnderlyingPage(), rcAnnot.left, |
| 119 rcAnnot.top, rcAnnot.right, rcAnnot.bottom); | 119 rcAnnot.top, rcAnnot.right, rcAnnot.bottom); |
| 120 | 120 |
| 121 if (m_bValid) { | 121 if (m_bValid) { |
| 122 if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) | 122 if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, true)) |
| 123 pWnd->SetFocus(); | 123 pWnd->SetFocus(); |
| 124 } else { | 124 } else { |
| 125 if (CommitData(pPageView, nFlags)) { | 125 if (CommitData(pPageView, nFlags)) { |
| 126 DestroyPDFWindow(pPageView); | 126 DestroyPDFWindow(pPageView); |
| 127 return TRUE; | 127 return true; |
| 128 } | 128 } |
| 129 return FALSE; | 129 return false; |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 break; | 132 break; |
| 133 case FWL_VKEY_Escape: { | 133 case FWL_VKEY_Escape: { |
| 134 CPDFSDK_PageView* pPageView = GetCurPageView(true); | 134 CPDFSDK_PageView* pPageView = GetCurPageView(true); |
| 135 ASSERT(pPageView); | 135 ASSERT(pPageView); |
| 136 EscapeFiller(pPageView, TRUE); | 136 EscapeFiller(pPageView, true); |
| 137 return TRUE; | 137 return true; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 | 140 |
| 141 return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); | 141 return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); |
| 142 } | 142 } |
| 143 | 143 |
| 144 FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) { | 144 bool CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) { |
| 145 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) | 145 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, false)) |
| 146 return pEdit->GetText() != m_pWidget->GetValue(); | 146 return pEdit->GetText() != m_pWidget->GetValue(); |
| 147 | 147 |
| 148 return FALSE; | 148 return false; |
| 149 } | 149 } |
| 150 | 150 |
| 151 void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) { | 151 void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) { |
| 152 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 152 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 153 CFX_WideString sOldValue = m_pWidget->GetValue(); | 153 CFX_WideString sOldValue = m_pWidget->GetValue(); |
| 154 CFX_WideString sNewValue = pWnd->GetText(); | 154 CFX_WideString sNewValue = pWnd->GetText(); |
| 155 | 155 |
| 156 m_pWidget->SetValue(sNewValue, FALSE); | 156 m_pWidget->SetValue(sNewValue, false); |
| 157 m_pWidget->ResetFieldAppearance(TRUE); | 157 m_pWidget->ResetFieldAppearance(true); |
| 158 m_pWidget->UpdateField(); | 158 m_pWidget->UpdateField(); |
| 159 SetChangeMark(); | 159 SetChangeMark(); |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 | 162 |
| 163 void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, | 163 void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, |
| 164 CPDF_AAction::AActionType type, | 164 CPDF_AAction::AActionType type, |
| 165 PDFSDK_FieldAction& fa) { | 165 PDFSDK_FieldAction& fa) { |
| 166 switch (type) { | 166 switch (type) { |
| 167 case CPDF_AAction::KeyStroke: | 167 case CPDF_AAction::KeyStroke: |
| 168 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 168 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 169 fa.bFieldFull = pWnd->IsTextFull(); | 169 fa.bFieldFull = pWnd->IsTextFull(); |
| 170 | 170 |
| 171 fa.sValue = pWnd->GetText(); | 171 fa.sValue = pWnd->GetText(); |
| 172 | 172 |
| 173 if (fa.bFieldFull) { | 173 if (fa.bFieldFull) { |
| 174 fa.sChange = L""; | 174 fa.sChange = L""; |
| 175 fa.sChangeEx = L""; | 175 fa.sChangeEx = L""; |
| 176 } | 176 } |
| 177 } | 177 } |
| 178 break; | 178 break; |
| 179 case CPDF_AAction::Validate: | 179 case CPDF_AAction::Validate: |
| 180 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 180 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 181 fa.sValue = pWnd->GetText(); | 181 fa.sValue = pWnd->GetText(); |
| 182 } | 182 } |
| 183 break; | 183 break; |
| 184 case CPDF_AAction::LoseFocus: | 184 case CPDF_AAction::LoseFocus: |
| 185 case CPDF_AAction::GetFocus: | 185 case CPDF_AAction::GetFocus: |
| 186 fa.sValue = m_pWidget->GetValue(); | 186 fa.sValue = m_pWidget->GetValue(); |
| 187 break; | 187 break; |
| 188 default: | 188 default: |
| 189 break; | 189 break; |
| 190 } | 190 } |
| 191 } | 191 } |
| 192 | 192 |
| 193 void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, | 193 void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, |
| 194 CPDF_AAction::AActionType type, | 194 CPDF_AAction::AActionType type, |
| 195 const PDFSDK_FieldAction& fa) { | 195 const PDFSDK_FieldAction& fa) { |
| 196 switch (type) { | 196 switch (type) { |
| 197 case CPDF_AAction::KeyStroke: | 197 case CPDF_AAction::KeyStroke: |
| 198 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 198 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 199 pEdit->SetFocus(); | 199 pEdit->SetFocus(); |
| 200 pEdit->SetSel(fa.nSelStart, fa.nSelEnd); | 200 pEdit->SetSel(fa.nSelStart, fa.nSelEnd); |
| 201 pEdit->ReplaceSel(fa.sChange); | 201 pEdit->ReplaceSel(fa.sChange); |
| 202 } | 202 } |
| 203 break; | 203 break; |
| 204 default: | 204 default: |
| 205 break; | 205 break; |
| 206 } | 206 } |
| 207 } | 207 } |
| 208 | 208 |
| 209 FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, | 209 bool CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, |
| 210 const PDFSDK_FieldAction& faOld, | 210 const PDFSDK_FieldAction& faOld, |
| 211 const PDFSDK_FieldAction& faNew) { | 211 const PDFSDK_FieldAction& faNew) { |
| 212 switch (type) { | 212 switch (type) { |
| 213 case CPDF_AAction::KeyStroke: | 213 case CPDF_AAction::KeyStroke: |
| 214 return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || | 214 return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || |
| 215 faOld.nSelStart != faNew.nSelStart || | 215 faOld.nSelStart != faNew.nSelStart || |
| 216 faOld.sChange != faNew.sChange; | 216 faOld.sChange != faNew.sChange; |
| 217 default: | 217 default: |
| 218 break; | 218 break; |
| 219 } | 219 } |
| 220 | 220 |
| 221 return FALSE; | 221 return false; |
| 222 } | 222 } |
| 223 | 223 |
| 224 void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) { | 224 void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) { |
| 225 ASSERT(pPageView); | 225 ASSERT(pPageView); |
| 226 | 226 |
| 227 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 227 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 228 pWnd->GetSel(m_State.nStart, m_State.nEnd); | 228 pWnd->GetSel(m_State.nStart, m_State.nEnd); |
| 229 m_State.sValue = pWnd->GetText(); | 229 m_State.sValue = pWnd->GetText(); |
| 230 } | 230 } |
| 231 } | 231 } |
| 232 | 232 |
| 233 void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) { | 233 void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) { |
| 234 ASSERT(pPageView); | 234 ASSERT(pPageView); |
| 235 | 235 |
| 236 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) { | 236 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, true)) { |
| 237 pWnd->SetText(m_State.sValue); | 237 pWnd->SetText(m_State.sValue); |
| 238 pWnd->SetSel(m_State.nStart, m_State.nEnd); | 238 pWnd->SetSel(m_State.nStart, m_State.nEnd); |
| 239 } | 239 } |
| 240 } | 240 } |
| 241 | 241 |
| 242 CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, | 242 CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, |
| 243 FX_BOOL bRestoreValue) { | 243 bool bRestoreValue) { |
| 244 if (bRestoreValue) | 244 if (bRestoreValue) |
| 245 SaveState(pPageView); | 245 SaveState(pPageView); |
| 246 | 246 |
| 247 DestroyPDFWindow(pPageView); | 247 DestroyPDFWindow(pPageView); |
| 248 | 248 |
| 249 CPWL_Wnd* pRet = nullptr; | 249 CPWL_Wnd* pRet = nullptr; |
| 250 | 250 |
| 251 if (bRestoreValue) { | 251 if (bRestoreValue) { |
| 252 RestoreState(pPageView); | 252 RestoreState(pPageView); |
| 253 pRet = GetPDFWindow(pPageView, FALSE); | 253 pRet = GetPDFWindow(pPageView, false); |
| 254 } else { | 254 } else { |
| 255 pRet = GetPDFWindow(pPageView, TRUE); | 255 pRet = GetPDFWindow(pPageView, true); |
| 256 } | 256 } |
| 257 | 257 |
| 258 m_pWidget->UpdateField(); | 258 m_pWidget->UpdateField(); |
| 259 | 259 |
| 260 return pRet; | 260 return pRet; |
| 261 } | 261 } |
| 262 | 262 |
| 263 #ifdef PDF_ENABLE_XFA | 263 #ifdef PDF_ENABLE_XFA |
| 264 FX_BOOL CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) { | 264 bool CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) { |
| 265 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { | 265 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, false)) { |
| 266 return pWnd->IsTextFull(); | 266 return pWnd->IsTextFull(); |
| 267 } | 267 } |
| 268 | 268 |
| 269 return FALSE; | 269 return false; |
| 270 } | 270 } |
| 271 #endif // PDF_ENABLE_XFA | 271 #endif // PDF_ENABLE_XFA |
| 272 | 272 |
| 273 void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) { | 273 void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) { |
| 274 ASSERT(m_pFormFillEnv); | 274 ASSERT(m_pFormFillEnv); |
| 275 if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) { | 275 if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) { |
| 276 CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; | 276 CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; |
| 277 pEdit->SetCharSet(FXFONT_GB2312_CHARSET); | 277 pEdit->SetCharSet(FXFONT_GB2312_CHARSET); |
| 278 pEdit->SetCodePage(936); | 278 pEdit->SetCodePage(936); |
| 279 | 279 |
| 280 pEdit->SetReadyToInput(); | 280 pEdit->SetReadyToInput(); |
| 281 CFX_WideString wsText = pEdit->GetText(); | 281 CFX_WideString wsText = pEdit->GetText(); |
| 282 int nCharacters = wsText.GetLength(); | 282 int nCharacters = wsText.GetLength(); |
| 283 CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); | 283 CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); |
| 284 unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); | 284 unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); |
| 285 m_pFormFillEnv->OnSetFieldInputFocus(pBuffer, nCharacters, TRUE); | 285 m_pFormFillEnv->OnSetFieldInputFocus(pBuffer, nCharacters, true); |
| 286 } | 286 } |
| 287 } | 287 } |
| OLD | NEW |