void AP_Dialog_FormatFrame::setCurFrameProps(void) { XAP_Frame * frame = m_pApp->getLastFocussedFrame(); if (!frame) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } FV_View * pView = static_cast<FV_View *>(frame->getCurrentView()); if (!pView) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } PT_DocPosition pos = pView->getPoint(); if (/* m_bSettingsChanged || */ m_iOldPos == pos) { // comparing the actual cell pos would be even better; but who cares :) return; } m_iOldPos = pos; if (!pView->isInFrame(pos)) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } m_bLineToggled = false; m_borderLineStyleRight = LS_NORMAL; m_borderLineStyleLeft = LS_NORMAL; m_borderLineStyleTop = LS_NORMAL; m_borderLineStyleBottom = LS_NORMAL; UT_RGBColor black(0,0,0); UT_RGBColor white(255,255,255); m_borderColor = black; m_borderColorRight = black; m_borderColorLeft = black; m_borderColorTop = black; m_borderColorBottom = black; m_borderThicknessRight = 1.0f; m_borderThicknessLeft = 1.0f; m_borderThicknessTop = 1.0f; m_borderThicknessBottom = 1.0f; m_sBorderThickness = "1.00pt", m_sBorderThicknessRight = "1.00pt"; m_sBorderThicknessLeft = "1.00pt"; m_sBorderThicknessTop = "1.00pt"; m_sBorderThicknessBottom = "1.00pt"; m_backgroundColor = white; m_bSetWrapping = false; m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; PD_Document * pDoc = pView->getDocument(); PL_StruxDocHandle sdh; m_bSensitive = false; if (pDoc->getStruxOfTypeFromPosition(pos, PTX_SectionFrame, &sdh)) if (PT_AttrPropIndex api = pDoc->getAPIFromSDH(sdh)) { const PP_AttrProp * pAP = 0; if (pDoc->getAttrProp(api, &pAP)) if (pAP) { m_bSensitive = true; #define REPLACE_CELL_PROPERTY(X) \ do { \ const gchar * prop = 0; \ if (pAP->getProperty(X, prop)) \ m_vecProps.addOrReplaceProp(X, prop); \ else \ m_vecProps.removeProp(X); \ } while (0) REPLACE_CELL_PROPERTY("right-style"); REPLACE_CELL_PROPERTY("left-style"); REPLACE_CELL_PROPERTY("top-style"); REPLACE_CELL_PROPERTY("bot-style"); REPLACE_CELL_PROPERTY("right-thickness"); REPLACE_CELL_PROPERTY("left-thickness"); REPLACE_CELL_PROPERTY("top-thickness"); REPLACE_CELL_PROPERTY("bot-thickness"); REPLACE_CELL_PROPERTY("right-color"); REPLACE_CELL_PROPERTY("left-color"); REPLACE_CELL_PROPERTY("top-color"); REPLACE_CELL_PROPERTY("bot-color"); REPLACE_CELL_PROPERTY("background-color"); REPLACE_CELL_PROPERTY("wrap-mode"); REPLACE_CELL_PROPERTY("position-to"); } } if (!m_bSensitive) { setAllSensitivities(); return; } if(pView->isImageAtStrux(m_iOldPos,PTX_SectionFrame)) { if(true /* pView->isInFrame(pView->getPoint()) */) { fl_BlockLayout * pBL = pView->getCurrentBlock(); fl_FrameLayout * pFrame = static_cast<fl_FrameLayout *>(pBL->myContainingLayout()); if(pFrame->getContainerType() != FL_CONTAINER_FRAME) { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } else { FG_Graphic * pFG = FG_GraphicRaster::createFromStrux(pFrame); if(pFG) { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); m_pGraphic = pFG; m_sImagePath = pFG->getDataId(); GR_Graphics * pG = m_pFormatFramePreview->getGraphics(); m_pImage = _makeImageForRaster(m_sImagePath, pG, m_pGraphic); } } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } UT_String bstmp = UT_String_sprintf("%d", FS_FILL); m_vecProps.addOrReplaceProp("bg-style", bstmp.c_str()); // FIXME ?? const gchar * pszStyle = 0; m_vecProps.getProp("background-color", pszStyle); if (pszStyle) { m_backgroundColor.setColor(pszStyle); } /* update border properties */ long linestyle; pszStyle = 0; m_vecProps.getProp("right-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleRight = linestyle; } pszStyle = 0; m_vecProps.getProp("left-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleLeft = linestyle; } pszStyle = 0; m_vecProps.getProp("top-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleTop = linestyle; } pszStyle = 0; m_vecProps.getProp("bot-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleBottom = linestyle; } pszStyle = 0; m_vecProps.getProp("right-color", pszStyle); if (pszStyle) { m_borderColorRight.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("left-color", pszStyle); if (pszStyle) { m_borderColorLeft.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("top-color", pszStyle); if (pszStyle) { m_borderColorTop.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("bot-color", pszStyle); if (pszStyle) { m_borderColorBottom.setColor(pszStyle); } UT_UTF8String thickness; pszStyle = 0; m_vecProps.getProp("right-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessRight(thickness); } pszStyle = 0; m_vecProps.getProp("left-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessLeft(thickness); } pszStyle = 0; m_vecProps.getProp("top-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessTop(thickness); } pszStyle = 0; m_vecProps.getProp("bot-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessBottom(thickness); } /* update wrap properties */ pszStyle = 0; m_vecProps.getProp("wrap-mode", pszStyle); if (pszStyle) { if (strcmp (pszStyle, "wrapped-both") == 0) { m_bSetWrapping = true; } } /* update position properties */ pszStyle = 0; m_vecProps.getProp("position-to", pszStyle); if (pszStyle) { if (strcmp (pszStyle, "block-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; } else if (strcmp (pszStyle, "column-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_COLUMN; } else if (strcmp (pszStyle, "page-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_PAGE; } } /* draw the preview with the changed properties */ if(m_pFormatFramePreview) { m_pFormatFramePreview->draw(); } m_bSettingsChanged = false; setActiveFrame(frame); // this is just to trigger the subclass to update the dialog }
bool fp_FieldTableSumCols::calculateValue(void) { FV_View * pView = _getView(); pf_Frag_Strux* tableSDH= NULL; UT_sint32 numRows =0; UT_sint32 numCols = 0; bUseCurrency = false; cCurrency = '$'; pf_Frag_Strux* sdh = getBlock()->getStruxDocHandle(); PD_Document * pDoc = getBlock()->getDocument(); if(pDoc->isPieceTableChanging()) { return false; } if(getLine() == NULL) { return false; } fp_Container * pCol = getLine()->getColumn(); if(pCol == NULL) { return false; } fp_ShadowContainer * pShad =NULL; fl_HdrFtrShadow * pShadL = NULL; if(pCol->getContainerType() == FP_CONTAINER_COLUMN_SHADOW) { pShad = static_cast<fp_ShadowContainer *>(pCol); pShadL = pShad->getShadow(); } PT_DocPosition pos = pDoc->getStruxPosition(sdh)+1; pDoc->getStruxOfTypeFromPosition(pos,PTX_SectionTable,&tableSDH); pDoc-> getRowsColsFromTableSDH(tableSDH, pView->isShowRevisions(), pView->getRevisionLevel(), &numRows, &numCols); UT_UTF8String sValF; if(!pView->isInTable(pos)) { sValF = "???"; return _setValue(sValF.ucs4_str().ucs4_str()); } fl_CellLayout * pCell = NULL; UT_sint32 myLeft,myRight,myTop,myBot; pView->getCellParams(pos,&myLeft,&myRight,&myTop,&myBot); UT_sint32 col = 0; UT_sint32 row = myTop; UT_sint32 lastCol = -1; double dSum = 0.0; for(col = 0; col < numCols; col++) { pf_Frag_Strux* sdhCell = pDoc->getCellSDHFromRowCol(tableSDH,true,99999,row,col); UT_sint32 i = getBlock()->getDocLayout()->getLID(); fl_ContainerLayout* fmtCell = pDoc->getNthFmtHandle(sdhCell,i); pCell = static_cast<fl_CellLayout *>(fmtCell); if(pCell->getLeftAttach() == lastCol) { continue; } if((pCell->getTopAttach() == myTop) && (pCell->getLeftAttach() == myLeft)) { continue; } UT_GrowBuf grText; pCell->appendTextToBuf(grText); if(grText.getLength() == 0) { fl_ContainerLayout * pC = pCell->getFirstLayout(); while(pC) { if(pC->getContainerType() == FL_CONTAINER_BLOCK) { fl_BlockLayout * pBL = static_cast<fl_BlockLayout *>(pC); if(pShadL) { pBL = static_cast<fl_BlockLayout *>(pShadL->findMatchingContainer(pBL)); } if(pBL == NULL) { continue; } fp_Run * pRun = pBL->getFirstRun(); while(pRun) { if(pRun->getType() == FPRUN_FIELD) { fp_FieldRun * pFRun = static_cast<fp_FieldRun *>(pRun); const UT_UCS4Char * szVal = pFRun->getValue(); sValF.clear(); sValF.appendUCS4(szVal); dSum += dGetVal(sValF.utf8_str()); pRun = NULL; pC = NULL; break; } pRun = pRun->getNextRun(); } } if(pC) { pC = pC->getNext(); } } } else { sValF.clear(); sValF.appendUCS4(reinterpret_cast<const UT_UCS4Char *>(grText.getPointer(0)),grText.getLength()); dSum += dGetVal(sValF.utf8_str()); } lastCol = col; } sFormatDouble(sValF,dSum); return _setValue(sValF.ucs4_str().ucs4_str()); }