blob: 0debb6e4802d01b6b914f19309fa516c7b94710c [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_OUTPUT_HXX
#define SC_OUTPUT_HXX
#include "address.hxx"
#include <tools/list.hxx>
#include <tools/color.hxx>
#include <tools/fract.hxx>
#include <com/sun/star/embed/XEmbeddedObject.hpp>
class Rectangle;
class Font;
class OutputDevice;
class Window;
class EditEngine;
class ScDocument;
class ScBaseCell;
class ScPatternAttr;
class SvxMarginItem;
class SdrObject;
class SdrOle2Obj;
struct RowInfo;
struct ScTableInfo;
class ScTabViewShell;
class ScPageBreakData;
class FmFormView;
class ScFieldEditEngine;
// #i74769# SdrPaintWindow predefine
class SdrPaintWindow;
// ---------------------------------------------------------------------------
#define SC_SCENARIO_HSPACE 60
#define SC_SCENARIO_VSPACE 50
// ---------------------------------------------------------------------------
#define SC_OBJECTS_NONE 0
#define SC_OBJECTS_DRAWING 1
#define SC_OBJECTS_OLE 2
#define SC_OBJECTS_CHARTS 4
#define SC_OBJECTS_ALL ( SC_OBJECTS_DRAWING | SC_OBJECTS_OLE | SC_OBJECTS_CHARTS )
enum ScOutputType { OUTTYPE_WINDOW, OUTTYPE_PRINTER };
class ScOutputData
{
friend class ScDrawStringsVars;
private:
struct OutputAreaParam
{
Rectangle maAlignRect;
Rectangle maClipRect;
long mnColWidth;
bool mbLeftClip;
bool mbRightClip;
};
OutputDevice* pDev; // Device
OutputDevice* pRefDevice; // printer if used for preview
OutputDevice* pFmtDevice; // reference for text formatting
ScTableInfo& mrTabInfo;
RowInfo* pRowInfo; // Info-Block
SCSIZE nArrCount; // belegte Zeilen im Info-Block
ScDocument* pDoc; // Dokument
SCTAB nTab; // Tabelle
long nScrX; // Ausgabe Startpos. (Pixel)
long nScrY;
long nScrW; // Ausgabe Groesse (Pixel)
long nScrH;
long nMirrorW; // Visible output width for mirroring (default: nScrW)
SCCOL nX1; // Start-/Endkoordinaten
SCROW nY1; // ( incl. versteckte )
SCCOL nX2;
SCROW nY2;
SCCOL nVisX1; // Start-/Endkoordinaten
SCROW nVisY1; // ( sichtbarer Bereich )
SCCOL nVisX2;
SCROW nVisY2;
ScOutputType eType; // Bildschirm/Drucker ...
double nPPTX; // Pixel per Twips
double nPPTY;
// sal_uInt16 nZoom; // Zoom-Faktor (Prozent) - fuer GetFont
Fraction aZoomX;
Fraction aZoomY;
SdrObject* pEditObj; // beim Painten auslassen
ScTabViewShell* pViewShell; // zum Connecten von sichtbaren Plug-Ins
// #114135#
FmFormView* pDrawView; // SdrView to paint to
sal_Bool bEditMode; // InPlace editierte Zelle - nicht ausgeben
SCCOL nEditCol;
SCROW nEditRow;
sal_Bool bMetaFile; // Ausgabe auf Metafile (nicht in Pixeln!)
sal_Bool bSingleGrid; // beim Gitter bChanged auswerten
sal_Bool bPagebreakMode; // Seitenumbruch-Vorschau
sal_Bool bSolidBackground; // weiss statt transparent
sal_Bool bUseStyleColor;
sal_Bool bForceAutoColor;
sal_Bool bSyntaxMode; // Syntax-Highlighting
Color* pValueColor;
Color* pTextColor;
Color* pFormulaColor;
Color aGridColor;
sal_Bool bShowNullValues;
sal_Bool bShowFormulas;
sal_Bool bShowSpellErrors; // Spell-Errors in EditObjekten anzeigen
sal_Bool bMarkClipped;
sal_Bool bSnapPixel;
sal_Bool bAnyRotated; // intern
sal_Bool bAnyClipped; // intern
sal_Bool bTabProtected;
sal_uInt8 nTabTextDirection; // EEHorizontalTextDirection values
sal_Bool bLayoutRTL;
// #i74769# use SdrPaintWindow direct, remember it during BeginDrawLayers/EndDrawLayers
SdrPaintWindow* mpTargetPaintWindow;
// private methods
sal_Bool GetMergeOrigin( SCCOL nX, SCROW nY, SCSIZE nArrY,
SCCOL& rOverX, SCROW& rOverY, sal_Bool bVisRowChanged );
sal_Bool IsEmptyCellText( RowInfo* pThisRowInfo, SCCOL nX, SCROW nY );
void GetVisibleCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell*& rpCell );
sal_Bool IsAvailable( SCCOL nX, SCROW nY );
void GetOutputArea( SCCOL nX, SCSIZE nArrY, long nPosX, long nPosY,
SCCOL nCellX, SCROW nCellY, long nNeeded,
const ScPatternAttr& rPattern,
sal_uInt16 nHorJustify, bool bCellIsValue,
bool bBreak, bool bOverwrite,
OutputAreaParam& rParam );
void ShrinkEditEngine( EditEngine& rEngine, const Rectangle& rAlignRect,
long nLeftM, long nTopM, long nRightM, long nBottomM,
sal_Bool bWidth, sal_uInt16 nOrient, long nAttrRotate, sal_Bool bPixelToLogic,
long& rEngineWidth, long& rEngineHeight, long& rNeededPixel,
bool& rLeftClip, bool& rRightClip );
void SetSyntaxColor( Font* pFont, ScBaseCell* pCell );
void SetEditSyntaxColor( EditEngine& rEngine, ScBaseCell* pCell );
double GetStretch();
void DrawRotatedFrame( const Color* pForceColor ); // pixel
ScFieldEditEngine* CreateOutputEditEngine();
public:
ScOutputData( OutputDevice* pNewDev, ScOutputType eNewType,
ScTableInfo& rTabInfo, ScDocument* pNewDoc,
SCTAB nNewTab, long nNewScrX, long nNewScrY,
SCCOL nNewX1, SCROW nNewY1, SCCOL nNewX2, SCROW nNewY2,
double nPixelPerTwipsX, double nPixelPerTwipsY,
const Fraction* pZoomX = NULL,
const Fraction* pZoomY = NULL );
~ScOutputData();
void SetContentDevice( OutputDevice* pContentDev );
void SetRefDevice( OutputDevice* pRDev ) { pRefDevice = pFmtDevice = pRDev; }
void SetFmtDevice( OutputDevice* pRDev ) { pFmtDevice = pRDev; }
void SetEditObject( SdrObject* pObj ) { pEditObj = pObj; }
void SetViewShell( ScTabViewShell* pSh ) { pViewShell = pSh; }
// #114135#
void SetDrawView( FmFormView* pNew ) { pDrawView = pNew; }
void SetSolidBackground( sal_Bool bSet ) { bSolidBackground = bSet; }
void SetUseStyleColor( sal_Bool bSet ) { bUseStyleColor = bSet; }
void SetEditCell( SCCOL nCol, SCROW nRow );
void SetSyntaxMode( sal_Bool bNewMode );
void SetMetaFileMode( sal_Bool bNewMode );
void SetSingleGrid( sal_Bool bNewMode );
void SetGridColor( const Color& rColor );
void SetMarkClipped( sal_Bool bSet );
void SetShowNullValues ( sal_Bool bSet = sal_True );
void SetShowFormulas ( sal_Bool bSet = sal_True );
void SetShowSpellErrors( sal_Bool bSet = sal_True );
void SetMirrorWidth( long nNew );
long GetScrW() const { return nScrW; }
long GetScrH() const { return nScrH; }
void SetSnapPixel( sal_Bool bSet = sal_True );
void DrawGrid( sal_Bool bGrid, sal_Bool bPage );
void DrawStrings( sal_Bool bPixelToLogic = sal_False );
void DrawBackground();
void DrawShadow();
void DrawExtraShadow(sal_Bool bLeft, sal_Bool bTop, sal_Bool bRight, sal_Bool bBottom);
void DrawFrame();
// with logic MapMode set!
void DrawEdit(sal_Bool bPixelToLogic);
void FindRotated();
void DrawRotated(sal_Bool bPixelToLogic); // logisch
void DrawClear();
// #i72502# printer only command set
Point PrePrintDrawingLayer(long nLogStX, long nLogStY );
void PostPrintDrawingLayer(const Point& rMMOffset); // #i74768# need offset for FormLayer
void PrintDrawingLayer(const sal_uInt16 nLayer, const Point& rMMOffset);
// nur Bildschirm:
void DrawingSingle(const sal_uInt16 nLayer);
void DrawSelectiveObjects(const sal_uInt16 nLayer);
sal_Bool SetChangedClip(); // sal_False = nix
Region GetChangedAreaRegion();
void FindChanged();
void SetPagebreakMode( ScPageBreakData* pPageData );
#ifdef OLD_SELECTION_PAINT
void DrawMark( Window* pWin );
#endif
void DrawRefMark( SCCOL nRefStartX, SCROW nRefStartY,
SCCOL nRefEndX, SCROW nRefEndY,
const Color& rColor, sal_Bool bHandle );
void DrawOneChange( SCCOL nRefStartX, SCROW nRefStartY,
SCCOL nRefEndX, SCROW nRefEndY,
const Color& rColor, sal_uInt16 nType );
void DrawChangeTrack();
void DrawClipMarks();
void DrawNoteMarks();
void AddPDFNotes();
};
#endif