/************************************************************** * * 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 #include #include #include 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