LibreOffice Module sc (master)  1
cellsh4.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <sfx2/request.hxx>
21 #include <osl/diagnose.h>
22 
23 #include <cellsh.hxx>
24 #include <tabvwsh.hxx>
25 #include <global.hxx>
26 #include <scmod.hxx>
27 #include <inputhdl.hxx>
28 #include <inputwin.hxx>
29 #include <document.hxx>
30 #include <sc.hrc>
31 
33 {
35  ScTabViewShell* pTabViewShell = rData.GetViewShell();
36  const SfxItemSet* pReqArgs = rReq.GetArgs();
37  sal_uInt16 nSlotId = rReq.GetSlot();
38  SCCOLROW nRepeat = 1;
39  bool bSel = false;
40  bool bKeep = false;
41 
42  if ( pReqArgs != nullptr )
43  {
44  const SfxPoolItem* pItem;
45  if (pReqArgs->HasItem(FN_PARAM_1, &pItem))
46  nRepeat = static_cast<SCCOLROW>(static_cast<const SfxInt16Item*>(pItem)->GetValue());
47  if (pReqArgs->HasItem(FN_PARAM_2, &pItem))
48  bSel = static_cast<const SfxBoolItem*>(pItem)->GetValue();
49  }
50  else
51  {
52  // evaluate locked selection mode
53 
54  sal_uInt16 nLocked = pTabViewShell->GetLockedModifiers();
55  if ( nLocked & KEY_SHIFT )
56  bSel = true; // EXT
57  else if ( nLocked & KEY_MOD1 )
58  {
59  // ADD mode: keep the selection, start a new block when marking with shift again
60  bKeep = true;
61  }
62  }
63 
64  if (bSel)
65  {
66  switch (nSlotId)
67  {
68  case SID_CURSORDOWN:
69  rReq.SetSlot(SID_CURSORDOWN_SEL);
70  break;
71  case SID_CURSORUP:
72  rReq.SetSlot(SID_CURSORUP_SEL);
73  break;
74  case SID_CURSORRIGHT:
75  rReq.SetSlot(SID_CURSORRIGHT_SEL);
76  break;
77  case SID_CURSORLEFT:
78  rReq.SetSlot(SID_CURSORLEFT_SEL);
79  break;
80  case SID_CURSORPAGEDOWN:
81  rReq.SetSlot(SID_CURSORPAGEDOWN_SEL);
82  break;
83  case SID_CURSORPAGEUP:
84  rReq.SetSlot(SID_CURSORPAGEUP_SEL);
85  break;
86  case SID_CURSORBLKDOWN:
87  rReq.SetSlot(SID_CURSORBLKDOWN_SEL);
88  break;
89  case SID_CURSORBLKUP:
90  rReq.SetSlot(SID_CURSORBLKUP_SEL);
91  break;
92  case SID_CURSORBLKRIGHT:
93  rReq.SetSlot(SID_CURSORBLKRIGHT_SEL);
94  break;
95  case SID_CURSORBLKLEFT:
96  rReq.SetSlot(SID_CURSORBLKLEFT_SEL);
97  break;
98  default:
99  ;
100  }
101  ExecuteCursorSel(rReq);
102  return;
103  }
104 
105  SCCOLROW nRTLSign = 1;
106  if ( rData.GetDocument().IsLayoutRTL( rData.GetTabNo() ) )
107  {
109  nRTLSign = -1;
110  }
111 
112  // once extra, so that the cursor will not be painted too often with ExecuteInputDirect:
113  pTabViewShell->HideAllCursors();
114 
115  // #i123629#
116  if( pTabViewShell->GetCurObjectSelectionType() == OST_Editing )
117  pTabViewShell->SetForceFocusOnCurCell(true);
118  else
119  pTabViewShell->SetForceFocusOnCurCell(false);
120 
121  // If ScrollLock key is active, cell cursor stays on the current cell while
122  // scrolling the grid.
123  bool bScrollLock = false;
125  if (eState & KeyIndicatorState::SCROLLLOCK)
126  bScrollLock = true;
127 
128  //OS: once for all should do, however!
129  pTabViewShell->ExecuteInputDirect();
130  switch ( nSlotId )
131  {
132  case SID_CURSORDOWN:
133  if (bScrollLock)
134  pTabViewShell->ScrollY( nRepeat, SC_SPLIT_BOTTOM );
135  else
136  pTabViewShell->MoveCursorRel( 0, nRepeat, SC_FOLLOW_LINE, bSel, bKeep );
137  break;
138 
139  case SID_CURSORBLKDOWN:
140  pTabViewShell->MoveCursorArea( 0, nRepeat, SC_FOLLOW_JUMP, bSel, bKeep );
141  break;
142 
143  case SID_CURSORUP:
144  if (bScrollLock)
145  pTabViewShell->ScrollY( -nRepeat, SC_SPLIT_BOTTOM);
146  else
147  pTabViewShell->MoveCursorRel( 0, -nRepeat, SC_FOLLOW_LINE, bSel, bKeep );
148  break;
149 
150  case SID_CURSORBLKUP:
151  pTabViewShell->MoveCursorArea( 0, -nRepeat, SC_FOLLOW_JUMP, bSel, bKeep );
152  break;
153 
154  case SID_CURSORLEFT:
155  if (bScrollLock)
156  pTabViewShell->ScrollX( static_cast<SCCOL>(-nRepeat * nRTLSign), SC_SPLIT_LEFT);
157  else
158  pTabViewShell->MoveCursorRel( static_cast<SCCOL>(-nRepeat * nRTLSign), 0, SC_FOLLOW_LINE, bSel, bKeep );
159  break;
160 
161  case SID_CURSORBLKLEFT:
162  pTabViewShell->MoveCursorArea( static_cast<SCCOL>(-nRepeat * nRTLSign), 0, SC_FOLLOW_JUMP, bSel, bKeep );
163  break;
164 
165  case SID_CURSORRIGHT:
166  if (bScrollLock)
167  pTabViewShell->ScrollX( static_cast<SCCOL>(nRepeat * nRTLSign), SC_SPLIT_LEFT);
168  else
169  pTabViewShell->MoveCursorRel( static_cast<SCCOL>(nRepeat * nRTLSign), 0, SC_FOLLOW_LINE, bSel, bKeep );
170  break;
171 
172  case SID_CURSORBLKRIGHT:
173  pTabViewShell->MoveCursorArea( static_cast<SCCOL>(nRepeat * nRTLSign), 0, SC_FOLLOW_JUMP, bSel, bKeep );
174  break;
175 
176  case SID_CURSORPAGEDOWN:
177  if (bScrollLock)
178  {
179  SCCOL nPageX;
180  SCROW nPageY;
181  pTabViewShell->GetPageMoveEndPosition( 0, nRepeat, nPageX, nPageY);
182  pTabViewShell->ScrollY( nPageY, SC_SPLIT_BOTTOM);
183  }
184  else
185  pTabViewShell->MoveCursorPage( 0, nRepeat, SC_FOLLOW_FIX, bSel, bKeep );
186  break;
187 
188  case SID_CURSORPAGEUP:
189  if (bScrollLock)
190  {
191  SCCOL nPageX;
192  SCROW nPageY;
193  pTabViewShell->GetPageMoveEndPosition( 0, nRepeat, nPageX, nPageY);
194  pTabViewShell->ScrollY( -nPageY, SC_SPLIT_BOTTOM);
195  }
196  else
197  pTabViewShell->MoveCursorPage( 0, -nRepeat, SC_FOLLOW_FIX, bSel, bKeep );
198  break;
199 
200  case SID_CURSORPAGERIGHT_: //XXX !!!
201  if (bScrollLock)
202  {
203  SCCOL nPageX;
204  SCROW nPageY;
205  pTabViewShell->GetPageMoveEndPosition( static_cast<SCCOL>(nRepeat), 0, nPageX, nPageY);
206  pTabViewShell->ScrollX( nPageX, SC_SPLIT_LEFT);
207  }
208  else
209  pTabViewShell->MoveCursorPage( static_cast<SCCOL>(nRepeat), 0, SC_FOLLOW_FIX, bSel, bKeep );
210  break;
211 
212  case SID_CURSORPAGELEFT_: //XXX !!!
213  if (bScrollLock)
214  {
215  SCCOL nPageX;
216  SCROW nPageY;
217  pTabViewShell->GetPageMoveEndPosition( static_cast<SCCOL>(nRepeat), 0, nPageX, nPageY);
218  pTabViewShell->ScrollX( -nPageX, SC_SPLIT_LEFT);
219  }
220  else
221  pTabViewShell->MoveCursorPage( static_cast<SCCOL>(-nRepeat), 0, SC_FOLLOW_FIX, bSel, bKeep );
222  break;
223 
224  default:
225  OSL_FAIL("Unknown message in ViewShell (Cursor)");
226  return;
227  }
228 
229  pTabViewShell->ShowAllCursors();
230 
231  rReq.AppendItem( SfxInt16Item(FN_PARAM_1, static_cast<sal_Int16>(nRepeat)) );
232  rReq.AppendItem( SfxBoolItem(FN_PARAM_2, bSel) );
233  rReq.Done();
234 }
235 
236 void ScCellShell::GetStateCursor( SAL_UNUSED_PARAMETER SfxItemSet& /* rSet */ )
237 {
238 }
239 
241 {
242  sal_uInt16 nSlotId = rReq.GetSlot();
243  ScTabViewShell* pViewShell = GetViewData().GetViewShell();
244  ScInputHandler* pInputHdl = pViewShell->GetInputHandler();
245  pViewShell->HideAllCursors();
246  if (pInputHdl && pInputHdl->IsInputMode())
247  {
248  // the current cell is in edit mode. Commit the text before moving on.
249  pViewShell->ExecuteInputDirect();
250  }
251 
252  SCCOLROW nRepeat = 1;
253  const SfxItemSet* pReqArgs = rReq.GetArgs();
254  // get repetition
255  if ( pReqArgs != nullptr )
256  {
257  const SfxPoolItem* pItem;
258  if (pReqArgs->HasItem(FN_PARAM_1, &pItem))
259  nRepeat = static_cast<SCCOLROW>(static_cast<const SfxInt16Item*>(pItem)->GetValue());
260  }
261 
262  SCROW nMovY = nRepeat;
263  // Horizontal direction depends on whether or not the UI language is RTL.
264  SCCOL nMovX = nRepeat;
265  if (GetViewData().GetDocument().IsLayoutRTL(GetViewData().GetTabNo()))
266  {
267  // mirror horizontal movement for right-to-left mode.
268  nMovX = -nRepeat;
269  }
270 
271  switch (nSlotId)
272  {
273  case SID_CURSORDOWN_SEL:
274  pViewShell->ExpandBlock(0, nMovY, SC_FOLLOW_LINE);
275  break;
276  case SID_CURSORUP_SEL:
277  pViewShell->ExpandBlock(0, -nMovY, SC_FOLLOW_LINE);
278  break;
279  case SID_CURSORRIGHT_SEL:
280  pViewShell->ExpandBlock(nMovX, 0, SC_FOLLOW_LINE);
281  break;
282  case SID_CURSORLEFT_SEL:
283  pViewShell->ExpandBlock(-nMovX, 0, SC_FOLLOW_LINE);
284  break;
285  case SID_CURSORPAGEUP_SEL:
286  pViewShell->ExpandBlockPage(0, -nMovY);
287  break;
288  case SID_CURSORPAGEDOWN_SEL:
289  pViewShell->ExpandBlockPage(0, nMovY);
290  break;
291  case SID_CURSORPAGERIGHT_SEL:
292  pViewShell->ExpandBlockPage(nMovX, 0);
293  break;
294  case SID_CURSORPAGELEFT_SEL:
295  pViewShell->ExpandBlockPage(-nMovX, 0);
296  break;
297  case SID_CURSORBLKDOWN_SEL:
298  pViewShell->ExpandBlockArea(0, nMovY);
299  break;
300  case SID_CURSORBLKUP_SEL:
301  pViewShell->ExpandBlockArea(0, -nMovY);
302  break;
303  case SID_CURSORBLKRIGHT_SEL:
304  pViewShell->ExpandBlockArea(nMovX , 0);
305  break;
306  case SID_CURSORBLKLEFT_SEL:
307  pViewShell->ExpandBlockArea(-nMovX, 0);
308  break;
309  default:
310  ;
311  }
312  pViewShell->ShowAllCursors();
313 
314  rReq.AppendItem( SfxInt16Item(FN_PARAM_1,static_cast<sal_Int16>(nRepeat)) );
315  rReq.Done();
316 }
317 
319 {
320  ScTabViewShell* pTabViewShell = GetViewData().GetViewShell();
321  sal_uInt16 nSlotId = rReq.GetSlot();
322  const SfxItemSet* pReqArgs = rReq.GetArgs();
323 
324  if(nSlotId != SID_CURSORTOPOFSCREEN && nSlotId != SID_CURSORENDOFSCREEN)
325  pTabViewShell->ExecuteInputDirect();
326  switch ( nSlotId )
327  {
328  case SID_NEXT_TABLE:
329  case SID_NEXT_TABLE_SEL:
330  pTabViewShell->SelectNextTab( 1, (nSlotId == SID_NEXT_TABLE_SEL) );
331  break;
332 
333  case SID_PREV_TABLE:
334  case SID_PREV_TABLE_SEL:
335  pTabViewShell->SelectNextTab( -1, (nSlotId == SID_PREV_TABLE_SEL) );
336  break;
337 
338  // cursor movements in range do not originate from Basic,
339  // because the ScSbxRange-object changes the marking at input
340 
341  case SID_NEXT_UNPROTECT:
342  pTabViewShell->FindNextUnprot( false, !rReq.IsAPI() );
343  break;
344 
345  case SID_PREV_UNPROTECT:
346  pTabViewShell->FindNextUnprot( true, !rReq.IsAPI() );
347  break;
348 
349  case SID_CURSORENTERUP:
350  if (rReq.IsAPI())
351  pTabViewShell->MoveCursorRel( 0, -1, SC_FOLLOW_LINE, false );
352  else
353  pTabViewShell->MoveCursorEnter( true );
354  break;
355 
356  case SID_CURSORENTERDOWN:
357  if (rReq.IsAPI())
358  pTabViewShell->MoveCursorRel( 0, 1, SC_FOLLOW_LINE, false );
359  else
360  pTabViewShell->MoveCursorEnter( false );
361  break;
362 
363  case SID_SELECT_COL:
364  {
365  const SfxPoolItem* pColItem;
366  const SfxPoolItem* pModifierItem;
367  if ( pReqArgs && pReqArgs->HasItem( FN_PARAM_1, &pColItem ) &&
368  pReqArgs->HasItem( FN_PARAM_2, &pModifierItem ) )
369  {
370  SCCOL nCol = static_cast<SCCOL>(static_cast<const SfxInt32Item*>(pColItem)->GetValue());
371  sal_Int16 nModifier = static_cast<const SfxInt16Item*>(pModifierItem)->GetValue();
372 
373  pTabViewShell->MarkColumns( nCol, nModifier );
374  }
375  else
376  pTabViewShell->MarkColumns();
377  }
378  break;
379 
380  case SID_SELECT_ROW:
381  {
382  const SfxPoolItem* pRowItem;
383  const SfxPoolItem* pModifierItem;
384  if ( pReqArgs && pReqArgs->HasItem( FN_PARAM_1, &pRowItem ) &&
385  pReqArgs->HasItem( FN_PARAM_2, &pModifierItem ) )
386  {
387  SCROW nRow = static_cast<SCROW>(static_cast<const SfxInt32Item*>(pRowItem)->GetValue());
388  sal_Int16 nModifier = static_cast<const SfxInt16Item*>(pModifierItem)->GetValue();
389 
390  pTabViewShell->MarkRows( nRow, nModifier );
391  }
392  else
393  pTabViewShell->MarkRows();
394  }
395  break;
396 
397  case SID_SELECT_NONE:
398  pTabViewShell->Unmark();
399  break;
400 
401  case SID_ALIGNCURSOR:
402  pTabViewShell->AlignToCursor( GetViewData().GetCurX(), GetViewData().GetCurY(), SC_FOLLOW_JUMP );
403  break;
404 
405  case SID_MARKDATAAREA:
406  pTabViewShell->MarkDataArea();
407  break;
408 
409  case SID_MARKARRAYFORMULA:
410  pTabViewShell->MarkMatrixFormula();
411  break;
412 
413  case SID_SETINPUTMODE:
414  SC_MOD()->SetInputMode( SC_INPUT_TABLE );
415  break;
416 
417  case SID_FOCUS_INPUTLINE:
418  {
419  ScInputHandler* pHdl = SC_MOD()->GetInputHdl( pTabViewShell );
420  if (pHdl)
421  {
422  ScInputWindow* pWin = pHdl->GetInputWindow();
423  if (pWin)
424  pWin->SwitchToTextWin();
425  }
426  }
427  break;
428 
429  case SID_CURSORTOPOFSCREEN:
430  pTabViewShell->MoveCursorScreen( 0, -1, SC_FOLLOW_LINE, false );
431  break;
432 
433  case SID_CURSORENDOFSCREEN:
434  pTabViewShell->MoveCursorScreen( 0, 1, SC_FOLLOW_LINE, false );
435  break;
436 
437  default:
438  OSL_FAIL("Unknown message in ViewShell (Cursor)");
439  return;
440  }
441 
442  rReq.Done();
443 }
444 
446 {
447  sal_uInt16 nSlotId = rReq.GetSlot();
448  switch ( nSlotId )
449  {
450  case SID_CURSORHOME_SEL: rReq.SetSlot( SID_CURSORHOME ); break;
451  case SID_CURSOREND_SEL: rReq.SetSlot( SID_CURSOREND ); break;
452  case SID_CURSORTOPOFFILE_SEL: rReq.SetSlot( SID_CURSORTOPOFFILE ); break;
453  case SID_CURSORENDOFFILE_SEL: rReq.SetSlot( SID_CURSORENDOFFILE ); break;
454  default:
455  OSL_FAIL("Unknown message in ViewShell (ExecutePageSel)");
456  return;
457  }
458  rReq.AppendItem( SfxBoolItem(FN_PARAM_2, true) );
459  ExecuteSlot( rReq, GetInterface() );
460 }
461 
463 {
464  ScTabViewShell* pTabViewShell = GetViewData().GetViewShell();
465  const SfxItemSet* pReqArgs = rReq.GetArgs();
466  sal_uInt16 nSlotId = rReq.GetSlot();
467  bool bSel = false;
468  bool bKeep = false;
469 
470  if ( pReqArgs != nullptr )
471  {
472  const SfxPoolItem* pItem;
473  if (pReqArgs->HasItem(FN_PARAM_2, &pItem))
474  bSel = static_cast<const SfxBoolItem*>(pItem)->GetValue();
475  }
476  else
477  {
478  // evaluate locked selection mode
479 
480  sal_uInt16 nLocked = pTabViewShell->GetLockedModifiers();
481  if ( nLocked & KEY_SHIFT )
482  bSel = true; // EXT
483  else if ( nLocked & KEY_MOD1 )
484  {
485  // ADD mode: keep the selection, start a new block when marking with shift again
486  bKeep = true;
487  }
488  }
489 
490  pTabViewShell->ExecuteInputDirect();
491  switch ( nSlotId )
492  {
493  case SID_CURSORHOME:
494  pTabViewShell->MoveCursorEnd( -1, 0, SC_FOLLOW_LINE, bSel, bKeep );
495  break;
496 
497  case SID_CURSOREND:
498  pTabViewShell->MoveCursorEnd( 1, 0, SC_FOLLOW_JUMP, bSel, bKeep );
499  break;
500 
501  case SID_CURSORTOPOFFILE:
502  pTabViewShell->MoveCursorEnd( -1, -1, SC_FOLLOW_LINE, bSel, bKeep );
503  break;
504 
505  case SID_CURSORENDOFFILE:
506  pTabViewShell->MoveCursorEnd( 1, 1, SC_FOLLOW_JUMP, bSel, bKeep );
507  break;
508 
509  default:
510  OSL_FAIL("Unknown message in ViewShell (ExecutePage)");
511  return;
512  }
513 
514  rReq.AppendItem( SfxBoolItem(FN_PARAM_2, bSel) );
515  rReq.Done();
516 }
517 
518 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const SfxPoolItem * ExecuteSlot(SfxRequest &rReq, const SfxInterface *pIF=nullptr)
void FindNextUnprot(bool bShift, bool bInSelection)
Definition: tabview3.cxx:1536
void MarkDataArea(bool bIncludeCursor=true)
Definition: tabview3.cxx:1654
constexpr sal_uInt16 KEY_MOD1
KeyIndicatorState GetIndicatorState() const
std::string GetValue
bool IsInputMode() const
Definition: inputhdl.hxx:184
ScViewData & GetViewData()
Definition: formatsh.hxx:34
const ContentProperties & rData
sal_uInt16 GetLockedModifiers() const
Definition: tabview.cxx:1896
SCTAB GetTabNo() const
Definition: viewdata.hxx:394
void Unmark()
Definition: tabview3.cxx:1721
void Done(bool bRemove=false)
ScDocument & GetDocument() const
Definition: viewdata.hxx:379
const SfxItemSet * GetArgs() const
void ExecuteMove(SfxRequest &rReq)
Definition: cellsh4.cxx:318
void ScrollX(tools::Long nDeltaX, ScHSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1152
void MoveCursorScreen(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift)
Definition: tabview3.cxx:1367
VclPtr< vcl::Window > pFrameWin
Definition: cellsh.hxx:72
void SetSlot(sal_uInt16 nNewSlot)
void MoveCursorEnd(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
Definition: tabview3.cxx:1337
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
Definition: types.hxx:23
void SetForceFocusOnCurCell(bool bFlag)
Definition: tabvwsh.hxx:381
ScInputWindow * GetInputWindow()
Definition: inputhdl.hxx:262
void ExecuteInputDirect()
Definition: tabvwsha.cxx:641
ScTabViewShell * GetViewShell() const
Definition: viewdata.hxx:356
void ExpandBlock(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode)
Definition: tabview2.cxx:848
void SwitchToTextWin()
Definition: inputwin.cxx:697
void ExecuteCursor(SfxRequest &rReq)
Definition: cellsh4.cxx:32
sal_Int16 SCCOL
Definition: types.hxx:21
#define SC_MOD()
Definition: scmod.hxx:249
KeyIndicatorState
void ExpandBlockArea(SCCOL nMovX, SCROW nMovY)
Definition: tabview2.cxx:970
void ExecutePage(SfxRequest &rReq)
Definition: cellsh4.cxx:462
void MarkRows()
Definition: tabview3.cxx:1591
sal_Int32 SCROW
Definition: types.hxx:17
sal_uInt16 GetSlot() const
void ExecutePageSel(SfxRequest &rReq)
Definition: cellsh4.cxx:445
void MoveCursorEnter(bool bShift)
Definition: tabview3.cxx:1404
void ExecuteCursorSel(SfxRequest &rReq)
Definition: cellsh4.cxx:240
void HideAllCursors()
Definition: tabview3.cxx:218
void MoveCursorPage(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
Definition: tabview3.cxx:1321
void ScrollY(tools::Long nDeltaY, ScVSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1235
void MoveCursorArea(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
Definition: tabview3.cxx:1329
void MoveCursorRel(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
Definition: tabview3.cxx:1263
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
void GetPageMoveEndPosition(SCCOL nMovX, SCROW nMovY, SCCOL &rPageX, SCROW &rPageY)
Definition: tabview2.cxx:600
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
Definition: tabview3.cxx:914
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
Definition: document.cxx:985
virtual SfxInterface * GetInterface() const
void SelectNextTab(short nDir, bool bExtendSelection)
Definition: tabview3.cxx:1751
ObjectSelectionType GetCurObjectSelectionType() const
Definition: tabvwsh.hxx:297
void AppendItem(const SfxPoolItem &)
static void GetStateCursor(SfxItemSet &rSet)
Definition: cellsh4.cxx:236
bool IsAPI() const
constexpr sal_uInt16 KEY_SHIFT
void MarkColumns()
Definition: tabview3.cxx:1563
const ScInputHandler * GetInputHandler() const
Definition: tabvwsh.hxx:231
void MarkMatrixFormula()
Definition: tabview3.cxx:1674
void ExpandBlockPage(SCCOL nMovX, SCROW nMovY)
Definition: tabview2.cxx:962
void ShowAllCursors()
Definition: tabview3.cxx:232