diff options
-rw-r--r-- | sc/qa/unit/tiledrendering/tiledrendering.cxx | 7 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 21 |
3 files changed, 30 insertions, 4 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index c25dc6681170..ac7de0e77f18 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -1082,8 +1082,14 @@ void ScTiledRenderingTest::testCommentCallback() CPPUNIT_ASSERT_EQUAL(std::string("0, 255, 1274, 254"), aView2.m_aCommentCallbackResult.get<std::string>("cellPos")); // Edit a comment + // Select some random cell, we should be able to edit the cell note without + // selecting the cell + ScTabViewShell* pTabViewShell = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); + if (pTabViewShell) + pTabViewShell->SetCursor(3, 100); aArgs = comphelper::InitPropertySequence( { + {"Id", uno::makeAny(OUString("Sheet1.A2"))}, {"Text", uno::makeAny(OUString("Edited comment"))}, {"Author", uno::makeAny(OUString("LOK User2"))}, }); @@ -1103,7 +1109,6 @@ void ScTiledRenderingTest::testCommentCallback() CPPUNIT_ASSERT_EQUAL(std::string("0, 255, 1274, 254"), aView2.m_aCommentCallbackResult.get<std::string>("cellPos")); // Delete the comment - ScTabViewShell* pTabViewShell = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); if (pTabViewShell) pTabViewShell->SetCursor(4, 43); aArgs = comphelper::InitPropertySequence( diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index c82c3808e66c..0e3d1301bfc9 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -19,6 +19,7 @@ #include "scitems.hxx" +#include <comphelper/lok.hxx> #include <svl/slstitm.hxx> #include <svl/stritem.hxx> #include <svl/whiter.hxx> @@ -312,7 +313,7 @@ void ScCellShell::GetCellState( SfxItemSet& rSet ) ScDocument& rDoc = GetViewData()->GetDocShell()->GetDocument(); ScAddress aCursor( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - + bool isLOKNoTiledAnnotations = comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations(); SfxWhichIter aIter(rSet); sal_uInt16 nWhich = aIter.FirstWhich(); while ( nWhich ) @@ -371,7 +372,8 @@ void ScCellShell::GetCellState( SfxItemSet& rSet ) case SID_EDIT_POSTIT: { ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - if( rDoc.GetNote(aPos) ) + // Allow editing annotation by Id (without selecting the cell) for LOK + if( isLOKNoTiledAnnotations || rDoc.GetNote(aPos) ) { bDisable = false; } diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index a836749b3fbe..6f34b75b5f4c 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -2201,10 +2201,29 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) const SfxPoolItem* pText; if ( pReqArgs && pReqArgs->HasItem( SID_ATTR_POSTIT_TEXT, &pText) ) { + const SfxPoolItem* pCellId; + OUString aCellId; + // SID_ATTR_POSTIT_ID only argument for SID_EDIT_POSTIT + if (pReqArgs->HasItem( SID_ATTR_POSTIT_ID, &pCellId )) + aCellId = static_cast<const SvxPostItIdItem*>(pCellId)->GetValue(); + const SvxPostItTextItem* pTextItem = static_cast<const SvxPostItTextItem*>( pText ); - const SvxPostItAuthorItem* pAuthorItem = static_cast<const SvxPostItAuthorItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_AUTHOR) ); + const SvxPostItAuthorItem* pAuthorItem = static_cast<const SvxPostItAuthorItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_AUTHOR ) ); const SvxPostItDateItem* pDateItem = static_cast<const SvxPostItDateItem*>( pReqArgs->GetItem( SID_ATTR_POSTIT_DATE ) ); + if (!aCellId.isEmpty()) + { + ScAddress aParsedPos; + ScRefFlags nRes = aParsedPos.Parse(aCellId, + GetViewData()->GetDocument(), + ScAddress::Details(formula::FormulaGrammar::AddressConvention::CONV_ODF)); + if (nRes & ScRefFlags::VALID) + { + pTabViewShell->SetTabNo(aParsedPos.Tab()); + pTabViewShell->SetCursor(aParsedPos.Col(), aParsedPos.Row()); + } + } + ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); pTabViewShell->ReplaceNote( aPos, pTextItem->GetValue(), pAuthorItem ? &pAuthorItem->GetValue() : nullptr, |