| 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 "../include/FormFiller.h" | 7 //#include "../include/FormFiller.h" |
| 8 //#include "../include/FFL_FormFiller.h" | 8 //#include "../include/FFL_FormFiller.h" |
| 9 #include "../../include/formfiller/FFL_TextField.h" | 9 #include "../../include/formfiller/FFL_TextField.h" |
| 10 #include "../../include/formfiller/FFL_CBA_Fontmap.h" | 10 #include "../../include/formfiller/FFL_CBA_Fontmap.h" |
| 11 //#include "../include/FFL_Notify.h" | 11 //#include "../include/FFL_Notify.h" |
| 12 | 12 |
| 13 CFFL_EditUndoItem::CFFL_EditUndoItem(CPWL_Edit* pEdit) | 13 CFFL_EditUndoItem::CFFL_EditUndoItem(CPWL_Edit* pEdit) { |
| 14 } |
| 15 |
| 16 CFFL_EditUndoItem::~CFFL_EditUndoItem() { |
| 17 } |
| 18 |
| 19 void CFFL_EditUndoItem::Undo() { |
| 20 } |
| 21 |
| 22 void CFFL_EditUndoItem::Redo() { |
| 23 } |
| 24 |
| 25 CFX_WideString CFFL_EditUndoItem::GetDescr() { |
| 26 return L"Input"; |
| 27 } |
| 28 |
| 29 void CFFL_EditUndoItem::Release() { |
| 30 delete this; |
| 31 } |
| 32 |
| 33 /* ------------------------------- CFFL_TextField |
| 34 * ------------------------------- */ |
| 35 |
| 36 CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) |
| 37 : CFFL_FormFiller(pApp, pAnnot), |
| 38 m_pFontMap(NULL) //, |
| 39 // m_pSpellCheck(NULL) |
| 14 { | 40 { |
| 15 } | 41 m_State.nStart = m_State.nEnd = 0; |
| 16 | 42 } |
| 17 CFFL_EditUndoItem::~CFFL_EditUndoItem() | 43 |
| 18 { | 44 CFFL_TextField::~CFFL_TextField() { |
| 19 } | 45 if (m_pFontMap) { |
| 20 | 46 delete m_pFontMap; |
| 21 void CFFL_EditUndoItem::Undo() | 47 m_pFontMap = NULL; |
| 22 { | 48 } |
| 23 } | 49 } |
| 24 | 50 |
| 25 void CFFL_EditUndoItem::Redo() | 51 PWL_CREATEPARAM CFFL_TextField::GetCreateParam() { |
| 26 { | 52 PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); |
| 27 } | 53 |
| 28 | 54 ASSERT(m_pWidget != NULL); |
| 29 CFX_WideString CFFL_EditUndoItem::GetDescr() | 55 int nFlags = m_pWidget->GetFieldFlags(); |
| 30 { | 56 |
| 31 return L"Input"; | 57 if (nFlags & FIELDFLAG_PASSWORD) { |
| 32 } | 58 cp.dwFlags |= PES_PASSWORD; |
| 33 | 59 } |
| 34 void CFFL_EditUndoItem::Release() | 60 |
| 35 { | 61 if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) { |
| 36 delete this; | 62 } |
| 37 } | 63 |
| 38 | 64 if (nFlags & FIELDFLAG_MULTILINE) { |
| 39 /* ------------------------------- CFFL_TextField ------------------------------
- */ | 65 cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP; |
| 40 | 66 |
| 41 CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
: | 67 if (!(nFlags & FIELDFLAG_DONOTSCROLL)) { |
| 42 CFFL_FormFiller(pApp, pAnnot), | 68 cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL; |
| 43 m_pFontMap(NULL)//, | 69 } |
| 44 //m_pSpellCheck(NULL) | 70 } else { |
| 45 { | 71 cp.dwFlags |= PES_CENTER; |
| 46 m_State.nStart = m_State.nEnd = 0; | 72 |
| 47 } | 73 if (!(nFlags & FIELDFLAG_DONOTSCROLL)) { |
| 48 | 74 cp.dwFlags |= PES_AUTOSCROLL; |
| 49 CFFL_TextField::~CFFL_TextField() | 75 } |
| 50 { | 76 } |
| 51 if (m_pFontMap) | 77 |
| 52 { | 78 if (nFlags & FIELDFLAG_COMB) { |
| 53 delete m_pFontMap; | 79 cp.dwFlags |= PES_CHARARRAY; |
| 54 m_pFontMap = NULL; | 80 } |
| 55 } | 81 |
| 56 | 82 if (nFlags & FIELDFLAG_RICHTEXT) { |
| 57 } | 83 cp.dwFlags |= PES_RICH; |
| 58 | 84 } |
| 59 PWL_CREATEPARAM CFFL_TextField::GetCreateParam() | 85 |
| 60 { | 86 cp.dwFlags |= PES_UNDO; |
| 61 PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); | 87 |
| 62 | 88 switch (m_pWidget->GetAlignment()) { |
| 63 ASSERT(m_pWidget != NULL); | 89 default: |
| 64 int nFlags = m_pWidget->GetFieldFlags(); | 90 case BF_ALIGN_LEFT: |
| 65 | 91 cp.dwFlags |= PES_LEFT; |
| 66 | 92 break; |
| 67 if (nFlags & FIELDFLAG_PASSWORD) | 93 case BF_ALIGN_MIDDLE: |
| 68 { | 94 cp.dwFlags |= PES_MIDDLE; |
| 69 cp.dwFlags |= PES_PASSWORD; | 95 break; |
| 70 } | 96 case BF_ALIGN_RIGHT: |
| 71 | 97 cp.dwFlags |= PES_RIGHT; |
| 72 if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) | 98 break; |
| 73 { | 99 } |
| 74 } | 100 |
| 75 | 101 if (!m_pFontMap) { |
| 76 if (nFlags & FIELDFLAG_MULTILINE) | 102 ASSERT(this->m_pApp != NULL); |
| 77 { | 103 m_pFontMap = new CBA_FontMap( |
| 78 cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP; | 104 m_pWidget, |
| 79 | 105 /*ISystemHandle::GetSystemHandler(m_pApp)*/ m_pApp->GetSysHandler()); |
| 80 if (!(nFlags & FIELDFLAG_DONOTSCROLL)) | 106 m_pFontMap->Initial(); |
| 81 { | 107 } |
| 82 cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL; | 108 cp.pFontMap = m_pFontMap; |
| 83 } | 109 cp.pFocusHandler = this; |
| 84 } | 110 |
| 85 else | 111 return cp; |
| 86 { | 112 } |
| 87 cp.dwFlags |= PES_CENTER; | 113 |
| 88 | 114 CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp, |
| 89 if (!(nFlags & FIELDFLAG_DONOTSCROLL)) | 115 CPDFSDK_PageView* pPageView) { |
| 90 { | 116 CPWL_Edit* pWnd = new CPWL_Edit(); |
| 91 cp.dwFlags |= PES_AUTOSCROLL; | 117 pWnd->AttachFFLData(this); |
| 92 } | 118 pWnd->Create(cp); |
| 93 } | 119 |
| 94 | 120 ASSERT(m_pApp != NULL); |
| 95 if (nFlags & FIELDFLAG_COMB) | 121 CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); |
| 96 { | 122 pWnd->SetFillerNotify(pIFormFiller); |
| 97 cp.dwFlags |= PES_CHARARRAY; | 123 |
| 98 } | 124 ASSERT(m_pWidget != NULL); |
| 99 | 125 FX_INT32 nMaxLen = m_pWidget->GetMaxLen(); |
| 100 if (nFlags & FIELDFLAG_RICHTEXT) | 126 CFX_WideString swValue = m_pWidget->GetValue(); |
| 101 { | 127 |
| 102 cp.dwFlags |= PES_RICH; | 128 if (nMaxLen > 0) { |
| 103 } | 129 if (pWnd->HasFlag(PES_CHARARRAY)) { |
| 104 | 130 pWnd->SetCharArray(nMaxLen); |
| 105 cp.dwFlags |= PES_UNDO; | 131 pWnd->SetAlignFormatV(PEAV_CENTER); |
| 106 | 132 } else { |
| 107 switch (m_pWidget->GetAlignment()) | 133 pWnd->SetLimitChar(nMaxLen); |
| 108 { | 134 } |
| 109 default: | 135 } |
| 110 case BF_ALIGN_LEFT: | 136 |
| 111 cp.dwFlags |= PES_LEFT; | 137 pWnd->SetText(swValue); |
| 112 break; | 138 |
| 113 case BF_ALIGN_MIDDLE: | 139 return pWnd; |
| 114 cp.dwFlags |= PES_MIDDLE; | 140 } |
| 115 break; | 141 |
| 116 case BF_ALIGN_RIGHT: | 142 FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, |
| 117 cp.dwFlags |= PES_RIGHT; | 143 FX_UINT nChar, |
| 118 break; | 144 FX_UINT nFlags) { |
| 119 } | 145 switch (nChar) { |
| 120 | 146 case FWL_VKEY_Return: |
| 121 if (!m_pFontMap) | 147 if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) { |
| 122 { | 148 CPDFSDK_PageView* pPageView = this->GetCurPageView(); |
| 123 ASSERT(this->m_pApp != NULL); | 149 ASSERT(pPageView != NULL); |
| 124 m_pFontMap = new CBA_FontMap(m_pWidget, /*ISystemHandle::GetSyst
emHandler(m_pApp)*/m_pApp->GetSysHandler()); | 150 m_bValid = !m_bValid; |
| 125 m_pFontMap->Initial(); | 151 CPDF_Rect rcAnnot = pAnnot->GetRect(); |
| 126 } | 152 m_pApp->FFI_Invalidate(pAnnot->GetPDFPage(), |
| 127 cp.pFontMap = m_pFontMap; | 153 rcAnnot.left, |
| 128 cp.pFocusHandler = this; | 154 rcAnnot.top, |
| 129 | 155 rcAnnot.right, |
| 130 return cp; | 156 rcAnnot.bottom); |
| 131 } | 157 |
| 132 | 158 if (m_bValid) { |
| 133 CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageVi
ew* pPageView) | 159 if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) |
| 134 { | 160 pWnd->SetFocus(); |
| 135 CPWL_Edit * pWnd = new CPWL_Edit(); | 161 } else { |
| 136 pWnd->AttachFFLData(this); | 162 if (CommitData(pPageView, nFlags)) { |
| 137 pWnd->Create(cp); | 163 DestroyPDFWindow(pPageView); |
| 138 | 164 return TRUE; |
| 139 | 165 } else { |
| 140 | 166 return FALSE; |
| 141 ASSERT(m_pApp != NULL); | 167 } |
| 142 CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); | 168 } |
| 143 pWnd->SetFillerNotify(pIFormFiller); | 169 } |
| 144 | 170 break; |
| 145 ASSERT(m_pWidget != NULL); | 171 case FWL_VKEY_Escape: { |
| 146 FX_INT32 nMaxLen = m_pWidget->GetMaxLen(); | 172 CPDFSDK_PageView* pPageView = this->GetCurPageView(); |
| 147 CFX_WideString swValue = m_pWidget->GetValue(); | 173 ASSERT(pPageView != NULL); |
| 148 | 174 EscapeFiller(pPageView, TRUE); |
| 149 if (nMaxLen > 0) | 175 return TRUE; |
| 150 { | 176 } |
| 151 if (pWnd->HasFlag(PES_CHARARRAY)) | 177 } |
| 152 { | 178 |
| 153 pWnd->SetCharArray(nMaxLen); | 179 return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); |
| 154 pWnd->SetAlignFormatV(PEAV_CENTER); | 180 } |
| 155 } | 181 |
| 156 else | 182 FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) { |
| 157 { | 183 ASSERT(m_pWidget != NULL); |
| 158 pWnd->SetLimitChar(nMaxLen); | 184 |
| 159 } | 185 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) |
| 160 } | 186 return pEdit->GetText() != m_pWidget->GetValue(); |
| 161 | 187 |
| 162 pWnd->SetText(swValue); | 188 return FALSE; |
| 163 | 189 } |
| 164 return pWnd; | 190 |
| 165 } | 191 void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) { |
| 166 | 192 ASSERT(m_pWidget != NULL); |
| 167 | 193 |
| 168 FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFl
ags) | 194 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { |
| 169 { | 195 CFX_WideString sOldValue = m_pWidget->GetValue(); |
| 170 switch (nChar) | 196 CFX_WideString sNewValue = pWnd->GetText(); |
| 171 { | 197 |
| 172 case FWL_VKEY_Return: | 198 m_pWidget->SetValue(sNewValue, FALSE); |
| 173 if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) | 199 m_pWidget->ResetFieldAppearance(TRUE); |
| 174 { | 200 m_pWidget->UpdateField(); |
| 175 CPDFSDK_PageView* pPageView = this->GetCurPageView(); | 201 SetChangeMark(); |
| 176 ASSERT(pPageView != NULL); | 202 } |
| 177 m_bValid = !m_bValid; | 203 } |
| 178 CPDF_Rect rcAnnot = pAnnot->GetRect(); | 204 |
| 179 m_pApp->FFI_Invalidate(pAnnot->GetPDFPage(), rcAnnot.lef
t, rcAnnot.top, rcAnnot.right, rcAnnot.bottom); | 205 void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, |
| 180 | 206 CPDF_AAction::AActionType type, |
| 181 if (m_bValid) | 207 PDFSDK_FieldAction& fa) { |
| 182 { | 208 switch (type) { |
| 183 if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRU
E)) | 209 case CPDF_AAction::KeyStroke: |
| 184 pWnd->SetFocus(); | 210 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { |
| 185 } | 211 fa.bFieldFull = pWnd->IsTextFull(); |
| 186 else | 212 |
| 187 { | 213 fa.sValue = pWnd->GetText(); |
| 188 if (CommitData(pPageView, nFlags)) | 214 |
| 189 { | 215 if (fa.bFieldFull) { |
| 190 DestroyPDFWindow(pPageView); | 216 fa.sChange = L""; |
| 191 return TRUE; | 217 fa.sChangeEx = L""; |
| 192 } | 218 } |
| 193 else | 219 } |
| 194 { | 220 break; |
| 195 return FALSE; | 221 case CPDF_AAction::Validate: |
| 196 } | 222 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { |
| 197 } | 223 fa.sValue = pWnd->GetText(); |
| 198 } | 224 } |
| 199 break; | 225 break; |
| 200 case FWL_VKEY_Escape: | 226 case CPDF_AAction::LoseFocus: |
| 201 { | 227 case CPDF_AAction::GetFocus: |
| 202 CPDFSDK_PageView* pPageView = this->GetCurPageView(); | 228 ASSERT(m_pWidget != NULL); |
| 203 ASSERT(pPageView != NULL); | 229 fa.sValue = m_pWidget->GetValue(); |
| 204 EscapeFiller(pPageView,TRUE); | 230 break; |
| 205 return TRUE; | 231 default: |
| 206 } | 232 break; |
| 207 } | 233 } |
| 208 | 234 } |
| 209 return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); | 235 |
| 210 } | 236 void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, |
| 211 | 237 CPDF_AAction::AActionType type, |
| 212 FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) | 238 const PDFSDK_FieldAction& fa) { |
| 213 { | 239 switch (type) { |
| 214 ASSERT(m_pWidget != NULL); | 240 case CPDF_AAction::KeyStroke: |
| 215 | 241 if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { |
| 216 if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) | 242 pEdit->SetFocus(); |
| 217 return pEdit->GetText() != m_pWidget->GetValue(); | 243 pEdit->SetSel(fa.nSelStart, fa.nSelEnd); |
| 218 | 244 pEdit->ReplaceSel(fa.sChange); |
| 219 return FALSE; | 245 } |
| 220 } | 246 break; |
| 221 | 247 default: |
| 222 void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) | 248 break; |
| 223 { | 249 } |
| 224 ASSERT(m_pWidget != NULL); | 250 } |
| 225 | 251 |
| 226 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) | 252 FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, |
| 227 { | 253 const PDFSDK_FieldAction& faOld, |
| 228 CFX_WideString sOldValue = m_pWidget->GetValue(); | 254 const PDFSDK_FieldAction& faNew) { |
| 229 CFX_WideString sNewValue = pWnd->GetText(); | 255 switch (type) { |
| 230 | 256 case CPDF_AAction::KeyStroke: |
| 231 m_pWidget->SetValue(sNewValue, FALSE); | 257 return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || |
| 232 m_pWidget->ResetFieldAppearance(TRUE); | 258 faOld.nSelStart != faNew.nSelStart || |
| 233 m_pWidget->UpdateField(); | 259 faOld.sChange != faNew.sChange; |
| 234 SetChangeMark(); | 260 default: |
| 235 } | 261 break; |
| 236 } | 262 } |
| 237 | 263 |
| 238 void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AA
ctionType type, | 264 return FALSE; |
| 239 PDFSDK_F
ieldAction& fa) | 265 } |
| 240 { | 266 |
| 241 switch (type) | 267 void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) { |
| 242 { | 268 ASSERT(pPageView != NULL); |
| 243 case CPDF_AAction::KeyStroke: | 269 |
| 244 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)
) | 270 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { |
| 245 { | 271 pWnd->GetSel(m_State.nStart, m_State.nEnd); |
| 246 fa.bFieldFull = pWnd->IsTextFull(); | 272 m_State.sValue = pWnd->GetText(); |
| 247 | 273 } |
| 248 fa.sValue = pWnd->GetText(); | 274 } |
| 249 | 275 |
| 250 if (fa.bFieldFull) | 276 void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) { |
| 251 { | 277 ASSERT(pPageView != NULL); |
| 252 fa.sChange = L""; | 278 |
| 253 fa.sChangeEx = L""; | 279 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) { |
| 254 } | 280 pWnd->SetText(m_State.sValue); |
| 255 } | 281 pWnd->SetSel(m_State.nStart, m_State.nEnd); |
| 256 break; | 282 } |
| 257 case CPDF_AAction::Validate: | 283 } |
| 258 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)
) | 284 |
| 259 { | 285 CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, |
| 260 fa.sValue = pWnd->GetText(); | 286 FX_BOOL bRestoreValue) { |
| 261 } | 287 if (bRestoreValue) |
| 262 break; | 288 SaveState(pPageView); |
| 263 case CPDF_AAction::LoseFocus: | 289 |
| 264 case CPDF_AAction::GetFocus: | 290 DestroyPDFWindow(pPageView); |
| 265 ASSERT(m_pWidget != NULL); | 291 |
| 266 fa.sValue = m_pWidget->GetValue(); | 292 CPWL_Wnd* pRet = NULL; |
| 267 break; | 293 |
| 268 default: | 294 if (bRestoreValue) { |
| 269 break; | 295 RestoreState(pPageView); |
| 270 } | 296 pRet = this->GetPDFWindow(pPageView, FALSE); |
| 271 } | 297 } else |
| 272 | 298 pRet = this->GetPDFWindow(pPageView, TRUE); |
| 273 void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AA
ctionType type, | 299 |
| 274 const PD
FSDK_FieldAction& fa) | 300 m_pWidget->UpdateField(); |
| 275 { | 301 |
| 276 switch (type) | 302 return pRet; |
| 277 { | 303 } |
| 278 case CPDF_AAction::KeyStroke: | 304 |
| 279 if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALS
E)) | 305 void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) { |
| 280 { | 306 ASSERT(m_pApp != NULL); |
| 281 pEdit->SetFocus(); | 307 |
| 282 pEdit->SetSel(fa.nSelStart, fa.nSelEnd); | 308 ASSERT(pWnd != NULL); |
| 283 pEdit->ReplaceSel(fa.sChange); | 309 |
| 284 } | 310 if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) { |
| 285 break; | 311 CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; |
| 286 default: | 312 pEdit->SetCharSet(134); |
| 287 break; | 313 pEdit->SetCodePage(936); |
| 288 } | 314 |
| 289 } | 315 pEdit->SetReadyToInput(); |
| 290 | 316 CFX_WideString wsText = pEdit->GetText(); |
| 291 | 317 int nCharacters = wsText.GetLength(); |
| 292 FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, cons
t PDFSDK_FieldAction& faOld, | 318 CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); |
| 293 const PD
FSDK_FieldAction& faNew) | 319 unsigned short* pBuffer = (unsigned short*)(FX_LPCSTR) bsUTFText; |
| 294 { | 320 m_pApp->FFI_OnSetFieldInputFocus( |
| 295 switch (type) | 321 m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE); |
| 296 { | 322 |
| 297 case CPDF_AAction::KeyStroke: | 323 pEdit->SetEditNotify(this); |
| 298 return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) ||
faOld.nSelStart != faNew.nSelStart || | 324 // pUndo->BeginEdit(pDocument); |
| 299 faOld.sChange != faNew.sChange; | 325 } |
| 300 default: | 326 } |
| 301 break; | 327 |
| 302 } | 328 void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) { |
| 303 | 329 } |
| 304 return FALSE; | 330 |
| 305 } | 331 FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) { |
| 306 | 332 return FALSE; |
| 307 void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) | 333 } |
| 308 { | 334 |
| 309 ASSERT(pPageView != NULL); | 335 FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) { |
| 310 | 336 return FALSE; |
| 311 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) | 337 } |
| 312 { | 338 |
| 313 pWnd->GetSel(m_State.nStart, m_State.nEnd); | 339 FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) { |
| 314 m_State.sValue = pWnd->GetText(); | 340 return FALSE; |
| 315 } | 341 } |
| 316 } | 342 |
| 317 | 343 void CFFL_TextField::DoCopy(CPDFSDK_Document* pDocument) { |
| 318 void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) | 344 } |
| 319 { | 345 |
| 320 ASSERT(pPageView != NULL); | 346 void CFFL_TextField::DoCut(CPDFSDK_Document* pDocument) { |
| 321 | 347 } |
| 322 if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) | 348 |
| 323 { | 349 void CFFL_TextField::DoPaste(CPDFSDK_Document* pDocument) { |
| 324 pWnd->SetText(m_State.sValue); | 350 } |
| 325 pWnd->SetSel(m_State.nStart, m_State.nEnd); | 351 |
| 326 } | 352 void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) { |
| 327 } | 353 } |
| 328 | |
| 329 CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bR
estoreValue) | |
| 330 { | |
| 331 if (bRestoreValue) | |
| 332 SaveState(pPageView); | |
| 333 | |
| 334 DestroyPDFWindow(pPageView); | |
| 335 | |
| 336 CPWL_Wnd* pRet = NULL; | |
| 337 | |
| 338 if (bRestoreValue) | |
| 339 { | |
| 340 RestoreState(pPageView); | |
| 341 pRet = this->GetPDFWindow(pPageView, FALSE); | |
| 342 } | |
| 343 else | |
| 344 pRet = this->GetPDFWindow(pPageView, TRUE); | |
| 345 | |
| 346 m_pWidget->UpdateField(); | |
| 347 | |
| 348 return pRet; | |
| 349 } | |
| 350 | |
| 351 void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) | |
| 352 { | |
| 353 ASSERT(m_pApp != NULL); | |
| 354 | |
| 355 ASSERT(pWnd != NULL); | |
| 356 | |
| 357 if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) | |
| 358 { | |
| 359 CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; | |
| 360 pEdit->SetCharSet(134); | |
| 361 pEdit->SetCodePage(936); | |
| 362 | |
| 363 pEdit->SetReadyToInput(); | |
| 364 CFX_WideString wsText = pEdit->GetText(); | |
| 365 int nCharacters = wsText.GetLength(); | |
| 366 CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); | |
| 367 unsigned short* pBuffer = (unsigned short*)(FX_LPCSTR)bsUTFText; | |
| 368 m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuf
fer, nCharacters, TRUE); | |
| 369 | |
| 370 pEdit->SetEditNotify(this); | |
| 371 //pUndo->BeginEdit(pDocument); | |
| 372 } | |
| 373 } | |
| 374 | |
| 375 void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) | |
| 376 { | |
| 377 | |
| 378 } | |
| 379 | |
| 380 FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) | |
| 381 { | |
| 382 return FALSE; | |
| 383 } | |
| 384 | |
| 385 FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) | |
| 386 { | |
| 387 return FALSE; | |
| 388 } | |
| 389 | |
| 390 FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) | |
| 391 { | |
| 392 return FALSE; | |
| 393 } | |
| 394 | |
| 395 void CFFL_TextField::DoCopy(CPDFSDK_Document* pDocument) | |
| 396 { | |
| 397 | |
| 398 } | |
| 399 | |
| 400 void CFFL_TextField::DoCut(CPDFSDK_Document* pDocument) | |
| 401 { | |
| 402 } | |
| 403 | |
| 404 void CFFL_TextField::DoPaste(CPDFSDK_Document* pDocument) | |
| 405 { | |
| 406 | |
| 407 } | |
| 408 | |
| 409 void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) | |
| 410 { | |
| 411 } | |
| 412 | |
| OLD | NEW |