LibreOffice Module sc (master) 1
AccessibleCell.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 <memory>
21#include <string_view>
22
23#include <sal/config.h>
24
25#include <AccessibleCell.hxx>
26#include <scitems.hxx>
27#include <AccessibleText.hxx>
29#include <tabvwsh.hxx>
31#include <document.hxx>
32#include <attrib.hxx>
33#include <editsrc.hxx>
34#include <dociter.hxx>
35#include <markdata.hxx>
36#include <cellvalue.hxx>
37#include <formulaiter.hxx>
38#include <validat.hxx>
39
41#include <com/sun/star/accessibility/AccessibleStateType.hpp>
42#include <com/sun/star/accessibility/AccessibleRelationType.hpp>
43#include <com/sun/star/accessibility/XAccessibleTable.hpp>
44#include <editeng/brushitem.hxx>
45#include <vcl/svapp.hxx>
46
48
49using namespace ::com::sun::star;
50using namespace ::com::sun::star::accessibility;
51
53 const uno::Reference<XAccessible>& rxParent,
54 ScTabViewShell* pViewShell,
55 const ScAddress& rCellAddress,
56 sal_Int64 nIndex,
57 ScSplitPos eSplitPos,
58 ScAccessibleDocument* pAccDoc)
59{
61 rxParent, pViewShell, rCellAddress, nIndex, eSplitPos, pAccDoc));
62 x->Init();
63 return x;
64}
65
67 const uno::Reference<XAccessible>& rxParent,
68 ScTabViewShell* pViewShell,
69 const ScAddress& rCellAddress,
70 sal_Int64 nIndex,
71 ScSplitPos eSplitPos,
72 ScAccessibleDocument* pAccDoc)
73 :
74 ScAccessibleCellBase(rxParent, GetDocument(pViewShell), rCellAddress, nIndex),
75 ::accessibility::AccessibleStaticTextBase(CreateEditSource(pViewShell, rCellAddress, eSplitPos)),
76 mpViewShell(pViewShell),
77 mpAccDoc(pAccDoc),
78 meSplitPos(eSplitPos)
79{
80 if (pViewShell)
81 pViewShell->AddAccessibilityObject(*this);
82}
83
85{
86 if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose)
87 {
88 // increment refcount to prevent double call off dtor
89 osl_atomic_increment( &m_refCount );
90 // call dispose to inform object which have a weak reference to this object
91 dispose();
92 }
93}
94
96{
98
99 SetEventSource(this);
100}
101
103{
104 SolarMutexGuard aGuard;
105 // dispose in AccessibleStaticTextBase
106 Dispose();
107
108 if (mpViewShell)
109 {
111 mpViewShell = nullptr;
112 }
113 mpAccDoc = nullptr;
114
116}
117
118 //===== XInterface =====================================================
119
121
122 //===== XTypeProvider ===================================================
123
124css::uno::Sequence< css::uno::Type > SAL_CALL ScAccessibleCell::getTypes()
125{
126 return ::comphelper::concatSequences(
128 AccessibleStaticTextBase::getTypes(),
130 );
131}
133
134 //===== XAccessibleComponent ============================================
135
136uno::Reference< XAccessible > SAL_CALL ScAccessibleCell::getAccessibleAtPoint(
137 const awt::Point& rPoint )
138{
139 return AccessibleStaticTextBase::getAccessibleAtPoint(rPoint);
140}
141
143{
144 SolarMutexGuard aGuard;
146 if (getAccessibleParent().is() && mpViewShell)
147 {
148 uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY);
149 if (xAccessibleComponent.is())
150 {
151 xAccessibleComponent->grabFocus();
153 }
154 }
155}
156
158{
159 tools::Rectangle aCellRect(GetBoundingBox());
160 if (mpViewShell)
161 {
163 if (pWindow)
164 {
166 aCellRect.Move(aRect.Left(), aRect.Top());
167 }
168 }
169 return aCellRect;
170}
171
173{
174 tools::Rectangle aCellRect;
175 if (mpViewShell)
176 {
177 tools::Long nSizeX, nSizeY;
179 maCellAddress.Col(), maCellAddress.Row(), nSizeX, nSizeY);
180 aCellRect.SetSize(Size(nSizeX, nSizeY));
182
184 if (pWindow)
185 {
187 aRect.Move(-aRect.Left(), -aRect.Top());
188 aCellRect = aRect.Intersection(aCellRect);
189 }
190
191 /* #i19430# Gnopernicus reads text partly if it sticks out of the cell
192 boundaries. This leads to wrong results in cases where the cell
193 text is rotated, because rotation is not taken into account when
194 calculating the visible part of the text. In these cases we will
195 simply expand the cell size to the width of the unrotated text. */
196 if (mpDoc)
197 {
199 if( pItem && (pItem->GetValue() != 0_deg100) )
200 {
202 if( !aParaRect.IsEmpty() && (aCellRect.GetWidth() < aParaRect.GetWidth()) )
203 aCellRect.SetSize( Size( aParaRect.GetWidth(), aCellRect.GetHeight() ) );
204 }
205 }
206 }
207 if (aCellRect.IsEmpty())
208 aCellRect.SetPos(Point(-1, -1));
209 return aCellRect;
210}
211
212 //===== XAccessibleContext ==============================================
213
214sal_Int64 SAL_CALL
216{
217 return AccessibleStaticTextBase::getAccessibleChildCount();
218}
219
220uno::Reference< XAccessible > SAL_CALL
222{
223 return AccessibleStaticTextBase::getAccessibleChild(nIndex);
224}
225
226sal_Int64 SAL_CALL
228{
229 SolarMutexGuard aGuard;
230 sal_Int64 nParentStates = 0;
231 if (getAccessibleParent().is())
232 {
233 uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
234 nParentStates = xParentContext->getAccessibleStateSet();
235 }
236 sal_Int64 nStateSet = 0;
237 if (IsDefunc(nParentStates))
238 nStateSet |= AccessibleStateType::DEFUNC;
239 else
240 {
241 if (IsFocused())
242 nStateSet |= AccessibleStateType::FOCUSED;
243
244 if (IsFormulaMode())
245 {
246 nStateSet |= AccessibleStateType::ENABLED;
247 nStateSet |= AccessibleStateType::MULTI_LINE;
248 nStateSet |= AccessibleStateType::MULTI_SELECTABLE;
249 if (IsOpaque())
250 nStateSet |= AccessibleStateType::OPAQUE;
251 nStateSet |= AccessibleStateType::SELECTABLE;
252 if (IsSelected())
253 nStateSet |= AccessibleStateType::SELECTED;
254 if (isShowing())
255 nStateSet |= AccessibleStateType::SHOWING;
256 nStateSet |= AccessibleStateType::TRANSIENT;
257 if (isVisible())
258 nStateSet |= AccessibleStateType::VISIBLE;
259 return nStateSet;
260 }
261 if (IsEditable(nParentStates))
262 {
263 nStateSet |= AccessibleStateType::EDITABLE;
264 nStateSet |= AccessibleStateType::RESIZABLE;
265 }
266 nStateSet |= AccessibleStateType::ENABLED;
267 nStateSet |= AccessibleStateType::MULTI_LINE;
268 nStateSet |= AccessibleStateType::MULTI_SELECTABLE;
269 nStateSet |= AccessibleStateType::FOCUSABLE;
270 if (IsOpaque())
271 nStateSet |= AccessibleStateType::OPAQUE;
272 nStateSet |= AccessibleStateType::SELECTABLE;
273 if (IsSelected())
274 nStateSet |= AccessibleStateType::SELECTED;
275 if (isShowing())
276 nStateSet |= AccessibleStateType::SHOWING;
277 nStateSet |= AccessibleStateType::TRANSIENT;
278 if (isVisible())
279 nStateSet |= AccessibleStateType::VISIBLE;
280 }
281 return nStateSet;
282}
283
284uno::Reference<XAccessibleRelationSet> SAL_CALL
286{
287 SolarMutexGuard aGuard;
290 if (mpAccDoc)
291 pRelationSet = mpAccDoc->GetRelationSet(&maCellAddress);
292 if (!pRelationSet)
293 pRelationSet = new utl::AccessibleRelationSetHelper();
294 FillDependents(pRelationSet.get());
295 FillPrecedents(pRelationSet.get());
296 return pRelationSet;
297}
298
299 //===== XServiceInfo ====================================================
300
302{
303 return "ScAccessibleCell";
304}
305
306uno::Sequence< OUString> SAL_CALL
308{
309 const css::uno::Sequence<OUString> vals { "com.sun.star.sheet.AccessibleCell" };
311}
312
313 //==== internal =========================================================
314
315bool ScAccessibleCell::IsDefunc(sal_Int64 nParentStates)
316{
317 return ScAccessibleContextBase::IsDefunc() || (mpDoc == nullptr) || (mpViewShell == nullptr) || !getAccessibleParent().is() ||
318 (nParentStates & AccessibleStateType::DEFUNC);
319}
320
321bool ScAccessibleCell::IsEditable(sal_Int64 nParentStates)
322{
323 bool bEditable(true);
324 if ( !(nParentStates & AccessibleStateType::EDITABLE) &&
325 mpDoc)
326 {
327 // here I have to test whether the protection of the table should influence this cell.
329 if (pItem)
330 bEditable = !pItem->GetProtection();
331 }
332 return bEditable;
333}
334
336{
337 // test whether there is a background color
338 bool bOpaque(true);
339 if (mpDoc)
340 {
342 if (pItem)
343 bOpaque = pItem->GetColor() != COL_TRANSPARENT;
344 }
345 return bOpaque;
346}
347
349{
351 return mpViewShell->GetActiveWin()->HasFocus();
352
353 return false;
354}
355
357{
358 if (IsFormulaMode())
359 {
360 const ScAccessibleSpreadsheet *pSheet =static_cast<const ScAccessibleSpreadsheet*>(mxParent.get());
361 if (pSheet)
362 {
363 return pSheet->IsScAddrFormulaSel(maCellAddress);
364 }
365 return false;
366 }
367
368 bool bResult(false);
369 if (mpViewShell)
370 {
371 const ScMarkData& rMarkdata = mpViewShell->GetViewData().GetMarkData();
372 bResult = rMarkdata.IsCellMarked(maCellAddress.Col(), maCellAddress.Row());
373 }
374 return bResult;
375}
376
378{
379 ScDocument* pDoc = nullptr;
380 if (pViewShell)
381 pDoc = &pViewShell->GetViewData().GetDocument();
382 return pDoc;
383}
384
385::std::unique_ptr< SvxEditSource > ScAccessibleCell::CreateEditSource(ScTabViewShell* pViewShell, ScAddress aCell, ScSplitPos eSplitPos)
386{
387 if (IsFormulaMode())
388 {
389 return ::std::unique_ptr< SvxEditSource >();
390 }
391 ::std::unique_ptr< SvxEditSource > pEditSource (new ScAccessibilityEditSource(std::make_unique<ScAccessibleCellTextData>(pViewShell, aCell, eSplitPos, this)));
392
393 return pEditSource;
394}
395
397{
398 if (!mpDoc)
399 return;
400
401 ScRange aRange(0, 0, maCellAddress.Tab(), mpDoc->MaxCol(), mpDoc->MaxRow(), maCellAddress.Tab());
402 ScCellIterator aCellIter(*mpDoc, aRange);
403
404 for (bool bHasCell = aCellIter.first(); bHasCell; bHasCell = aCellIter.next())
405 {
406 if (aCellIter.getType() == CELLTYPE_FORMULA)
407 {
408 bool bFound = false;
409 ScDetectiveRefIter aIter(*mpDoc, aCellIter.getFormulaCell());
410 ScRange aRef;
411 while ( !bFound && aIter.GetNextRef( aRef ) )
412 {
413 if (aRef.Contains(maCellAddress))
414 bFound = true;
415 }
416 if (bFound)
417 AddRelation(aCellIter.GetPos(), AccessibleRelationType::CONTROLLER_FOR, pRelationSet);
418 }
419 }
420}
421
423{
424 if (!mpDoc)
425 return;
426
428 if (aCell.getType() == CELLTYPE_FORMULA)
429 {
430 ScFormulaCell* pCell = aCell.getFormula();
431 ScDetectiveRefIter aIter(*mpDoc, pCell);
432 ScRange aRef;
433 while ( aIter.GetNextRef( aRef ) )
434 {
435 AddRelation( aRef, AccessibleRelationType::CONTROLLED_BY, pRelationSet);
436 }
437 }
438}
439
441 const sal_uInt16 aRelationType,
443{
444 AddRelation(ScRange(rCell, rCell), aRelationType, pRelationSet);
445}
446
447void ScAccessibleCell::AddRelation(const ScRange& rRange,
448 const sal_uInt16 aRelationType,
450{
451 uno::Reference < XAccessibleTable > xTable ( getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY );
452 if (!xTable.is())
453 return;
454
455 const sal_uInt32 nCount(static_cast<sal_uInt32>(rRange.aEnd.Col() -
456 rRange.aStart.Col() + 1) * (rRange.aEnd.Row() -
457 rRange.aStart.Row() + 1));
458 uno::Sequence < uno::Reference < uno::XInterface > > aTargetSet( nCount );
459 uno::Reference < uno::XInterface >* pTargetSet = aTargetSet.getArray();
460 sal_uInt32 nPos(0);
461 for (sal_uInt32 nRow = rRange.aStart.Row(); nRow <= sal::static_int_cast<sal_uInt32>(rRange.aEnd.Row()); ++nRow)
462 {
463 for (sal_uInt32 nCol = rRange.aStart.Col(); nCol <= sal::static_int_cast<sal_uInt32>(rRange.aEnd.Col()); ++nCol)
464 {
465 pTargetSet[nPos] = xTable->getAccessibleCellAt(nRow, nCol);
466 ++nPos;
467 }
468 }
469 OSL_ENSURE(nCount == nPos, "something went wrong");
470 AccessibleRelation aRelation;
471 aRelation.RelationType = aRelationType;
472 aRelation.TargetSet = aTargetSet;
473 pRelationSet->AddRelation(aRelation);
474}
475
476static OUString ReplaceFourChar(const OUString& oldOUString)
477{
478 return oldOUString.replaceAll(u"\\", u"\\\\")
479 .replaceAll(u";", u"\\;")
480 .replaceAll(u"=", u"\\=")
481 .replaceAll(u",", u"\\,")
482 .replaceAll(u":", u"\\:");
483}
484
486{
487 SolarMutexGuard aGuard;
488
489 uno::Any strRet;
490 if (mpViewShell)
491 {
492 OUString strFor = mpViewShell->GetFormula(maCellAddress) ;
493 if (!strFor.isEmpty())
494 {
495 strFor = strFor.copy(1);
496 strFor = ReplaceFourChar(strFor);
497 }
498 strFor = "Formula:" + strFor +
499 ";Note:" +
501 getShadowAttrs() + //the string returned contains the spliter ";"
502 getBorderAttrs();//the string returned contains the spliter ";"
503 //end of cell attributes
504 if( mpDoc )
505 {
506 strFor += "isdropdown:";
507 if( IsDropdown() )
508 strFor += "true";
509 else
510 strFor += "false";
511 strFor += ";";
512 }
513 strRet <<= strFor ;
514 }
515 return strRet;
516}
517
518// cell has its own ParaIndent property, so when calling character attributes on cell, the ParaIndent should replace the ParaLeftMargin if its value is not zero.
519uno::Sequence< beans::PropertyValue > SAL_CALL ScAccessibleCell::getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& aRequestedAttributes )
520{
521 SolarMutexGuard aGuard;
522
523 uno::Sequence< beans::PropertyValue > aAttribs = AccessibleStaticTextBase::getCharacterAttributes( nIndex, aRequestedAttributes );
524
525 sal_uInt16 nParaIndent = mpDoc->GetAttr( maCellAddress, ATTR_INDENT )->GetValue();
526 if (nParaIndent > 0)
527 {
528 auto [begin, end] = asNonConstRange(aAttribs);
529 auto pAttrib = std::find_if(begin, end,
530 [](const beans::PropertyValue& rAttrib) { return "ParaLeftMargin" == rAttrib.Name; });
531 if (pAttrib != end)
532 pAttrib->Value <<= nParaIndent;
533 }
534 return aAttribs;
535}
536
538{
539 ScAccessibleSpreadsheet* pSheet = static_cast<ScAccessibleSpreadsheet*>(mxParent.get());
540 if (pSheet)
541 {
542 return pSheet->IsFormulaMode();
543 }
544 return false;
545}
546
548{
549 sal_uInt16 nPosX = maCellAddress.Col();
550 sal_uInt16 nPosY = sal_uInt16(maCellAddress.Row());
551 sal_uInt16 nTab = maCellAddress.Tab();
552 sal_uInt32 nValidation = mpDoc->GetAttr( nPosX, nPosY, nTab, ATTR_VALIDDATA )->GetValue();
553 if( nValidation )
554 {
555 const ScValidationData* pData = mpDoc->GetValidationEntry( nValidation );
556 if( pData && pData->HasSelectionList() )
557 return true;
558 }
559 const ScMergeFlagAttr* pAttr = mpDoc->GetAttr( nPosX, nPosY, nTab, ATTR_MERGE_FLAG );
560 if( pAttr->HasAutoFilter() )
561 {
562 return true;
563 }
564 else
565 {
566 sal_uInt16 nTabCount = mpDoc->GetTableCount();
567 if ( nTab+1<nTabCount && mpDoc->IsScenario(nTab+1) && !mpDoc->IsScenario(nTab) )
568 {
569 SCTAB i;
571 for (i=nTab+1; i<nTabCount && mpDoc->IsScenario(i); i++)
572 mpDoc->MarkScenario( i, nTab, aMarks, false, ScScenarioFlags::ShowFrame );
573 ScRangeList aRanges;
574 aMarks.FillRangeListWithMarks( &aRanges, false );
575 bool bHasScenario;
576 SCTAB nRangeCount = aRanges.size();
577 for (i=0; i<nRangeCount; i++)
578 {
579 ScRange aRange = aRanges[i];
580 mpDoc->ExtendTotalMerge( aRange );
581 bool bTextBelow = ( aRange.aStart.Row() == 0 );
582 // MT IA2: Not used: sal_Bool bIsInScen = sal_False;
583 if ( bTextBelow )
584 {
585 bHasScenario = (aRange.aStart.Col() == nPosX && aRange.aEnd.Row() == nPosY-1);
586 }
587 else
588 {
589 bHasScenario = (aRange.aStart.Col() == nPosX && aRange.aStart.Row() == nPosY+1);
590 }
591 if( bHasScenario ) return true;
592 }
593 }
594 }
595 return false;
596}
597
598/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static OUString ReplaceFourChar(const OUString &oldOUString)
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
===== XTypeProvider ===================================================
OUString getShadowAttrs() const
OUString GetAllDisplayNote() const
virtual bool isVisible() override
@descr This base class provides an implementation of the AccessibleCell service.
ScTabViewShell * mpViewShell
static rtl::Reference< ScAccessibleCell > create(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScTabViewShell *pViewShell, const ScAddress &rCellAddress, sal_Int64 nIndex, ScSplitPos eSplitPos, ScAccessibleDocument *pAccDoc)
bool IsFocused() const
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int64 nIndex) override
Return the specified child or NULL if index is invalid.
ScAccessibleCell(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ScTabViewShell *pViewShell, const ScAddress &rCellAddress, sal_Int64 nIndex, ScSplitPos eSplitPos, ScAccessibleDocument *pAccDoc)
ScAccessibleDocument * mpAccDoc
::std::unique_ptr< SvxEditSource > CreateEditSource(ScTabViewShell *pViewShell, ScAddress aCell, ScSplitPos eSplitPos)
void FillDependents(utl::AccessibleRelationSetHelper *pRelationSet)
virtual ~ScAccessibleCell() override
virtual OUString SAL_CALL getImplementationName() override
===== XServiceInfo ====================================================
static ScDocument * GetDocument(ScTabViewShell *mpViewShell)
virtual css::uno::Any SAL_CALL getExtendedAttributes() override
bool IsDropdown() const
virtual void Init() override
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes(sal_Int32 nIndex, const css::uno::Sequence< OUString > &aRequestedAttributes) override
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
Return the set of current states.
virtual void SAL_CALL grabFocus() override
virtual tools::Rectangle GetBoundingBox() const override
Return the object's current bounding box relative to the parent object.
virtual bool IsEditable(sal_Int64 nParentStates) override
virtual sal_Int64 SAL_CALL getAccessibleChildCount() override
===== XAccessibleContext ==============================================
void FillPrecedents(utl::AccessibleRelationSetHelper *pRelationSet)
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return NULL to indicate that an empty relation set.
virtual void SAL_CALL disposing() override
bool IsOpaque() const
virtual tools::Rectangle GetBoundingBoxOnScreen() const override
Return the object's current bounding box relative to the desktop.
void AddRelation(const ScAddress &rCell, const sal_uInt16 aRelationType, ::utl::AccessibleRelationSetHelper *pRelationSet)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
===== XAccessible =====================================================
virtual void SAL_CALL disposing() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Returns a list of all supported services.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
Return a reference to the parent.
css::uno::Reference< css::accessibility::XAccessible > mxParent
Reference to the parent object.
rtl::Reference< utl::AccessibleRelationSetHelper > GetRelationSet(const ScAddress *pAddress) const
======== internal =====================================================
@descr This base class provides an implementation of the AccessibleTable service.
bool IsScAddrFormulaSel(const ScAddress &addr) const
SCTAB Tab() const
Definition: address.hxx:283
SCROW Row() const
Definition: address.hxx:274
SCCOL Col() const
Definition: address.hxx:279
Walk through all cells in an area.
Definition: dociter.hxx:206
CellType getType() const
Definition: dociter.hxx:233
ScFormulaCell * getFormulaCell()
Definition: dociter.hxx:236
const ScAddress & GetPos() const
Definition: dociter.hxx:231
Iterator for references in a formula cell.
Definition: formulaiter.hxx:32
bool GetNextRef(ScRange &rRange)
Definition: formulaiter.cxx:52
SC_DLLPUBLIC bool IsScenario(SCTAB nTab) const
Definition: documen3.cxx:432
ScSheetLimits & GetSheetLimits() const
Definition: document.hxx:898
void MarkScenario(SCTAB nSrcTab, SCTAB nDestTab, ScMarkData &rDestMark, bool bResetMark=true, ScScenarioFlags nNeededBits=ScScenarioFlags::NONE) const
Definition: documen3.cxx:854
SC_DLLPUBLIC SCCOL MaxCol() const
Definition: document.hxx:892
SC_DLLPUBLIC const ScValidationData * GetValidationEntry(sal_uInt32 nIndex) const
Definition: documen4.cxx:873
SC_DLLPUBLIC SCROW MaxRow() const
Definition: document.hxx:893
SC_DLLPUBLIC void ExtendTotalMerge(ScRange &rRange) const
Definition: document.cxx:5606
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
Definition: document.cxx:4684
SC_DLLPUBLIC SCTAB GetTableCount() const
Definition: document.cxx:297
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
Definition: markdata.hxx:43
void FillRangeListWithMarks(ScRangeList *pList, bool bClear, SCTAB nForTab=-1) const
Create a range list of marks.
Definition: markdata.cxx:372
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
Definition: markdata.cxx:270
bool HasAutoFilter() const
Definition: attrib.hxx:106
bool GetProtection() const
Definition: attrib.hxx:148
size_t size() const
Definition: rangelst.hxx:89
ScAddress aEnd
Definition: address.hxx:498
bool Contains(const ScAddress &) const
is Address& fully in Range?
Definition: address.hxx:718
ScAddress aStart
Definition: address.hxx:497
void AddAccessibilityObject(SfxListener &rObject)
Definition: tabvwshh.cxx:210
void RemoveAccessibilityObject(SfxListener &rObject)
Definition: tabvwshh.cxx:220
OUString GetFormula(const ScAddress &rAddress)
Definition: tabvwsh.cxx:109
ScViewData & GetViewData()
Definition: tabview.hxx:344
ScGridWindow * GetActiveWin()
Definition: tabview.cxx:878
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
Definition: tabview3.cxx:363
vcl::Window * GetWindowByPos(ScSplitPos ePos) const
Definition: tabview.hxx:382
bool GetMergeSizePixel(SCCOL nX, SCROW nY, tools::Long &rSizeXPix, tools::Long &rSizeYPix) const
Definition: viewdata.cxx:2732
ScMarkData & GetMarkData()
Definition: viewdata.cxx:3146
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
Point GetScrPos(SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, bool bAllowNeg=false, SCTAB nForTab=-1) const
Definition: viewdata.cxx:2380
ScAddress GetCurPos() const
Definition: viewdata.cxx:4119
Degree100 GetValue() const
const Color & GetColor() const
void SetEventSource(const css::uno::Reference< css::accessibility::XAccessible > &rInterface)
tools::Rectangle GetParagraphBoundingBox() const
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
constexpr tools::Long GetWidth() const
constexpr tools::Long Top() const
void SetSize(const Size &)
void SetPos(const Point &rPoint)
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
constexpr tools::Long GetHeight() const
tools::Rectangle & Intersection(const tools::Rectangle &rRect)
constexpr tools::Long Left() const
constexpr bool IsEmpty() const
void AddRelation(const css::accessibility::AccessibleRelation &rRelation)
tools::Rectangle GetWindowExtentsAbsolute() const
bool HasFocus() const
vcl::Window * GetAccessibleParentWindow() const
tools::Rectangle GetWindowExtentsRelative(const vcl::Window &rRelativeWindow) const
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
int nCount
ULONG m_refCount
float u
float x
@ CELLTYPE_FORMULA
Definition: global.hxx:276
sal_Int32 nIndex
sal_uInt16 nPos
std::unique_ptr< sal_Int32[]> pData
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &... rSn)
int i
enumrange< T >::Iterator begin(enumrange< T >)
end
IMPLEMENT_GET_IMPLEMENTATION_ID(DrawController)
void dispose()
long Long
constexpr TypedWhichId< ScIndentItem > ATTR_INDENT(131)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
constexpr TypedWhichId< SvxBrushItem > ATTR_BACKGROUND(148)
constexpr TypedWhichId< ScRotateValueItem > ATTR_ROTATE_VALUE(135)
constexpr TypedWhichId< ScProtectionAttr > ATTR_PROTECTION(149)
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
This is very similar to ScCellValue, except that it references the original value instead of copying ...
Definition: cellvalue.hxx:108
ScFormulaCell * getFormula() const
Definition: cellvalue.hxx:137
CellType getType() const
Definition: cellvalue.hxx:133
sal_Int16 SCTAB
Definition: types.hxx:22
#define IMPLEMENT_FORWARD_XINTERFACE3(classname, refcountbase, baseclass2, baseclass3)
ScSplitPos
Definition: viewdata.hxx:44