summaryrefslogtreecommitdiff
path: root/sc/inc/detfunc.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/inc/detfunc.hxx')
-rw-r--r--sc/inc/detfunc.hxx166
1 files changed, 166 insertions, 0 deletions
diff --git a/sc/inc/detfunc.hxx b/sc/inc/detfunc.hxx
new file mode 100644
index 000000000000..5c57d32af898
--- /dev/null
+++ b/sc/inc/detfunc.hxx
@@ -0,0 +1,166 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SC_DETFUNC_HXX
+#define SC_DETFUNC_HXX
+
+#include "address.hxx"
+#include <tools/gen.hxx>
+#include <tools/color.hxx>
+#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 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;
+
+ BOOL HasArrow( const ScAddress& rStart,
+ SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab );
+
+ void DeleteArrowsAt( SCCOL nCol, SCROW nRow, BOOL bDestPnt );
+ void DeleteBox( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
+
+ BOOL HasError( const ScRange& rRange, ScAddress& rErrPos );
+
+ void FillAttributes( ScDetectiveData& rData );
+
+ // called from DrawEntry/DrawAlienEntry and InsertObject
+ BOOL InsertArrow( SCCOL nCol, SCROW nRow,
+ SCCOL nRefStartCol, SCROW nRefStartRow,
+ SCCOL nRefEndCol, SCROW nRefEndRow,
+ BOOL bFromOtherTab, BOOL bRed,
+ ScDetectiveData& rData );
+ BOOL InsertToOtherTab( SCCOL nStartCol, SCROW nStartRow,
+ SCCOL nEndCol, SCROW nEndRow, BOOL bRed,
+ ScDetectiveData& rData );
+
+ // DrawEntry / DrawAlienEntry check for existing arrows and errors
+ BOOL DrawEntry( SCCOL nCol, SCROW nRow, const ScRange& rRef,
+ ScDetectiveData& rData );
+ BOOL DrawAlienEntry( const ScRange& rRef,
+ ScDetectiveData& rData );
+
+ void DrawCircle( SCCOL nCol, SCROW nRow, ScDetectiveData& rData );
+
+ USHORT InsertPredLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, USHORT nLevel );
+ USHORT InsertPredLevelArea( const ScRange& rRef,
+ ScDetectiveData& rData, USHORT nLevel );
+ USHORT FindPredLevel( SCCOL nCol, SCROW nRow, USHORT nLevel, USHORT nDeleteLevel );
+ USHORT FindPredLevelArea( const ScRange& rRef,
+ USHORT nLevel, USHORT nDeleteLevel );
+
+ USHORT InsertErrorLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, USHORT nLevel );
+
+ USHORT InsertSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
+ ScDetectiveData& rData, USHORT nLevel );
+ USHORT FindSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
+ USHORT nLevel, USHORT nDeleteLevel );
+
+ BOOL FindFrameForObject( SdrObject* pObject, ScRange& rRange );
+
+ void Modified();
+
+public:
+ ScDetectiveFunc(ScDocument* pDocument, SCTAB nTable) : pDoc(pDocument),nTab(nTable) {}
+
+ BOOL ShowSucc( SCCOL nCol, SCROW nRow );
+ BOOL ShowPred( SCCOL nCol, SCROW nRow );
+ BOOL ShowError( SCCOL nCol, SCROW nRow );
+
+ BOOL DeleteSucc( SCCOL nCol, SCROW nRow );
+ BOOL DeletePred( SCCOL nCol, SCROW nRow );
+ BOOL DeleteAll( ScDetectiveDelete eWhat );
+
+ BOOL MarkInvalid(BOOL& rOverflow);
+
+ static void UpdateAllComments( ScDocument& rDoc ); // on all tables
+ void UpdateAllArrowColors(); // on all tables
+
+ static BOOL IsNonAlienArrow( SdrObject* pObject );
+
+ ScDetectiveObjType GetDetectiveObjectType( SdrObject* pObject, SCTAB nObjTab,
+ ScAddress& rPosition, ScRange& rSource, BOOL& rRedLine );
+ void InsertObject( ScDetectiveObjType eType, const ScAddress& rPosition,
+ const ScRange& rSource, BOOL bRedLine );
+
+ static ColorData GetArrowColor();
+ static ColorData GetErrorColor();
+ static ColorData GetCommentColor();
+ static void InitializeColors();
+ static BOOL IsColorsInitialized();
+};
+
+
+
+#endif