| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| 6 | |
| 7 #include "xfa/src/fxfa/app/xfa_ffwidgethandler.h" | |
| 8 | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "xfa/src/fxfa/app/xfa_ffchoicelist.h" | |
| 12 #include "xfa/src/fxfa/app/xfa_ffdoc.h" | |
| 13 #include "xfa/src/fxfa/app/xfa_ffdocview.h" | |
| 14 #include "xfa/src/fxfa/app/xfa_fffield.h" | |
| 15 #include "xfa/src/fxfa/app/xfa_ffwidget.h" | |
| 16 #include "xfa/src/fxfa/app/xfa_fwladapter.h" | |
| 17 #include "xfa/src/fxfa/parser/xfa_parser.h" | |
| 18 | |
| 19 CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView) | |
| 20 : m_pDocView(pDocView) {} | |
| 21 CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {} | |
| 22 IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) { | |
| 23 return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView(); | |
| 24 } | |
| 25 void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) { | |
| 26 static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt); | |
| 27 } | |
| 28 FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) { | |
| 29 return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus(); | |
| 30 } | |
| 31 FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget, | |
| 32 CFX_RectF& rtBox, | |
| 33 FX_DWORD dwStatus, | |
| 34 FX_BOOL bDrawFocus) { | |
| 35 return static_cast<CXFA_FFWidget*>(hWidget) | |
| 36 ->GetBBox(rtBox, dwStatus, bDrawFocus); | |
| 37 } | |
| 38 CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) { | |
| 39 return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc(); | |
| 40 } | |
| 41 void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget, | |
| 42 CFX_WideString& wsName, | |
| 43 int32_t iNameType) { | |
| 44 static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName, | |
| 45 iNameType); | |
| 46 } | |
| 47 FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget, | |
| 48 CFX_WideString& wsToolTip) { | |
| 49 return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip); | |
| 50 } | |
| 51 void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget, | |
| 52 void* module_id, | |
| 53 void* pData, | |
| 54 PD_CALLBACK_FREEDATA callback) { | |
| 55 static_cast<CXFA_FFWidget*>(hWidget) | |
| 56 ->SetPrivateData(module_id, pData, callback); | |
| 57 } | |
| 58 void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget, | |
| 59 void* module_id) { | |
| 60 return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id); | |
| 61 } | |
| 62 FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) { | |
| 63 m_pDocView->LockUpdate(); | |
| 64 FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter(); | |
| 65 m_pDocView->UnlockUpdate(); | |
| 66 m_pDocView->UpdateDocView(); | |
| 67 return bRet; | |
| 68 } | |
| 69 FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) { | |
| 70 m_pDocView->LockUpdate(); | |
| 71 FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit(); | |
| 72 m_pDocView->UnlockUpdate(); | |
| 73 m_pDocView->UpdateDocView(); | |
| 74 return bRet; | |
| 75 } | |
| 76 FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget, | |
| 77 FX_DWORD dwFlags, | |
| 78 FX_FLOAT fx, | |
| 79 FX_FLOAT fy) { | |
| 80 m_pDocView->LockUpdate(); | |
| 81 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 82 FX_BOOL bRet = | |
| 83 static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy); | |
| 84 if (bRet && m_pDocView->SetFocus(hWidget)) { | |
| 85 ((CXFA_FFDoc*)m_pDocView->GetDoc()) | |
| 86 ->GetDocProvider() | |
| 87 ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); | |
| 88 } | |
| 89 m_pDocView->UnlockUpdate(); | |
| 90 m_pDocView->UpdateDocView(); | |
| 91 return bRet; | |
| 92 } | |
| 93 FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget, | |
| 94 FX_DWORD dwFlags, | |
| 95 FX_FLOAT fx, | |
| 96 FX_FLOAT fy) { | |
| 97 m_pDocView->LockUpdate(); | |
| 98 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 99 m_pDocView->m_bLayoutEvent = TRUE; | |
| 100 FX_BOOL bRet = | |
| 101 static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy); | |
| 102 m_pDocView->UnlockUpdate(); | |
| 103 m_pDocView->UpdateDocView(); | |
| 104 return bRet; | |
| 105 } | |
| 106 FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget, | |
| 107 FX_DWORD dwFlags, | |
| 108 FX_FLOAT fx, | |
| 109 FX_FLOAT fy) { | |
| 110 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 111 FX_BOOL bRet = | |
| 112 static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy); | |
| 113 m_pDocView->RunInvalidate(); | |
| 114 return bRet; | |
| 115 } | |
| 116 FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget, | |
| 117 FX_DWORD dwFlags, | |
| 118 FX_FLOAT fx, | |
| 119 FX_FLOAT fy) { | |
| 120 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 121 FX_BOOL bRet = | |
| 122 static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy); | |
| 123 m_pDocView->RunInvalidate(); | |
| 124 return bRet; | |
| 125 } | |
| 126 FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget, | |
| 127 FX_DWORD dwFlags, | |
| 128 int16_t zDelta, | |
| 129 FX_FLOAT fx, | |
| 130 FX_FLOAT fy) { | |
| 131 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 132 FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget) | |
| 133 ->OnMouseWheel(dwFlags, zDelta, fx, fy); | |
| 134 m_pDocView->RunInvalidate(); | |
| 135 return bRet; | |
| 136 } | |
| 137 FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget, | |
| 138 FX_DWORD dwFlags, | |
| 139 FX_FLOAT fx, | |
| 140 FX_FLOAT fy) { | |
| 141 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 142 FX_BOOL bRet = | |
| 143 static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy); | |
| 144 if (bRet && m_pDocView->SetFocus(hWidget)) { | |
| 145 ((CXFA_FFDoc*)m_pDocView->GetDoc()) | |
| 146 ->GetDocProvider() | |
| 147 ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); | |
| 148 } | |
| 149 m_pDocView->RunInvalidate(); | |
| 150 return bRet; | |
| 151 } | |
| 152 FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget, | |
| 153 FX_DWORD dwFlags, | |
| 154 FX_FLOAT fx, | |
| 155 FX_FLOAT fy) { | |
| 156 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 157 FX_BOOL bRet = | |
| 158 static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy); | |
| 159 m_pDocView->RunInvalidate(); | |
| 160 return bRet; | |
| 161 } | |
| 162 FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget, | |
| 163 FX_DWORD dwFlags, | |
| 164 FX_FLOAT fx, | |
| 165 FX_FLOAT fy) { | |
| 166 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 167 FX_BOOL bRet = | |
| 168 static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy); | |
| 169 m_pDocView->RunInvalidate(); | |
| 170 return bRet; | |
| 171 } | |
| 172 FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget, | |
| 173 FX_DWORD dwKeyCode, | |
| 174 FX_DWORD dwFlags) { | |
| 175 FX_BOOL bRet = | |
| 176 static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags); | |
| 177 m_pDocView->RunInvalidate(); | |
| 178 m_pDocView->UpdateDocView(); | |
| 179 return bRet; | |
| 180 } | |
| 181 FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget, | |
| 182 FX_DWORD dwKeyCode, | |
| 183 FX_DWORD dwFlags) { | |
| 184 FX_BOOL bRet = | |
| 185 static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags); | |
| 186 m_pDocView->RunInvalidate(); | |
| 187 return bRet; | |
| 188 } | |
| 189 FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget, | |
| 190 FX_DWORD dwChar, | |
| 191 FX_DWORD dwFlags) { | |
| 192 FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags); | |
| 193 m_pDocView->RunInvalidate(); | |
| 194 return bRet; | |
| 195 } | |
| 196 FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget, | |
| 197 FX_FLOAT fx, | |
| 198 FX_FLOAT fy) { | |
| 199 if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() & | |
| 200 XFA_WIDGETSTATUS_Visible)) { | |
| 201 return FWL_WGTHITTEST_Unknown; | |
| 202 } | |
| 203 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 204 return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy); | |
| 205 } | |
| 206 FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget, | |
| 207 FX_FLOAT fx, | |
| 208 FX_FLOAT fy) { | |
| 209 static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); | |
| 210 return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy); | |
| 211 } | |
| 212 void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget, | |
| 213 CFX_Graphics* pGS, | |
| 214 CFX_Matrix* pMatrix, | |
| 215 FX_BOOL bHighlight) { | |
| 216 static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget( | |
| 217 pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0); | |
| 218 } | |
| 219 FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc, | |
| 220 XFA_EVENTTYPE eEventType) { | |
| 221 if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) { | |
| 222 return FALSE; | |
| 223 } | |
| 224 if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { | |
| 225 return FALSE; | |
| 226 } | |
| 227 switch (eEventType) { | |
| 228 case XFA_EVENT_Calculate: { | |
| 229 CXFA_Calculate calc = pWidgetAcc->GetCalculate(); | |
| 230 if (!calc) { | |
| 231 return FALSE; | |
| 232 } | |
| 233 if (calc.GetScript()) { | |
| 234 return TRUE; | |
| 235 } | |
| 236 return FALSE; | |
| 237 } | |
| 238 case XFA_EVENT_Validate: { | |
| 239 CXFA_Validate val = pWidgetAcc->GetValidate(); | |
| 240 if (!val) { | |
| 241 return FALSE; | |
| 242 } | |
| 243 if (val.GetScript()) { | |
| 244 return TRUE; | |
| 245 } | |
| 246 return FALSE; | |
| 247 } | |
| 248 default: | |
| 249 break; | |
| 250 } | |
| 251 CXFA_NodeArray eventArray; | |
| 252 return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], | |
| 253 eventArray); | |
| 254 } | |
| 255 int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, | |
| 256 CXFA_EventParam* pParam) { | |
| 257 if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) { | |
| 258 return XFA_EVENTERROR_NotExist; | |
| 259 } | |
| 260 if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { | |
| 261 return XFA_EVENTERROR_NotExist; | |
| 262 } | |
| 263 switch (pParam->m_eType) { | |
| 264 case XFA_EVENT_Calculate: | |
| 265 return pWidgetAcc->ProcessCalculate(); | |
| 266 case XFA_EVENT_Validate: | |
| 267 if (((CXFA_FFDoc*)m_pDocView->GetDoc()) | |
| 268 ->GetDocProvider() | |
| 269 ->IsValidationsEnabled(m_pDocView->GetDoc())) { | |
| 270 return pWidgetAcc->ProcessValidate(); | |
| 271 } | |
| 272 return XFA_EVENTERROR_Disabled; | |
| 273 case XFA_EVENT_InitCalculate: { | |
| 274 CXFA_Calculate calc = pWidgetAcc->GetCalculate(); | |
| 275 if (!calc) { | |
| 276 return XFA_EVENTERROR_NotExist; | |
| 277 } | |
| 278 if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { | |
| 279 return XFA_EVENTERROR_Disabled; | |
| 280 } | |
| 281 CXFA_Script script = calc.GetScript(); | |
| 282 return pWidgetAcc->ExecuteScript(script, pParam); | |
| 283 } | |
| 284 default: | |
| 285 break; | |
| 286 } | |
| 287 int32_t iRet = | |
| 288 pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam); | |
| 289 return iRet; | |
| 290 } | |
| 291 IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent, | |
| 292 XFA_WIDGETTYPE eType, | |
| 293 IXFA_Widget* hBefore) { | |
| 294 CXFA_Node* pParentFormItem = | |
| 295 hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode() | |
| 296 : NULL; | |
| 297 CXFA_Node* pBeforeFormItem = | |
| 298 hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode() | |
| 299 : NULL; | |
| 300 CXFA_Node* pNewFormItem = | |
| 301 CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem); | |
| 302 if (pNewFormItem == NULL) { | |
| 303 return NULL; | |
| 304 } | |
| 305 pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized); | |
| 306 pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized); | |
| 307 m_pDocView->RunLayout(); | |
| 308 CXFA_LayoutItem* pLayout = | |
| 309 m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem); | |
| 310 return (IXFA_Widget*)pLayout; | |
| 311 } | |
| 312 CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem( | |
| 313 XFA_WIDGETTYPE eType, | |
| 314 CXFA_Node* pParent, | |
| 315 CXFA_Node* pBefore) const { | |
| 316 switch (eType) { | |
| 317 case XFA_WIDGETTYPE_Barcode: | |
| 318 return NULL; | |
| 319 case XFA_WIDGETTYPE_PushButton: | |
| 320 return CreatePushButton(pParent, pBefore); | |
| 321 case XFA_WIDGETTYPE_CheckButton: | |
| 322 return CreateCheckButton(pParent, pBefore); | |
| 323 case XFA_WIDGETTYPE_ExcludeGroup: | |
| 324 return CreateExclGroup(pParent, pBefore); | |
| 325 case XFA_WIDGETTYPE_RadioButton: | |
| 326 return CreateRadioButton(pParent, pBefore); | |
| 327 case XFA_WIDGETTYPE_Arc: | |
| 328 return CreateArc(pParent, pBefore); | |
| 329 case XFA_WIDGETTYPE_Rectangle: | |
| 330 return CreateRectangle(pParent, pBefore); | |
| 331 case XFA_WIDGETTYPE_Image: | |
| 332 return CreateImage(pParent, pBefore); | |
| 333 case XFA_WIDGETTYPE_Line: | |
| 334 return CreateLine(pParent, pBefore); | |
| 335 case XFA_WIDGETTYPE_Text: | |
| 336 return CreateText(pParent, pBefore); | |
| 337 case XFA_WIDGETTYPE_DatetimeEdit: | |
| 338 return CreateDatetimeEdit(pParent, pBefore); | |
| 339 case XFA_WIDGETTYPE_DecimalField: | |
| 340 return CreateDecimalField(pParent, pBefore); | |
| 341 case XFA_WIDGETTYPE_NumericField: | |
| 342 return CreateNumericField(pParent, pBefore); | |
| 343 case XFA_WIDGETTYPE_Signature: | |
| 344 return CreateSignature(pParent, pBefore); | |
| 345 case XFA_WIDGETTYPE_TextEdit: | |
| 346 return CreateTextEdit(pParent, pBefore); | |
| 347 case XFA_WIDGETTYPE_DropdownList: | |
| 348 return CreateDropdownList(pParent, pBefore); | |
| 349 case XFA_WIDGETTYPE_ListBox: | |
| 350 return CreateListBox(pParent, pBefore); | |
| 351 case XFA_WIDGETTYPE_ImageField: | |
| 352 return CreateImageField(pParent, pBefore); | |
| 353 case XFA_WIDGETTYPE_PasswordEdit: | |
| 354 return CreatePasswordEdit(pParent, pBefore); | |
| 355 case XFA_WIDGETTYPE_Subform: | |
| 356 return CreateSubform(pParent, pBefore); | |
| 357 default: | |
| 358 break; | |
| 359 } | |
| 360 return NULL; | |
| 361 } | |
| 362 CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent, | |
| 363 CXFA_Node* pBefore) const { | |
| 364 CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore); | |
| 365 CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField); | |
| 366 CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption); | |
| 367 CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue); | |
| 368 pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE); | |
| 369 CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption); | |
| 370 pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE); | |
| 371 pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE); | |
| 372 CreateFontNode(pCaption); | |
| 373 CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField); | |
| 374 pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE); | |
| 375 CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder); | |
| 376 pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE); | |
| 377 CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder); | |
| 378 CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill); | |
| 379 pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE); | |
| 380 CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); | |
| 381 pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None); | |
| 382 return pField; | |
| 383 } | |
| 384 CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent, | |
| 385 CXFA_Node* pBefore) const { | |
| 386 CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); | |
| 387 return pField; | |
| 388 } | |
| 389 CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent, | |
| 390 CXFA_Node* pBefore) const { | |
| 391 return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore); | |
| 392 } | |
| 393 CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent, | |
| 394 CXFA_Node* pBefore) const { | |
| 395 CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); | |
| 396 CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui); | |
| 397 CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton); | |
| 398 pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round); | |
| 399 return pField; | |
| 400 } | |
| 401 CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent, | |
| 402 CXFA_Node* pBefore) const { | |
| 403 CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore); | |
| 404 CreateValueNode(XFA_ELEMENT_Date, pField); | |
| 405 return pField; | |
| 406 } | |
| 407 CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent, | |
| 408 CXFA_Node* pBefore) const { | |
| 409 CXFA_Node* pField = CreateNumericField(pParent, pBefore); | |
| 410 CreateValueNode(XFA_ELEMENT_Decimal, pField); | |
| 411 return pField; | |
| 412 } | |
| 413 CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent, | |
| 414 CXFA_Node* pBefore) const { | |
| 415 CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore); | |
| 416 return pField; | |
| 417 } | |
| 418 CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent, | |
| 419 CXFA_Node* pBefore) const { | |
| 420 CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore); | |
| 421 return pField; | |
| 422 } | |
| 423 CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent, | |
| 424 CXFA_Node* pBefore) const { | |
| 425 CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore); | |
| 426 return pField; | |
| 427 } | |
| 428 CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent, | |
| 429 CXFA_Node* pBefore) const { | |
| 430 CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore); | |
| 431 return pField; | |
| 432 } | |
| 433 CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent, | |
| 434 CXFA_Node* pBefore) const { | |
| 435 CXFA_Node* pField = CreateDropdownList(pParent, pBefore); | |
| 436 CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild); | |
| 437 CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild); | |
| 438 pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always); | |
| 439 pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit); | |
| 440 return pField; | |
| 441 } | |
| 442 CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent, | |
| 443 CXFA_Node* pBefore) const { | |
| 444 CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore); | |
| 445 return pField; | |
| 446 } | |
| 447 CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent, | |
| 448 CXFA_Node* pBefore) const { | |
| 449 CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore); | |
| 450 CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); | |
| 451 pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE); | |
| 452 return pField; | |
| 453 } | |
| 454 CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement, | |
| 455 CXFA_Node* pParent, | |
| 456 CXFA_Node* pBefore) const { | |
| 457 CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore); | |
| 458 CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField)); | |
| 459 CreateFontNode(pField); | |
| 460 return pField; | |
| 461 } | |
| 462 CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent, | |
| 463 CXFA_Node* pBefore) const { | |
| 464 return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore); | |
| 465 } | |
| 466 CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent, | |
| 467 CXFA_Node* pBefore) const { | |
| 468 return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore); | |
| 469 } | |
| 470 CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent, | |
| 471 CXFA_Node* pBefore) const { | |
| 472 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore); | |
| 473 CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); | |
| 474 return pField; | |
| 475 } | |
| 476 CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent, | |
| 477 CXFA_Node* pBefore) const { | |
| 478 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore); | |
| 479 return pField; | |
| 480 } | |
| 481 CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent, | |
| 482 CXFA_Node* pBefore) const { | |
| 483 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore); | |
| 484 CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); | |
| 485 CreateFontNode(pField); | |
| 486 return pField; | |
| 487 } | |
| 488 CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement, | |
| 489 CXFA_Node* pParent, | |
| 490 CXFA_Node* pBefore) const { | |
| 491 CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore); | |
| 492 CreateValueNode(eElement, pDraw); | |
| 493 return pDraw; | |
| 494 } | |
| 495 CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent, | |
| 496 CXFA_Node* pBefore) const { | |
| 497 CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore); | |
| 498 return pSubform; | |
| 499 } | |
| 500 CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement, | |
| 501 CXFA_Node* pParent, | |
| 502 CXFA_Node* pBefore) const { | |
| 503 CXFA_Node* pTemplateParent = pParent ? pParent->GetTemplateNode() : NULL; | |
| 504 CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE); | |
| 505 if (pParent) | |
| 506 pParent->InsertChild(pNewFormItem, pBefore); | |
| 507 return pNewFormItem; | |
| 508 } | |
| 509 CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement, | |
| 510 CXFA_Node* pParent, | |
| 511 CXFA_Node* pBefore) const { | |
| 512 CXFA_Node* pTemplateParent = pParent ? pParent->GetTemplateNode() : NULL; | |
| 513 CXFA_Node* pNewNode = | |
| 514 CreateTemplateNode(eElement, pTemplateParent, | |
| 515 pBefore ? pBefore->GetTemplateNode() : NULL) | |
| 516 ->Clone(FALSE); | |
| 517 if (pParent) | |
| 518 pParent->InsertChild(pNewNode, pBefore); | |
| 519 return pNewNode; | |
| 520 } | |
| 521 CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement, | |
| 522 CXFA_Node* pParent, | |
| 523 CXFA_Node* pBefore) const { | |
| 524 CXFA_Document* pXFADoc = GetXFADoc(); | |
| 525 CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode( | |
| 526 XFA_XDPPACKET_Template, eElement); | |
| 527 if (pParent) | |
| 528 pParent->InsertChild(pNewTemplateNode, pBefore); | |
| 529 return pNewTemplateNode; | |
| 530 } | |
| 531 CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const { | |
| 532 CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent); | |
| 533 pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE); | |
| 534 return pFont; | |
| 535 } | |
| 536 CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent, | |
| 537 FX_DWORD dwFlags, | |
| 538 FX_FLOAT fInsets[4]) const { | |
| 539 CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent); | |
| 540 if (dwFlags & 0x01) { | |
| 541 pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset, | |
| 542 CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE); | |
| 543 } | |
| 544 if (dwFlags & 0x02) { | |
| 545 pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset, | |
| 546 CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE); | |
| 547 } | |
| 548 if (dwFlags & 0x04) { | |
| 549 pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset, | |
| 550 CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE); | |
| 551 } | |
| 552 if (dwFlags & 0x08) { | |
| 553 pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset, | |
| 554 CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE); | |
| 555 } | |
| 556 return pMargin; | |
| 557 } | |
| 558 CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue, | |
| 559 CXFA_Node* pParent) const { | |
| 560 CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent); | |
| 561 CreateCopyNode(eValue, pValue); | |
| 562 return pValue; | |
| 563 } | |
| 564 IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const { | |
| 565 return GetXFADoc()->GetParser()->GetFactory(); | |
| 566 } | |
| 567 CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const { | |
| 568 return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc(); | |
| 569 } | |
| 570 CXFA_FFMenuHandler::CXFA_FFMenuHandler() {} | |
| 571 CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {} | |
| 572 FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) { | |
| 573 return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy(); | |
| 574 } | |
| 575 FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) { | |
| 576 return static_cast<CXFA_FFWidget*>(hWidget)->CanCut(); | |
| 577 } | |
| 578 FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) { | |
| 579 return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste(); | |
| 580 } | |
| 581 FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) { | |
| 582 return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll(); | |
| 583 } | |
| 584 FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) { | |
| 585 return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete(); | |
| 586 } | |
| 587 FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) { | |
| 588 return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect(); | |
| 589 } | |
| 590 FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) { | |
| 591 return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText); | |
| 592 } | |
| 593 FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) { | |
| 594 return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText); | |
| 595 } | |
| 596 FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget, | |
| 597 const CFX_WideString& wsText) { | |
| 598 return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText); | |
| 599 } | |
| 600 FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) { | |
| 601 return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll(); | |
| 602 } | |
| 603 FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) { | |
| 604 return static_cast<CXFA_FFWidget*>(hWidget)->Delete(); | |
| 605 } | |
| 606 FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) { | |
| 607 return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect(); | |
| 608 } | |
| 609 FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) { | |
| 610 return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo(); | |
| 611 } | |
| 612 FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) { | |
| 613 return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo(); | |
| 614 } | |
| 615 FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) { | |
| 616 return static_cast<CXFA_FFWidget*>(hWidget)->Undo(); | |
| 617 } | |
| 618 FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) { | |
| 619 return static_cast<CXFA_FFWidget*>(hWidget)->Redo(); | |
| 620 } | |
| 621 FX_BOOL CXFA_FFMenuHandler::GetSuggestWords( | |
| 622 IXFA_Widget* hWidget, | |
| 623 CFX_PointF pointf, | |
| 624 std::vector<CFX_ByteString>& sSuggest) { | |
| 625 return static_cast<CXFA_FFWidget*>(hWidget) | |
| 626 ->GetSuggestWords(pointf, sSuggest); | |
| 627 } | |
| 628 FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord( | |
| 629 IXFA_Widget* hWidget, | |
| 630 CFX_PointF pointf, | |
| 631 const CFX_ByteStringC& bsReplace) { | |
| 632 return static_cast<CXFA_FFWidget*>(hWidget) | |
| 633 ->ReplaceSpellCheckWord(pointf, bsReplace); | |
| 634 } | |
| OLD | NEW |