xref: /trunk/main/sc/source/ui/inc/prevloc.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_PREVLOC_HXX
25 #define SC_PREVLOC_HXX
26 
27 #include "address.hxx"
28 #include <tools/list.hxx>
29 #include <vcl/mapmod.hxx>
30 #include <sal/types.h>
31 
32 
33 #define SC_PREVIEW_MAXRANGES	4
34 #define SC_PREVIEW_RANGE_EDGE   0
35 #define SC_PREVIEW_RANGE_REPCOL 1
36 #define SC_PREVIEW_RANGE_REPROW 2
37 #define SC_PREVIEW_RANGE_TAB    3
38 
39 class OutputDevice;
40 class String;
41 class Point;
42 class Rectangle;
43 class ScAddress;
44 class ScRange;
45 class ScDocument;
46 
47 struct ScPreviewColRowInfo
48 {
49 	sal_Bool	bIsHeader;
50 	SCCOLROW    nDocIndex;
51 	long	nPixelStart;
52 	long	nPixelEnd;
53 
SetScPreviewColRowInfo54 	void Set( sal_Bool bHeader, SCCOLROW nIndex, long nStart, long nEnd )
55 	{
56 		bIsHeader   = bHeader;
57 		nDocIndex   = nIndex;
58 		nPixelStart = nStart;
59 		nPixelEnd   = nEnd;
60 	}
61 };
62 
63 class ScPreviewTableInfo
64 {
65 	SCTAB					nTab;
66 	SCCOL					nCols;
67 	SCROW					nRows;
68 	ScPreviewColRowInfo*	pColInfo;
69 	ScPreviewColRowInfo*	pRowInfo;
70 
71 public:
72 			ScPreviewTableInfo();
73 			~ScPreviewTableInfo();
74 
GetTab() const75 	SCTAB						GetTab() const		{ return nTab; }
GetCols() const76 	SCCOL						GetCols() const		{ return nCols; }
GetRows() const77 	SCROW						GetRows() const		{ return nRows; }
GetColInfo() const78 	const ScPreviewColRowInfo*	GetColInfo() const	{ return pColInfo; }
GetRowInfo() const79 	const ScPreviewColRowInfo*	GetRowInfo() const	{ return pRowInfo; }
80 
81 	void	SetTab( SCTAB nNewTab );
82 	void	SetColInfo( SCCOL nCount, ScPreviewColRowInfo* pNewInfo );
83 	void	SetRowInfo( SCROW nCount, ScPreviewColRowInfo* pNewInfo );
84 	void	LimitToArea( const Rectangle& rPixelArea );
85 };
86 
87 
88 class ScPreviewLocationData
89 {
90     OutputDevice* pWindow;
91 	ScDocument*	pDoc;
92 	MapMode		aCellMapMode;
93 	MapMode		aDrawMapMode[SC_PREVIEW_MAXRANGES];
94 	Rectangle	aDrawRectangle[SC_PREVIEW_MAXRANGES];
95     	sal_uInt8   	aDrawRangeId[SC_PREVIEW_MAXRANGES];
96 	sal_uInt16		nDrawRanges;
97 	SCTAB		nPrintTab;
98 	List		aEntries;
99 
100 //UNUSED2008-05  ScAddress	GetCellFromRange( const Size& rOffsetPixel, const ScRange& rRange ) const;
101 	Rectangle	GetOffsetPixel( const ScAddress& rCellPos, const ScRange& rRange ) const;
102 
103 public:
104 			ScPreviewLocationData( ScDocument* pDocument, OutputDevice* pWin );
105 			~ScPreviewLocationData();
106 
107 	void	SetCellMapMode( const MapMode& rMapMode );
108 	void	SetPrintTab( SCTAB nNew );
109 	void	Clear();
110 	void	AddCellRange( const Rectangle& rRect, const ScRange& rRange, sal_Bool bRepCol, sal_Bool bRepRow,
111 							const MapMode& rDrawMap );
112 	void	AddColHeaders( const Rectangle& rRect, SCCOL nStartCol, SCCOL nEndCol, sal_Bool bRepCol );
113 	void	AddRowHeaders( const Rectangle& rRect, SCROW nStartRow, SCROW nEndRow, sal_Bool bRepRow );
114 	void	AddHeaderFooter( const Rectangle& rRect, sal_Bool bHeader, sal_Bool bLeft );
115 	void	AddNoteMark( const Rectangle& rRect, const ScAddress& rPos );
116 	void	AddNoteText( const Rectangle& rRect, const ScAddress& rPos );
117 
GetPrintTab() const118 	SCTAB	GetPrintTab() const		{ return nPrintTab; }
119 
120 	//	Get info on visible columns/rows in the visible area
121 	void	GetTableInfo( const Rectangle& rVisiblePixel, ScPreviewTableInfo& rInfo ) const;
122 
GetDrawRanges() const123 	sal_uInt16	GetDrawRanges() const	{ return nDrawRanges; }
124 	void	GetDrawRange( sal_uInt16 nPos, Rectangle& rPixelRect, MapMode& rMapMode, sal_uInt8& rRangeId ) const;
125 
126 	sal_Bool	GetHeaderPosition( Rectangle& rHeaderRect ) const;
127 	sal_Bool	GetFooterPosition( Rectangle& rFooterRect ) const;
128 	sal_Bool	IsHeaderLeft() const;
129 	sal_Bool	IsFooterLeft() const;
130 
131 	long	GetNoteCountInRange( const Rectangle& rVisiblePixel, sal_Bool bNoteMarks ) const;
132 	sal_Bool	GetNoteInRange( const Rectangle& rVisiblePixel, long nIndex, sal_Bool bNoteMarks,
133 							ScAddress& rCellPos, Rectangle& rNoteRect ) const;
134     Rectangle GetNoteInRangeOutputRect(const Rectangle& rVisiblePixel, sal_Bool bNoteMarks,
135                             const ScAddress& aCellPos) const;
136 
137 	//	Check if any cells (including column/row headers) are in the visible area
138 	sal_Bool	HasCellsInRange( const Rectangle& rVisiblePixel ) const;
139 
140 	sal_Bool	GetCellPosition( const ScAddress& rCellPos, Rectangle& rCellRect ) const;
141 
142 	// returns the rectangle where the EditEngine draws the text of a Header Cell
143 	// if bColHeader is true it returns the rectangle of the header of the column in rCellPos
144 	// otherwise of the header of the row in rCellPos
145 	Rectangle GetHeaderCellOutputRect(const Rectangle& rVisRect, const ScAddress& rCellPos, sal_Bool bColHeader) const;
146 	Rectangle GetCellOutputRect(const ScAddress& rCellPos) const;
147 
148     // Query the range and rectangle of the main (non-repeat) cell range.
149 	// Returns sal_False if not contained.
150     sal_Bool    GetMainCellRange( ScRange& rRange, Rectangle& rPixRect ) const;
151 };
152 
153 #endif
154