xref: /trunk/main/sc/source/ui/inc/output.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_OUTPUT_HXX
25 #define SC_OUTPUT_HXX
26 
27 #include "address.hxx"
28 #include <tools/list.hxx>
29 #include <tools/color.hxx>
30 #include <tools/fract.hxx>
31 #include <com/sun/star/embed/XEmbeddedObject.hpp>
32 
33 class Rectangle;
34 class Font;
35 class OutputDevice;
36 class Window;
37 class EditEngine;
38 class ScDocument;
39 class ScBaseCell;
40 class ScPatternAttr;
41 class SvxMarginItem;
42 class SdrObject;
43 class SdrOle2Obj;
44 struct RowInfo;
45 struct ScTableInfo;
46 class ScTabViewShell;
47 class ScPageBreakData;
48 class FmFormView;
49 class ScFieldEditEngine;
50 
51 // #i74769# SdrPaintWindow predefine
52 class SdrPaintWindow;
53 
54 // ---------------------------------------------------------------------------
55 
56 #define SC_SCENARIO_HSPACE		60
57 #define SC_SCENARIO_VSPACE		50
58 
59 // ---------------------------------------------------------------------------
60 
61 #define SC_OBJECTS_NONE			0
62 #define SC_OBJECTS_DRAWING		1
63 #define SC_OBJECTS_OLE			2
64 #define SC_OBJECTS_CHARTS		4
65 #define SC_OBJECTS_ALL			( SC_OBJECTS_DRAWING | SC_OBJECTS_OLE | SC_OBJECTS_CHARTS )
66 
67 enum ScOutputType { OUTTYPE_WINDOW, OUTTYPE_PRINTER };
68 
69 class ScOutputData
70 {
71 friend class ScDrawStringsVars;
72 private:
73     struct OutputAreaParam
74     {
75         Rectangle   maAlignRect;
76         Rectangle   maClipRect;
77         long        mnColWidth;
78         bool        mbLeftClip;
79         bool        mbRightClip;
80     };
81 
82 	OutputDevice* pDev;			// Device
83 	OutputDevice* pRefDevice;	// printer if used for preview
84 	OutputDevice* pFmtDevice;	// reference for text formatting
85     ScTableInfo& mrTabInfo;
86 	RowInfo* pRowInfo;			// Info-Block
87 	SCSIZE nArrCount;			// belegte Zeilen im Info-Block
88 	ScDocument* pDoc;			// Dokument
89 	SCTAB nTab;				    // Tabelle
90 	long nScrX; 				// Ausgabe Startpos. (Pixel)
91 	long nScrY;
92 	long nScrW; 				// Ausgabe Groesse (Pixel)
93 	long nScrH;
94 	long nMirrorW;				// Visible output width for mirroring (default: nScrW)
95 	SCCOL nX1;					// Start-/Endkoordinaten
96 	SCROW nY1;					//	( incl. versteckte )
97 	SCCOL nX2;
98 	SCROW nY2;
99 	SCCOL nVisX1; 				// Start-/Endkoordinaten
100 	SCROW nVisY1;				//	( sichtbarer Bereich )
101 	SCCOL nVisX2;
102 	SCROW nVisY2;
103 	ScOutputType eType;			// Bildschirm/Drucker ...
104 	double nPPTX;				// Pixel per Twips
105 	double nPPTY;
106 //	sal_uInt16 nZoom;				// Zoom-Faktor (Prozent) - fuer GetFont
107 	Fraction aZoomX;
108 	Fraction aZoomY;
109 
110 	SdrObject* pEditObj;		// beim Painten auslassen
111 
112 	ScTabViewShell* pViewShell;	// zum Connecten von sichtbaren Plug-Ins
113 
114 	// #114135#
115 	FmFormView* pDrawView;		// SdrView to paint to
116 
117 	sal_Bool bEditMode;				// InPlace editierte Zelle - nicht ausgeben
118 	SCCOL nEditCol;
119 	SCROW nEditRow;
120 
121 	sal_Bool bMetaFile;				// Ausgabe auf Metafile (nicht in Pixeln!)
122 	sal_Bool bSingleGrid;			// beim Gitter bChanged auswerten
123 
124 	sal_Bool bPagebreakMode;		// Seitenumbruch-Vorschau
125 	sal_Bool bSolidBackground;		// weiss statt transparent
126 
127 	sal_Bool bUseStyleColor;
128 	sal_Bool bForceAutoColor;
129 
130 	sal_Bool bSyntaxMode;			// Syntax-Highlighting
131 	Color* pValueColor;
132 	Color* pTextColor;
133 	Color* pFormulaColor;
134 
135 	Color	aGridColor;
136 
137 	sal_Bool	bShowNullValues;
138 	sal_Bool	bShowFormulas;
139 	sal_Bool	bShowSpellErrors;	// Spell-Errors in EditObjekten anzeigen
140 	sal_Bool	bMarkClipped;
141 
142 	sal_Bool	bSnapPixel;
143 
144 	sal_Bool	bAnyRotated;		// intern
145 	sal_Bool	bAnyClipped;		// intern
146 	sal_Bool	bTabProtected;
147 	sal_uInt8	nTabTextDirection;	// EEHorizontalTextDirection values
148 	sal_Bool	bLayoutRTL;
149 
150 	// #i74769# use SdrPaintWindow direct, remember it during BeginDrawLayers/EndDrawLayers
151 	SdrPaintWindow*		mpTargetPaintWindow;
152 
153 							// private methods
154 
155 	sal_Bool			GetMergeOrigin( SCCOL nX, SCROW nY, SCSIZE nArrY,
156 									SCCOL& rOverX, SCROW& rOverY, sal_Bool bVisRowChanged );
157 	sal_Bool			IsEmptyCellText( RowInfo* pThisRowInfo, SCCOL nX, SCROW nY );
158 	void			GetVisibleCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell*& rpCell );
159 
160 	sal_Bool			IsAvailable( SCCOL nX, SCROW nY );
161 
162 	void			GetOutputArea( SCCOL nX, SCSIZE nArrY, long nPosX, long nPosY,
163                                    SCCOL nCellX, SCROW nCellY, long nNeeded,
164                                    const ScPatternAttr& rPattern,
165                                    sal_uInt16 nHorJustify, bool bCellIsValue,
166                                    bool bBreak, bool bOverwrite,
167                                    OutputAreaParam& rParam );
168 
169     void            ShrinkEditEngine( EditEngine& rEngine, const Rectangle& rAlignRect,
170                                     long nLeftM, long nTopM, long nRightM, long nBottomM,
171                                     sal_Bool bWidth, sal_uInt16 nOrient, long nAttrRotate, sal_Bool bPixelToLogic,
172                                     long& rEngineWidth, long& rEngineHeight, long& rNeededPixel,
173                                     bool& rLeftClip, bool& rRightClip );
174 
175 	void			SetSyntaxColor( Font* pFont, ScBaseCell* pCell );
176 	void			SetEditSyntaxColor( EditEngine& rEngine, ScBaseCell* pCell );
177 
178 	double			GetStretch();
179 
180 	void			DrawRotatedFrame( const Color* pForceColor );		// pixel
181 
182     ScFieldEditEngine* CreateOutputEditEngine();
183 
184 public:
185 					ScOutputData( OutputDevice* pNewDev, ScOutputType eNewType,
186                                     ScTableInfo& rTabInfo, ScDocument* pNewDoc,
187 									SCTAB nNewTab, long nNewScrX, long nNewScrY,
188 									SCCOL nNewX1, SCROW nNewY1, SCCOL nNewX2, SCROW nNewY2,
189 									double nPixelPerTwipsX, double nPixelPerTwipsY,
190 									const Fraction* pZoomX = NULL,
191 									const Fraction* pZoomY = NULL );
192 
193 					~ScOutputData();
194 
195     void    SetContentDevice( OutputDevice* pContentDev );
196 
197 	void	SetRefDevice( OutputDevice* pRDev ) { pRefDevice = pFmtDevice = pRDev; }
198 	void	SetFmtDevice( OutputDevice* pRDev ) { pFmtDevice = pRDev; }
199 	void	SetEditObject( SdrObject* pObj )	{ pEditObj = pObj; }
200 	void	SetViewShell( ScTabViewShell* pSh ) { pViewShell = pSh; }
201 
202 	// #114135#
203 	void	SetDrawView( FmFormView* pNew )		{ pDrawView = pNew; }
204 
205 	void	SetSolidBackground( sal_Bool bSet )		{ bSolidBackground = bSet; }
206 	void	SetUseStyleColor( sal_Bool bSet )		{ bUseStyleColor = bSet; }
207 
208 	void	SetEditCell( SCCOL nCol, SCROW nRow );
209 	void	SetSyntaxMode( sal_Bool bNewMode );
210 	void	SetMetaFileMode( sal_Bool bNewMode );
211 	void	SetSingleGrid( sal_Bool bNewMode );
212 	void	SetGridColor( const Color& rColor );
213 	void	SetMarkClipped( sal_Bool bSet );
214 	void	SetShowNullValues ( sal_Bool bSet = sal_True );
215 	void	SetShowFormulas   ( sal_Bool bSet = sal_True );
216 	void	SetShowSpellErrors( sal_Bool bSet = sal_True );
217 	void	SetMirrorWidth( long nNew );
218 	long	GetScrW() const		{ return nScrW; }
219 	long	GetScrH() const		{ return nScrH; }
220 
221 	void	SetSnapPixel( sal_Bool bSet = sal_True );
222 
223 	void	DrawGrid( sal_Bool bGrid, sal_Bool bPage );
224 	void	DrawStrings( sal_Bool bPixelToLogic = sal_False );
225 	void	DrawBackground();
226 	void	DrawShadow();
227 	void	DrawExtraShadow(sal_Bool bLeft, sal_Bool bTop, sal_Bool bRight, sal_Bool bBottom);
228 	void	DrawFrame();
229 
230 					// with logic MapMode set!
231 	void	DrawEdit(sal_Bool bPixelToLogic);
232 
233 	void	FindRotated();
234 	void	DrawRotated(sal_Bool bPixelToLogic);		// logisch
235 
236 	void	DrawClear();
237 
238 	// #i72502# printer only command set
239 	Point PrePrintDrawingLayer(long nLogStX, long nLogStY );
240 	void PostPrintDrawingLayer(const Point& rMMOffset); // #i74768# need offset for FormLayer
241 	void PrintDrawingLayer(const sal_uInt16 nLayer, const Point& rMMOffset);
242 
243 	// nur Bildschirm:
244 	void	DrawingSingle(const sal_uInt16 nLayer);
245 	void	DrawSelectiveObjects(const sal_uInt16 nLayer);
246 
247 	sal_Bool	SetChangedClip();		// sal_False = nix
248     PolyPolygon GetChangedArea();
249 
250 	void	FindChanged();
251 	void	SetPagebreakMode( ScPageBreakData* pPageData );
252 #ifdef OLD_SELECTION_PAINT
253     void    DrawMark( Window* pWin );
254 #endif
255 	void	DrawRefMark( SCCOL nRefStartX, SCROW nRefStartY,
256 						 SCCOL nRefEndX, SCROW nRefEndY,
257 						 const Color& rColor, sal_Bool bHandle );
258 	void	DrawOneChange( SCCOL nRefStartX, SCROW nRefStartY,
259 							SCCOL nRefEndX, SCROW nRefEndY,
260 							const Color& rColor, sal_uInt16 nType );
261 	void	DrawChangeTrack();
262 	void	DrawClipMarks();
263 
264 	void	DrawNoteMarks();
265     void    AddPDFNotes();
266 };
267 
268 
269 
270 #endif
271 
272