xref: /aoo42x/main/sc/inc/detfunc.hxx (revision 38d50f7b)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_DETFUNC_HXX
25 #define SC_DETFUNC_HXX
26 
27 #include "address.hxx"
28 #include <tools/gen.hxx>
29 #include <tools/color.hxx>
30 #include "scdllapi.h"
31 
32 class SdrObject;
33 class SdrPage;
34 class String;
35 
36 class ScPostIt;
37 class ScCommentData;
38 class ScDetectiveData;
39 class ScDocument;
40 class ScAddress;
41 class ScRange;
42 
43 #define SC_DET_MAXCIRCLE	1000
44 
45 enum ScDetectiveDelete { SC_DET_ALL, SC_DET_DETECTIVE, SC_DET_CIRCLES, SC_DET_ARROWS };
46 
47 enum ScDetectiveObjType
48 {
49 	SC_DETOBJ_NONE,
50 	SC_DETOBJ_ARROW,
51 	SC_DETOBJ_FROMOTHERTAB,
52 	SC_DETOBJ_TOOTHERTAB,
53 	SC_DETOBJ_CIRCLE
54 };
55 
56 class SC_DLLPUBLIC ScDetectiveFunc
57 {
58 	static ColorData nArrowColor;
59 	static ColorData nErrorColor;
60 	static ColorData nCommentColor;
61 	static sal_Bool		 bColorsInitialized;
62 
63 	ScDocument*		pDoc;
64 	SCTAB			nTab;
65 
66     enum DrawPosMode
67     {
68         DRAWPOS_TOPLEFT,        /// Top-left edge of the cell.
69         DRAWPOS_BOTTOMRIGHT,    /// Bottom-right edge of the cell.
70         DRAWPOS_DETARROW,       /// Position inside cell for detective arrows.
71         DRAWPOS_CAPTIONLEFT,    /// Top-left edge of the cell for captions.
72         DRAWPOS_CAPTIONRIGHT    /// Top-right edge of the cell for captions (incl. merged cells).
73     };
74 
75     /** Returns a drawing layer position for the passed cell address. */
76     Point       GetDrawPos( SCCOL nCol, SCROW nRow, DrawPosMode eMode ) const;
77 
78     /** Returns the drawing layer rectangle for the passed cell range. */
79     Rectangle   GetDrawRect( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) const;
80 
81     /** Returns the drawing layer rectangle for the passed cell address. */
82     Rectangle   GetDrawRect( SCCOL nCol, SCROW nRow ) const;
83 
84 	sal_Bool		HasArrow( const ScAddress& rStart,
85 							SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab );
86 
87 	void		DeleteArrowsAt( SCCOL nCol, SCROW nRow, sal_Bool bDestPnt );
88 	void		DeleteBox( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 );
89 
90 	sal_Bool		HasError( const ScRange& rRange, ScAddress& rErrPos );
91 
92 	void		FillAttributes( ScDetectiveData& rData );
93 
94 				// called from DrawEntry/DrawAlienEntry and InsertObject
95 	sal_Bool		InsertArrow( SCCOL nCol, SCROW nRow,
96 								SCCOL nRefStartCol, SCROW nRefStartRow,
97 								SCCOL nRefEndCol, SCROW nRefEndRow,
98 								sal_Bool bFromOtherTab, sal_Bool bRed,
99 								ScDetectiveData& rData );
100 	sal_Bool		InsertToOtherTab( SCCOL nStartCol, SCROW nStartRow,
101 								SCCOL nEndCol, SCROW nEndRow, sal_Bool bRed,
102 								ScDetectiveData& rData );
103 
104 				// DrawEntry / DrawAlienEntry check for existing arrows and errors
105 	sal_Bool		DrawEntry( SCCOL nCol, SCROW nRow, const ScRange& rRef,
106 								ScDetectiveData& rData );
107 	sal_Bool		DrawAlienEntry( const ScRange& rRef,
108 								ScDetectiveData& rData );
109 
110 	void		DrawCircle( SCCOL nCol, SCROW nRow, ScDetectiveData& rData );
111 
112 	sal_uInt16		InsertPredLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, sal_uInt16 nLevel );
113 	sal_uInt16		InsertPredLevelArea( const ScRange& rRef,
114 										ScDetectiveData& rData, sal_uInt16 nLevel );
115 	sal_uInt16		FindPredLevel( SCCOL nCol, SCROW nRow, sal_uInt16 nLevel, sal_uInt16 nDeleteLevel );
116 	sal_uInt16		FindPredLevelArea( const ScRange& rRef,
117 									sal_uInt16 nLevel, sal_uInt16 nDeleteLevel );
118 
119 	sal_uInt16		InsertErrorLevel( SCCOL nCol, SCROW nRow, ScDetectiveData& rData, sal_uInt16 nLevel );
120 
121 	sal_uInt16		InsertSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
122 										ScDetectiveData& rData, sal_uInt16 nLevel );
123 	sal_uInt16		FindSuccLevel( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
124 								sal_uInt16 nLevel, sal_uInt16 nDeleteLevel );
125 
126 	sal_Bool		FindFrameForObject( SdrObject* pObject, ScRange& rRange );
127 
128     void        Modified();
129 
130 public:
131 				ScDetectiveFunc(ScDocument* pDocument, SCTAB nTable) : pDoc(pDocument),nTab(nTable) {}
132 
133 	sal_Bool		ShowSucc( SCCOL nCol, SCROW nRow );
134 	sal_Bool		ShowPred( SCCOL nCol, SCROW nRow );
135 	sal_Bool		ShowError( SCCOL nCol, SCROW nRow );
136 
137 	sal_Bool		DeleteSucc( SCCOL nCol, SCROW nRow );
138 	sal_Bool		DeletePred( SCCOL nCol, SCROW nRow );
139 	sal_Bool		DeleteAll( ScDetectiveDelete eWhat );
140 
141 	sal_Bool		MarkInvalid(sal_Bool& rOverflow);
142 
143     static void UpdateAllComments( ScDocument& rDoc );        // on all tables
144 	void		UpdateAllArrowColors();		// on all tables
145 
146 	static sal_Bool	IsNonAlienArrow( SdrObject* pObject );
147 
148 	ScDetectiveObjType GetDetectiveObjectType( SdrObject* pObject, SCTAB nObjTab,
149 								ScAddress& rPosition, ScRange& rSource, sal_Bool& rRedLine );
150 	void		InsertObject( ScDetectiveObjType eType, const ScAddress& rPosition,
151 								const ScRange& rSource, sal_Bool bRedLine );
152 
153 	static ColorData GetArrowColor();
154 	static ColorData GetErrorColor();
155 	static ColorData GetCommentColor();
156 	static void InitializeColors();
157 	static sal_Bool	IsColorsInitialized();
158 };
159 
160 
161 
162 #endif
163