1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FormFiller.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_FormFiller.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_IFormFiller.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_CBA_Fontmap.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_ComboBox.h" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CFFL_ComboBox ------------------------------- */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) : 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_FormFiller(pApp, pAnnot), m_pFontMap( NULL ) 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //m_pFontMap = new CBA_FontMap( pAnnot, GetSystemHandler() ); 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_State.nIndex = 0; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_State.nStart = 0; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_State.nEnd = 0; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_ComboBox::~CFFL_ComboBox() 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pFontMap) 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_pFontMap; 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFontMap = NULL; 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// for (int i=0,sz=m_IMBox.GetSize(); i<sz; i++) 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// { 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// delete m_IMBox.GetAt(i); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// } 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// m_IMBox.RemoveAll(); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPWL_CREATEPARAM CFFL_ComboBox::GetCreateParam() 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nFlags = m_pWidget->GetFieldFlags(); 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFlags & FIELDFLAG_EDIT) 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT; 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFlags & FIELDFLAG_COMMITONSELCHANGE) 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bCommitOnSelectChange = TRUE; 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pFontMap) 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(this->m_pApp != NULL); 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler()); 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFontMap->Initial(); 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cp.pFontMap = m_pFontMap; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cp.pFocusHandler = this; 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return cp; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_ComboBox * pWnd = new CPWL_ComboBox(); 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->AttachFFLData(this); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->Create(cp); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pApp != NULL); 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller(); 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetFillerNotify(pFormFiller); 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nCurSel = m_pWidget->GetSelectedIndex(0); 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString swText; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCurSel < 0) 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov swText = m_pWidget->GetValue(); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov swText = m_pWidget->GetOptionLabel(nCurSel); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_pWidget->CountOptions(); i<sz; i++) 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->AddString(m_pWidget->GetOptionLabel(i)); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetSelect(nCurSel); 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetText(swText); 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pWnd; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox * pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nCurSel = pWnd->GetSelect(); 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT) 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCurSel >= 0) 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nCurSel != m_pWidget->GetSelectedIndex(0); 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pWnd->GetText() != m_pWidget->GetValue(); 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nCurSel != m_pWidget->GetSelectedIndex(0); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString swText = pWnd->GetText(); 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nCurSel = pWnd->GetSelect(); 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //mantis:0004157 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bSetValue = TRUE; 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT) 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nCurSel >= 0) 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (swText != m_pWidget->GetOptionLabel(nCurSel)) 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bSetValue = TRUE; 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bSetValue = FALSE; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bSetValue = TRUE; 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bSetValue = FALSE; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString sOldValue; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bSetValue) 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sOldValue = m_pWidget->GetValue(); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->SetValue(swText, FALSE); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->GetSelectedIndex(0); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->ResetFieldAppearance(TRUE); 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->UpdateField(); 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetChangeMark(); 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->GetPDFPage(); 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void CFFL_ComboBox::GetActionData( CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, PDFSDK_FieldAction& fa) 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (type) 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::KeyStroke: 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.bFieldFull = pEdit->IsTextFull(); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelStart = 0; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelEnd = 0; 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->GetSel(nSelStart, nSelEnd); 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.nSelEnd = nSelEnd; 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.nSelStart = nSelStart; 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sValue = pEdit->GetText(); 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sChangeEx = GetSelectExportText(); 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (fa.bFieldFull) 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sChange = L""; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sChangeEx = L""; 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::Validate: 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sValue = pEdit->GetText(); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::LoseFocus: 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::GetFocus: 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fa.sValue = m_pWidget->GetValue(); 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const PDFSDK_FieldAction& fa) 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (type) 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::KeyStroke: 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetSel(fa.nSelStart, fa.nSelEnd); 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->ReplaceSel(fa.sChange); 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const PDFSDK_FieldAction& faNew) 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (type) 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case CPDF_AAction::KeyStroke: 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || faOld.nSelStart != faNew.nSelStart || 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov faOld.sChange != faNew.sChange; 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pPageView != NULL); 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_State.nIndex = pComboBox->GetSelect(); 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->GetSel(m_State.nStart, m_State.nEnd); 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_State.sValue = pEdit->GetText(); 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pPageView != NULL); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, TRUE)) 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_State.nIndex >= 0) 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pComboBox->SetSelect(m_State.nIndex); 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetText(m_State.sValue); 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetSel(m_State.nStart, m_State.nEnd); 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue) 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bRestoreValue) 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SaveState(pPageView); 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov DestroyPDFWindow(pPageView); 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd* pRet = NULL; 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bRestoreValue) 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RestoreState(pPageView); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRet = this->GetPDFWindow(pPageView, FALSE); 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pRet = this->GetPDFWindow(pPageView, TRUE); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->UpdateField(); 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pRet; 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag) 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nFlags = m_pWidget->GetFieldFlags(); 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nFlags & FIELDFLAG_COMMITONSELCHANGE) 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bValid) 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_PageView* pPageView = this->GetCurPageView(); 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pPageView != NULL); 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CommitData(pPageView, nFlag)) 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov DestroyPDFWindow(pPageView); 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bValid = FALSE; 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd) 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pApp != NULL); 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pWnd != NULL); 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetCharSet(134); 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetCodePage(936); 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetReadyToInput(); 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString wsText = pEdit->GetText(); 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nCharacters = wsText.GetLength(); 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unsigned short* pBuffer = (unsigned short*)(FX_LPCSTR)bsUTFText; 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE); 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pEdit->SetEditNotify(this); 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd) 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pApp != NULL); 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument) 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument) 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument) 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::DoCopy(CPDFSDK_Document* pDocument) 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::DoCut(CPDFSDK_Document* pDocument) 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::DoPaste(CPDFSDK_Document* pDocument) 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pDocument != NULL); 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pEdit != NULL); 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CFFL_ComboBox::GetSelectExportText() 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString swRet; 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nExport = -1; 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_PageView *pPageView = GetCurPageView(); 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ComboBox * pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nExport = pComboBox->GetSelect(); 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nExport >= 0) 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPDF_FormField * pFormField = m_pWidget->GetFormField()) 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov swRet = pFormField->GetOptionValue(nExport); 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (swRet.IsEmpty()) 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov swRet = pFormField->GetOptionLabel(nExport); 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return swRet; 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 443