1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_FormFiller.h" 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_IFormFiller.h" 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_CheckBox.h" 10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_ComboBox.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_ListBox.h" 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_PushButton.h" 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_RadioButton.h" 14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/formfiller/FFL_TextField.h" 15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define FFL_MAXLISTBOXHEIGHT 140.0f 17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// HHOOK CFFL_IFormFiller::m_hookSheet = NULL; 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// MSG CFFL_IFormFiller::g_Msg; 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ----------------------------- CFFL_IFormFiller ----------------------------- */ 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) : 24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pApp(pApp), 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying(FALSE) 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFFL_IFormFiller::~CFFL_IFormFiller() 30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_POSITION pos = m_Maps.GetStartPosition(); 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov while (pos) 33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Annot * pAnnot = NULL; 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller * pFormFiller = NULL; 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_Maps.GetNextAssoc(pos,pAnnot,pFormFiller); 37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov delete pFormFiller; 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_Maps.RemoveAll(); 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point) 43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rc = pAnnot->GetRect(); 45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if(rc.Contains(point.x, point.y)) 46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) 51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->GetViewBBox(pPageView, pAnnot); 55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); 62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPDFAnnot != NULL); 63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcAnnot; 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pPDFAnnot->GetRect(rcAnnot); 66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CRect rcWin; 68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// pPageView->DocToWindow(rcAnnot, rcWin); 69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot,1); 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// rcWin.InflateRect(1, 1); 71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return rcWin.GetOutterRect(); 73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /*const CRect& rcWindow,*/ FX_DWORD dwFlags) 79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsVisible(pWidget)) 84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller->IsValid()) 88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); 90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pAnnot->GetPDFPage(); 92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Document* pDocument = m_pApp->GetCurrentDoc(); 95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pDocument != NULL); 96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pDocument->GetFocusAnnot() == pAnnot) 98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView); 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!rcFocus.IsEmpty()) 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_PathData path; 103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPointCount(5); 105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO); 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO); 107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO); 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO); 109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO); 110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_GraphStateData gsd; 112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov gsd.SetDashCount(1); 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov gsd.m_DashArray[0] = 1.0f; 114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov gsd.m_DashPhase = 0; 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov gsd.m_LineWidth = 1.0f; 117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,0,0,0), FXFILL_ALTERNATE); 118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov // ::DrawFocusRect(hDC, &rcFocus); 120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return; 124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); 129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); 131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget)) 133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->DrawShadow(pDevice, pPageView); 135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) 141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnCreate(pAnnot); 145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) 149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnLoad(pAnnot); 153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) 157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnDelete(pAnnot); 161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov UnRegisterFormFiller(pAnnot); 164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag) 167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::CursorEnter)) 175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pWidget->GetValueAge(); 179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView ); 190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //if ( !IsValidAnnot(pPageView, pAnnot) ) return; 193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->IsAppModified()) 195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->ResetPDFWindow(pPageView, pWidget->GetValueAge() == nValueAge); 199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) 205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnMouseEnter(pPageView, pAnnot); 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag) 211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::CursorExit)) 219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->GetAppearanceAge(); 222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pWidget->GetValueAge(); 223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView); 234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //if (!IsValidAnnot(pPageView, pAnnot)) return; 237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->IsAppModified()) 239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) 241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); 243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnMouseExit(pPageView, pAnnot); 251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (Annot_HitTest(pPageView, pAnnot, point) && pWidget->GetAAction(CPDF_AAction::ButtonDown)) 263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->GetAppearanceAge(); 266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pWidget->GetValueAge(); 267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags); 275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags); 276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView); 277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsValidAnnot(pPageView, pAnnot)) return TRUE; 280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->IsAppModified()) 282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) 284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); 286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); 294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov // CReader_Page* pPage = pAnnot->GetPage(); 306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov // ASSERT(pPage != NULL); 307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Document* pDocument = m_pApp->GetCurrentDoc(); 308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pDocument != NULL); 309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (pWidget->GetFieldType()) 311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_PUSHBUTTON: 313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_CHECKBOX: 314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_RADIOBUTTON: 315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y)) 316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pDocument->SetFocusAnnot(pAnnot); 318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pDocument->SetFocusAnnot(pAnnot); 322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bRet = FALSE; 326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); 330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pDocument->GetFocusAnnot() == pAnnot) 333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bExit = FALSE; 335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bReset = FALSE; 336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov OnButtonUp(pWidget, pPageView, bReset, bExit,nFlags); 337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bExit) return TRUE; 338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return bRet; 340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag) 343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) 349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nAge = pWidget->GetAppearanceAge(); 352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pWidget->GetValueAge(); 353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CReader_DocView* pDocView = pPageView->GetDocView(); 356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pDocView != NULL); 357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView); 365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsValidAnnot(pPageView, pWidget)) 368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bExit = TRUE; 370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return; 371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (nAge != pWidget->GetAppearanceAge()) 374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) 376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); 378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bReset = TRUE; 381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); 394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //change cursor 405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) 406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); 408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point) 414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); 421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); 434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); 447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnRButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnRButtonDblClk(pPageView, pAnnot, nFlags, point); 460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) 466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags); 473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) 479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (nChar == FWL_VKEY_Tab) return TRUE; 484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller->OnChar(pAnnot, nChar, nFlags); 488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnDeSelected(CPDFSDK_Annot* pAnnot) 494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnDeSelected(pAnnot); 501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnSelected(CPDFSDK_Annot* pAnnot) 505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnSelected(pAnnot); 512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) 516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if(!pAnnot) return FALSE; 518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::GetFocus)) 524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->GetAppearanceAge(); 527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pWidget->GetValueAge(); 528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); 532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE); 540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if(!pFormFiller) return FALSE; 541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa); 542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView); 544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov // if (!IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pAnnot)) return FALSE; 547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->IsAppModified()) 549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) 551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); 553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) 559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller->OnSetFocus(pAnnot, nFlag)) 561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) 572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if(!pAnnot) return FALSE; 574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller->OnKillFocus(pAnnot, nFlag)) 579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) 584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_PageView* pPageView = pWidget->GetPageView(); 589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa); 596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView); 598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) 611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pWidget->IsVisible(); 613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) 616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nFieldFlags = pWidget->GetFieldFlags(); 620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY; 622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) 625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) 629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Page* pPage = pWidget->GetPDFPage(); 633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPage != NULL); 634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Document* pDocument = pPage->m_pDocument; 636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pDocument != NULL); 637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_DWORD dwPermissions = pDocument->GetUserPermissions(); 639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return (dwPermissions&FPDFPERM_FILL_FORM) || 640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov (dwPermissions&FPDFPERM_ANNOT_FORM) || 641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov (dwPermissions&FPDFPERM_MODIFY); 642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister) 647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pAnnot != NULL); 649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller * pFormFiller = NULL; 652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_Maps.Lookup(pAnnot, pFormFiller); 653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller) 655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller; 656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bRegister) 658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nFieldType = pWidget->GetFieldType(); 662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch(nFieldType) 663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_PUSHBUTTON: 665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_PushButton(m_pApp, pWidget); 666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_CHECKBOX: 668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_CheckBox(m_pApp, pWidget); 669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_RADIOBUTTON: 671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_RadioButton(m_pApp, pWidget); 672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_TEXTFIELD: 674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_TextField(m_pApp, pWidget); 675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_LISTBOX: 677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_ListBox(m_pApp, pWidget); 678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_COMBOBOX: 680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = new CFFL_ComboBox(m_pApp, pWidget); 681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FIELDTYPE_UNKNOWN: 683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller = NULL; 685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller) 689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_Maps.SetAt(pAnnot, pFormFiller); 691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFormFiller; 695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) 698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if ( pAnnot != NULL ) 700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov UnRegisterFormFiller( pAnnot ); 702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) 706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller * pFormFiller = NULL; 708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_Maps.Lookup(pAnnot,pFormFiller)) 710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pFormFiller) 712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov delete pFormFiller; 713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_Maps.RemoveKey(pAnnot); 714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, FX_BOOL bNext) 718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, FX_INT32 & nRet, FX_FLOAT & fPopupRet) 723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPrivateData != NULL); 725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcPageView(0,0,0,0); 732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth(); 733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight(); 734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov rcPageView.Normalize(); 735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pData->pWidget != NULL); 738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcAnnot = pData->pWidget->GetRect(); 739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fTop = 0.0f; 741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fBottom = 0.0f; 742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Widget * pWidget = (CPDFSDK_Widget*)pData->pWidget; 744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (pWidget->GetRotate() / 90) 745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 0: 748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fTop = rcPageView.top - rcAnnot.top; 749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fBottom = rcAnnot.bottom - rcPageView.bottom; 750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 1: 752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fTop = rcAnnot.left - rcPageView.left; 753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fBottom = rcPageView.right - rcAnnot.right; 754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 2: 756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fTop = rcAnnot.bottom - rcPageView.bottom; 757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fBottom = rcPageView.top - rcAnnot.top; 758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 3: 760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fTop = rcPageView.right - rcAnnot.right; 761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fBottom = rcAnnot.left - rcPageView.left; 762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fFactHeight = 0; 766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bBottom = TRUE; 767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fMaxListBoxHeight = 0; 768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fPopupMax > FFL_MAXLISTBOXHEIGHT) 769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fPopupMin > FFL_MAXLISTBOXHEIGHT) 771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fMaxListBoxHeight = fPopupMin; 773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT; 777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fMaxListBoxHeight = fPopupMax; 781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fBottom > fMaxListBoxHeight) 783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFactHeight = fMaxListBoxHeight; 785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bBottom = TRUE; 786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fTop > fMaxListBoxHeight) 790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFactHeight = fMaxListBoxHeight; 792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bBottom = FALSE; 793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fTop > fBottom) 797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFactHeight = fTop; 799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bBottom = FALSE; 800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFactHeight = fBottom; 804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bBottom = TRUE; 805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nRet = bBottom ? 0 : 1; 810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fPopupRet = fFactHeight; 811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnSetWindowRect(void* pPrivateData, const CPDF_Rect & rcWindow) 814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPrivateData != NULL); 816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, TRUE)) 820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcOld = pFormFiller->PWLtoFFL(pFormFiller->GetWindowRect(pData->pPageView)); 823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect rcNew = pFormFiller->PWLtoFFL(rcWindow); 824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->SetWindowRect(pData->pPageView, rcWindow); 825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect unRect = rcOld; 827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov unRect.Union(rcNew); 828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //FX_RECT rcRect = unRect.GetOutterRect(); 829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov unRect.left = (FX_FLOAT)(unRect.left - 0.5); 830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov unRect.right = (FX_FLOAT)(unRect.right + 0.5); 831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov unRect.top = (FX_FLOAT)(unRect.top + 0.5); 832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov unRect.bottom = (FX_FLOAT)(unRect.bottom -0.5); 833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pApp->FFI_Invalidate(pData->pWidget->GetPDFPage(), unRect.left, unRect.top, unRect.right, unRect.bottom); 834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode, CFX_WideString& strChange, 838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, 839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL & bRC, FX_BOOL & bExit) 840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPrivateData != NULL); 842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pData->pWidget != NULL); 844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); 846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pFormFiller != NULL); 847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnKeyStroke(bKeyDown); 849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) 852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) 857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CReader_DocView* pDocView = pPageView->GetDocView(); 863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pDocView != NULL); 864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bWillCommit = TRUE; 871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.nCommitKey = GetCommitKey(); 872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bKeyDown = GetKeyDown(); 873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bRC = TRUE; 874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); 876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pFormFiller != NULL); 877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa); 879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->SaveState(pPageView); 880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction faOld = fa; 882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView); 883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bRC = fa.bRC; 885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); 886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) 893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pWidget->GetAAction(CPDF_AAction::Validate)) 898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->ClearAppModified(); 901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CReader_DocView* pDocView = pPageView->GetDocView(); 904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pDocView != NULL); 905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bKeyDown = GetKeyDown(); 912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bRC = TRUE; 913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); 915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pFormFiller != NULL); 916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa); 918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->SaveState(pPageView); 919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction faOld = fa; 921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView); 922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bRC = fa.bRC; 924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); 925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag) 932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CReader_DocView* pDocView = pPageView->GetDocView(); 938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pDocView != NULL); 939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); 940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pDocument != NULL); 941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); 943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pInterForm != NULL); 944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pInterForm->OnCalculate(pWidget->GetFormField()); 946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); 948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag) 954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pWidget != NULL); 958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// CReader_DocView* pDocView = pPageView->GetDocView(); 960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ASSERT(pDocView != NULL); 961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); 962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pDocument != NULL); 963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); 965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pInterForm != NULL); 966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bFormated = FALSE; 968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_WideString sValue = pInterForm->OnFormat(pWidget->GetFormField(), GetCommitKey(), bFormated); 969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); 971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bExit) return; 973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bFormated) 975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(), TRUE); 977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pInterForm->UpdateField(pWidget->GetFormField()); 978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// LRESULT CALLBACK CFFL_IFormFiller::FFL_WndProc( 985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// int code, // hook code 986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// WPARAM wParam, // virtual-key code 987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// LPARAM lParam // keystroke-message information 988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// ) 989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// { 990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// if (code != HC_ACTION) 991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// { 992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// return CallNextHookEx (m_hookSheet, code, wParam, lParam); 993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// } 994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// FXSYS_memcpy(&g_Msg, (void*)lParam, sizeof(MSG)); 996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// return 0; 998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// } 999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// MSG CFFL_IFormFiller::GetLastMessage() 1001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// { 1002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// return g_Msg; 1003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// } 1004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CFFL_IFormFiller::GetCommitKey() 1006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// MSG msg = CFFL_IFormFiller::GetLastMessage(); 1008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nCommitKey = 0; 1010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// switch (msg.message) 1011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// { 1012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// case WM_LBUTTONDOWN: 1013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// case WM_LBUTTONUP: 1014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// nCommitKey = 1; 1015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// break; 1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// case WM_KEYDOWN: 1017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// switch (msg.wParam) 1018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// { 1019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// case VK_RETURN: 1020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// nCommitKey = 2; 1021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// break; 1022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// case VK_TAB: 1023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// nCommitKey = 3; 1024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// break; 1025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// } 1026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// break; 1027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// } 1028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return nCommitKey; 1030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::GetKeyDown() 1033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 1035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// MSG msg = CFFL_IFormFiller::GetLastMessage(); 1036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 1037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// return msg.message == WM_KEYDOWN || msg.message == WM_CHAR; 1038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) 1041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPageView != NULL); 1044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pAnnot != NULL); 1045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if(pPageView) 1047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot()); 1048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 1049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 1050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::BeforeUndo(CPDFSDK_Document* pDocument) 1053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::BeforeRedo(CPDFSDK_Document* pDocument) 1058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov BeforeUndo(pDocument); 1060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::AfterUndo(CPDFSDK_Document* pDocument) 1063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::AfterRedo(CPDFSDK_Document* pDocument) 1067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::CanCopy(CPDFSDK_Document* pDocument) 1071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 1074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::CanCut(CPDFSDK_Document* pDocument) 1077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 1080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFFL_IFormFiller::CanPaste(CPDFSDK_Document* pDocument) 1083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 1086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::DoCopy(CPDFSDK_Document* pDocument) 1089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::DoCut(CPDFSDK_Document* pDocument) 1093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::DoPaste(CPDFSDK_Document* pDocument) 1097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode, 1101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_WideString & strChange, const CFX_WideString& strChangeEx, 1102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nSelStart, int nSelEnd, 1103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) 1104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPrivateData != NULL); 1106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 1107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pData->pWidget != NULL); 1108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); 1110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pFormFiller != NULL); 1111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_bNotifying) 1113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) 1115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = TRUE; 1117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nAge = pData->pWidget->GetAppearanceAge(); 1118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nValueAge = pData->pWidget->GetValueAge(); 1119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pData->pPageView != NULL); 1121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument(); 1122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PDFSDK_FieldAction fa; 1124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 1125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 1126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.sChange = strChange; 1127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.sChangeEx = strChangeEx; 1128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bKeyDown = bKeyDown; 1129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bWillCommit = FALSE; 1130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.bRC = TRUE; 1131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.nSelStart = nSelStart; 1132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fa.nSelEnd = nSelEnd; 1133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa); 1136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->SaveState(pData->pPageView); 1137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pData->pPageView)) 1139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsValidAnnot(pData->pPageView, pData->pWidget)) 1141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bExit = TRUE; 1143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 1144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return; 1145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (nAge != pData->pWidget->GetAppearanceAge()) 1148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(pData->pPageView, nValueAge == pData->pWidget->GetValueAge()); 1150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); 1151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bExit = TRUE; 1152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (fa.bRC) 1155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa); 1157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bRC = FALSE; 1158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 1160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->RestoreState(pData->pPageView); 1162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bRC = FALSE; 1163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pDocument->GetFocusAnnot() != pData->pWidget) 1166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->CommitData(pData->pPageView,nFlag); 1168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bExit = TRUE; 1169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 1172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsValidAnnot(pData->pPageView, pData->pWidget)) 1174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 1175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bExit = TRUE; 1176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 1177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return; 1178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bNotifying = FALSE; 1182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit,FX_DWORD nFlag) 1187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 1188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pPrivateData != NULL); 1189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 1190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pData->pWidget != NULL); 1191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); 1193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(pFormFiller != NULL); 1194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!bEditOrList) 1196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pFormFiller->OnKeyStroke(bExit); 1197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1198