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