sc/source/ui/inc/viewdata.hxx | 1 sc/source/ui/view/tabvwsh3.cxx | 53 +++++++++++++++++++++++++++++++++++------ sc/source/ui/view/tabvwsha.cxx | 15 +++++++++-- sc/source/ui/view/viewdata.cxx | 7 +++++ 4 files changed, 66 insertions(+), 10 deletions(-)
New commits: commit 69b0fe3a11990403730a51fda5475f46915c27d3 Author: Pranam Lashkari <lpra...@collabora.com> AuthorDate: Fri Aug 21 07:41:37 2020 +0530 Commit: Dennis Francis <dennis.fran...@collabora.com> CommitDate: Mon Aug 24 16:31:19 2020 +0200 lok-freezepanes: fixed freeze row and column handling Added freeze row and column buttons in online UI did not work because the case for LOK was not handled Change-Id: I44315c6bc89ae02b7a8ac4c7c493ad7e8eda439e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101127 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Dennis Francis <dennis.fran...@collabora.com> diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx index 58e8c1701d0e..da753a509653 100644 --- a/sc/source/ui/inc/viewdata.hxx +++ b/sc/source/ui/inc/viewdata.hxx @@ -656,6 +656,7 @@ public: SCCOLROW GetLOKSheetFreezeIndex(bool bIsCol) const; bool SetLOKSheetFreezeIndex(const SCCOLROW nFreezeIndex, bool bIsCol, SCTAB nForTab = -1); + bool RemoveLOKFreeze(); void DeriveLOKFreezeAllSheets(); void DeriveLOKFreezeIfNeeded(SCTAB nForTab); void OverrideWithLOKFreeze(ScSplitMode& eExHSplitMode, ScSplitMode& eExVSplitMode, diff --git a/sc/source/ui/view/tabvwsh3.cxx b/sc/source/ui/view/tabvwsh3.cxx index 2f637eeca969..0570e0b76385 100644 --- a/sc/source/ui/view/tabvwsh3.cxx +++ b/sc/source/ui/view/tabvwsh3.cxx @@ -929,15 +929,52 @@ void ScTabViewShell::Execute( SfxRequest& rReq ) case SID_WINDOW_FIX: { - ScSplitMode eHSplit = GetViewData().GetHSplitMode(); - ScSplitMode eVSplit = GetViewData().GetVSplitMode(); - if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // remove - RemoveSplit(); + if (!comphelper::LibreOfficeKit::isActive()) + { + ScSplitMode eHSplit = GetViewData().GetHSplitMode(); + ScSplitMode eVSplit = GetViewData().GetVSplitMode(); + if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // remove + RemoveSplit(); + else + FreezeSplitters( true, SC_SPLIT_METHOD_CURSOR); // create or fixate + rReq.Done(); + InvalidateSplit(); + } else - FreezeSplitters( true, SC_SPLIT_METHOD_CURSOR); // create or fixate + { + ScViewData& rViewData = GetViewData(); + SCTAB nThisTab = rViewData.GetTabNo(); + bool bChangedX, bChangedY; + if (rViewData.GetLOKSheetFreezeIndex(true) > 0 || + rViewData.GetLOKSheetFreezeIndex(false) > 0 ) // remove freeze + { + bChangedX = rViewData.RemoveLOKFreeze(); + } // create or fixate + else + { + bChangedX = rViewData.SetLOKSheetFreezeIndex(rViewData.GetCurX(), true); // Freeze column + bChangedY = rViewData.SetLOKSheetFreezeIndex(rViewData.GetCurY(), false); // Freeze row + } - rReq.Done(); - InvalidateSplit(); + rReq.Done(); + if (bChangedX || bChangedY) + { + rBindings.Invalidate( SID_WINDOW_FIX ); + rBindings.Invalidate( SID_WINDOW_FIX_COL ); + rBindings.Invalidate( SID_WINDOW_FIX_ROW ); + // Invalidate the slot for all views on the same tab of the document. + SfxLokHelper::forEachOtherView(this, [nThisTab](ScTabViewShell* pOther) { + ScViewData& rOtherViewData = pOther->GetViewData(); + if (rOtherViewData.GetTabNo() != nThisTab) + return; + + SfxBindings& rOtherBind = rOtherViewData.GetBindings(); + rOtherBind.Invalidate( SID_WINDOW_FIX ); + rOtherBind.Invalidate( SID_WINDOW_FIX_COL ); + rOtherBind.Invalidate( SID_WINDOW_FIX_ROW ); + }); + } + } } break; @@ -961,6 +998,7 @@ void ScTabViewShell::Execute( SfxRequest& rReq ) rReq.Done(); if (bChanged) { + rBindings.Invalidate( SID_WINDOW_FIX ); rBindings.Invalidate(nSlot); // Invalidate the slot for all views on the same tab of the document. SfxLokHelper::forEachOtherView(this, [nSlot, nThisTab](ScTabViewShell* pOther) { @@ -969,6 +1007,7 @@ void ScTabViewShell::Execute( SfxRequest& rReq ) return; SfxBindings& rOtherBind = rOtherViewData.GetBindings(); + rOtherBind.Invalidate( SID_WINDOW_FIX ); rOtherBind.Invalidate(nSlot); }); } diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index 538897613053..f527e539b62b 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -412,9 +412,18 @@ void ScTabViewShell::GetState( SfxItemSet& rSet ) break; case SID_WINDOW_FIX: - rSet.Put(SfxBoolItem(nWhich, - rViewData.GetHSplitMode() == SC_SPLIT_FIX || - rViewData.GetVSplitMode() == SC_SPLIT_FIX )); + if(!comphelper::LibreOfficeKit::isActive()) + { + rSet.Put(SfxBoolItem(nWhich, + rViewData.GetHSplitMode() == SC_SPLIT_FIX || + rViewData.GetVSplitMode() == SC_SPLIT_FIX )); + } + else + { + rSet.Put(SfxBoolItem(nWhich, + rViewData.GetLOKSheetFreezeIndex(true) > 0 || + rViewData.GetLOKSheetFreezeIndex(false) > 0 )); + } break; case SID_WINDOW_FIX_COL: diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index dca6a35069c2..e98378fa853f 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -4133,6 +4133,13 @@ bool ScViewData::SetLOKSheetFreezeIndex(const SCCOLROW nFreezeIndex, bool bIsCol pDoc->SetLOKFreezeRow(static_cast<SCROW>(nFreezeIndex), nForTab); } +bool ScViewData::RemoveLOKFreeze() +{ + bool colUnfreezed = SetLOKSheetFreezeIndex(0, true); + bool rowUnfreezed = SetLOKSheetFreezeIndex(0, false); + return colUnfreezed || rowUnfreezed; +} + void ScViewData::DeriveLOKFreezeAllSheets() { SCTAB nMaxTab = static_cast<SCTAB>(maTabData.size()) - 1; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits