/************************************************************************* * * $RCSfile: table.hxx,v $ * * $Revision: 1.17 $ * * last change: $Author: nn $ $Date: 2002-10-10 16:55:05 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (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.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef SC_TABLE_HXX #define SC_TABLE_HXX #ifndef _GEN_HXX //autogen #include #endif #ifndef _COLOR_HXX //autogen #include #endif #ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_ #include #endif #ifndef SC_COLUMN_HXX #include "column.hxx" #endif #ifndef SC_SORTPARAM_HXX #include "sortparam.hxx" #endif namespace utl { class SearchParam; class TextSearch; } class SfxItemSet; class SfxStyleSheetBase; class SvxBoxInfoItem; class SvxBoxItem; class SvxSearchItem; class ScAutoFormat; class ScAutoFormatData; class ScBaseCell; class ScDocument; class ScDrawLayer; class ScFormulaCell; class ScOutlineTable; class ScPostIt; class ScPrintSaverTab; class ScProgress; class ScProgress; class ScRangeList; class ScSortInfoArray; class ScStyleSheet; class ScTableLink; class ScUserListData; class ScIndexMap; struct RowInfo; struct ScFunctionData; struct ScLineFlags; class CollatorWrapper; class ScTable { private: // Daten pro Tabelle ------------------ ScColumn aCol[MAXCOL+1]; String aName; String aComment; BOOL bScenario; String aLinkDoc; String aLinkFlt; String aLinkOpt; String aLinkTab; ULONG nLinkRefreshDelay; BYTE nLinkMode; // Seitenformatvorlage String aPageStyle; BOOL bPageSizeValid; Size aPageSizeTwips; // Groesse der Druck-Seite USHORT nRepeatStartX; // Wiederholungszeilen/Spalten USHORT nRepeatEndX; // REPEAT_NONE, wenn nicht benutzt USHORT nRepeatStartY; USHORT nRepeatEndY; BOOL bProtected; com::sun::star::uno::Sequence aProtectPass; USHORT* pColWidth; USHORT* pRowHeight; BYTE* pColFlags; BYTE* pRowFlags; ScOutlineTable* pOutlineTable; USHORT nTableAreaX; USHORT nTableAreaY; BOOL bTableAreaValid; // interne Verwaltung ------------------ BOOL bVisible; USHORT nTab; USHORT nRecalcLvl; // Rekursionslevel Size-Recalc ScDocument* pDocument; utl::SearchParam* pSearchParam; utl::TextSearch* pSearchText; // SortierParameter um den Stackbedarf von Quicksort zu Minimieren ScSortParam aSortParam; CollatorWrapper* pSortCollator; BOOL bGlobalKeepQuery; BOOL bSharedNameInserted; USHORT nPrintRangeCount; ScRange* pPrintRanges; ScRange* pRepeatColRange; ScRange* pRepeatRowRange; USHORT nLockCount; ScRangeList* pScenarioRanges; Color aScenarioColor; USHORT nScenarioFlags; BOOL bActiveScenario; friend class ScDocument; // fuer FillInfo friend class ScDocumentIterator; friend class ScValueIterator; friend class ScQueryValueIterator; friend class ScCellIterator; friend class ScQueryCellIterator; friend class ScHorizontalCellIterator; friend class ScHorizontalAttrIterator; friend class ScDocAttrIterator; friend class ScAttrRectIterator; public: ScTable( ScDocument* pDoc, USHORT nNewTab, const String& rNewName, BOOL bColInfo = TRUE, BOOL bRowInfo = TRUE ); ~ScTable(); ScOutlineTable* GetOutlineTable() { return pOutlineTable; } long GetCellCount() const; long GetWeightedCount() const; ULONG GetCodeCount() const; // RPN-Code in Formeln BOOL SetOutlineTable( const ScOutlineTable* pNewOutline ); void StartOutlineTable(); void DoAutoOutline( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); BOOL TestRemoveSubTotals( const ScSubTotalParam& rParam ); void RemoveSubTotals( ScSubTotalParam& rParam ); BOOL DoSubTotals( ScSubTotalParam& rParam ); BOOL IsVisible() const { return bVisible; } void SetVisible( BOOL bVis ); BOOL IsScenario() const { return bScenario; } void SetScenario( BOOL bFlag ); void GetScenarioComment( String& rComment) const { rComment = aComment; } void SetScenarioComment( const String& rComment ) { aComment = rComment; } const Color& GetScenarioColor() const { return aScenarioColor; } void SetScenarioColor(const Color& rNew) { aScenarioColor = rNew; } USHORT GetScenarioFlags() const { return nScenarioFlags; } void SetScenarioFlags(USHORT nNew) { nScenarioFlags = nNew; } void SetActiveScenario(BOOL bSet) { bActiveScenario = bSet; } BOOL IsActiveScenario() const { return bActiveScenario; } BYTE GetLinkMode() const { return nLinkMode; } BOOL IsLinked() const { return nLinkMode != SC_LINK_NONE; } const String& GetLinkDoc() const { return aLinkDoc; } const String& GetLinkFlt() const { return aLinkFlt; } const String& GetLinkOpt() const { return aLinkOpt; } const String& GetLinkTab() const { return aLinkTab; } ULONG GetLinkRefreshDelay() const { return nLinkRefreshDelay; } void SetLink( BYTE nMode, const String& rDoc, const String& rFlt, const String& rOpt, const String& rTab, ULONG nRefreshDelay ); void GetName( String& rName ) const; void SetName( const String& rNewName ); const String& GetPageStyle() const { return aPageStyle; } void SetPageStyle( const String& rName ); void PageStyleModified( const String& rNewName ); BOOL IsProtected() const { return bProtected; } const com::sun::star::uno::Sequence& GetPassword() const { return aProtectPass; } void SetProtection( BOOL bProtect, const com::sun::star::uno::Sequence& rPasswd ) { bProtected = bProtect; aProtectPass = rPasswd; } Size GetPageSize() const; void SetPageSize( const Size& rSize ); void SetRepeatArea( USHORT nStartCol, USHORT nEndCol, USHORT nStartRow, USHORT nEndRow ); void RemoveAutoSpellObj(); void LockTable(); void UnlockTable(); BOOL IsBlockEditable( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, BOOL* pOnlyNotBecauseOfMatrix = NULL ) const; BOOL IsSelectionEditable( const ScMarkData& rMark, BOOL* pOnlyNotBecauseOfMatrix = NULL ) const; BOOL HasBlockMatrixFragment( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2 ) const; BOOL HasSelectionMatrixFragment( const ScMarkData& rMark ) const; BOOL IsBlockEmpty( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2 ) const; void PutCell( const ScAddress&, ScBaseCell* pCell ); void PutCell( const ScAddress&, ULONG nFormatIndex, ScBaseCell* pCell); void PutCell( USHORT nCol, USHORT nRow, ScBaseCell* pCell ); void PutCell(USHORT nCol, USHORT nRow, ULONG nFormatIndex, ScBaseCell* pCell); // TRUE = Zahlformat gesetzt BOOL SetString( USHORT nCol, USHORT nRow, USHORT nTab, const String& rString ); void SetValue( USHORT nCol, USHORT nRow, const double& rVal ); void SetNote( USHORT nCol, USHORT nRow, const ScPostIt& rNote); void SetError( USHORT nCol, USHORT nRow, USHORT nError); void GetString( USHORT nCol, USHORT nRow, String& rString ); void GetInputString( USHORT nCol, USHORT nRow, String& rString ); double GetValue( const ScAddress& rPos ) const { return aCol[rPos.Col()].GetValue( rPos.Row() ); } double GetValue( USHORT nCol, USHORT nRow ); void GetFormula( USHORT nCol, USHORT nRow, String& rFormula, BOOL bAsciiExport = FALSE ); BOOL GetNote( USHORT nCol, USHORT nRow, ScPostIt& rNote); CellType GetCellType( const ScAddress& rPos ) const { return aCol[rPos.Col()].GetCellType( rPos.Row() ); } CellType GetCellType( USHORT nCol, USHORT nRow ) const; ScBaseCell* GetCell( const ScAddress& rPos ) const { return aCol[rPos.Col()].GetCell( rPos.Row() ); } ScBaseCell* GetCell( USHORT nCol, USHORT nRow ) const; void GetLastDataPos(USHORT& rCol, USHORT& rRow) const; BOOL TestInsertRow( USHORT nStartCol, USHORT nEndCol, USHORT nSize ); void InsertRow( USHORT nStartCol, USHORT nEndCol, USHORT nStartRow, USHORT nSize ); void DeleteRow( USHORT nStartCol, USHORT nEndCol, USHORT nStartRow, USHORT nSize, BOOL* pUndoOutline = NULL ); BOOL TestInsertCol( USHORT nStartRow, USHORT nEndRow, USHORT nSize ); void InsertCol( USHORT nStartCol, USHORT nStartRow, USHORT nEndRow, USHORT nSize ); void DeleteCol( USHORT nStartCol, USHORT nStartRow, USHORT nEndRow, USHORT nSize, BOOL* pUndoOutline = NULL ); void DeleteArea(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nDelFlag); void CopyToClip(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, ScTable* pTable, BOOL bKeepScenarioFlags); void CopyFromClip(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, short nDx, short nDy, USHORT nInsFlag, BOOL bAsLink, BOOL bSkipAttrForEmpty, ScTable* pTable); void StartListeningInArea( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2 ); void BroadcastInArea( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2 ); void CopyToTable(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFlags, BOOL bMarked, ScTable* pDestTab, const ScMarkData* pMarkData = NULL, BOOL bAsLink = FALSE, BOOL bColRowFlags = TRUE); void UndoToTable(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFlags, BOOL bMarked, ScTable* pDestTab, const ScMarkData* pMarkData = NULL); void TransposeClip( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, ScTable* pTransClip, USHORT nFlags, BOOL bAsLink ); // Markierung von diesem Dokument void MixMarked( const ScMarkData& rMark, USHORT nFunction, BOOL bSkipEmpty, ScTable* pSrcTab ); void MixData( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFunction, BOOL bSkipEmpty, ScTable* pSrcTab ); void CopyData( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, USHORT nDestCol, USHORT nDestRow, USHORT nDestTab ); void CopyScenarioFrom( const ScTable* pSrcTab ); void CopyScenarioTo( ScTable* pDestTab ) const; BOOL TestCopyScenarioTo( const ScTable* pDestTab ) const; void MarkScenarioIn( ScMarkData& rMark, USHORT nNeededBits ) const; BOOL HasScenarioRange( const ScRange& rRange ) const; void InvalidateScenarioRanges(); const ScRangeList* GetScenarioRanges() const; void CopyUpdated( const ScTable* pPosTab, ScTable* pDestTab ) const; void InvalidateTableArea() { bTableAreaValid = FALSE; } BOOL GetCellArea( USHORT& rEndCol, USHORT& rEndRow ) const; // FALSE = leer BOOL GetTableArea( USHORT& rEndCol, USHORT& rEndRow ) const; BOOL GetPrintArea( USHORT& rEndCol, USHORT& rEndRow, BOOL bNotes ) const; BOOL GetPrintAreaHor( USHORT nStartRow, USHORT nEndRow, USHORT& rEndCol, BOOL bNotes ) const; BOOL GetPrintAreaVer( USHORT nStartCol, USHORT nEndCol, USHORT& rEndRow, BOOL bNotes ) const; BOOL GetDataStart( USHORT& rStartCol, USHORT& rStartRow ) const; void ExtendPrintArea( OutputDevice* pDev, USHORT nStartCol, USHORT nStartRow, USHORT& rEndCol, USHORT nEndRow ); void GetDataArea( USHORT& rStartCol, USHORT& rStartRow, USHORT& rEndCol, USHORT& rEndRow, BOOL bIncludeOld ); USHORT GetEmptyLinesInBlock( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, ScDirection eDir ); void FindAreaPos( USHORT& rCol, USHORT& rRow, short nMovX, short nMovY ); void GetNextPos( USHORT& rCol, USHORT& rRow, short nMovX, short nMovY, BOOL bMarked, BOOL bUnprotected, const ScMarkData& rMark ); void LimitChartArea( USHORT& rStartCol, USHORT& rStartRow, USHORT& rEndCol, USHORT& rEndRow ); BOOL HasData( USHORT nCol, USHORT nRow ); BOOL HasStringData( USHORT nCol, USHORT nRow ); BOOL HasValueData( USHORT nCol, USHORT nRow ); USHORT GetErrorData(USHORT nCol, USHORT nRow) const; BOOL HasStringCells( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ) const; USHORT GetErrCode( const ScAddress& rPos ) const { return aCol[rPos.Col()].GetErrCode( rPos.Row() ); } USHORT GetErrCode( USHORT nCol, USHORT nRow ) const; void ResetChanged( const ScRange& rRange ); void SetDirty(); void SetDirty( const ScRange& ); void SetDirtyAfterLoad(); void SetDirtyVar(); void SetTableOpDirty( const ScRange& ); void CalcAll(); void CalcAfterLoad(); void CompileAll(); void CompileXML( ScProgress& rProgress ); void UpdateReference( UpdateRefMode eUpdateRefMode, USHORT nCol1, USHORT nRow1, USHORT nTab1, USHORT nCol2, USHORT nRow2, USHORT nTab2, short nDx, short nDy, short nDz, ScDocument* pUndoDoc = NULL, BOOL bIncludeDraw = TRUE ); void UpdateDrawRef( UpdateRefMode eUpdateRefMode, USHORT nCol1, USHORT nRow1, USHORT nTab1, USHORT nCol2, USHORT nRow2, USHORT nTab2, short nDx, short nDy, short nDz ); void UpdateTranspose( const ScRange& rSource, const ScAddress& rDest, ScDocument* pUndoDoc ); void UpdateGrow( const ScRange& rArea, USHORT nGrowX, USHORT nGrowY ); void UpdateInsertTab(USHORT nTable); void UpdateInsertTabOnlyCells(USHORT nTable); void UpdateDeleteTab( USHORT nTable, BOOL bIsMove, ScTable* pRefUndo = NULL ); void UpdateMoveTab(USHORT nOldPos, USHORT nNewPos, USHORT nTabNo, ScProgress& ); void UpdateCompile( BOOL bForceIfNameInUse = FALSE ); void SetTabNo(USHORT nNewTab); BOOL IsRangeNameInUse(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nIndex) const; void ReplaceRangeNamesInUse(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, const ScIndexMap& rMap ); void Fill( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFillCount, FillDir eFillDir, FillCmd eFillCmd, FillDateCmd eFillDateCmd, double nStepValue, double nMaxValue); String GetAutoFillPreview( const ScRange& rSource, USHORT nEndX, USHORT nEndY ); void UpdateSelectionFunction( ScFunctionData& rData, USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, const ScMarkData& rMark ); void AutoFormat( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, USHORT nFormatNo ); void GetAutoFormatData(USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, ScAutoFormatData& rData); void ScReplaceTabsStr( String& rStr, const String& rSrch, const String& rRepl ); // aus sw BOOL SearchAndReplace(const SvxSearchItem& rSearchItem, USHORT& rCol, USHORT& rRow, ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); void FindMaxRotCol( RowInfo* pRowInfo, USHORT nArrCount, USHORT nX1, USHORT nX2 ) const; void GetBorderLines( USHORT nCol, USHORT nRow, const SvxBorderLine** ppLeft, const SvxBorderLine** ppTop, const SvxBorderLine** ppRight, const SvxBorderLine** ppBottom ) const; BOOL HasLines( const ScRange& rRange, Rectangle& rSizes ) const; BOOL HasAttrib( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nMask ) const; BOOL HasAttribSelection( const ScMarkData& rMark, USHORT nMask ) const; BOOL ExtendMerge( USHORT nStartCol, USHORT nStartRow, USHORT& rEndCol, USHORT& rEndRow, BOOL bRefresh, BOOL bAttrs ); const SfxPoolItem* GetAttr( USHORT nCol, USHORT nRow, USHORT nWhich ) const; const ScPatternAttr* GetPattern( USHORT nCol, USHORT nRow ) const; ULONG GetNumberFormat( const ScAddress& rPos ) const { return aCol[rPos.Col()].GetNumberFormat( rPos.Row() ); } ULONG GetNumberFormat( USHORT nCol, USHORT nRow ) const; void MergeSelectionPattern( SfxItemSet** ppSet, const ScMarkData& rMark, BOOL bDeep ) const; void MergePatternArea( SfxItemSet** ppSet, USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, BOOL bDeep ) const; void MergeBlockFrame( SvxBoxItem* pLineOuter, SvxBoxInfoItem* pLineInner, ScLineFlags& rFlags, USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ) const; void ApplyBlockFrame( const SvxBoxItem* pLineOuter, const SvxBoxInfoItem* pLineInner, USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); void ApplyAttr( USHORT nCol, USHORT nRow, const SfxPoolItem& rAttr ); void ApplyPattern( USHORT nCol, USHORT nRow, const ScPatternAttr& rAttr ); void ApplyPatternArea( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, const ScPatternAttr& rAttr ); void SetPattern( const ScAddress& rPos, const ScPatternAttr& rAttr, BOOL bPutToPool = FALSE ) { aCol[rPos.Col()].SetPattern( rPos.Row(), rAttr, bPutToPool ); } void SetPattern( USHORT nCol, USHORT nRow, const ScPatternAttr& rAttr, BOOL bPutToPool = FALSE ); void ApplyPatternIfNumberformatIncompatible( const ScRange& rRange, const ScPatternAttr& rPattern, short nNewType ); void ApplyStyle( USHORT nCol, USHORT nRow, const ScStyleSheet& rStyle ); void ApplyStyleArea( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, const ScStyleSheet& rStyle ); void ApplySelectionStyle(const ScStyleSheet& rStyle, const ScMarkData& rMark); void ApplySelectionLineStyle( const ScMarkData& rMark, const SvxBorderLine* pLine, BOOL bColorOnly ); const ScStyleSheet* GetStyle( USHORT nCol, USHORT nRow ) const; const ScStyleSheet* GetSelectionStyle( const ScMarkData& rMark, BOOL& rFound ) const; const ScStyleSheet* GetAreaStyle( BOOL& rFound, USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2 ) const; void StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, BOOL bRemoved, OutputDevice* pDev, double nPPTX, double nPPTY, const Fraction& rZoomX, const Fraction& rZoomY ); BOOL IsStyleSheetUsed( const SfxStyleSheetBase& rStyle ) const; BOOL ApplyFlags( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, INT16 nFlags ); BOOL RemoveFlags( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, INT16 nFlags ); void ApplySelectionCache( SfxItemPoolCache* pCache, const ScMarkData& rMark ); void DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark ); void ClearSelectionItems( const USHORT* pWhich, const ScMarkData& rMark ); void ChangeSelectionIndent( BOOL bIncrement, const ScMarkData& rMark ); const ScRange* GetRepeatColRange() const { return pRepeatColRange; } const ScRange* GetRepeatRowRange() const { return pRepeatRowRange; } void SetRepeatColRange( const ScRange* pNew ); void SetRepeatRowRange( const ScRange* pNew ); USHORT GetPrintRangeCount() const { return nPrintRangeCount; } const ScRange* GetPrintRange(USHORT nPos) const; void SetPrintRangeCount( USHORT nNew ); void SetPrintRange( USHORT nPos, const ScRange& rNew ); void FillPrintSaver( ScPrintSaverTab& rSaveTab ) const; void RestorePrintRanges( const ScPrintSaverTab& rSaveTab ); USHORT GetOptimalColWidth( USHORT nCol, OutputDevice* pDev, double nPPTX, double nPPTY, const Fraction& rZoomX, const Fraction& rZoomY, BOOL bFormula, const ScMarkData* pMarkData, BOOL bSimpleTextImport ); BOOL SetOptimalHeight( USHORT nStartRow, USHORT nEndRow, USHORT nExtra, OutputDevice* pDev, double nPPTX, double nPPTY, const Fraction& rZoomX, const Fraction& rZoomY, BOOL bForce ); long GetNeededSize( USHORT nCol, USHORT nRow, OutputDevice* pDev, double nPPTX, double nPPTY, const Fraction& rZoomX, const Fraction& rZoomY, BOOL bWidth, BOOL bTotalSize ); void SetColWidth( USHORT nCol, USHORT nNewWidth ); void SetRowHeight( USHORT nRow, USHORT nNewHeight ); BOOL SetRowHeightRange( USHORT nStartRow, USHORT nEndRow, USHORT nNewHeight, double nPPTX, double nPPTY ); // nPPT fuer Test auf Veraenderung void SetManualHeight( USHORT nStartRow, USHORT nEndRow, BOOL bManual ); USHORT GetColWidth( USHORT nCol ) const; USHORT GetRowHeight( USHORT nRow ) const; ULONG GetColOffset( USHORT nCol ) const; ULONG GetRowOffset( USHORT nRow ) const; USHORT GetOriginalWidth( USHORT nCol ) const; USHORT GetOriginalHeight( USHORT nRow ) const; USHORT GetCommonWidth( USHORT nEndCol ) const; USHORT GetHiddenRowCount( USHORT nRow ) const; void ShowCol(USHORT nCol, BOOL bShow); void ShowRow(USHORT nRow, BOOL bShow); void DBShowRow(USHORT nRow, BOOL bShow); void ShowRows(USHORT nRow1, USHORT nRow2, BOOL bShow); void DBShowRows(USHORT nRow1, USHORT nRow2, BOOL bShow); void SetColFlags( USHORT nCol, BYTE nNewFlags ); void SetRowFlags( USHORT nRow, BYTE nNewFlags ); /// @return the index of the last column with any set flags (auto-pagebreak is ignored). USHORT GetLastFlaggedCol() const; /// @return the index of the last row with any set flags (auto-pagebreak is ignored). USHORT GetLastFlaggedRow() const; /// @return the index of the last changed column (flags and column width, auto pagebreak is ignored). USHORT GetLastChangedCol() const; /// @return the index of the last changed row (flags and row height, auto pagebreak is ignored). USHORT GetLastChangedRow() const; BOOL IsFiltered(USHORT nRow) const; BYTE GetColFlags( USHORT nCol ) const; BYTE GetRowFlags( USHORT nRow ) const; BOOL UpdateOutlineCol( USHORT nStartCol, USHORT nEndCol, BOOL bShow ); BOOL UpdateOutlineRow( USHORT nStartRow, USHORT nEndRow, BOOL bShow ); void UpdatePageBreaks( const ScRange* pUserArea ); void RemoveManualBreaks(); BOOL HasManualBreaks() const; void StripHidden( USHORT& rX1, USHORT& rY1, USHORT& rX2, USHORT& rY2 ); void ExtendHidden( USHORT& rX1, USHORT& rY1, USHORT& rX2, USHORT& rY2 ); BOOL Load( SvStream& rStream, USHORT nVersion, ScProgress* pProgress ); BOOL Save( SvStream& rStream, long& rSavedDocCells, ScProgress* pProgress ) const; void Sort(const ScSortParam& rSortParam, BOOL bKeepQuery); BOOL ValidQuery(USHORT nRow, const ScQueryParam& rQueryParam, BOOL* pSpecial = NULL, ScBaseCell* pCell = NULL, BOOL* pbTestEqualCondition = NULL ); void TopTenQuery( ScQueryParam& ); USHORT Query(ScQueryParam& rQueryParam, BOOL bKeepSub); BOOL CreateQueryParam(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, ScQueryParam& rQueryParam); void GetFilterEntries(USHORT nCol, USHORT nRow1, USHORT nRow2, TypedStrCollection& rStrings); BOOL GetDataEntries(USHORT nCol, USHORT nRow, TypedStrCollection& rStrings, BOOL bLimit); BOOL HasColHeader( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); BOOL HasRowHeader( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); void DoColResize( USHORT nCol1, USHORT nCol2, USHORT nAdd ); // maximale Stringlaengen einer Column, fuer z.B. dBase Export xub_StrLen GetMaxStringLen( USHORT nCol, USHORT nRowStart, USHORT nRowEnd ) const; xub_StrLen GetMaxNumberStringLen( USHORT& nPrecision, USHORT nCol, USHORT nRowStart, USHORT nRowEnd ) const; void FindConditionalFormat( ULONG nKey, ScRangeList& rRanges ); void IncRecalcLevel() { ++nRecalcLvl; } void DecRecalcLevel() { if (!--nRecalcLvl) SetDrawPageSize(); } BOOL IsSortCollatorGlobal() const; void InitSortCollator( const ScSortParam& rPar ); void DestroySortCollator(); private: void FillSeries( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFillCount, FillDir eFillDir, FillCmd eFillCmd, FillDateCmd eFillDateCmd, double nStepValue, double nMaxValue, USHORT nMinDigits, BOOL bAttribs, ScProgress& rProgress ); void FillAnalyse( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, FillCmd& rCmd, FillDateCmd& rDateCmd, double& rInc, USHORT& rMinDigits, ScUserListData*& rListData, USHORT& rListIndex); void FillAuto( USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, USHORT nFillCount, FillDir eFillDir, ScProgress& rProgress ); BOOL ValidNextPos( USHORT nCol, USHORT nRow, const ScMarkData& rMark, BOOL bMarked, BOOL bUnprotected ); void AutoFormatArea(USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, USHORT nIndex, USHORT nFormatNo); void GetAutoFormatAttr(USHORT nCol, USHORT nRow, USHORT nIndex, ScAutoFormatData& rData); void GetAutoFormatFrame(USHORT nCol, USHORT nRow, USHORT nFlags, USHORT nIndex, ScAutoFormatData& rData); BOOL SearchCell(const SvxSearchItem& rSearchItem, USHORT nCol, USHORT nRow, const ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); BOOL Search(const SvxSearchItem& rSearchItem, USHORT& rCol, USHORT& rRow, const ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); BOOL SearchAll(const SvxSearchItem& rSearchItem, ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); BOOL Replace(const SvxSearchItem& rSearchItem, USHORT& rCol, USHORT& rRow, const ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); BOOL ReplaceAll(const SvxSearchItem& rSearchItem, ScMarkData& rMark, String& rUndoStr, ScDocument* pUndoDoc); BOOL SearchStyle(const SvxSearchItem& rSearchItem, USHORT& rCol, USHORT& rRow, ScMarkData& rMark); BOOL ReplaceStyle(const SvxSearchItem& rSearchItem, USHORT& rCol, USHORT& rRow, ScMarkData& rMark, BOOL bIsUndo); BOOL SearchAllStyle(const SvxSearchItem& rSearchItem, ScMarkData& rMark); BOOL ReplaceAllStyle(const SvxSearchItem& rSearchItem, ScMarkData& rMark, ScDocument* pUndoDoc); // benutzen globalen SortParam: BOOL IsSorted(USHORT nStart, USHORT nEnd); void DecoladeRow( ScSortInfoArray*, USHORT nRow1, USHORT nRow2 ); void SwapCol(USHORT nCol1, USHORT nCol2); void SwapRow(USHORT nRow1, USHORT nRow2); short CompareCell( USHORT nSort, ScBaseCell* pCell1, USHORT nCell1Col, USHORT nCell1Row, ScBaseCell* pCell2, USHORT nCell2Col, USHORT nCell2Row ); short Compare(USHORT nIndex1, USHORT nIndex2); short Compare( ScSortInfoArray*, USHORT nIndex1, USHORT nIndex2); ScSortInfoArray* CreateSortInfoArray( USHORT nInd1, USHORT nInd2 ); void QuickSort( ScSortInfoArray*, short nLo, short nHi); void SortReorder( ScSortInfoArray*, ScProgress& ); BOOL CreateExcelQuery(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, ScQueryParam& rQueryParam); BOOL CreateStarQuery(USHORT nCol1, USHORT nRow1, USHORT nCol2, USHORT nRow2, ScQueryParam& rQueryParam); void GetUpperCellString(USHORT nCol, USHORT nRow, String& rStr); BOOL RefVisible(ScFormulaCell* pCell); BOOL IsEmptyLine(USHORT nRow, USHORT nStartCol, USHORT nEndCol); void IncDate(double& rVal, USHORT& nDayOfMonth, double nStep, FillDateCmd eCmd); void FillFormula(USHORT& nFormulaCounter, BOOL bFirst, ScFormulaCell* pSrcCell, USHORT nDestCol, USHORT nDestRow, BOOL bLast ); void UpdateInsertTabAbs(USHORT nNewPos); BOOL GetNextSpellingCell(USHORT& rCol, USHORT& rRow, BOOL bInSel, const ScMarkData& rMark) const; BOOL GetNextMarkedCell( USHORT& rCol, USHORT& rRow, const ScMarkData& rMark ); void SetDrawPageSize(); BOOL TestTabRefAbs(USHORT nTable); void CompileDBFormula(); void CompileDBFormula( BOOL bCreateFormulaString ); void CompileNameFormula( BOOL bCreateFormulaString ); void CompileColRowNameFormula(); void StartListening( const ScAddress& rAddress, SfxListener* pListener ); void EndListening( const ScAddress& rAddress, SfxListener* pListener ); void StartAllListeners(); void StartNameListeners( BOOL bOnlyRelNames ); void SetRelNameDirty(); USHORT FillMaxRot( RowInfo* pRowInfo, USHORT nArrCount, USHORT nX1, USHORT nX2, USHORT nCol, USHORT nAttrRow1, USHORT nAttrRow2, USHORT nArrY, const ScPatternAttr* pPattern, const SfxItemSet* pCondSet ) const; // Idleberechnung der OutputDevice-Zelltextbreite void InvalidateTextWidth( const ScAddress* pAdrFrom = NULL, const ScAddress* pAdrTo = NULL, BOOL bBroadcast = FALSE ); }; #endif