sc/source/ui/view/cellsh3.cxx | 138 ++--- sc/source/ui/view/dbfunc.cxx | 88 +-- sc/source/ui/view/dbfunc3.cxx | 336 ++++++------ sc/source/ui/view/drawvie3.cxx | 118 ++-- sc/source/ui/view/drawvie4.cxx | 64 +- sc/source/ui/view/drawview.cxx | 214 ++++---- sc/source/ui/view/editsh.cxx | 26 sc/source/ui/view/gridmerg.cxx | 60 +- sc/source/ui/view/gridwin.cxx | 642 ++++++++++++------------ sc/source/ui/view/gridwin3.cxx | 22 sc/source/ui/view/gridwin4.cxx | 536 ++++++++++---------- sc/source/ui/view/gridwin_dbgutil.cxx | 34 - sc/source/ui/view/hdrcont.cxx | 64 +- sc/source/ui/view/invmerge.cxx | 65 +- sc/source/ui/view/notemark.cxx | 90 +-- sc/source/ui/view/olinewin.cxx | 38 - sc/source/ui/view/output.cxx | 420 ++++++++-------- sc/source/ui/view/output2.cxx | 92 +-- sc/source/ui/view/preview.cxx | 498 +++++++++---------- sc/source/ui/view/prevloc.cxx | 84 +-- sc/source/ui/view/prevwsh.cxx | 64 +- sc/source/ui/view/printfun.cxx | 253 ++++----- sc/source/ui/view/select.cxx | 94 +-- sc/source/ui/view/tabcont.cxx | 70 +- sc/source/ui/view/tabview.cxx | 252 ++++----- sc/source/ui/view/tabview2.cxx | 300 +++++------ sc/source/ui/view/tabview3.cxx | 888 +++++++++++++++++----------------- sc/source/ui/view/tabview4.cxx | 134 ++--- sc/source/ui/view/tabview5.cxx | 307 +++++------ sc/source/ui/view/tabvwsh2.cxx | 102 +-- sc/source/ui/view/tabvwsh4.cxx | 376 +++++++------- sc/source/ui/view/tabvwshb.cxx | 76 +- sc/source/ui/view/tabvwshc.cxx | 46 - sc/source/ui/view/viewdata.cxx | 212 ++++---- sc/source/ui/view/viewfun2.cxx | 561 ++++++++++----------- sc/source/ui/view/viewfun3.cxx | 114 ++-- sc/source/ui/view/viewfun6.cxx | 58 +- sc/source/ui/view/viewfunc.cxx | 75 +- 38 files changed, 3805 insertions(+), 3806 deletions(-)
New commits: commit df37937018fe8e87dad5dd97689632044ba56de3 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sun Aug 9 11:59:18 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Aug 12 09:58:12 2020 +0200 loplugin:flatten in sc/ui/view Change-Id: I0ea33fc076a280e5f4559eea8420b1b7fa442361 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100400 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index df42b593bc3d..c7a40214c053 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -70,85 +70,85 @@ OString escapeJSON(const OUString &aStr) void lcl_lokGetWholeFunctionList() { const SfxViewShell* pViewShell = SfxViewShell::Current(); - if (comphelper::LibreOfficeKit::isActive() - && pViewShell && pViewShell->isLOKMobilePhone()) + if (!(comphelper::LibreOfficeKit::isActive() + && pViewShell && pViewShell->isLOKMobilePhone())) + return; + + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + sal_uInt32 nListCount = pFuncList->GetCount(); + std::set<OUString> aFuncNameOrderedSet; + for(sal_uInt32 i = 0; i < nListCount; ++i) { - const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); - sal_uInt32 nListCount = pFuncList->GetCount(); - std::set<OUString> aFuncNameOrderedSet; - for(sal_uInt32 i = 0; i < nListCount; ++i) + const ScFuncDesc* pDesc = pFuncList->GetFunction( i ); + if ( pDesc->mxFuncName ) { - const ScFuncDesc* pDesc = pFuncList->GetFunction( i ); - if ( pDesc->mxFuncName ) - { - aFuncNameOrderedSet.insert(*pDesc->mxFuncName); - } + aFuncNameOrderedSet.insert(*pDesc->mxFuncName); } - ScFunctionMgr* pFuncManager = ScGlobal::GetStarCalcFunctionMgr(); - if (pFuncManager && aFuncNameOrderedSet.size()) - { - OStringBuffer aPayload; - aPayload.append("{ \"wholeList\": true, "); - aPayload.append("\"categories\": [ "); + } + ScFunctionMgr* pFuncManager = ScGlobal::GetStarCalcFunctionMgr(); + if (!(pFuncManager && aFuncNameOrderedSet.size())) + return; - formula::FormulaHelper aHelper(pFuncManager); - sal_uInt32 nCategoryCount = pFuncManager->getCount(); - for (sal_uInt32 i = 0; i < nCategoryCount; ++i) - { - OUString sCategoryName = ScFunctionMgr::GetCategoryName(i); - aPayload.append("{"); - aPayload.append("\"name\": \""); - aPayload.append(escapeJSON(sCategoryName)); - aPayload.append("\"}, "); - } - sal_Int32 nLen = aPayload.getLength(); - aPayload[nLen - 2] = ' '; - aPayload[nLen - 1] = ']'; - aPayload.append(", "); - - OUString aDescFuncNameStr; - aPayload.append("\"functions\": [ "); - sal_uInt32 nCurIndex = 0; - for (const OUString& aFuncNameStr : aFuncNameOrderedSet) + OStringBuffer aPayload; + aPayload.append("{ \"wholeList\": true, "); + aPayload.append("\"categories\": [ "); + + formula::FormulaHelper aHelper(pFuncManager); + sal_uInt32 nCategoryCount = pFuncManager->getCount(); + for (sal_uInt32 i = 0; i < nCategoryCount; ++i) + { + OUString sCategoryName = ScFunctionMgr::GetCategoryName(i); + aPayload.append("{"); + aPayload.append("\"name\": \""); + aPayload.append(escapeJSON(sCategoryName)); + aPayload.append("\"}, "); + } + sal_Int32 nLen = aPayload.getLength(); + aPayload[nLen - 2] = ' '; + aPayload[nLen - 1] = ']'; + aPayload.append(", "); + + OUString aDescFuncNameStr; + aPayload.append("\"functions\": [ "); + sal_uInt32 nCurIndex = 0; + for (const OUString& aFuncNameStr : aFuncNameOrderedSet) + { + aDescFuncNameStr = aFuncNameStr + "()"; + sal_Int32 nNextFStart = 0; + const formula::IFunctionDescription* ppFDesc; + ::std::vector< OUString > aArgs; + OUString eqPlusFuncName = "=" + aDescFuncNameStr; + if ( aHelper.GetNextFunc( eqPlusFuncName, false, nNextFStart, nullptr, &ppFDesc, &aArgs ) ) + { + if ( ppFDesc && !ppFDesc->getFunctionName().isEmpty() ) { - aDescFuncNameStr = aFuncNameStr + "()"; - sal_Int32 nNextFStart = 0; - const formula::IFunctionDescription* ppFDesc; - ::std::vector< OUString > aArgs; - OUString eqPlusFuncName = "=" + aDescFuncNameStr; - if ( aHelper.GetNextFunc( eqPlusFuncName, false, nNextFStart, nullptr, &ppFDesc, &aArgs ) ) + if (ppFDesc->getCategory()) { - if ( ppFDesc && !ppFDesc->getFunctionName().isEmpty() ) - { - if (ppFDesc->getCategory()) - { - aPayload.append("{"); - aPayload.append("\"index\": "); - aPayload.append(OString::number(nCurIndex)); - aPayload.append(", "); - aPayload.append("\"category\": "); - aPayload.append(OString::number(ppFDesc->getCategory()->getNumber())); - aPayload.append(", "); - aPayload.append("\"signature\": \""); - aPayload.append(escapeJSON(ppFDesc->getSignature())); - aPayload.append("\", "); - aPayload.append("\"description\": \""); - aPayload.append(escapeJSON(ppFDesc->getDescription())); - aPayload.append("\"}, "); - } - } + aPayload.append("{"); + aPayload.append("\"index\": "); + aPayload.append(OString::number(nCurIndex)); + aPayload.append(", "); + aPayload.append("\"category\": "); + aPayload.append(OString::number(ppFDesc->getCategory()->getNumber())); + aPayload.append(", "); + aPayload.append("\"signature\": \""); + aPayload.append(escapeJSON(ppFDesc->getSignature())); + aPayload.append("\", "); + aPayload.append("\"description\": \""); + aPayload.append(escapeJSON(ppFDesc->getDescription())); + aPayload.append("\"}, "); } - ++nCurIndex; } - nLen = aPayload.getLength(); - aPayload[nLen - 2] = ' '; - aPayload[nLen - 1] = ']'; - aPayload.append(" }"); - - OString s = aPayload.makeStringAndClear(); - pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CALC_FUNCTION_LIST, s.getStr()); } + ++nCurIndex; } + nLen = aPayload.getLength(); + aPayload[nLen - 2] = ' '; + aPayload[nLen - 1] = ']'; + aPayload.append(" }"); + + OString s = aPayload.makeStringAndClear(); + pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_CALC_FUNCTION_LIST, s.getStr()); } } // end namespace diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index ba99e9185a8c..2f559ddea045 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -55,24 +55,24 @@ void ScDBFunc::GotoDBArea( const OUString& rDBName ) ScDocument* pDoc = GetViewData().GetDocument(); ScDBCollection* pDBCol = pDoc->GetDBCollection(); ScDBData* pData = pDBCol->getNamedDBs().findByUpperName(ScGlobal::getCharClassPtr()->uppercase(rDBName)); - if (pData) - { - SCTAB nTab = 0; - SCCOL nStartCol = 0; - SCROW nStartRow = 0; - SCCOL nEndCol = 0; - SCROW nEndRow = 0; - - pData->GetArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); - SetTabNo( nTab ); - - MoveCursorAbs( nStartCol, nStartRow, SC_FOLLOW_JUMP, - false, false ); // bShift,bControl - DoneBlockMode(); - InitBlockMode( nStartCol, nStartRow, nTab ); - MarkCursor( nEndCol, nEndRow, nTab ); - SelectionChanged(); - } + if (!pData) + return; + + SCTAB nTab = 0; + SCCOL nStartCol = 0; + SCROW nStartRow = 0; + SCCOL nEndCol = 0; + SCROW nEndRow = 0; + + pData->GetArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); + SetTabNo( nTab ); + + MoveCursorAbs( nStartCol, nStartRow, SC_FOLLOW_JUMP, + false, false ); // bShift,bControl + DoneBlockMode(); + InitBlockMode( nStartCol, nStartRow, nTab ); + MarkCursor( nEndCol, nEndRow, nTab ); + SelectionChanged(); } // search current datarange for sort / filter @@ -237,37 +237,37 @@ void ScDBFunc::Query( const ScQueryParam& rQueryParam, const ScRange* pAdvSource ScDBDocFunc aDBDocFunc( *pDocSh ); bool bSuccess = aDBDocFunc.Query( nTab, rQueryParam, pAdvSource, bRecord, false ); - if (bSuccess) - { - bool bCopy = !rQueryParam.bInplace; - if (bCopy) - { - // mark target range (data base range has been set up if applicable) - ScDocument& rDoc = pDocSh->GetDocument(); - ScDBData* pDestData = rDoc.GetDBAtCursor( - rQueryParam.nDestCol, rQueryParam.nDestRow, - rQueryParam.nDestTab, ScDBDataPortion::TOP_LEFT ); - if (pDestData) - { - ScRange aDestRange; - pDestData->GetArea(aDestRange); - MarkRange( aDestRange ); - } - } + if (!bSuccess) + return; - if (!bCopy) + bool bCopy = !rQueryParam.bInplace; + if (bCopy) + { + // mark target range (data base range has been set up if applicable) + ScDocument& rDoc = pDocSh->GetDocument(); + ScDBData* pDestData = rDoc.GetDBAtCursor( + rQueryParam.nDestCol, rQueryParam.nDestRow, + rQueryParam.nDestTab, ScDBDataPortion::TOP_LEFT ); + if (pDestData) { - ScTabViewShell::notifyAllViewsSheetGeomInvalidation( - GetViewData().GetViewShell(), - false /* bColumns */, true /* bRows */, - false /* bSizes*/, true /* bHidden */, true /* bFiltered */, - false /* bGroups */, nTab); - UpdateScrollBars(ROW_HEADER); - SelectionChanged(); // for attribute states (filtered rows are ignored) + ScRange aDestRange; + pDestData->GetArea(aDestRange); + MarkRange( aDestRange ); } + } - GetViewData().GetBindings().Invalidate( SID_UNFILTER ); + if (!bCopy) + { + ScTabViewShell::notifyAllViewsSheetGeomInvalidation( + GetViewData().GetViewShell(), + false /* bColumns */, true /* bRows */, + false /* bSizes*/, true /* bHidden */, true /* bFiltered */, + false /* bGroups */, nTab); + UpdateScrollBars(ROW_HEADER); + SelectionChanged(); // for attribute states (filtered rows are ignored) } + + GetViewData().GetBindings().Invalidate( SID_UNFILTER ); } // autofilter-buttons show / hide diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index 429725af03dd..5f19e0f7af59 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -475,128 +475,128 @@ void ScDBFunc::DoSubTotals( const ScSubTotalParam& rParam, bool bRecord, } } - if (bOk) - { - ScDocShellModificator aModificator( *pDocSh ); - - ScSubTotalParam aNewParam( rParam ); // change end of range - ScDocumentUniquePtr pUndoDoc; - std::unique_ptr<ScOutlineTable> pUndoTab; - std::unique_ptr<ScRangeName> pUndoRange; - std::unique_ptr<ScDBCollection> pUndoDB; - - if (bRecord) // record old data - { - bool bOldFilter = bDo && rParam.bDoSort; - SCTAB nTabCount = rDoc.GetTableCount(); - pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); - ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); - if (pTable) - { - pUndoTab.reset(new ScOutlineTable( *pTable )); - - SCCOLROW nOutStartCol; // row/column status - SCCOLROW nOutStartRow; - SCCOLROW nOutEndCol; - SCCOLROW nOutEndRow; - pTable->GetColArray().GetRange( nOutStartCol, nOutEndCol ); - pTable->GetRowArray().GetRange( nOutStartRow, nOutEndRow ); - - pUndoDoc->InitUndo( &rDoc, nTab, nTab, true, true ); - rDoc.CopyToDocument( static_cast<SCCOL>(nOutStartCol), 0, nTab, static_cast<SCCOL>(nOutEndCol), rDoc.MaxRow(), nTab, InsertDeleteFlags::NONE, false, *pUndoDoc ); - rDoc.CopyToDocument( 0, nOutStartRow, nTab, rDoc.MaxCol(), nOutEndRow, nTab, InsertDeleteFlags::NONE, false, *pUndoDoc ); - } - else - pUndoDoc->InitUndo( &rDoc, nTab, nTab, false, bOldFilter ); + if (!bOk) + return; - // record data range - including filter results - rDoc.CopyToDocument( 0,rParam.nRow1+1,nTab, rDoc.MaxCol(),rParam.nRow2,nTab, - InsertDeleteFlags::ALL, false, *pUndoDoc ); + ScDocShellModificator aModificator( *pDocSh ); - // all formulas for reference - rDoc.CopyToDocument( 0,0,0, rDoc.MaxCol(),rDoc.MaxRow(),nTabCount-1, - InsertDeleteFlags::FORMULA, false, *pUndoDoc ); + ScSubTotalParam aNewParam( rParam ); // change end of range + ScDocumentUniquePtr pUndoDoc; + std::unique_ptr<ScOutlineTable> pUndoTab; + std::unique_ptr<ScRangeName> pUndoRange; + std::unique_ptr<ScDBCollection> pUndoDB; - // database and other ranges - ScRangeName* pDocRange = rDoc.GetRangeName(); - if (!pDocRange->empty()) - pUndoRange.reset(new ScRangeName( *pDocRange )); - ScDBCollection* pDocDB = rDoc.GetDBCollection(); - if (!pDocDB->empty()) - pUndoDB.reset(new ScDBCollection( *pDocDB )); + if (bRecord) // record old data + { + bool bOldFilter = bDo && rParam.bDoSort; + SCTAB nTabCount = rDoc.GetTableCount(); + pUndoDoc.reset(new ScDocument( SCDOCMODE_UNDO )); + ScOutlineTable* pTable = rDoc.GetOutlineTable( nTab ); + if (pTable) + { + pUndoTab.reset(new ScOutlineTable( *pTable )); + + SCCOLROW nOutStartCol; // row/column status + SCCOLROW nOutStartRow; + SCCOLROW nOutEndCol; + SCCOLROW nOutEndRow; + pTable->GetColArray().GetRange( nOutStartCol, nOutEndCol ); + pTable->GetRowArray().GetRange( nOutStartRow, nOutEndRow ); + + pUndoDoc->InitUndo( &rDoc, nTab, nTab, true, true ); + rDoc.CopyToDocument( static_cast<SCCOL>(nOutStartCol), 0, nTab, static_cast<SCCOL>(nOutEndCol), rDoc.MaxRow(), nTab, InsertDeleteFlags::NONE, false, *pUndoDoc ); + rDoc.CopyToDocument( 0, nOutStartRow, nTab, rDoc.MaxCol(), nOutEndRow, nTab, InsertDeleteFlags::NONE, false, *pUndoDoc ); } + else + pUndoDoc->InitUndo( &rDoc, nTab, nTab, false, bOldFilter ); + + // record data range - including filter results + rDoc.CopyToDocument( 0,rParam.nRow1+1,nTab, rDoc.MaxCol(),rParam.nRow2,nTab, + InsertDeleteFlags::ALL, false, *pUndoDoc ); + + // all formulas for reference + rDoc.CopyToDocument( 0,0,0, rDoc.MaxCol(),rDoc.MaxRow(),nTabCount-1, + InsertDeleteFlags::FORMULA, false, *pUndoDoc ); + + // database and other ranges + ScRangeName* pDocRange = rDoc.GetRangeName(); + if (!pDocRange->empty()) + pUndoRange.reset(new ScRangeName( *pDocRange )); + ScDBCollection* pDocDB = rDoc.GetDBCollection(); + if (!pDocDB->empty()) + pUndoDB.reset(new ScDBCollection( *pDocDB )); + } - ScOutlineTable* pOut = rDoc.GetOutlineTable( nTab ); - if (pOut) + ScOutlineTable* pOut = rDoc.GetOutlineTable( nTab ); + if (pOut) + { + // Remove all existing outlines in the specified range. + ScOutlineArray& rRowArray = pOut->GetRowArray(); + sal_uInt16 nDepth = rRowArray.GetDepth(); + for (sal_uInt16 i = 0; i < nDepth; ++i) { - // Remove all existing outlines in the specified range. - ScOutlineArray& rRowArray = pOut->GetRowArray(); - sal_uInt16 nDepth = rRowArray.GetDepth(); - for (sal_uInt16 i = 0; i < nDepth; ++i) - { - bool bSize; - rRowArray.Remove(aNewParam.nRow1, aNewParam.nRow2, bSize); - } + bool bSize; + rRowArray.Remove(aNewParam.nRow1, aNewParam.nRow2, bSize); } + } - if (rParam.bReplace) - rDoc.RemoveSubTotals( nTab, aNewParam ); - bool bSuccess = true; - if (bDo) + if (rParam.bReplace) + rDoc.RemoveSubTotals( nTab, aNewParam ); + bool bSuccess = true; + if (bDo) + { + // Sort + if ( rParam.bDoSort || pForceNewSort ) { - // Sort - if ( rParam.bDoSort || pForceNewSort ) - { - pDBData->SetArea( nTab, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); + pDBData->SetArea( nTab, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); - // set subtotal fields before sorting - // (duplicate values are dropped, so that they can be called again) + // set subtotal fields before sorting + // (duplicate values are dropped, so that they can be called again) - ScSortParam aOldSort; - pDBData->GetSortParam( aOldSort ); - ScSortParam aSortParam( aNewParam, pForceNewSort ? *pForceNewSort : aOldSort ); - Sort( aSortParam, false, false ); - } - - bSuccess = rDoc.DoSubTotals( nTab, aNewParam ); + ScSortParam aOldSort; + pDBData->GetSortParam( aOldSort ); + ScSortParam aSortParam( aNewParam, pForceNewSort ? *pForceNewSort : aOldSort ); + Sort( aSortParam, false, false ); } - ScRange aDirtyRange( aNewParam.nCol1, aNewParam.nRow1, nTab, - aNewParam.nCol2, aNewParam.nRow2, nTab ); - rDoc.SetDirty( aDirtyRange, true ); - if (bRecord) - { - pDocSh->GetUndoManager()->AddUndoAction( - std::make_unique<ScUndoSubTotals>( pDocSh, nTab, - rParam, aNewParam.nRow2, - std::move(pUndoDoc), std::move(pUndoTab), // pUndoDBData, - std::move(pUndoRange), std::move(pUndoDB) ) ); - } + bSuccess = rDoc.DoSubTotals( nTab, aNewParam ); + } + ScRange aDirtyRange( aNewParam.nCol1, aNewParam.nRow1, nTab, + aNewParam.nCol2, aNewParam.nRow2, nTab ); + rDoc.SetDirty( aDirtyRange, true ); - if (!bSuccess) - { - // "Can not insert any rows" - ErrorMessage(STR_MSSG_DOSUBTOTALS_2); - } + if (bRecord) + { + pDocSh->GetUndoManager()->AddUndoAction( + std::make_unique<ScUndoSubTotals>( pDocSh, nTab, + rParam, aNewParam.nRow2, + std::move(pUndoDoc), std::move(pUndoTab), // pUndoDBData, + std::move(pUndoRange), std::move(pUndoDB) ) ); + } - // store - pDBData->SetSubTotalParam( aNewParam ); - pDBData->SetArea( nTab, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); - rDoc.CompileDBFormula(); + if (!bSuccess) + { + // "Can not insert any rows" + ErrorMessage(STR_MSSG_DOSUBTOTALS_2); + } - DoneBlockMode(); - InitOwnBlockMode(); - rMark.SetMarkArea( ScRange( aNewParam.nCol1,aNewParam.nRow1,nTab, - aNewParam.nCol2,aNewParam.nRow2,nTab ) ); - MarkDataChanged(); + // store + pDBData->SetSubTotalParam( aNewParam ); + pDBData->SetArea( nTab, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); + rDoc.CompileDBFormula(); - pDocSh->PostPaint(ScRange(0, 0, nTab, rDoc.MaxCol(), rDoc.MaxRow(), nTab), - PaintPartFlags::Grid | PaintPartFlags::Left | PaintPartFlags::Top | PaintPartFlags::Size); + DoneBlockMode(); + InitOwnBlockMode(); + rMark.SetMarkArea( ScRange( aNewParam.nCol1,aNewParam.nRow1,nTab, + aNewParam.nCol2,aNewParam.nRow2,nTab ) ); + MarkDataChanged(); - aModificator.SetDocumentModified(); + pDocSh->PostPaint(ScRange(0, 0, nTab, rDoc.MaxCol(), rDoc.MaxRow(), nTab), + PaintPartFlags::Grid | PaintPartFlags::Left | PaintPartFlags::Top | PaintPartFlags::Size); - SelectionChanged(); - } + aModificator.SetDocumentModified(); + + SelectionChanged(); } // consolidate @@ -1945,86 +1945,86 @@ void ScDBFunc::SetDataPilotDetails(bool bShow, const OUString* pNewDimensionName { ScDPObject* pDPObj = GetViewData().GetDocument()->GetDPAtCursor( GetViewData().GetCurX(), GetViewData().GetCurY(), GetViewData().GetTabNo() ); - if ( pDPObj ) - { - ScDPUniqueStringSet aEntries; - long nSelectDimension = -1; - GetSelectedMemberList( aEntries, nSelectDimension ); + if ( !pDPObj ) + return; - if (!aEntries.empty()) - { - bool bIsDataLayout; - OUString aDimName = pDPObj->GetDimName( nSelectDimension, bIsDataLayout ); - if ( !bIsDataLayout ) - { - ScDPSaveData aData( *pDPObj->GetSaveData() ); - ScDPSaveDimension* pDim = aData.GetDimensionByName( aDimName ); + ScDPUniqueStringSet aEntries; + long nSelectDimension = -1; + GetSelectedMemberList( aEntries, nSelectDimension ); - if ( bShow && pNewDimensionName ) - { - // add the new dimension with the same orientation, at the end + if (aEntries.empty()) + return; - ScDPSaveDimension* pNewDim = aData.GetDimensionByName( *pNewDimensionName ); - ScDPSaveDimension* pDuplicated = nullptr; - if ( pNewDim->GetOrientation() == sheet::DataPilotFieldOrientation_DATA ) - { - // Need to duplicate the dimension, create column/row in addition to data: - // The duplicated dimension inherits the existing settings, pNewDim is modified below. - pDuplicated = aData.DuplicateDimension( *pNewDimensionName ); - } + bool bIsDataLayout; + OUString aDimName = pDPObj->GetDimName( nSelectDimension, bIsDataLayout ); + if ( bIsDataLayout ) + return; - css::sheet::DataPilotFieldOrientation nOrientation = pDim->GetOrientation(); - pNewDim->SetOrientation( nOrientation ); + ScDPSaveData aData( *pDPObj->GetSaveData() ); + ScDPSaveDimension* pDim = aData.GetDimensionByName( aDimName ); - long nPosition = LONG_MAX; - aData.SetPosition( pNewDim, nPosition ); + if ( bShow && pNewDimensionName ) + { + // add the new dimension with the same orientation, at the end - ScDPSaveDimension* pDataLayout = aData.GetDataLayoutDimension(); - if ( pDataLayout->GetOrientation() == nOrientation && - aData.GetDataDimensionCount() <= 1 ) - { - // If there is only one data dimension, the data layout dimension - // must still be the last one in its orientation. - aData.SetPosition( pDataLayout, nPosition ); - } + ScDPSaveDimension* pNewDim = aData.GetDimensionByName( *pNewDimensionName ); + ScDPSaveDimension* pDuplicated = nullptr; + if ( pNewDim->GetOrientation() == sheet::DataPilotFieldOrientation_DATA ) + { + // Need to duplicate the dimension, create column/row in addition to data: + // The duplicated dimension inherits the existing settings, pNewDim is modified below. + pDuplicated = aData.DuplicateDimension( *pNewDimensionName ); + } - if ( pDuplicated ) - { - // The duplicated (data) dimension needs to be behind the original dimension - aData.SetPosition( pDuplicated, nPosition ); - } + css::sheet::DataPilotFieldOrientation nOrientation = pDim->GetOrientation(); + pNewDim->SetOrientation( nOrientation ); - // Hide details for all visible members (selected are changed below). - //! Use all members from source level instead (including non-visible)? + long nPosition = LONG_MAX; + aData.SetPosition( pNewDim, nPosition ); - ScDPUniqueStringSet aVisibleEntries; - pDPObj->GetMemberResultNames( aVisibleEntries, nSelectDimension ); + ScDPSaveDimension* pDataLayout = aData.GetDataLayoutDimension(); + if ( pDataLayout->GetOrientation() == nOrientation && + aData.GetDataDimensionCount() <= 1 ) + { + // If there is only one data dimension, the data layout dimension + // must still be the last one in its orientation. + aData.SetPosition( pDataLayout, nPosition ); + } - for (const OUString& aVisName : aVisibleEntries) - { - ScDPSaveMember* pMember = pDim->GetMemberByName( aVisName ); - pMember->SetShowDetails( false ); - } - } + if ( pDuplicated ) + { + // The duplicated (data) dimension needs to be behind the original dimension + aData.SetPosition( pDuplicated, nPosition ); + } - for (const auto& rEntry : aEntries) - { - ScDPSaveMember* pMember = pDim->GetMemberByName(rEntry); - pMember->SetShowDetails( bShow ); - } + // Hide details for all visible members (selected are changed below). + //! Use all members from source level instead (including non-visible)? - // apply changes - ScDBDocFunc aFunc( *GetViewData().GetDocShell() ); - std::unique_ptr<ScDPObject> pNewObj(new ScDPObject( *pDPObj )); - pNewObj->SetSaveData( aData ); - aFunc.DataPilotUpdate( pDPObj, pNewObj.get(), true, false ); - pNewObj.reset(); + ScDPUniqueStringSet aVisibleEntries; + pDPObj->GetMemberResultNames( aVisibleEntries, nSelectDimension ); - // unmark cell selection - Unmark(); - } + for (const OUString& aVisName : aVisibleEntries) + { + ScDPSaveMember* pMember = pDim->GetMemberByName( aVisName ); + pMember->SetShowDetails( false ); } } + + for (const auto& rEntry : aEntries) + { + ScDPSaveMember* pMember = pDim->GetMemberByName(rEntry); + pMember->SetShowDetails( bShow ); + } + + // apply changes + ScDBDocFunc aFunc( *GetViewData().GetDocShell() ); + std::unique_ptr<ScDPObject> pNewObj(new ScDPObject( *pDPObj )); + pNewObj->SetSaveData( aData ); + aFunc.DataPilotUpdate( pDPObj, pNewObj.get(), true, false ); + pNewObj.reset(); + + // unmark cell selection + Unmark(); } void ScDBFunc::ShowDataPilotSourceData( ScDPObject& rDPObj, const Sequence<sheet::DataPilotFieldFilter>& rFilters ) diff --git a/sc/source/ui/view/drawvie3.cxx b/sc/source/ui/view/drawvie3.cxx index 9a657ddb7361..83dcd0305fc5 100644 --- a/sc/source/ui/view/drawvie3.cxx +++ b/sc/source/ui/view/drawvie3.cxx @@ -57,27 +57,27 @@ ScDrawView::ScDrawView( void ScDrawView::SetPageAnchored() { - if( AreObjectsMarked() ) - { - const SdrMarkList* pMark = &GetMarkedObjectList(); - const size_t nCount = pMark->GetMarkCount(); - - BegUndo(ScResId(SCSTR_UNDO_PAGE_ANCHOR)); - for( size_t i=0; i<nCount; ++i ) - { - SdrObject* pObj = pMark->GetMark(i)->GetMarkedSdrObj(); - AddUndo (std::make_unique<ScUndoAnchorData>( pObj, pDoc, nTab )); - ScDrawLayer::SetPageAnchored( *pObj ); - } - EndUndo(); + if( !AreObjectsMarked() ) + return; - if ( pViewData ) - pViewData->GetDocShell()->SetDrawModified(); + const SdrMarkList* pMark = &GetMarkedObjectList(); + const size_t nCount = pMark->GetMarkCount(); - // Remove the anchor object. - maHdlList.RemoveAllByKind(SdrHdlKind::Anchor); - maHdlList.RemoveAllByKind(SdrHdlKind::Anchor_TR); + BegUndo(ScResId(SCSTR_UNDO_PAGE_ANCHOR)); + for( size_t i=0; i<nCount; ++i ) + { + SdrObject* pObj = pMark->GetMark(i)->GetMarkedSdrObj(); + AddUndo (std::make_unique<ScUndoAnchorData>( pObj, pDoc, nTab )); + ScDrawLayer::SetPageAnchored( *pObj ); } + EndUndo(); + + if ( pViewData ) + pViewData->GetDocShell()->SetDrawModified(); + + // Remove the anchor object. + maHdlList.RemoveAllByKind(SdrHdlKind::Anchor); + maHdlList.RemoveAllByKind(SdrHdlKind::Anchor_TR); } void ScDrawView::SetCellAnchored(bool bResizeWithCell) @@ -85,27 +85,27 @@ void ScDrawView::SetCellAnchored(bool bResizeWithCell) if (!pDoc) return; - if( AreObjectsMarked() ) - { - const SdrMarkList* pMark = &GetMarkedObjectList(); - const size_t nCount = pMark->GetMarkCount(); + if( !AreObjectsMarked() ) + return; - BegUndo(ScResId(SCSTR_UNDO_CELL_ANCHOR)); - for( size_t i=0; i<nCount; ++i ) - { - SdrObject* pObj = pMark->GetMark(i)->GetMarkedSdrObj(); - AddUndo (std::make_unique<ScUndoAnchorData>( pObj, pDoc, nTab )); - ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *pDoc, nTab, bResizeWithCell); - } - EndUndo(); + const SdrMarkList* pMark = &GetMarkedObjectList(); + const size_t nCount = pMark->GetMarkCount(); - if ( pViewData ) - { - pViewData->GetDocShell()->SetDrawModified(); + BegUndo(ScResId(SCSTR_UNDO_CELL_ANCHOR)); + for( size_t i=0; i<nCount; ++i ) + { + SdrObject* pObj = pMark->GetMark(i)->GetMarkedSdrObj(); + AddUndo (std::make_unique<ScUndoAnchorData>( pObj, pDoc, nTab )); + ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *pDoc, nTab, bResizeWithCell); + } + EndUndo(); - // Set the anchor object. - AddCustomHdl(); - } + if ( pViewData ) + { + pViewData->GetDocShell()->SetDrawModified(); + + // Set the anchor object. + AddCustomHdl(); } } @@ -204,32 +204,32 @@ void ScDrawView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) void ScDrawView::UpdateIMap( SdrObject* pObj ) { - if ( pViewData && + if ( !(pViewData && pViewData->GetViewShell()->GetViewFrame()->HasChildWindow( ScIMapChildWindowId() ) && - pObj && ( dynamic_cast<const SdrGrafObj*>( pObj) != nullptr || dynamic_cast<const SdrOle2Obj*>( pObj) != nullptr ) ) - { - Graphic aGraphic; - TargetList aTargetList; - SvxIMapInfo* pIMapInfo = SvxIMapInfo::GetIMapInfo( pObj ); - const ImageMap* pImageMap = nullptr; - if ( pIMapInfo ) - pImageMap = &pIMapInfo->GetImageMap(); - - // handle target list - SfxViewFrame::GetTargetList( aTargetList ); - - // handle graphics from object - if ( dynamic_cast<const SdrGrafObj*>( pObj) != nullptr ) - aGraphic = static_cast<SdrGrafObj*>(pObj)->GetGraphic(); - else - { - const Graphic* pGraphic = static_cast<const SdrOle2Obj*>(pObj)->GetGraphic(); - if ( pGraphic ) - aGraphic = *pGraphic; - } + pObj && ( dynamic_cast<const SdrGrafObj*>( pObj) != nullptr || dynamic_cast<const SdrOle2Obj*>( pObj) != nullptr )) ) + return; + + Graphic aGraphic; + TargetList aTargetList; + SvxIMapInfo* pIMapInfo = SvxIMapInfo::GetIMapInfo( pObj ); + const ImageMap* pImageMap = nullptr; + if ( pIMapInfo ) + pImageMap = &pIMapInfo->GetImageMap(); - ScIMapDlgSet( aGraphic, pImageMap, &aTargetList, pObj ); // from imapwrap + // handle target list + SfxViewFrame::GetTargetList( aTargetList ); + + // handle graphics from object + if ( dynamic_cast<const SdrGrafObj*>( pObj) != nullptr ) + aGraphic = static_cast<SdrGrafObj*>(pObj)->GetGraphic(); + else + { + const Graphic* pGraphic = static_cast<const SdrOle2Obj*>(pObj)->GetGraphic(); + if ( pGraphic ) + aGraphic = *pGraphic; } + + ScIMapDlgSet( aGraphic, pImageMap, &aTargetList, pObj ); // from imapwrap } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/view/drawvie4.cxx b/sc/source/ui/view/drawvie4.cxx index 178f43c45f24..5c6364850308 100644 --- a/sc/source/ui/view/drawvie4.cxx +++ b/sc/source/ui/view/drawvie4.cxx @@ -56,48 +56,48 @@ Point aDragStartDiff; void ScDrawView::BeginDrag( vcl::Window* pWindow, const Point& rStartPos ) { - if ( AreObjectsMarked() ) - { - BrkAction(); + if ( !AreObjectsMarked() ) + return; - tools::Rectangle aMarkedRect = GetAllMarkedRect(); + BrkAction(); - aDragStartDiff = rStartPos - aMarkedRect.TopLeft(); + tools::Rectangle aMarkedRect = GetAllMarkedRect(); - bool bAnyOle, bOneOle; - const SdrMarkList& rMarkList = GetMarkedObjectList(); - CheckOle( rMarkList, bAnyOle, bOneOle ); + aDragStartDiff = rStartPos - aMarkedRect.TopLeft(); - ScDocShellRef aDragShellRef; - if (bAnyOle) - { - aDragShellRef = new ScDocShell; // DocShell needs a Ref immediately - aDragShellRef->DoInitNew(); - } - ScDrawLayer::SetGlobalDrawPersist( aDragShellRef.get() ); - std::unique_ptr<SdrModel> pModel(CreateMarkedObjModel()); - ScDrawLayer::SetGlobalDrawPersist(nullptr); + bool bAnyOle, bOneOle; + const SdrMarkList& rMarkList = GetMarkedObjectList(); + CheckOle( rMarkList, bAnyOle, bOneOle ); - // Charts now always copy their data in addition to the source reference, so - // there's no need to call SchDLL::Update for the charts in the clipboard doc. - // Update with the data (including NumberFormatter) from the live document would - // also store the NumberFormatter in the clipboard chart (#88749#) + ScDocShellRef aDragShellRef; + if (bAnyOle) + { + aDragShellRef = new ScDocShell; // DocShell needs a Ref immediately + aDragShellRef->DoInitNew(); + } + ScDrawLayer::SetGlobalDrawPersist( aDragShellRef.get() ); + std::unique_ptr<SdrModel> pModel(CreateMarkedObjModel()); + ScDrawLayer::SetGlobalDrawPersist(nullptr); - ScDocShell* pDocSh = pViewData->GetDocShell(); + // Charts now always copy their data in addition to the source reference, so + // there's no need to call SchDLL::Update for the charts in the clipboard doc. + // Update with the data (including NumberFormatter) from the live document would + // also store the NumberFormatter in the clipboard chart (#88749#) - TransferableObjectDescriptor aObjDesc; - pDocSh->FillTransferableObjectDescriptor( aObjDesc ); - aObjDesc.maDisplayName = pDocSh->GetMedium()->GetURLObject().GetURLNoPass(); - // maSize is set in ScDrawTransferObj ctor + ScDocShell* pDocSh = pViewData->GetDocShell(); - rtl::Reference<ScDrawTransferObj> pTransferObj = new ScDrawTransferObj( std::move(pModel), pDocSh, aObjDesc ); + TransferableObjectDescriptor aObjDesc; + pDocSh->FillTransferableObjectDescriptor( aObjDesc ); + aObjDesc.maDisplayName = pDocSh->GetMedium()->GetURLObject().GetURLNoPass(); + // maSize is set in ScDrawTransferObj ctor - pTransferObj->SetDrawPersist( aDragShellRef.get() ); // keep persist for ole objects alive - pTransferObj->SetDragSource( this ); // copies selection + rtl::Reference<ScDrawTransferObj> pTransferObj = new ScDrawTransferObj( std::move(pModel), pDocSh, aObjDesc ); - SC_MOD()->SetDragObject( nullptr, pTransferObj.get() ); // for internal D&D - pTransferObj->StartDrag( pWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK ); - } + pTransferObj->SetDrawPersist( aDragShellRef.get() ); // keep persist for ole objects alive + pTransferObj->SetDragSource( this ); // copies selection + + SC_MOD()->SetDragObject( nullptr, pTransferObj.get() ); // for internal D&D + pTransferObj->StartDrag( pWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK ); } namespace { diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index f15b6c57c310..4fe6c0cbdc76 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -209,34 +209,34 @@ void ScDrawView::InvalidateDrawTextAttrs() void ScDrawView::SetMarkedToLayer( SdrLayerID nLayerNo ) { - if (AreObjectsMarked()) - { - // #i11702# use SdrUndoObjectLayerChange for undo - // STR_UNDO_SELATTR is "Attributes" - should use a different text later - BegUndo( ScResId( STR_UNDO_SELATTR ) ); + if (!AreObjectsMarked()) + return; + + // #i11702# use SdrUndoObjectLayerChange for undo + // STR_UNDO_SELATTR is "Attributes" - should use a different text later + BegUndo( ScResId( STR_UNDO_SELATTR ) ); - const SdrMarkList& rMark = GetMarkedObjectList(); - const size_t nCount = rMark.GetMarkCount(); - for (size_t i=0; i<nCount; ++i) + const SdrMarkList& rMark = GetMarkedObjectList(); + const size_t nCount = rMark.GetMarkCount(); + for (size_t i=0; i<nCount; ++i) + { + SdrObject* pObj = rMark.GetMark(i)->GetMarkedSdrObj(); + if ( dynamic_cast<const SdrUnoObj*>( pObj) == nullptr && (pObj->GetLayer() != SC_LAYER_INTERN) ) { - SdrObject* pObj = rMark.GetMark(i)->GetMarkedSdrObj(); - if ( dynamic_cast<const SdrUnoObj*>( pObj) == nullptr && (pObj->GetLayer() != SC_LAYER_INTERN) ) - { - AddUndo( std::make_unique<SdrUndoObjectLayerChange>( *pObj, pObj->GetLayer(), nLayerNo) ); - pObj->SetLayer( nLayerNo ); - } + AddUndo( std::make_unique<SdrUndoObjectLayerChange>( *pObj, pObj->GetLayer(), nLayerNo) ); + pObj->SetLayer( nLayerNo ); } + } - EndUndo(); + EndUndo(); - // repaint is done in SetLayer + // repaint is done in SetLayer - pViewData->GetDocShell()->SetDrawModified(); + pViewData->GetDocShell()->SetDrawModified(); - // check mark list now instead of later in a timer - CheckMarked(); - MarkListHasChanged(); - } + // check mark list now instead of later in a timer + CheckMarked(); + MarkListHasChanged(); } bool ScDrawView::HasMarkedControl() const @@ -332,17 +332,17 @@ void ScDrawView::RecalcScale() resetGridOffsetsForAllSdrPageViews(); SdrPageView* pPV = GetSdrPageView(); - if ( pViewData && pPV ) + if ( !(pViewData && pPV) ) + return; + + if ( SdrPage* pPage = pPV->GetPage() ) { - if ( SdrPage* pPage = pPV->GetPage() ) + const size_t nCount = pPage->GetObjCount(); + for ( size_t i = 0; i < nCount; ++i ) { - const size_t nCount = pPage->GetObjCount(); - for ( size_t i = 0; i < nCount; ++i ) - { - SdrObject* pObj = pPage->GetObj( i ); - // Align objects to nearest grid position - SyncForGrid( pObj ); - } + SdrObject* pObj = pPage->GetObj( i ); + // Align objects to nearest grid position + SyncForGrid( pObj ); } } } @@ -623,26 +623,26 @@ void ScDrawView::ModelHasChanged() void ScDrawView::UpdateUserViewOptions() { - if (pViewData) - { - const ScViewOptions& rOpt = pViewData->GetOptions(); - const ScGridOptions& rGrid = rOpt.GetGridOptions(); + if (!pViewData) + return; - SetDragStripes( rOpt.GetOption( VOPT_HELPLINES ) ); - SetMarkHdlSizePixel( SC_HANDLESIZE_BIG ); + const ScViewOptions& rOpt = pViewData->GetOptions(); + const ScGridOptions& rGrid = rOpt.GetGridOptions(); - SetGridVisible( rGrid.GetGridVisible() ); - SetSnapEnabled( rGrid.GetUseGridSnap() ); - SetGridSnap( rGrid.GetUseGridSnap() ); + SetDragStripes( rOpt.GetOption( VOPT_HELPLINES ) ); + SetMarkHdlSizePixel( SC_HANDLESIZE_BIG ); - Fraction aFractX( rGrid.GetFieldDrawX(), rGrid.GetFieldDivisionX() + 1 ); - Fraction aFractY( rGrid.GetFieldDrawY(), rGrid.GetFieldDivisionY() + 1 ); - SetSnapGridWidth( aFractX, aFractY ); + SetGridVisible( rGrid.GetGridVisible() ); + SetSnapEnabled( rGrid.GetUseGridSnap() ); + SetGridSnap( rGrid.GetUseGridSnap() ); - SetGridCoarse( Size( rGrid.GetFieldDrawX(), rGrid.GetFieldDrawY() ) ); - SetGridFine( Size( rGrid.GetFieldDrawX() / (rGrid.GetFieldDivisionX() + 1), - rGrid.GetFieldDrawY() / (rGrid.GetFieldDivisionY() + 1) ) ); - } + Fraction aFractX( rGrid.GetFieldDrawX(), rGrid.GetFieldDivisionX() + 1 ); + Fraction aFractY( rGrid.GetFieldDrawY(), rGrid.GetFieldDivisionY() + 1 ); + SetSnapGridWidth( aFractX, aFractY ); + + SetGridCoarse( Size( rGrid.GetFieldDrawX(), rGrid.GetFieldDrawY() ) ); + SetGridFine( Size( rGrid.GetFieldDrawX() / (rGrid.GetFieldDivisionX() + 1), + rGrid.GetFieldDrawY() / (rGrid.GetFieldDivisionY() + 1) ) ); } SdrObject* ScDrawView::GetObjectByName(const OUString& rName) @@ -705,26 +705,26 @@ void ScDrawView::SelectCurrentViewObject( const OUString& rName ) } } } - if ( pFound ) + if ( !pFound ) + return; + + ScTabView* pView = pViewData->GetView(); + if ( nObjectTab != nTab ) // switch sheet + pView->SetTabNo( nObjectTab ); + DBG_ASSERT( nTab == nObjectTab, "Switching sheets did not work" ); + pView->ScrollToObject( pFound ); + if ( pFound->GetLayer() == SC_LAYER_BACK && + !pViewData->GetViewShell()->IsDrawSelMode() && + !pDoc->IsTabProtected( nTab ) && + !pViewData->GetSfxDocShell()->IsReadOnly() ) { - ScTabView* pView = pViewData->GetView(); - if ( nObjectTab != nTab ) // switch sheet - pView->SetTabNo( nObjectTab ); - DBG_ASSERT( nTab == nObjectTab, "Switching sheets did not work" ); - pView->ScrollToObject( pFound ); - if ( pFound->GetLayer() == SC_LAYER_BACK && - !pViewData->GetViewShell()->IsDrawSelMode() && - !pDoc->IsTabProtected( nTab ) && - !pViewData->GetSfxDocShell()->IsReadOnly() ) - { - SdrLayer* pLayer = GetModel()->GetLayerAdmin().GetLayerPerID(SC_LAYER_BACK); - if (pLayer) - SetLayerLocked( pLayer->GetName(), false ); - } - SdrPageView* pPV = GetSdrPageView(); - const bool bUnMark = IsObjMarked(pFound); - MarkObj( pFound, pPV, bUnMark); + SdrLayer* pLayer = GetModel()->GetLayerAdmin().GetLayerPerID(SC_LAYER_BACK); + if (pLayer) + SetLayerLocked( pLayer->GetName(), false ); } + SdrPageView* pPV = GetSdrPageView(); + const bool bUnMark = IsObjMarked(pFound); + MarkObj( pFound, pPV, bUnMark); } bool ScDrawView::SelectObject( const OUString& rName ) @@ -933,61 +933,61 @@ void ScDrawView::SyncForGrid( SdrObject* pObj ) ScSplitPos eWhich = pViewData->GetActivePart(); ScGridWindow* pGridWin = pViewData->GetActiveWin(); ScDrawObjData* pData = ScDrawLayer::GetObjData( pObj ); - if ( pGridWin ) + if ( !pGridWin ) + return; + + ScAddress aOldStt; + if( pData && pData->maStart.IsValid()) { - ScAddress aOldStt; - if( pData && pData->maStart.IsValid()) - { - aOldStt = pData->maStart; - } - else - { - // Page anchored object so... - // synthesise an anchor ( but don't attach it to - // the object as we want to maintain page anchoring ) - ScDrawObjData aAnchor; - const tools::Rectangle aObjRect(pObj->GetLogicRect()); - ScDrawLayer::GetCellAnchorFromPosition( - aObjRect, - aAnchor, - *pDoc, - GetTab()); - aOldStt = aAnchor.maStart; - } - MapMode aDrawMode = pGridWin->GetDrawMapMode(); - // find pos anchor position - Point aOldPos( pDoc->GetColOffset( aOldStt.Col(), aOldStt.Tab() ), pDoc->GetRowOffset( aOldStt.Row(), aOldStt.Tab() ) ); - aOldPos.setX( sc::TwipsToHMM( aOldPos.X() ) ); - aOldPos.setY( sc::TwipsToHMM( aOldPos.Y() ) ); - // find position of same point on the screen ( e.g. grid ) - Point aCurPos = pViewData->GetScrPos( aOldStt.Col(), aOldStt.Row(), eWhich, true ); - Point aCurPosHmm = pGridWin->PixelToLogic(aCurPos, aDrawMode ); - Point aGridOff = aCurPosHmm - aOldPos; - // fdo#63878 Fix the X position for RTL Sheet - if( pDoc->IsNegativePage( GetTab() ) ) - aGridOff.setX( aCurPosHmm.getX() + aOldPos.getX() ); + aOldStt = pData->maStart; } + else + { + // Page anchored object so... + // synthesise an anchor ( but don't attach it to + // the object as we want to maintain page anchoring ) + ScDrawObjData aAnchor; + const tools::Rectangle aObjRect(pObj->GetLogicRect()); + ScDrawLayer::GetCellAnchorFromPosition( + aObjRect, + aAnchor, + *pDoc, + GetTab()); + aOldStt = aAnchor.maStart; + } + MapMode aDrawMode = pGridWin->GetDrawMapMode(); + // find pos anchor position + Point aOldPos( pDoc->GetColOffset( aOldStt.Col(), aOldStt.Tab() ), pDoc->GetRowOffset( aOldStt.Row(), aOldStt.Tab() ) ); + aOldPos.setX( sc::TwipsToHMM( aOldPos.X() ) ); + aOldPos.setY( sc::TwipsToHMM( aOldPos.Y() ) ); + // find position of same point on the screen ( e.g. grid ) + Point aCurPos = pViewData->GetScrPos( aOldStt.Col(), aOldStt.Row(), eWhich, true ); + Point aCurPosHmm = pGridWin->PixelToLogic(aCurPos, aDrawMode ); + Point aGridOff = aCurPosHmm - aOldPos; + // fdo#63878 Fix the X position for RTL Sheet + if( pDoc->IsNegativePage( GetTab() ) ) + aGridOff.setX( aCurPosHmm.getX() + aOldPos.getX() ); } void ScDrawView::resetGridOffsetsForAllSdrPageViews() { SdrPageView* pPageView(GetSdrPageView()); - if(nullptr != pPageView) + if(nullptr == pPageView) + return; + + for(sal_uInt32 a(0); a < pPageView->PageWindowCount(); a++) { - for(sal_uInt32 a(0); a < pPageView->PageWindowCount(); a++) + SdrPageWindow* pPageWindow(pPageView->GetPageWindow(a)); + assert(pPageWindow && "SdrView::SetMasterPagePaintCaching: Corrupt SdrPageWindow list (!)"); + + if(nullptr != pPageWindow) { - SdrPageWindow* pPageWindow(pPageView->GetPageWindow(a)); - assert(pPageWindow && "SdrView::SetMasterPagePaintCaching: Corrupt SdrPageWindow list (!)"); + sdr::contact::ObjectContact& rObjectContact(pPageWindow->GetObjectContact()); - if(nullptr != pPageWindow) + if(rObjectContact.supportsGridOffsets()) { - sdr::contact::ObjectContact& rObjectContact(pPageWindow->GetObjectContact()); - - if(rObjectContact.supportsGridOffsets()) - { - rObjectContact.resetAllGridOffsets(); - } + rObjectContact.resetAllGridOffsets(); } } } diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index 8460a59fb79d..11a100da976c 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -1330,23 +1330,23 @@ void ScEditShell::GetUndoState(SfxItemSet &rSet) void ScEditShell::ExecuteTrans( const SfxRequest& rReq ) { TransliterationFlags nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() ); - if ( nType != TransliterationFlags::NONE ) - { - ScInputHandler* pHdl = GetMyInputHdl(); - assert(pHdl && "no ScInputHandler"); + if ( nType == TransliterationFlags::NONE ) + return; - EditView* pTopView = pHdl->GetTopView(); - EditView* pTableView = pHdl->GetTableView(); - assert(pTableView && "no EditView"); + ScInputHandler* pHdl = GetMyInputHdl(); + assert(pHdl && "no ScInputHandler"); + + EditView* pTopView = pHdl->GetTopView(); + EditView* pTableView = pHdl->GetTableView(); + assert(pTableView && "no EditView"); - pHdl->DataChanging(); + pHdl->DataChanging(); - pTableView->TransliterateText( nType ); - if (pTopView) - pTopView->TransliterateText( nType ); + pTableView->TransliterateText( nType ); + if (pTopView) + pTopView->TransliterateText( nType ); - pHdl->DataChanged(); - } + pHdl->DataChanged(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/view/gridmerg.cxx b/sc/source/ui/view/gridmerg.cxx index 5ab7ef8e266d..a07937207dc4 100644 --- a/sc/source/ui/view/gridmerg.cxx +++ b/sc/source/ui/view/gridmerg.cxx @@ -183,45 +183,45 @@ void ScGridMerger::AddVerLine(bool bWorksInPixels, long nX, long nY1, long nY2, void ScGridMerger::Flush() { - if (nCount) + if (!nCount) + return; + + if (bVertical) { - if (bVertical) + if ( nCount == 1 ) + pDev->DrawLine( Point( nVarStart, nFixStart ), Point( nVarStart, nFixEnd ) ); + else { - if ( nCount == 1 ) - pDev->DrawLine( Point( nVarStart, nFixStart ), Point( nVarStart, nFixEnd ) ); - else + long nVarEnd = nVarStart + ( nCount - 1 ) * nVarDiff; + if ( nVarDiff < 0 ) { - long nVarEnd = nVarStart + ( nCount - 1 ) * nVarDiff; - if ( nVarDiff < 0 ) - { - // nVarDiff is negative in RTL layout mode - // Change the positions so DrawGrid is called with a positive distance - // (nVarStart / nVarDiff can be modified, aren't used after Flush) - - nVarDiff = -nVarDiff; - long nTemp = nVarStart; - nVarStart = nVarEnd; - nVarEnd = nTemp; - } - pDev->DrawGrid( tools::Rectangle( nVarStart, nFixStart, nVarEnd, nFixEnd ), - Size( nVarDiff, nFixEnd - nFixStart ), - DrawGridFlags::VertLines ); + // nVarDiff is negative in RTL layout mode + // Change the positions so DrawGrid is called with a positive distance + // (nVarStart / nVarDiff can be modified, aren't used after Flush) + + nVarDiff = -nVarDiff; + long nTemp = nVarStart; + nVarStart = nVarEnd; + nVarEnd = nTemp; } + pDev->DrawGrid( tools::Rectangle( nVarStart, nFixStart, nVarEnd, nFixEnd ), + Size( nVarDiff, nFixEnd - nFixStart ), + DrawGridFlags::VertLines ); } + } + else + { + if ( nCount == 1 ) + pDev->DrawLine( Point( nFixStart, nVarStart ), Point( nFixEnd, nVarStart ) ); else { - if ( nCount == 1 ) - pDev->DrawLine( Point( nFixStart, nVarStart ), Point( nFixEnd, nVarStart ) ); - else - { - long nVarEnd = nVarStart + ( nCount - 1 ) * nVarDiff; - pDev->DrawGrid( tools::Rectangle( nFixStart, nVarStart, nFixEnd, nVarEnd ), - Size( nFixEnd - nFixStart, nVarDiff ), - DrawGridFlags::HorzLines ); - } + long nVarEnd = nVarStart + ( nCount - 1 ) * nVarDiff; + pDev->DrawGrid( tools::Rectangle( nFixStart, nVarStart, nFixEnd, nVarEnd ), + Size( nFixEnd - nFixStart, nVarDiff ), + DrawGridFlags::HorzLines ); } - nCount = 0; } + nCount = 0; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 0b07934fb0f6..887903286ca3 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -1832,26 +1832,26 @@ void ScGridWindow::HandleMouseButtonDown( const MouseEvent& rMEvt, MouseEventSta // Gridwin - Selection Engine - if ( rMEvt.IsLeft() ) - { - ScViewSelectionEngine* pSelEng = pViewData->GetView()->GetSelEngine(); - pSelEng->SetWindow(this); - pSelEng->SetWhich(eWhich); - pSelEng->SetVisibleArea( tools::Rectangle(Point(), GetOutputSizePixel()) ); + if ( !rMEvt.IsLeft() ) + return; - // SelMouseButtonDown on the View is still setting the bMoveIsShift flag - if ( pViewData->GetView()->SelMouseButtonDown( rMEvt ) ) + ScViewSelectionEngine* pSelEng = pViewData->GetView()->GetSelEngine(); + pSelEng->SetWindow(this); + pSelEng->SetWhich(eWhich); + pSelEng->SetVisibleArea( tools::Rectangle(Point(), GetOutputSizePixel()) ); + + // SelMouseButtonDown on the View is still setting the bMoveIsShift flag + if ( pViewData->GetView()->SelMouseButtonDown( rMEvt ) ) + { + if (IsMouseCaptured()) { - if (IsMouseCaptured()) - { - // Tracking instead of CaptureMouse, so it can be canceled cleanly - //! Someday SelectionEngine should call StartTracking on its own!?! - ReleaseMouse(); - StartTracking(); - } - pViewData->GetMarkData().SetMarking(true); - return; + // Tracking instead of CaptureMouse, so it can be canceled cleanly + //! Someday SelectionEngine should call StartTracking on its own!?! + ReleaseMouse(); + StartTracking(); } + pViewData->GetMarkData().SetMarking(true); + return; } } @@ -2315,57 +2315,57 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) // SelMouseButtonDown is called only for left button, but SelMouseButtonUp would return // sal_True for any call, so IsLeft must be checked here, too. - if ( rMEvt.IsLeft() && pViewData->GetView()->GetSelEngine()->SelMouseButtonUp( rMEvt ) ) - { - pViewData->GetView()->SelectionChanged(); + if ( !(rMEvt.IsLeft() && pViewData->GetView()->GetSelEngine()->SelMouseButtonUp( rMEvt )) ) + return; - SfxDispatcher* pDisp = pViewData->GetViewShell()->GetDispatcher(); - bool bFormulaMode = pScMod->IsFormulaMode(); - OSL_ENSURE( pDisp || bFormulaMode, "Cursor moved on inactive View ?" ); + pViewData->GetView()->SelectionChanged(); - // #i14927# execute SID_CURRENTCELL (for macro recording) only if there is no - // multiple selection, so the argument string completely describes the selection, - // and executing the slot won't change the existing selection (executing the slot - // here and from a recorded macro is treated equally) - if ( pDisp && !bFormulaMode && !rMark.IsMultiMarked() ) - { - OUString aAddr; // CurrentCell - if( rMark.IsMarked() ) - { - ScRange aScRange; - rMark.GetMarkArea( aScRange ); - aAddr = aScRange.Format(*pDoc, ScRefFlags::RANGE_ABS); - if ( aScRange.aStart == aScRange.aEnd ) - { - // make sure there is a range selection string even for a single cell - aAddr += ":" + aAddr; - } + SfxDispatcher* pDisp = pViewData->GetViewShell()->GetDispatcher(); + bool bFormulaMode = pScMod->IsFormulaMode(); + OSL_ENSURE( pDisp || bFormulaMode, "Cursor moved on inactive View ?" ); - //! SID_MARKAREA does not exist anymore ??? - //! What happens when selecting with the cursor ??? - } - else // only move cursor + // #i14927# execute SID_CURRENTCELL (for macro recording) only if there is no + // multiple selection, so the argument string completely describes the selection, + // and executing the slot won't change the existing selection (executing the slot + // here and from a recorded macro is treated equally) + if ( pDisp && !bFormulaMode && !rMark.IsMultiMarked() ) + { + OUString aAddr; // CurrentCell + if( rMark.IsMarked() ) + { + ScRange aScRange; + rMark.GetMarkArea( aScRange ); + aAddr = aScRange.Format(*pDoc, ScRefFlags::RANGE_ABS); + if ( aScRange.aStart == aScRange.aEnd ) { - ScAddress aScAddress( pViewData->GetCurX(), pViewData->GetCurY(), 0 ); - aAddr = aScAddress.Format(ScRefFlags::ADDR_ABS); + // make sure there is a range selection string even for a single cell + aAddr += ":" + aAddr; } - SfxStringItem aPosItem( SID_CURRENTCELL, aAddr ); - // We don't want to align to the cursor position because if the - // cell cursor isn't visible after making selection, it would jump - // back to the origin of the selection where the cell cursor is. - SfxBoolItem aAlignCursorItem( FN_PARAM_2, false ); - pDisp->ExecuteList(SID_CURRENTCELL, - SfxCallMode::SLOT | SfxCallMode::RECORD, - { &aPosItem, &aAlignCursorItem }); + //! SID_MARKAREA does not exist anymore ??? + //! What happens when selecting with the cursor ??? + } + else // only move cursor + { + ScAddress aScAddress( pViewData->GetCurX(), pViewData->GetCurY(), 0 ); + aAddr = aScAddress.Format(ScRefFlags::ADDR_ABS); + } - pViewData->GetView()->InvalidateAttribs(); + SfxStringItem aPosItem( SID_CURRENTCELL, aAddr ); + // We don't want to align to the cursor position because if the + // cell cursor isn't visible after making selection, it would jump + // back to the origin of the selection where the cell cursor is. + SfxBoolItem aAlignCursorItem( FN_PARAM_2, false ); + pDisp->ExecuteList(SID_CURRENTCELL, + SfxCallMode::SLOT | SfxCallMode::RECORD, + { &aPosItem, &aAlignCursorItem }); - } - pViewData->GetViewShell()->SelectionChanged(); + pViewData->GetView()->InvalidateAttribs(); - return; } + pViewData->GetViewShell()->SelectionChanged(); + + return; } void ScGridWindow::FakeButtonUp() @@ -2877,174 +2877,174 @@ void ScGridWindow::Command( const CommandEvent& rCEvt ) if (bDisable) return; - if ( nCmd == CommandEventId::ContextMenu && !SC_MOD()->GetIsWaterCan() ) - { - bool bMouse = rCEvt.IsMouseEvent(); - if ( bMouse && nMouseStatus == SC_GM_IGNORE ) - return; + if (nCmd != CommandEventId::ContextMenu || SC_MOD()->GetIsWaterCan()) + return; - if (pViewData->IsAnyFillMode()) - { - pViewData->GetView()->StopRefMode(); - pViewData->ResetFillMode(); - } - ReleaseMouse(); - StopMarking(); + bool bMouse = rCEvt.IsMouseEvent(); + if ( bMouse && nMouseStatus == SC_GM_IGNORE ) + return; + + if (pViewData->IsAnyFillMode()) + { + pViewData->GetView()->StopRefMode(); + pViewData->ResetFillMode(); + } + ReleaseMouse(); + StopMarking(); - Point aPosPixel = rCEvt.GetMousePosPixel(); - Point aMenuPos = aPosPixel; + Point aPosPixel = rCEvt.GetMousePosPixel(); + Point aMenuPos = aPosPixel; - SCCOL nCellX = -1; - SCROW nCellY = -1; - pViewData->GetPosFromPixel(aPosPixel.X(), aPosPixel.Y(), eWhich, nCellX, nCellY); + SCCOL nCellX = -1; + SCROW nCellY = -1; + pViewData->GetPosFromPixel(aPosPixel.X(), aPosPixel.Y(), eWhich, nCellX, nCellY); - bool bSpellError = false; - SCCOL nColSpellError = nCellX; + bool bSpellError = false; + SCCOL nColSpellError = nCellX; - if ( bMouse ) + if ( bMouse ) + { + ScDocument* pDoc = pViewData->GetDocument(); + SCTAB nTab = pViewData->GetTabNo(); + const ScTableProtection* pProtect = pDoc->GetTabProtection(nTab); + bool bSelectAllowed = true; + if ( pProtect && pProtect->isProtected() ) { - ScDocument* pDoc = pViewData->GetDocument(); - SCTAB nTab = pViewData->GetTabNo(); - const ScTableProtection* pProtect = pDoc->GetTabProtection(nTab); - bool bSelectAllowed = true; - if ( pProtect && pProtect->isProtected() ) - { - // This sheet is protected. Check if a context menu is allowed on this cell. - bool bCellProtected = pDoc->HasAttrib(nCellX, nCellY, nTab, nCellX, nCellY, nTab, HasAttrFlags::Protected); - bool bSelProtected = pProtect->isOptionEnabled(ScTableProtection::SELECT_LOCKED_CELLS); - bool bSelUnprotected = pProtect->isOptionEnabled(ScTableProtection::SELECT_UNLOCKED_CELLS); + // This sheet is protected. Check if a context menu is allowed on this cell. + bool bCellProtected = pDoc->HasAttrib(nCellX, nCellY, nTab, nCellX, nCellY, nTab, HasAttrFlags::Protected); + bool bSelProtected = pProtect->isOptionEnabled(ScTableProtection::SELECT_LOCKED_CELLS); + bool bSelUnprotected = pProtect->isOptionEnabled(ScTableProtection::SELECT_UNLOCKED_CELLS); - if (bCellProtected) - bSelectAllowed = bSelProtected; - else - bSelectAllowed = bSelUnprotected; - } - if (!bSelectAllowed) - // Selecting this cell is not allowed, neither is context menu. - return; + if (bCellProtected) + bSelectAllowed = bSelProtected; + else + bSelectAllowed = bSelUnprotected; + } + if (!bSelectAllowed) + // Selecting this cell is not allowed, neither is context menu. + return; - if (mpSpellCheckCxt) + if (mpSpellCheckCxt) + { + // Find the first string to the left for spell checking in case the current cell is empty. + ScAddress aPos(nCellX, nCellY, nTab); + ScRefCellValue aSpellCheckCell(*pDoc, aPos); + while (aSpellCheckCell.meType == CELLTYPE_NONE) { - // Find the first string to the left for spell checking in case the current cell is empty. - ScAddress aPos(nCellX, nCellY, nTab); - ScRefCellValue aSpellCheckCell(*pDoc, aPos); - while (aSpellCheckCell.meType == CELLTYPE_NONE) - { - // Loop until we get the first non-empty cell in the row. - aPos.IncCol(-1); - if (aPos.Col() < 0) - break; + // Loop until we get the first non-empty cell in the row. + aPos.IncCol(-1); + if (aPos.Col() < 0) + break; - aSpellCheckCell.assign(*pDoc, aPos); - } + aSpellCheckCell.assign(*pDoc, aPos); + } - if (aPos.Col() >= 0 && (aSpellCheckCell.meType == CELLTYPE_STRING || aSpellCheckCell.meType == CELLTYPE_EDIT)) - nColSpellError = aPos.Col(); + if (aPos.Col() >= 0 && (aSpellCheckCell.meType == CELLTYPE_STRING || aSpellCheckCell.meType == CELLTYPE_EDIT)) + nColSpellError = aPos.Col(); - bSpellError = (mpSpellCheckCxt->isMisspelled(nColSpellError, nCellY)); - if (bSpellError) - { - // Check and see if a misspelled word is under the mouse pointer. - bSpellError = IsSpellErrorAtPos(aPosPixel, nColSpellError, nCellY); - } + bSpellError = (mpSpellCheckCxt->isMisspelled(nColSpellError, nCellY)); + if (bSpellError) + { + // Check and see if a misspelled word is under the mouse pointer. + bSpellError = IsSpellErrorAtPos(aPosPixel, nColSpellError, nCellY); } - - // #i18735# First select the item under the mouse pointer. - // This can change the selection, and the view state (edit mode, etc). - SelectForContextMenu(aPosPixel, bSpellError ? nColSpellError : nCellX, nCellY); } - bool bDone = false; - bool bEdit = pViewData->HasEditView(eWhich); + // #i18735# First select the item under the mouse pointer. + // This can change the selection, and the view state (edit mode, etc). + SelectForContextMenu(aPosPixel, bSpellError ? nColSpellError : nCellX, nCellY); + } - if ( !bEdit ) + bool bDone = false; + bool bEdit = pViewData->HasEditView(eWhich); + + if ( !bEdit ) + { + // Edit cell with spelling errors ? + if (bMouse && (GetEditUrl(aPosPixel) || bSpellError)) { - // Edit cell with spelling errors ? - if (bMouse && (GetEditUrl(aPosPixel) || bSpellError)) - { - // GetEditUrlOrError has already moved the Cursor + // GetEditUrlOrError has already moved the Cursor - pScMod->SetInputMode( SC_INPUT_TABLE ); - bEdit = pViewData->HasEditView(eWhich); // Did it work? + pScMod->SetInputMode( SC_INPUT_TABLE ); + bEdit = pViewData->HasEditView(eWhich); // Did it work? - OSL_ENSURE( bEdit, "Can not be switched in edit mode" ); - } + OSL_ENSURE( bEdit, "Can not be switched in edit mode" ); } - if ( bEdit ) - { - EditView* pEditView = pViewData->GetEditView( eWhich ); // is then not 0 + } + if ( bEdit ) + { + EditView* pEditView = pViewData->GetEditView( eWhich ); // is then not 0 - if ( !bMouse ) + if ( !bMouse ) + { + vcl::Cursor* pCur = pEditView->GetCursor(); + if ( pCur ) { - vcl::Cursor* pCur = pEditView->GetCursor(); - if ( pCur ) - { - Point aLogicPos = pCur->GetPos(); - // use the position right of the cursor (spell popup is opened if - // the cursor is before the word, but not if behind it) - aLogicPos.AdjustX(pCur->GetWidth() ); - aLogicPos.AdjustY(pCur->GetHeight() / 2 ); // center vertically - aMenuPos = LogicToPixel( aLogicPos ); - } + Point aLogicPos = pCur->GetPos(); + // use the position right of the cursor (spell popup is opened if + // the cursor is before the word, but not if behind it) + aLogicPos.AdjustX(pCur->GetWidth() ); + aLogicPos.AdjustY(pCur->GetHeight() / 2 ); // center vertically + aMenuPos = LogicToPixel( aLogicPos ); } + } - // if edit mode was just started above, online spelling may be incomplete - pEditView->GetEditEngine()->CompleteOnlineSpelling(); + // if edit mode was just started above, online spelling may be incomplete + pEditView->GetEditEngine()->CompleteOnlineSpelling(); - // IsCursorAtWrongSpelledWord could be used for !bMouse - // if there was a corresponding ExecuteSpellPopup call + // IsCursorAtWrongSpelledWord could be used for !bMouse + // if there was a corresponding ExecuteSpellPopup call - if (bSpellError) - { - // On OS/2 when clicking next to the Popup menu, the MouseButtonDown - // comes before the end of menu execute, thus the SetModified has to - // be done prior to this (Bug #40968#) - ScInputHandler* pHdl = pScMod->GetInputHdl(); - if (pHdl) - pHdl->SetModified(); + if (bSpellError) + { + // On OS/2 when clicking next to the Popup menu, the MouseButtonDown + // comes before the end of menu execute, thus the SetModified has to + // be done prior to this (Bug #40968#) + ScInputHandler* pHdl = pScMod->GetInputHdl(); + if (pHdl) + pHdl->SetModified(); - Link<SpellCallbackInfo&,void> aLink = LINK( this, ScGridWindow, PopupSpellingHdl ); - pEditView->ExecuteSpellPopup( aMenuPos, &aLink ); + Link<SpellCallbackInfo&,void> aLink = LINK( this, ScGridWindow, PopupSpellingHdl ); + pEditView->ExecuteSpellPopup( aMenuPos, &aLink ); - bDone = true; - } + bDone = true; } - else if ( !bMouse ) - { - // non-edit menu by keyboard -> use lower right of cell cursor position - ScDocument* aDoc = pViewData->GetDocument(); - SCTAB nTabNo = pViewData->GetTabNo(); - bool bLayoutIsRTL = aDoc->IsLayoutRTL(nTabNo); + } + else if ( !bMouse ) + { + // non-edit menu by keyboard -> use lower right of cell cursor position + ScDocument* aDoc = pViewData->GetDocument(); + SCTAB nTabNo = pViewData->GetTabNo(); + bool bLayoutIsRTL = aDoc->IsLayoutRTL(nTabNo); - SCCOL nCurX = pViewData->GetCurX(); - SCROW nCurY = pViewData->GetCurY(); - aMenuPos = pViewData->GetScrPos( nCurX, nCurY, eWhich, true ); - long nSizeXPix; - long nSizeYPix; - pViewData->GetMergeSizePixel( nCurX, nCurY, nSizeXPix, nSizeYPix ); - // fdo#55432 take the correct position for RTL sheet - aMenuPos.AdjustX(bLayoutIsRTL ? -nSizeXPix : nSizeXPix ); - aMenuPos.AdjustY(nSizeYPix ); + SCCOL nCurX = pViewData->GetCurX(); + SCROW nCurY = pViewData->GetCurY(); + aMenuPos = pViewData->GetScrPos( nCurX, nCurY, eWhich, true ); + long nSizeXPix; + long nSizeYPix; + pViewData->GetMergeSizePixel( nCurX, nCurY, nSizeXPix, nSizeYPix ); + // fdo#55432 take the correct position for RTL sheet + aMenuPos.AdjustX(bLayoutIsRTL ? -nSizeXPix : nSizeXPix ); + aMenuPos.AdjustY(nSizeYPix ); - ScTabViewShell* pViewSh = pViewData->GetViewShell(); - if (pViewSh) - { - // Is a draw object selected? + ScTabViewShell* pViewSh = pViewData->GetViewShell(); + if (pViewSh) + { + // Is a draw object selected? - SdrView* pDrawView = pViewSh->GetScDrawView(); - if (pDrawView && pDrawView->AreObjectsMarked()) - { - // #100442#; the context menu should open in the middle of the selected objects - tools::Rectangle aSelectRect(LogicToPixel(pDrawView->GetAllMarkedBoundRect())); - aMenuPos = aSelectRect.Center(); - } + SdrView* pDrawView = pViewSh->GetScDrawView(); + if (pDrawView && pDrawView->AreObjectsMarked()) + { + // #100442#; the context menu should open in the middle of the selected objects + tools::Rectangle aSelectRect(LogicToPixel(pDrawView->GetAllMarkedBoundRect())); + aMenuPos = aSelectRect.Center(); } } + } - if (!bDone) - { - SfxDispatcher::ExecutePopup( this, &aMenuPos ); - } + if (!bDone) + { + SfxDispatcher::ExecutePopup( this, &aMenuPos ); } } @@ -3178,26 +3178,26 @@ void ScGridWindow::SelectForContextMenu( const Point& rPosPixel, SCCOL nCellX, S // select drawing object or move cell cursor - if ( !bHitSelected ) + if ( bHitSelected ) + return; + + bool bWasDraw = ( pDrawView && pDrawView->AreObjectsMarked() ); + bool bHitDraw = false; + if ( pDrawView ) { - bool bWasDraw = ( pDrawView && pDrawView->AreObjectsMarked() ); - bool bHitDraw = false; - if ( pDrawView ) - { - pDrawView->UnmarkAllObj(); - // Unlock the Internal Layer in order to activate the context menu. - // re-lock in ScDrawView::MarkListHasChanged() - lcl_UnLockComment( pDrawView, aLogicPos ,pViewData); - bHitDraw = pDrawView->MarkObj( aLogicPos ); - // draw shell is activated in MarkListHasChanged - } - if ( !bHitDraw ) - { - pView->Unmark(); - pView->SetCursor(nCellX, nCellY); - if ( bWasDraw ) - pViewData->GetViewShell()->SetDrawShell( false ); // switch shells - } + pDrawView->UnmarkAllObj(); + // Unlock the Internal Layer in order to activate the context menu. + // re-lock in ScDrawView::MarkListHasChanged() + lcl_UnLockComment( pDrawView, aLogicPos ,pViewData); + bHitDraw = pDrawView->MarkObj( aLogicPos ); + // draw shell is activated in MarkListHasChanged + } + if ( !bHitDraw ) + { + pView->Unmark(); + pView->SetCursor(nCellX, nCellY); + if ( bWasDraw ) + pViewData->GetViewShell()->SetDrawShell( false ); // switch shells } } @@ -4524,55 +4524,55 @@ void ScGridWindow::PasteSelection( const Point& rPosPixel ) void ScGridWindow::UpdateEditViewPos() { - if (pViewData->HasEditView(eWhich)) - { - EditView* pView; - SCCOL nCol; - SCROW nRow; - pViewData->GetEditView( eWhich, pView, nCol, nRow ); - SCCOL nEndCol = pViewData->GetEditEndCol(); - SCROW nEndRow = pViewData->GetEditEndRow(); + if (!pViewData->HasEditView(eWhich)) + return; + + EditView* pView; + SCCOL nCol; + SCROW nRow; + pViewData->GetEditView( eWhich, pView, nCol, nRow ); + SCCOL nEndCol = pViewData->GetEditEndCol(); + SCROW nEndRow = pViewData->GetEditEndRow(); + + // hide EditView? - // hide EditView? + bool bHide = ( nEndCol<pViewData->GetPosX(eHWhich) || nEndRow<pViewData->GetPosY(eVWhich) ); + if ( SC_MOD()->IsFormulaMode() ) + if ( pViewData->GetTabNo() != pViewData->GetRefTabNo() ) + bHide = true; - bool bHide = ( nEndCol<pViewData->GetPosX(eHWhich) || nEndRow<pViewData->GetPosY(eVWhich) ); - if ( SC_MOD()->IsFormulaMode() ) - if ( pViewData->GetTabNo() != pViewData->GetRefTabNo() ) - bHide = true; + if (bHide) + { + tools::Rectangle aRect = pView->GetOutputArea(); + long nHeight = aRect.Bottom() - aRect.Top(); + aRect.SetTop( PixelToLogic(GetOutputSizePixel(), pViewData->GetLogicMode()). + Height() * 2 ); + aRect.SetBottom( aRect.Top() + nHeight ); + pView->SetOutputArea( aRect ); + pView->HideCursor(); + } + else + { + // bForceToTop = sal_True for editing + tools::Rectangle aPixRect = pViewData->GetEditArea( eWhich, nCol, nRow, this, nullptr, true ); - if (bHide) + if (comphelper::LibreOfficeKit::isActive() && + comphelper::LibreOfficeKit::isCompatFlagSet( + comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs)) { - tools::Rectangle aRect = pView->GetOutputArea(); - long nHeight = aRect.Bottom() - aRect.Top(); - aRect.SetTop( PixelToLogic(GetOutputSizePixel(), pViewData->GetLogicMode()). - Height() * 2 ); - aRect.SetBottom( aRect.Top() + nHeight ); - pView->SetOutputArea( aRect ); - pView->HideCursor(); + tools::Rectangle aPTwipsRect = pViewData->GetEditArea(eWhich, nCol, nRow, this, nullptr, + true, true /* bInPrintTwips */); + tools::Rectangle aOutputAreaPTwips = pView->GetLOKSpecialOutputArea(); + aOutputAreaPTwips.SetPos(aPTwipsRect.TopLeft()); + pView->SetLOKSpecialOutputArea(aOutputAreaPTwips); } - else - { - // bForceToTop = sal_True for editing - tools::Rectangle aPixRect = pViewData->GetEditArea( eWhich, nCol, nRow, this, nullptr, true ); - - if (comphelper::LibreOfficeKit::isActive() && - comphelper::LibreOfficeKit::isCompatFlagSet( - comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs)) - { - tools::Rectangle aPTwipsRect = pViewData->GetEditArea(eWhich, nCol, nRow, this, nullptr, - true, true /* bInPrintTwips */); - tools::Rectangle aOutputAreaPTwips = pView->GetLOKSpecialOutputArea(); - aOutputAreaPTwips.SetPos(aPTwipsRect.TopLeft()); - pView->SetLOKSpecialOutputArea(aOutputAreaPTwips); - } - Point aScrPos = PixelToLogic( aPixRect.TopLeft(), pViewData->GetLogicMode() ); + Point aScrPos = PixelToLogic( aPixRect.TopLeft(), pViewData->GetLogicMode() ); - tools::Rectangle aRect = pView->GetOutputArea(); - aRect.SetPos( aScrPos ); - pView->SetOutputArea( aRect ); - pView->ShowCursor(); - } + tools::Rectangle aRect = pView->GetOutputArea(); + aRect.SetPos( aScrPos ); + pView->SetOutputArea( aRect ); + pView->ShowCursor(); } } @@ -4734,19 +4734,19 @@ void ScGridWindow::UpdateListValPos( bool bVisible, const ScAddress& rPos ) } } } - if ( bOldButton ) + if ( !bOldButton ) + return; + + if ( !bListValButton || aListValPos != aOldPos ) { - if ( !bListValButton || aListValPos != aOldPos ) + // paint area of old button + if ( comphelper::LibreOfficeKit::isActive() ) { - // paint area of old button - if ( comphelper::LibreOfficeKit::isActive() ) - { - updateLOKValListButton( false, aOldPos ); - } - else - { - Invalidate( PixelToLogic( GetListValButtonRect( aOldPos ) ) ); - } + updateLOKValListButton( false, aOldPos ); + } + else + { + Invalidate( PixelToLogic( GetListValButtonRect( aOldPos ) ) ); } } } @@ -6417,78 +6417,78 @@ void ScGridWindow::UpdateAutoFillOverlay() // get the AutoFill handle rectangle in pixels - if ( bAutoMarkVisible && aAutoMarkPos.Tab() == pViewData->GetTabNo() && - !pViewData->HasEditView(eWhich) && pViewData->IsActive() ) - { - SCCOL nX = aAutoMarkPos.Col(); - SCROW nY = aAutoMarkPos.Row(); + if ( !(bAutoMarkVisible && aAutoMarkPos.Tab() == pViewData->GetTabNo() && + !pViewData->HasEditView(eWhich) && pViewData->IsActive()) ) + return; - if (!maVisibleRange.isInside(nX, nY) && !comphelper::LibreOfficeKit::isActive()) - { - // Autofill mark is not visible. Bail out. - return; - } + SCCOL nX = aAutoMarkPos.Col(); + SCROW nY = aAutoMarkPos.Row(); - SCTAB nTab = pViewData->GetTabNo(); - ScDocument* pDoc = pViewData->GetDocument(); - bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); + if (!maVisibleRange.isInside(nX, nY) && !comphelper::LibreOfficeKit::isActive()) + { + // Autofill mark is not visible. Bail out. + return; + } - float fScaleFactor = GetDPIScaleFactor(); - // Size should be even - Size aFillHandleSize(6 * fScaleFactor, 6 * fScaleFactor); + SCTAB nTab = pViewData->GetTabNo(); + ScDocument* pDoc = pViewData->GetDocument(); + bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); - Point aFillPos = pViewData->GetScrPos( nX, nY, eWhich, true ); - long nSizeXPix; - long nSizeYPix; - pViewData->GetMergeSizePixel( nX, nY, nSizeXPix, nSizeYPix ); + float fScaleFactor = GetDPIScaleFactor(); + // Size should be even + Size aFillHandleSize(6 * fScaleFactor, 6 * fScaleFactor); - if (bLayoutRTL) - aFillPos.AdjustX( -(nSizeXPix - 2 + (aFillHandleSize.Width() / 2)) ); - else - aFillPos.AdjustX(nSizeXPix - (aFillHandleSize.Width() / 2) ); + Point aFillPos = pViewData->GetScrPos( nX, nY, eWhich, true ); + long nSizeXPix; + long nSizeYPix; + pViewData->GetMergeSizePixel( nX, nY, nSizeXPix, nSizeYPix ); - aFillPos.AdjustY(nSizeYPix ); - aFillPos.AdjustY( -(aFillHandleSize.Height() / 2) ); + if (bLayoutRTL) + aFillPos.AdjustX( -(nSizeXPix - 2 + (aFillHandleSize.Width() / 2)) ); + else + aFillPos.AdjustX(nSizeXPix - (aFillHandleSize.Width() / 2) ); - tools::Rectangle aFillRect(aFillPos, aFillHandleSize); + aFillPos.AdjustY(nSizeYPix ); + aFillPos.AdjustY( -(aFillHandleSize.Height() / 2) ); - // expand rect to increase hit area - mpAutoFillRect = aFillRect; - mpAutoFillRect->expand(fScaleFactor); + tools::Rectangle aFillRect(aFillPos, aFillHandleSize); - // #i70788# get the OverlayManager safely - rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); - if (comphelper::LibreOfficeKit::isActive()) // notify the LibreOfficeKit - { - updateLibreOfficeKitAutoFill(pViewData, aFillRect); - } - else if (xOverlayManager.is()) - { - Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); - if (pViewData->GetActivePart() != eWhich) - // non-active pane uses a different color. - aHandleColor = SC_MOD()->GetColorConfig().GetColorValue(svtools::CALCPAGEBREAKAUTOMATIC).nColor; - std::vector< basegfx::B2DRange > aRanges; - const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); - basegfx::B2DRange aRB = vcl::unotools::b2DRectangleFromRectangle(aFillRect); + // expand rect to increase hit area + mpAutoFillRect = aFillRect; + mpAutoFillRect->expand(fScaleFactor); - aRB.transform(aTransform); - aRanges.push_back(aRB); + // #i70788# get the OverlayManager safely + rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); + if (comphelper::LibreOfficeKit::isActive()) // notify the LibreOfficeKit + { + updateLibreOfficeKitAutoFill(pViewData, aFillRect); + } + else if (xOverlayManager.is()) + { + Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); + if (pViewData->GetActivePart() != eWhich) + // non-active pane uses a different color. + aHandleColor = SC_MOD()->GetColorConfig().GetColorValue(svtools::CALCPAGEBREAKAUTOMATIC).nColor; + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + basegfx::B2DRange aRB = vcl::unotools::b2DRectangleFromRectangle(aFillRect); - std::unique_ptr<sdr::overlay::OverlayObject> pOverlay(new sdr::overlay::OverlaySelection( - sdr::overlay::OverlayType::Solid, - aHandleColor, - aRanges, - false)); + aRB.transform(aTransform); + aRanges.push_back(aRB); - xOverlayManager->add(*pOverlay); - mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList); - mpOOAutoFill->append(std::move(pOverlay)); - } + std::unique_ptr<sdr::overlay::OverlayObject> pOverlay(new sdr::overlay::OverlaySelection( + sdr::overlay::OverlayType::Solid, + aHandleColor, + aRanges, + false)); - if ( aOldMode != aDrawMode ) - SetMapMode( aOldMode ); + xOverlayManager->add(*pOverlay); + mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList); + mpOOAutoFill->append(std::move(pOverlay)); } + + if ( aOldMode != aDrawMode ) + SetMapMode( aOldMode ); } void ScGridWindow::DeleteDragRectOverlay() diff --git a/sc/source/ui/view/gridwin3.cxx b/sc/source/ui/view/gridwin3.cxx index fbb1bee09641..7c80764221a5 100644 --- a/sc/source/ui/view/gridwin3.cxx +++ b/sc/source/ui/view/gridwin3.cxx @@ -209,20 +209,20 @@ void ScGridWindow::DrawRedraw( ScOutputData& rOutputData, SdrLayerID nLayer ) const bool bDrawChart(VOBJ_MODE_SHOW == rOpts.GetObjMode(VOBJ_TYPE_CHART)); const bool bDrawDraw(VOBJ_MODE_SHOW == rOpts.GetObjMode(VOBJ_TYPE_DRAW)); - if(bDrawOle || bDrawChart || bDrawDraw) - { - ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); + if(!(bDrawOle || bDrawChart || bDrawDraw)) + return; - if(pDrView) - { - pDrView->setHideOle(!bDrawOle); - pDrView->setHideChart(!bDrawChart); - pDrView->setHideDraw(!bDrawDraw); - pDrView->setHideFormControl(!bDrawDraw); - } + ScDrawView* pDrView = pViewData->GetView()->GetScDrawView(); - rOutputData.DrawSelectiveObjects(nLayer); + if(pDrView) + { + pDrView->setHideOle(!bDrawOle); + pDrView->setHideChart(!bDrawChart); + pDrView->setHideDraw(!bDrawDraw); + pDrView->setHideFormControl(!bDrawDraw); } + + rOutputData.DrawSelectiveObjects(nLayer); } void ScGridWindow::DrawSdrGrid( const tools::Rectangle& rDrawingRect, OutputDevice* pContentDev ) diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index f31de4542bb6..1ebdf95b60c5 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -190,71 +190,71 @@ static void lcl_DrawScenarioFrames( OutputDevice* pDev, ScViewData* pViewData, S ScDocument* pDoc = pViewData->GetDocument(); SCTAB nTab = pViewData->GetTabNo(); SCTAB nTabCount = pDoc->GetTableCount(); - if ( nTab+1<nTabCount && pDoc->IsScenario(nTab+1) && !pDoc->IsScenario(nTab) ) - { - if ( nX1 > 0 ) --nX1; - if ( nY1>=2 ) nY1 -= 2; // Hack: Header row affects two cells - else if ( nY1 > 0 ) --nY1; - if ( nX2 < pDoc->MaxCol() ) ++nX2; - if ( nY2 < pDoc->MaxRow()-1 ) nY2 += 2; // Hack: Header row affects two cells - else if ( nY2 < pDoc->MaxRow() ) ++nY2; - ScRange aViewRange( nX1,nY1,nTab, nX2,nY2,nTab ); - - //! cache the ranges in table!!!! - - ScMarkData aMarks(pDoc->GetSheetLimits()); - for (SCTAB i=nTab+1; i<nTabCount && pDoc->IsScenario(i); i++) - pDoc->MarkScenario( i, nTab, aMarks, false, ScScenarioFlags::ShowFrame ); - ScRangeListRef xRanges = new ScRangeList; - aMarks.FillRangeListWithMarks( xRanges.get(), false ); - - bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); - long nLayoutSign = bLayoutRTL ? -1 : 1; + if ( nTab+1 >= nTabCount || !pDoc->IsScenario(nTab+1) || pDoc->IsScenario(nTab) ) + return; - for (size_t j = 0, n = xRanges->size(); j < n; ++j) - { - ScRange aRange = (*xRanges)[j]; - // Always extend scenario frame to merged cells where no new non-covered cells - // are framed - pDoc->ExtendTotalMerge( aRange ); + if ( nX1 > 0 ) --nX1; + if ( nY1>=2 ) nY1 -= 2; // Hack: Header row affects two cells + else if ( nY1 > 0 ) --nY1; + if ( nX2 < pDoc->MaxCol() ) ++nX2; + if ( nY2 < pDoc->MaxRow()-1 ) nY2 += 2; // Hack: Header row affects two cells + else if ( nY2 < pDoc->MaxRow() ) ++nY2; + ScRange aViewRange( nX1,nY1,nTab, nX2,nY2,nTab ); - //! -> Extend repaint when merging !!! + //! cache the ranges in table!!!! - if ( aRange.Intersects( aViewRange ) ) //! Space for Text/Button? - { - Point aStartPos = pViewData->GetScrPos( - aRange.aStart.Col(), aRange.aStart.Row(), eWhich, true ); - Point aEndPos = pViewData->GetScrPos( - aRange.aEnd.Col()+1, aRange.aEnd.Row()+1, eWhich, true ); - // on the grid: - aStartPos.AdjustX( -nLayoutSign ); - aStartPos.AdjustY( -1 ); - aEndPos.AdjustX( -nLayoutSign ); - aEndPos.AdjustY( -1 ); - - bool bTextBelow = ( aRange.aStart.Row() == 0 ); - - OUString aCurrent; - Color aColor( COL_LIGHTGRAY ); - for (SCTAB nAct=nTab+1; nAct<nTabCount && pDoc->IsScenario(nAct); nAct++) - if ( pDoc->IsActiveScenario(nAct) && pDoc->HasScenarioRange(nAct,aRange) ) - { - OUString aDummyComment; - ScScenarioFlags nDummyFlags; - pDoc->GetName( nAct, aCurrent ); - pDoc->GetScenarioData( nAct, aDummyComment, aColor, nDummyFlags ); - } + ScMarkData aMarks(pDoc->GetSheetLimits()); + for (SCTAB i=nTab+1; i<nTabCount && pDoc->IsScenario(i); i++) + pDoc->MarkScenario( i, nTab, aMarks, false, ScScenarioFlags::ShowFrame ); + ScRangeListRef xRanges = new ScRangeList; + aMarks.FillRangeListWithMarks( xRanges.get(), false ); + + bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); + long nLayoutSign = bLayoutRTL ? -1 : 1; - if (aCurrent.isEmpty()) - aCurrent = ScResId( STR_EMPTYDATA ); + for (size_t j = 0, n = xRanges->size(); j < n; ++j) + { + ScRange aRange = (*xRanges)[j]; + // Always extend scenario frame to merged cells where no new non-covered cells + // are framed + pDoc->ExtendTotalMerge( aRange ); - //! Own text "(None)" instead of "(Empty)" ??? + //! -> Extend repaint when merging !!! - lcl_DrawOneFrame( pDev, tools::Rectangle( aStartPos, aEndPos ), - aCurrent, aColor, bTextBelow, - pViewData->GetPPTX(), pViewData->GetPPTY(), pViewData->GetZoomY(), - pDoc, pViewData, bLayoutRTL ); - } + if ( aRange.Intersects( aViewRange ) ) //! Space for Text/Button? + { + Point aStartPos = pViewData->GetScrPos( + aRange.aStart.Col(), aRange.aStart.Row(), eWhich, true ); + Point aEndPos = pViewData->GetScrPos( + aRange.aEnd.Col()+1, aRange.aEnd.Row()+1, eWhich, true ); + // on the grid: + aStartPos.AdjustX( -nLayoutSign ); + aStartPos.AdjustY( -1 ); + aEndPos.AdjustX( -nLayoutSign ); + aEndPos.AdjustY( -1 ); + + bool bTextBelow = ( aRange.aStart.Row() == 0 ); + + OUString aCurrent; + Color aColor( COL_LIGHTGRAY ); + for (SCTAB nAct=nTab+1; nAct<nTabCount && pDoc->IsScenario(nAct); nAct++) + if ( pDoc->IsActiveScenario(nAct) && pDoc->HasScenarioRange(nAct,aRange) ) + { + OUString aDummyComment; + ScScenarioFlags nDummyFlags; + pDoc->GetName( nAct, aCurrent ); + pDoc->GetScenarioData( nAct, aDummyComment, aColor, nDummyFlags ); + } + + if (aCurrent.isEmpty()) + aCurrent = ScResId( STR_EMPTYDATA ); + + //! Own text "(None)" instead of "(Empty)" ??? + + lcl_DrawOneFrame( pDev, tools::Rectangle( aStartPos, aEndPos ), + aCurrent, aColor, bTextBelow, + pViewData->GetPPTX(), pViewData->GetPPTY(), pViewData->GetZoomY(), + pDoc, pViewData, bLayoutRTL ); } } } @@ -1561,219 +1561,219 @@ void ScGridWindow::CheckNeedsRepaint() { // called at the end of painting, and from timer after background text width calculation - if (bNeedsRepaint) - { - bNeedsRepaint = false; - if (aRepaintPixel.IsEmpty()) - Invalidate(); - else - Invalidate(PixelToLogic(aRepaintPixel)); - aRepaintPixel = tools::Rectangle(); - - // selection function in status bar might also be invalid - SfxBindings& rBindings = pViewData->GetBindings(); - rBindings.Invalidate( SID_STATUS_SUM ); - rBindings.Invalidate( SID_ATTR_SIZE ); - rBindings.Invalidate( SID_TABLE_CELL ); - } + if (!bNeedsRepaint) + return; + + bNeedsRepaint = false; + if (aRepaintPixel.IsEmpty()) + Invalidate(); + else + Invalidate(PixelToLogic(aRepaintPixel)); + aRepaintPixel = tools::Rectangle(); + + // selection function in status bar might also be invalid + SfxBindings& rBindings = pViewData->GetBindings(); + rBindings.Invalidate( SID_STATUS_SUM ); + rBindings.Invalidate( SID_ATTR_SIZE ); + rBindings.Invalidate( SID_TABLE_CELL ); } void ScGridWindow::DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, vcl::RenderContext& rRenderContext) { ScPageBreakData* pPageData = pViewData->GetView()->GetPageBreakData(); - if (pPageData) + if (!pPageData) + return; + + ScDocument* pDoc = pViewData->GetDocument(); + SCTAB nTab = pViewData->GetTabNo(); + Size aWinSize = GetOutputSizePixel(); + const svtools::ColorConfig& rColorCfg = SC_MOD()->GetColorConfig(); + Color aManual( rColorCfg.GetColorValue(svtools::CALCPAGEBREAKMANUAL).nColor ); + Color aAutomatic( rColorCfg.GetColorValue(svtools::CALCPAGEBREAK).nColor ); + + OUString aPageStr = ScResId( STR_PGNUM ); + if ( nPageScript == SvtScriptType::NONE ) { - ScDocument* pDoc = pViewData->GetDocument(); - SCTAB nTab = pViewData->GetTabNo(); - Size aWinSize = GetOutputSizePixel(); - const svtools::ColorConfig& rColorCfg = SC_MOD()->GetColorConfig(); - Color aManual( rColorCfg.GetColorValue(svtools::CALCPAGEBREAKMANUAL).nColor ); - Color aAutomatic( rColorCfg.GetColorValue(svtools::CALCPAGEBREAK).nColor ); + // get script type of translated "Page" string only once + nPageScript = pDoc->GetStringScriptType( aPageStr ); + if (nPageScript == SvtScriptType::NONE) + nPageScript = ScGlobal::GetDefaultScriptType(); + } - OUString aPageStr = ScResId( STR_PGNUM ); - if ( nPageScript == SvtScriptType::NONE ) - { - // get script type of translated "Page" string only once - nPageScript = pDoc->GetStringScriptType( aPageStr ); - if (nPageScript == SvtScriptType::NONE) - nPageScript = ScGlobal::GetDefaultScriptType(); - } + vcl::Font aFont; + std::unique_ptr<ScEditEngineDefaulter> pEditEng; + const ScPatternAttr& rDefPattern = pDoc->GetPool()->GetDefaultItem(ATTR_PATTERN); + if ( nPageScript == SvtScriptType::LATIN ) + { + // use single font and call DrawText directly + rDefPattern.GetFont( aFont, SC_AUTOCOL_BLACK ); + aFont.SetColor( COL_LIGHTGRAY ); + // font size is set as needed + } + else + { + // use EditEngine to draw mixed-script string + pEditEng.reset(new ScEditEngineDefaulter( EditEngine::CreatePool(), true )); + pEditEng->SetRefMapMode(rRenderContext.GetMapMode()); + auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() ); + rDefPattern.FillEditItemSet( pEditDefaults.get() ); + pEditDefaults->Put( SvxColorItem( COL_LIGHTGRAY, EE_CHAR_COLOR ) ); + pEditEng->SetDefaults( std::move(pEditDefaults) ); + } - vcl::Font aFont; - std::unique_ptr<ScEditEngineDefaulter> pEditEng; - const ScPatternAttr& rDefPattern = pDoc->GetPool()->GetDefaultItem(ATTR_PATTERN); - if ( nPageScript == SvtScriptType::LATIN ) - { - // use single font and call DrawText directly - rDefPattern.GetFont( aFont, SC_AUTOCOL_BLACK ); - aFont.SetColor( COL_LIGHTGRAY ); - // font size is set as needed - } - else + sal_uInt16 nCount = sal::static_int_cast<sal_uInt16>( pPageData->GetCount() ); + for (sal_uInt16 nPos=0; nPos<nCount; nPos++) + { + ScPrintRangeData& rData = pPageData->GetData(nPos); + ScRange aRange = rData.GetPrintRange(); + if ( aRange.aStart.Col() <= nX2+1 && aRange.aEnd.Col()+1 >= nX1 && + aRange.aStart.Row() <= nY2+1 && aRange.aEnd.Row()+1 >= nY1 ) { - // use EditEngine to draw mixed-script string - pEditEng.reset(new ScEditEngineDefaulter( EditEngine::CreatePool(), true )); - pEditEng->SetRefMapMode(rRenderContext.GetMapMode()); - auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() ); - rDefPattern.FillEditItemSet( pEditDefaults.get() ); - pEditDefaults->Put( SvxColorItem( COL_LIGHTGRAY, EE_CHAR_COLOR ) ); - pEditEng->SetDefaults( std::move(pEditDefaults) ); - } ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits