LibreOffice Module sc (master) 1
viewuno.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 <com/sun/star/awt/MouseButton.hpp>
21#include <com/sun/star/drawing/ShapeCollection.hpp>
22#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
23#include <com/sun/star/script/vba/XVBAEventProcessor.hpp>
24#include <com/sun/star/util/VetoException.hpp>
25#include <com/sun/star/view/DocumentZoomType.hpp>
26
27#include <editeng/outliner.hxx>
28#include <svx/svditer.hxx>
29#include <svx/svdmark.hxx>
30#include <svx/svdpage.hxx>
31#include <svx/svdpagv.hxx>
32#include <svx/svdview.hxx>
33#include <svx/unoshape.hxx>
34#include <svx/fmshell.hxx>
35#include <sfx2/bindings.hxx>
36#include <sfx2/dispatch.hxx>
37#include <sfx2/request.hxx>
38#include <sfx2/viewfrm.hxx>
44#include <vcl/svapp.hxx>
45
46#include <drawsh.hxx>
47#include <drtxtob.hxx>
48#include <transobj.hxx>
49#include <editsh.hxx>
50#include <viewuno.hxx>
51#include <cellsuno.hxx>
52#include <miscuno.hxx>
53#include <tabvwsh.hxx>
54#include <prevwsh.hxx>
55#include <docsh.hxx>
56#include <drwlayer.hxx>
57#include <drawview.hxx>
58#include <fupoor.hxx>
59#include <sc.hrc>
60#include <unonames.hxx>
61#include <scmod.hxx>
62#include <appoptio.hxx>
63#include <gridwin.hxx>
64#include <sheetevents.hxx>
65#include <markdata.hxx>
66#include <scextopt.hxx>
67#include <preview.hxx>
68#include <inputhdl.hxx>
69#include <inputwin.hxx>
71#include <formatsh.hxx>
72#include <sfx2/app.hxx>
73#include <scitems.hxx>
74
75using namespace com::sun::star;
76
78
79// no Which-ID here, Map only for PropertySetInfo
80
82{
83 static const SfxItemPropertyMapEntry aViewOptPropertyMap_Impl[] =
84 {
91 { SC_UNO_HIDESPELL, 0, cppu::UnoType<bool>::get(), 0, 0}, /* deprecated #i91949 */
115 };
116 return aViewOptPropertyMap_Impl;
117}
118
119constexpr OUStringLiteral SCTABVIEWOBJ_SERVICE = u"com.sun.star.sheet.SpreadsheetView";
120constexpr OUStringLiteral SCVIEWSETTINGS_SERVICE = u"com.sun.star.sheet.SpreadsheetViewSettings";
121
122SC_SIMPLE_SERVICE_INFO( ScViewPaneBase, "ScViewPaneObj", "com.sun.star.sheet.SpreadsheetViewPane" )
123
125 pViewShell( pViewSh ),
126 nPane( nP )
127{
128 if (pViewShell)
129 StartListening(*pViewShell);
130}
131
133{
135
136 if (pViewShell)
138}
139
141{
142 if ( rHint.GetId() == SfxHintId::Dying )
143 pViewShell = nullptr;
144}
145
147{
148 SC_QUERYINTERFACE( sheet::XViewPane )
149 SC_QUERYINTERFACE( sheet::XCellRangeReferrer )
150 SC_QUERYINTERFACE( view::XFormLayerAccess )
151 SC_QUERYINTERFACE( view::XControlAccess )
152 SC_QUERYINTERFACE( lang::XServiceInfo )
153 SC_QUERYINTERFACE( lang::XTypeProvider )
154
155 return uno::Any(); // OWeakObject is in derived objects
156}
157
158uno::Sequence<uno::Type> SAL_CALL ScViewPaneBase::getTypes()
159{
160 static const uno::Sequence<uno::Type> aTypes
161 {
167 };
168 return aTypes;
169}
170
171uno::Sequence<sal_Int8> SAL_CALL ScViewPaneBase::getImplementationId()
172{
173 return css::uno::Sequence<sal_Int8>();
174}
175
176// XViewPane
177
179{
180 SolarMutexGuard aGuard;
181 if (pViewShell)
182 {
183 ScViewData& rViewData = pViewShell->GetViewData();
184 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
185 rViewData.GetActivePart() :
186 static_cast<ScSplitPos>(nPane);
187 ScHSplitPos eWhichH = WhichH( eWhich );
188
189 return rViewData.GetPosX( eWhichH );
190 }
191 OSL_FAIL("no View ?!?");
192 return 0;
193}
194
195void SAL_CALL ScViewPaneBase::setFirstVisibleColumn(sal_Int32 nFirstVisibleColumn)
196{
197 SolarMutexGuard aGuard;
198 if (pViewShell)
199 {
200 ScViewData& rViewData = pViewShell->GetViewData();
201 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
202 rViewData.GetActivePart() :
203 static_cast<ScSplitPos>(nPane);
204 ScHSplitPos eWhichH = WhichH( eWhich );
205
206 tools::Long nDeltaX = static_cast<tools::Long>(nFirstVisibleColumn) - rViewData.GetPosX( eWhichH );
207 pViewShell->ScrollX( nDeltaX, eWhichH );
208 }
209}
210
212{
213 SolarMutexGuard aGuard;
214 if (pViewShell)
215 {
216 ScViewData& rViewData = pViewShell->GetViewData();
217 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
218 rViewData.GetActivePart() :
219 static_cast<ScSplitPos>(nPane);
220 ScVSplitPos eWhichV = WhichV( eWhich );
221
222 return rViewData.GetPosY( eWhichV );
223 }
224 OSL_FAIL("no View ?!?");
225 return 0;
226}
227
228void SAL_CALL ScViewPaneBase::setFirstVisibleRow( sal_Int32 nFirstVisibleRow )
229{
230 SolarMutexGuard aGuard;
231 if (pViewShell)
232 {
233 ScViewData& rViewData = pViewShell->GetViewData();
234 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
235 rViewData.GetActivePart() :
236 static_cast<ScSplitPos>(nPane);
237 ScVSplitPos eWhichV = WhichV( eWhich );
238
239 tools::Long nDeltaY = static_cast<tools::Long>(nFirstVisibleRow) - rViewData.GetPosY( eWhichV );
240 pViewShell->ScrollY( nDeltaY, eWhichV );
241 }
242}
243
244table::CellRangeAddress SAL_CALL ScViewPaneBase::getVisibleRange()
245{
246 SolarMutexGuard aGuard;
247 table::CellRangeAddress aAdr;
248 if (pViewShell)
249 {
250 ScViewData& rViewData = pViewShell->GetViewData();
251 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
252 rViewData.GetActivePart() :
253 static_cast<ScSplitPos>(nPane);
254 ScHSplitPos eWhichH = WhichH( eWhich );
255 ScVSplitPos eWhichV = WhichV( eWhich );
256
257 // VisibleCellsX returns only completely visible cells
258 // VisibleRange in Excel also partially visible ones
260
261 SCCOL nVisX = rViewData.VisibleCellsX( eWhichH );
262 SCROW nVisY = rViewData.VisibleCellsY( eWhichV );
263 if (!nVisX) nVisX = 1; // there has to be something in the range
264 if (!nVisY) nVisY = 1;
265 aAdr.Sheet = rViewData.GetTabNo();
266 aAdr.StartColumn = rViewData.GetPosX( eWhichH );
267 aAdr.StartRow = rViewData.GetPosY( eWhichV );
268 aAdr.EndColumn = aAdr.StartColumn + nVisX - 1;
269 aAdr.EndRow = aAdr.StartRow + nVisY - 1;
270 }
271 return aAdr;
272}
273
274// XCellRangeSource
275
276uno::Reference<table::XCellRange> SAL_CALL ScViewPaneBase::getReferredCells()
277{
278 SolarMutexGuard aGuard;
279 if (pViewShell)
280 {
282
283 table::CellRangeAddress aAdr(getVisibleRange());
284 ScRange aRange( static_cast<SCCOL>(aAdr.StartColumn), static_cast<SCROW>(aAdr.StartRow), aAdr.Sheet,
285 static_cast<SCCOL>(aAdr.EndColumn), static_cast<SCROW>(aAdr.EndRow), aAdr.Sheet );
286 if ( aRange.aStart == aRange.aEnd )
287 return new ScCellObj( pDocSh, aRange.aStart );
288 else
289 return new ScCellRangeObj( pDocSh, aRange );
290 }
291
292 return nullptr;
293}
294
295namespace
296{
297 bool lcl_prepareFormShellCall( ScTabViewShell* _pViewShell, sal_uInt16 _nPane, FmFormShell*& _rpFormShell, vcl::Window*& _rpWindow, SdrView*& _rpSdrView )
298 {
299 if ( !_pViewShell )
300 return false;
301
302 ScViewData& rViewData = _pViewShell->GetViewData();
303 ScSplitPos eWhich = ( _nPane == SC_VIEWPANE_ACTIVE ) ?
304 rViewData.GetActivePart() :
305 static_cast<ScSplitPos>(_nPane);
306 _rpWindow = _pViewShell->GetWindowByPos( eWhich );
307 _rpSdrView = _pViewShell->GetScDrawView();
308 _rpFormShell = _pViewShell->GetFormShell();
309 return ( _rpFormShell != nullptr ) && ( _rpSdrView != nullptr )&& ( _rpWindow != nullptr );
310 }
311}
312
313// XFormLayerAccess
314uno::Reference< form::runtime::XFormController > SAL_CALL ScViewPaneBase::getFormController( const uno::Reference< form::XForm >& Form )
315{
316 SolarMutexGuard aGuard;
317
318 uno::Reference< form::runtime::XFormController > xController;
319
320 vcl::Window* pWindow( nullptr );
321 SdrView* pSdrView( nullptr );
322 FmFormShell* pFormShell( nullptr );
323 if ( lcl_prepareFormShellCall( pViewShell, nPane, pFormShell, pWindow, pSdrView ) )
324 xController = FmFormShell::GetFormController( Form, *pSdrView, *pWindow->GetOutDev() );
325
326 return xController;
327}
328
330{
331 SolarMutexGuard aGuard;
332
333 bool bIsFormDesignMode( true );
334
335 FmFormShell* pFormShell( pViewShell ? pViewShell->GetFormShell() : nullptr );
336 if ( pFormShell )
337 bIsFormDesignMode = pFormShell->IsDesignMode();
338
339 return bIsFormDesignMode;
340}
341
343{
344 SolarMutexGuard aGuard;
345
346 vcl::Window* pWindow( nullptr );
347 SdrView* pSdrView( nullptr );
348 FmFormShell* pFormShell( nullptr );
349 if ( lcl_prepareFormShellCall( pViewShell, nPane, pFormShell, pWindow, pSdrView ) )
350 pFormShell->SetDesignMode( DesignMode );
351}
352
353// XControlAccess
354
355uno::Reference<awt::XControl> SAL_CALL ScViewPaneBase::getControl(
356 const uno::Reference<awt::XControlModel>& xModel )
357{
358 SolarMutexGuard aGuard;
359
360 uno::Reference<awt::XControl> xRet;
361
362 vcl::Window* pWindow( nullptr );
363 SdrView* pSdrView( nullptr );
364 FmFormShell* pFormShell( nullptr );
365 if ( lcl_prepareFormShellCall( pViewShell, nPane, pFormShell, pWindow, pSdrView ) )
366 pFormShell->GetFormControl( xModel, *pSdrView, *pWindow->GetOutDev(), xRet );
367
368 if ( !xRet.is() )
369 throw container::NoSuchElementException(); // no control found
370
371 return xRet;
372}
373
374awt::Rectangle ScViewPaneBase::GetVisArea() const
375{
376 awt::Rectangle aVisArea;
377 if (pViewShell)
378 {
379 ScSplitPos eWhich = ( nPane == SC_VIEWPANE_ACTIVE ) ?
381 static_cast<ScSplitPos>(nPane);
382 ScGridWindow* pWindow = static_cast<ScGridWindow*>(pViewShell->GetWindowByPos(eWhich));
384 if (pWindow)
385 {
386 ScHSplitPos eWhichH = ((eWhich == SC_SPLIT_TOPLEFT) || (eWhich == SC_SPLIT_BOTTOMLEFT)) ?
388 ScVSplitPos eWhichV = ((eWhich == SC_SPLIT_TOPLEFT) || (eWhich == SC_SPLIT_TOPRIGHT)) ?
390 ScAddress aCell(pViewShell->GetViewData().GetPosX(eWhichH),
391 pViewShell->GetViewData().GetPosY(eWhichV),
393 tools::Rectangle aCellRect( rDoc.GetMMRect( aCell.Col(), aCell.Row(), aCell.Col(), aCell.Row(), aCell.Tab() ) );
394 Size aVisSize( pWindow->PixelToLogic( pWindow->GetSizePixel(), pWindow->GetDrawMapMode( true ) ) );
395 Point aVisPos( aCellRect.TopLeft() );
396 if ( rDoc.IsLayoutRTL( aCell.Tab() ) )
397 {
398 aVisPos = aCellRect.TopRight();
399 aVisPos.AdjustX( -(aVisSize.Width()) );
400 }
401 tools::Rectangle aVisRect( aVisPos, aVisSize );
402 aVisArea = AWTRectangle(aVisRect);
403 }
404 }
405 return aVisArea;
406}
407
409 ScViewPaneBase( pViewSh, nP )
410{
411}
412
414{
415}
416
418{
419 // ScViewPaneBase has everything except OWeakObject
420
422 if (!aRet.hasValue())
423 aRet = OWeakObject::queryInterface( rType );
424 return aRet;
425}
426
427void SAL_CALL ScViewPaneObj::acquire() noexcept
428{
429 OWeakObject::acquire();
430}
431
432void SAL_CALL ScViewPaneObj::release() noexcept
433{
434 OWeakObject::release();
435}
436
437// We need default ctor for SMART_REFLECTION_IMPLEMENTATION
438
441 SfxBaseController( pViewSh ),
442 aPropSet( lcl_GetViewOptPropertyMap() ),
443 aMouseClickHandlers( 0 ),
444 aActivationListeners( 0 ),
445 nPreviousTab( 0 ),
446 bDrawSelModeSet(false),
447 bFilteredRangeSelection(false),
448 mbLeftMousePressed(false)
449{
450 if (pViewSh)
451 nPreviousTab = pViewSh->GetViewData().GetTabNo();
452}
453
455{
457 if (!aMouseClickHandlers.empty())
458 {
459 acquire();
461 }
462 if (!aActivationListeners.empty())
463 {
464 acquire();
466 }
467}
468
470{
471 SC_QUERYINTERFACE( sheet::XSpreadsheetView )
472 SC_QUERYINTERFACE( sheet::XEnhancedMouseClickBroadcaster )
473 SC_QUERYINTERFACE( sheet::XActivationBroadcaster )
474 SC_QUERYINTERFACE( container::XEnumerationAccess )
475 SC_QUERYINTERFACE( container::XIndexAccess )
476 SC_QUERY_MULTIPLE( container::XElementAccess, container::XIndexAccess )
477 SC_QUERYINTERFACE( view::XSelectionSupplier )
478 SC_QUERYINTERFACE( beans::XPropertySet )
479 SC_QUERYINTERFACE( sheet::XViewSplitable )
480 SC_QUERYINTERFACE( sheet::XViewFreezable )
481 SC_QUERYINTERFACE( sheet::XRangeSelection )
482 SC_QUERYINTERFACE( datatransfer::XTransferableSupplier )
483 SC_QUERYINTERFACE( sheet::XSelectedSheetsSupplier )
484
486 if (!aRet.hasValue())
487 aRet = SfxBaseController::queryInterface( rType );
488 return aRet;
489}
490
491void SAL_CALL ScTabViewObj::acquire() noexcept
492{
493 SfxBaseController::acquire();
494}
495
496void SAL_CALL ScTabViewObj::release() noexcept
497{
498 SfxBaseController::release();
499}
500
501static void lcl_CallActivate( ScDocShell* pDocSh, SCTAB nTab, ScSheetEventId nEvent )
502{
503 ScDocument& rDoc = pDocSh->GetDocument();
504 // when deleting a sheet, nPreviousTab can be invalid
505 // (could be handled with reference updates)
506 if (!rDoc.HasTable(nTab))
507 return;
508
509 const ScSheetEvents* pEvents = rDoc.GetSheetEvents(nTab);
510 if (pEvents)
511 {
512 const OUString* pScript = pEvents->GetScript(nEvent);
513 if (pScript)
514 {
515 uno::Any aRet;
516 uno::Sequence<uno::Any> aParams;
517 uno::Sequence<sal_Int16> aOutArgsIndex;
518 uno::Sequence<uno::Any> aOutArgs;
519 /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
520 }
521 }
522
523 // execute VBA event handlers
524 try
525 {
526 uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( rDoc.GetVbaEventProcessor(), uno::UNO_SET_THROW );
527 // the parameter is the clicked object, as in the mousePressed call above
528 uno::Sequence< uno::Any > aArgs{ uno::Any(nTab) };
529 xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( nEvent ), aArgs );
530 }
531 catch( uno::Exception& )
532 {
533 }
534}
535
536void ScTabViewObj::SheetChanged( bool bSameTabButMoved )
537{
538 if ( !GetViewShell() )
539 return;
540
541 ScViewData& rViewData = GetViewShell()->GetViewData();
542 ScDocShell* pDocSh = rViewData.GetDocShell();
543 if (!aActivationListeners.empty())
544 {
545 sheet::ActivationEvent aEvent;
546 uno::Reference< sheet::XSpreadsheetView > xView(this);
547 uno::Reference< uno::XInterface > xSource(xView, uno::UNO_QUERY);
548 aEvent.Source = xSource;
549 aEvent.ActiveSheet = new ScTableSheetObj(pDocSh, rViewData.GetTabNo());
550 // Listener's handler may remove it from the listeners list
551 for (size_t i = aActivationListeners.size(); i > 0; --i)
552 {
553 try
554 {
555 aActivationListeners[i - 1]->activeSpreadsheetChanged( aEvent );
556 }
557 catch( uno::Exception& )
558 {
559 aActivationListeners.erase(aActivationListeners.begin() + (i - 1));
560 }
561 }
562 }
563
564 /* Handle sheet events, but do not trigger event handlers, if the old
565 active sheet gets re-activated after inserting/deleting/moving a sheet. */
566 SCTAB nNewTab = rViewData.GetTabNo();
567 if ( !bSameTabButMoved && (nNewTab != nPreviousTab) )
568 {
570 lcl_CallActivate( pDocSh, nNewTab, ScSheetEventId::FOCUS );
571 }
572 nPreviousTab = nNewTab;
573}
574
575uno::Sequence<uno::Type> SAL_CALL ScTabViewObj::getTypes()
576{
579 SfxBaseController::getTypes(),
580 uno::Sequence<uno::Type>
581 {
594 } );
595}
596
597uno::Sequence<sal_Int8> SAL_CALL ScTabViewObj::getImplementationId()
598{
599 return css::uno::Sequence<sal_Int8>();
600}
601
602// XDocumentView
603
604static bool lcl_TabInRanges( SCTAB nTab, const ScRangeList& rRanges )
605{
606 for (size_t i = 0, nCount = rRanges.size(); i < nCount; ++i)
607 {
608 const ScRange & rRange = rRanges[ i ];
609 if ( nTab >= rRange.aStart.Tab() && nTab <= rRange.aEnd.Tab() )
610 return true;
611 }
612 return false;
613}
614
615static void lcl_ShowObject( ScTabViewShell& rViewSh, const ScDrawView& rDrawView, const SdrObject* pSelObj )
616{
617 bool bFound = false;
618 SCTAB nObjectTab = 0;
619
620 SdrModel& rModel = rDrawView.GetModel();
621 sal_uInt16 nPageCount = rModel.GetPageCount();
622 for (sal_uInt16 i=0; i<nPageCount && !bFound; i++)
623 {
624 SdrPage* pPage = rModel.GetPage(i);
625 if (pPage)
626 {
627 SdrObjListIter aIter( pPage, SdrIterMode::DeepWithGroups );
628 SdrObject* pObject = aIter.Next();
629 while (pObject && !bFound)
630 {
631 if ( pObject == pSelObj )
632 {
633 bFound = true;
634 nObjectTab = static_cast<SCTAB>(i);
635 }
636 pObject = aIter.Next();
637 }
638 }
639 }
640
641 if (bFound)
642 {
643 rViewSh.SetTabNo( nObjectTab );
644 rViewSh.ScrollToObject( pSelObj );
645 }
646}
647
648sal_Bool SAL_CALL ScTabViewObj::select( const uno::Any& aSelection )
649{
650 SolarMutexGuard aGuard;
651 ScTabViewShell* pViewSh = GetViewShell();
652
653 if ( !pViewSh )
654 return false;
655
657
658 bool bRet = false;
659 uno::Reference<uno::XInterface> xInterface(aSelection, uno::UNO_QUERY);
660 if ( !xInterface.is() ) //clear all selections
661 {
662 ScDrawView* pDrawView = pViewSh->GetScDrawView();
663 if (pDrawView)
664 {
665 pDrawView->ScEndTextEdit();
666 pDrawView->UnmarkAll();
667 }
668 else //#102232#; if there is no DrawView remove range selection
669 pViewSh->Unmark();
670 bRet = true;
671 }
672
673 if (bDrawSelModeSet) // remove DrawSelMode if set by API; if necessary it will be set again later
674 {
675 pViewSh->SetDrawSelMode(false);
676 pViewSh->UpdateLayerLocks();
677 bDrawSelModeSet = false;
678 }
679
680 if (bRet)
681 return bRet;
682
683 ScCellRangesBase* pRangesImp = dynamic_cast<ScCellRangesBase*>( xInterface.get() );
684 uno::Reference<drawing::XShapes> xShapeColl( xInterface, uno::UNO_QUERY );
685 uno::Reference<drawing::XShape> xShapeSel( xInterface, uno::UNO_QUERY );
686 SvxShape* pShapeImp = comphelper::getFromUnoTunnel<SvxShape>( xShapeSel );
687
688 if (pRangesImp) // Cell ranges
689 {
690 ScViewData& rViewData = pViewSh->GetViewData();
691 if ( rViewData.GetDocShell() == pRangesImp->GetDocShell() )
692 {
693 // perhaps remove drawing selection first
694 // (MarkListHasChanged removes sheet selection)
695
696 ScDrawView* pDrawView = pViewSh->GetScDrawView();
697 if (pDrawView)
698 {
699 pDrawView->ScEndTextEdit();
700 pDrawView->UnmarkAll();
701 }
702 FuPoor* pFunc = pViewSh->GetDrawFuncPtr();
703 if ( pFunc && pFunc->GetSlotID() != SID_OBJECT_SELECT )
704 {
705 // execute the slot of drawing function again -> switch off
706 SfxDispatcher* pDisp = pViewSh->GetDispatcher();
707 if (pDisp)
708 pDisp->Execute( pFunc->GetSlotID(), SfxCallMode::SYNCHRON );
709 }
710 pViewSh->SetDrawShell(false);
711 pViewSh->SetDrawSelMode(false); // after Dispatcher-Execute
712
713 // select ranges
714
715 const ScRangeList& rRanges = pRangesImp->GetRangeList();
716 size_t nRangeCount = rRanges.size();
717 // for empty range list, remove selection (cursor remains where it was)
718 if ( nRangeCount == 0 )
719 pViewSh->Unmark();
720 else if ( nRangeCount == 1 )
721 pViewSh->MarkRange( rRanges[ 0 ] );
722 else
723 {
724 // multiselection
725
726 const ScRange & rFirst = rRanges[ 0 ];
727 if ( !lcl_TabInRanges( rViewData.GetTabNo(), rRanges ) )
728 pViewSh->SetTabNo( rFirst.aStart.Tab() );
729 pViewSh->DoneBlockMode();
730 pViewSh->InitOwnBlockMode( rFirst ); /* TODO: or even the overall range? */
731 rViewData.GetMarkData().MarkFromRangeList( rRanges, true );
732 pViewSh->MarkDataChanged();
733 rViewData.GetDocShell()->PostPaintGridAll(); // Marks (old&new)
734 pViewSh->AlignToCursor( rFirst.aStart.Col(), rFirst.aStart.Row(),
736 pViewSh->SetCursor( rFirst.aStart.Col(), rFirst.aStart.Row() );
737
739 }
740 bRet = true;
741 }
742 }
743 else if ( pShapeImp || xShapeColl.is() ) // Drawing-Layer
744 {
745 ScDrawView* pDrawView = pViewSh->GetScDrawView();
746 if (pDrawView)
747 {
748 pDrawView->ScEndTextEdit();
749 pDrawView->UnmarkAll();
750
751 if (pShapeImp) // single shape
752 {
753 SdrObject *pObj = pShapeImp->GetSdrObject();
754 if (pObj)
755 {
756 lcl_ShowObject( *pViewSh, *pDrawView, pObj );
757 SdrPageView* pPV = pDrawView->GetSdrPageView();
758 if ( pPV && pObj->getSdrPageFromSdrObject() == pPV->GetPage() )
759 {
760 pDrawView->MarkObj( pObj, pPV );
761 bRet = true;
762 }
763 }
764 }
765 else // Shape-Collection (xShapeColl is not 0)
766 {
767 // We'll switch to the sheet where the first object is
768 // and select all objects on that sheet
770
771 tools::Long nCount = xShapeColl->getCount();
772 if (nCount)
773 {
774 SdrPageView* pPV = nullptr;
775 bool bAllMarked(true);
776 for ( tools::Long i = 0; i < nCount; i++ )
777 {
778 uno::Reference<drawing::XShape> xShapeInt(xShapeColl->getByIndex(i), uno::UNO_QUERY);
779 if (xShapeInt.is())
780 {
781 SdrObject* pObj = SdrObject::getSdrObjectFromXShape( xShapeInt );
782 if (pObj)
783 {
784 if (!bDrawSelModeSet && (pObj->GetLayer() == SC_LAYER_BACK))
785 {
786 pViewSh->SetDrawSelMode(true);
787 pViewSh->UpdateLayerLocks();
788 bDrawSelModeSet = true;
789 }
790 if (!pPV) // first object
791 {
792 lcl_ShowObject( *pViewSh, *pDrawView, pObj );
793 pPV = pDrawView->GetSdrPageView();
794 }
795 if ( pPV && pObj->getSdrPageFromSdrObject() == pPV->GetPage() )
796 {
797 if (pDrawView->IsObjMarkable( pObj, pPV ))
798 pDrawView->MarkObj( pObj, pPV );
799 else
800 bAllMarked = false;
801 }
802 }
803 }
804 }
805 if (bAllMarked)
806 bRet = true;
807 }
808 else
809 bRet = true; // empty XShapes (all shapes are deselected)
810 }
811
812 if (bRet)
813 pViewSh->SetDrawShell(true);
814 }
815 }
816
817 if (!bRet)
818 throw lang::IllegalArgumentException();
819
820 return bRet;
821}
822
823uno::Reference<drawing::XShapes> ScTabViewShell::getSelectedXShapes()
824{
825 uno::Reference<drawing::XShapes> xShapes;
826 SdrView* pSdrView = GetScDrawView();
827 if (pSdrView)
828 {
829 const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
830 const size_t nMarkCount = rMarkList.GetMarkCount();
831 if (nMarkCount)
832 {
833 // generate ShapeCollection (like in SdXImpressView::getSelection in Draw)
834 // XInterfaceRef will be returned and it has to be UsrObject-XInterface
835 xShapes = drawing::ShapeCollection::create(comphelper::getProcessComponentContext());
836
837 for (size_t i = 0; i < nMarkCount; ++i)
838 {
839 SdrObject* pDrawObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
840 if (pDrawObj)
841 {
842 uno::Reference<drawing::XShape> xShape( pDrawObj->getUnoShape(), uno::UNO_QUERY );
843 if (xShape.is())
844 xShapes->add(xShape);
845 }
846 }
847 }
848 }
849 return xShapes;
850}
851
853{
854 SolarMutexGuard aGuard;
855 ScTabViewShell* pViewSh = GetViewShell();
857 if (pViewSh)
858 {
859 // is something selected in drawing layer?
860 uno::Reference<uno::XInterface> xRet(pViewSh->getSelectedXShapes());
861 if (xRet.is())
862 return uno::Any(xRet);
863
864 // otherwise sheet (cell) selection
865
866 ScViewData& rViewData = pViewSh->GetViewData();
867 ScDocShell* pDocSh = rViewData.GetDocShell();
868
869 const ScMarkData& rMark = rViewData.GetMarkData();
870 SCTAB nTabs = rMark.GetSelectCount();
871
872 ScRange aRange;
873 ScMarkType eMarkType = rViewData.GetSimpleArea(aRange);
874 if ( nTabs == 1 && (eMarkType == SC_MARK_SIMPLE) )
875 {
876 // tdf#147122 - return cell object when a simple selection is merged
877 ScDocument& rDoc = pDocSh->GetDocument();
878 const ScPatternAttr* pMarkPattern = rDoc.GetPattern(aRange.aStart);
879 if (aRange.aStart == aRange.aEnd
880 || (pMarkPattern
881 && pMarkPattern->GetItemSet().GetItemState(ATTR_MERGE, false)
882 == SfxItemState::SET))
883 pObj = new ScCellObj( pDocSh, aRange.aStart );
884 else
885 pObj = new ScCellRangeObj( pDocSh, aRange );
886 }
887 else if ( nTabs == 1 && (eMarkType == SC_MARK_SIMPLE_FILTERED) )
888 {
889 ScMarkData aFilteredMark( rMark );
890 ScViewUtil::UnmarkFiltered( aFilteredMark, pDocSh->GetDocument());
891 ScRangeList aRangeList;
892 aFilteredMark.FillRangeListWithMarks( &aRangeList, false);
893 // Theoretically a selection may start and end on a filtered row.
894 switch ( aRangeList.size() )
895 {
896 case 0:
897 // No unfiltered row, we have to return some object, so
898 // here is one with no ranges.
899 pObj = new ScCellRangesObj( pDocSh, aRangeList );
900 break;
901 case 1:
902 {
903 const ScRange& rRange = aRangeList[ 0 ];
904 if (rRange.aStart == rRange.aEnd)
905 pObj = new ScCellObj( pDocSh, rRange.aStart );
906 else
907 pObj = new ScCellRangeObj( pDocSh, rRange );
908 }
909 break;
910 default:
911 pObj = new ScCellRangesObj( pDocSh, aRangeList );
912 }
913 }
914 else // multiselection
915 {
916 ScRangeListRef xRanges;
917 rViewData.GetMultiArea( xRanges );
918
919 // if there are more sheets, copy ranges
921 if ( nTabs > 1 )
922 rMark.ExtendRangeListTables( xRanges.get() );
923
924 pObj = new ScCellRangesObj( pDocSh, *xRanges );
925 }
926
927 if ( !rMark.IsMarked() && !rMark.IsMultiMarked() )
928 {
929 // remember if the selection was from the cursor position without anything selected
930 // (used when rendering the selection)
931
932 pObj->SetCursorOnly( true );
933 }
934 }
935
936 return uno::Any(uno::Reference<uno::XInterface>(static_cast<cppu::OWeakObject*>(pObj.get())));
937}
938
939// XEnumerationAccess
940
941uno::Reference<container::XEnumeration> SAL_CALL ScTabViewObj::createEnumeration()
942{
943 SolarMutexGuard aGuard;
944 return new ScIndexEnumeration(this, "com.sun.star.sheet.SpreadsheetViewPanesEnumeration");
945}
946
947// XIndexAccess
948
949sal_Int32 SAL_CALL ScTabViewObj::getCount()
950{
951 SolarMutexGuard aGuard;
952 ScTabViewShell* pViewSh = GetViewShell();
953 sal_uInt16 nPanes = 0;
954 if (pViewSh)
955 {
956 nPanes = 1;
957 ScViewData& rViewData = pViewSh->GetViewData();
958 if ( rViewData.GetHSplitMode() != SC_SPLIT_NONE )
959 nPanes *= 2;
960 if ( rViewData.GetVSplitMode() != SC_SPLIT_NONE )
961 nPanes *= 2;
962 }
963 return nPanes;
964}
965
966uno::Any SAL_CALL ScTabViewObj::getByIndex( sal_Int32 nIndex )
967{
968 SolarMutexGuard aGuard;
969 uno::Reference<sheet::XViewPane> xPane(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex)));
970 if (!xPane.is())
971 throw lang::IndexOutOfBoundsException();
972
973 return uno::Any(xPane);
974}
975
977{
979}
980
982{
983 SolarMutexGuard aGuard;
984 return ( getCount() != 0 );
985}
986
987// XSpreadsheetView
988
990{
991 static const ScSplitPos ePosHV[4] =
993
994 ScTabViewShell* pViewSh = GetViewShell();
995 if (pViewSh)
996 {
997 ScSplitPos eWhich = SC_SPLIT_BOTTOMLEFT; // default position
998 bool bError = false;
999 ScViewData& rViewData = pViewSh->GetViewData();
1000 bool bHor = ( rViewData.GetHSplitMode() != SC_SPLIT_NONE );
1001 bool bVer = ( rViewData.GetVSplitMode() != SC_SPLIT_NONE );
1002 if ( bHor && bVer )
1003 {
1004 // bottom left, bottom right, top left, top right - like in Excel
1005 if ( nIndex < 4 )
1006 eWhich = ePosHV[nIndex];
1007 else
1008 bError = true;
1009 }
1010 else if ( bHor )
1011 {
1012 if ( nIndex > 1 )
1013 bError = true;
1014 else if ( nIndex == 1 )
1015 eWhich = SC_SPLIT_BOTTOMRIGHT;
1016 // otherwise SC_SPLIT_BOTTOMLEFT
1017 }
1018 else if ( bVer )
1019 {
1020 if ( nIndex > 1 )
1021 bError = true;
1022 else if ( nIndex == 0 )
1023 eWhich = SC_SPLIT_TOPLEFT;
1024 // otherwise SC_SPLIT_BOTTOMLEFT
1025 }
1026 else if ( nIndex > 0 )
1027 bError = true; // not split: only 0 is valid
1028
1029 if (!bError)
1030 return new ScViewPaneObj( pViewSh, sal::static_int_cast<sal_uInt16>(eWhich) );
1031 }
1032
1033 return nullptr;
1034}
1035
1036uno::Reference<sheet::XSpreadsheet> SAL_CALL ScTabViewObj::getActiveSheet()
1037{
1038 SolarMutexGuard aGuard;
1039 ScTabViewShell* pViewSh = GetViewShell();
1040 if (pViewSh)
1041 {
1042 ScViewData& rViewData = pViewSh->GetViewData();
1043 SCTAB nTab = rViewData.GetTabNo();
1044 return new ScTableSheetObj( rViewData.GetDocShell(), nTab );
1045 }
1046 return nullptr;
1047}
1048
1049// support expand (but not replace) the active sheet
1050void SAL_CALL ScTabViewObj::setActiveSheet( const uno::Reference<sheet::XSpreadsheet>& xActiveSheet )
1051{
1052 SolarMutexGuard aGuard;
1053 comphelper::ProfileZone aZone("setActiveSheet");
1054
1055 ScTabViewShell* pViewSh = GetViewShell();
1056 if ( !(pViewSh && xActiveSheet.is()) )
1057 return;
1058
1059 // XSpreadsheet and ScCellRangesBase -> has to be the same sheet
1060
1061 ScCellRangesBase* pRangesImp = dynamic_cast<ScCellRangesBase*>( xActiveSheet.get() );
1062 if ( pRangesImp && pViewSh->GetViewData().GetDocShell() == pRangesImp->GetDocShell() )
1063 {
1064 const ScRangeList& rRanges = pRangesImp->GetRangeList();
1065 if ( rRanges.size() == 1 )
1066 {
1067 SCTAB nNewTab = rRanges[ 0 ].aStart.Tab();
1068 if ( pViewSh->GetViewData().GetDocument().HasTable(nNewTab) )
1069 pViewSh->SetTabNo( nNewTab );
1070 }
1071 }
1072}
1073
1074uno::Reference< uno::XInterface > ScTabViewObj::GetClickedObject(const Point& rPoint) const
1075{
1076 uno::Reference< uno::XInterface > xTarget;
1077 if (GetViewShell())
1078 {
1079 SCCOL nX;
1080 SCROW nY;
1081 ScViewData& rData = GetViewShell()->GetViewData();
1082 ScSplitPos eSplitMode = rData.GetActivePart();
1083 SCTAB nTab(rData.GetTabNo());
1084 rData.GetPosFromPixel( rPoint.X(), rPoint.Y(), eSplitMode, nX, nY);
1085
1086 ScAddress aCellPos (nX, nY, nTab);
1087 rtl::Reference<ScCellObj> pCellObj = new ScCellObj(rData.GetDocShell(), aCellPos);
1088
1089 xTarget.set(uno::Reference<table::XCell>(pCellObj), uno::UNO_QUERY);
1090
1091 ScDocument& rDoc = rData.GetDocument();
1092 if (ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer())
1093 {
1094 SdrPage* pDrawPage = nullptr;
1095 if (pDrawLayer->HasObjects() && (pDrawLayer->GetPageCount() > nTab))
1096 pDrawPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
1097
1098 SdrView* pDrawView = GetViewShell()->GetScDrawView();
1099
1100 if (pDrawPage && pDrawView && pDrawView->GetSdrPageView())
1101 {
1102 vcl::Window* pActiveWin = rData.GetActiveWin();
1103 Point aPos = pActiveWin->PixelToLogic(rPoint);
1104
1105 sal_uInt16 nHitLog = static_cast<sal_uInt16>(pActiveWin->PixelToLogic(
1106 Size(pDrawView->GetHitTolerancePixel(),0)).Width());
1107
1108 const size_t nCount(pDrawPage->GetObjCount());
1109 bool bFound(false);
1110 for (size_t i = 0; i < nCount && !bFound; ++i)
1111 {
1112 SdrObject* pObj = pDrawPage->GetObj(i);
1113 if (pObj && SdrObjectPrimitiveHit(*pObj, aPos, nHitLog, *pDrawView->GetSdrPageView(), nullptr, false))
1114 {
1115 xTarget.set(pObj->getUnoShape(), uno::UNO_QUERY);
1116 bFound = true;
1117 }
1118 }
1119 }
1120 }
1121 }
1122 return xTarget;
1123}
1124
1126{
1127 if ( !aMouseClickHandlers.empty() )
1128 return true;
1129
1130 // also include sheet events, because MousePressed must be called for them
1131 ScViewData& rViewData = GetViewShell()->GetViewData();
1132 ScDocument& rDoc = rViewData.GetDocument();
1133 SCTAB nTab = rViewData.GetTabNo();
1134 return
1135 rDoc.HasSheetEventScript( nTab, ScSheetEventId::RIGHTCLICK, true ) ||
1137 rDoc.HasSheetEventScript( nTab, ScSheetEventId::SELECT, true );
1138
1139}
1140
1141bool ScTabViewObj::MousePressed( const awt::MouseEvent& e )
1142{
1143 bool bReturn(false);
1144 if ( e.Buttons == css::awt::MouseButton::LEFT )
1145 mbLeftMousePressed = true;
1146
1147 uno::Reference< uno::XInterface > xTarget = GetClickedObject(Point(e.X, e.Y));
1148 if (!aMouseClickHandlers.empty() && xTarget.is())
1149 {
1150 awt::EnhancedMouseEvent aMouseEvent;
1151
1152 aMouseEvent.Buttons = e.Buttons;
1153 aMouseEvent.X = e.X;
1154 aMouseEvent.Y = e.Y;
1155 aMouseEvent.ClickCount = e.ClickCount;
1156 aMouseEvent.PopupTrigger = e.PopupTrigger;
1157 aMouseEvent.Target = xTarget;
1158 aMouseEvent.Modifiers = e.Modifiers;
1159
1160 // Listener's handler may remove it from the listeners list
1161 for (size_t i = aMouseClickHandlers.size(); i > 0; --i)
1162 {
1163 try
1164 {
1165 if (!aMouseClickHandlers[i - 1]->mousePressed(aMouseEvent))
1166 bReturn = true;
1167 }
1168 catch ( uno::Exception& )
1169 {
1170 aMouseClickHandlers.erase(aMouseClickHandlers.begin() + (i - 1));
1171 }
1172 }
1173 }
1174
1175 // handle sheet events
1176 bool bDoubleClick = ( e.Buttons == awt::MouseButton::LEFT && e.ClickCount == 2 );
1177 bool bRightClick = ( e.Buttons == awt::MouseButton::RIGHT && e.ClickCount == 1 );
1178 if ( ( bDoubleClick || bRightClick ) && !bReturn && xTarget.is())
1179 {
1181
1182 ScTabViewShell* pViewSh = GetViewShell();
1183 ScViewData& rViewData = pViewSh->GetViewData();
1184 ScDocShell* pDocSh = rViewData.GetDocShell();
1185 ScDocument& rDoc = pDocSh->GetDocument();
1186 SCTAB nTab = rViewData.GetTabNo();
1187 const ScSheetEvents* pEvents = rDoc.GetSheetEvents(nTab);
1188 if (pEvents)
1189 {
1190 const OUString* pScript = pEvents->GetScript(nEvent);
1191 if (pScript)
1192 {
1193 // the macro parameter is the clicked object, as in the mousePressed call above
1194 uno::Sequence<uno::Any> aParams{ uno::Any(xTarget) };
1195
1196 uno::Any aRet;
1197 uno::Sequence<sal_Int16> aOutArgsIndex;
1198 uno::Sequence<uno::Any> aOutArgs;
1199
1200 /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
1201
1202 // look for a boolean return value of true
1203 bool bRetValue = false;
1204 if ((aRet >>= bRetValue) && bRetValue)
1205 bReturn = true;
1206 }
1207 }
1208
1209 // execute VBA event handler
1210 if (!bReturn && xTarget.is()) try
1211 {
1212 uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( rDoc.GetVbaEventProcessor(), uno::UNO_SET_THROW );
1213 // the parameter is the clicked object, as in the mousePressed call above
1214 uno::Sequence< uno::Any > aArgs{ uno::Any(xTarget) };
1215 xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( nEvent ), aArgs );
1216 }
1217 catch( util::VetoException& )
1218 {
1219 bReturn = true;
1220 }
1221 catch( uno::Exception& )
1222 {
1223 }
1224 }
1225
1226 return bReturn;
1227}
1228
1229bool ScTabViewObj::MouseReleased( const awt::MouseEvent& e )
1230{
1231 if ( e.Buttons == css::awt::MouseButton::LEFT )
1232 {
1233 try
1234 {
1235 ScTabViewShell* pViewSh = GetViewShell();
1236 ScViewData& rViewData = pViewSh->GetViewData();
1237 ScDocShell* pDocSh = rViewData.GetDocShell();
1238 ScDocument& rDoc = pDocSh->GetDocument();
1239 uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( rDoc.GetVbaEventProcessor(), uno::UNO_SET_THROW );
1240 uno::Sequence< uno::Any > aArgs{ getSelection() };
1241 xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( ScSheetEventId::SELECT ), aArgs );
1242 }
1243 catch( uno::Exception& )
1244 {
1245 }
1246 mbLeftMousePressed = false;
1247 }
1248
1249 bool bReturn(false);
1250
1251 if (!aMouseClickHandlers.empty())
1252 {
1253 uno::Reference< uno::XInterface > xTarget = GetClickedObject(Point(e.X, e.Y));
1254
1255 if (xTarget.is())
1256 {
1257 awt::EnhancedMouseEvent aMouseEvent;
1258
1259 aMouseEvent.Buttons = e.Buttons;
1260 aMouseEvent.X = e.X;
1261 aMouseEvent.Y = e.Y;
1262 aMouseEvent.ClickCount = e.ClickCount;
1263 aMouseEvent.PopupTrigger = e.PopupTrigger;
1264 aMouseEvent.Target = xTarget;
1265 aMouseEvent.Modifiers = e.Modifiers;
1266
1267 // Listener's handler may remove it from the listeners list
1268 for (size_t i = aMouseClickHandlers.size(); i > 0; --i)
1269 {
1270 try
1271 {
1272 if (!aMouseClickHandlers[i - 1]->mouseReleased( aMouseEvent ))
1273 bReturn = true;
1274 }
1275 catch ( uno::Exception& )
1276 {
1277 aMouseClickHandlers.erase(aMouseClickHandlers.begin() + (i - 1));
1278 }
1279 }
1280 }
1281 }
1282 return bReturn;
1283}
1284
1285// XEnhancedMouseClickBroadcaster
1286
1288{
1289 lang::EventObject aEvent;
1290 aEvent.Source = static_cast<cppu::OWeakObject*>(this);
1291 for (const auto& rListener : aMouseClickHandlers)
1292 {
1293 try
1294 {
1295 rListener->disposing(aEvent);
1296 }
1297 catch ( uno::Exception& )
1298 {
1299 }
1300 }
1301 aMouseClickHandlers.clear();
1302}
1303
1305{
1306 lang::EventObject aEvent;
1307 aEvent.Source = static_cast<cppu::OWeakObject*>(this);
1308 for (const auto& rListener : aActivationListeners)
1309 {
1310 try
1311 {
1312 rListener->disposing(aEvent);
1313 }
1314 catch ( uno::Exception& )
1315 {
1316 }
1317 }
1318 aActivationListeners.clear();
1319}
1320
1321void SAL_CALL ScTabViewObj::addEnhancedMouseClickHandler( const uno::Reference< awt::XEnhancedMouseClickHandler >& aListener )
1322{
1323 SolarMutexGuard aGuard;
1324
1325 if (aListener.is())
1326 {
1327 aMouseClickHandlers.push_back( aListener );
1328 }
1329}
1330
1331void SAL_CALL ScTabViewObj::removeEnhancedMouseClickHandler( const uno::Reference< awt::XEnhancedMouseClickHandler >& aListener )
1332{
1333 SolarMutexGuard aGuard;
1334 sal_uInt16 nCount = aMouseClickHandlers.size();
1335 aMouseClickHandlers.erase(
1336 std::remove(aMouseClickHandlers.begin(), aMouseClickHandlers.end(), aListener),
1337 aMouseClickHandlers.end());
1338 if (aMouseClickHandlers.empty() && (nCount > 0)) // only if last listener removed
1340}
1341
1342// XActivationBroadcaster
1343
1344void SAL_CALL ScTabViewObj::addActivationEventListener( const uno::Reference< sheet::XActivationEventListener >& aListener )
1345{
1346 SolarMutexGuard aGuard;
1347
1348 if (aListener.is())
1349 {
1350 aActivationListeners.push_back( aListener );
1351 }
1352}
1353
1354void SAL_CALL ScTabViewObj::removeActivationEventListener( const uno::Reference< sheet::XActivationEventListener >& aListener )
1355{
1356 SolarMutexGuard aGuard;
1357 sal_uInt16 nCount = aActivationListeners.size();
1359 std::remove(aActivationListeners.begin(), aActivationListeners.end(), aListener),
1360 aActivationListeners.end());
1361 if (aActivationListeners.empty() && (nCount > 0)) // only if last listener removed
1363}
1364
1365sal_Int16 ScTabViewObj::GetZoom() const
1366{
1367 ScTabViewShell* pViewSh = GetViewShell();
1368 if (pViewSh)
1369 {
1370 const Fraction& rZoomY = pViewSh->GetViewData().GetZoomY(); // Y will be shown
1371 return static_cast<sal_Int16>(tools::Long( rZoomY * 100 ));
1372 }
1373 return 0;
1374}
1375
1376void ScTabViewObj::SetZoom(sal_Int16 nZoom)
1377{
1378 ScTabViewShell* pViewSh = GetViewShell();
1379 if (!pViewSh)
1380 return;
1381
1382 if ( nZoom != GetZoom() && nZoom != 0 )
1383 {
1384 if (!pViewSh->GetViewData().IsPagebreakMode())
1385 {
1386 ScModule* pScMod = SC_MOD();
1387 ScAppOptions aNewOpt(pScMod->GetAppOptions());
1388 aNewOpt.SetZoom( nZoom );
1389 aNewOpt.SetZoomType( pViewSh->GetViewData().GetView()->GetZoomType() );
1390 pScMod->SetAppOptions( aNewOpt );
1391 }
1392 }
1393 Fraction aFract( nZoom, 100 );
1394 pViewSh->SetZoom( aFract, aFract, true );
1395 pViewSh->PaintGrid();
1396 pViewSh->PaintTop();
1397 pViewSh->PaintLeft();
1398 pViewSh->GetViewFrame().GetBindings().Invalidate( SID_ATTR_ZOOM );
1399 pViewSh->GetViewFrame().GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
1400 pViewSh->GetViewFrame().GetBindings().Invalidate(SID_ZOOM_IN);
1401 pViewSh->GetViewFrame().GetBindings().Invalidate(SID_ZOOM_OUT);
1402}
1403
1405{
1406 sal_Int16 aZoomType = view::DocumentZoomType::OPTIMAL;
1407 ScTabViewShell* pViewSh = GetViewShell();
1408 if (pViewSh)
1409 {
1410 SvxZoomType eZoomType = pViewSh->GetViewData().GetView()->GetZoomType();
1411 switch (eZoomType)
1412 {
1413 case SvxZoomType::PERCENT:
1414 aZoomType = view::DocumentZoomType::BY_VALUE;
1415 break;
1416 case SvxZoomType::OPTIMAL:
1417 aZoomType = view::DocumentZoomType::OPTIMAL;
1418 break;
1419 case SvxZoomType::WHOLEPAGE:
1420 aZoomType = view::DocumentZoomType::ENTIRE_PAGE;
1421 break;
1422 case SvxZoomType::PAGEWIDTH:
1423 aZoomType = view::DocumentZoomType::PAGE_WIDTH;
1424 break;
1425 case SvxZoomType::PAGEWIDTH_NOBORDER:
1426 aZoomType = view::DocumentZoomType::PAGE_WIDTH_EXACT;
1427 break;
1428 }
1429 }
1430 return aZoomType;
1431}
1432
1433void ScTabViewObj::SetZoomType(sal_Int16 aZoomType)
1434{
1435 ScTabViewShell* pViewSh = GetViewShell();
1436 if (!pViewSh)
1437 return;
1438
1439 ScDBFunc* pView = pViewSh->GetViewData().GetView();
1440 if (!pView)
1441 return;
1442
1443 SvxZoomType eZoomType;
1444 switch (aZoomType)
1445 {
1446 case view::DocumentZoomType::BY_VALUE:
1447 eZoomType = SvxZoomType::PERCENT;
1448 break;
1449 case view::DocumentZoomType::OPTIMAL:
1450 eZoomType = SvxZoomType::OPTIMAL;
1451 break;
1452 case view::DocumentZoomType::ENTIRE_PAGE:
1453 eZoomType = SvxZoomType::WHOLEPAGE;
1454 break;
1455 case view::DocumentZoomType::PAGE_WIDTH:
1456 eZoomType = SvxZoomType::PAGEWIDTH;
1457 break;
1458 case view::DocumentZoomType::PAGE_WIDTH_EXACT:
1459 eZoomType = SvxZoomType::PAGEWIDTH_NOBORDER;
1460 break;
1461 default:
1462 eZoomType = SvxZoomType::OPTIMAL;
1463 }
1464 sal_Int16 nZoom(GetZoom());
1465 sal_Int16 nOldZoom(nZoom);
1466 if ( eZoomType == SvxZoomType::PERCENT )
1467 {
1468 if ( nZoom < MINZOOM ) nZoom = MINZOOM;
1469 if ( nZoom > MAXZOOM ) nZoom = MAXZOOM;
1470 }
1471 else
1472 nZoom = pView->CalcZoom( eZoomType, nOldZoom );
1473
1474 switch ( eZoomType )
1475 {
1476 case SvxZoomType::WHOLEPAGE:
1477 case SvxZoomType::PAGEWIDTH:
1478 pView->SetZoomType( eZoomType, true );
1479 break;
1480
1481 default:
1482 pView->SetZoomType( SvxZoomType::PERCENT, true );
1483 }
1484 SetZoom( nZoom );
1485}
1486
1488{
1489 SolarMutexGuard aGuard;
1490 // what menu slot SID_WINDOW_SPLIT does
1491
1492 ScTabViewShell* pViewSh = GetViewShell();
1493 if (pViewSh)
1494 {
1495 ScViewData& rViewData = pViewSh->GetViewData();
1496 return ( rViewData.GetHSplitMode() == SC_SPLIT_NORMAL ||
1497 rViewData.GetVSplitMode() == SC_SPLIT_NORMAL );
1498 }
1499
1500 return false;
1501}
1502
1504{
1505 SolarMutexGuard aGuard;
1506 // what menu slot SID_WINDOW_FIX does
1507
1508 ScTabViewShell* pViewSh = GetViewShell();
1509 if (pViewSh)
1510 {
1511 ScViewData& rViewData = pViewSh->GetViewData();
1512 return ( rViewData.GetHSplitMode() == SC_SPLIT_FIX ||
1513 rViewData.GetVSplitMode() == SC_SPLIT_FIX );
1514 }
1515
1516 return false;
1517}
1518
1520{
1521 SolarMutexGuard aGuard;
1522 ScTabViewShell* pViewSh = GetViewShell();
1523 if (pViewSh)
1524 {
1525 ScViewData& rViewData = pViewSh->GetViewData();
1526 if ( rViewData.GetHSplitMode() != SC_SPLIT_NONE )
1527 return rViewData.GetHSplitPos();
1528 }
1529 return 0;
1530}
1531
1533{
1534 SolarMutexGuard aGuard;
1535 ScTabViewShell* pViewSh = GetViewShell();
1536 if (pViewSh)
1537 {
1538 ScViewData& rViewData = pViewSh->GetViewData();
1539 if ( rViewData.GetVSplitMode() != SC_SPLIT_NONE )
1540 return rViewData.GetVSplitPos();
1541 }
1542 return 0;
1543}
1544
1546{
1547 SolarMutexGuard aGuard;
1548 ScTabViewShell* pViewSh = GetViewShell();
1549 if (pViewSh)
1550 {
1551 ScViewData& rViewData = pViewSh->GetViewData();
1552 if ( rViewData.GetHSplitMode() != SC_SPLIT_NONE )
1553 {
1554 tools::Long nSplit = rViewData.GetHSplitPos();
1555
1557 if ( rViewData.GetVSplitMode() != SC_SPLIT_NONE )
1559
1560 SCCOL nCol;
1561 SCROW nRow;
1562 rViewData.GetPosFromPixel( nSplit, 0, ePos, nCol, nRow, false );
1563 if ( nCol > 0 )
1564 return nCol;
1565 }
1566 }
1567 return 0;
1568}
1569
1570sal_Int32 SAL_CALL ScTabViewObj::getSplitRow()
1571{
1572 SolarMutexGuard aGuard;
1573 ScTabViewShell* pViewSh = GetViewShell();
1574 if (pViewSh)
1575 {
1576 ScViewData& rViewData = pViewSh->GetViewData();
1577 if ( rViewData.GetVSplitMode() != SC_SPLIT_NONE )
1578 {
1579 tools::Long nSplit = rViewData.GetVSplitPos();
1580
1581 // split vertically
1582 SCCOL nCol;
1583 SCROW nRow;
1584 rViewData.GetPosFromPixel( 0, nSplit, SC_SPLIT_TOPLEFT, nCol, nRow, false );
1585 if ( nRow > 0 )
1586 return nRow;
1587 }
1588 }
1589 return 0;
1590}
1591
1592void SAL_CALL ScTabViewObj::splitAtPosition( sal_Int32 nPixelX, sal_Int32 nPixelY )
1593{
1594 SolarMutexGuard aGuard;
1595 ScTabViewShell* pViewSh = GetViewShell();
1596 if (pViewSh)
1597 {
1598 pViewSh->SplitAtPixel( Point( nPixelX, nPixelY ) );
1599 pViewSh->FreezeSplitters( false );
1600 pViewSh->InvalidateSplit();
1601 }
1602}
1603
1604void SAL_CALL ScTabViewObj::freezeAtPosition( sal_Int32 nColumns, sal_Int32 nRows )
1605{
1606 SolarMutexGuard aGuard;
1607 ScTabViewShell* pViewSh = GetViewShell();
1608 if (!pViewSh)
1609 return;
1610
1611 // first, remove them all -> no stress with scrolling in the meantime
1612
1613 pViewSh->RemoveSplit();
1614
1615 Point aWinStart;
1617 if (pWin)
1618 aWinStart = pWin->GetPosPixel();
1619
1620 ScViewData& rViewData = pViewSh->GetViewData();
1621 Point aSplit(rViewData.GetScrPos( static_cast<SCCOL>(nColumns), static_cast<SCROW>(nRows), SC_SPLIT_BOTTOMLEFT, true ));
1622 aSplit += aWinStart;
1623
1624 pViewSh->SplitAtPixel( aSplit );
1625 pViewSh->FreezeSplitters( true );
1626 pViewSh->InvalidateSplit();
1627}
1628
1630 const uno::Reference<view::XSelectionChangeListener>& xListener )
1631{
1632 SolarMutexGuard aGuard;
1633 aSelectionChgListeners.push_back( xListener );
1634}
1635
1637 const uno::Reference< view::XSelectionChangeListener >& xListener )
1638{
1639 SolarMutexGuard aGuard;
1640 auto it = std::find(aSelectionChgListeners.begin(), aSelectionChgListeners.end(), xListener);
1641 if (it != aSelectionChgListeners.end())
1642 aSelectionChgListeners.erase(it);
1643}
1644
1646{
1647 // Selection changed so end any style preview
1648 // Note: executing this slot through the dispatcher
1649 // will cause the style dialog to be raised so we go
1650 // direct here
1651 ScFormatShell aShell( GetViewShell()->GetViewData() );
1652 SfxAllItemSet reqList( SfxGetpApp()->GetPool() );
1653 SfxRequest aReq( SID_STYLE_END_PREVIEW, SfxCallMode::SLOT, reqList );
1654 aShell.ExecuteStyle( aReq );
1655 lang::EventObject aEvent;
1656 aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
1657 for (const auto& rListener : aSelectionChgListeners)
1658 rListener->selectionChanged( aEvent );
1659
1660 // handle sheet events
1661 ScTabViewShell* pViewSh = GetViewShell();
1662 ScViewData& rViewData = pViewSh->GetViewData();
1663 ScDocShell* pDocSh = rViewData.GetDocShell();
1664 ScDocument& rDoc = pDocSh->GetDocument();
1665 SCTAB nTab = rViewData.GetTabNo();
1666 const ScSheetEvents* pEvents = rDoc.GetSheetEvents(nTab);
1667 if (pEvents)
1668 {
1669 const OUString* pScript = pEvents->GetScript(ScSheetEventId::SELECT);
1670 if (pScript)
1671 {
1672 // the macro parameter is the selection as returned by getSelection
1673 uno::Sequence<uno::Any> aParams{ getSelection() };
1674 uno::Any aRet;
1675 uno::Sequence<sal_Int16> aOutArgsIndex;
1676 uno::Sequence<uno::Any> aOutArgs;
1677 /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
1678 }
1679 }
1680
1681 SfxApplication::Get()->Broadcast( SfxHint( SfxHintId::ScSelectionChanged ) );
1682
1683 if ( mbLeftMousePressed ) // selection still in progress
1684 return;
1685
1686 try
1687 {
1688 uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( rDoc.GetVbaEventProcessor(), uno::UNO_SET_THROW );
1689 uno::Sequence< uno::Any > aArgs{ getSelection() };
1690 xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( ScSheetEventId::SELECT ), aArgs );
1691 }
1692 catch( uno::Exception& )
1693 {
1694 }
1695}
1696
1697// XPropertySet (view options)
1699
1700uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTabViewObj::getPropertySetInfo()
1701{
1702 SolarMutexGuard aGuard;
1703 static uno::Reference<beans::XPropertySetInfo> aRef(
1705 return aRef;
1706}
1707
1709 const OUString& aPropertyName, const uno::Any& aValue )
1710{
1711 SolarMutexGuard aGuard;
1712
1713 if ( aPropertyName == SC_UNO_FILTERED_RANGE_SELECTION )
1714 {
1716 return;
1717 }
1718
1719 ScTabViewShell* pViewSh = GetViewShell();
1720 if (!pViewSh)
1721 return;
1722
1723 ScViewData& rViewData = pViewSh->GetViewData();
1724 const ScViewOptions& rOldOpt = pViewSh->GetViewData().GetOptions();
1725 ScViewOptions aNewOpt(rOldOpt);
1726
1727 if ( aPropertyName == SC_UNO_COLROWHDR || aPropertyName == OLD_UNO_COLROWHDR )
1729 else if ( aPropertyName == SC_UNO_HORSCROLL || aPropertyName == OLD_UNO_HORSCROLL )
1731 else if ( aPropertyName == SC_UNO_OUTLSYMB || aPropertyName == OLD_UNO_OUTLSYMB )
1733 else if ( aPropertyName == SC_UNO_SHEETTABS || aPropertyName == OLD_UNO_SHEETTABS )
1735 else if ( aPropertyName == SC_UNO_SHOWANCHOR )
1737 else if ( aPropertyName == SC_UNO_SHOWFORM )
1739 else if ( aPropertyName == SC_UNO_SHOWGRID )
1741 else if ( aPropertyName == SC_UNO_SHOWHELP )
1743 else if ( aPropertyName == SC_UNO_SHOWNOTES )
1745 else if ( aPropertyName == SC_UNO_SHOWFORMULASMARKS )
1747 else if ( aPropertyName == SC_UNO_SHOWPAGEBR )
1749 else if ( aPropertyName == SC_UNO_SHOWZERO )
1751 else if ( aPropertyName == SC_UNO_VALUEHIGH || aPropertyName == OLD_UNO_VALUEHIGH )
1753 else if ( aPropertyName == SC_UNO_VERTSCROLL || aPropertyName == OLD_UNO_VERTSCROLL )
1755 else if ( aPropertyName == SC_UNO_SHOWOBJ )
1756 {
1757 sal_Int16 nIntVal = 0;
1758 if ( aValue >>= nIntVal )
1759 {
1760 //#i80528# adapt to new range eventually
1761 if(sal_Int16(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int16(VOBJ_MODE_SHOW);
1762
1763 aNewOpt.SetObjMode( VOBJ_TYPE_OLE, static_cast<ScVObjMode>(nIntVal));
1764 }
1765 }
1766 else if ( aPropertyName == SC_UNO_SHOWCHARTS )
1767 {
1768 sal_Int16 nIntVal = 0;
1769 if ( aValue >>= nIntVal )
1770 {
1771 //#i80528# adapt to new range eventually
1772 if(sal_Int16(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int16(VOBJ_MODE_SHOW);
1773
1774 aNewOpt.SetObjMode( VOBJ_TYPE_CHART, static_cast<ScVObjMode>(nIntVal));
1775 }
1776 }
1777 else if ( aPropertyName == SC_UNO_SHOWDRAW )
1778 {
1779 sal_Int16 nIntVal = 0;
1780 if ( aValue >>= nIntVal )
1781 {
1782 //#i80528# adapt to new range eventually
1783 if(sal_Int16(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int16(VOBJ_MODE_SHOW);
1784
1785 aNewOpt.SetObjMode( VOBJ_TYPE_DRAW, static_cast<ScVObjMode>(nIntVal));
1786 }
1787 }
1788 else if ( aPropertyName == SC_UNO_GRIDCOLOR )
1789 {
1790 Color nIntVal;
1791 if ( aValue >>= nIntVal )
1792 aNewOpt.SetGridColor( nIntVal, OUString() );
1793 }
1794 else if ( aPropertyName == SC_UNO_ZOOMTYPE )
1795 {
1796 sal_Int16 nIntVal = 0;
1797 if ( aValue >>= nIntVal )
1798 SetZoomType(nIntVal);
1799 }
1800 else if ( aPropertyName == SC_UNO_ZOOMVALUE )
1801 {
1802 sal_Int16 nIntVal = 0;
1803 if ( aValue >>= nIntVal )
1804 SetZoom(nIntVal);
1805 }
1806 else if ( aPropertyName == SC_UNO_FORMULABARHEIGHT )
1807 {
1808 sal_Int16 nIntVal = ScUnoHelpFunctions::GetInt16FromAny(aValue);
1809 if (nIntVal > 0)
1810 {
1811 rViewData.SetFormulaBarLines(nIntVal);
1812 // Notify formula bar about changed lines
1813 ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl();
1814 if (pInputHdl)
1815 {
1816 ScInputWindow* pInputWin = pInputHdl->GetInputWindow();
1817 if (pInputWin)
1818 pInputWin->NumLinesChanged();
1819 }
1820 }
1821 }
1822
1823 // Options are set on the view and document (for new views),
1824 // so that they remain during saving.
1827
1828 if ( aNewOpt == rOldOpt )
1829 return;
1830
1831 rViewData.SetOptions( aNewOpt );
1832 rViewData.GetDocument().SetViewOptions( aNewOpt );
1833 rViewData.GetDocShell()->SetDocumentModified();
1834
1835 pViewSh->UpdateFixPos();
1836 pViewSh->PaintGrid();
1837 pViewSh->PaintTop();
1838 pViewSh->PaintLeft();
1839 pViewSh->PaintExtras();
1840 pViewSh->InvalidateBorder();
1841
1842 SfxBindings& rBindings = pViewSh->GetViewFrame().GetBindings();
1843 rBindings.Invalidate( FID_TOGGLEHEADERS ); // -> check in menu
1844 rBindings.Invalidate( FID_TOGGLESYNTAX );
1845}
1846
1847uno::Any SAL_CALL ScTabViewObj::getPropertyValue( const OUString& aPropertyName )
1848{
1849 SolarMutexGuard aGuard;
1850 uno::Any aRet;
1851
1852 if ( aPropertyName == SC_UNO_FILTERED_RANGE_SELECTION )
1853 {
1854 aRet <<= bFilteredRangeSelection;
1855 return aRet;
1856 }
1857
1858 ScTabViewShell* pViewSh = GetViewShell();
1859 if (pViewSh)
1860 {
1861 ScViewData& rViewData = pViewSh->GetViewData();
1862 const ScViewOptions& rOpt = rViewData.GetOptions();
1863
1864 if ( aPropertyName == SC_UNO_COLROWHDR || aPropertyName == OLD_UNO_COLROWHDR )
1865 aRet <<= rOpt.GetOption( VOPT_HEADER );
1866 else if ( aPropertyName == SC_UNO_HORSCROLL || aPropertyName == OLD_UNO_HORSCROLL )
1867 aRet <<= rOpt.GetOption( VOPT_HSCROLL );
1868 else if ( aPropertyName == SC_UNO_OUTLSYMB || aPropertyName == OLD_UNO_OUTLSYMB )
1869 aRet <<= rOpt.GetOption( VOPT_OUTLINER );
1870 else if ( aPropertyName == SC_UNO_SHEETTABS || aPropertyName == OLD_UNO_SHEETTABS )
1871 aRet <<= rOpt.GetOption( VOPT_TABCONTROLS );
1872 else if ( aPropertyName == SC_UNO_SHOWANCHOR ) aRet <<= rOpt.GetOption( VOPT_ANCHOR );
1873 else if ( aPropertyName == SC_UNO_SHOWFORM ) aRet <<= rOpt.GetOption( VOPT_FORMULAS );
1874 else if ( aPropertyName == SC_UNO_SHOWGRID ) aRet <<= rOpt.GetOption( VOPT_GRID );
1875 else if ( aPropertyName == SC_UNO_SHOWHELP ) aRet <<= rOpt.GetOption( VOPT_HELPLINES );
1876 else if ( aPropertyName == SC_UNO_SHOWNOTES ) aRet <<= rOpt.GetOption( VOPT_NOTES );
1877 else if ( aPropertyName == SC_UNO_SHOWFORMULASMARKS ) aRet <<= rOpt.GetOption( VOPT_FORMULAS_MARKS );
1878 else if ( aPropertyName == SC_UNO_SHOWPAGEBR ) aRet <<= rOpt.GetOption( VOPT_PAGEBREAKS );
1879 else if ( aPropertyName == SC_UNO_SHOWZERO ) aRet <<= rOpt.GetOption( VOPT_NULLVALS );
1880 else if ( aPropertyName == SC_UNO_VALUEHIGH || aPropertyName == OLD_UNO_VALUEHIGH )
1881 aRet <<= rOpt.GetOption( VOPT_SYNTAX );
1882 else if ( aPropertyName == SC_UNO_VERTSCROLL || aPropertyName == OLD_UNO_VERTSCROLL )
1883 aRet <<= rOpt.GetOption( VOPT_VSCROLL );
1884 else if ( aPropertyName == SC_UNO_SHOWOBJ ) aRet <<= static_cast<sal_Int16>( rOpt.GetObjMode( VOBJ_TYPE_OLE ) );
1885 else if ( aPropertyName == SC_UNO_SHOWCHARTS ) aRet <<= static_cast<sal_Int16>( rOpt.GetObjMode( VOBJ_TYPE_CHART ) );
1886 else if ( aPropertyName == SC_UNO_SHOWDRAW ) aRet <<= static_cast<sal_Int16>( rOpt.GetObjMode( VOBJ_TYPE_DRAW ) );
1887 else if ( aPropertyName == SC_UNO_GRIDCOLOR ) aRet <<= rOpt.GetGridColor();
1888 else if ( aPropertyName == SC_UNO_VISAREA ) aRet <<= GetVisArea();
1889 else if ( aPropertyName == SC_UNO_ZOOMTYPE ) aRet <<= GetZoomType();
1890 else if ( aPropertyName == SC_UNO_ZOOMVALUE ) aRet <<= GetZoom();
1891 else if ( aPropertyName == SC_UNO_FORMULABARHEIGHT ) aRet <<= rViewData.GetFormulaBarLines();
1892 else if ( aPropertyName == SC_UNO_VISAREASCREEN )
1893 {
1894 vcl::Window* pActiveWin = rViewData.GetActiveWin();
1895 if ( pActiveWin )
1896 {
1897 tools::Rectangle aRect = pActiveWin->GetWindowExtentsRelative( nullptr );
1898 aRet <<= AWTRectangle( aRect );
1899 }
1900 }
1901 }
1902
1903 return aRet;
1904}
1905
1906void SAL_CALL ScTabViewObj::addPropertyChangeListener( const OUString& /* aPropertyName */,
1907 const uno::Reference<beans::XPropertyChangeListener >& xListener )
1908{
1909 SolarMutexGuard aGuard;
1910 aPropertyChgListeners.push_back( xListener );
1911}
1912
1913void SAL_CALL ScTabViewObj::removePropertyChangeListener( const OUString& /* aPropertyName */,
1914 const uno::Reference<beans::XPropertyChangeListener >& xListener )
1915{
1916 SolarMutexGuard aGuard;
1917 auto it = std::find(aPropertyChgListeners.begin(), aPropertyChgListeners.end(), xListener);
1918 if (it != aPropertyChgListeners.end())
1919 aPropertyChgListeners.erase(it);
1920}
1921
1922void SAL_CALL ScTabViewObj::addVetoableChangeListener( const OUString& /* PropertyName */,
1923 const uno::Reference<beans::XVetoableChangeListener >& /* aListener */ )
1924{
1925}
1926
1927void SAL_CALL ScTabViewObj::removeVetoableChangeListener( const OUString& /* PropertyName */,
1928 const uno::Reference<beans::XVetoableChangeListener >& /* aListener */ )
1929{
1930}
1931
1933{
1934 beans::PropertyChangeEvent aEvent;
1935 aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
1936 for (const auto& rListener : aPropertyChgListeners)
1937 rListener->propertyChange( aEvent );
1938}
1939
1940// XRangeSelection
1941
1943 const uno::Sequence<beans::PropertyValue>& aArguments )
1944{
1945 SolarMutexGuard aGuard;
1946 ScTabViewShell* pViewSh = GetViewShell();
1947 if (!pViewSh)
1948 return;
1949
1950 OUString aInitVal, aTitle;
1951 bool bCloseOnButtonUp = false;
1952 bool bSingleCell = false;
1953 bool bMultiSelection = false;
1954
1955 OUString aStrVal;
1956 for (const beans::PropertyValue& rProp : aArguments)
1957 {
1958 OUString aPropName(rProp.Name);
1959
1961 bCloseOnButtonUp = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
1962 else if (aPropName == SC_UNONAME_TITLE )
1963 {
1964 if ( rProp.Value >>= aStrVal )
1965 aTitle = aStrVal;
1966 }
1967 else if (aPropName == SC_UNONAME_INITVAL )
1968 {
1969 if ( rProp.Value >>= aStrVal )
1970 aInitVal = aStrVal;
1971 }
1972 else if (aPropName == SC_UNONAME_SINGLECELL )
1973 bSingleCell = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
1974 else if (aPropName == SC_UNONAME_MULTISEL )
1975 bMultiSelection = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
1976 }
1977
1978 pViewSh->StartSimpleRefDialog( aTitle, aInitVal, bCloseOnButtonUp, bSingleCell, bMultiSelection );
1979}
1980
1982{
1983 SolarMutexGuard aGuard;
1984 ScTabViewShell* pViewSh = GetViewShell();
1985 if (pViewSh)
1986 pViewSh->StopSimpleRefDialog();
1987}
1988
1990 const uno::Reference<sheet::XRangeSelectionListener>& xListener )
1991{
1992 SolarMutexGuard aGuard;
1993 aRangeSelListeners.push_back( xListener );
1994}
1995
1997 const uno::Reference<sheet::XRangeSelectionListener>& xListener )
1998{
1999 SolarMutexGuard aGuard;
2000 auto it = std::find(aRangeSelListeners.begin(), aRangeSelListeners.end(), xListener);
2001 if (it != aRangeSelListeners.end())
2002 aRangeSelListeners.erase(it);
2003}
2004
2006 const uno::Reference<sheet::XRangeSelectionChangeListener>& xListener )
2007{
2008 SolarMutexGuard aGuard;
2009 aRangeChgListeners.push_back( xListener );
2010}
2011
2013 const uno::Reference<sheet::XRangeSelectionChangeListener>& xListener )
2014{
2015 SolarMutexGuard aGuard;
2016 auto it = std::find(aRangeChgListeners.begin(), aRangeChgListeners.end(), xListener);
2017 if (it != aRangeChgListeners.end())
2018 aRangeChgListeners.erase(it);
2019}
2020
2021void ScTabViewObj::RangeSelDone( const OUString& rText )
2022{
2023 sheet::RangeSelectionEvent aEvent;
2024 aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
2025 aEvent.RangeDescriptor = rText;
2026
2027 // copy on the stack because listener could remove itself
2028 auto const listeners(aRangeSelListeners);
2029
2030 for (const auto& rListener : listeners)
2031 rListener->done( aEvent );
2032}
2033
2034void ScTabViewObj::RangeSelAborted( const OUString& rText )
2035{
2036 sheet::RangeSelectionEvent aEvent;
2037 aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
2038 aEvent.RangeDescriptor = rText;
2039
2040 // copy on the stack because listener could remove itself
2041 auto const listeners(aRangeSelListeners);
2042
2043 for (const auto& rListener : listeners)
2044 rListener->aborted( aEvent );
2045}
2046
2047void ScTabViewObj::RangeSelChanged( const OUString& rText )
2048{
2049 sheet::RangeSelectionEvent aEvent;
2050 aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
2051 aEvent.RangeDescriptor = rText;
2052
2053 // copy on the stack because listener could remove itself
2054 auto const listener(aRangeChgListeners);
2055
2056 for (const auto& rListener : listener)
2057 rListener->descriptorChanged( aEvent );
2058}
2059
2060// XServiceInfo
2062{
2063 return "ScTabViewObj";
2064}
2065
2066sal_Bool SAL_CALL ScTabViewObj::supportsService( const OUString& rServiceName )
2067{
2068 return cppu::supportsService(this, rServiceName);
2069}
2070
2071uno::Sequence<OUString> SAL_CALL ScTabViewObj::getSupportedServiceNames()
2072{
2074}
2075
2076// XUnoTunnel
2077
2078css::uno::Reference< css::datatransfer::XTransferable > SAL_CALL ScTabViewObj::getTransferable()
2079{
2080 SolarMutexGuard aGuard;
2081 ScEditShell* pShell = dynamic_cast<ScEditShell*>( GetViewShell()->GetViewFrame().GetDispatcher()->GetShell(0) );
2082 if (pShell)
2083 return pShell->GetEditView()->GetTransferable();
2084
2086 if (pTextShell)
2087 {
2088 ScViewData& rViewData = GetViewShell()->GetViewData();
2089 ScDrawView* pView = rViewData.GetScDrawView();
2090 OutlinerView* pOutView = pView->GetTextEditOutlinerView();
2091 if (pOutView)
2092 return pOutView->GetEditView().GetTransferable();
2093 }
2094
2095 ScDrawShell* pDrawShell = dynamic_cast<ScDrawShell*>( GetViewShell()->GetViewFrame().GetDispatcher()->GetShell(0) );
2096 if (pDrawShell)
2097 return pDrawShell->GetDrawView()->CopyToTransferable();
2098
2099 return GetViewShell()->CopyToTransferable();
2100}
2101
2102void SAL_CALL ScTabViewObj::insertTransferable( const css::uno::Reference< css::datatransfer::XTransferable >& xTrans )
2103{
2104 SolarMutexGuard aGuard;
2105 ScEditShell* pShell = dynamic_cast<ScEditShell*>( GetViewShell()->GetViewFrame().GetDispatcher()->GetShell(0) );
2106 if (pShell)
2107 pShell->GetEditView()->InsertText( xTrans, OUString(), false );
2108 else
2109 {
2111 if (pTextShell)
2112 {
2113 ScViewData& rViewData = GetViewShell()->GetViewData();
2114 ScDrawView* pView = rViewData.GetScDrawView();
2115 OutlinerView* pOutView = pView->GetTextEditOutlinerView();
2116 if ( pOutView )
2117 {
2118 pOutView->GetEditView().InsertText( xTrans, OUString(), false );
2119 return;
2120 }
2121 }
2122
2124 }
2125}
2126
2127namespace {
2128
2129uno::Sequence<sal_Int32> toSequence(const ScMarkData::MarkedTabsType& rSelected)
2130{
2131 uno::Sequence<sal_Int32> aRet(rSelected.size());
2132 auto aRetRange = asNonConstRange(aRet);
2133 size_t i = 0;
2134 for (const auto& rTab : rSelected)
2135 {
2136 aRetRange[i] = static_cast<sal_Int32>(rTab);
2137 ++i;
2138 }
2139
2140 return aRet;
2141}
2142
2143}
2144
2145uno::Sequence<sal_Int32> ScTabViewObj::getSelectedSheets()
2146{
2147 ScTabViewShell* pViewSh = GetViewShell();
2148 if (!pViewSh)
2149 return uno::Sequence<sal_Int32>();
2150
2151 ScViewData& rViewData = pViewSh->GetViewData();
2152
2153 // #i95280# when printing from the shell, the view is never activated,
2154 // so Excel view settings must also be evaluated here.
2155 ScExtDocOptions* pExtOpt = rViewData.GetDocument().GetExtDocOptions();
2156 if (pExtOpt && pExtOpt->IsChanged())
2157 {
2158 pViewSh->GetViewData().ReadExtOptions(*pExtOpt); // Excel view settings
2159 pViewSh->SetTabNo(pViewSh->GetViewData().GetTabNo(), true);
2160 pExtOpt->SetChanged(false);
2161 }
2162
2163 return toSequence(rViewData.GetMarkData().GetSelectedTabs());
2164}
2165
2167 SfxBaseController(pViewSh),
2168 mpViewShell(pViewSh)
2169{
2170 if (mpViewShell)
2172}
2173
2175{
2176 if (mpViewShell)
2178}
2179
2181{
2182 SC_QUERYINTERFACE(sheet::XSelectedSheetsSupplier)
2183 return SfxBaseController::queryInterface(rType);
2184}
2185
2187{
2188 SfxBaseController::acquire();
2189}
2190
2192{
2193 SfxBaseController::release();
2194}
2195
2197{
2198 if (rHint.GetId() == SfxHintId::Dying)
2199 mpViewShell = nullptr;
2200}
2201
2202uno::Sequence<sal_Int32> ScPreviewObj::getSelectedSheets()
2203{
2204 ScPreview* p = mpViewShell ? mpViewShell->GetPreview() : nullptr;
2205 if (!p)
2206 return uno::Sequence<sal_Int32>();
2207
2208 return toSequence(p->GetSelectedTabs());
2209}
2210
2211/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
css::chart::ChartAxisLabelPosition ePos
SfxApplication * SfxGetpApp()
AnyEventRef aEvent
css::uno::Reference< css::datatransfer::XTransferable > GetTransferable() const
void InsertText(const OUString &rNew, bool bSelect=false, bool bLOKShowSelect=true)
SdrUnoObj * GetFormControl(const css::uno::Reference< css::awt::XControlModel > &_rxModel, const SdrView &_rView, const OutputDevice &_rDevice, css::uno::Reference< css::awt::XControl > &_out_rxControl) const
virtual bool IsDesignMode() const override
void SetDesignMode(bool _bDesignMode)
static css::uno::Reference< css::form::runtime::XFormController > GetFormController(const css::uno::Reference< css::form::XForm > &_rxForm, const SdrView &_rView, const OutputDevice &_rDevice)
Base class for all functions.
Definition: fupoor.hxx:40
sal_uInt16 GetSlotID() const
Definition: fupoor.hxx:90
EditView & GetEditView() const
SCTAB Tab() const
Definition: address.hxx:283
SCROW Row() const
Definition: address.hxx:274
SCCOL Col() const
Definition: address.hxx:279
void SetZoom(sal_uInt16 nNew)
Definition: appoptio.hxx:41
void SetZoomType(SvxZoomType eNew)
Definition: appoptio.hxx:43
really derive cell from range?
Definition: cellsuno.hxx:640
void PostPaintGridAll()
Definition: docsh3.cxx:183
void SetDocumentModified()
Definition: docsh.cxx:2975
const ScDocument & GetDocument() const
Definition: docsh.hxx:218
const ScSheetEvents * GetSheetEvents(SCTAB nTab) const
Definition: documen3.cxx:669
ScExtDocOptions * GetExtDocOptions()
Definition: document.hxx:644
SC_DLLPUBLIC void SetViewOptions(const ScViewOptions &rOpt)
Definition: documen3.cxx:1973
const css::uno::Reference< css::script::vba::XVBAEventProcessor > & GetVbaEventProcessor() const
Definition: document.hxx:2540
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
Definition: document.hxx:1083
bool HasSheetEventScript(SCTAB nTab, ScSheetEventId nEvent, bool bWithVbaEvents=false) const
Definition: documen3.cxx:682
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
Definition: document.cxx:996
SC_DLLPUBLIC bool HasTable(SCTAB nTab) const
Definition: document.cxx:195
SC_DLLPUBLIC const ScPatternAttr * GetPattern(SCCOL nCol, SCROW nRow, SCTAB nTab) const
Definition: document.cxx:4830
SC_DLLPUBLIC tools::Rectangle GetMMRect(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, bool bHiddenAsZero=true) const
Definition: documen3.cxx:2002
ScDrawView * GetDrawView()
Definition: drawsh5.cxx:716
SdrEndTextEditKind ScEndTextEdit()
Definition: drawview.cxx:887
css::uno::Reference< css::datatransfer::XTransferable > CopyToTransferable()
Definition: drawvie4.cxx:374
EditView * GetEditView()
Definition: editsh.hxx:68
Extended options held by an ScDocument containing additional settings for filters.
Definition: scextopt.hxx:77
void SetChanged(bool bChanged)
If set to true, the data will be copied to the view data after import.
Definition: scextopt.cxx:165
bool IsChanged() const
Definition: scextopt.cxx:160
void ExecuteStyle(SfxRequest &rReq)
Definition: formatsh.cxx:148
MapMode GetDrawMapMode(bool bForce=false)
MapMode for the drawinglayer objects.
Definition: gridwin3.cxx:252
ScInputWindow * GetInputWindow()
Definition: inputhdl.hxx:264
void NumLinesChanged()
Update Input bar after the number of lines was changed externally.
Definition: inputwin.cxx:698
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
Definition: markdata.hxx:43
void ExtendRangeListTables(ScRangeList *pList) const
Definition: markdata.cxx:432
bool IsMultiMarked() const
Definition: markdata.hxx:81
void FillRangeListWithMarks(ScRangeList *pList, bool bClear, SCTAB nForTab=-1) const
Create a range list of marks.
Definition: markdata.cxx:372
std::set< SCTAB > MarkedTabsType
Definition: markdata.hxx:45
SCTAB GetSelectCount() const
Definition: markdata.cxx:180
bool IsMarked() const
Definition: markdata.hxx:80
const MarkedTabsType & GetSelectedTabs() const
Definition: markdata.hxx:97
void MarkFromRangeList(const ScRangeList &rList, bool bReset)
Definition: markdata.cxx:319
SC_DLLPUBLIC const ScAppOptions & GetAppOptions()
Definition: scmod.cxx:774
SC_DLLPUBLIC void SetAppOptions(const ScAppOptions &rOpt)
Definition: scmod.cxx:761
SfxItemSet & GetItemSet()
Definition: patattr.hxx:155
virtual void SAL_CALL release() noexcept override
Definition: viewuno.cxx:2191
virtual ~ScPreviewObj() override
Definition: viewuno.cxx:2174
virtual void SAL_CALL acquire() noexcept override
Definition: viewuno.cxx:2186
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedSheets() override
Definition: viewuno.cxx:2202
virtual void Notify(SfxBroadcaster &, const SfxHint &rHint) override
Definition: viewuno.cxx:2196
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
Definition: viewuno.cxx:2180
ScPreviewObj(ScPreviewShell *pViewSh)
Definition: viewuno.cxx:2166
ScPreviewShell * mpViewShell
Definition: viewuno.hxx:286
ScPreview * GetPreview()
Definition: prevwsh.hxx:118
size_t size() const
Definition: rangelst.hxx:89
ScAddress aEnd
Definition: address.hxx:498
ScAddress aStart
Definition: address.hxx:497
const OUString * GetScript(ScSheetEventId nEvent) const
Definition: sheetevents.cxx:99
static sal_Int32 GetVbaSheetEventId(ScSheetEventId nEvent)
Definition: sheetevents.cxx:39
virtual OUString SAL_CALL getImplementationName() override
Definition: viewuno.cxx:2061
ScTabViewObj()=delete
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
Definition: viewuno.cxx:469
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
Definition: viewuno.cxx:597
sal_Int16 GetZoom() const
Definition: viewuno.cxx:1365
std::vector< css::uno::Reference< css::sheet::XActivationEventListener > > aActivationListeners
Definition: viewuno.hxx:155
bool bDrawSelModeSet
Definition: viewuno.hxx:157
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
Definition: viewuno.cxx:2066
void VisAreaChanged()
Definition: viewuno.cxx:1932
void SelectionChanged()
Definition: viewuno.cxx:1645
rtl::Reference< ScViewPaneObj > GetObjectByIndex_Impl(sal_uInt16 nIndex) const
Definition: viewuno.cxx:989
virtual css::uno::Sequence< sal_Int32 > SAL_CALL getSelectedSheets() override
Definition: viewuno.cxx:2145
virtual sal_Int32 SAL_CALL getSplitColumn() override
Definition: viewuno.cxx:1545
css::uno::Reference< css::uno::XInterface > GetClickedObject(const Point &rPoint) const
Definition: viewuno.cxx:1074
virtual sal_Bool SAL_CALL select(const css::uno::Any &aSelection) override
Definition: viewuno.cxx:648
virtual css::uno::Reference< css::datatransfer::XTransferable > SAL_CALL getTransferable() override
Definition: viewuno.cxx:2078
virtual void SAL_CALL removeVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
Definition: viewuno.cxx:1927
std::vector< css::uno::Reference< css::sheet::XRangeSelectionChangeListener > > aRangeChgListeners
Definition: viewuno.hxx:149
virtual void SAL_CALL setPropertyValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
Definition: viewuno.cxx:1708
virtual void SAL_CALL addEnhancedMouseClickHandler(const css::uno::Reference< css::awt::XEnhancedMouseClickHandler > &aListener) override
Definition: viewuno.cxx:1321
virtual void SAL_CALL removeSelectionChangeListener(const css::uno::Reference< css::view::XSelectionChangeListener > &xListener) override
Definition: viewuno.cxx:1636
virtual void SAL_CALL freezeAtPosition(sal_Int32 nColumns, sal_Int32 nRows) override
Definition: viewuno.cxx:1604
virtual void SAL_CALL startRangeSelection(const css::uno::Sequence< css::beans::PropertyValue > &aArguments) override
Definition: viewuno.cxx:1942
virtual void SAL_CALL addRangeSelectionChangeListener(const css::uno::Reference< css::sheet::XRangeSelectionChangeListener > &aListener) override
Definition: viewuno.cxx:2005
bool bFilteredRangeSelection
Definition: viewuno.hxx:158
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
Definition: viewuno.cxx:1847
sal_Int16 GetZoomType() const
Definition: viewuno.cxx:1404
virtual void SAL_CALL removeActivationEventListener(const css::uno::Reference< css::sheet::XActivationEventListener > &aListener) override
Definition: viewuno.cxx:1354
void RangeSelChanged(const OUString &rText)
Definition: viewuno.cxx:2047
virtual void SAL_CALL removeEnhancedMouseClickHandler(const css::uno::Reference< css::awt::XEnhancedMouseClickHandler > &aListener) override
Definition: viewuno.cxx:1331
void SetZoom(sal_Int16 Zoom)
Definition: viewuno.cxx:1376
void EndMouseListening()
Definition: viewuno.cxx:1287
SfxItemPropertySet aPropSet
Definition: viewuno.hxx:143
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
Definition: viewuno.cxx:575
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
XPrintable?
Definition: viewuno.cxx:1700
virtual void SAL_CALL setActiveSheet(const css::uno::Reference< css::sheet::XSpreadsheet > &xActiveSheet) override
Definition: viewuno.cxx:1050
void EndActivationListening()
Definition: viewuno.cxx:1304
virtual void SAL_CALL addActivationEventListener(const css::uno::Reference< css::sheet::XActivationEventListener > &aListener) override
Definition: viewuno.cxx:1344
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
Definition: viewuno.cxx:941
virtual sal_Int32 SAL_CALL getCount() override
Definition: viewuno.cxx:949
virtual void SAL_CALL addSelectionChangeListener(const css::uno::Reference< css::view::XSelectionChangeListener > &xListener) override
Definition: viewuno.cxx:1629
virtual void SAL_CALL insertTransferable(const css::uno::Reference< css::datatransfer::XTransferable > &xTrans) override
Definition: viewuno.cxx:2102
virtual sal_Bool SAL_CALL hasElements() override
Definition: viewuno.cxx:981
virtual css::uno::Any SAL_CALL getSelection() override
Definition: viewuno.cxx:852
bool MousePressed(const css::awt::MouseEvent &e)
Definition: viewuno.cxx:1141
virtual void SAL_CALL removeRangeSelectionListener(const css::uno::Reference< css::sheet::XRangeSelectionListener > &aListener) override
Definition: viewuno.cxx:1996
virtual void SAL_CALL addPropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &xListener) override
Definition: viewuno.cxx:1906
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 Index) override
Definition: viewuno.cxx:966
std::vector< css::uno::Reference< css::sheet::XRangeSelectionListener > > aRangeSelListeners
Definition: viewuno.hxx:147
virtual css::uno::Type SAL_CALL getElementType() override
Definition: viewuno.cxx:976
virtual sal_Int32 SAL_CALL getSplitHorizontal() override
Definition: viewuno.cxx:1519
std::vector< css::uno::Reference< css::view::XSelectionChangeListener > > aSelectionChgListeners
Definition: viewuno.hxx:145
std::vector< css::uno::Reference< css::awt::XEnhancedMouseClickHandler > > aMouseClickHandlers
Definition: viewuno.hxx:153
virtual void SAL_CALL acquire() noexcept override
Definition: viewuno.cxx:491
virtual sal_Bool SAL_CALL getIsWindowSplit() override
Definition: viewuno.cxx:1487
void RangeSelAborted(const OUString &rText)
Definition: viewuno.cxx:2034
virtual void SAL_CALL abortRangeSelection() override
Definition: viewuno.cxx:1981
SCTAB nPreviousTab
Definition: viewuno.hxx:156
virtual void SAL_CALL removeRangeSelectionChangeListener(const css::uno::Reference< css::sheet::XRangeSelectionChangeListener > &aListener) override
Definition: viewuno.cxx:2012
virtual sal_Bool SAL_CALL hasFrozenPanes() override
Definition: viewuno.cxx:1503
virtual void SAL_CALL removePropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) override
Definition: viewuno.cxx:1913
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Definition: viewuno.cxx:2071
bool IsMouseListening() const
Definition: viewuno.cxx:1125
virtual sal_Int32 SAL_CALL getSplitRow() override
Definition: viewuno.cxx:1570
bool mbLeftMousePressed
Definition: viewuno.hxx:169
virtual sal_Int32 SAL_CALL getSplitVertical() override
Definition: viewuno.cxx:1532
void SetZoomType(sal_Int16 ZoomType)
Definition: viewuno.cxx:1433
void RangeSelDone(const OUString &rText)
Definition: viewuno.cxx:2021
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
Definition: viewuno.cxx:1922
virtual void SAL_CALL release() noexcept override
Definition: viewuno.cxx:496
void SheetChanged(bool bSameTabButMoved)
Definition: viewuno.cxx:536
virtual css::uno::Reference< css::sheet::XSpreadsheet > SAL_CALL getActiveSheet() override
Definition: viewuno.cxx:1036
bool MouseReleased(const css::awt::MouseEvent &e)
Definition: viewuno.cxx:1229
virtual void SAL_CALL addRangeSelectionListener(const css::uno::Reference< css::sheet::XRangeSelectionListener > &aListener) override
Definition: viewuno.cxx:1989
std::vector< css::uno::Reference< css::beans::XPropertyChangeListener > > aPropertyChgListeners
Definition: viewuno.hxx:151
virtual ~ScTabViewObj() override
Definition: viewuno.cxx:454
virtual void SAL_CALL splitAtPosition(sal_Int32 nPixelX, sal_Int32 nPixelY) override
Definition: viewuno.cxx:1592
virtual const FmFormShell * GetFormShell() const override
Definition: tabvwsh.hxx:344
void StopSimpleRefDialog()
Definition: tabvwsh4.cxx:1197
css::uno::Reference< css::drawing::XShapes > getSelectedXShapes()
Definition: viewuno.cxx:823
void StartSimpleRefDialog(const OUString &rTitle, const OUString &rInitVal, bool bCloseOnButtonUp, bool bSingleCell, bool bMultiSelection)
Definition: tabvwsh4.cxx:1162
void SetDrawShell(bool bActive)
Definition: tabvwsh4.cxx:613
void PaintLeft()
Definition: tabview3.cxx:2731
FuPoor * GetDrawFuncPtr()
Definition: tabview.hxx:329
void UpdateLayerLocks()
Definition: tabview5.cxx:351
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
Definition: tabview3.cxx:917
void DoneBlockMode(bool bContinue=false)
Definition: tabview2.cxx:409
sal_uInt16 CalcZoom(SvxZoomType eType, sal_uInt16 nOldZoom)
Definition: tabview2.cxx:1214
void ScrollToObject(const SdrObject *pDrawObj)
Definition: tabview5.cxx:546
bool PaintExtras()
Definition: tabview3.cxx:2784
void MarkRange(const ScRange &rRange, bool bSetCursor=true, bool bContinue=false)
Definition: tabview3.cxx:1708
void RemoveSplit()
Definition: tabview.cxx:2164
void FreezeSplitters(bool bFreeze, SplitMethod eSplitMethod=SC_SPLIT_METHOD_CURSOR, SCCOLROW nFreezeIndex=-1)
Definition: tabview.cxx:1989
ScViewData & GetViewData()
Definition: tabview.hxx:341
void SetZoom(const Fraction &rNewX, const Fraction &rNewY, bool bAll)
Definition: tabview5.cxx:424
SvxZoomType GetZoomType() const
Definition: tabview5.cxx:414
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
Definition: tabview3.cxx:363
void ScrollX(tools::Long nDeltaX, ScHSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1220
void Unmark()
Definition: tabview3.cxx:1744
void SetDrawSelMode(bool bNew)
Definition: tabview.hxx:325
ScDrawView * GetScDrawView()
Definition: tabview.hxx:349
void InvalidateSplit()
Definition: tabview.cxx:2210
void MarkDataChanged()
Definition: tabview3.cxx:1767
vcl::Window * GetWindowByPos(ScSplitPos ePos) const
Definition: tabview.hxx:379
void ScrollY(tools::Long nDeltaY, ScVSplitPos eWhich, bool bUpdBars=true)
Definition: tabview.cxx:1303
void PaintTop()
Definition: tabview3.cxx:2664
void InitOwnBlockMode(const ScRange &rMarkRange)
Definition: tabview2.cxx:332
SC_DLLPUBLIC void SetTabNo(SCTAB nTab, bool bNew=false, bool bExtendSelection=false, bool bSameTabButMoved=false)
Definition: tabview3.cxx:1819
void SplitAtPixel(const Point &rPixel)
Definition: tabview.cxx:2195
void UpdateFixPos()
Definition: tabview.cxx:750
void PaintGrid()
Definition: tabview3.cxx:2653
void SetZoomType(SvxZoomType eNew, bool bAll)
Definition: tabview5.cxx:419
static sal_Int16 GetInt16FromAny(const css::uno::Any &aAny)
Definition: miscuno.cxx:145
static bool GetBoolFromAny(const css::uno::Any &aAny)
Definition: miscuno.cxx:139
void GetMultiArea(ScRangeListRef &rRange) const
Definition: viewdata.cxx:1204
void SetOptions(const ScViewOptions &rOpt)
Definition: viewdata.cxx:3994
void SetFormulaBarLines(sal_Int16 nLines)
Definition: viewdata.hxx:471
const ScViewOptions & GetOptions() const
Definition: viewdata.hxx:554
ScMarkData & GetMarkData()
Definition: viewdata.cxx:3141
const Fraction & GetZoomY() const
Definition: viewdata.hxx:460
SCTAB GetTabNo() const
Definition: viewdata.hxx:395
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
SCROW GetPosY(ScVSplitPos eWhich, SCTAB nForTab=-1) const
Definition: viewdata.cxx:1416
ScSplitMode GetHSplitMode() const
Definition: viewdata.hxx:416
ScDocShell * GetDocShell() const
Definition: viewdata.hxx:354
ScGridWindow * GetActiveWin()
Definition: viewdata.cxx:3157
void GetPosFromPixel(tools::Long nClickX, tools::Long nClickY, ScSplitPos eWhich, SCCOL &rPosX, SCROW &rPosY, bool bTestMerge=true, bool bRepair=false, SCTAB nForTab=-1)
Definition: viewdata.cxx:2780
tools::Long GetHSplitPos() const
Definition: viewdata.hxx:418
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
Definition: viewdata.cxx:1181
ScDBFunc * GetView() const
Definition: viewdata.cxx:863
SCROW VisibleCellsY(ScVSplitPos eWhichY) const
Definition: viewdata.cxx:2712
ScSplitPos GetActivePart() const
Definition: viewdata.hxx:398
Point GetScrPos(SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, bool bAllowNeg=false, SCTAB nForTab=-1) const
Definition: viewdata.cxx:2375
SCCOL VisibleCellsX(ScHSplitPos eWhichX) const
Definition: viewdata.cxx:2707
ScSplitMode GetVSplitMode() const
Definition: viewdata.hxx:417
bool IsPagebreakMode() const
Definition: viewdata.hxx:425
tools::Long GetVSplitPos() const
Definition: viewdata.hxx:419
ScDrawView * GetScDrawView()
Definition: viewdata.cxx:3169
SCCOL GetPosX(ScHSplitPos eWhich, SCTAB nForTab=-1) const
Definition: viewdata.cxx:1402
void ReadExtOptions(const ScExtDocOptions &rOpt)
Definition: viewdata.cxx:3533
sal_Int16 GetFormulaBarLines() const
Definition: viewdata.hxx:478
void PasteFromTransferable(const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable)
Definition: viewfun3.cxx:620
rtl::Reference< ScTransferObj > CopyToTransferable()
Definition: viewfun3.cxx:430
void SetGridColor(const Color &rCol, const OUString &rName)
Definition: viewopti.hxx:96
void SetOption(ScViewOption eOpt, bool bNew)
Definition: viewopti.hxx:90
void SetObjMode(ScVObjType eObj, ScVObjMode eMode)
Definition: viewopti.hxx:93
bool GetOption(ScViewOption eOpt) const
Definition: viewopti.hxx:91
Color const & GetGridColor(OUString *pStrName=nullptr) const
Definition: viewopti.cxx:119
ScVObjMode GetObjMode(ScVObjType eObj) const
Definition: viewopti.hxx:94
virtual void SAL_CALL setFirstVisibleColumn(sal_Int32 nFirstVisibleColumn) override
Definition: viewuno.cxx:195
virtual sal_Int32 SAL_CALL getFirstVisibleColumn() override
Definition: viewuno.cxx:178
css::awt::Rectangle GetVisArea() const
Definition: viewuno.cxx:374
virtual ~ScViewPaneBase() override
Definition: viewuno.cxx:132
ScTabViewShell * GetViewShell() const
Definition: viewuno.hxx:74
virtual sal_Int32 SAL_CALL getFirstVisibleRow() override
Definition: viewuno.cxx:211
virtual css::table::CellRangeAddress SAL_CALL getVisibleRange() override
Definition: viewuno.cxx:244
virtual void SAL_CALL setFormDesignMode(sal_Bool DesignMode) override
Definition: viewuno.cxx:342
virtual void SAL_CALL setFirstVisibleRow(sal_Int32 nFirstVisibleRow) override
Definition: viewuno.cxx:228
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Definition: viewuno.cxx:140
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
Definition: viewuno.cxx:171
virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getReferredCells() override
Definition: viewuno.cxx:276
virtual css::uno::Reference< css::awt::XControl > SAL_CALL getControl(const css::uno::Reference< css::awt::XControlModel > &xModel) override
Definition: viewuno.cxx:355
virtual css::uno::Reference< css::form::runtime::XFormController > SAL_CALL getFormController(const css::uno::Reference< css::form::XForm > &Form) override
Definition: viewuno.cxx:314
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
Definition: viewuno.cxx:158
virtual sal_Bool SAL_CALL isFormDesignMode() override
Definition: viewuno.cxx:329
sal_uInt16 nPane
Definition: viewuno.hxx:65
ScTabViewShell * pViewShell
Definition: viewuno.hxx:64
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
Definition: viewuno.cxx:146
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
Definition: viewuno.cxx:417
virtual void SAL_CALL acquire() noexcept override
Definition: viewuno.cxx:427
virtual void SAL_CALL release() noexcept override
Definition: viewuno.cxx:432
ScViewPaneObj(ScTabViewShell *pViewSh, sal_uInt16 nP)
Definition: viewuno.cxx:408
virtual ~ScViewPaneObj() override
Definition: viewuno.cxx:413
static void UnmarkFiltered(ScMarkData &rMark, const ScDocument &rDoc)
Definition: viewutil.cxx:223
size_t GetMarkCount() const
SdrMark * GetMark(size_t nNum) const
const SdrMarkList & GetMarkedObjectList() const
bool IsObjMarkable(SdrObject const *pObj, SdrPageView const *pPV) const
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
SdrObject * GetMarkedSdrObj() const
const SdrPage * GetPage(sal_uInt16 nPgNum) const
sal_uInt16 GetPageCount() const
const OutlinerView * GetTextEditOutlinerView() const
SdrObject * Next()
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
static SdrObject * getSdrObjectFromXShape(const css::uno::Reference< css::uno::XInterface > &xInt)
virtual css::uno::Reference< css::drawing::XShape > getUnoShape()
SdrPage * getSdrPageFromSdrObject() const
virtual SdrLayerID GetLayer() const
SdrPage * GetPage() const
sal_uInt16 GetHitTolerancePixel() const
SdrPageView * GetSdrPageView() const
SdrModel & GetModel() const
void UnmarkAll()
static SfxApplication * Get()
void Invalidate(sal_uInt16 nId)
const SfxPoolItem * Execute(sal_uInt16 nSlot, SfxCallMode nCall=SfxCallMode::SLOT, const SfxPoolItem **pArgs=nullptr, sal_uInt16 nModi=0, const SfxPoolItem **pInternalArgs=nullptr)
SfxShell * GetShell(sal_uInt16 nIdx) const
SfxHintId GetId() const
const SfxItemPropertyMap & getPropertyMap() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
ErrCode CallXScript(const OUString &rScriptURL, const css::uno::Sequence< css::uno::Any > &aParams, css::uno::Any &aRet, css::uno::Sequence< sal_Int16 > &aOutParamIndex, css::uno::Sequence< css::uno::Any > &aOutParam, bool bRaiseError=true, const css::uno::Any *aCaller=nullptr)
SfxDispatcher * GetDispatcher() const
SfxBindings & GetBindings()
SfxDispatcher * GetDispatcher()
void InvalidateBorder()
SfxViewFrame & GetViewFrame() const
constexpr tools::Long Width() const
SdrObject * GetSdrObject() const
css::uno::Type const & get()
constexpr Point TopLeft() const
constexpr Point TopRight() const
T * get() const
virtual Point GetPosPixel() const
::OutputDevice const * GetOutDev() const
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
Point PixelToLogic(const Point &rDevicePt) const
virtual Size GetSizePixel() const
css::awt::Rectangle AWTRectangle(const ::tools::Rectangle &rVCLRect)
int nCount
float u
EmbeddedObjectRef * pObject
Reference< XInterface > xTarget
const sal_uInt16 MINZOOM
Definition: global.hxx:79
ScVObjMode
Definition: global.hxx:367
@ VOBJ_MODE_SHOW
Definition: global.hxx:368
@ VOBJ_MODE_HIDE
Definition: global.hxx:369
@ StartListening
If set, cloned formula cells will start to listen to the document.
constexpr SdrLayerID SC_LAYER_BACK(1)
const sal_uInt16 MAXZOOM
Definition: global.hxx:80
Sequence< PropertyValue > aArguments
sal_Int32 nIndex
void * p
void SAL_CALL mouseReleased(const css::awt::MouseEvent &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL mousePressed(const css::awt::MouseEvent &e) override
#define SC_QUERYINTERFACE(x)
Definition: miscuno.hxx:86
#define SC_SIMPLE_SERVICE_INFO(ClassName, ClassNameAscii, ServiceAscii)
Definition: miscuno.hxx:63
#define SC_QUERY_MULTIPLE(x, y)
Definition: miscuno.hxx:93
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &... rSn)
Reference< XComponentContext > getProcessComponentContext()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
int i
OUString aPropName
long Long
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
#define SC_MOD()
Definition: scmod.hxx:249
SVXCORE_DLLPUBLIC SdrObject * SdrObjectPrimitiveHit(const SdrObject &rObject, const Point &rPnt, sal_uInt16 nTol, const SdrPageView &rSdrPageView, const SdrLayerIDSet *pVisiLayer, bool bTextOnly, drawinglayer::primitive2d::Primitive2DContainer *pHitContainer=nullptr)
ScSheetEventId
Definition: sheetevents.hxx:27
bool hasValue()
Reference< XController > xController
Reference< XModel > xModel
unsigned char sal_Bool
sal_Int16 SCTAB
Definition: types.hxx:22
sal_Int16 SCCOL
Definition: types.hxx:21
sal_Int32 SCROW
Definition: types.hxx:17
constexpr OUStringLiteral SC_UNONAME_MULTISEL
Definition: unonames.hxx:650
constexpr OUStringLiteral SC_UNO_ZOOMVALUE
Definition: unonames.hxx:577
constexpr OUStringLiteral SC_UNO_SHOWGRID
Definition: unonames.hxx:551
constexpr OUStringLiteral SC_UNO_ZOOMTYPE
Definition: unonames.hxx:576
constexpr OUStringLiteral SC_UNO_SHOWHELP
Definition: unonames.hxx:552
constexpr OUStringLiteral SC_UNO_OUTLSYMB
Definition: unonames.hxx:545
constexpr OUStringLiteral OLD_UNO_HORSCROLL
Definition: unonames.hxx:589
constexpr OUStringLiteral SC_UNO_HIDESPELL
Definition: unonames.hxx:543
constexpr OUStringLiteral SC_UNO_SHOWFORMULASMARKS
Definition: unonames.hxx:554
constexpr OUStringLiteral SC_UNONAME_SINGLECELL
Definition: unonames.hxx:649
constexpr OUStringLiteral SC_UNO_SHOWNOTES
Definition: unonames.hxx:553
constexpr OUStringLiteral SC_UNO_SHOWOBJ
Definition: unonames.hxx:555
constexpr OUStringLiteral SC_UNO_SHOWDRAW
Definition: unonames.hxx:549
constexpr OUStringLiteral SC_UNO_VISAREA
Definition: unonames.hxx:575
constexpr OUStringLiteral SC_UNO_SHOWPAGEBR
Definition: unonames.hxx:556
constexpr OUStringLiteral OLD_UNO_COLROWHDR
Definition: unonames.hxx:588
constexpr OUStringLiteral SC_UNO_SHEETTABS
Definition: unonames.hxx:546
constexpr OUStringLiteral OLD_UNO_VALUEHIGH
Definition: unonames.hxx:592
constexpr OUStringLiteral OLD_UNO_VERTSCROLL
Definition: unonames.hxx:593
constexpr OUStringLiteral SC_UNONAME_INITVAL
Definition: unonames.hxx:646
constexpr OUStringLiteral SC_UNO_COLROWHDR
Definition: unonames.hxx:541
constexpr OUStringLiteral OLD_UNO_SHEETTABS
Definition: unonames.hxx:591
constexpr OUStringLiteral SC_UNO_SHOWFORM
Definition: unonames.hxx:550
constexpr OUStringLiteral SC_UNO_SHOWCHARTS
Definition: unonames.hxx:548
constexpr OUStringLiteral SC_UNO_VERTSCROLL
Definition: unonames.hxx:559
constexpr OUStringLiteral SC_UNO_FILTERED_RANGE_SELECTION
Definition: unonames.hxx:579
constexpr OUStringLiteral OLD_UNO_OUTLSYMB
Definition: unonames.hxx:590
constexpr OUStringLiteral SC_UNO_GRIDCOLOR
Definition: unonames.hxx:542
constexpr OUStringLiteral SC_UNO_SHOWZERO
Definition: unonames.hxx:557
constexpr OUStringLiteral SC_UNO_FORMULABARHEIGHT
Definition: unonames.hxx:581
constexpr OUStringLiteral SC_UNO_VISAREASCREEN
Definition: unonames.hxx:580
constexpr OUStringLiteral SC_UNONAME_CLOSEONUP
Definition: unonames.hxx:648
constexpr OUStringLiteral SC_UNONAME_TITLE
Definition: unonames.hxx:647
constexpr OUStringLiteral SC_UNO_SHOWANCHOR
Definition: unonames.hxx:547
constexpr OUStringLiteral SC_UNO_HORSCROLL
Definition: unonames.hxx:544
constexpr OUStringLiteral SC_UNO_VALUEHIGH
Definition: unonames.hxx:558
ScSplitPos
Definition: viewdata.hxx:44
@ SC_SPLIT_BOTTOMRIGHT
Definition: viewdata.hxx:44
@ SC_SPLIT_TOPLEFT
Definition: viewdata.hxx:44
@ SC_SPLIT_BOTTOMLEFT
Definition: viewdata.hxx:44
@ SC_SPLIT_TOPRIGHT
Definition: viewdata.hxx:44
ScHSplitPos WhichH(ScSplitPos ePos)
Definition: viewdata.hxx:722
ScMarkType
States GetSimpleArea() returns for the underlying selection marks, so the caller can react if the res...
Definition: viewdata.hxx:61
@ SC_MARK_SIMPLE
Definition: viewdata.hxx:65
@ SC_MARK_SIMPLE_FILTERED
Definition: viewdata.hxx:67
@ SC_FOLLOW_JUMP
Definition: viewdata.hxx:52
@ SC_SPLIT_FIX
Definition: viewdata.hxx:42
@ SC_SPLIT_NORMAL
Definition: viewdata.hxx:42
@ SC_SPLIT_NONE
Definition: viewdata.hxx:42
ScHSplitPos
Definition: viewdata.hxx:45
@ SC_SPLIT_LEFT
Definition: viewdata.hxx:45
@ SC_SPLIT_RIGHT
Definition: viewdata.hxx:45
ScVSplitPos WhichV(ScSplitPos ePos)
Definition: viewdata.hxx:728
ScVSplitPos
Definition: viewdata.hxx:46
@ SC_SPLIT_TOP
Definition: viewdata.hxx:46
@ SC_SPLIT_BOTTOM
Definition: viewdata.hxx:46
@ VOBJ_TYPE_CHART
Definition: viewopti.hxx:55
@ VOBJ_TYPE_OLE
Definition: viewopti.hxx:54
@ VOBJ_TYPE_DRAW
Definition: viewopti.hxx:56
@ VOPT_TABCONTROLS
Definition: viewopti.hxx:39
@ VOPT_ANCHOR
Definition: viewopti.hxx:45
@ VOPT_NULLVALS
Definition: viewopti.hxx:33
@ VOPT_HSCROLL
Definition: viewopti.hxx:38
@ VOPT_OUTLINER
Definition: viewopti.hxx:40
@ VOPT_HELPLINES
Definition: viewopti.hxx:44
@ VOPT_FORMULAS_MARKS
Definition: viewopti.hxx:36
@ VOPT_GRID
Definition: viewopti.hxx:42
@ VOPT_FORMULAS
Definition: viewopti.hxx:32
@ VOPT_NOTES
Definition: viewopti.hxx:35
@ VOPT_HEADER
Definition: viewopti.hxx:41
@ VOPT_PAGEBREAKS
Definition: viewopti.hxx:46
@ VOPT_SYNTAX
Definition: viewopti.hxx:34
@ VOPT_VSCROLL
Definition: viewopti.hxx:37
static o3tl::span< const SfxItemPropertyMapEntry > lcl_GetViewOptPropertyMap()
Clipping Marks.
Definition: viewuno.cxx:81
static void lcl_CallActivate(ScDocShell *pDocSh, SCTAB nTab, ScSheetEventId nEvent)
Definition: viewuno.cxx:501
static bool lcl_TabInRanges(SCTAB nTab, const ScRangeList &rRanges)
Definition: viewuno.cxx:604
constexpr OUStringLiteral SCTABVIEWOBJ_SERVICE
Definition: viewuno.cxx:119
constexpr OUStringLiteral SCVIEWSETTINGS_SERVICE
Definition: viewuno.cxx:120
static void lcl_ShowObject(ScTabViewShell &rViewSh, const ScDrawView &rDrawView, const SdrObject *pSelObj)
Definition: viewuno.cxx:615
#define SC_VIEWPANE_ACTIVE
Definition: viewuno.hxx:51
const SvXMLTokenMapEntry aTypes[]
SvxZoomType