/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef SC_DETFUNC_HXX #define SC_DETFUNC_HXX #include "address.hxx" #include #include #include "scdllapi.h" class SdrObject; class SdrPage; class String; class ScPostIt; class ScCommentData; class ScDetectiveData; class ScDocument; class ScAddress; class ScRange; #define SC_DET_MAXCIRCLE 1000 enum ScDetectiveDelete { SC_DET_ALL, SC_DET_DETECTIVE, SC_DET_CIRCLES, SC_DET_ARROWS }; enum ScDetectiveObjType { SC_DETOBJ_NONE, SC_DETOBJ_ARROW, SC_DETOBJ_FROMOTHERTAB, SC_DETOBJ_TOOTHERTAB, SC_DETOBJ_CIRCLE }; class SC_DLLPUBLIC ScDetectiveFunc { static ColorData nArrowColor; static ColorData nErrorColor; static ColorData nCommentColor; static sal_Bool bColorsInitialized; ScDocument* pDoc; SCTAB nTab; enum DrawPosMode { DRAWPOS_TOPLEFT, /// Top-left edge of the cell. DRAWPOS_BOTTOMRIGHT, /// Bottom-right edge of the cell. DRAWPOS_DETARROW, /// Position inside cell for detective arrows. DRAWPOS_CAPTIONLEFT, /// Top-left edge of the cell for captions. DRAWPOS_CAPTIONRIGHT /// Top-right edge of the cell for captions (incl. merged cells). }; /** Returns a drawing layer position for the passed cell address. */ Point GetDrawPos( SCCOL nCol, SCROW nRow, DrawPosMode eMode ) const; /** Returns the drawing layer rectangle for the passed cell range. */ Rectangle GetDrawRect( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) const; /** Returns the drawing layer rectangle for the passed cell address. */ Rectangle GetDrawRect( SCCOL nCol, SCROW nRow ) const; sal_Bool HasArrow( const ScAddress& rStart, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab ); void DeleteArrowsAt( SCCOL nCol, SCROW nRow, sal_Bool bDestPnt ); void DeleteBox( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); sal_Bool HasError( const ScRange& rRange, ScAddress& rErrPos ); void FillAttributes( ScDetectiveData& rData ); // called from DrawEntry/DrawAlienEntry and InsertObject sal_Bool InsertArrow( SCCOL nCol, SCROW nRow, SCCOL nRefStartCol, SCROW nRefStartRow, SCCOL nRefEndCol, SCROW nRefEndRow, sal_Bool bFromOtherTab, sal_Bool bRed, ScDetectiveData& rData ); sal_Bool InsertToOtherTab( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, sal_Bool bRed, ScDetectiveData& rData ); // DrawEntry / DrawAlienEntry check for existing arrows and errors sal_Bool DrawEntry( SCCOL nCol, SCROW nRow, const ScRange& rRef, ScDetectiveData& rData ); sal_Bool DrawAlienEntry( const ScRange& rRef, ScDetectiveData& rData ); void DrawCircle( SCCOL nCol, SCROW nRow, ScDetectiveData& rData ); sal_uInt16 InsertPredLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, sal_uInt16 nLevel ); sal_uInt16 InsertPredLevelArea( const ScRange& rRef, ScDetectiveData& rData, sal_uInt16 nLevel ); sal_uInt16 FindPredLevel( SCCOL nCol, SCROW nRow, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel ); sal_uInt16 FindPredLevelArea( const ScRange& rRef, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel ); sal_uInt16 InsertErrorLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, sal_uInt16 nLevel ); sal_uInt16 InsertSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScDetectiveData& rData, sal_uInt16 nLevel ); sal_uInt16 FindSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel ); sal_Bool FindFrameForObject( SdrObject* pObject, ScRange& rRange ); void Modified(); public: ScDetectiveFunc(ScDocument* pDocument, SCTAB nTable) : pDoc(pDocument),nTab(nTable) {} sal_Bool ShowSucc( SCCOL nCol, SCROW nRow ); sal_Bool ShowPred( SCCOL nCol, SCROW nRow ); sal_Bool ShowError( SCCOL nCol, SCROW nRow ); sal_Bool DeleteSucc( SCCOL nCol, SCROW nRow ); sal_Bool DeletePred( SCCOL nCol, SCROW nRow ); sal_Bool DeleteAll( ScDetectiveDelete eWhat ); sal_Bool MarkInvalid(sal_Bool& rOverflow); static void UpdateAllComments( ScDocument& rDoc ); // on all tables void UpdateAllArrowColors(); // on all tables static sal_Bool IsNonAlienArrow( SdrObject* pObject ); ScDetectiveObjType GetDetectiveObjectType( SdrObject* pObject, SCTAB nObjTab, ScAddress& rPosition, ScRange& rSource, sal_Bool& rRedLine ); void InsertObject( ScDetectiveObjType eType, const ScAddress& rPosition, const ScRange& rSource, sal_Bool bRedLine ); static ColorData GetArrowColor(); static ColorData GetErrorColor(); static ColorData GetCommentColor(); static void InitializeColors(); static sal_Bool IsColorsInitialized(); static void AppendChangTrackNoteSeparator(String &str); }; #endif