sc/source/ui/app/client.cxx | 148 ++--- sc/source/ui/app/drwtrans.cxx | 82 +- sc/source/ui/app/inputhdl.cxx | 874 +++++++++++++++--------------- sc/source/ui/app/inputwin.cxx | 346 +++++------ sc/source/ui/app/scmod.cxx | 256 ++++---- sc/source/ui/app/transobj.cxx | 228 +++---- sc/source/ui/cctrl/cbnumberformat.cxx | 20 sc/source/ui/cctrl/checklistmenu.cxx | 120 ++-- sc/source/ui/condformat/condformatdlg.cxx | 46 - sc/source/ui/dbgui/consdlg.cxx | 32 - sc/source/ui/dbgui/csvgrid.cxx | 82 +- sc/source/ui/dbgui/csvruler.cxx | 100 +-- sc/source/ui/dbgui/csvtablebox.cxx | 62 +- sc/source/ui/dbgui/dbnamdlg.cxx | 226 +++---- sc/source/ui/dbgui/filtdlg.cxx | 156 ++--- sc/source/ui/dbgui/foptmgr.cxx | 62 +- sc/source/ui/dbgui/imoptdlg.cxx | 64 +- sc/source/ui/dbgui/sfiltdlg.cxx | 90 +-- sc/source/ui/dbgui/validate.cxx | 125 ++-- sc/source/ui/docshell/dbdocfun.cxx | 246 ++++---- sc/source/ui/docshell/dbdocimp.cxx | 36 - sc/source/ui/docshell/docfunc.cxx | 227 +++---- sc/source/ui/docshell/docsh2.cxx | 62 +- sc/source/ui/docshell/docsh3.cxx | 24 sc/source/ui/docshell/docsh4.cxx | 110 +-- sc/source/ui/docshell/docsh5.cxx | 44 - sc/source/ui/docshell/docsh6.cxx | 26 sc/source/ui/docshell/externalrefmgr.cxx | 86 +- sc/source/ui/drawfunc/drawsh.cxx | 44 - sc/source/ui/drawfunc/drawsh2.cxx | 128 ++-- sc/source/ui/drawfunc/drtxtob.cxx | 128 ++-- 31 files changed, 2141 insertions(+), 2139 deletions(-)
New commits: commit 5f646281f777019a4e91c467f1d6f8a7f2083ffd Author: Noel Grandin <[email protected]> AuthorDate: Wed Jul 29 16:13:56 2020 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Thu Jul 30 08:27:52 2020 +0200 loplugin:flatten in sc/ui Change-Id: I4e12da123924b1036c1348ad1b04eef1826ae26a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99703 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/sc/source/ui/app/client.cxx b/sc/source/ui/app/client.cxx index b58efdf5218d..a121531c4782 100644 --- a/sc/source/ui/app/client.cxx +++ b/sc/source/ui/app/client.cxx @@ -96,42 +96,42 @@ void ScClient::RequestNewObjectArea( tools::Rectangle& aLogicRect ) sal_uInt16 nTab = pViewSh->GetViewData().GetTabNo(); SdrPage* pPage = pModel->GetPage(static_cast<sal_uInt16>(static_cast<sal_Int16>(nTab))); - if ( pPage && aLogicRect != aOldRect ) + if ( !(pPage && aLogicRect != aOldRect) ) + return; + + Point aPos; + Size aSize = pPage->GetSize(); + if ( aSize.Width() < 0 ) { - Point aPos; - Size aSize = pPage->GetSize(); - if ( aSize.Width() < 0 ) - { - aPos.setX( aSize.Width() + 1 ); // negative - aSize.setWidth( -aSize.Width() ); // positive - } - tools::Rectangle aPageRect( aPos, aSize ); + aPos.setX( aSize.Width() + 1 ); // negative + aSize.setWidth( -aSize.Width() ); // positive + } + tools::Rectangle aPageRect( aPos, aSize ); - if (aLogicRect.Right() > aPageRect.Right()) - { - long nDiff = aLogicRect.Right() - aPageRect.Right(); - aLogicRect.AdjustLeft( -nDiff ); - aLogicRect.AdjustRight( -nDiff ); - } - if (aLogicRect.Bottom() > aPageRect.Bottom()) - { - long nDiff = aLogicRect.Bottom() - aPageRect.Bottom(); - aLogicRect.AdjustTop( -nDiff ); - aLogicRect.AdjustBottom( -nDiff ); - } + if (aLogicRect.Right() > aPageRect.Right()) + { + long nDiff = aLogicRect.Right() - aPageRect.Right(); + aLogicRect.AdjustLeft( -nDiff ); + aLogicRect.AdjustRight( -nDiff ); + } + if (aLogicRect.Bottom() > aPageRect.Bottom()) + { + long nDiff = aLogicRect.Bottom() - aPageRect.Bottom(); + aLogicRect.AdjustTop( -nDiff ); + aLogicRect.AdjustBottom( -nDiff ); + } - if (aLogicRect.Left() < aPageRect.Left()) - { - long nDiff = aLogicRect.Left() - aPageRect.Left(); - aLogicRect.AdjustRight( -nDiff ); - aLogicRect.AdjustLeft( -nDiff ); - } - if (aLogicRect.Top() < aPageRect.Top()) - { - long nDiff = aLogicRect.Top() - aPageRect.Top(); - aLogicRect.AdjustBottom( -nDiff ); - aLogicRect.AdjustTop( -nDiff ); - } + if (aLogicRect.Left() < aPageRect.Left()) + { + long nDiff = aLogicRect.Left() - aPageRect.Left(); + aLogicRect.AdjustRight( -nDiff ); + aLogicRect.AdjustLeft( -nDiff ); + } + if (aLogicRect.Top() < aPageRect.Top()) + { + long nDiff = aLogicRect.Top() - aPageRect.Top(); + aLogicRect.AdjustBottom( -nDiff ); + aLogicRect.AdjustTop( -nDiff ); } } @@ -147,30 +147,30 @@ void ScClient::ObjectAreaChanged() // Take over position and size into document SdrOle2Obj* pDrawObj = GetDrawObj(); - if (pDrawObj) - { - tools::Rectangle aNewRectangle(GetScaledObjArea()); - - // #i118524# if sheared/rotated, center to non-rotated LogicRect - pDrawObj->setSuppressSetVisAreaSize(true); - - if(pDrawObj->GetGeoStat().nRotationAngle || pDrawObj->GetGeoStat().nShearAngle) - { - pDrawObj->SetLogicRect( aNewRectangle ); + if (!pDrawObj) + return; - const tools::Rectangle& rBoundRect = pDrawObj->GetCurrentBoundRect(); - const Point aDelta(aNewRectangle.Center() - rBoundRect.Center()); + tools::Rectangle aNewRectangle(GetScaledObjArea()); - aNewRectangle.Move(aDelta.X(), aDelta.Y()); - } + // #i118524# if sheared/rotated, center to non-rotated LogicRect + pDrawObj->setSuppressSetVisAreaSize(true); + if(pDrawObj->GetGeoStat().nRotationAngle || pDrawObj->GetGeoStat().nShearAngle) + { pDrawObj->SetLogicRect( aNewRectangle ); - pDrawObj->setSuppressSetVisAreaSize(false); - // set document modified (SdrModel::SetChanged is not used) - pViewSh->GetViewData().GetDocShell()->SetDrawModified(); - pViewSh->ScrollToObject(pDrawObj); + const tools::Rectangle& rBoundRect = pDrawObj->GetCurrentBoundRect(); + const Point aDelta(aNewRectangle.Center() - rBoundRect.Center()); + + aNewRectangle.Move(aDelta.X(), aDelta.Y()); } + + pDrawObj->SetLogicRect( aNewRectangle ); + pDrawObj->setSuppressSetVisAreaSize(false); + + // set document modified (SdrModel::SetChanged is not used) + pViewSh->GetViewData().GetDocShell()->SetDrawModified(); + pViewSh->ScrollToObject(pDrawObj); } void ScClient::ViewChanged() @@ -200,32 +200,32 @@ void ScClient::ViewChanged() // Take over position and size into document SdrOle2Obj* pDrawObj = GetDrawObj(); - if (pDrawObj) + if (!pDrawObj) + return; + + tools::Rectangle aLogicRect = pDrawObj->GetLogicRect(); + Fraction aFractX = GetScaleWidth() * aVisSize.Width(); + Fraction aFractY = GetScaleHeight() * aVisSize.Height(); + aVisSize = Size( static_cast<long>(aFractX), static_cast<long>(aFractY) ); // Scaled for Draw model + + // pClientData->SetObjArea before pDrawObj->SetLogicRect, so that we don't + // calculate wrong scalings: + //Rectangle aObjArea = aLogicRect; + //aObjArea.SetSize( aVisSize ); // Document size from the server + //SetObjArea( aObjArea ); + + SfxViewShell* pSfxViewSh = GetViewShell(); + ScTabViewShell* pViewSh = dynamic_cast<ScTabViewShell*>( pSfxViewSh ); + if ( pViewSh ) { - tools::Rectangle aLogicRect = pDrawObj->GetLogicRect(); - Fraction aFractX = GetScaleWidth() * aVisSize.Width(); - Fraction aFractY = GetScaleHeight() * aVisSize.Height(); - aVisSize = Size( static_cast<long>(aFractX), static_cast<long>(aFractY) ); // Scaled for Draw model - - // pClientData->SetObjArea before pDrawObj->SetLogicRect, so that we don't - // calculate wrong scalings: - //Rectangle aObjArea = aLogicRect; - //aObjArea.SetSize( aVisSize ); // Document size from the server - //SetObjArea( aObjArea ); - - SfxViewShell* pSfxViewSh = GetViewShell(); - ScTabViewShell* pViewSh = dynamic_cast<ScTabViewShell*>( pSfxViewSh ); - if ( pViewSh ) + vcl::Window* pWin = pViewSh->GetActiveWin(); + if ( pWin->LogicToPixel( aVisSize ) != pWin->LogicToPixel( aLogicRect.GetSize() ) ) { - vcl::Window* pWin = pViewSh->GetActiveWin(); - if ( pWin->LogicToPixel( aVisSize ) != pWin->LogicToPixel( aLogicRect.GetSize() ) ) - { - aLogicRect.SetSize( aVisSize ); - pDrawObj->SetLogicRect( aLogicRect ); + aLogicRect.SetSize( aVisSize ); + pDrawObj->SetLogicRect( aLogicRect ); - // set document modified (SdrModel::SetChanged is not used) - pViewSh->GetViewData().GetDocShell()->SetDrawModified(); - } + // set document modified (SdrModel::SetChanged is not used) + pViewSh->GetViewData().GetDocShell()->SetDrawModified(); } } } diff --git a/sc/source/ui/app/drwtrans.cxx b/sc/source/ui/app/drwtrans.cxx index ac338fa2c115..dcb90a5e06ed 100644 --- a/sc/source/ui/app/drwtrans.cxx +++ b/sc/source/ui/app/drwtrans.cxx @@ -685,57 +685,57 @@ void ScDrawTransferObj::CreateOLEData() void ScDrawTransferObj::InitDocShell() { - if ( !m_aDocShellRef.is() ) - { - ScDocShell* pDocSh = new ScDocShell; - m_aDocShellRef = pDocSh; // ref must be there before InitNew + if ( m_aDocShellRef.is() ) + return; - pDocSh->DoInitNew(); + ScDocShell* pDocSh = new ScDocShell; + m_aDocShellRef = pDocSh; // ref must be there before InitNew - ScDocument& rDestDoc = pDocSh->GetDocument(); - rDestDoc.InitDrawLayer( pDocSh ); + pDocSh->DoInitNew(); - SdrModel* pDestModel = rDestDoc.GetDrawLayer(); - // #i71538# use complete SdrViews - // SdrExchangeView aDestView( pDestModel ); - SdrView aDestView(*pDestModel); - aDestView.ShowSdrPage(aDestView.GetModel()->GetPage(0)); - aDestView.Paste( - *m_pModel, - Point(m_aSrcSize.Width()/2, m_aSrcSize.Height()/2), - nullptr, SdrInsertFlags::NONE); + ScDocument& rDestDoc = pDocSh->GetDocument(); + rDestDoc.InitDrawLayer( pDocSh ); - // put objects to right layer (see ScViewFunc::PasteDataFormat for SotClipboardFormatId::DRAWING) + SdrModel* pDestModel = rDestDoc.GetDrawLayer(); + // #i71538# use complete SdrViews + // SdrExchangeView aDestView( pDestModel ); + SdrView aDestView(*pDestModel); + aDestView.ShowSdrPage(aDestView.GetModel()->GetPage(0)); + aDestView.Paste( + *m_pModel, + Point(m_aSrcSize.Width()/2, m_aSrcSize.Height()/2), + nullptr, SdrInsertFlags::NONE); - SdrPage* pPage = pDestModel->GetPage(0); - if (pPage) + // put objects to right layer (see ScViewFunc::PasteDataFormat for SotClipboardFormatId::DRAWING) + + SdrPage* pPage = pDestModel->GetPage(0); + if (pPage) + { + SdrObjListIter aIter( pPage, SdrIterMode::DeepWithGroups ); + SdrObject* pObject = aIter.Next(); + while (pObject) { - SdrObjListIter aIter( pPage, SdrIterMode::DeepWithGroups ); - SdrObject* pObject = aIter.Next(); - while (pObject) - { - if ( dynamic_cast<const SdrUnoObj*>( pObject) != nullptr ) - pObject->NbcSetLayer(SC_LAYER_CONTROLS); - else - pObject->NbcSetLayer(SC_LAYER_FRONT); - pObject = aIter.Next(); - } + if ( dynamic_cast<const SdrUnoObj*>( pObject) != nullptr ) + pObject->NbcSetLayer(SC_LAYER_CONTROLS); + else + pObject->NbcSetLayer(SC_LAYER_FRONT); + pObject = aIter.Next(); } + } - tools::Rectangle aDestArea( Point(), m_aSrcSize ); - pDocSh->SetVisArea( aDestArea ); + tools::Rectangle aDestArea( Point(), m_aSrcSize ); + pDocSh->SetVisArea( aDestArea ); - ScViewOptions aViewOpt( rDestDoc.GetViewOptions() ); - aViewOpt.SetOption( VOPT_GRID, false ); - rDestDoc.SetViewOptions( aViewOpt ); + ScViewOptions aViewOpt( rDestDoc.GetViewOptions() ); + aViewOpt.SetOption( VOPT_GRID, false ); + rDestDoc.SetViewOptions( aViewOpt ); - ScViewData aViewData( pDocSh, nullptr ); - aViewData.SetTabNo( 0 ); - aViewData.SetScreen( aDestArea ); - aViewData.SetCurX( 0 ); - aViewData.SetCurY( 0 ); - pDocSh->UpdateOle(&aViewData, true); - } + ScViewData aViewData( pDocSh, nullptr ); + aViewData.SetTabNo( 0 ); + aViewData.SetScreen( aDestArea ); + aViewData.SetCurX( 0 ); + aViewData.SetCurY( 0 ); + pDocSh->UpdateOle(&aViewData, true); } namespace diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index a62887cbbb50..b130cb87a0b4 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -564,24 +564,24 @@ void ScInputHandler::SetDocumentDisposing( bool b ) static void lcl_Replace( EditView* pView, const OUString& rNewStr, const ESelection& rOldSel ) { - if ( pView ) - { - ESelection aOldSel = pView->GetSelection(); - if (aOldSel.HasRange()) - pView->SetSelection( ESelection( aOldSel.nEndPara, aOldSel.nEndPos, - aOldSel.nEndPara, aOldSel.nEndPos ) ); + if ( !pView ) + return; - EditEngine* pEngine = pView->GetEditEngine(); - pEngine->QuickInsertText( rNewStr, rOldSel ); + ESelection aOldSel = pView->GetSelection(); + if (aOldSel.HasRange()) + pView->SetSelection( ESelection( aOldSel.nEndPara, aOldSel.nEndPos, + aOldSel.nEndPara, aOldSel.nEndPos ) ); - // Dummy InsertText for Update and Paint - // To do that we need to cancel the selection from above (before QuickInsertText) - pView->InsertText( EMPTY_OUSTRING ); + EditEngine* pEngine = pView->GetEditEngine(); + pEngine->QuickInsertText( rNewStr, rOldSel ); - sal_Int32 nLen = pEngine->GetTextLen(0); - ESelection aSel( 0, nLen, 0, nLen ); - pView->SetSelection( aSel ); // Set cursor to the end - } + // Dummy InsertText for Update and Paint + // To do that we need to cancel the selection from above (before QuickInsertText) + pView->InsertText( EMPTY_OUSTRING ); + + sal_Int32 nLen = pEngine->GetTextLen(0); + ESelection aSel( 0, nLen, 0, nLen ); + pView->SetSelection( aSel ); // Set cursor to the end } void ScInputHandler::UpdateRange( sal_uInt16 nIndex, const ScRange& rNew ) @@ -867,25 +867,25 @@ void ScInputHandler::UpdateRefDevice() void ScInputHandler::ImplCreateEditEngine() { - if ( !mpEditEngine ) + if ( mpEditEngine ) + return; + + if ( pActiveViewSh ) { - if ( pActiveViewSh ) - { - ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); - mpEditEngine = std::make_unique<ScFieldEditEngine>(&rDoc, rDoc.GetEnginePool(), rDoc.GetEditPool()); - } - else - mpEditEngine = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool(), nullptr, true); + ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); + mpEditEngine = std::make_unique<ScFieldEditEngine>(&rDoc, rDoc.GetEnginePool(), rDoc.GetEditPool()); + } + else + mpEditEngine = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool(), nullptr, true); - mpEditEngine->SetWordDelimiters( ScEditUtil::ModifyDelimiters( mpEditEngine->GetWordDelimiters() ) ); - UpdateRefDevice(); // also sets MapMode - mpEditEngine->SetPaperSize( Size( 1000000, 1000000 ) ); - pEditDefaults.reset( new SfxItemSet( mpEditEngine->GetEmptyItemSet() ) ); + mpEditEngine->SetWordDelimiters( ScEditUtil::ModifyDelimiters( mpEditEngine->GetWordDelimiters() ) ); + UpdateRefDevice(); // also sets MapMode + mpEditEngine->SetPaperSize( Size( 1000000, 1000000 ) ); + pEditDefaults.reset( new SfxItemSet( mpEditEngine->GetEmptyItemSet() ) ); - mpEditEngine->SetControlWord( mpEditEngine->GetControlWord() | EEControlBits::AUTOCORRECT ); - mpEditEngine->SetReplaceLeadingSingleQuotationMark( false ); - mpEditEngine->SetModifyHdl( LINK( this, ScInputHandler, ModifyHdl ) ); - } + mpEditEngine->SetControlWord( mpEditEngine->GetControlWord() | EEControlBits::AUTOCORRECT ); + mpEditEngine->SetReplaceLeadingSingleQuotationMark( false ); + mpEditEngine->SetModifyHdl( LINK( this, ScInputHandler, ModifyHdl ) ); } void ScInputHandler::UpdateAutoCorrFlag() @@ -906,54 +906,54 @@ void ScInputHandler::UpdateAutoCorrFlag() void ScInputHandler::UpdateSpellSettings( bool bFromStartTab ) { - if ( pActiveViewSh ) - { - ScViewData& rViewData = pActiveViewSh->GetViewData(); - bool bOnlineSpell = rViewData.GetDocument()->GetDocOptions().IsAutoSpell(); + if ( !pActiveViewSh ) + return; - // SetDefaultLanguage is independent of the language attributes, - // ScGlobal::GetEditDefaultLanguage is always used. - // It must be set every time in case the office language was changed. + ScViewData& rViewData = pActiveViewSh->GetViewData(); + bool bOnlineSpell = rViewData.GetDocument()->GetDocOptions().IsAutoSpell(); - mpEditEngine->SetDefaultLanguage( ScGlobal::GetEditDefaultLanguage() ); + // SetDefaultLanguage is independent of the language attributes, + // ScGlobal::GetEditDefaultLanguage is always used. + // It must be set every time in case the office language was changed. - // if called for changed options, update flags only if already editing - // if called from StartTable, always update flags + mpEditEngine->SetDefaultLanguage( ScGlobal::GetEditDefaultLanguage() ); - if ( bFromStartTab || eMode != SC_INPUT_NONE ) - { - EEControlBits nCntrl = mpEditEngine->GetControlWord(); - EEControlBits nOld = nCntrl; - if( bOnlineSpell ) - nCntrl |= EEControlBits::ONLINESPELLING; - else - nCntrl &= ~EEControlBits::ONLINESPELLING; - // No AutoCorrect for Symbol Font (EditEngine does no evaluate Default) - if ( pLastPattern && pLastPattern->IsSymbolFont() ) - nCntrl &= ~EEControlBits::AUTOCORRECT; - else - nCntrl |= EEControlBits::AUTOCORRECT; - if ( nCntrl != nOld ) - mpEditEngine->SetControlWord(nCntrl); - - ScDocument* pDoc = rViewData.GetDocument(); - pDoc->ApplyAsianEditSettings( *mpEditEngine ); - mpEditEngine->SetDefaultHorizontalTextDirection( - pDoc->GetEditTextDirection( rViewData.GetTabNo() ) ); - mpEditEngine->SetFirstWordCapitalization( false ); - } + // if called for changed options, update flags only if already editing + // if called from StartTable, always update flags - // Language is set separately, so the speller is needed only if online spelling is active - if ( bOnlineSpell ) { - css::uno::Reference<css::linguistic2::XSpellChecker1> xXSpellChecker1( LinguMgr::GetSpellChecker() ); - mpEditEngine->SetSpeller( xXSpellChecker1 ); - } + if ( bFromStartTab || eMode != SC_INPUT_NONE ) + { + EEControlBits nCntrl = mpEditEngine->GetControlWord(); + EEControlBits nOld = nCntrl; + if( bOnlineSpell ) + nCntrl |= EEControlBits::ONLINESPELLING; + else + nCntrl &= ~EEControlBits::ONLINESPELLING; + // No AutoCorrect for Symbol Font (EditEngine does no evaluate Default) + if ( pLastPattern && pLastPattern->IsSymbolFont() ) + nCntrl &= ~EEControlBits::AUTOCORRECT; + else + nCntrl |= EEControlBits::AUTOCORRECT; + if ( nCntrl != nOld ) + mpEditEngine->SetControlWord(nCntrl); - bool bHyphen = pLastPattern && pLastPattern->GetItem(ATTR_HYPHENATE).GetValue(); - if ( bHyphen ) { - css::uno::Reference<css::linguistic2::XHyphenator> xXHyphenator( LinguMgr::GetHyphenator() ); - mpEditEngine->SetHyphenator( xXHyphenator ); - } + ScDocument* pDoc = rViewData.GetDocument(); + pDoc->ApplyAsianEditSettings( *mpEditEngine ); + mpEditEngine->SetDefaultHorizontalTextDirection( + pDoc->GetEditTextDirection( rViewData.GetTabNo() ) ); + mpEditEngine->SetFirstWordCapitalization( false ); + } + + // Language is set separately, so the speller is needed only if online spelling is active + if ( bOnlineSpell ) { + css::uno::Reference<css::linguistic2::XSpellChecker1> xXSpellChecker1( LinguMgr::GetSpellChecker() ); + mpEditEngine->SetSpeller( xXSpellChecker1 ); + } + + bool bHyphen = pLastPattern && pLastPattern->GetItem(ATTR_HYPHENATE).GetValue(); + if ( bHyphen ) { + css::uno::Reference<css::linguistic2::XHyphenator> xXHyphenator( LinguMgr::GetHyphenator() ); + mpEditEngine->SetHyphenator( xXHyphenator ); } } @@ -962,49 +962,49 @@ void ScInputHandler::UpdateSpellSettings( bool bFromStartTab ) // The other types are defined in ScDocument::GetFormulaEntries void ScInputHandler::GetFormulaData() { - if ( pActiveViewSh ) - { - ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); + if ( !pActiveViewSh ) + return; - if ( pFormulaData ) - pFormulaData->clear(); - else - { - pFormulaData.reset( new ScTypedCaseStrSet ); - } + ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); - if( pFormulaDataPara ) - pFormulaDataPara->clear(); - else - pFormulaDataPara.reset( new ScTypedCaseStrSet ); + if ( pFormulaData ) + pFormulaData->clear(); + else + { + pFormulaData.reset( new ScTypedCaseStrSet ); + } + + if( pFormulaDataPara ) + pFormulaDataPara->clear(); + else + pFormulaDataPara.reset( new ScTypedCaseStrSet ); - const OUString aParenthesesReplacement( cParenthesesReplacement); - const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); - sal_uInt32 nListCount = pFuncList->GetCount(); - for(sal_uInt32 i=0;i<nListCount;i++) + const OUString aParenthesesReplacement( cParenthesesReplacement); + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + sal_uInt32 nListCount = pFuncList->GetCount(); + 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 ) + const sal_Unicode* pName = pDesc->mxFuncName->getStr(); + const sal_Int32 nLen = pDesc->mxFuncName->getLength(); + // fdo#75264 fill maFormulaChar with all characters used in formula names + for ( sal_Int32 j = 0; j < nLen; j++ ) { - const sal_Unicode* pName = pDesc->mxFuncName->getStr(); - const sal_Int32 nLen = pDesc->mxFuncName->getLength(); - // fdo#75264 fill maFormulaChar with all characters used in formula names - for ( sal_Int32 j = 0; j < nLen; j++ ) - { - sal_Unicode c = pName[ j ]; - maFormulaChar.insert( c ); - } - OUString aFuncName = *pDesc->mxFuncName + aParenthesesReplacement; - pFormulaData->insert(ScTypedStrData(aFuncName, 0.0, ScTypedStrData::Standard)); - pDesc->initArgumentInfo(); - OUString aEntry = pDesc->getSignature(); - pFormulaDataPara->insert(ScTypedStrData(aEntry, 0.0, ScTypedStrData::Standard)); + sal_Unicode c = pName[ j ]; + maFormulaChar.insert( c ); } + OUString aFuncName = *pDesc->mxFuncName + aParenthesesReplacement; + pFormulaData->insert(ScTypedStrData(aFuncName, 0.0, ScTypedStrData::Standard)); + pDesc->initArgumentInfo(); + OUString aEntry = pDesc->getSignature(); + pFormulaDataPara->insert(ScTypedStrData(aEntry, 0.0, ScTypedStrData::Standard)); } - miAutoPosFormula = pFormulaData->end(); - rDoc.GetFormulaEntries( *pFormulaData ); - rDoc.GetFormulaEntries( *pFormulaDataPara ); } + miAutoPosFormula = pFormulaData->end(); + rDoc.GetFormulaEntries( *pFormulaData ); + rDoc.GetFormulaEntries( *pFormulaDataPara ); } IMPL_LINK( ScInputHandler, ShowHideTipVisibleParentListener, VclWindowEvent&, rEvent, void ) @@ -1220,21 +1220,21 @@ void ScInputHandler::ShowTipCursor() HideTipBelow(); EditView* pActiveView = pTopView ? pTopView : pTableView; - if ( bFormulaMode && pActiveView && pFormulaDataPara && mpEditEngine->GetParagraphCount() == 1 ) - { - OUString aParagraph = mpEditEngine->GetText( 0 ); - ESelection aSel = pActiveView->GetSelection(); - aSel.Adjust(); + if ( !(bFormulaMode && pActiveView && pFormulaDataPara && mpEditEngine->GetParagraphCount() == 1) ) + return; + + OUString aParagraph = mpEditEngine->GetText( 0 ); + ESelection aSel = pActiveView->GetSelection(); + aSel.Adjust(); - if ( aParagraph.getLength() < aSel.nEndPos ) - return; + if ( aParagraph.getLength() < aSel.nEndPos ) + return; - if ( aSel.nEndPos > 0 ) - { - OUString aSelText( aParagraph.copy( 0, aSel.nEndPos )); + if ( aSel.nEndPos > 0 ) + { + OUString aSelText( aParagraph.copy( 0, aSel.nEndPos )); - ShowArgumentsTip( aSelText ); - } + ShowArgumentsTip( aSelText ); } } @@ -1246,20 +1246,20 @@ void ScInputHandler::ShowTip( const OUString& rText ) HideTipBelow(); EditView* pActiveView = pTopView ? pTopView : pTableView; - if (pActiveView) - { - Point aPos; - pTipVisibleParent = pActiveView->GetWindow(); - vcl::Cursor* pCur = pActiveView->GetCursor(); - if (pCur) - aPos = pTipVisibleParent->LogicToPixel( pCur->GetPos() ); - aPos = pTipVisibleParent->OutputToScreenPixel( aPos ); - tools::Rectangle aRect( aPos, aPos ); + if (!pActiveView) + return; - QuickHelpFlags const nAlign = QuickHelpFlags::Left|QuickHelpFlags::Bottom; - nTipVisible = Help::ShowPopover(pTipVisibleParent, aRect, rText, nAlign); - pTipVisibleParent->AddEventListener( LINK( this, ScInputHandler, ShowHideTipVisibleParentListener ) ); - } + Point aPos; + pTipVisibleParent = pActiveView->GetWindow(); + vcl::Cursor* pCur = pActiveView->GetCursor(); + if (pCur) + aPos = pTipVisibleParent->LogicToPixel( pCur->GetPos() ); + aPos = pTipVisibleParent->OutputToScreenPixel( aPos ); + tools::Rectangle aRect( aPos, aPos ); + + QuickHelpFlags const nAlign = QuickHelpFlags::Left|QuickHelpFlags::Bottom; + nTipVisible = Help::ShowPopover(pTipVisibleParent, aRect, rText, nAlign); + pTipVisibleParent->AddEventListener( LINK( this, ScInputHandler, ShowHideTipVisibleParentListener ) ); } void ScInputHandler::ShowTipBelow( const OUString& rText ) @@ -1267,23 +1267,23 @@ void ScInputHandler::ShowTipBelow( const OUString& rText ) HideTipBelow(); EditView* pActiveView = pTopView ? pTopView : pTableView; - if ( pActiveView ) + if ( !pActiveView ) + return; + + Point aPos; + pTipVisibleSecParent = pActiveView->GetWindow(); + vcl::Cursor* pCur = pActiveView->GetCursor(); + if ( pCur ) { - Point aPos; - pTipVisibleSecParent = pActiveView->GetWindow(); - vcl::Cursor* pCur = pActiveView->GetCursor(); - if ( pCur ) - { - Point aLogicPos = pCur->GetPos(); - aLogicPos.AdjustY(pCur->GetHeight() ); - aPos = pTipVisibleSecParent->LogicToPixel( aLogicPos ); - } - aPos = pTipVisibleSecParent->OutputToScreenPixel( aPos ); - tools::Rectangle aRect( aPos, aPos ); - QuickHelpFlags const nAlign = QuickHelpFlags::Left | QuickHelpFlags::Top | QuickHelpFlags::NoEvadePointer; - nTipVisibleSec = Help::ShowPopover(pTipVisibleSecParent, aRect, rText, nAlign); - pTipVisibleSecParent->AddEventListener( LINK( this, ScInputHandler, ShowHideTipVisibleSecParentListener ) ); + Point aLogicPos = pCur->GetPos(); + aLogicPos.AdjustY(pCur->GetHeight() ); + aPos = pTipVisibleSecParent->LogicToPixel( aLogicPos ); } + aPos = pTipVisibleSecParent->OutputToScreenPixel( aPos ); + tools::Rectangle aRect( aPos, aPos ); + QuickHelpFlags const nAlign = QuickHelpFlags::Left | QuickHelpFlags::Top | QuickHelpFlags::NoEvadePointer; + nTipVisibleSec = Help::ShowPopover(pTipVisibleSecParent, aRect, rText, nAlign); + pTipVisibleSecParent->AddEventListener( LINK( this, ScInputHandler, ShowHideTipVisibleSecParentListener ) ); } bool ScInputHandler::GetFuncName( OUString& aStart, OUString& aResult ) @@ -1454,68 +1454,68 @@ void ScInputHandler::UseFormulaData() EditView* pActiveView = pTopView ? pTopView : pTableView; // Formulas may only have 1 paragraph - if ( pActiveView && pFormulaData && mpEditEngine->GetParagraphCount() == 1 ) - { - OUString aParagraph = mpEditEngine->GetText( 0 ); - ESelection aSel = pActiveView->GetSelection(); - aSel.Adjust(); + if ( !(pActiveView && pFormulaData && mpEditEngine->GetParagraphCount() == 1) ) + return; - // Due to differences between table and input cell (e.g clipboard with line breaks), - // the selection may not be in line with the EditEngine anymore. - // Just return without any indication as to why. - if ( aSel.nEndPos > aParagraph.getLength() ) - return; - - if ( aParagraph.getLength() > aSel.nEndPos && - ( ScGlobal::getCharClassPtr()->isLetterNumeric( aParagraph, aSel.nEndPos ) || - aParagraph[ aSel.nEndPos ] == '_' || - aParagraph[ aSel.nEndPos ] == '.' || - aParagraph[ aSel.nEndPos ] == '$' ) ) - return; - - // Is the cursor at the end of a word? - if ( aSel.nEndPos > 0 ) - { - OUString aSelText( aParagraph.copy( 0, aSel.nEndPos )); + OUString aParagraph = mpEditEngine->GetText( 0 ); + ESelection aSel = pActiveView->GetSelection(); + aSel.Adjust(); + + // Due to differences between table and input cell (e.g clipboard with line breaks), + // the selection may not be in line with the EditEngine anymore. + // Just return without any indication as to why. + if ( aSel.nEndPos > aParagraph.getLength() ) + return; + + if ( aParagraph.getLength() > aSel.nEndPos && + ( ScGlobal::getCharClassPtr()->isLetterNumeric( aParagraph, aSel.nEndPos ) || + aParagraph[ aSel.nEndPos ] == '_' || + aParagraph[ aSel.nEndPos ] == '.' || + aParagraph[ aSel.nEndPos ] == '$' ) ) + return; - OUString aText; - if ( GetFuncName( aSelText, aText ) ) + // Is the cursor at the end of a word? + if ( aSel.nEndPos <= 0 ) + return; + + OUString aSelText( aParagraph.copy( 0, aSel.nEndPos )); + + OUString aText; + if ( GetFuncName( aSelText, aText ) ) + { + // function name is incomplete: + // show matching functions name as tip above cell + ::std::vector<OUString> aNewVec; + miAutoPosFormula = pFormulaData->end(); + miAutoPosFormula = findTextAll(*pFormulaData, miAutoPosFormula, aText, aNewVec, false); + if (miAutoPosFormula != pFormulaData->end()) + { + // check if partial function name is not between quotes + sal_Unicode cBetweenQuotes = 0; + for ( int n = 0; n < aSelText.getLength(); n++ ) { - // function name is incomplete: - // show matching functions name as tip above cell - ::std::vector<OUString> aNewVec; - miAutoPosFormula = pFormulaData->end(); - miAutoPosFormula = findTextAll(*pFormulaData, miAutoPosFormula, aText, aNewVec, false); - if (miAutoPosFormula != pFormulaData->end()) + if (cBetweenQuotes) { - // check if partial function name is not between quotes - sal_Unicode cBetweenQuotes = 0; - for ( int n = 0; n < aSelText.getLength(); n++ ) - { - if (cBetweenQuotes) - { - if (aSelText[n] == cBetweenQuotes) - cBetweenQuotes = 0; - } - else if ( aSelText[ n ] == '"' ) - cBetweenQuotes = '"'; - else if ( aSelText[ n ] == '\'' ) - cBetweenQuotes = '\''; - } - if ( cBetweenQuotes ) - return; // we're between quotes - - ShowFuncList(aNewVec); - aAutoSearch = aText; + if (aSelText[n] == cBetweenQuotes) + cBetweenQuotes = 0; } - return; + else if ( aSelText[ n ] == '"' ) + cBetweenQuotes = '"'; + else if ( aSelText[ n ] == '\'' ) + cBetweenQuotes = '\''; } + if ( cBetweenQuotes ) + return; // we're between quotes - // function name is complete: - // show tip below the cell with function name and arguments of function - ShowArgumentsTip( aSelText ); + ShowFuncList(aNewVec); + aAutoSearch = aText; } + return; } + + // function name is complete: + // show tip below the cell with function name and arguments of function + ShowArgumentsTip( aSelText ); } void ScInputHandler::NextFormulaEntry( bool bBack ) @@ -1541,95 +1541,95 @@ namespace { void completeFunction( EditView* pView, const OUString& rInsert, bool& rParInserted ) { - if (pView) + if (!pView) + return; + + ESelection aSel = pView->GetSelection(); + + bool bNoInitialLetter = false; + OUString aOld = pView->GetEditEngine()->GetText(0); + // in case we want just insert a function and not completing + if ( comphelper::LibreOfficeKit::isActive() ) { - ESelection aSel = pView->GetSelection(); + ESelection aSelRange = aSel; + --aSelRange.nStartPos; + --aSelRange.nEndPos; + pView->SetSelection(aSelRange); + pView->SelectCurrentWord(); - bool bNoInitialLetter = false; - OUString aOld = pView->GetEditEngine()->GetText(0); - // in case we want just insert a function and not completing - if ( comphelper::LibreOfficeKit::isActive() ) + if ( aOld == "=" ) { - ESelection aSelRange = aSel; - --aSelRange.nStartPos; - --aSelRange.nEndPos; + bNoInitialLetter = true; + aSelRange.nStartPos = 1; + aSelRange.nEndPos = 1; pView->SetSelection(aSelRange); - pView->SelectCurrentWord(); - - if ( aOld == "=" ) - { - bNoInitialLetter = true; - aSelRange.nStartPos = 1; - aSelRange.nEndPos = 1; - pView->SetSelection(aSelRange); - } - else if ( pView->GetSelected().startsWith("()") ) - { - bNoInitialLetter = true; - ++aSelRange.nStartPos; - ++aSelRange.nEndPos; - pView->SetSelection(aSelRange); - } } - - if(!bNoInitialLetter) + else if ( pView->GetSelected().startsWith("()") ) { - const sal_Int32 nMinLen = std::max(aSel.nEndPos - aSel.nStartPos, sal_Int32(1)); - // Since transliteration service is used to test for match, the replaced string could be - // longer than rInsert, so in order to find longest match before the cursor, test whole - // string from start to current cursor position (don't limit to length of rInsert) - // Disclaimer: I really don't know if a match longer than rInsert is actually possible, - // so the above is based on assumptions how "transliteration" might possibly work. If - // it's in fact impossible, an optimization would be useful to limit aSel.nStartPos to - // std::max(sal_Int32(0), aSel.nEndPos - rInsert.getLength()). - aSel.nStartPos = 0; - pView->SetSelection(aSel); - const OUString aAll = pView->GetSelected(); - OUString aMatch; - for (sal_Int32 n = aAll.getLength(); n >= nMinLen && aMatch.isEmpty(); --n) - { - const OUString aTest = aAll.copy(aAll.getLength() - n); // n trailing chars - if (ScGlobal::GetpTransliteration()->isMatch(aTest, rInsert)) - aMatch = aTest; // Found => break the loop - } - - aSel.nStartPos = aSel.nEndPos - aMatch.getLength(); - pView->SetSelection(aSel); + bNoInitialLetter = true; + ++aSelRange.nStartPos; + ++aSelRange.nEndPos; + pView->SetSelection(aSelRange); } + } - OUString aInsStr = rInsert; - sal_Int32 nInsLen = aInsStr.getLength(); - bool bDoParen = ( nInsLen > 1 && aInsStr[nInsLen-2] == '(' - && aInsStr[nInsLen-1] == ')' ); - if ( bDoParen ) + if(!bNoInitialLetter) + { + const sal_Int32 nMinLen = std::max(aSel.nEndPos - aSel.nStartPos, sal_Int32(1)); + // Since transliteration service is used to test for match, the replaced string could be + // longer than rInsert, so in order to find longest match before the cursor, test whole + // string from start to current cursor position (don't limit to length of rInsert) + // Disclaimer: I really don't know if a match longer than rInsert is actually possible, + // so the above is based on assumptions how "transliteration" might possibly work. If + // it's in fact impossible, an optimization would be useful to limit aSel.nStartPos to + // std::max(sal_Int32(0), aSel.nEndPos - rInsert.getLength()). + aSel.nStartPos = 0; + pView->SetSelection(aSel); + const OUString aAll = pView->GetSelected(); + OUString aMatch; + for (sal_Int32 n = aAll.getLength(); n >= nMinLen && aMatch.isEmpty(); --n) { - // Do not insert parentheses after function names if there already are some - // (e.g. if the function name was edited). - ESelection aWordSel = pView->GetSelection(); + const OUString aTest = aAll.copy(aAll.getLength() - n); // n trailing chars + if (ScGlobal::GetpTransliteration()->isMatch(aTest, rInsert)) + aMatch = aTest; // Found => break the loop + } - // aWordSel.EndPos points one behind string if word at end - if (aWordSel.nEndPos < aOld.getLength()) + aSel.nStartPos = aSel.nEndPos - aMatch.getLength(); + pView->SetSelection(aSel); + } + + OUString aInsStr = rInsert; + sal_Int32 nInsLen = aInsStr.getLength(); + bool bDoParen = ( nInsLen > 1 && aInsStr[nInsLen-2] == '(' + && aInsStr[nInsLen-1] == ')' ); + if ( bDoParen ) + { + // Do not insert parentheses after function names if there already are some + // (e.g. if the function name was edited). + ESelection aWordSel = pView->GetSelection(); + + // aWordSel.EndPos points one behind string if word at end + if (aWordSel.nEndPos < aOld.getLength()) + { + sal_Unicode cNext = aOld[aWordSel.nEndPos]; + if ( cNext == '(' ) { - sal_Unicode cNext = aOld[aWordSel.nEndPos]; - if ( cNext == '(' ) - { - bDoParen = false; - aInsStr = aInsStr.copy( 0, nInsLen - 2 ); // Skip parentheses - } + bDoParen = false; + aInsStr = aInsStr.copy( 0, nInsLen - 2 ); // Skip parentheses } } + } - pView->InsertText( aInsStr ); + pView->InsertText( aInsStr ); - if ( bDoParen ) // Put cursor between parentheses - { - aSel = pView->GetSelection(); - --aSel.nStartPos; - --aSel.nEndPos; - pView->SetSelection(aSel); + if ( bDoParen ) // Put cursor between parentheses + { + aSel = pView->GetSelection(); + --aSel.nStartPos; + --aSel.nEndPos; + pView->SetSelection(aSel); - rParInserted = true; - } + rParInserted = true; } } @@ -1664,37 +1664,37 @@ void ScInputHandler::PasteFunctionData() void ScInputHandler::LOKPasteFunctionData(const OUString& rFunctionName) { - if (pActiveViewSh && (pTopView || pTableView)) + if (!(pActiveViewSh && (pTopView || pTableView))) + return; + + bool bEdit = false; + OUString aFormula; + EditView* pEditView = pTopView ? pTopView : pTableView; + const EditEngine* pEditEngine = pEditView->GetEditEngine(); + if (pEditEngine) { - bool bEdit = false; - OUString aFormula; - EditView* pEditView = pTopView ? pTopView : pTableView; - const EditEngine* pEditEngine = pEditView->GetEditEngine(); - if (pEditEngine) - { - aFormula = pEditEngine->GetText(0); - bEdit = aFormula.getLength() > 1 && (aFormula[0] == '=' || aFormula[0] == '+' || aFormula[0] == '-'); - } + aFormula = pEditEngine->GetText(0); + bEdit = aFormula.getLength() > 1 && (aFormula[0] == '=' || aFormula[0] == '+' || aFormula[0] == '-'); + } - if ( !bEdit ) - { - OUString aNewFormula('='); - if ( aFormula.startsWith("=") ) - aNewFormula = aFormula; + if ( !bEdit ) + { + OUString aNewFormula('='); + if ( aFormula.startsWith("=") ) + aNewFormula = aFormula; - InputReplaceSelection( aNewFormula ); - } + InputReplaceSelection( aNewFormula ); + } - if (pFormulaData) - { - OUString aNew; - ScTypedCaseStrSet::const_iterator aPos = findText(*pFormulaData, pFormulaData->begin(), rFunctionName, aNew, /* backward = */false); + if (pFormulaData) + { + OUString aNew; + ScTypedCaseStrSet::const_iterator aPos = findText(*pFormulaData, pFormulaData->begin(), rFunctionName, aNew, /* backward = */false); - if (aPos != pFormulaData->end()) - { - miAutoPosFormula = aPos; - PasteFunctionData(); - } + if (aPos != pFormulaData->end()) + { + miAutoPosFormula = aPos; + PasteFunctionData(); } } } @@ -1900,92 +1900,92 @@ void ScInputHandler::SkipClosingPar() void ScInputHandler::GetColData() { - if ( pActiveViewSh ) - { - ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); + if ( !pActiveViewSh ) + return; - if ( pColumnData ) - pColumnData->clear(); - else - pColumnData.reset( new ScTypedCaseStrSet ); + ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocShell()->GetDocument(); - std::vector<ScTypedStrData> aEntries; - rDoc.GetDataEntries( - aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aEntries, true); - if (!aEntries.empty()) - pColumnData->insert(aEntries.begin(), aEntries.end()); + if ( pColumnData ) + pColumnData->clear(); + else + pColumnData.reset( new ScTypedCaseStrSet ); - miAutoPosColumn = pColumnData->end(); - } + std::vector<ScTypedStrData> aEntries; + rDoc.GetDataEntries( + aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aEntries, true); + if (!aEntries.empty()) + pColumnData->insert(aEntries.begin(), aEntries.end()); + + miAutoPosColumn = pColumnData->end(); } void ScInputHandler::UseColData() // When typing { EditView* pActiveView = pTopView ? pTopView : pTableView; - if ( pActiveView && pColumnData ) - { - // Only change when cursor is at the end - ESelection aSel = pActiveView->GetSelection(); - aSel.Adjust(); + if ( !(pActiveView && pColumnData) ) + return; - sal_Int32 nParCnt = mpEditEngine->GetParagraphCount(); - if ( aSel.nEndPara+1 == nParCnt ) - { - sal_Int32 nParLen = mpEditEngine->GetTextLen( aSel.nEndPara ); - if ( aSel.nEndPos == nParLen ) - { - OUString aText = GetEditText(mpEditEngine.get()); - if (!aText.isEmpty()) - { - OUString aNew; - miAutoPosColumn = pColumnData->end(); - miAutoPosColumn = findText(*pColumnData, miAutoPosColumn, aText, aNew, false); - if (miAutoPosColumn != pColumnData->end()) - { - // Strings can contain line endings (e.g. due to dBase import), - // which would result in multiple paragraphs here, which is not desirable. - //! Then GetExactMatch doesn't work either - lcl_RemoveLineEnd( aNew ); + // Only change when cursor is at the end + ESelection aSel = pActiveView->GetSelection(); + aSel.Adjust(); - // Keep paragraph, just append the rest - //! Exact replacement in EnterHandler !!! - // One Space between paragraphs: - sal_Int32 nEdLen = mpEditEngine->GetTextLen() + nParCnt - 1; - OUString aIns = aNew.copy(nEdLen); + sal_Int32 nParCnt = mpEditEngine->GetParagraphCount(); + if ( aSel.nEndPara+1 != nParCnt ) + return; - // Selection must be "backwards", so the cursor stays behind the last - // typed character - ESelection aSelection( aSel.nEndPara, aSel.nEndPos + aIns.getLength(), - aSel.nEndPara, aSel.nEndPos ); + sal_Int32 nParLen = mpEditEngine->GetTextLen( aSel.nEndPara ); + if ( aSel.nEndPos != nParLen ) + return; - // When editing in input line, apply to both edit views - if ( pTableView ) - { - pTableView->InsertText( aIns ); - pTableView->SetSelection( aSelection ); - } - if ( pTopView ) - { - pTopView->InsertText( aIns ); - pTopView->SetSelection( aSelection ); - } + OUString aText = GetEditText(mpEditEngine.get()); + if (aText.isEmpty()) + return; - aAutoSearch = aText; // To keep searching - nAutoPos is set + OUString aNew; + miAutoPosColumn = pColumnData->end(); + miAutoPosColumn = findText(*pColumnData, miAutoPosColumn, aText, aNew, false); + if (miAutoPosColumn != pColumnData->end()) + { + // Strings can contain line endings (e.g. due to dBase import), + // which would result in multiple paragraphs here, which is not desirable. + //! Then GetExactMatch doesn't work either + lcl_RemoveLineEnd( aNew ); - if (aText.getLength() == aNew.getLength()) - { - // If the inserted text is found, consume TAB only if there's more coming - OUString aDummy; - ScTypedCaseStrSet::const_iterator itNextPos = - findText(*pColumnData, miAutoPosColumn, aText, aDummy, false); - bUseTab = itNextPos != pColumnData->end(); - } - else - bUseTab = true; - } - } - } + // Keep paragraph, just append the rest + //! Exact replacement in EnterHandler !!! + // One Space between paragraphs: + sal_Int32 nEdLen = mpEditEngine->GetTextLen() + nParCnt - 1; + OUString aIns = aNew.copy(nEdLen); + + // Selection must be "backwards", so the cursor stays behind the last + // typed character + ESelection aSelection( aSel.nEndPara, aSel.nEndPos + aIns.getLength(), + aSel.nEndPara, aSel.nEndPos ); + + // When editing in input line, apply to both edit views + if ( pTableView ) + { + pTableView->InsertText( aIns ); + pTableView->SetSelection( aSelection ); } + if ( pTopView ) + { + pTopView->InsertText( aIns ); + pTopView->SetSelection( aSelection ); + } + + aAutoSearch = aText; // To keep searching - nAutoPos is set + + if (aText.getLength() == aNew.getLength()) + { + // If the inserted text is found, consume TAB only if there's more coming + OUString aDummy; + ScTypedCaseStrSet::const_iterator itNextPos = + findText(*pColumnData, miAutoPosColumn, aText, aDummy, false); + bUseTab = itNextPos != pColumnData->end(); + } + else + bUseTab = true; } } @@ -2712,30 +2712,30 @@ void ScInputHandler::ShowRefFrame() // checks in NotifyChange, and lead to keeping the wrong value in pActiveViewSh. // A local variable is used instead. ScTabViewShell* pVisibleSh = dynamic_cast<ScTabViewShell*>( SfxViewShell::Current() ); - if ( pRefViewSh && pRefViewSh != pVisibleSh ) + if ( !(pRefViewSh && pRefViewSh != pVisibleSh) ) + return; + + bool bFound = false; + SfxViewFrame* pRefFrame = pRefViewSh->GetViewFrame(); + SfxViewFrame* pOneFrame = SfxViewFrame::GetFirst(); + while ( pOneFrame && !bFound ) { - bool bFound = false; - SfxViewFrame* pRefFrame = pRefViewSh->GetViewFrame(); - SfxViewFrame* pOneFrame = SfxViewFrame::GetFirst(); - while ( pOneFrame && !bFound ) - { - if ( pOneFrame == pRefFrame ) - bFound = true; - pOneFrame = SfxViewFrame::GetNext( *pOneFrame ); - } + if ( pOneFrame == pRefFrame ) + bFound = true; + pOneFrame = SfxViewFrame::GetNext( *pOneFrame ); + } - if (bFound) - { - // We count on Activate working synchronously here - // (pActiveViewSh is set while doing so) - pRefViewSh->SetActive(); // Appear and SetViewFrame + if (bFound) + { + // We count on Activate working synchronously here + // (pActiveViewSh is set while doing so) + pRefViewSh->SetActive(); // Appear and SetViewFrame - // pLastState is set correctly in the NotifyChange from the Activate - } - else - { - OSL_FAIL("ViewFrame for reference input is not here anymore"); - } + // pLastState is set correctly in the NotifyChange from the Activate + } + else + { + OSL_FAIL("ViewFrame for reference input is not here anymore"); } } @@ -2757,34 +2757,34 @@ void ScInputHandler::RemoveSelection() void ScInputHandler::InvalidateAttribs() { SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - if (pViewFrm) - { - SfxBindings& rBindings = pViewFrm->GetBindings(); + if (!pViewFrm) + return; - rBindings.Invalidate( SID_ATTR_CHAR_FONT ); - rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); - rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); + SfxBindings& rBindings = pViewFrm->GetBindings(); - rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT ); - rBindings.Invalidate( SID_ATTR_CHAR_POSTURE ); - rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE ); - rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE ); - rBindings.Invalidate( SID_ULINE_VAL_NONE ); - rBindings.Invalidate( SID_ULINE_VAL_SINGLE ); - rBindings.Invalidate( SID_ULINE_VAL_DOUBLE ); - rBindings.Invalidate( SID_ULINE_VAL_DOTTED ); + rBindings.Invalidate( SID_ATTR_CHAR_FONT ); + rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); + rBindings.Invalidate( SID_ATTR_CHAR_COLOR ); - rBindings.Invalidate( SID_HYPERLINK_GETLINK ); + rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT ); + rBindings.Invalidate( SID_ATTR_CHAR_POSTURE ); + rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE ); + rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE ); + rBindings.Invalidate( SID_ULINE_VAL_NONE ); + rBindings.Invalidate( SID_ULINE_VAL_SINGLE ); + rBindings.Invalidate( SID_ULINE_VAL_DOUBLE ); + rBindings.Invalidate( SID_ULINE_VAL_DOTTED ); - rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); - rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); - rBindings.Invalidate( SID_SET_SUB_SCRIPT ); - rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); - rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); + rBindings.Invalidate( SID_HYPERLINK_GETLINK ); - rBindings.Invalidate( SID_SAVEDOC ); - rBindings.Invalidate( SID_DOC_MODIFIED ); - } + rBindings.Invalidate( SID_ATTR_CHAR_KERNING ); + rBindings.Invalidate( SID_SET_SUPER_SCRIPT ); + rBindings.Invalidate( SID_SET_SUB_SCRIPT ); + rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT ); + rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED ); + + rBindings.Invalidate( SID_SAVEDOC ); + rBindings.Invalidate( SID_DOC_MODIFIED ); } // --------------- public methods -------------------------------------------- @@ -4146,33 +4146,33 @@ void ScInputHandler::ResetDelayTimer() IMPL_LINK_NOARG( ScInputHandler, DelayTimer, Timer*, void ) { - if ( nullptr == pLastState || SC_MOD()->IsFormulaMode() || SC_MOD()->IsRefDialogOpen()) + if ( !(nullptr == pLastState || SC_MOD()->IsFormulaMode() || SC_MOD()->IsRefDialogOpen())) + return; + + //! New method at ScModule to query if function autopilot is open + SfxViewFrame* pViewFrm = SfxViewFrame::Current(); + if ( pViewFrm && pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) ) { - //! New method at ScModule to query if function autopilot is open - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - if ( pViewFrm && pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) ) + if ( pInputWin) { - if ( pInputWin) - { - pInputWin->EnableButtons( false ); - pInputWin->Disable(); - } + pInputWin->EnableButtons( false ); + pInputWin->Disable(); } - else if ( !bFormulaMode ) // Keep formula e.g. for help - { - bInOwnChange = true; // disable ModifyHdl (reset below) - - pActiveViewSh = nullptr; - mpEditEngine->SetTextCurrentDefaults( EMPTY_OUSTRING ); - if ( pInputWin ) - { - pInputWin->SetPosString( EMPTY_OUSTRING ); - pInputWin->SetTextString( EMPTY_OUSTRING ); - pInputWin->Disable(); - } + } + else if ( !bFormulaMode ) // Keep formula e.g. for help + { + bInOwnChange = true; // disable ModifyHdl (reset below) - bInOwnChange = false; + pActiveViewSh = nullptr; + mpEditEngine->SetTextCurrentDefaults( EMPTY_OUSTRING ); + if ( pInputWin ) + { + pInputWin->SetPosString( EMPTY_OUSTRING ); + pInputWin->SetTextString( EMPTY_OUSTRING ); + pInputWin->Disable(); } + + bInOwnChange = false; } } diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index c67c8963327e..a867220207f4 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -527,19 +527,19 @@ void ScInputWindow::NotifyLOKClient() if (comphelper::LibreOfficeKit::isActive() && !GetLOKNotifier() && mpViewShell) SetLOKNotifier(mpViewShell); - if (const vcl::ILibreOfficeKitNotifier* pNotifier = GetLOKNotifier()) - { - Size aSize = GetSizePixel(); - if (!aSize.IsEmpty()) - { - std::vector<vcl::LOKPayloadItem> aItems; - aItems.emplace_back("type", "calc-input-win"); - aItems.emplace_back(std::make_pair("position", Point(GetOutOffXPixel(), GetOutOffYPixel()).toString())); - aItems.emplace_back(std::make_pair("size", aSize.toString())); - aItems.emplace_back("lines", OString::number(aTextWindow.GetNumLines())); - pNotifier->notifyWindow(GetLOKWindowId(), "created", aItems); - } + const vcl::ILibreOfficeKitNotifier* pNotifier = GetLOKNotifier(); + if (!pNotifier) + return; + Size aSize = GetSizePixel(); + if (!aSize.IsEmpty()) + { + std::vector<vcl::LOKPayloadItem> aItems; + aItems.emplace_back("type", "calc-input-win"); + aItems.emplace_back(std::make_pair("position", Point(GetOutOffXPixel(), GetOutOffYPixel()).toString())); + aItems.emplace_back(std::make_pair("size", aSize.toString())); + aItems.emplace_back("lines", OString::number(aTextWindow.GetNumLines())); + pNotifier->notifyWindow(GetLOKWindowId(), "created", aItems); } } @@ -551,29 +551,29 @@ void ScInputWindow::SetFuncString( const OUString& rString, bool bDoEdit ) aTextWindow.StartEditEngine(); ScModule* pScMod = SC_MOD(); - if ( pScMod->IsEditMode() ) - { - if ( bDoEdit ) - aTextWindow.GrabFocus(); - aTextWindow.SetTextString( rString ); - EditView* pView = aTextWindow.GetEditView(); - if (pView) - { - sal_Int32 nLen = rString.getLength(); + if ( !pScMod->IsEditMode() ) + return; - if ( nLen > 0 ) - { - nLen--; - pView->SetSelection( ESelection( 0, nLen, 0, nLen ) ); - } + if ( bDoEdit ) + aTextWindow.GrabFocus(); + aTextWindow.SetTextString( rString ); + EditView* pView = aTextWindow.GetEditView(); + if (!pView) + return; - pScMod->InputChanged(pView); - if ( bDoEdit ) - SetOkCancelMode(); // Not the case if immediately followed by Enter/Cancel + sal_Int32 nLen = rString.getLength(); - pView->SetEditEngineUpdateMode(true); - } + if ( nLen > 0 ) + { + nLen--; + pView->SetSelection( ESelection( 0, nLen, 0, nLen ) ); } + + pScMod->InputChanged(pView); + if ( bDoEdit ) + SetOkCancelMode(); // Not the case if immediately followed by Enter/Cancel + + pView->SetEditEngineUpdateMode(true); } void ScInputWindow::SetPosString( const OUString& rStr ) @@ -595,20 +595,20 @@ void ScInputWindow::SetOkCancelMode() SfxViewFrame* pViewFrm = SfxViewFrame::Current(); EnableButtons( pViewFrm && !pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) ); - if (!bIsOkCancelMode) - { - EnableItem ( SID_INPUT_SUM, false ); - EnableItem ( SID_INPUT_EQUAL, false ); - HideItem ( SID_INPUT_SUM ); - HideItem ( SID_INPUT_EQUAL ); + if (bIsOkCancelMode) + return; - ShowItem ( SID_INPUT_CANCEL, true ); - ShowItem ( SID_INPUT_OK, true ); - EnableItem ( SID_INPUT_CANCEL, true ); - EnableItem ( SID_INPUT_OK, true ); + EnableItem ( SID_INPUT_SUM, false ); + EnableItem ( SID_INPUT_EQUAL, false ); + HideItem ( SID_INPUT_SUM ); + HideItem ( SID_INPUT_EQUAL ); - bIsOkCancelMode = true; - } + ShowItem ( SID_INPUT_CANCEL, true ); + ShowItem ( SID_INPUT_OK, true ); + EnableItem ( SID_INPUT_CANCEL, true ); + EnableItem ( SID_INPUT_OK, true ); + + bIsOkCancelMode = true; } void ScInputWindow::SetSumAssignMode() @@ -617,22 +617,22 @@ void ScInputWindow::SetSumAssignMode() SfxViewFrame* pViewFrm = SfxViewFrame::Current(); EnableButtons( pViewFrm && !pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) ); - if (bIsOkCancelMode) - { - EnableItem ( SID_INPUT_CANCEL, false ); - EnableItem ( SID_INPUT_OK, false ); - HideItem ( SID_INPUT_CANCEL ); - HideItem ( SID_INPUT_OK ); + if (!bIsOkCancelMode) + return; - ShowItem ( SID_INPUT_SUM, true ); - ShowItem ( SID_INPUT_EQUAL, true ); - EnableItem ( SID_INPUT_SUM, true ); - EnableItem ( SID_INPUT_EQUAL, true ); + EnableItem ( SID_INPUT_CANCEL, false ); + EnableItem ( SID_INPUT_OK, false ); + HideItem ( SID_INPUT_CANCEL ); + HideItem ( SID_INPUT_OK ); - bIsOkCancelMode = false; + ShowItem ( SID_INPUT_SUM, true ); + ShowItem ( SID_INPUT_EQUAL, true ); + EnableItem ( SID_INPUT_SUM, true ); + EnableItem ( SID_INPUT_EQUAL, true ); - SetFormulaMode(false); // No editing -> no formula - } + bIsOkCancelMode = false; + + SetFormulaMode(false); // No editing -> no formula } void ScInputWindow::SetFormulaMode( bool bSet ) @@ -824,36 +824,36 @@ void ScInputWindow::AutoSum( bool& bRangeFinder, bool& bSubTotal, OpCode eCode ) { ScModule* pScMod = SC_MOD(); ScTabViewShell* pViewSh = dynamic_cast<ScTabViewShell*>( SfxViewShell::Current() ); - if ( pViewSh ) - { - const OUString aFormula = pViewSh->DoAutoSum(bRangeFinder, bSubTotal, eCode); - if ( !aFormula.isEmpty() ) - { - SetFuncString( aFormula ); - const sal_Int32 aOpen = aFormula.indexOf('('); - const sal_Int32 aLen = aFormula.getLength(); - if (bRangeFinder && pScMod->IsEditMode()) - { - ScInputHandler* pHdl = pScMod->GetInputHdl( pViewSh ); - if ( pHdl ) - { - pHdl->InitRangeFinder( aFormula ); + if ( !pViewSh ) + return; - //! SetSelection at the InputHandler? - //! Set bSelIsRef? - if ( aOpen != -1 && aLen > aOpen ) - { - ESelection aSel( 0, aOpen + (bSubTotal ? 3 : 1), 0, aLen-1 ); - EditView* pTableView = pHdl->GetTableView(); - if ( pTableView ) - pTableView->SetSelection( aSel ); - EditView* pTopView = pHdl->GetTopView(); - if ( pTopView ) - pTopView->SetSelection( aSel ); - } - } - } - } + const OUString aFormula = pViewSh->DoAutoSum(bRangeFinder, bSubTotal, eCode); + if ( aFormula.isEmpty() ) + return; + + SetFuncString( aFormula ); + const sal_Int32 aOpen = aFormula.indexOf('('); + const sal_Int32 aLen = aFormula.getLength(); + if (!(bRangeFinder && pScMod->IsEditMode())) + return; + + ScInputHandler* pHdl = pScMod->GetInputHdl( pViewSh ); + if ( !pHdl ) + return; + + pHdl->InitRangeFinder( aFormula ); + + //! SetSelection at the InputHandler? + //! Set bSelIsRef? + if ( aOpen != -1 && aLen > aOpen ) + { + ESelection aSel( 0, aOpen + (bSubTotal ? 3 : 1), 0, aLen-1 ); + EditView* pTableView = pHdl->GetTableView(); + if ( pTableView ) + pTableView->SetSelection( aSel ); + EditView* pTopView = pHdl->GetTopView(); + if ( pTopView ) + pTopView->SetSelection( aSel ); } } @@ -1081,39 +1081,39 @@ void ScInputBarGroup::TriggerToolboxLayout() if ( !mnVertOffset ) mnVertOffset = rParent.GetItemPosRect( rParent.GetItemCount() - 1 ).Top(); - if ( pViewFrm ) - { - Reference< css::beans::XPropertySet > xPropSet( pViewFrm->GetFrame().GetFrameInterface(), UNO_QUERY ); - Reference< css::frame::XLayoutManager > xLayoutManager; + if ( !pViewFrm ) + return; - if ( xPropSet.is() ) - { - css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager"); - aValue >>= xLayoutManager; - } + Reference< css::beans::XPropertySet > xPropSet( pViewFrm->GetFrame().GetFrameInterface(), UNO_QUERY ); + Reference< css::frame::XLayoutManager > xLayoutManager; - if ( xLayoutManager.is() ) - { - xLayoutManager->lock(); - DataChangedEvent aFakeUpdate( DataChangedEventType::SETTINGS, nullptr, AllSettingsFlags::STYLE ); - - // this basically will trigger the repositioning of the - // items in the toolbar from ImplFormat ( which is controlled by - // mnWinHeight ) which in turn is updated in ImplCalcItem which is - // controlled by mbCalc. Additionally the ImplFormat above is - // controlled via mbFormat. It seems the easiest way to get these - // booleans set is to send in the fake event below. - rParent.DataChanged( aFakeUpdate); - - // highest item in toolbar will have been calculated via the - // event above. Call resize on InputBar to pick up the height - // change - rParent.Resize(); - - // unlock relayouts the toolbars in the 4 quadrants - xLayoutManager->unlock(); - } + if ( xPropSet.is() ) + { + css::uno::Any aValue = xPropSet->getPropertyValue("LayoutManager"); + aValue >>= xLayoutManager; } + + if ( !xLayoutManager.is() ) + return; + + xLayoutManager->lock(); + DataChangedEvent aFakeUpdate( DataChangedEventType::SETTINGS, nullptr, AllSettingsFlags::STYLE ); + + // this basically will trigger the repositioning of the + // items in the toolbar from ImplFormat ( which is controlled by + // mnWinHeight ) which in turn is updated in ImplCalcItem which is + // controlled by mbCalc. Additionally the ImplFormat above is + // controlled via mbFormat. It seems the easiest way to get these + // booleans set is to send in the fake event below. + rParent.DataChanged( aFakeUpdate); + + // highest item in toolbar will have been calculated via the + // event above. Call resize on InputBar to pick up the height + // change + rParent.Resize(); + + // unlock relayouts the toolbars in the 4 quadrants + xLayoutManager->unlock(); } void ScInputBarGroup::TextGrabFocus() @@ -2277,21 +2277,21 @@ void ScPosWnd::FillFunctions() void ScPosWnd::Notify( SfxBroadcaster&, const SfxHint& rHint ) { - if ( !bFormulaMode ) + if ( bFormulaMode ) + return; + + // Does the list of range names need updating? + if ( dynamic_cast<const SfxEventHint*>(&rHint) ) { - // Does the list of range names need updating? - if ( dynamic_cast<const SfxEventHint*>(&rHint) ) - { - SfxEventHintId nEventId = static_cast<const SfxEventHint*>(&rHint)->GetEventId(); - if ( nEventId == SfxEventHintId::ActivateDoc ) - FillRangeNames(); - } - else - { - const SfxHintId nHintId = rHint.GetId(); - if ( nHintId == SfxHintId::ScAreasChanged || nHintId == SfxHintId::ScNavigatorUpdateAll) - FillRangeNames(); - } + SfxEventHintId nEventId = static_cast<const SfxEventHint*>(&rHint)->GetEventId(); + if ( nEventId == SfxEventHintId::ActivateDoc ) + FillRangeNames(); + } + else + { + const SfxHintId nHintId = rHint.GetId(); + if ( nHintId == SfxHintId::ScAreasChanged || nHintId == SfxHintId::ScNavigatorUpdateAll) + FillRangeNames(); } } @@ -2362,53 +2362,53 @@ IMPL_LINK_NOARG(ScPosWnd, ModifyHdl, weld::ComboBox&, void) return; } - if (!bFormulaMode) - { - // determine the action that would be taken for the current input + if (bFormulaMode) + return; - ScNameInputType eType = lcl_GetInputType(m_xWidget->get_active_text()); // uses current view - const char* pStrId = nullptr; - switch ( eType ) - { - case SC_NAME_INPUT_CELL: - pStrId = STR_NAME_INPUT_CELL; - break; - case SC_NAME_INPUT_RANGE: - case SC_NAME_INPUT_NAMEDRANGE: - pStrId = STR_NAME_INPUT_RANGE; // named range or range reference - break; - case SC_NAME_INPUT_DATABASE: - pStrId = STR_NAME_INPUT_DBRANGE; - break; - case SC_NAME_INPUT_ROW: - pStrId = STR_NAME_INPUT_ROW; - break; - case SC_NAME_INPUT_SHEET: - pStrId = STR_NAME_INPUT_SHEET; - break; - case SC_NAME_INPUT_DEFINE: - pStrId = STR_NAME_INPUT_DEFINE; - break; - default: - // other cases (error): no tip help - break; - } + // determine the action that would be taken for the current input - if (pStrId) - { - // show the help tip at the text cursor position - Point aPos; - vcl::Cursor* pCur = GetCursor(); - if (pCur) - aPos = LogicToPixel( pCur->GetPos() ); - aPos = OutputToScreenPixel( aPos ); - tools::Rectangle aRect( aPos, aPos ); - - OUString aText = ScResId(pStrId); - QuickHelpFlags const nAlign = QuickHelpFlags::Left|QuickHelpFlags::Bottom; - nTipVisible = Help::ShowPopover(this, aRect, aText, nAlign); - } + ScNameInputType eType = lcl_GetInputType(m_xWidget->get_active_text()); // uses current view + const char* pStrId = nullptr; + switch ( eType ) + { + case SC_NAME_INPUT_CELL: + pStrId = STR_NAME_INPUT_CELL; + break; + case SC_NAME_INPUT_RANGE: + case SC_NAME_INPUT_NAMEDRANGE: + pStrId = STR_NAME_INPUT_RANGE; // named range or range reference + break; + case SC_NAME_INPUT_DATABASE: + pStrId = STR_NAME_INPUT_DBRANGE; + break; + case SC_NAME_INPUT_ROW: + pStrId = STR_NAME_INPUT_ROW; + break; + case SC_NAME_INPUT_SHEET: + pStrId = STR_NAME_INPUT_SHEET; + break; + case SC_NAME_INPUT_DEFINE: + pStrId = STR_NAME_INPUT_DEFINE; + break; + default: + // other cases (error): no tip help + break; } + + if (!pStrId) + return; + + // show the help tip at the text cursor position + Point aPos; + vcl::Cursor* pCur = GetCursor(); + if (pCur) + aPos = LogicToPixel( pCur->GetPos() ); + aPos = OutputToScreenPixel( aPos ); + tools::Rectangle aRect( aPos, aPos ); + + OUString aText = ScResId(pStrId); + QuickHelpFlags const nAlign = QuickHelpFlags::Left|QuickHelpFlags::Bottom; + nTipVisible = Help::ShowPopover(this, aRect, aText, nAlign); } void ScPosWnd::DoEnter() diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index db559c4ce4a9..8c9bf33d3056 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -686,34 +686,34 @@ const ScDocOptions& ScModule::GetDocOptions() void ScModule::InsertEntryToLRUList(sal_uInt16 nFIndex) { - if(nFIndex != 0) - { - const ScAppOptions& rAppOpt = GetAppOptions(); - sal_uInt16 nLRUFuncCount = std::min( rAppOpt.GetLRUFuncListCount(), sal_uInt16(LRU_MAX) ); - sal_uInt16* pLRUListIds = rAppOpt.GetLRUFuncList(); + if(nFIndex == 0) + return; - sal_uInt16 aIdxList[LRU_MAX]; - sal_uInt16 n = 0; - bool bFound = false; + const ScAppOptions& rAppOpt = GetAppOptions(); + sal_uInt16 nLRUFuncCount = std::min( rAppOpt.GetLRUFuncListCount(), sal_uInt16(LRU_MAX) ); + sal_uInt16* pLRUListIds = rAppOpt.GetLRUFuncList(); - while ((n < LRU_MAX) && n<nLRUFuncCount) // Iterate through old list - { - if (!bFound && (pLRUListIds[n]== nFIndex)) - bFound = true; // First hit! - else if (bFound) - aIdxList[n ] = pLRUListIds[n]; // Copy after hit - else if ((n+1) < LRU_MAX) - aIdxList[n+1] = pLRUListIds[n]; // Move before hit - n++; - } - if (!bFound && (n < LRU_MAX)) // Entry not found? - n++; // One more - aIdxList[0] = nFIndex; // Current on Top + sal_uInt16 aIdxList[LRU_MAX]; + sal_uInt16 n = 0; + bool bFound = false; - ScAppOptions aNewOpts(rAppOpt); // Let App know - aNewOpts.SetLRUFuncList(aIdxList, n); - SetAppOptions(aNewOpts); + while ((n < LRU_MAX) && n<nLRUFuncCount) // Iterate through old list + { + if (!bFound && (pLRUListIds[n]== nFIndex)) + bFound = true; // First hit! + else if (bFound) + aIdxList[n ] = pLRUListIds[n]; // Copy after hit + else if ((n+1) < LRU_MAX) + aIdxList[n+1] = pLRUListIds[n]; // Move before hit + n++; } + if (!bFound && (n < LRU_MAX)) // Entry not found? + n++; // One more + aIdxList[0] = nFIndex; // Current on Top + + ScAppOptions aNewOpts(rAppOpt); // Let App know + aNewOpts.SetLRUFuncList(aIdxList, n); + SetAppOptions(aNewOpts); } void ScModule::SetAppOptions( const ScAppOptions& rOpt ) @@ -1255,45 +1255,45 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet ) } // update ref device (for all documents) - if ( bUpdateRefDev ) + if ( !bUpdateRefDev ) + return; + + // for all documents: recalc output factor, update row heights + SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); + while ( pObjSh ) { - // for all documents: recalc output factor, update row heights - SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); - while ( pObjSh ) + if ( dynamic_cast<const ScDocShell *>(pObjSh) != nullptr ) { - if ( dynamic_cast<const ScDocShell *>(pObjSh) != nullptr ) - { - ScDocShell* pOneDocSh = static_cast<ScDocShell*>(pObjSh); - pOneDocSh->CalcOutputFactor(); - SCTAB nTabCount = pOneDocSh->GetDocument().GetTableCount(); - for (SCTAB nTab=0; nTab<nTabCount; nTab++) - pOneDocSh->AdjustRowHeight( 0, pDocSh->GetDocument().MaxRow(), nTab ); - } - pObjSh = SfxObjectShell::GetNext( *pObjSh ); + ScDocShell* pOneDocSh = static_cast<ScDocShell*>(pObjSh); + pOneDocSh->CalcOutputFactor(); + SCTAB nTabCount = pOneDocSh->GetDocument().GetTableCount(); + for (SCTAB nTab=0; nTab<nTabCount; nTab++) + pOneDocSh->AdjustRowHeight( 0, pDocSh->GetDocument().MaxRow(), nTab ); } + pObjSh = SfxObjectShell::GetNext( *pObjSh ); + } - // for all (tab-) views: - SfxViewShell* pSh = SfxViewShell::GetFirst( true, checkSfxViewShell<ScTabViewShell> ); - while ( pSh ) - { - ScTabViewShell* pOneViewSh = static_cast<ScTabViewShell*>(pSh); + // for all (tab-) views: + SfxViewShell* pSh = SfxViewShell::GetFirst( true, checkSfxViewShell<ScTabViewShell> ); + while ( pSh ) + { + ScTabViewShell* pOneViewSh = static_cast<ScTabViewShell*>(pSh); - // set ref-device for EditEngine - ScInputHandler* pHdl = GetInputHdl(pOneViewSh); - if (pHdl) - pHdl->UpdateRefDevice(); + // set ref-device for EditEngine + ScInputHandler* pHdl = GetInputHdl(pOneViewSh); + if (pHdl) + pHdl->UpdateRefDevice(); - // update view scale - ScViewData& rViewData = pOneViewSh->GetViewData(); - pOneViewSh->SetZoom( rViewData.GetZoomX(), rViewData.GetZoomY(), false ); + // update view scale + ScViewData& rViewData = pOneViewSh->GetViewData(); + pOneViewSh->SetZoom( rViewData.GetZoomX(), rViewData.GetZoomY(), false ); - // repaint - pOneViewSh->PaintGrid(); - pOneViewSh->PaintTop(); - pOneViewSh->PaintLeft(); + // repaint + pOneViewSh->PaintGrid(); + pOneViewSh->PaintTop(); + pOneViewSh->PaintLeft(); - pSh = SfxViewShell::GetNext( *pSh, true, checkSfxViewShell<ScTabViewShell> ); - } + pSh = SfxViewShell::GetNext( *pSh, true, checkSfxViewShell<ScTabViewShell> ); } } @@ -1430,34 +1430,34 @@ void ScModule::InputTurnOffWinEngine() void ScModule::ActivateInputWindow( const OUString* pStrFormula, bool bMatrix ) { ScInputHandler* pHdl = GetInputHdl(); - if ( pHdl ) + if ( !pHdl ) + return; + + ScInputWindow* pWin = pHdl->GetInputWindow(); + if ( pStrFormula ) { - ScInputWindow* pWin = pHdl->GetInputWindow(); - if ( pStrFormula ) + // Take over formula + if ( pWin ) { - // Take over formula - if ( pWin ) - { - pWin->SetFuncString( *pStrFormula, false ); - // SetSumAssignMode due to sal_False not necessary - } - ScEnterMode nMode = bMatrix ? ScEnterMode::MATRIX : ScEnterMode::NORMAL; - pHdl->EnterHandler( nMode ); - - // Without Invalidate the selection remains active, if the formula has not changed - if (pWin) - pWin->TextInvalidate(); + pWin->SetFuncString( *pStrFormula, false ); + // SetSumAssignMode due to sal_False not necessary } - else + ScEnterMode nMode = bMatrix ? ScEnterMode::MATRIX : ScEnterMode::NORMAL; + pHdl->EnterHandler( nMode ); + + // Without Invalidate the selection remains active, if the formula has not changed + if (pWin) + pWin->TextInvalidate(); + } + else + { + // Cancel + if ( pWin ) { - // Cancel - if ( pWin ) - { - pWin->SetFuncString( EMPTY_OUSTRING, false ); - // SetSumAssignMode due to sal_False no necessary - } - pHdl->CancelHandler(); + pWin->SetFuncString( EMPTY_OUSTRING, false ); + // SetSumAssignMode due to sal_False no necessary } + pHdl->CancelHandler(); } } @@ -1468,47 +1468,47 @@ void ScModule::SetRefDialog( sal_uInt16 nId, bool bVis, SfxViewFrame* pViewFrm ) { //TODO: Move reference dialog handling to view // Just keep function autopilot here for references to other documents - if ( m_nCurRefDlgId == 0 || ( nId == m_nCurRefDlgId && !bVis ) - || ( comphelper::LibreOfficeKit::isActive() ) ) - { - if ( !pViewFrm ) - pViewFrm = SfxViewFrame::Current(); + if ( !(m_nCurRefDlgId == 0 || ( nId == m_nCurRefDlgId && !bVis ) + || ( comphelper::LibreOfficeKit::isActive() )) ) + return; - // bindings update causes problems with update of stylist if - // current style family has changed - //if ( pViewFrm ) - // pViewFrm->GetBindings().Update(); // to avoid trouble in LockDispatcher + if ( !pViewFrm ) + pViewFrm = SfxViewFrame::Current(); - // before SetChildWindow - if ( comphelper::LibreOfficeKit::isActive() ) - { - if ( bVis ) - m_nCurRefDlgId = nId; - } - else - { - m_nCurRefDlgId = bVis ? nId : 0; - } + // bindings update causes problems with update of stylist if + // current style family has changed + //if ( pViewFrm ) + // pViewFrm->GetBindings().Update(); // to avoid trouble in LockDispatcher - if ( pViewFrm ) - { - // store the dialog id also in the view shell - SfxViewShell* pViewSh = pViewFrm->GetViewShell(); - if (ScTabViewShell* pTabViewSh = dynamic_cast<ScTabViewShell*>(pViewSh)) - pTabViewSh->SetCurRefDlgId(m_nCurRefDlgId); - else - { - // no ScTabViewShell - possible for example from a Basic macro - bVis = false; - m_nCurRefDlgId = 0; // don't set nCurRefDlgId if no dialog is created - } + // before SetChildWindow + if ( comphelper::LibreOfficeKit::isActive() ) + { + if ( bVis ) + m_nCurRefDlgId = nId; + } + else + { + m_nCurRefDlgId = bVis ? nId : 0; + } - pViewFrm->SetChildWindow( nId, bVis ); + if ( pViewFrm ) + { + // store the dialog id also in the view shell + SfxViewShell* pViewSh = pViewFrm->GetViewShell(); + if (ScTabViewShell* pTabViewSh = dynamic_cast<ScTabViewShell*>(pViewSh)) + pTabViewSh->SetCurRefDlgId(m_nCurRefDlgId); + else + { + // no ScTabViewShell - possible for example from a Basic macro + bVis = false; + m_nCurRefDlgId = 0; // don't set nCurRefDlgId if no dialog is created } - SfxApplication* pSfxApp = SfxGetpApp(); - pSfxApp->Broadcast( SfxHint( SfxHintId::ScRefModeChanged ) ); + pViewFrm->SetChildWindow( nId, bVis ); } + + SfxApplication* pSfxApp = SfxGetpApp(); + pSfxApp->Broadcast( SfxHint( SfxHintId::ScRefModeChanged ) ); } static SfxChildWindow* lcl_GetChildWinFromCurrentView( sal_uInt16 nId ) @@ -1756,26 +1756,26 @@ void ScModule::EndReference() // We also annul the ZoomIn again in RefDialogs //FIXME: ShowRefFrame at InputHdl, if the Function AutoPilot is open? - if ( m_nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = nullptr; + if ( !m_nCurRefDlgId ) + return; - if ( comphelper::LibreOfficeKit::isActive() ) - pChildWnd = lcl_GetChildWinFromCurrentView( m_nCurRefDlgId ); - else - pChildWnd = lcl_GetChildWinFromAnyView( m_nCurRefDlgId ); + SfxChildWindow* pChildWnd = nullptr; - OSL_ENSURE( pChildWnd, "NoChildWin" ); - if ( pChildWnd ) + if ( comphelper::LibreOfficeKit::isActive() ) + pChildWnd = lcl_GetChildWinFromCurrentView( m_nCurRefDlgId ); + else + pChildWnd = lcl_GetChildWinFromAnyView( m_nCurRefDlgId ); + + OSL_ENSURE( pChildWnd, "NoChildWin" ); + if ( pChildWnd ) + { + if (pChildWnd->GetController()) { - if (pChildWnd->GetController()) + IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetController().get()); + assert(pRefDlg); + if(pRefDlg) { - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetController().get()); - assert(pRefDlg); - if(pRefDlg) - { - pRefDlg->SetActive(); - } + pRefDlg->SetActive(); } } } diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx index fd75eeac6486..ddb7ce5b670f 100644 --- a/sc/source/ui/app/transobj.cxx +++ b/sc/source/ui/app/transobj.cxx @@ -663,153 +663,153 @@ ScMarkData ScTransferObj::GetSourceMarkData() const void ScTransferObj::InitDocShell(bool bLimitToPageSize) { - if ( !m_aDocShellRef.is() ) - { - ScDocShell* pDocSh = new ScDocShell; - m_aDocShellRef = pDocSh; // ref must be there before InitNew + if ( m_aDocShellRef.is() ) + return; - pDocSh->DoInitNew(); + ScDocShell* pDocSh = new ScDocShell; + m_aDocShellRef = pDocSh; // ref must be there before InitNew - ScDocument& rDestDoc = pDocSh->GetDocument(); - ScMarkData aDestMark(rDestDoc.GetSheetLimits()); - aDestMark.SelectTable( 0, true ); + pDocSh->DoInitNew(); - rDestDoc.SetDocOptions( m_pDoc->GetDocOptions() ); // #i42666# + ScDocument& rDestDoc = pDocSh->GetDocument(); + ScMarkData aDestMark(rDestDoc.GetSheetLimits()); + aDestMark.SelectTable( 0, true ); - OUString aTabName; - m_pDoc->GetName( m_aBlock.aStart.Tab(), aTabName ); - rDestDoc.RenameTab( 0, aTabName ); + rDestDoc.SetDocOptions( m_pDoc->GetDocOptions() ); // #i42666# - rDestDoc.CopyStdStylesFrom( m_pDoc.get() ); + OUString aTabName; + m_pDoc->GetName( m_aBlock.aStart.Tab(), aTabName ); + rDestDoc.RenameTab( 0, aTabName ); - SCCOL nStartX = m_aBlock.aStart.Col(); - SCROW nStartY = m_aBlock.aStart.Row(); - SCCOL nEndX = m_aBlock.aEnd.Col(); - SCROW nEndY = m_aBlock.aEnd.Row(); + rDestDoc.CopyStdStylesFrom( m_pDoc.get() ); - // widths / heights - // (must be copied before CopyFromClip, for drawing objects) + SCCOL nStartX = m_aBlock.aStart.Col(); + SCROW nStartY = m_aBlock.aStart.Row(); + SCCOL nEndX = m_aBlock.aEnd.Col(); + SCROW nEndY = m_aBlock.aEnd.Row(); - SCCOL nCol; - SCTAB nSrcTab = m_aBlock.aStart.Tab(); - rDestDoc.SetLayoutRTL(0, m_pDoc->IsLayoutRTL(nSrcTab)); - for (nCol=nStartX; nCol<=nEndX; nCol++) - if ( m_pDoc->ColHidden(nCol, nSrcTab) ) - rDestDoc.ShowCol( nCol, 0, false ); - else - rDestDoc.SetColWidth( nCol, 0, m_pDoc->GetColWidth( nCol, nSrcTab ) ); + // widths / heights + // (must be copied before CopyFromClip, for drawing objects) - if (nStartY > 0) - { - // Set manual height for all previous rows so we can ensure - // that visible area will not change due to autoheight - rDestDoc.SetManualHeight(0, nStartY - 1, 0, true); - } - for (SCROW nRow = nStartY; nRow <= nEndY; ++nRow) + SCCOL nCol; + SCTAB nSrcTab = m_aBlock.aStart.Tab(); + rDestDoc.SetLayoutRTL(0, m_pDoc->IsLayoutRTL(nSrcTab)); + for (nCol=nStartX; nCol<=nEndX; nCol++) + if ( m_pDoc->ColHidden(nCol, nSrcTab) ) + rDestDoc.ShowCol( nCol, 0, false ); + else + rDestDoc.SetColWidth( nCol, 0, m_pDoc->GetColWidth( nCol, nSrcTab ) ); + + if (nStartY > 0) + { + // Set manual height for all previous rows so we can ensure + // that visible area will not change due to autoheight + rDestDoc.SetManualHeight(0, nStartY - 1, 0, true); + } + for (SCROW nRow = nStartY; nRow <= nEndY; ++nRow) + { + if ( m_pDoc->RowHidden(nRow, nSrcTab) ) + rDestDoc.ShowRow( nRow, 0, false ); + else { - if ( m_pDoc->RowHidden(nRow, nSrcTab) ) - rDestDoc.ShowRow( nRow, 0, false ); - else - { - rDestDoc.SetRowHeight( nRow, 0, m_pDoc->GetOriginalHeight( nRow, nSrcTab ) ); + rDestDoc.SetRowHeight( nRow, 0, m_pDoc->GetOriginalHeight( nRow, nSrcTab ) ); - // if height was set manually, that flag has to be copied, too - bool bManual = m_pDoc->IsManualRowHeight(nRow, nSrcTab); - rDestDoc.SetManualHeight(nRow, nRow, 0, bManual); - } + // if height was set manually, that flag has to be copied, too + bool bManual = m_pDoc->IsManualRowHeight(nRow, nSrcTab); + rDestDoc.SetManualHeight(nRow, nRow, 0, bManual); } + } - if (m_pDoc->GetDrawLayer() || m_pDoc->HasNotes()) - pDocSh->MakeDrawLayer(); + if (m_pDoc->GetDrawLayer() || m_pDoc->HasNotes()) + pDocSh->MakeDrawLayer(); - // cell range is copied to the original position, but on the first sheet - // -> bCutMode must be set - // pDoc is always a Clipboard-document + // cell range is copied to the original position, but on the first sheet + // -> bCutMode must be set + // pDoc is always a Clipboard-document - ScRange aDestRange( nStartX,nStartY,0, nEndX,nEndY,0 ); - bool bWasCut = m_pDoc->IsCutMode(); - if (!bWasCut) - m_pDoc->SetClipArea( aDestRange, true ); // Cut - rDestDoc.CopyFromClip( aDestRange, aDestMark, InsertDeleteFlags::ALL, nullptr, m_pDoc.get(), false ); - m_pDoc->SetClipArea( aDestRange, bWasCut ); + ScRange aDestRange( nStartX,nStartY,0, nEndX,nEndY,0 ); + bool bWasCut = m_pDoc->IsCutMode(); + if (!bWasCut) + m_pDoc->SetClipArea( aDestRange, true ); // Cut + rDestDoc.CopyFromClip( aDestRange, aDestMark, InsertDeleteFlags::ALL, nullptr, m_pDoc.get(), false ); + m_pDoc->SetClipArea( aDestRange, bWasCut ); - StripRefs( m_pDoc.get(), nStartX,nStartY, nEndX,nEndY, &rDestDoc ); + StripRefs( m_pDoc.get(), nStartX,nStartY, nEndX,nEndY, &rDestDoc ); - ScRange aMergeRange = aDestRange; - rDestDoc.ExtendMerge( aMergeRange, true ); + ScRange aMergeRange = aDestRange; + rDestDoc.ExtendMerge( aMergeRange, true ); - m_pDoc->CopyDdeLinks( &rDestDoc ); // copy values of DDE Links + m_pDoc->CopyDdeLinks( &rDestDoc ); // copy values of DDE Links - // page format (grid etc) and page size (maximum size for ole object) + // page format (grid etc) and page size (maximum size for ole object) - Size aPaperSize = SvxPaperInfo::GetPaperSize( PAPER_A4 ); // Twips - ScStyleSheetPool* pStylePool = m_pDoc->GetStyleSheetPool(); - OUString aStyleName = m_pDoc->GetPageStyle( m_aBlock.aStart.Tab() ); - SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName, SfxStyleFamily::Page ); - if (pStyleSheet) - { - const SfxItemSet& rSourceSet = pStyleSheet->GetItemSet(); - aPaperSize = rSourceSet.Get(ATTR_PAGE_SIZE).GetSize(); + Size aPaperSize = SvxPaperInfo::GetPaperSize( PAPER_A4 ); // Twips + ScStyleSheetPool* pStylePool = m_pDoc->GetStyleSheetPool(); + OUString aStyleName = m_pDoc->GetPageStyle( m_aBlock.aStart.Tab() ); + SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName, SfxStyleFamily::Page ); + if (pStyleSheet) + { + const SfxItemSet& rSourceSet = pStyleSheet->GetItemSet(); + aPaperSize = rSourceSet.Get(ATTR_PAGE_SIZE).GetSize(); - // CopyStyleFrom copies SetItems with correct pool - ScStyleSheetPool* pDestPool = rDestDoc.GetStyleSheetPool(); - pDestPool->CopyStyleFrom( pStylePool, aStyleName, SfxStyleFamily::Page ); - } + // CopyStyleFrom copies SetItems with correct pool + ScStyleSheetPool* pDestPool = rDestDoc.GetStyleSheetPool(); + pDestPool->CopyStyleFrom( pStylePool, aStyleName, SfxStyleFamily::Page ); + } - ScViewData aViewData( pDocSh, nullptr ); - aViewData.SetScreen( nStartX,nStartY, nEndX,nEndY ); - aViewData.SetCurX( nStartX ); - aViewData.SetCurY( nStartY ); + ScViewData aViewData( pDocSh, nullptr ); + aViewData.SetScreen( nStartX,nStartY, nEndX,nEndY ); + aViewData.SetCurX( nStartX ); + aViewData.SetCurY( nStartY ); - rDestDoc.SetViewOptions( m_pDoc->GetViewOptions() ); + rDestDoc.SetViewOptions( m_pDoc->GetViewOptions() ); - // Size - //! get while copying sizes + // Size + //! get while copying sizes - long nPosX = 0; - long nPosY = 0; + long nPosX = 0; + long nPosY = 0; - for (nCol=0; nCol<nStartX; nCol++) - nPosX += rDestDoc.GetColWidth( nCol, 0 ); - nPosY += rDestDoc.GetRowHeight( 0, nStartY-1, 0 ); - nPosX = static_cast<long>( nPosX * HMM_PER_TWIPS ); - nPosY = static_cast<long>( nPosY * HMM_PER_TWIPS ); + for (nCol=0; nCol<nStartX; nCol++) + nPosX += rDestDoc.GetColWidth( nCol, 0 ); + nPosY += rDestDoc.GetRowHeight( 0, nStartY-1, 0 ); + nPosX = static_cast<long>( nPosX * HMM_PER_TWIPS ); + nPosY = static_cast<long>( nPosY * HMM_PER_TWIPS ); - aPaperSize.setWidth( aPaperSize.Width() * 2 ); // limit OLE object to double of page size - aPaperSize.setHeight( aPaperSize.Height() * 2 ); + aPaperSize.setWidth( aPaperSize.Width() * 2 ); // limit OLE object to double of page size + aPaperSize.setHeight( aPaperSize.Height() * 2 ); - long nSizeX = 0; - long nSizeY = 0; - for (nCol=nStartX; nCol<=nEndX; nCol++) - { - long nAdd = rDestDoc.GetColWidth( nCol, 0 ); - if ( bLimitToPageSize && nSizeX+nAdd > aPaperSize.Width() && nSizeX ) // above limit? - break; - nSizeX += nAdd; - } - for (SCROW nRow=nStartY; nRow<=nEndY; nRow++) - { - long nAdd = rDestDoc.GetRowHeight( nRow, 0 ); - if ( bLimitToPageSize && nSizeY+nAdd > aPaperSize.Height() && nSizeY ) // above limit? - break; - nSizeY += nAdd; - } - nSizeX = static_cast<long>( nSizeX * HMM_PER_TWIPS ); - nSizeY = static_cast<long>( nSizeY * HMM_PER_TWIPS ); + long nSizeX = 0; + long nSizeY = 0; + for (nCol=nStartX; nCol<=nEndX; nCol++) + { + long nAdd = rDestDoc.GetColWidth( nCol, 0 ); + if ( bLimitToPageSize && nSizeX+nAdd > aPaperSize.Width() && nSizeX ) // above limit? + break; + nSizeX += nAdd; + } + for (SCROW nRow=nStartY; nRow<=nEndY; nRow++) + { + long nAdd = rDestDoc.GetRowHeight( nRow, 0 ); + if ( bLimitToPageSize && nSizeY+nAdd > aPaperSize.Height() && nSizeY ) // above limit? + break; + nSizeY += nAdd; + } + nSizeX = static_cast<long>( nSizeX * HMM_PER_TWIPS ); + nSizeY = static_cast<long>( nSizeY * HMM_PER_TWIPS ); // pDocSh->SetVisAreaSize( Size(nSizeX,nSizeY) ); - tools::Rectangle aNewArea( Point(nPosX,nPosY), Size(nSizeX,nSizeY) ); - //TODO/LATER: why twice?! - //pDocSh->SvInPlaceObject::SetVisArea( aNewArea ); - pDocSh->SetVisArea( aNewArea ); + tools::Rectangle aNewArea( Point(nPosX,nPosY), Size(nSizeX,nSizeY) ); + //TODO/LATER: why twice?! + //pDocSh->SvInPlaceObject::SetVisArea( aNewArea ); + pDocSh->SetVisArea( aNewArea ); - pDocSh->UpdateOle(&aViewData, true); + pDocSh->UpdateOle(&aViewData, true); - //! SetDocumentModified? - if ( rDestDoc.IsChartListenerCollectionNeedsUpdate() ) - rDestDoc.UpdateChartListenerCollection(); - } + //! SetDocumentModified? + if ( rDestDoc.IsChartListenerCollectionNeedsUpdate() ) + rDestDoc.UpdateChartListenerCollection(); } SfxObjectShell* ScTransferObj::SetDrawClipDoc( bool bAnyOle ) diff --git a/sc/source/ui/cctrl/cbnumberformat.cxx b/sc/source/ui/cctrl/cbnumberformat.cxx index 9407b08e491c..05d7281ab96d 100644 --- a/sc/source/ui/cctrl/cbnumberformat.cxx +++ b/sc/source/ui/cctrl/cbnumberformat.cxx @@ -68,18 +68,18 @@ void ScNumberFormat::GetFocus() IMPL_STATIC_LINK(ScNumberFormat, NumFormatSelectHdl, weld::ComboBox&, rBox, void) { auto* pCurSh = SfxViewFrame::Current(); - if (pCurSh) + if (!pCurSh) + return; + + SfxDispatcher* pDisp = pCurSh->GetBindings().GetDispatcher(); + if (pDisp) { - SfxDispatcher* pDisp = pCurSh->GetBindings().GetDispatcher(); - if (pDisp) - { - const sal_Int32 nVal = rBox.get_active(); - SfxUInt16Item aItem(SID_NUMBER_TYPE_FORMAT, nVal); - pDisp->ExecuteList(SID_NUMBER_TYPE_FORMAT, - SfxCallMode::RECORD, {&aItem}); + const sal_Int32 nVal = rBox.get_active(); + SfxUInt16Item aItem(SID_NUMBER_TYPE_FORMAT, nVal); + pDisp->ExecuteList(SID_NUMBER_TYPE_FORMAT, + SfxCallMode::RECORD, {&aItem}); - pCurSh->GetWindow().GrabFocus(); - } + pCurSh->GetWindow().GrabFocus(); } } diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index 123cc1824bdf..a369aff364e5 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -332,22 +332,22 @@ void ScCheckListMenuControl::selectMenuItem(size_t nPos, bool bSubMenuTimer) } - if (nPos != MENU_NOT_SELECTED) - { - ScCheckListMenuWindow* pParentMenu = mxFrame->GetParentMenu(); - if (pParentMenu) - pParentMenu->get_widget().setSubMenuFocused(this); + if (nPos == MENU_NOT_SELECTED) + return; - if (bSubMenuTimer) + ScCheckListMenuWindow* pParentMenu = mxFrame->GetParentMenu(); + if (pParentMenu) + pParentMenu->get_widget().setSubMenuFocused(this); + + if (bSubMenuTimer) + { + if (maMenuItems[nPos].mxSubMenuWin) { - if (maMenuItems[nPos].mxSubMenuWin) - { - ScCheckListMenuWindow* pSubMenu = maMenuItems[nPos].mxSubMenuWin.get(); - queueLaunchSubMenu(nPos, pSubMenu); - } - else - queueCloseSubMenu(); + ScCheckListMenuWindow* pSubMenu = maMenuItems[nPos].mxSubMenuWin.get(); + queueLaunchSubMenu(nPos, pSubMenu); } + else + queueCloseSubMenu(); } } @@ -932,35 +932,35 @@ std::unique_ptr<weld::TreeIter> ScCheckListMenuControl::FindEntry(const weld::Tr void ScCheckListMenuControl::GetRecursiveChecked(const weld::TreeIter* pEntry, std::unordered_set<OUString>& vOut, OUString& rLabel) { - if (mxChecks->get_toggle(*pEntry) == TRISTATE_TRUE) - { - // We have to hash parents and children together. - // Per convention for easy access in getResult() - // "child;parent;grandparent" while descending. - if (rLabel.isEmpty()) - rLabel = mxChecks->get_text(*pEntry, 0); - else - rLabel = mxChecks->get_text(*pEntry, 0) + ";" + rLabel; + if (mxChecks->get_toggle(*pEntry) != TRISTATE_TRUE) + return; - // Prerequisite: the selection mechanism guarantees that if a child is - // selected then also the parent is selected, so we only have to - // inspect the children in case the parent is selected. - if (mxChecks->iter_has_child(*pEntry)) - { - std::unique_ptr<weld::TreeIter> xChild(mxChecks->make_iterator(pEntry)); - bool bChild = mxChecks->iter_children(*xChild); - while (bChild) - { - OUString aLabel = rLabel; - GetRecursiveChecked(xChild.get(), vOut, aLabel); - if (!aLabel.isEmpty() && aLabel != rLabel) - vOut.insert(aLabel); - bChild = mxChecks->iter_next_sibling(*xChild); - } - // Let the caller not add the parent alone. - rLabel.clear(); - } + // We have to hash parents and children together. + // Per convention for easy access in getResult() + // "child;parent;grandparent" while descending. + if (rLabel.isEmpty()) + rLabel = mxChecks->get_text(*pEntry, 0); + else + rLabel = mxChecks->get_text(*pEntry, 0) + ";" + rLabel; + + // Prerequisite: the selection mechanism guarantees that if a child is + // selected then also the parent is selected, so we only have to + // inspect the children in case the parent is selected. + if (!mxChecks->iter_has_child(*pEntry)) + return; + ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
