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 <officecfg/Office/Calc.hxx>
31#include <sc.hrc>
32
34{
35 ScViewData& rData = GetViewData();
36 ScTabViewShell* pTabViewShell = rData.GetViewShell();
37 const SfxItemSet* pReqArgs = rReq.GetArgs();
38 sal_uInt16 nSlotId = rReq.GetSlot();
39 SCCOLROW nRepeat = 1;
40 bool bSel = false;
41 bool bKeep = false;
42
43 if ( pReqArgs != nullptr )
44 {
45 const SfxPoolItem* pItem;
46 if (pReqArgs->HasItem(FN_PARAM_1, &pItem))
47 nRepeat = static_cast<SCCOLROW>(static_cast<const SfxInt16Item*>(pItem)->GetValue());
48 if (pReqArgs->HasItem(FN_PARAM_2, &pItem))
49 bSel = static_cast<const SfxBoolItem*>(pItem)->GetValue();
50 }
51 else
52 {
53 // evaluate locked selection mode
54
55 sal_uInt16 nLocked = pTabViewShell->GetLockedModifiers();
56 if ( nLocked & KEY_SHIFT )
57 bSel = true; // EXT
58 else if ( nLocked & KEY_MOD1 )
59 {
60 // ADD mode: keep the selection, start a new block when marking with shift again
61 bKeep = true;
62 }
63 }
64
65 if (bSel)
66 {
67 switch (nSlotId)
68 {
69 case SID_CURSORDOWN:
70 rReq.SetSlot(SID_CURSORDOWN_SEL);
71 break;
72 case SID_CURSORUP:
73 rReq.SetSlot(SID_CURSORUP_SEL);
74 break;
75 case SID_CURSORRIGHT:
76 rReq.SetSlot(SID_CURSORRIGHT_SEL);
77 break;
78 case SID_CURSORLEFT:
79 rReq.SetSlot(SID_CURSORLEFT_SEL);
80 break;
81 case SID_CURSORPAGEDOWN:
82 rReq.SetSlot(SID_CURSORPAGEDOWN_SEL);
83 break;
84 case SID_CURSORPAGEUP:
85 rReq.SetSlot(SID_CURSORPAGEUP_SEL);
86 break;
87 case SID_CURSORBLKDOWN:
88 rReq.SetSlot(SID_CURSORBLKDOWN_SEL);
89 break;
90 case SID_CURSORBLKUP:
91 rReq.SetSlot(SID_CURSORBLKUP_SEL);
92 break;
93 case SID_CURSORBLKRIGHT:
94 rReq.SetSlot(SID_CURSORBLKRIGHT_SEL);
95 break;
96 case SID_CURSORBLKLEFT:
97 rReq.SetSlot(SID_CURSORBLKLEFT_SEL);
98 break;
99 default:
100 ;
101 }
102 ExecuteCursorSel(rReq);
103 return;
104 }
105
106 SCCOLROW nRTLSign = 1;
107 if ( rData.GetDocument().IsLayoutRTL( rData.GetTabNo() ) )
108 {
110 nRTLSign = -1;
111 }
112
113 // once extra, so that the cursor will not be painted too often with ExecuteInputDirect:
114 pTabViewShell->HideAllCursors();
115
116 // #i123629#
117 if( pTabViewShell->GetCurObjectSelectionType() == OST_Editing )
118 pTabViewShell->SetForceFocusOnCurCell(true);
119 else
120 pTabViewShell->SetForceFocusOnCurCell(false);
121
122 // If ScrollLock key is active, cell cursor stays on the current cell while
123 // scrolling the grid.
124 bool bScrollLock = false;
125 // tdf#112876 - allow to disable for special keyboards
126 if (officecfg::Office::Calc::Input::UseScrollLock::get())
127 {
128 KeyIndicatorState eState = pFrameWin->GetIndicatorState();
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, !rReq.IsAPI() );
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, !rReq.IsAPI() );
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, !rReq.IsAPI() );
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, !rReq.IsAPI() );
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
240void 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;
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:
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: */
void ExecutePage(SfxRequest &rReq)
Definition: cellsh4.cxx:466
static void GetStateCursor(SfxItemSet &rSet)
Definition: cellsh4.cxx:240
void ExecuteCursor(SfxRequest &rReq)
Definition: cellsh4.cxx:33
void ExecuteMove(SfxRequest &rReq)
Definition: cellsh4.cxx:322
VclPtr< vcl::Window > pFrameWin
Definition: cellsh.hxx:71
void ExecuteCursorSel(SfxRequest &rReq)
Definition: cellsh4.cxx:244
void ExecutePageSel(SfxRequest &rReq)
Definition: cellsh4.cxx:449
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
Definition: document.cxx:974
ScViewData & GetViewData()
Definition: formatsh.hxx:34
bool IsInputMode() const
Definition: inputhdl.hxx:186
ScInputWindow * GetInputWindow()
Definition: inputhdl.hxx:264
void SwitchToTextWin()
Definition: inputwin.cxx:698
void SetForceFocusOnCurCell(bool bFlag)
Definition: tabvwsh.hxx:391
void ExecuteInputDirect()
Definition: tabvwsha.cxx:678
const ScInputHandler * GetInputHandler() const
Definition: tabvwsh.hxx:237
ObjectSelectionType GetCurObjectSelectionType() const
Definition: tabvwsh.hxx:307
sal_uInt16 GetLockedModifiers() const
Definition: tabview.cxx:1974
void MarkRows()
Definition: tabview3.cxx:1595
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
Definition: tabview3.cxx:917
void MarkDataArea(bool bIncludeCursor=true)
Definition: tabview3.cxx:1677
void MoveCursorEnd(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
Definition: tabview3.cxx:1342
void FindNextUnprot(bool bShift, bool bInSelection)
Definition: tabview3.cxx:1541
void MoveCursorPage(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:1268
void ShowAllCursors()
Definition: tabview3.cxx:234
void ScrollX(tools::Long nDeltaX, ScHSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1221
void Unmark()
Definition: tabview3.cxx:1744
void MoveCursorScreen(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift)
Definition: tabview3.cxx:1372
void MarkMatrixFormula()
Definition: tabview3.cxx:1697
void SelectNextTab(short nDir, bool bExtendSelection)
Definition: tabview3.cxx:1774
void ScrollY(tools::Long nDeltaY, ScVSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1304
void MoveCursorEnter(bool bShift)
Definition: tabview3.cxx:1409
void ExpandBlockPage(SCCOL nMovX, SCROW nMovY)
Definition: tabview2.cxx:1099
void MarkColumns()
Definition: tabview3.cxx:1568
void HideAllCursors()
Definition: tabview3.cxx:220
void ExpandBlock(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode)
Definition: tabview2.cxx:974
void GetPageMoveEndPosition(SCCOL nMovX, SCROW nMovY, SCCOL &rPageX, SCROW &rPageY)
Definition: tabview2.cxx:650
void ExpandBlockArea(SCCOL nMovX, SCROW nMovY)
Definition: tabview2.cxx:1107
void MoveCursorArea(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false, bool bInteractiveByUser=false)
Definition: tabview3.cxx:1334
SCTAB GetTabNo() const
Definition: viewdata.hxx:395
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
ScTabViewShell * GetViewShell() const
Definition: viewdata.hxx:357
SCROW GetCurY() const
Definition: viewdata.hxx:402
SCCOL GetCurX() const
Definition: viewdata.hxx:401
bool GetValue() const
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
sal_uInt16 GetSlot() const
const SfxItemSet * GetArgs() const
void SetSlot(sal_uInt16 nNewSlot)
void AppendItem(const SfxPoolItem &)
bool IsAPI() const
void Done(bool bRemove=false)
virtual SfxInterface * GetInterface() const
const SfxPoolItem * ExecuteSlot(SfxRequest &rReq, const SfxInterface *pIF=nullptr)
@ SC_INPUT_TABLE
Definition: global.hxx:363
KeyIndicatorState
constexpr sal_uInt16 KEY_MOD1
constexpr sal_uInt16 KEY_SHIFT
const char GetValue[]
#define SC_MOD()
Definition: scmod.hxx:247
@ OST_Editing
Definition: tabvwsh.hxx:80
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
Definition: types.hxx:23
sal_Int16 SCCOL
Definition: types.hxx:21
sal_Int32 SCROW
Definition: types.hxx:17
@ SC_FOLLOW_JUMP
Definition: viewdata.hxx:52
@ SC_FOLLOW_LINE
Definition: viewdata.hxx:52
@ SC_FOLLOW_FIX
Definition: viewdata.hxx:52
@ SC_SPLIT_LEFT
Definition: viewdata.hxx:45
@ SC_SPLIT_BOTTOM
Definition: viewdata.hxx:46