14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/app/xfa_ffcheckbutton.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_checkbox.h" 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagemouse.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_notedriver.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widgetmgr.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/app/xfa_ffexclgroup.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/app/xfa_fffield.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffapp.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffdoc.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffdocview.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffpageview.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffwidget.h" 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 215ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. MoltmannCXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_WidgetAcc* pDataAcc) 225ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann : CXFA_FFField(pDataAcc), m_pOldDelegate(nullptr) {} 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFCheckButton::~CXFA_FFCheckButton() {} 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::LoadWidget() { 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_CheckBox* pCheckBox = new CFWL_CheckBox(GetFWLApp()); 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget = pCheckBox; 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->SetLayoutItem(this); 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pNoteDriver = 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNoteDriver->RegisterEventTarget(m_pNormalWidget, m_pNormalWidget); 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldDelegate = m_pNormalWidget->GetDelegate(); 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->SetDelegate(this); 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pDataAcc->IsRadioButton()) 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF); 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->LockUpdate(); 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UpdateWidgetProperty(); 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetFWLCheckState(m_pDataAcc->GetCheckState()); 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->UnlockUpdate(); 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CXFA_FFField::LoadWidget(); 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::UpdateWidgetProperty() { 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_CheckBox* pCheckBox = (CFWL_CheckBox*)m_pNormalWidget; 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pNormalWidget) { 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fSize = m_pDataAcc->GetCheckButtonSize(); 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pCheckBox->SetBoxSize(fSize); 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCross; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iCheckMark = m_pDataAcc->GetCheckButtonMark(); 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (iCheckMark) { 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Check: 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCheck; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Circle: 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle; 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Cross: 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Diamond: 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeDiamond; 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Square: 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeSquare; 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Star: 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeStar; 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: { 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iShape = m_pDataAcc->GetCheckButtonShape(); 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iShape == XFA_ATTRIBUTEENUM_Round) { 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle; 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pDataAcc->IsAllowNeutral()) { 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx |= FWL_STYLEEXT_CKB_3State; 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pCheckBox->ModifyStylesEx( 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dwStyleEx, FWL_STYLEEXT_CKB_SignShapeMask | FWL_STYLEEXT_CKB_3State); 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::PerformLayout() { 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFWidget::PerformLayout(); 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fCheckSize = m_pDataAcc->GetCheckButtonSize(); 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Margin mgWidget = m_pDataAcc->GetMargin(); 915ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_RectF rtWidget = GetRectWithoutRotate(); 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (mgWidget) { 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RectWidthoutMargin(rtWidget, mgWidget); 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iCapPlacement = -1; 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fCapReserve = 0; 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Caption caption = m_pDataAcc->GetCaption(); 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (caption && caption.GetPresence()) { 995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann m_rtCaption = rtWidget; 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iCapPlacement = caption.GetPlacementType(); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fCapReserve = caption.GetReserve(); 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (fCapReserve <= 0) { 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iCapPlacement == XFA_ATTRIBUTEENUM_Top || 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) { 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fCapReserve = rtWidget.height - fCheckSize; 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fCapReserve = rtWidget.width - fCheckSize; 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top; 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CXFA_Para para = m_pDataAcc->GetPara()) { 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iHorzAlign = para.GetHorizontalAlign(); 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iVertAlign = para.GetVerticalAlign(); 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI = rtWidget; 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Margin mgCap = caption.GetMargin(); 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (iCapPlacement) { 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Left: { 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.width = fCapReserve; 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CapLeftRightPlacement(mgCap); 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.width -= fCapReserve; 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left += fCapReserve; 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Top: { 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.height = fCapReserve; 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RectWidthoutMargin(m_rtCaption, mgCap); 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.height -= fCapReserve; 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.top += fCapReserve; 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Right: { 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.left = m_rtCaption.right() - fCapReserve; 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.width = fCapReserve; 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CapLeftRightPlacement(mgCap); 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.width -= fCapReserve; 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Bottom: { 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.height = fCapReserve; 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RectWidthoutMargin(m_rtCaption, mgCap); 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.height -= fCapReserve; 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_ATTRIBUTEENUM_Inline: 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iHorzAlign = XFA_ATTRIBUTEENUM_Right; 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) { 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left += (m_rtUI.width - fCheckSize) / 2; 1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) { 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left = m_rtUI.right() - fCheckSize; 1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) { 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.top += (m_rtUI.height - fCheckSize) / 2; 1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) { 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.top = m_rtUI.bottom() - fCheckSize; 1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.width = fCheckSize; 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.height = fCheckSize; 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann AddUIMargin(iCapPlacement); 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCheckBox = m_rtUI; 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (borderUI) { 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Margin margin = borderUI.GetMargin(); 1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (margin) { 1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RectWidthoutMargin(m_rtUI, margin); 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.Normalize(); 1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann LayoutCaption(); 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetFWLRect(); 1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pNormalWidget) { 1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->Update(); 1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::CapLeftRightPlacement(CXFA_Margin mgCap) { 1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RectWidthoutMargin(m_rtCaption, mgCap); 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_rtCaption.height < 0) { 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.top += m_rtCaption.height; 1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_rtCaption.width < 0) { 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.left += m_rtCaption.width; 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtCaption.width = -m_rtCaption.width; 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::AddUIMargin(int32_t iCapPlacement) { 1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF rtUIMargin = m_pDataAcc->GetUIMargin(); 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.top -= rtUIMargin.top / 2 - rtUIMargin.height / 2; 1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fLeftAddRight = rtUIMargin.left + rtUIMargin.width; 1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fTopAddBottom = rtUIMargin.top + rtUIMargin.height; 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_rtUI.width < fLeftAddRight) { 1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iCapPlacement == XFA_ATTRIBUTEENUM_Right || 1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iCapPlacement == XFA_ATTRIBUTEENUM_Left) { 1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left -= fLeftAddRight - m_rtUI.width; 1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left -= 2 * (fLeftAddRight - m_rtUI.width); 2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.width += 2 * (fLeftAddRight - m_rtUI.width); 2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_rtUI.height < fTopAddBottom) { 2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) { 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.left -= fTopAddBottom - m_rtUI.height; 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.top -= fTopAddBottom - m_rtUI.height; 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_rtUI.height += 2 * (fTopAddBottom - m_rtUI.height); 2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::RenderWidget(CFX_Graphics* pGS, 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Matrix* pMatrix, 2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStatus) { 2145ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (!IsMatchVisibleStatus(dwStatus)) 2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 2165ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 2175ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_Matrix mtRotate = GetRotateMatrix(); 2185ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (pMatrix) 2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann mtRotate.Concat(*pMatrix); 2205ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); 2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DrawBorder(pGS, borderUI, m_rtUI, &mtRotate, 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round 2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? XFA_DRAWBOX_ForceRound 2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : 0); 2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RenderCaption(pGS, &mtRotate); 2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DrawHighlight(pGS, &mtRotate, dwStatus, 2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round); 2305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_Matrix mt(1, 0, 0, 1, m_rtCheckBox.left, m_rtCheckBox.top); 2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann mt.Concat(mtRotate); 2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget, pGS, &mt); 2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::OnLButtonUp(uint32_t dwFlags, 2355ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann const CFX_PointF& point) { 2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pNormalWidget || !IsButtonDown()) 2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetButtonDown(false); 2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_MessageMouse ms(nullptr, m_pNormalWidget); 2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ms.m_dwCmd = FWL_MouseCommand::LeftButtonUp; 2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ms.m_dwFlags = dwFlags; 2435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ms.m_pos = FWLToClient(point); 2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann TranslateFWLMessage(&ms); 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannXFA_CHECKSTATE CXFA_FFCheckButton::FWLState2XFAState() { 2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwState = m_pNormalWidget->GetStates(); 2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwState & FWL_STATE_CKB_Checked) 2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_CHECKSTATE_On; 2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwState & FWL_STATE_CKB_Neutral) 2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_CHECKSTATE_Neutral; 2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_CHECKSTATE_Off; 2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::CommitData() { 2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_CHECKSTATE eCheckState = FWLState2XFAState(); 2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->SetCheckState(eCheckState, true); 2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::IsDataChanged() { 2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_CHECKSTATE eCheckState = FWLState2XFAState(); 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pDataAcc->GetCheckState() != eCheckState; 2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::SetFWLCheckState(XFA_CHECKSTATE eCheckState) { 2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (eCheckState == XFA_CHECKSTATE_Neutral) { 2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->SetStates(FWL_STATE_CKB_Neutral); 2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (eCheckState == XFA_CHECKSTATE_On) 2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->SetStates(FWL_STATE_CKB_Checked); 2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->RemoveStates(FWL_STATE_CKB_Checked); 2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFCheckButton::UpdateFWLData() { 2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pNormalWidget) { 2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState(); 2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetFWLCheckState(eState); 2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pNormalWidget->Update(); 2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) { 2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldDelegate->OnProcessMessage(pMessage); 2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) { 2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFField::OnProcessEvent(pEvent); 2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (pEvent->GetType()) { 2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CFWL_Event::Type::CheckStateChanged: { 2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_EventParam eParam; 2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_eType = XFA_EVENT_Change; 2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw); 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pFFExclGroup = m_pDataAcc->GetExclGroup(); 2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (ProcessCommittedData()) { 3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = pFFExclGroup; 3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pFFExclGroup) { 3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDocView->AddValidateWidget(pFFExclGroup); 3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDocView->AddCalculateWidgetAcc(pFFExclGroup); 3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); 3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = m_pDataAcc; 3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); 3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetFWLCheckState(m_pDataAcc->GetCheckState()); 3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pFFExclGroup) { 3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = pFFExclGroup; 3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = m_pDataAcc; 3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldDelegate->OnProcessEvent(pEvent); 3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics, 3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_Matrix* pMatrix) { 3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); 3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 329