48 #include <osl/diagnose.h>
56 #include <document.hxx>
116 SfxItemSet& GetCaptionSet() {
return aCaptionSet; }
117 void UpdateCaptionSet(
const SfxItemSet& rItemSet );
168 const OUString
aName;
238 void ScCommentData::UpdateCaptionSet(
const SfxItemSet& rItemSet )
243 for( sal_uInt16 nWhich = aWhichIter.FirstWhich(); nWhich > 0; nWhich = aWhichIter.NextWhich() )
245 if(rItemSet.
GetItemState(nWhich,
false, &pPoolItem) == SfxItemState::SET)
264 aCaptionSet.Put(*pPoolItem);
278 return nEndCol1 >= nStartCol2 && nEndCol2 >= nStartCol1 &&
279 nEndRow1 >= nStartRow2 && nEndRow2 >= nStartRow1;
288 for (
bool bHasCell = aIter.
first(); bHasCell; bHasCell = aIter.
next())
294 if (nError != FormulaError::NONE)
298 return (nError != FormulaError::NONE);
303 OSL_ENSURE( rDoc.
ValidColRow( nCol, nRow ),
"ScDetectiveFunc::GetDrawPos - invalid cell address" );
331 aPos.setX( aPos.X() * -1 );
353 if(1 == rPolyPolygon.
count())
359 if(4 == aSubPoly.count() && aSubPoly.isClosed() && !aSubPoly.areControlPointsUsed())
371 bool bStartAlien = ( rStart.
Tab() !=
nTab );
372 bool bEndAlien = ( nEndTab !=
nTab );
374 if (bStartAlien && bEndAlien)
376 OSL_FAIL(
"bStartAlien && bEndAlien");
389 OSL_ENSURE(pPage,
"Page ?");
394 while (pObject && !bFound)
401 bool bObjStartAlien =
406 bool bStartHit = bStartAlien ? bObjStartAlien :
408 bool bEndHit = bEndAlien ? bObjEndAlien :
411 if ( bStartHit && bEndHit )
414 pObject = aIter.
Next();
427 bool bObjStartAlien =
432 return !bObjStartAlien && !bObjEndAlien;
443 bool bFromOtherTab,
bool bRed,
449 bool bArea = ( nRefStartCol != nRefEndCol || nRefStartRow != nRefEndRow );
450 if (bArea && !bFromOtherTab)
463 pModel->
AddCalcUndo( std::make_unique<SdrUndoInsertObj>( *pBox ) );
478 aStartPos =
Point( aEndPos.X() - 1000 * nPageSign, aEndPos.Y() - 1000 );
479 if (aStartPos.X() * nPageSign < 0)
480 aStartPos.AdjustX(2000 * nPageSign );
481 if (aStartPos.Y() < 0)
482 aStartPos.AdjustY(2000 );
487 if (bArea && !bFromOtherTab)
507 pModel->
AddCalcUndo( std::make_unique<SdrUndoInsertObj>( *pArrow ) );
528 bool bArea = ( nStartCol != nEndCol || nStartRow != nEndRow );
540 pModel->
AddCalcUndo( std::make_unique<SdrUndoInsertObj>( *pBox ) );
551 Point aEndPos( aStartPos.X() + 1000 * nPageSign, aStartPos.Y() - 1000 );
553 aEndPos.AdjustY(2000 );
577 pModel->
AddCalcUndo( std::make_unique<SdrUndoInsertObj>( *pArrow ) );
601 bool bError =
HasError( rRef, aErrorPos );
607 bAlien, bError, rData );
618 bool bError =
HasError( rRef, aErrorPos );
647 pModel->
AddCalcUndo( std::make_unique<SdrUndoInsertObj>( *pCircle ) );
663 OSL_ENSURE(pPage,
"Page ?");
671 size_t nDelCount = 0;
672 std::unique_ptr<SdrObject*[]> ppObj(
new SdrObject*[nObjCount]);
682 ppObj[nDelCount++] = pObject;
685 pObject = aIter.
Next();
692 for (
size_t i=1;
i<=nDelCount; ++
i)
693 pModel->
AddCalcUndo(std::make_unique<SdrUndoDelObj>(*ppObj[nDelCount-
i]));
696 for (
size_t i=1;
i<=nDelCount; ++
i)
711 #define SC_DET_TOLERANCE 50
725 #undef SC_DET_TOLERANCE
736 OSL_ENSURE(pPage,
"Page ?");
744 size_t nDelCount = 0;
745 std::unique_ptr<SdrObject*[]> ppObj(
new SdrObject*[nObjCount]);
752 if (
auto pSdrRectObj = dynamic_cast< const SdrRectObj* >(pObject) )
754 aObjRect = pSdrRectObj->GetLogicRect();
756 if (
RectIsPoints( aObjRect, aStartCorner, aEndCorner ) )
757 ppObj[nDelCount++] = pObject;
760 pObject = aIter.
Next();
763 for (
size_t i=1;
i<=nDelCount; ++
i)
764 pModel->
AddCalcUndo( std::make_unique<SdrUndoRemoveObj>( *ppObj[nDelCount-
i] ) );
766 for (
size_t i=1;
i<=nDelCount; ++
i)
777 sal_uInt16 nResult = DET_INS_EMPTY;
780 for (
bool bHasCell = aIter.
first(); bHasCell; bHasCell = aIter.
next())
788 case DET_INS_INSERTED:
789 nResult = DET_INS_INSERTED;
791 case DET_INS_CONTINUE:
792 if (nResult != DET_INS_INSERTED)
793 nResult = DET_INS_CONTINUE;
795 case DET_INS_CIRCULAR:
796 if (nResult == DET_INS_EMPTY)
797 nResult = DET_INS_CIRCULAR;
812 return DET_INS_EMPTY;
816 return DET_INS_CIRCULAR;
822 sal_uInt16 nResult = DET_INS_EMPTY;
828 if (
DrawEntry( nCol, nRow, aRef, rData ))
830 nResult = DET_INS_INSERTED;
838 sal_uInt16 nSubResult;
848 case DET_INS_INSERTED:
849 nResult = DET_INS_INSERTED;
851 case DET_INS_CONTINUE:
852 if (nResult != DET_INS_INSERTED)
853 nResult = DET_INS_CONTINUE;
855 case DET_INS_CIRCULAR:
856 if (nResult == DET_INS_EMPTY)
857 nResult = DET_INS_CIRCULAR;
863 if (nResult != DET_INS_INSERTED)
864 nResult = DET_INS_CONTINUE;
874 sal_uInt16 nLevel, sal_uInt16 nDeleteLevel )
876 sal_uInt16 nResult = nLevel;
879 for (
bool bHasCell = aCellIter.
first(); bHasCell; bHasCell = aCellIter.
next())
896 OSL_ENSURE( nLevel<1000,
"Level" );
910 sal_uInt16 nResult = nLevel;
911 bool bDelete = ( nDeleteLevel && nLevel == nDeleteLevel-1 );
940 nLevel+1, nDeleteLevel );
957 return DET_INS_EMPTY;
961 return DET_INS_CIRCULAR;
967 sal_uInt16 nResult = DET_INS_EMPTY;
972 bool bHasError =
false;
979 nResult = DET_INS_INSERTED;
984 rData, nLevel+1 ) == DET_INS_INSERTED)
985 nResult = DET_INS_INSERTED;
995 nResult = DET_INS_INSERTED;
1005 sal_uInt16 nResult = DET_INS_EMPTY;
1007 for (
bool bHas = aCellIter.
first(); bHas; bHas = aCellIter.
next())
1038 nResult = DET_INS_INSERTED;
1044 if (nResult == DET_INS_EMPTY)
1045 nResult = DET_INS_CIRCULAR;
1058 case DET_INS_INSERTED:
1059 nResult = DET_INS_INSERTED;
1061 case DET_INS_CONTINUE:
1062 if (nResult != DET_INS_INSERTED)
1063 nResult = DET_INS_CONTINUE;
1065 case DET_INS_CIRCULAR:
1066 if (nResult == DET_INS_EMPTY)
1067 nResult = DET_INS_CIRCULAR;
1073 if (nResult != DET_INS_INSERTED)
1074 nResult = DET_INS_CONTINUE;
1087 sal_uInt16 nLevel, sal_uInt16 nDeleteLevel )
1089 OSL_ENSURE( nLevel<1000,
"Level" );
1091 sal_uInt16 nResult = nLevel;
1092 bool bDelete = ( nDeleteLevel && nLevel == nDeleteLevel-1 );
1095 for (
bool bHas = aCellIter.
first(); bHas; bHas = aCellIter.
next())
1126 else if ( !bRunning &&
1132 nLevel+1, nDeleteLevel );
1133 if (nTemp > nResult)
1154 sal_uInt16 nMaxLevel = 0;
1155 sal_uInt16 nResult = DET_INS_CONTINUE;
1156 while (nResult == DET_INS_CONTINUE && nMaxLevel < 1000)
1163 return ( nResult == DET_INS_INSERTED );
1174 sal_uInt16 nMaxLevel = 0;
1175 sal_uInt16 nResult = DET_INS_CONTINUE;
1176 while (nResult == DET_INS_CONTINUE && nMaxLevel < 1000)
1183 return ( nResult == DET_INS_INSERTED );
1202 return ( nResult == DET_INS_INSERTED );
1211 sal_uInt16 nLevelCount =
FindSuccLevel( nCol, nRow, nCol, nRow, 0, 0 );
1215 return ( nLevelCount != 0 );
1228 return ( nLevelCount != 0 );
1247 OSL_ENSURE(pPage,
"Page ?");
1252 size_t nDelCount = 0;
1255 std::unique_ptr<SdrObject*[]> ppObj(
new SdrObject*[nObjCount]);
1262 if (
auto pSdrCircObj = dynamic_cast<const SdrCircObj*>(pObject) )
1266 ppObj[nDelCount++] = pObject;
1269 pObject = aIter.
Next();
1272 for (
size_t i = 1;
i <= nDelCount; ++
i)
1273 pModel->
AddCalcUndo(std::make_unique<SdrUndoRemoveObj>(*ppObj[nDelCount -
i]));
1275 for (
size_t i = 1;
i <= nDelCount; ++
i)
1283 return (nDelCount != 0);
1293 OSL_ENSURE(pPage,
"Page ?");
1297 size_t nDelCount = 0;
1301 std::unique_ptr<SdrObject*[]> ppObj(
new SdrObject*[nObjCount]);
1309 bool bDoThis =
true;
1310 bool bCircle = (
dynamic_cast<const SdrCircObj*
>( pObject) !=
nullptr );
1313 bDoThis = !bCaption;
1317 bDoThis = !bCaption && !bCircle;
1323 ppObj[nDelCount++] = pObject;
1326 pObject = aIter.
Next();
1329 for (
size_t i=1;
i<=nDelCount; ++
i)
1330 pModel->
AddCalcUndo( std::make_unique<SdrUndoRemoveObj>( *ppObj[nDelCount-
i] ) );
1332 for (
size_t i=1;
i<=nDelCount; ++
i)
1340 return ( nDelCount != 0 );
1360 const ScPatternAttr* pPattern = aAttrIter.GetNext( nCol, nRow1, nRow2 );
1372 SCROW nNextRow = nRow1;
1379 for ( nRow = nNextRow; nRow < nCellRow && nInsCount <
SC_DET_MAXCIRCLE; nRow++ )
1392 nNextRow = nCellRow + 1;
1395 for ( nRow = nNextRow; nRow <= nRow2 && nInsCount <
SC_DET_MAXCIRCLE; nRow++ )
1404 pPattern = aAttrIter.GetNext( nCol, nRow1, nRow2 );
1410 return ( bDeleted || nInsCount != 0 );
1414 vector<ScTokenRef>& rRefTokens)
1417 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
1433 vector<ScTokenRef>& rRefTokens)
1435 vector<ScTokenRef> aSrcRange;
1436 aSrcRange.push_back(
1440 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
1472 for(
SCTAB nObjTab = 0, nTabCount = rDoc.
GetTableCount(); nObjTab < nTabCount; ++nObjTab )
1474 SdrPage* pPage = pModel->
GetPage( static_cast< sal_uInt16 >( nObjTab ) );
1475 OSL_ENSURE( pPage,
"Page ?" );
1485 OSL_ENSURE( pNote && (pNote->
GetCaption() ==
pObject),
"ScDetectiveFunc::UpdateAllComments - invalid cell note" );
1488 ScCommentData
aData( rDoc, pModel );
1491 aData.UpdateCaptionSet( aAttrColorSet );
1492 pObject->SetMergedItemSetAndBroadcast( aData.GetCaptionSet() );
1495 pCaption->SetSpecialTextBoxShadow();
1496 pCaption->SetFixedTail();
1513 for(
SCTAB nObjTab = 0, nTabCount = rDoc.
GetTableCount(); nObjTab < nTabCount; ++nObjTab )
1515 SdrPage* pPage = pModel->
GetPage( static_cast< sal_uInt16 >( nObjTab ) );
1516 OSL_ENSURE( pPage,
"Page ?" );
1524 bool bArrow =
false;
1525 bool bError =
false;
1536 if (
HasError( aSource, aErrPos ) )
1563 if ( dynamic_cast<const SdrRectObj*>(
pObject) !=
nullptr && dynamic_cast<const SdrCaptionObj*>(
pObject) ==
nullptr )
1569 if ( bArrow || bError )
1589 if (!pModel)
return;
1592 OSL_ENSURE(pPage,
"Page ?");
1600 const size_t nOrdNum = pObject->
GetOrdNum();
1628 bool bValidStart =
pData->maStart.IsValid();
1629 bool bValidEnd =
pData->maEnd.IsValid();
1637 else if ( bValidEnd )
1641 rSource =
pData->maStart;
1643 rPosition =
pData->maEnd;
1656 else if (dynamic_cast<const SdrCircObj*>(pObject) !=
nullptr)
1661 rPosition =
pData->maStart;
1665 else if (dynamic_cast<const SdrRectObj*>(pObject) !=
nullptr)
1670 rPosition =
pData->maStart;
1685 if (!pModel)
return;
1752 rDisplay +=
"\n--------\n";
tools::Rectangle GetDrawRect(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
bool ShowPred(SCCOL nCol, SCROW nRow)
void DeleteBox(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
SdrMetricItem makeSdrTextUpperDistItem(tools::Long mnHeight)
bool IsDataValid(const OUString &rTest, const ScPatternAttr &rPattern, const ScAddress &rPos) const
void FindFrameForObject(const SdrObject *pObject, ScRange &rRange)
SCCOL SanitizeCol(SCCOL nCol) const
SdrMetricItem makeSdrShadowYDistItem(tools::Long nDist)
ScDetectiveData(SdrModel *pModel)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
constexpr TypedWhichId< XLineEndItem > XATTR_LINEEND(XATTR_LINE_FIRST+5)
constexpr TypedWhichId< ScPatternAttr > ATTR_PATTERN(156)
constexpr TypedWhichId< XLineStartItem > XATTR_LINESTART(XATTR_LINE_FIRST+4)
bool ShowSucc(SCCOL nCol, SCROW nRow)
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
constexpr sal_uInt16 SDRATTR_END(SDRATTR_TEXTCOLUMNS_LAST)
SfxItemSet & GetFromTabSet()
sal_uInt16 InsertPredLevelArea(const ScRange &rRef, ScDetectiveData &rData, sal_uInt16 nLevel)
virtual bool IsPolyObj() const
sal_uInt16 FindPredLevel(SCCOL nCol, SCROW nRow, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel)
std::unique_ptr< sal_Int32[]> pData
static ScDrawObjData * GetObjData(SdrObject *pObj, bool bCreate=false)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
constexpr TypedWhichId< XLineWidthItem > XATTR_LINEWIDTH(XATTR_LINE_FIRST+2)
SdrObject * GetObj(size_t nNum) const
static bool IsNonAlienArrow(const SdrObject *pObject)
sal_uInt16 InsertErrorLevel(SCCOL nCol, SCROW nRow, ScDetectiveData &rData, sal_uInt16 nLevel)
size_t GetObjCount() const
constexpr sal_uInt16 EE_ITEMS_END(EE_FEATURE_END)
static Color GetErrorColor()
void SC_DLLPUBLIC join(const ScDocument *pDoc,::std::vector< ScTokenRef > &rTokens, const ScTokenRef &pToken, const ScAddress &rPos)
void InsertObject(ScDetectiveObjType eType, const ScAddress &rPosition, const ScRange &rSource, bool bRedLine)
static tools::Rectangle GetCellRect(const ScDocument &rDoc, const ScAddress &rPos, bool bMergedCell)
Returns the rectangle for the passed cell address in 1/100 mm.
This is very similar to ScCellValue, except that it references the original value instead of copying ...
void UpdateAllArrowColors()
on all tables
SdrMetricItem makeSdrTextRightDistItem(tools::Long mnHeight)
void GetAllPreds(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,::std::vector< ScTokenRef > &rRefTokens)
static bool lcl_IsOtherTab(const basegfx::B2DPolyPolygon &rPolyPolygon)
SdrMetricItem makeSdrTextLowerDistItem(tools::Long mnHeight)
virtual sal_uInt32 GetPointCount() const
static void Free(SdrObject *&_rpObject)
virtual void InsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
EmbeddedObjectRef * pObject
ScFormulaCell * getFormulaCell()
constexpr sal_uInt16 SDRATTR_START(XATTR_START)
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
SdrOnOffItem makeSdrTextAutoGrowHeightItem(bool bAuto)
SC_DLLPUBLIC ScDocumentPool * GetPool()
SC_DLLPUBLIC const ScValidationData * GetValidationEntry(sal_uLong nIndex) const
SfxItemSet & GetToTabSet()
bool ShowError(SCCOL nCol, SCROW nRow)
B2DPolygon const & getB2DPolygon(sal_uInt32 nIndex) const
SC_DLLPUBLIC ScPostIt * GetNote(const ScAddress &rPos)
Point GetDrawPos(SCCOL nCol, SCROW nRow, DrawPosMode eMode) const
static bool lcl_HasThickLine(const SdrObject &rObj)
SdrPage * getSdrPageFromSdrObject() const
SC_DLLPUBLIC SCROW MaxRow() const
static Color GetArrowColor()
sal_uInt16 InsertSuccLevel(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScDetectiveData &rData, sal_uInt16 nLevel)
SC_DLLPUBLIC SCTAB GetTableCount() const
Additional class containing cell annotation data.
Top-left edge of the cell.
bool DeletePred(SCCOL nCol, SCROW nRow)
const ScRefCellValue & getRefCellValue() const
ScTokenRef createRefToken(const ScDocument &rDoc, const ScAddress &rAddr)
bool DrawEntry(SCCOL nCol, SCROW nRow, const ScRange &rRef, ScDetectiveData &rData)
DrawEntry / DrawAlienEntry check for existing arrows and errors.
Walk through all cells in an area.
ScFormulaCell * mpFormula
SdrOnOffItem makeSdrTextAutoGrowWidthItem(bool bAuto)
void SetMaxLevel(sal_uInt16 nVal)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_SHADOW(SDRATTR_SHADOW_FIRST+0)
sal_uInt16 FindSuccLevel(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel)
const SfxPoolItem & GetItem(sal_uInt16 nWhichP) const
constexpr OUStringLiteral aData
static bool IsColorsInitialized()
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
void DrawCircle(SCCOL nCol, SCROW nRow, ScDetectiveData &rData)
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
virtual void SetLayer(SdrLayerID nLayer)
SC_DLLPUBLIC SCCOL MaxCol() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
Bottom-right edge of the cell.
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
static ScDrawObjData * GetNoteCaptionData(SdrObject *pObj, SCTAB nTab)
Returns the object data, if the passed object is a cell note caption.
Iterator for references in a formula cell.
static bool bColorsInitialized
bool MarkInvalid(bool &rOverflow)
static Color nCommentColor
const SdrPage * GetPage(sal_uInt16 nPgNum) const
constexpr sal_uInt16 EE_ITEMS_START(OWN_ATTR_VALUE_END+1)
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
static void UpdateAllComments(ScDocument &rDoc)
on all tables
sal_uInt32 GetOrdNum() const
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWYDIST(SDRATTR_SHADOW_FIRST+3)
void AddCalcUndo(std::unique_ptr< SdrUndoAction > pUndo)
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
const SfxPoolItem & GetDefaultItem(sal_uInt16 nWhich) const
sal_uInt16 InsertPredLevel(SCCOL nCol, SCROW nRow, ScDetectiveData &rData, sal_uInt16 nLevel)
sal_uInt16 GetMaxLevel() const
static bool RectIsPoints(const tools::Rectangle &rRect, const Point &rStart, const Point &rEnd)
virtual SdrObject * RemoveObject(size_t nObjNum)
sal_uInt16 FindPredLevelArea(const ScRange &rRef, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel)
bool DeleteCirclesAt(SCCOL nCol, SCROW nRow)
SdrMetricItem makeSdrTextLeftDistItem(tools::Long mnHeight)
bool DeleteAll(ScDetectiveDelete eWhat)
virtual SdrLayerID GetLayer() const
bool DeleteSucc(SCCOL nCol, SCROW nRow)
SCROW SanitizeRow(SCROW nRow) const
const ScAddress & GetPos() const
bool ValidColRow(SCCOL nCol, SCROW nRow) const
static Color GetCommentColor()
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWXDIST(SDRATTR_SHADOW_FIRST+2)
void setClosed(bool bNew)
SdrCaptionObj * GetCaption() const
Returns an existing note caption object.
void GetAllSuccs(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,::std::vector< ScTokenRef > &rRefTokens)
void SetStreamValid(SCTAB nTab, bool bSet, bool bIgnoreLock=false)
static bool Intersect(SCCOL nStartCol1, SCROW nStartRow1, SCCOL nEndCol1, SCROW nEndRow1, SCCOL nStartCol2, SCROW nStartRow2, SCCOL nEndCol2, SCROW nEndRow2)
bool GetNextRef(ScRange &rRange)
static void AppendChangTrackNoteSeparator(OUString &str)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
bool HasError(const ScRange &rRange, ScAddress &rErrPos)
SdrMetricItem makeSdrShadowXDistItem(tools::Long nDist)
static ScDrawObjData * GetObjDataTab(SdrObject *pObj, SCTAB nTab)
static void InitializeColors()
bool HasArrow(const ScAddress &rStart, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab)
const SfxItemSet & GetMergedItemSet() const
Position inside cell for detective arrows.
constexpr SdrLayerID SC_LAYER_INTERN(2)
::boost::intrusive_ptr< formula::FormulaToken > ScTokenRef
virtual SdrPage * getSdrPageFromSdrObjList() const
SfxItemSet & GetArrowSet()
These need to be in global namespace just like their respective types are.
bool DrawAlienEntry(const ScRange &rRef, ScDetectiveData &rData)
SdrOnOffItem makeSdrShadowItem(bool bShadow)
formula::FormulaToken * GetNextRefToken()
void DeleteArrowsAt(SCCOL nCol, SCROW nRow, bool bDestPnt)
bool SC_DLLPUBLIC intersects(const ScDocument *pDoc, const ::std::vector< ScTokenRef > &rTokens, const ScTokenRef &pToken, const ScAddress &rPos)
static bool IsNoteCaption(SdrObject *pObj)
Returns true, if the passed object is the caption of a cell note.
void InsertToOtherTab(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, bool bRed, ScDetectiveData &rData)
SdrObjList * getParentSdrObjListFromSdrObject() const
bool IsIgnoreBlank() const
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
constexpr TypedWhichId< XLineColorItem > XATTR_LINECOLOR(XATTR_LINE_FIRST+3)
virtual Point GetPoint(sal_uInt32 i) const
B2DPolygon createPolygonFromEllipse(const B2DPoint &rCenter, double fRadiusX, double fRadiusY, sal_uInt32 nStartQuadrant=0)
void InsertArrow(SCCOL nCol, SCROW nRow, SCCOL nRefStartCol, SCROW nRefStartRow, SCCOL nRefEndCol, SCROW nRefEndRow, bool bFromOtherTab, bool bRed, ScDetectiveData &rData)
called from DrawEntry/DrawAlienEntry and InsertObject
SfxItemSet & GetCircleSet()
ScDetectiveObjType GetDetectiveObjectType(SdrObject *pObject, SCTAB nObjTab, ScAddress &rPosition, ScRange &rSource, bool &rRedLine)
bool m_bDetectedRangeSegmentation false