Rewinding... (should have read the wiki on patch submission) HI Here is a patch to allow GoUpSel, GoDownSel, GoLeftsel,GoRightSel to receive "By" property a test file appended as well. Run Main macro to test patch I left SID_CURSORBLKDOWN_SEL SID_CURSORBLKUP_SEL SID_CURSORBLKLEFT_SEL SID_CURSORBLKRIGHT_SEL untouched because repetitions makes no sense to them AFAIK (I may have missed something, otherwise) License is LGPLV3 + MPL -- Olivier Hallot Founder and Steering Commitee Member The Document Foundation
Attachment:
teste-cell.ods
Description: application/vnd.oasis.opendocument.spreadsheet
From a3aea98f12d752478713111ccc439deaf0eb0ac9 Mon Sep 17 00:00:00 2001 From: Olivier Hallot <olivier.hallot@documentfoundation.org> Date: Fri, 29 Jul 2011 06:14:23 -0300 Subject: [PATCH] Fix the "By" property in GoDownSel and GoDownBlockSel The "By" property for cell commands Go[Down,Up,Left,Right]Sel and Go[Down,Up,Left,Right]BlockSel was hardcoded to 1 in cellsh4.cxx. This patch allows repetition of the commands by the value of the By property. --- sc/source/ui/view/cellsh4.cxx | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-) diff --git a/sc/source/ui/view/cellsh4.cxx b/sc/source/ui/view/cellsh4.cxx index c38a672..cb48842 100644 --- a/sc/source/ui/view/cellsh4.cxx +++ b/sc/source/ui/view/cellsh4.cxx @@ -219,8 +219,10 @@ void ScCellShell::ExecuteCursorSel( SfxRequest& rReq ) { sal_uInt16 nSlotId = rReq.GetSlot(); ScTabViewShell* pViewShell = GetViewData()->GetViewShell(); + const SfxItemSet* pReqArgs = rReq.GetArgs(); ScInputHandler* pInputHdl = pViewShell->GetInputHandler(); pViewShell->HideAllCursors(); + SCsCOLROW nRepeat = 1; if (pInputHdl && pInputHdl->IsInputMode()) { // the current cell is in edit mode. Commit the text before moving on. @@ -232,32 +234,38 @@ void ScCellShell::ExecuteCursorSel( SfxRequest& rReq ) if (GetViewData()->GetDocument()->IsLayoutRTL(GetViewData()->GetTabNo())) // mirror horizontal movement for right-to-left mode. nMovX = -1; - + // get repetition + if ( pReqArgs != NULL ) + { + const SfxPoolItem* pItem; + if( IS_AVAILABLE( FN_PARAM_1, &pItem ) ) + nRepeat = static_cast<SCsCOLROW>(((const SfxInt16Item*)pItem)->GetValue()); + } switch (nSlotId) { case SID_CURSORDOWN_SEL: - pViewShell->ExpandBlock(0, 1, SC_FOLLOW_LINE); + pViewShell->ExpandBlock(0, nRepeat, SC_FOLLOW_LINE); break; case SID_CURSORUP_SEL: - pViewShell->ExpandBlock(0, -1, SC_FOLLOW_LINE); + pViewShell->ExpandBlock(0, -nRepeat, SC_FOLLOW_LINE); break; case SID_CURSORRIGHT_SEL: - pViewShell->ExpandBlock(nMovX, 0, SC_FOLLOW_LINE); + pViewShell->ExpandBlock(nMovX * nRepeat, 0, SC_FOLLOW_LINE); break; case SID_CURSORLEFT_SEL: - pViewShell->ExpandBlock(-nMovX, 0, SC_FOLLOW_LINE); + pViewShell->ExpandBlock(-nMovX * nRepeat, 0, SC_FOLLOW_LINE); break; case SID_CURSORPAGEUP_SEL: - pViewShell->ExpandBlockPage(0, -1); + pViewShell->ExpandBlockPage(0, -nRepeat); break; case SID_CURSORPAGEDOWN_SEL: - pViewShell->ExpandBlockPage(0, 1); + pViewShell->ExpandBlockPage(0, nRepeat); break; case SID_CURSORPAGERIGHT_SEL: - pViewShell->ExpandBlockPage(nMovX, 0); + pViewShell->ExpandBlockPage(nMovX * nRepeat, 0); break; case SID_CURSORPAGELEFT_SEL: - pViewShell->ExpandBlockPage(-nMovX, 0); + pViewShell->ExpandBlockPage(-nMovX * nRepeat, 0); break; case SID_CURSORBLKDOWN_SEL: pViewShell->ExpandBlockArea(0, 1); @@ -266,7 +274,7 @@ void ScCellShell::ExecuteCursorSel( SfxRequest& rReq ) pViewShell->ExpandBlockArea(0, -1); break; case SID_CURSORBLKRIGHT_SEL: - pViewShell->ExpandBlockArea(nMovX, 0); + pViewShell->ExpandBlockArea(nMovX , 0); break; case SID_CURSORBLKLEFT_SEL: pViewShell->ExpandBlockArea(-nMovX, 0); @@ -275,6 +283,8 @@ void ScCellShell::ExecuteCursorSel( SfxRequest& rReq ) ; } pViewShell->ShowAllCursors(); + rReq.AppendItem( SfxInt16Item(FN_PARAM_1,static_cast<sal_Int16>(nRepeat)) ); + rReq.Done(); } void ScCellShell::ExecuteMove( SfxRequest& rReq ) -- 1.7.1