Thans Eike for the enlighment. I am not skilled in C++ (thanks for your patience), but scslots.hxx looks different for GoUpSel and GoDownSel, if that matters, around the line that starts with "73/*Offset*/" and "74/*Offset*/"
// Slot Nr. 145 : 26521 SFX_NEW_SLOT_ARG( ScCellShell,SID_CURSORDOWN_SEL,SID_CURSORDOWN_SEL,GID_NAVIGATOR, 0 ,&aScCellShellSlots_Impl[146] /*Offset Next*/, SFX_STUB_PTR(ScCellShell,ExecuteCursorSel),SFX_STUB_PTR(ScCellShell,GetStateCursor), SFX_SLOT_CACHABLE|SFX_SLOT_SYNCHRON|SFX_SLOT_RECORDPERSET|SFX_SLOT_ACCELCONFIG|SFX_SLOT_READONLYDOC|0, 0, SfxVoidItem, 73/*Offset*/, 1/*Count*/, 0, SFX_SLOT_METHOD|0,"GoDownSel" ), // Slot Nr. 146 : 26522 SFX_NEW_SLOT_ARG( ScCellShell,SID_CURSORUP_SEL,SID_CURSORUP_SEL,GID_NAVIGATOR, 0 ,&aScCellShellSlots_Impl[147] /*Offset Next*/, SFX_STUB_PTR(ScCellShell,ExecuteCursorSel),SFX_STUB_PTR(ScCellShell,GetStateCursor), SFX_SLOT_CACHABLE|SFX_SLOT_SYNCHRON|SFX_SLOT_RECORDPERSET|SFX_SLOT_ACCELCONFIG|SFX_SLOT_READONLYDOC|0, 0, SfxVoidItem, 74/*Offset*/, 1/*Count*/,".GoUpSel",SFX_SLOT_METHOD|0,"GoUpSel" ), Anyway, the whole thing is that GoDownSel (/UpSel/LeftSel/RightSel) has thus a property value FN_PARAM_1 which represent a repetition of the command named ("By"), I guess.. 1) So the following code rem ---------------------------------------------------------------------- dim args1(1) as new com.sun.star.beans.PropertyValue args1(0).Name = "By" args1(0).Value = 10 args1(1).Name = "Sel" args1(1).Value = True dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1()) should select 10 lines downward, no? But it don't as far as I can see. It moves 10 lines and select one more, the 11th. I think the issue is in sc/source/ui/view/cellsh4.cxx, where the repetition nRepeat if( IS_AVAILABLE( FN_PARAM_1, &pItem ) ) nRepeat = static_cast<SCsCOLROW>(((const SfxInt16Item*)pItem)->GetValue()); is not used as loop or passed properly when bSel is true, just below... 2) And the code rem ---------------------------------------------------------------------- dim args2(0) as new com.sun.star.beans.PropertyValue args2(0).Name = "By" args2(0).Value = 10 dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, args2()) does not select more than 2 cells, probably because the loop nRepeat is missing, it is not taken from rReq in method void ScCellShell::ExecuteCursorSel( SfxRequest& rReq ) and besides, the recent fix of bug https://bugs.freedesktop.org/show_bug.cgi?id=38955 fixes the recording but does not return the "By" property, as it may miss a line like rReq.AppendItem( SfxInt16Item(FN_PARAM_1, static_cast<sal_Int16>(nRepeat)) ); thus the recorded macro does not show the "By" property Again sorry for bothering, but isn't this a defect? I am not sure with respect to the specifications. Kind regards Olivier 2011/7/27 Eike Rathke <o...@erack.de> > Hi Olivier, > > On Wednesday, 2011-07-27 14:50:33 -0300, Olivier Hallot wrote: > > > Investigating sc/sdi/cellsh.sdi > > [...] > > So it looks like GoDownSel has an argument "By", which seems to be > "select > > FN_PARAM_1 cells down", but GoUpSel (GoRightSel and GoLeftSel) does not > have > > this parameter. > > > > Which one is the correct? > > Tricky.. both ;-) The slot parameters of the first definition of an > ExecMethod are inherited by following definitions with the same > ExecMethod. So actually SID_CURSORUP_SEL inherits By from the first > definition of ExecuteCursorSel that happens to be SID_CURSORDOWN_SEL. > Compare with the generated sc/$INPATH/inc/scslots.hxx > > Eike > > -- > PGP/OpenPGP/GnuPG encrypted mail preferred in all private communication. > Key ID: 0x293C05FD - 997A 4C60 CE41 0149 0DB3 9E96 2F1A D073 293C 05FD > > _______________________________________________ > LibreOffice mailing list > LibreOffice@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/libreoffice > > -- Olivier Hallot Founder and Steering Commitee Member The Document Foundation
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice