void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageSpan( CFXJSE_Arguments* pArguments) { int32_t iLength = pArguments->GetLength(); if (iLength != 1) { ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); return; } CXFA_Node* pNode = NULL; if (iLength >= 1) { pNode = (CXFA_Node*)pArguments->GetObject(0); } if (!pNode) { return; } IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } FXJSE_HVALUE hValue = pArguments->GetReturnValue(); CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { FXJSE_Value_SetInteger(hValue, -1); return; } int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); int32_t iPageSpan = iLast - iFirst + 1; if (hValue) { FXJSE_Value_SetInteger(hValue, iPageSpan); } }
void CScript_LayoutPseudoModel::PageImp(CFXJSE_Arguments* pArguments, FX_BOOL bAbsPage) { int32_t iLength = pArguments->GetLength(); if (iLength != 1) { const FX_WCHAR* methodName; if (bAbsPage) { methodName = L"absPage"; } else { methodName = L"page"; } ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); return; } CXFA_Node* pNode = nullptr; if (iLength >= 1) { pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); } int32_t iPage = 0; CFXJSE_Value* pValue = pArguments->GetReturnValue(); if (!pNode && pValue) pValue->SetInteger(iPage); CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { pValue->SetInteger(-1); return; } iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); if (pValue) pValue->SetInteger(bAbsPage ? iPage : iPage + 1); }
void CScript_LayoutPseudoModel::PageSpan(CFXJSE_Arguments* pArguments) { int32_t iLength = pArguments->GetLength(); if (iLength != 1) { ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); return; } CXFA_Node* pNode = nullptr; if (iLength >= 1) { pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); } if (!pNode) { return; } CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CFXJSE_Value* pValue = pArguments->GetReturnValue(); CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { pValue->SetInteger(-1); return; } int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); int32_t iPageSpan = iLast - iFirst + 1; if (pValue) pValue->SetInteger(iPageSpan); }
void CXFA_FFTabOrderPageWidgetIterator::OrderContainer( CXFA_LayoutItemIterator* sIterator, CXFA_LayoutItem* pContainerItem, CXFA_TabParam* pContainer, FX_BOOL& bCurrentItem, FX_BOOL& bContentArea, FX_BOOL bMarsterPage) { CFX_ArrayTemplate<CXFA_TabParam*> tabParams; CXFA_LayoutItem* pSearchItem = sIterator->MoveToNext(); while (pSearchItem) { if (!pSearchItem->IsContentLayoutItem()) { bContentArea = TRUE; pSearchItem = sIterator->MoveToNext(); continue; } if (bMarsterPage && bContentArea) { break; } if (bMarsterPage || bContentArea) { CXFA_FFWidget* hWidget = GetWidget(pSearchItem); if (!hWidget) { pSearchItem = sIterator->MoveToNext(); continue; } if (pContainerItem && (pSearchItem->GetParent() != pContainerItem)) { bCurrentItem = TRUE; break; } CXFA_TabParam* pParam = new CXFA_TabParam; pParam->m_pWidget = hWidget; tabParams.Add(pParam); if (XFA_IsLayoutElement(pSearchItem->GetFormNode()->GetElementType(), TRUE)) { OrderContainer(sIterator, pSearchItem, pParam, bCurrentItem, bContentArea, bMarsterPage); } } if (bCurrentItem) { pSearchItem = sIterator->GetCurrent(); bCurrentItem = FALSE; } else { pSearchItem = sIterator->MoveToNext(); } } int32_t iChildren = tabParams.GetSize(); if (iChildren > 1) { FXSYS_qsort(tabParams.GetData(), iChildren, sizeof(void*), XFA_TabOrderWidgetComparator); } for (int32_t iStart = 0; iStart < iChildren; iStart++) { CXFA_TabParam* pParam = tabParams[iStart]; pContainer->m_Children.Add(pParam->m_pWidget); if (pParam->m_Children.GetSize() > 0) { pContainer->m_Children.Append(pParam->m_Children); } delete pParam; } tabParams.RemoveAll(); }
void CXFA_FFTabOrderPageWidgetIterator::OrderContainer( CXFA_LayoutItemIterator* sIterator, CXFA_LayoutItem* pContainerItem, CXFA_TabParam* pContainer, bool& bCurrentItem, bool& bContentArea, bool bMarsterPage) { CFX_ArrayTemplate<CXFA_TabParam*> tabParams; CXFA_LayoutItem* pSearchItem = sIterator->MoveToNext(); while (pSearchItem) { if (!pSearchItem->IsContentLayoutItem()) { bContentArea = true; pSearchItem = sIterator->MoveToNext(); continue; } if (bMarsterPage && bContentArea) { break; } if (bMarsterPage || bContentArea) { CXFA_FFWidget* hWidget = GetWidget(pSearchItem); if (!hWidget) { pSearchItem = sIterator->MoveToNext(); continue; } if (pContainerItem && (pSearchItem->GetParent() != pContainerItem)) { bCurrentItem = true; break; } CXFA_TabParam* pParam = new CXFA_TabParam; pParam->m_pWidget = hWidget; tabParams.Add(pParam); if (IsLayoutElement(pSearchItem->GetFormNode()->GetElementType(), true)) { OrderContainer(sIterator, pSearchItem, pParam, bCurrentItem, bContentArea, bMarsterPage); } } if (bCurrentItem) { pSearchItem = sIterator->GetCurrent(); bCurrentItem = false; } else { pSearchItem = sIterator->MoveToNext(); } } int32_t iChildren = tabParams.GetSize(); if (iChildren > 1) { FXSYS_qsort(tabParams.GetData(), iChildren, sizeof(void*), XFA_TabOrderWidgetComparator); } for (int32_t iStart = 0; iStart < iChildren; iStart++) { std::unique_ptr<CXFA_TabParam> pParam(tabParams[iStart]); pContainer->m_Children.push_back(pParam->m_pWidget); pContainer->m_Children.insert(pContainer->m_Children.end(), pParam->m_Children.begin(), pParam->m_Children.end()); } tabParams.RemoveAll(); }
void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp( CFXJSE_Arguments* pArguments, FX_BOOL bAbsPage) { int32_t iLength = pArguments->GetLength(); if (iLength != 1) { const FX_WCHAR* methodName; if (bAbsPage) { methodName = L"absPage"; } else { methodName = L"page"; } ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); return; } CXFA_Node* pNode = NULL; if (iLength >= 1) { pNode = (CXFA_Node*)pArguments->GetObject(0); } int32_t iPage = 0; FXJSE_HVALUE hValue = pArguments->GetReturnValue(); if (!pNode && hValue) { FXJSE_Value_SetInteger(hValue, iPage); } IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { FXJSE_Value_SetInteger(hValue, -1); return; } iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); if (hValue) { FXJSE_Value_SetInteger(hValue, bAbsPage ? iPage : iPage + 1); } }
void CScript_LayoutPseudoModel::HWXY(CFXJSE_Arguments* pArguments, XFA_LAYOUTMODEL_HWXY layoutModel) { int32_t iLength = pArguments->GetLength(); if (iLength < 1 || iLength > 3) { const FX_WCHAR* methodName = nullptr; switch (layoutModel) { case XFA_LAYOUTMODEL_H: methodName = L"h"; break; case XFA_LAYOUTMODEL_W: methodName = L"w"; break; case XFA_LAYOUTMODEL_X: methodName = L"x"; break; case XFA_LAYOUTMODEL_Y: methodName = L"y"; break; } ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); return; } CXFA_Node* pNode = nullptr; CFX_WideString wsUnit(L"pt"); int32_t iIndex = 0; if (iLength >= 1) { pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); } if (iLength >= 2) { CFX_ByteString bsUnit = pArguments->GetUTF8String(1); if (!bsUnit.IsEmpty()) { wsUnit = CFX_WideString::FromUTF8(bsUnit.AsStringC()); } } if (iLength >= 3) { iIndex = pArguments->GetInt32(2); } if (!pNode) { return; } CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); if (!pDocLayout) { return; } CFX_RectF rtRect; CXFA_Measurement measure; CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); if (!pLayoutItem) { return; } while (iIndex > 0 && pLayoutItem) { pLayoutItem = pLayoutItem->GetNext(); iIndex--; } CFXJSE_Value* pValue = pArguments->GetReturnValue(); if (!pLayoutItem) { pValue->SetFloat(0); return; } pLayoutItem->GetRect(rtRect, TRUE); switch (layoutModel) { case XFA_LAYOUTMODEL_H: measure.Set(rtRect.height, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_W: measure.Set(rtRect.width, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_X: measure.Set(rtRect.left, XFA_UNIT_Pt); break; case XFA_LAYOUTMODEL_Y: measure.Set(rtRect.top, XFA_UNIT_Pt); break; } XFA_UNIT unit = measure.GetUnit(wsUnit.AsStringC()); FX_FLOAT fValue = measure.ToUnit(unit); fValue = FXSYS_round(fValue * 1000) / 1000.0f; if (pValue) pValue->SetFloat(fValue); }
void* CXFA_FWLTheme::GetCapacity(CFWL_ThemePart* pThemePart, CFWL_WidgetCapacity dwCapacity) { switch (dwCapacity) { case CFWL_WidgetCapacity::Font: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { return pWidget->GetDataAcc()->GetFDEFont(); } break; } case CFWL_WidgetCapacity::FontSize: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_fCapacity = pWidget->GetDataAcc()->GetFontSize(); return &m_fCapacity; } break; } case CFWL_WidgetCapacity::TextColor: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_dwCapacity = pWidget->GetDataAcc()->GetTextColor(); return &m_dwCapacity; } break; } case CFWL_WidgetCapacity::LineHeight: { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { m_fCapacity = pWidget->GetDataAcc()->GetLineHeight(); return &m_fCapacity; } break; } case CFWL_WidgetCapacity::ScrollBarWidth: { m_fCapacity = 9; return &m_fCapacity; } case CFWL_WidgetCapacity::UIMargin: { CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); if (pWidget) { CXFA_LayoutItem* pItem = pWidget; CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); pWidgetAcc->GetUIMargin(m_Rect); if (CXFA_Para para = pWidgetAcc->GetPara()) { m_Rect.left += para.GetMarginLeft(); if (pWidgetAcc->IsMultiLine()) { m_Rect.width += para.GetMarginRight(); } } if (!pItem->GetPrev()) { if (pItem->GetNext()) { m_Rect.height = 0; } } else if (!pItem->GetNext()) { m_Rect.top = 0; } else { m_Rect.top = 0; m_Rect.height = 0; } } return &m_Rect; } case CFWL_WidgetCapacity::SpaceAboveBelow: { CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget); if (pWidget) { CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc(); if (CXFA_Para para = pWidgetAcc->GetPara()) { m_SizeAboveBelow.x = para.GetSpaceAbove(); m_SizeAboveBelow.y = para.GetSpaceBelow(); } } return &m_SizeAboveBelow; } default: break; } int dwCapValue = static_cast<int>(dwCapacity); if (pThemePart->m_pWidget->GetClassID() == FWL_Type::MonthCalendar && dwCapValue >= static_cast<int>(CFWL_WidgetCapacity::Today) && dwCapValue <= static_cast<int>(CFWL_WidgetCapacity::December)) { if (CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) { IXFA_AppProvider* pAppProvider = pWidget->GetAppProvider(); m_wsResource.clear(); switch (dwCapacity) { case CFWL_WidgetCapacity::Sun: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Sun, m_wsResource); break; case CFWL_WidgetCapacity::Mon: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Mon, m_wsResource); break; case CFWL_WidgetCapacity::Tue: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Tue, m_wsResource); break; case CFWL_WidgetCapacity::Wed: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Wed, m_wsResource); break; case CFWL_WidgetCapacity::Thu: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Thu, m_wsResource); break; case CFWL_WidgetCapacity::Fri: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Fri, m_wsResource); break; case CFWL_WidgetCapacity::Sat: pAppProvider->LoadString(XFA_IDS_StringWeekDay_Sat, m_wsResource); break; case CFWL_WidgetCapacity::January: pAppProvider->LoadString(XFA_IDS_StringMonth_Jan, m_wsResource); break; case CFWL_WidgetCapacity::February: pAppProvider->LoadString(XFA_IDS_StringMonth_Feb, m_wsResource); break; case CFWL_WidgetCapacity::March: pAppProvider->LoadString(XFA_IDS_StringMonth_March, m_wsResource); break; case CFWL_WidgetCapacity::April: pAppProvider->LoadString(XFA_IDS_StringMonth_April, m_wsResource); break; case CFWL_WidgetCapacity::May: pAppProvider->LoadString(XFA_IDS_StringMonth_May, m_wsResource); break; case CFWL_WidgetCapacity::June: pAppProvider->LoadString(XFA_IDS_StringMonth_June, m_wsResource); break; case CFWL_WidgetCapacity::July: pAppProvider->LoadString(XFA_IDS_StringMonth_July, m_wsResource); break; case CFWL_WidgetCapacity::August: pAppProvider->LoadString(XFA_IDS_StringMonth_Aug, m_wsResource); break; case CFWL_WidgetCapacity::September: pAppProvider->LoadString(XFA_IDS_StringMonth_Sept, m_wsResource); break; case CFWL_WidgetCapacity::October: pAppProvider->LoadString(XFA_IDS_StringMonth_Oct, m_wsResource); break; case CFWL_WidgetCapacity::November: pAppProvider->LoadString(XFA_IDS_StringMonth_Nov, m_wsResource); break; case CFWL_WidgetCapacity::December: pAppProvider->LoadString(XFA_IDS_StringMonth_Dec, m_wsResource); break; case CFWL_WidgetCapacity::Today: pAppProvider->LoadString(XFA_IDS_String_Today, m_wsResource); break; default: break; } if (!m_wsResource.IsEmpty()) return &m_wsResource; } } return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity); }
void CXFA_FFField::CapPlacement() { CFX_RectF rtWidget; GetRectWithoutRotate(rtWidget); CXFA_Margin mgWidget = m_pDataAcc->GetMargin(); if (mgWidget) { CXFA_LayoutItem* pItem = this; FX_FLOAT fLeftInset = 0, fRightInset = 0, fTopInset = 0, fBottomInset = 0; mgWidget.GetLeftInset(fLeftInset); mgWidget.GetRightInset(fRightInset); mgWidget.GetTopInset(fTopInset); mgWidget.GetBottomInset(fBottomInset); if (!pItem->GetPrev() && !pItem->GetNext()) { rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset); } else { if (!pItem->GetPrev()) { rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, 0); } else if (!pItem->GetNext()) { rtWidget.Deflate(fLeftInset, 0, fRightInset, fBottomInset); } else { rtWidget.Deflate(fLeftInset, 0, fRightInset, 0); } } } XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown; FX_FLOAT fCapReserve = 0; CXFA_Caption caption = m_pDataAcc->GetCaption(); if (caption && caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) { iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType(); if (iCapPlacement == XFA_ATTRIBUTEENUM_Top && GetPrev()) { m_rtCaption.Set(0, 0, 0, 0); } else if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom && GetNext()) { m_rtCaption.Set(0, 0, 0, 0); } else { fCapReserve = caption.GetReserve(); CXFA_LayoutItem* pItem = this; if (!pItem->GetPrev() && !pItem->GetNext()) { m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height); } else { pItem = pItem->GetFirst(); pItem->GetRect(m_rtCaption); pItem = pItem->GetNext(); while (pItem) { CFX_RectF rtRect; pItem->GetRect(rtRect); m_rtCaption.height += rtRect.Height(); pItem = pItem->GetNext(); } XFA_RectWidthoutMargin(m_rtCaption, mgWidget); } CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout(); if (fCapReserve <= 0 && pCapTextLayout) { CFX_SizeF size; CFX_SizeF minSize; CFX_SizeF maxSize; pCapTextLayout->CalcSize(minSize, maxSize, size); if (iCapPlacement == XFA_ATTRIBUTEENUM_Top || iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) { fCapReserve = size.y; } else { fCapReserve = size.x; } } } } m_rtUI = rtWidget; switch (iCapPlacement) { case XFA_ATTRIBUTEENUM_Left: { m_rtCaption.width = fCapReserve; CapLeftRightPlacement(caption, rtWidget, iCapPlacement); m_rtUI.width -= fCapReserve; m_rtUI.left += fCapReserve; } break; case XFA_ATTRIBUTEENUM_Top: { m_rtCaption.height = fCapReserve; CapTopBottomPlacement(caption, rtWidget, iCapPlacement); m_rtUI.top += fCapReserve; m_rtUI.height -= fCapReserve; } break; case XFA_ATTRIBUTEENUM_Right: { m_rtCaption.left = m_rtCaption.right() - fCapReserve; m_rtCaption.width = fCapReserve; CapLeftRightPlacement(caption, rtWidget, iCapPlacement); m_rtUI.width -= fCapReserve; } break; case XFA_ATTRIBUTEENUM_Bottom: { m_rtCaption.top = m_rtCaption.bottom() - fCapReserve; m_rtCaption.height = fCapReserve; CapTopBottomPlacement(caption, rtWidget, iCapPlacement); m_rtUI.height -= fCapReserve; } break; case XFA_ATTRIBUTEENUM_Inline: break; default: break; } CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); if (borderUI) { CXFA_Margin margin = borderUI.GetMargin(); if (margin) { XFA_RectWidthoutMargin(m_rtUI, margin); } } m_rtUI.Normalize(); }