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.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fsdk_baseform.h"
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <memory>
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/formfiller/FFL_FormFiller.h"
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fsdk_actionhandler.h"
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fsdk_baseannot.h"
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fsdk_define.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fsdk_mgr.h"
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/javascript/IJavaScript.h"
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/pdfwindow/PWL_Utils.h"
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01)
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot,
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CPDFSDK_PageView* pPageView,
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CPDFSDK_InterForm* pInterForm)
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : CPDFSDK_BAAnnot(pAnnot, pPageView),
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pInterForm(pInterForm),
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nAppAge(0),
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nValueAge(0)
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ,
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_hMixXFAWidget(NULL),
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pWidgetHandler(NULL)
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann{
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Widget::~CPDFSDK_Widget() {}
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() const {
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!m_hMixXFAWidget) {
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CFX_WideString sName;
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (this->GetFieldType() == FIELDTYPE_RADIOBUTTON) {
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sName = this->GetAnnotName();
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (sName.IsEmpty())
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sName = GetName();
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sName = GetName();
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (!sName.IsEmpty())
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_hMixXFAWidget = pDocView->GetWidgetByName(sName);
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_hMixXFAWidget;
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_Widget* CPDFSDK_Widget::GetGroupMixXFAWidget() {
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString sName = GetName();
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!sName.IsEmpty())
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pDocView->GetWidgetByName(sName);
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return nullptr;
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() const {
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) {
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!m_pWidgetHandler) {
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pWidgetHandler = pDocView->GetWidgetHandler();
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_pWidgetHandler;
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic XFA_EVENTTYPE GetXFAEventType(PDFSDK_XFAAActionType eXFAAAT) {
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eXFAAAT) {
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PDFSDK_XFA_Click:
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_Click;
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PDFSDK_XFA_Full:
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_Full;
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PDFSDK_XFA_PreOpen:
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_PreOpen;
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PDFSDK_XFA_PostOpen:
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_PostOpen;
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return eEventType;
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic XFA_EVENTTYPE GetXFAEventType(CPDF_AAction::AActionType eAAT,
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     FX_BOOL bWillCommit) {
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown;
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eAAT) {
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::CursorEnter:
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_MouseEnter;
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::CursorExit:
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_MouseExit;
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::ButtonDown:
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_MouseDown;
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::ButtonUp:
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_MouseUp;
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::GetFocus:
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_Enter;
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::LoseFocus:
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_Exit;
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageOpen:
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageClose:
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageVisible:
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageInvisible:
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::KeyStroke:
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!bWillCommit) {
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        eEventType = XFA_EVENT_Change;
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Validate:
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eEventType = XFA_EVENT_Validate;
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::OpenPage:
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::ClosePage:
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Format:
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Calculate:
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::CloseDocument:
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::SaveDocument:
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::DocumentSaved:
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PrintDocument:
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::DocumentPrinted:
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return eEventType;
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT) {
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT);
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          GetFieldType() == FIELDTYPE_RADIOBUTTON) {
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) {
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pXFAWidgetHandler->HasEvent(pAcc, eEventType))
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return TRUE;
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      {
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pXFAWidgetHandler->HasEvent(pAcc, eEventType);
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     PDFSDK_FieldAction& data,
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     CPDFSDK_PageView* pPageView) {
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT);
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (eEventType != XFA_EVENT_Unknown) {
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_EventParam param;
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_eType = eEventType;
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsChange = data.sChange;
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iCommitKey = data.nCommitKey;
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bShift = data.bShift;
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iSelStart = data.nSelStart;
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iSelEnd = data.nSelEnd;
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsFullText = data.sValue;
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bKeyDown = data.bKeyDown;
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bModifier = data.bModifier;
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsNewText = data.sValue;
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (data.nSelEnd > data.nSelStart)
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          param.m_wsNewText.Delete(data.nSelStart,
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   data.nSelEnd - data.nSelStart);
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int i = 0; i < data.sChange.GetLength(); i++)
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]);
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsPrevText = data.sValue;
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) &&
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            GetFieldType() == FIELDTYPE_RADIOBUTTON) {
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) {
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget);
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            param.m_pTarget = pAcc;
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pXFAWidgetHandler->ProcessEvent(pAcc, &param);
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          {
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            param.m_pTarget = pAcc;
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return nRet == XFA_EVENTERROR_Sucess;
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          param.m_pTarget = pAcc;
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return nRet == XFA_EVENTERROR_Sucess;
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pDocView->UpdateDocView();
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::Synchronize(FX_BOOL bSynchronizeElse) {
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_FormField* pFormField = GetFormField();
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ASSERT(pFormField != NULL);
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        switch (GetFieldType()) {
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case FIELDTYPE_CHECKBOX:
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case FIELDTYPE_RADIOBUTTON: {
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDF_FormControl* pFormCtrl = GetFormControl();
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            ASSERT(pFormCtrl != NULL);
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_CHECKSTATE eCheckState =
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off;
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->SetCheckState(eCheckState);
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } break;
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case FIELDTYPE_TEXTFIELD:
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case FIELDTYPE_LISTBOX: {
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->ClearAllSelections();
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 i++) {
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              int nIndex = pFormField->GetSelectedIndex(i);
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } break;
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case FIELDTYPE_COMBOBOX: {
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->ClearAllSelections();
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz;
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 i++) {
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              int nIndex = pFormField->GetSelectedIndex(i);
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pWidgetAcc->SetItemState(nIndex, TRUE, FALSE);
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit);
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bSynchronizeElse)
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pWidgetAcc->ProcessValueChanged();
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SynchronizeXFAValue() {
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_DocView* pXFADocView = pDoc->GetXFADocView();
314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pXFADocView)
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (GetXFAWidgetHandler()) {
319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, GetFormField(),
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          GetFormControl());
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SynchronizeXFAItems() {
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_DocView* pXFADocView = pDoc->GetXFADocView();
329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pXFADocView)
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (GetXFAWidgetHandler())
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      SynchronizeXFAItems(pXFADocView, hWidget, GetFormField(), nullptr);
335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SynchronizeXFAValue(IXFA_DocView* pXFADocView,
339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         IXFA_Widget* hWidget,
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CPDF_FormField* pFormField,
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CPDF_FormControl* pFormControl) {
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pXFADocView != NULL);
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(hWidget != NULL);
344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) {
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormField != NULL);
347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormControl != NULL);
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (pFormField->GetFieldType()) {
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_CHECKBOX: {
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pFormField->CheckControl(pFormField->GetControlIndex(pFormControl),
356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   bChecked, TRUE);
357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_RADIOBUTTON: {
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pFormField->CheckControl(pFormField->GetControlIndex(pFormControl),
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   bChecked, TRUE);
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_TEXTFIELD: {
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_WideString sValue;
372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pFormField->SetValue(sValue, TRUE);
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_LISTBOX: {
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearSelection(FALSE);
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            int nIndex = pWidgetAcc->GetSelectedItem(i);
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pFormField->SetItemSelection(nIndex, TRUE, TRUE);
386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_COMBOBOX: {
391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearSelection(FALSE);
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) {
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            int nIndex = pWidgetAcc->GetSelectedItem(i);
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (nIndex > -1 && nIndex < pFormField->CountOptions()) {
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pFormField->SetItemSelection(nIndex, TRUE, TRUE);
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_WideString sValue;
404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pFormField->SetValue(sValue, TRUE);
406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SynchronizeXFAItems(IXFA_DocView* pXFADocView,
413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         IXFA_Widget* hWidget,
414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CPDF_FormField* pFormField,
415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CPDF_FormControl* pFormControl) {
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pXFADocView != NULL);
417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(hWidget != NULL);
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) {
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormField != NULL);
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (pFormField->GetFieldType()) {
423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_LISTBOX: {
424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearSelection(FALSE);
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearOptions(TRUE);
426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               i++) {
431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CFX_WideString swText;
432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->GetChoiceListItem(swText, i);
433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pFormField->InsertOption(swText, i, TRUE);
435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case FIELDTYPE_COMBOBOX: {
439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearSelection(FALSE);
440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->ClearOptions(FALSE);
441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_WidgetAcc* pWidgetAcc =
443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pXFAWidgetHandler->GetDataAcc(hWidget)) {
444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz;
445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               i++) {
446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CFX_WideString swText;
447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pWidgetAcc->GetChoiceListItem(swText, i);
448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pFormField->InsertOption(swText, i, FALSE);
450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormField->SetValue(L"", TRUE);
454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid(
461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Annot::AppearanceMode mode) {
462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pAP)
464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // Choose the right sub-ap
467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const FX_CHAR* ap_entry = "N";
468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (mode == CPDF_Annot::Down)
469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ap_entry = "D";
470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  else if (mode == CPDF_Annot::Rollover)
471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ap_entry = "R";
472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pAP->KeyExist(ap_entry))
473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ap_entry = "N";
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // Get the AP stream or subdirectory
476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* psub = pAP->GetElementValue(ap_entry);
477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!psub)
478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nFieldType = GetFieldType();
481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nFieldType) {
482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_PUSHBUTTON:
483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_COMBOBOX:
484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_LISTBOX:
485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_TEXTFIELD:
486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_SIGNATURE:
487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return psub->IsStream();
488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_CHECKBOX:
489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_RADIOBUTTON:
490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CPDF_Dictionary* pSubDict = psub->AsDictionary()) {
491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pSubDict->GetStream(GetAppState()) != NULL;
492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetFieldType() const {
499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return GetFormField()->GetFieldType();
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::IsAppearanceValid() {
503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument();
505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pSDKDoc->GetXFADocument();
506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nDocType = pDoc->GetDocType();
507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nDocType != DOCTYPE_PDF && nDocType != DOCTYPE_STATIC_XFA)
508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CPDFSDK_BAAnnot::IsAppearanceValid();
511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetFieldFlags() const {
514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormControl =
516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict());
517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = pFormControl->GetField();
518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetFieldFlags();
519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDFSDK_Widget::GetSubType() const {
522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nType = GetFieldType();
523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nType == FIELDTYPE_SIGNATURE)
525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return BFFT_SIGNATURE;
526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CPDFSDK_Annot::GetSubType();
527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_FormField* CPDFSDK_Widget::GetFormField() const {
530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return GetFormControl()->GetField();
531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_FormControl* CPDFSDK_Widget::GetFormControl() const {
534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pPDFInterForm->GetControlByDict(GetAnnotDict());
536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_FormControl* CPDFSDK_Widget::GetFormControl(
539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_InterForm* pInterForm,
540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CPDF_Dictionary* pAnnotDict) {
541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pAnnotDict);
542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pInterForm->GetControlByDict(pAnnotDict);
543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetRotate() const {
546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pCtrl = GetFormControl();
547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pCtrl->GetRotation() % 360;
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetName() const {
552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetFullName();
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const {
558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int iColorType = 0;
560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType));
561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return iColorType != COLORTYPE_TRANSPARENT;
563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const {
566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int iColorType = 0;
568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType));
569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return iColorType != COLORTYPE_TRANSPARENT;
571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const {
574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasColor()) {
577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_ARGB argb;
578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int iColorType = COLORTYPE_TRANSPARENT;
579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetColor(argb, iColorType);
580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    color = FX_ARGBTOCOLORREF(argb);
581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return iColorType != COLORTYPE_TRANSPARENT;
583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPDFSDK_Widget::GetFontSize() const {
589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance();
591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csFont = "";
592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fFontSize = 0.0f;
593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pDa.GetFont(csFont, fFontSize);
594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return fFontSize;
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetSelectedIndex(int nIndex) const {
599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nIndex < pWidgetAcc->CountSelectedItems())
604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return pWidgetAcc->GetSelectedItem(nIndex);
605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetSelectedIndex(nIndex);
611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) const {
615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CFX_WideString sValue;
619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pWidgetAcc->GetValue(sValue, bDisplay ? XFA_VALUEPICTURE_Display
620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              : XFA_VALUEPICTURE_Edit);
621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return sValue;
622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else
626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetValue() const {
627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetValue();
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetDefaultValue() const {
633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetDefaultValue();
635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const {
638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetOptionLabel(nIndex);
640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::CountOptions() const {
643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->CountOptions();
645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const {
648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems())
653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return pWidgetAcc->GetItemState(nIndex);
654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->IsItemSelected(nIndex);
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetTopVisibleIndex() const {
665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetTopVisibleIndex();
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::IsChecked() const {
670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) {
672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) {
673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) {
674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On;
675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return bChecked;
676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormCtrl->IsChecked();
682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetAlignment() const {
685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormCtrl->GetControlAlignment();
687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_Widget::GetMaxLen() const {
690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetMaxLen();
692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify) {
695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = pFormCtrl->GetField();
697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked,
698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           bNotify);
699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!IsWidgetAppearanceValid(CPDF_Annot::Normal))
701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ResetAppearance(TRUE);
702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bNotify)
703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Synchronize(TRUE);
704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify) {
708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormField->SetValue(sValue, bNotify);
710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bNotify)
712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Synchronize(TRUE);
713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) {}
717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetOptionSelection(int index,
718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL bSelected,
719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL bNotify) {
720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormField->SetItemSelection(index, bSelected, bNotify);
722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bNotify)
724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Synchronize(TRUE);
725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify) {
729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormField->ClearSelection(bNotify);
731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bNotify)
733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Synchronize(TRUE);
734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetTopVisibleIndex(int index) {}
738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::SetAppModified() {
740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bAppModified = TRUE;
741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ClearAppModified() {
744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bAppModified = FALSE;
745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::IsAppModified() const {
748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_bAppModified;
749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance(FX_BOOL bValueChanged) {
753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetFieldType()) {
754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_TEXTFIELD:
755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_COMBOBOX: {
756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bFormated = FALSE;
757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString sValue = this->OnFormat(bFormated);
758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bFormated)
759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        this->ResetAppearance(sValue, TRUE);
760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      else
761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        this->ResetAppearance(NULL, TRUE);
762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } break;
763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      this->ResetAppearance(NULL, FALSE);
765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue,
771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     FX_BOOL bValueChanged) {
772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SetAppModified();
773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_nAppAge++;
775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_nAppAge > 999999)
776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nAppAge = 0;
777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bValueChanged)
778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nValueAge++;
779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nFieldType = GetFieldType();
781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nFieldType) {
783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_PUSHBUTTON:
784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_PushButton();
785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_CHECKBOX:
787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_CheckBox();
788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_RADIOBUTTON:
790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_RadioButton();
791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_COMBOBOX:
793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_ComboBox(sValue);
794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_LISTBOX:
796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_ListBox();
797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case FIELDTYPE_TEXTFIELD:
799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetAppearance_TextField(sValue);
800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pAnnot->ClearCachedAP();
804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated) {
807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pFormField);
809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pInterForm->OnFormat(pFormField, bFormated);
810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged) {
813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pFormField);
815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged);
816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice,
819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    const CFX_Matrix* pUser2Device,
820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    CPDF_Annot::AppearanceMode mode,
821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    const CPDF_RenderOptions* pOptions) {
822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nFieldType = GetFieldType();
823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if ((nFieldType == FIELDTYPE_CHECKBOX ||
825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       nFieldType == FIELDTYPE_RADIOBUTTON) &&
826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mode == CPDF_Annot::Normal &&
827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      !IsWidgetAppearanceValid(CPDF_Annot::Normal)) {
828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_PathData pathData;
829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rcAnnot = GetRect();
831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pathData.AppendRect(rcAnnot.left, rcAnnot.bottom, rcAnnot.right,
833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        rcAnnot.top);
834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_GraphStateData gsd;
836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    gsd.m_LineWidth = 0.0f;
837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA,
839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      FXFILL_ALTERNATE);
840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_BAAnnot::DrawAppearance(pDevice, pUser2Device, mode, pOptions);
842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::UpdateField() {
846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pFormField);
848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pInterForm->UpdateField(pFormField);
849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice,
852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                CPDFSDK_PageView* pPageView) {
853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nFieldType = GetFieldType();
854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pInterForm->IsNeedHighLight(nFieldType)) {
855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rc = GetRect();
856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType);
857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    uint8_t alpha = m_pInterForm->GetHighlightAlpha();
858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_FloatRect rcDevice;
860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(m_pInterForm->GetDocument());
861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv();
862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pEnv)
863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return;
864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_Matrix page2device;
865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pPageView->GetCurrentMatrix(page2device);
866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom),
867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          rcDevice.left, rcDevice.bottom);
868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top),
869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                          rcDevice.right, rcDevice.top);
870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    rcDevice.Normalize();
872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_ARGB argb = ArgbEncode((int)alpha, color);
874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_RECT rcDev((int)rcDevice.left, (int)rcDevice.top, (int)rcDevice.right,
875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  (int)rcDevice.bottom);
876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDevice->FillRect(&rcDev, argb);
877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_PushButton() {
881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcWindow = GetRotatedRect();
883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nLayout = 0;
884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (pControl->GetTextPosition()) {
885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_ICON:
886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_ICON;
887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_BELOW:
889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_ICONTOPLABELBOTTOM;
890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_ABOVE:
892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_LABELTOPICONBOTTOM;
893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_RIGHT:
895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_ICONLEFTLABELRIGHT;
896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_LEFT:
898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_LABELLEFTICONRIGHT;
899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case TEXTPOS_OVERLAID:
901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_LABELOVERICON;
902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nLayout = PPBL_LABEL;
905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBackground, crBorder;
909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int iColorType;
911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fc[4];
912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBackgroundColor(iColorType, fc);
914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBorderColor(iColorType, fc);
918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nBorderStyle = 0;
923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Dash dsBorder(3, 0, 0);
924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crLeftTop, crRightBottom;
925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetBorderStyle()) {
927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_DASH:
928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_DASH;
929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      dsBorder = CPWL_Dash(3, 3, 0);
930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_BEVELED:
932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_BEVELED;
933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_INSET:
938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_INSET;
939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_UNDERLINE:
944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_UNDERLINED;
945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_SOLID;
948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crText(COLORTYPE_GRAY, 0);
954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fFontSize = 12.0f;
956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csNameTag;
957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasColor()) {
960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetColor(iColorType, fc);
961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasFont())
965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetFont(csNameTag, fFontSize);
966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString csWCaption;
968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption;
969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("CA")) {
971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csNormalCaption = pControl->GetNormalCaption();
972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("RC")) {
974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csRolloverCaption = pControl->GetRolloverCaption();
975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("AC")) {
977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csDownCaption = pControl->GetDownCaption();
978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* pNormalIcon = NULL;
981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* pRolloverIcon = NULL;
982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* pDownIcon = NULL;
983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("I")) {
985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pNormalIcon = pControl->GetNormalIcon();
986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("RI")) {
988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pRolloverIcon = pControl->GetRolloverIcon();
989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pControl->HasMKEntry("IX")) {
991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDownIcon = pControl->GetDownIcon();
992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pNormalIcon) {
995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) {
996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pImageDict->GetString("Name").IsEmpty())
997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pImageDict->SetAtString("Name", "ImgA");
998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pRolloverIcon) {
1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) {
1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pImageDict->GetString("Name").IsEmpty())
1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pImageDict->SetAtString("Name", "ImgB");
1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pDownIcon) {
1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) {
1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pImageDict->GetString("Name").IsEmpty())
1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pImageDict->SetAtString("Name", "ImgC");
1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_IconFit iconFit = pControl->GetIconFit();
1016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CBA_FontMap font_map(this, pEnv->GetSysHandler());
1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  font_map.SetAPType("N");
1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP =
1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     crLeftTop, crRightBottom, nBorderStyle,
1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     dsBorder) +
1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetPushButtonAppStream(
1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout);
1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP);
1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pNormalIcon)
1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    AddImageToAppearance("N", pNormalIcon);
1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode();
1037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle) {
1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (csRolloverCaption.IsEmpty() && !pRolloverIcon) {
1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      csRolloverCaption = csNormalCaption;
1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pRolloverIcon = pNormalIcon;
1041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    font_map.SetAPType("R");
1044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          crLeftTop, crRightBottom,
1048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          nBorderStyle, dsBorder) +
1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           CPWL_Utils::GetPushButtonAppStream(
1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize,
1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               nLayout);
1053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP);
1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pRolloverIcon)
1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      AddImageToAppearance("R", pRolloverIcon);
1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (csDownCaption.IsEmpty() && !pDownIcon) {
1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      csDownCaption = csNormalCaption;
1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pDownIcon = pNormalIcon;
1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (nBorderStyle) {
1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case PBS_BEVELED: {
1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPWL_Color crTemp = crLeftTop;
1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        crLeftTop = crRightBottom;
1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        crRightBottom = crTemp;
1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case PBS_INSET:
1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    font_map.SetAPType("D");
1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP = CPWL_Utils::GetRectFillAppStream(
1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
1079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          crLeftTop, crRightBottom,
1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          nBorderStyle, dsBorder) +
1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           CPWL_Utils::GetPushButtonAppStream(
1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               iconFit.GetFittingBounds() ? rcWindow : rcClient, &font_map,
1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout);
1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP);
1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pDownIcon)
1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      AddImageToAppearance("D", pDownIcon);
1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    RemoveAppearance("D");
1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    RemoveAppearance("R");
1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_CheckBox() {
1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBackground, crBorder, crText;
1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int iColorType;
1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fc[4];
1100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBackgroundColor(iColorType, fc);
1102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBorderColor(iColorType, fc);
1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nBorderStyle = 0;
1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Dash dsBorder(3, 0, 0);
1112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crLeftTop, crRightBottom;
1113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetBorderStyle()) {
1115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_DASH:
1116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_DASH;
1117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      dsBorder = CPWL_Dash(3, 3, 0);
1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_BEVELED:
1120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_BEVELED;
1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
1124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_INSET:
1126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_INSET;
1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
1130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_UNDERLINE:
1132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_UNDERLINED;
1133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_SOLID;
1136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcWindow = GetRotatedRect();
1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
1141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
1143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasColor()) {
1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetColor(iColorType, fc);
1145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nStyle = 0;
1149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString csWCaption = pControl->GetNormalCaption();
1151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (csWCaption.GetLength() > 0) {
1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (csWCaption[0]) {
1153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'l':
1154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CIRCLE;
1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'8':
1157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CROSS;
1158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'u':
1160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_DIAMOND;
1161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'n':
1163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_SQUARE;
1164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'H':
1166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_STAR;
1167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      default:  // L'4'
1169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CHECK;
1170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    nStyle = PCS_CHECK;
1174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_N_ON =
1177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
1178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     crLeftTop, crRightBottom, nBorderStyle,
1180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     dsBorder);
1181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_N_OFF = csAP_N_ON;
1183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nBorderStyle) {
1185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PBS_BEVELED: {
1186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Color crTemp = crLeftTop;
1187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = crRightBottom;
1188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = crTemp;
1189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } break;
1190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PBS_INSET:
1191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
1192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
1193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_D_ON =
1197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetRectFillAppStream(
1198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
1199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     crLeftTop, crRightBottom, nBorderStyle,
1201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     dsBorder);
1202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_D_OFF = csAP_D_ON;
1204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
1206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
1207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
1209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pControl->GetCheckedAPState());
1210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
1211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
1213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pControl->GetCheckedAPState());
1214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
1215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAS = GetAppState();
1217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (csAS.IsEmpty())
1218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SetAppState("Off");
1219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_RadioButton() {
1222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBackground, crBorder, crText;
1224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int iColorType;
1225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fc[4];
1226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBackgroundColor(iColorType, fc);
1228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pControl->GetOriginalBorderColor(iColorType, fc);
1232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nBorderStyle = 0;
1237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Dash dsBorder(3, 0, 0);
1238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crLeftTop, crRightBottom;
1239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetBorderStyle()) {
1241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_DASH:
1242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_DASH;
1243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      dsBorder = CPWL_Dash(3, 3, 0);
1244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_BEVELED:
1246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_BEVELED;
1247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
1249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
1250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_INSET:
1252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_INSET;
1253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
1255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
1256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_UNDERLINE:
1258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_UNDERLINED;
1259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_SOLID;
1262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcWindow = GetRotatedRect();
1266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
1267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
1269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasColor()) {
1270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetColor(iColorType, fc);
1271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nStyle = 0;
1275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString csWCaption = pControl->GetNormalCaption();
1277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (csWCaption.GetLength() > 0) {
1278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (csWCaption[0]) {
1279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      default:  // L'l':
1280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CIRCLE;
1281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'8':
1283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CROSS;
1284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'u':
1286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_DIAMOND;
1287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'n':
1289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_SQUARE;
1290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'H':
1292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_STAR;
1293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case L'4':
1295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nStyle = PCS_CHECK;
1296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
1297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    nStyle = PCS_CIRCLE;
1300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_N_ON;
1303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcCenter =
1305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f);
1306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nStyle == PCS_CIRCLE) {
1308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nBorderStyle == PBS_BEVELED) {
1309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
1310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Utils::SubstractColor(crBackground, 0.25f);
1311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else if (nBorderStyle == PBS_INSET) {
1312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5f);
1313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75f);
1314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBackground) +
1317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CPWL_Utils::GetCircleBorderAppStream(
1318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
1319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    nBorderStyle, dsBorder);
1320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
1322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               crLeftTop, crRightBottom,
1324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               nBorderStyle, dsBorder);
1325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_N_OFF = csAP_N_ON;
1328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nBorderStyle) {
1330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PBS_BEVELED: {
1331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Color crTemp = crLeftTop;
1332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = crRightBottom;
1333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = crTemp;
1334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } break;
1335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case PBS_INSET:
1336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
1337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
1338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_D_ON;
1342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nStyle == PCS_CIRCLE) {
1344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground, 0.25f);
1345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nBorderStyle == PBS_BEVELED) {
1346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Utils::SubstractColor(crBackground, 0.25f);
1347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
1348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crBK = crBackground;
1349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else if (nBorderStyle == PBS_INSET) {
1350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
1351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
1352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBK) +
1355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CPWL_Utils::GetCircleBorderAppStream(
1356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
1357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    nBorderStyle, dsBorder);
1358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    csAP_D_ON = CPWL_Utils::GetRectFillAppStream(
1360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
1361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               crLeftTop, crRightBottom,
1363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               nBorderStyle, dsBorder);
1364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAP_D_OFF = csAP_D_ON;
1367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
1369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
1370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
1372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pControl->GetCheckedAPState());
1373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
1374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
1376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pControl->GetCheckedAPState());
1377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
1378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString csAS = GetAppState();
1380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (csAS.IsEmpty())
1381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SetAppState("Off");
1382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) {
1385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pField = pControl->GetField();
1387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteTextBuf sBody, sLines;
1388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcClient = GetClientRect();
1390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcButton = rcClient;
1391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  rcButton.left = rcButton.right - 13;
1392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  rcButton.Normalize();
1393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
1395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->EnableRefresh(FALSE);
1396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBA_FontMap font_map(this, pEnv->GetSysHandler());
1400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetFontMap(&font_map);
1401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rcEdit = rcClient;
1403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    rcEdit.right = rcButton.left;
1404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    rcEdit.Normalize();
1405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetPlateRect(rcEdit);
1407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetAlignmentV(1);
1408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fFontSize = GetFontSize();
1410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IsFloatZero(fFontSize))
1411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetAutoFontSize(TRUE);
1412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    else
1413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetFontSize(fFontSize);
1414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->Initialize();
1416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sValue) {
1418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetText(sValue);
1419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
1420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t nCurSel = pField->GetSelectedIndex(0);
1421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (nCurSel < 0)
1423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pEdit->SetText(pField->GetValue().c_str());
1424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      else
1425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
1426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rcContent = pEdit->GetContentRect();
1429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString sEdit =
1431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f));
1432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sEdit.GetLength() > 0) {
1433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << "/Tx BMC\n"
1434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "q\n";
1435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (rcContent.Width() > rcEdit.Width() ||
1436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rcContent.Height() > rcEdit.Height()) {
1437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width()
1438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << " " << rcEdit.Height() << " re\nW\nn\n";
1439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Color crText = GetTextPWLColor();
1442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
1443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "ET\n"
1444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "Q\nEMC\n";
1445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IFX_Edit::DelEdit(pEdit);
1448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  sBody << CPWL_Utils::GetDropButtonAppStream(rcButton);
1451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
1453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       sLines.GetByteString() + sBody.GetByteString();
1454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_ListBox() {
1459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pField = pControl->GetField();
1461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcClient = GetClientRect();
1462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteTextBuf sBody, sLines;
1463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
1465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->EnableRefresh(FALSE);
1466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBA_FontMap font_map(this, pEnv->GetSysHandler());
1471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetFontMap(&font_map);
1472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetPlateRect(CPDF_Rect(rcClient.left, 0.0f, rcClient.right, 0.0f));
1474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fFontSize = GetFontSize();
1476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IsFloatZero(fFontSize))
1478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetFontSize(12.0f);
1479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    else
1480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetFontSize(fFontSize);
1481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->Initialize();
1483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteTextBuf sList;
1485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fy = rcClient.top;
1486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nTop = pField->GetTopVisibleIndex();
1488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nCount = pField->CountOptions();
1489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nSelCount = pField->CountSelectedItems();
1490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t i = nTop; i < nCount; i++) {
1492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bSelected = FALSE;
1493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (int32_t j = 0; j < nSelCount; j++) {
1494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pField->GetSelectedIndex(j) == i) {
1495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bSelected = TRUE;
1496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
1497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetText(pField->GetOptionLabel(i).c_str());
1501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_Rect rcContent = pEdit->GetContentRect();
1503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fItemHeight = rcContent.Height();
1504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bSelected) {
1506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPDF_Rect rcItem =
1507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDF_Rect(rcClient.left, fy - fItemHeight, rcClient.right, fy);
1508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sList << "q\n" << CPWL_Utils::GetColorAppStream(
1509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f,
1510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         113.0f / 255.0f),
1511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              TRUE)
1512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width()
1513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << " " << rcItem.Height() << " re f\n"
1514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << "Q\n";
1515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sList << "BT\n" << CPWL_Utils::GetColorAppStream(
1517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CPWL_Color(COLORTYPE_GRAY, 1), TRUE)
1518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy))
1519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << "ET\n";
1520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
1521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPWL_Color crText = GetTextPWLColor();
1522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
1523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy))
1524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << "ET\n";
1525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fy -= fItemHeight;
1528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sList.GetSize() > 0) {
1531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << "/Tx BMC\n"
1532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "q\n" << rcClient.left << " " << rcClient.bottom << " "
1533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
1534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << sList << "Q\nEMC\n";
1535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IFX_Edit::DelEdit(pEdit);
1538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
1541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       sLines.GetByteString() + sBody.GetByteString();
1542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue) {
1547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pField = pControl->GetField();
1549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteTextBuf sBody, sLines;
1550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
1552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->EnableRefresh(FALSE);
1553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBA_FontMap font_map(this, pEnv->GetSysHandler());
1558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetFontMap(&font_map);
1559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rcClient = GetClientRect();
1561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetPlateRect(rcClient);
1562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->SetAlignmentH(pControl->GetControlAlignment());
1563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_DWORD dwFieldFlags = pField->GetFieldFlags();
1565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1;
1566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bMultiLine) {
1568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetMultiLine(TRUE);
1569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetAutoReturn(TRUE);
1570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
1571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetAlignmentV(1);
1572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_WORD subWord = 0;
1575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if ((dwFieldFlags >> 13) & 1) {
1576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      subWord = '*';
1577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetPasswordChar(subWord);
1578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int nMaxLen = pField->GetMaxLen();
1581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1;
1582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fFontSize = GetFontSize();
1583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
1585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_WideString sValueTmp;
1586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!sValue && (NULL != this->GetMixXFAWidget())) {
1587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sValueTmp = GetValue(TRUE);
1588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sValue = sValueTmp;
1589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
1591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nMaxLen > 0) {
1593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bCharArray) {
1594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pEdit->SetCharArray(nMaxLen);
1595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (IsFloatZero(fFontSize)) {
1597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(
1598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              font_map.GetPDFFont(0), rcClient, nMaxLen);
1599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
1601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (sValue)
1602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nMaxLen = wcslen((const wchar_t*)sValue);
1603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pEdit->SetLimitChar(nMaxLen);
1604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (IsFloatZero(fFontSize))
1608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetAutoFontSize(TRUE);
1609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    else
1610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetFontSize(fFontSize);
1611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pEdit->Initialize();
1613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sValue)
1615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetText(sValue);
1616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    else
1617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEdit->SetText(pField->GetValue().c_str());
1618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Rect rcContent = pEdit->GetContentRect();
1620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(
1622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pEdit, CPDF_Point(0.0f, 0.0f), NULL, !bCharArray, subWord);
1623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sEdit.GetLength() > 0) {
1625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << "/Tx BMC\n"
1626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "q\n";
1627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (rcContent.Width() > rcClient.Width() ||
1628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rcContent.Height() > rcClient.Height()) {
1629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sBody << rcClient.left << " " << rcClient.bottom << " "
1630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
1631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPWL_Color crText = GetTextPWLColor();
1633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
1634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "ET\n"
1635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            << "Q\nEMC\n";
1636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bCharArray) {
1639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      switch (GetBorderStyle()) {
1640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case BBS_SOLID: {
1641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_ByteString sColor =
1642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
1643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (sColor.GetLength() > 0) {
1644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sLines << "q\n" << GetBorderWidth() << " w\n"
1645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
1646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   << " 2 J 0 j\n";
1647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            for (int32_t i = 1; i < nMaxLen; i++) {
1649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              sLines << rcClient.left +
1650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            ((rcClient.right - rcClient.left) / nMaxLen) * i
1651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << " " << rcClient.bottom << " m\n"
1652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << rcClient.left +
1653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            ((rcClient.right - rcClient.left) / nMaxLen) * i
1654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << " " << rcClient.top << " l S\n";
1655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
1656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sLines << "Q\n";
1658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
1660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case BBS_DASH: {
1661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_ByteString sColor =
1662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
1663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (sColor.GetLength() > 0) {
1664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
1665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sLines << "q\n" << GetBorderWidth() << " w\n"
1667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
1668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   << "[" << dsBorder.nDash << " " << dsBorder.nGap << "] "
1669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   << dsBorder.nPhase << " d\n";
1670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            for (int32_t i = 1; i < nMaxLen; i++) {
1672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              sLines << rcClient.left +
1673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            ((rcClient.right - rcClient.left) / nMaxLen) * i
1674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << " " << rcClient.bottom << " m\n"
1675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << rcClient.left +
1676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            ((rcClient.right - rcClient.left) / nMaxLen) * i
1677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     << " " << rcClient.top << " l S\n";
1678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
1679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sLines << "Q\n";
1681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
1683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IFX_Edit::DelEdit(pEdit);
1687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
1690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       sLines.GetByteString() + sBody.GetByteString();
1691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Rect CPDFSDK_Widget::GetClientRect() const {
1695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcWindow = GetRotatedRect();
1696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetBorderStyle()) {
1698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_BEVELED:
1699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_INSET:
1700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2.0f;
1701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
1705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Rect CPDFSDK_Widget::GetRotatedRect() const {
1708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rectAnnot = GetRect();
1709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
1710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
1711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcPDFWindow;
1714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (abs(pControl->GetRotation() % 360)) {
1715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 0:
1716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 180:
1717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight);
1719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 90:
1721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 270:
1722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth);
1723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return rcPDFWindow;
1727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const {
1730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBackground = GetFillPWLColor();
1731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (crBackground.nColorType != COLORTYPE_TRANSPARENT) {
1732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground);
1733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return "";
1735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const {
1738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcWindow = GetRotatedRect();
1739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBorder = GetBorderPWLColor();
1740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBackground = GetFillPWLColor();
1741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crLeftTop, crRightBottom;
1742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nBorderStyle = 0;
1745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Dash dsBorder(3, 0, 0);
1746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (GetBorderStyle()) {
1748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_DASH:
1749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_DASH;
1750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      dsBorder = CPWL_Dash(3, 3, 0);
1751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_BEVELED:
1753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_BEVELED;
1754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
1756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
1757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_INSET:
1759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_INSET;
1760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fBorderWidth *= 2;
1761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
1762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
1763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BBS_UNDERLINE:
1765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_UNDERLINED;
1766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nBorderStyle = PBS_SOLID;
1769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
1773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        crLeftTop, crRightBottom, nBorderStyle,
1774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        dsBorder);
1775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_Matrix CPDFSDK_Widget::GetMatrix() const {
1778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_Matrix mt;
1779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pControl = GetFormControl();
1780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot = GetRect();
1781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left;
1782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom;
1783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (abs(pControl->GetRotation() % 360)) {
1785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 0:
1786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mt = CFX_Matrix(1, 0, 0, 1, 0, 0);
1788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 90:
1790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mt = CFX_Matrix(0, 1, -1, 0, fWidth, 0);
1791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 180:
1793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mt = CFX_Matrix(-1, 0, 0, -1, fWidth, fHeight);
1794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 270:
1796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mt = CFX_Matrix(0, -1, 1, 0, 0, fHeight);
1797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return mt;
1801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_Color CPDFSDK_Widget::GetTextPWLColor() const {
1804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0);
1805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
1807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
1808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (da.HasColor()) {
1809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t iColorType;
1810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fc[4];
1811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    da.GetColor(iColorType, fc);
1812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return crText;
1816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const {
1819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crBorder;
1820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
1822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iColorType;
1823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fc[4];
1824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormCtrl->GetOriginalBorderColor(iColorType, fc);
1825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return crBorder;
1829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_Color CPDFSDK_Widget::GetFillPWLColor() const {
1832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPWL_Color crFill;
1833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* pFormCtrl = GetFormControl();
1835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iColorType;
1836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fc[4];
1837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFormCtrl->GetOriginalBackgroundColor(iColorType, fc);
1838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iColorType > 0)
1839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return crFill;
1842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType,
1845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          CPDF_Stream* pImage) {
1846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
1847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pDoc);
1848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
1850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* pStream = pAPDict->GetStream(sAPType);
1851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pStreamDict = pStream->GetDict();
1852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString sImageAlias = "IMG";
1853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (CPDF_Dictionary* pImageDict = pImage->GetDict()) {
1855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    sImageAlias = pImageDict->GetString("Name");
1856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (sImageAlias.IsEmpty())
1857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sImageAlias = "IMG";
1858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
1861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pStreamResList) {
1862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pStreamResList = new CPDF_Dictionary();
1863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pStreamDict->SetAt("Resources", pStreamResList);
1864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pStreamResList) {
1867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Dictionary* pXObject = new CPDF_Dictionary;
1868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pXObject->SetAtReference(sImageAlias, pDoc, pImage);
1869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pStreamResList->SetAt("XObject", pXObject);
1870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) {
1874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP")) {
1875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pAPDict->RemoveAt(sAPType);
1876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type,
1880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  PDFSDK_FieldAction& data,
1881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  CPDFSDK_PageView* pPageView) {
1882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
1883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = pDocument->GetEnv();
1884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
1886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pDocument->GetXFADocument();
1887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IXFA_Widget* hWidget = GetMixXFAWidget()) {
1888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_EVENTTYPE eEventType = GetXFAEventType(type, data.bWillCommit);
1889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (eEventType != XFA_EVENT_Unknown) {
1891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (IXFA_WidgetHandler* pXFAWidgetHandler = GetXFAWidgetHandler()) {
1892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_EventParam param;
1893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_eType = eEventType;
1894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsChange = data.sChange;
1895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iCommitKey = data.nCommitKey;
1896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bShift = data.bShift;
1897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iSelStart = data.nSelStart;
1898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_iSelEnd = data.nSelEnd;
1899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsFullText = data.sValue;
1900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bKeyDown = data.bKeyDown;
1901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_bModifier = data.bModifier;
1902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsNewText = data.sValue;
1903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (data.nSelEnd > data.nSelStart)
1904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          param.m_wsNewText.Delete(data.nSelStart,
1905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   data.nSelEnd - data.nSelStart);
1906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int i = data.sChange.GetLength() - 1; i >= 0; i--)
1907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]);
1908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_wsPrevText = data.sValue;
1909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget);
1911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        param.m_pTarget = pAcc;
1912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, &param);
1913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) {
1915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pDocView->UpdateDocView();
1916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nRet == XFA_EVENTERROR_Sucess)
1919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return TRUE;
1920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
1924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action action = GetAAction(type);
1926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (action && action.GetType() != CPDF_Action::Unknown) {
1927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
1928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return pActionHandler->DoAction_Field(action, type, pDocument,
1929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          GetFormField(), data);
1930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
1932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) {
1935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eAAT) {
1936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::CursorEnter:
1937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::CursorExit:
1938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::ButtonDown:
1939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::ButtonUp:
1940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::GetFocus:
1941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::LoseFocus:
1942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageOpen:
1943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageClose:
1944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageVisible:
1945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::PageInvisible:
1946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CPDFSDK_BAAnnot::GetAAction(eAAT);
1947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::KeyStroke:
1949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Format:
1950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Validate:
1951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case CPDF_AAction::Calculate: {
1952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_FormField* pField = GetFormField();
1953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CPDF_AAction aa = pField->GetAdditionalAction())
1954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return aa.GetAction(eAAT);
1955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CPDFSDK_BAAnnot::GetAAction(eAAT);
1956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CPDF_Action();
1962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_Widget::GetAlternateName() const {
1965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = GetFormField();
1966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFormField->GetAlternateName();
1967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CPDFSDK_Widget::GetAppearanceAge() const {
1970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_nAppAge;
1971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CPDFSDK_Widget::GetValueAge() const {
1974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_nValueAge;
1975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) {
1978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Annot* pAnnot = GetPDFAnnot();
1979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_FloatRect annotRect;
1980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pAnnot->GetRect(annotRect);
1981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (annotRect.Contains(pageX, pageY)) {
1982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!IsVisible())
1983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
1984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int nFieldFlags = GetFieldFlags();
1986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
1987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
1988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
1990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
1992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
1995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_XFAWidget::CPDFSDK_XFAWidget(IXFA_Widget* pAnnot,
1996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     CPDFSDK_PageView* pPageView,
1997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     CPDFSDK_InterForm* pInterForm)
1998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : CPDFSDK_Annot(pPageView), m_pInterForm(pInterForm), m_hXFAWidget(pAnnot) {
1999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_XFAWidget::IsXFAField() {
2002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDFSDK_XFAWidget::GetType() const {
2006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FSDK_XFAWIDGET_TYPENAME;
2007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_FloatRect CPDFSDK_XFAWidget::GetRect() const {
2010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_PageView* pPageView = GetPageView();
2011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
2012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFXFA_Document* pDoc = pDocument->GetXFADocument();
2013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_DocView* pDocView = pDoc->GetXFADocView();
2014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
2015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_RectF rcBBox;
2017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pWidgetHandler->GetRect(GetXFAWidget(), rcBBox);
2018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
2020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       rcBBox.top + rcBBox.height);
2021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument)
2025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : m_pDocument(pDocument),
2026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pInterForm(NULL),
2027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
2028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bXfaCalculate(TRUE),
2029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bXfaValidationsEnabled(TRUE),
2030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bCalculate(TRUE),
2032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bBusy(FALSE) {
2033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pInterForm = new CPDF_InterForm(m_pDocument->GetPDFDocument(), FALSE);
2034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pInterForm->SetFormNotify(this);
2035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0; i < kNumFieldTypes; ++i)
2037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_bNeedHightlight[i] = FALSE;
2038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_iHighlightAlpha = 0;
2039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_InterForm::~CPDFSDK_InterForm() {
2042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  delete m_pInterForm;
2043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pInterForm = nullptr;
2044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_Map.clear();
2045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
2046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_XFAMap.RemoveAll();
2047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::HighlightWidgets() {
2051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
2052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget,
2055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_BOOL bNext) const {
2056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::unique_ptr<CBA_AnnotIterator> pIterator(
2057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", ""));
2058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bNext) {
2060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget);
2061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget);
2063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const {
2066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pControl || !m_pInterForm)
2067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return nullptr;
2068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_Widget* pWidget = nullptr;
2070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const auto it = m_Map.find(pControl);
2071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (it != m_Map.end())
2072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pWidget = it->second;
2073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pWidget)
2075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return pWidget;
2076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pControlDict = pControl->GetWidget();
2078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* pDocument = m_pDocument->GetPDFDocument();
2079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_PageView* pPage = nullptr;
2080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) {
2082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
2083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nPageIndex >= 0) {
2084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPage = m_pDocument->GetPageView(nPageIndex);
2085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pPage) {
2089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
2090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nPageIndex >= 0) {
2091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPage = m_pDocument->GetPageView(nPageIndex);
2092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pPage)
2096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return nullptr;
2097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict);
2098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::GetWidgets(
2101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideString& sFieldName,
2102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    std::vector<CPDFSDK_Widget*>* widgets) const {
2103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) {
2104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
2105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormField);
2106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetWidgets(pFormField, widgets);
2107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::GetWidgets(
2111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormField* pField,
2112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    std::vector<CPDFSDK_Widget*>* widgets) const {
2113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = pField->CountControls(); i < sz; ++i) {
2114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormControl* pFormCtrl = pField->GetControl(i);
2115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormCtrl);
2116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl);
2117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pWidget)
2118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      widgets->push_back(pWidget);
2119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::GetPageIndexByAnnotDict(
2123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Document* pDocument,
2124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Dictionary* pAnnotDict) const {
2125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pAnnotDict);
2126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) {
2128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i)) {
2129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots")) {
2130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) {
2131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_Object* pDict = pAnnots->GetElementValue(j);
2132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pAnnotDict == pDict) {
2133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return i;
2134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return -1;
2141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl,
2144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CPDFSDK_Widget* pWidget) {
2145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_Map[pControl] = pWidget;
2146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) {
2149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_Map.erase(pControl);
2150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled) {
2153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bCalculate = bEnabled;
2154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const {
2157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_bCalculate;
2158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
2161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::AddXFAMap(IXFA_Widget* hWidget,
2162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  CPDFSDK_XFAWidget* pWidget) {
2163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_XFAMap.SetAt(hWidget, pWidget);
2164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveXFAMap(IXFA_Widget* hWidget) {
2167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_XFAMap.RemoveKey(hWidget);
2168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(IXFA_Widget* hWidget) {
2171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFSDK_XFAWidget* pWidget = NULL;
2172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_XFAMap.Lookup(hWidget, pWidget);
2173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pWidget;
2175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::XfaEnableCalculate(FX_BOOL bEnabled) {
2178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bXfaCalculate = bEnabled;
2179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::IsXfaCalculateEnabled() const {
2181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_bXfaCalculate;
2182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::IsXfaValidationsEnabled() {
2185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_bXfaValidationsEnabled;
2186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::XfaSetValidationsEnabled(FX_BOOL bEnabled) {
2188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bXfaValidationsEnabled = bEnabled;
2189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) {
2193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pEnv);
2195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pEnv->IsJSInitiated())
2196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_bBusy)
2199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bBusy = TRUE;
2202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (IsCalculateEnabled()) {
2204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
2205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pRuntime->SetReaderDocument(m_pDocument);
2206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int nSize = m_pInterForm->CountFieldsInCalculationOrder();
2208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int i = 0; i < nSize; i++) {
2209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CPDF_FormField* pField =
2210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pInterForm->GetFieldInCalculationOrder(i)) {
2211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int nType = pField->GetFieldType();
2212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
2213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_AAction aAction = pField->GetAdditionalAction();
2214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (aAction && aAction.ActionExist(CPDF_AAction::Calculate)) {
2215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate);
2216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (action) {
2217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              CFX_WideString csJS = action.GetJavaScript();
2218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (!csJS.IsEmpty()) {
2219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                IJS_Context* pContext = pRuntime->NewContext();
2220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CFX_WideString sOldValue = pField->GetValue();
2221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CFX_WideString sValue = sOldValue;
2222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                FX_BOOL bRC = TRUE;
2223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
2224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CFX_WideString sInfo;
2226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                FX_BOOL bRet = pContext->RunScript(csJS, &sInfo);
2227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pRuntime->ReleaseContext(pContext);
2228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                if (bRet) {
2230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  if (bRC) {
2231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    if (sValue.Compare(sOldValue) != 0)
2232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      pField->SetValue(sValue, TRUE);
2233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  }
2234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                }
2235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
2236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bBusy = FALSE;
2244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
2247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           FX_BOOL& bFormated) {
2248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString sValue = pFormField->GetValue();
2249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pEnv);
2251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pEnv->IsJSInitiated()) {
2252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bFormated = FALSE;
2253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return sValue;
2254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
2257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pRuntime->SetReaderDocument(m_pDocument);
2258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX) {
2260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pFormField->CountSelectedItems() > 0) {
2261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int index = pFormField->GetSelectedIndex(0);
2262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (index >= 0)
2263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sValue = pFormField->GetOptionLabel(index);
2264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bFormated = FALSE;
2268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction aAction = pFormField->GetAdditionalAction();
2270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (aAction && aAction.ActionExist(CPDF_AAction::Format)) {
2271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
2272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (action) {
2273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString script = action.GetJavaScript();
2274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!script.IsEmpty()) {
2275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CFX_WideString Value = sValue;
2276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        IJS_Context* pContext = pRuntime->NewContext();
2278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pContext->OnField_Format(pFormField, Value, TRUE);
2279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CFX_WideString sInfo;
2281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_BOOL bRet = pContext->RunScript(script, &sInfo);
2282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pRuntime->ReleaseContext(pContext);
2283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bRet) {
2285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sValue = Value;
2286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bFormated = TRUE;
2287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return sValue;
2293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField,
2296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             const FX_WCHAR* sValue,
2297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             FX_BOOL bValueChanged) {
2298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
2299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
2300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormCtrl);
2301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
2302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pWidget->ResetAppearance(sValue, bValueChanged);
2303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) {
2307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
2308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
2309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormCtrl);
2310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) {
2312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller();
2314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
2315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, FALSE);
2316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget);
2317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pEnv->FFI_Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
2319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           rcBBox.bottom);
2320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField,
2325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          CFX_WideString& csValue,
2326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_BOOL& bRC) {
2327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction aAction = pFormField->GetAdditionalAction();
2328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (aAction && aAction.ActionExist(CPDF_AAction::KeyStroke)) {
2329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke);
2330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (action) {
2331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
2333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      PDFSDK_FieldAction fa;
2334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
2335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
2336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.sValue = csValue;
2337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
2339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               m_pDocument, pFormField, fa);
2340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bRC = fa.bRC;
2341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField,
2346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   CFX_WideString& csValue,
2347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_BOOL& bRC) {
2348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction aAction = pFormField->GetAdditionalAction();
2349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (aAction && aAction.ActionExist(CPDF_AAction::Validate)) {
2350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate);
2351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (action) {
2352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
2354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      PDFSDK_FieldAction fa;
2355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
2356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
2357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fa.sValue = csValue;
2358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate,
2360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               m_pDocument, pFormField, fa);
2361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bRC = fa.bRC;
2362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) {
2367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(action);
2368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_ActionFields af = action.GetWidgets();
2370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
2371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
2372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bHide = action.GetHideStatus();
2374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bChanged = FALSE;
2375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CPDF_FormField* pField : fields) {
2377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int i = 0, sz = pField->CountControls(); i < sz; ++i) {
2378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_FormControl* pControl = pField->GetControl(i);
2379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ASSERT(pControl);
2380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) {
2382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int nFlags = pWidget->GetFlags();
2383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nFlags &= ~ANNOTFLAG_INVISIBLE;
2384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nFlags &= ~ANNOTFLAG_NOVIEW;
2385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bHide)
2386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nFlags |= ANNOTFLAG_HIDDEN;
2387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        else
2388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nFlags &= ~ANNOTFLAG_HIDDEN;
2389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pWidget->SetFlags(nFlags);
2390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pWidget->GetPageView()->UpdateView(pWidget);
2391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bChanged = TRUE;
2392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bChanged;
2397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) {
2400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString sDestination = action.GetFilePath();
2401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (sDestination.IsEmpty())
2402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pActionDict = action.GetDict();
2405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pActionDict->KeyExist("Fields")) {
2406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_ActionFields af = action.GetWidgets();
2407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_DWORD dwFlags = action.GetFlags();
2408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
2409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
2410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!fields.empty()) {
2411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bool bIncludeOrExclude = !(dwFlags & 0x01);
2412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude))
2413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
2414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE);
2416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pInterForm->CheckRequiredFields(nullptr, true))
2419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return SubmitForm(sDestination, FALSE);
2422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::SubmitFields(
2425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideString& csDestination,
2426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const std::vector<CPDF_FormField*>& fields,
2427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bIncludeOrExclude,
2428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUrlEncoded) {
2429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteTextBuf textBuf;
2432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
2433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* pBuffer = textBuf.GetBuffer();
2435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_STRSIZE nBufSize = textBuf.GetLength();
2436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
2438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
2441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile,
2445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               CFX_WideString csTxtFile) {
2446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf,
2450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               FX_STRSIZE& nBufSize) {
2451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize);
2452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFDF) {
2453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
2454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pMainDict)
2455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
2456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    // Get fields
2458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_Array* pFields = pMainDict->GetArray("Fields");
2459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pFields)
2460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
2461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteTextBuf fdfEncodedData;
2463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (FX_DWORD i = 0; i < pFields->GetCount(); i++) {
2465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_Dictionary* pField = pFields->GetDict(i);
2466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!pField)
2467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
2468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString name;
2469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      name = pField->GetUnicodeText("T");
2470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
2471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_ByteString csBValue = pField->GetString("V");
2472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString csWValue = PDF_DecodeText(csBValue);
2473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
2474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fdfEncodedData = fdfEncodedData << name_b.GetBuffer(name_b.GetLength());
2476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      name_b.ReleaseBuffer();
2477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fdfEncodedData = fdfEncodedData << "=";
2478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fdfEncodedData = fdfEncodedData
2479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       << csValue_b.GetBuffer(csValue_b.GetLength());
2480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      csValue_b.ReleaseBuffer();
2481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (i != pFields->GetCount() - 1)
2482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fdfEncodedData = fdfEncodedData << "&";
2483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    nBufSize = fdfEncodedData.GetLength();
2486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pBuf = FX_Alloc(uint8_t, nBufSize);
2487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
2488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
2493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const std::vector<CPDF_FormField*>& fields,
2494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bIncludeOrExclude,
2495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ByteTextBuf& textBuf) {
2496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::unique_ptr<CFDF_Document> pFDF(m_pInterForm->ExportToFDF(
2497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pDocument->GetPath(), fields, bIncludeOrExclude));
2498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFDF ? pFDF->WriteBuf(textBuf) : FALSE;
2499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
2502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField,
2503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         FX_BOOL bSynchronizeElse) {
2504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pFormField != NULL);
2505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int x = 0;
2507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_FieldSynchronizeMap.Lookup(pFormField, x))
2508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
2511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
2512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(pFormCtrl != NULL);
2513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ASSERT(m_pInterForm != NULL);
2515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) {
2516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pWidget->Synchronize(bSynchronizeElse);
2517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
2523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_WideString& sFileExt) {
2524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString sFileName;
2525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return L"";
2526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
2529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_BOOL bUrlEncoded) {
2530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (sDestination.IsEmpty())
2531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pDocument || !m_pInterForm)
2534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
2538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath);
2539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pFDFDoc)
2540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteTextBuf FdfBuffer;
2543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
2544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  delete pFDFDoc;
2545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bRet)
2546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t* pBuffer = FdfBuffer.GetBuffer();
2549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_STRSIZE nBufSize = FdfBuffer.GetLength();
2550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bUrlEncoded) {
2552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!FDFToURLEncodedData(pBuffer, nBufSize))
2553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
2554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
2557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bUrlEncoded) {
2559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_Free(pBuffer);
2560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pBuffer = NULL;
2561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
2567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath());
2568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pFDF)
2569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = pFDF->WriteBuf(textBuf);
2572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  delete pFDF;
2573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
2575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
2578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(action);
2579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* pActionDict = action.GetDict();
2581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pActionDict->KeyExist("Fields"))
2582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_pInterForm->ResetForm(true);
2583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_ActionFields af = action.GetWidgets();
2585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD dwFlags = action.GetFlags();
2586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_Object*> fieldObjects = af.GetAllFields();
2588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects);
2589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), true);
2590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) {
2593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
2594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstd::vector<CPDF_FormField*> CPDFSDK_InterForm::GetFieldFromObjects(
2597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const std::vector<CPDF_Object*>& objects) const {
2598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_FormField*> fields;
2599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CPDF_Object* pObject : objects) {
2600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pObject && pObject->IsString()) {
2601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString csName = pObject->GetUnicodeText();
2602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
2603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pField)
2604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fields.push_back(pField);
2605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return fields;
2608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField,
2611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CFX_WideString& csValue) {
2612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nType = pFormField->GetFieldType();
2614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
2615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bRC = TRUE;
2616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    OnKeyStrokeCommit(pFormField, csValue, bRC);
2617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bRC) {
2618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      OnValidate(pFormField, csValue, bRC);
2619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return bRC ? 1 : -1;
2620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return -1;
2622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField) {
2627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
2629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SynchronizeField(pFormField, FALSE);
2630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
2631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nType = pFormField->GetFieldType();
2632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
2633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    OnCalculate(pFormField);
2634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bFormated = FALSE;
2635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_WideString sValue = OnFormat(pFormField, bFormated);
2636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bFormated)
2637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetFieldAppearance(pFormField, sValue.c_str(), TRUE);
2638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    else
2639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ResetFieldAppearance(pFormField, NULL, TRUE);
2640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    UpdateField(pFormField);
2641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField,
2646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             CFX_WideString& csValue) {
2647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
2649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 0;
2650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRC = TRUE;
2652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OnKeyStrokeCommit(pFormField, csValue, bRC);
2653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bRC)
2654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return -1;
2655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OnValidate(pFormField, csValue, bRC);
2657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bRC)
2658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return -1;
2659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 1;
2661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField) {
2664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX) {
2666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    OnCalculate(pFormField);
2667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ResetFieldAppearance(pFormField, NULL, TRUE);
2668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    UpdateField(pFormField);
2669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::AfterCheckedStatusChange(
2674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CPDF_FormField* pField,
2675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_ByteArray& statusArray) {
2676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int nType = pFormField->GetFieldType();
2678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON) {
2679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    OnCalculate(pFormField);
2680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    UpdateField(pFormField);
2681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm) {
2686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm) {
2690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OnCalculate(nullptr);
2691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm) {
2695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm) {
2699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  OnCalculate(nullptr);
2700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) {
2704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nFieldType < 1 || nFieldType > kNumFieldTypes)
2705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_bNeedHightlight[nFieldType - 1];
2707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveAllHighLight() {
2710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0; i < kNumFieldTypes; ++i)
2711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_bNeedHightlight[i] = FALSE;
2712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) {
2715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nFieldType < 0 || nFieldType > kNumFieldTypes)
2716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nFieldType) {
2718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 0: {
2719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (int i = 0; i < kNumFieldTypes; ++i) {
2720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_aHighlightColor[i] = clr;
2721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_bNeedHightlight[i] = TRUE;
2722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default: {
2726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_aHighlightColor[nFieldType - 1] = clr;
2727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bNeedHightlight[nFieldType - 1] = TRUE;
2728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) {
2734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nFieldType < 0 || nFieldType > kNumFieldTypes)
2735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FXSYS_RGB(255, 255, 255);
2736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nFieldType == 0)
2737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_aHighlightColor[0];
2738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_aHighlightColor[nFieldType - 1];
2739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView,
2742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     const CFX_ByteString& sType,
2743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     const CFX_ByteString& sSubType)
2744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : m_pPageView(pPageView),
2745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_sType(sType),
2746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_sSubType(sSubType),
2747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nTabs(BAI_STRUCTURE) {
2748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
2749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs");
2750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (sTabs == "R") {
2752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nTabs = BAI_ROW;
2753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else if (sTabs == "C") {
2754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nTabs = BAI_COLUMN;
2755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
2756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_nTabs = BAI_STRUCTURE;
2757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  GenerateResults();
2760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBA_AnnotIterator::~CBA_AnnotIterator() {
2763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_Annots.RemoveAll();
2764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot() {
2767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_Annots.GetSize() > 0)
2768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_Annots[0];
2769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
2771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot() {
2774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_Annots.GetSize() > 0)
2775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return m_Annots[m_Annots.GetSize() - 1];
2776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
2778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot) {
2781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
2782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_Annots[i] == pAnnot)
2783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return (i + 1 < sz) ? m_Annots[i + 1] : m_Annots[0];
2784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
2786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) {
2789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
2790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_Annots[i] == pAnnot)
2791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return (i - 1 >= 0) ? m_Annots[i - 1] : m_Annots[sz - 1];
2792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
2794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
2797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(p1);
2798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(p2);
2799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
2801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
2802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (rcAnnot1.left < rcAnnot2.left)
2804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return -1;
2805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (rcAnnot1.left > rcAnnot2.left)
2806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 1;
2807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
2811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(p1);
2812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(p2);
2813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
2815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
2816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (rcAnnot1.top < rcAnnot2.top)
2818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return -1;
2819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (rcAnnot1.top > rcAnnot2.top)
2820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 1;
2821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 0;
2822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBA_AnnotIterator::GenerateResults() {
2825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (m_nTabs) {
2826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BAI_STRUCTURE: {
2827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
2828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
2830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_Annots.Add(pAnnot);
2831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BAI_ROW: {
2835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_SortAnnots sa;
2836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
2837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
2839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sa.Add(pAnnot);
2840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (sa.GetSize() > 0)
2843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sa.Sort(CBA_AnnotIterator::CompareByLeft);
2844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (sa.GetSize() > 0) {
2846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int nLeftTopIndex = -1;
2847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fTop = 0.0f;
2848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int i = sa.GetSize() - 1; i >= 0; i--) {
2850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ASSERT(pAnnot);
2852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (rcAnnot.top > fTop) {
2856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            nLeftTopIndex = i;
2857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fTop = rcAnnot.top;
2858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nLeftTopIndex >= 0) {
2862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
2863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ASSERT(pLeftTopAnnot);
2864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
2866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_Annots.Add(pLeftTopAnnot);
2868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sa.RemoveAt(nLeftTopIndex);
2869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_ArrayTemplate<int> aSelect;
2871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = sa.GetSize(); i < sz; ++i) {
2873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            ASSERT(pAnnot);
2875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
2878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
2879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              aSelect.Add(i);
2880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = aSelect.GetSize(); i < sz; ++i)
2883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_Annots.Add(sa[aSelect[i]]);
2884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = aSelect.GetSize() - 1; i >= 0; --i)
2886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              sa.RemoveAt(aSelect[i]);
2887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          aSelect.RemoveAll();
2889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sa.RemoveAll();
2892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case BAI_COLUMN: {
2895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CPDFSDK_SortAnnots sa;
2896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (size_t i = 0; i < m_pPageView->CountAnnots(); ++i) {
2897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
2899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sa.Add(pAnnot);
2900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (sa.GetSize() > 0)
2903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE);
2904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (sa.GetSize() > 0) {
2906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int nLeftTopIndex = -1;
2907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fLeft = -1.0f;
2908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int i = sa.GetSize() - 1; i >= 0; --i) {
2910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ASSERT(pAnnot);
2912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (fLeft < 0) {
2916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            nLeftTopIndex = 0;
2917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fLeft = rcAnnot.left;
2918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else if (rcAnnot.left < fLeft) {
2919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            nLeftTopIndex = i;
2920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fLeft = rcAnnot.left;
2921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (nLeftTopIndex >= 0) {
2925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
2926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ASSERT(pLeftTopAnnot);
2927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
2929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_Annots.Add(pLeftTopAnnot);
2931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sa.RemoveAt(nLeftTopIndex);
2932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CFX_ArrayTemplate<int> aSelect;
2934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = sa.GetSize(); i < sz; ++i) {
2935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            ASSERT(pAnnot);
2937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
2940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
2941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              aSelect.Add(i);
2942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = 0, sz = aSelect.GetSize(); i < sz; ++i)
2945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_Annots.Add(sa[aSelect[i]]);
2946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int i = aSelect.GetSize() - 1; i >= 0; --i)
2948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            sa.RemoveAt(aSelect[i]);
2949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
2950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          aSelect.RemoveAll();
2951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      sa.RemoveAll();
2954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot) {
2960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Rect rcAnnot;
2961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pAnnot->GetPDFAnnot()->GetRect(rcAnnot);
2962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return rcAnnot;
2963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2964