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