57d9cc8bae
2008-12-19 10:32:51 +0100 od r265718 : #i70748# method <SwWW8Writer::StartTOX(..)> - correction for custom to outline style assigned paragraph styles 2008-12-19 09:24:41 +0100 od r265715 : #i70748# method <HandleModifyAtTxtNode(..)> - retrieve former applied list style before potential reset of empty list style due to set outline level 2008-12-17 15:33:57 +0100 hde r265608 : #i97013# 2008-12-17 14:43:42 +0100 od r265603 : #i70748# adjust fix i44177 - adjustment of to outline style assigned paragraph styles only for OOo-Templates. 2008-12-17 12:59:42 +0100 od r265598 : #i70748# method <XMLTextImportHelper::SetStyleAndAttrs(..)> - special handling of OOo 2.x document regarding outline numbering of headings. 2008-12-17 12:45:53 +0100 od r265597 : #i70748# method <HandleModifyAtTxtNode(..)> - correct determination of new and former applied list style 2008-12-17 10:18:41 +0100 od r265581 : #i97312# method <XMLTextNumRuleInfo::Set(..)> - check, if numbering rules instance contains any numbering rule. 2008-12-16 14:34:22 +0100 hde r265542 : #i97013 2008-12-16 14:20:24 +0100 od r265541 : #i70748# adjust documentation of "Which"-ID numbers 2008-12-16 14:19:49 +0100 od r265539 : #i70748# Adjust Attribute-Function-Mapping table due to new attribute 2008-12-16 14:06:24 +0100 od r265538 : #i70748# - Correct handling of to outline style assigned paragraph styles on reset of all paragraph style attributes - WW8 import: Consider refactoring of paragraph style's outline level attribute - NO_NUMBERING define no longer exsits. 2008-12-16 10:37:19 +0100 od r265530 : #i70478# Correction on moving outline paragraph up respectively down in its outline level: - Check also outline paragraph, which are not an outline via a to outline style assigned paragraph style, if action is applicable. 2008-12-16 09:10:13 +0100 hde r265523 : #i97277 2008-12-16 09:09:30 +0100 hde r265522 : #i97277 2008-12-16 09:07:40 +0100 hde r265521 : Added control and purged obsolete id's 2008-12-10 13:09:36 +0100 od r265174 : #i70748# correction of previous fix due to warning-free code 2008-12-10 13:03:30 +0100 od r265172 : #i70748# method <XMLTextImportHelper::SetStyleAndAttrs(..)> - Due to performance issues avoid retrieving outline level value from paragraph's paragraph style for each paragraph. Instead retrieve current outline level value from paragraph, which is the inherited value from its paragraph style, and only when it is needed. 2008-12-09 16:50:36 +0100 ufi r265117 : help 2008-12-09 16:49:50 +0100 ufi r265116 : help 2008-12-09 15:45:05 +0100 od r265107 : #i70748# method <XMLTextImportHelper::SetStyleAndAttrs(..)> - some minor rework and check access to paragraph styles 2008-12-09 15:42:04 +0100 od r265106 : #i70748# adjust name of local variable to avoid hiding of class variable 2008-12-09 15:40:51 +0100 od r265105 : #i70748# correct initialization order 2008-12-09 15:35:07 +0100 od r265101 : #i70748# remove duplicate entry in certain property map 2008-12-09 15:33:39 +0100 od r265100 : #i70748# add end of file token 2008-12-07 15:11:54 +0100 zhaojianwei r264952 : conflicts left not to be resolved when cws rebase 2008-12-04 14:52:21 +0100 zhaojianwei r264846 : CWS-TOOLING: rebase CWS outlinelevel to trunk@264325 (milestone: DEV300:m36) 2008-11-28 03:42:09 +0100 zhaojianwei r264525 : #i70748#: migrate CWS outlinelevel to SVN 2008-11-28 03:41:39 +0100 zhaojianwei r264524 : #i70748#: migrate CWS outlinelevel to SVN 2008-11-28 03:41:11 +0100 zhaojianwei r264523 : #i70748#: migrate CWS outlinelevel to SVN
347 lines
14 KiB
C++
347 lines
14 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: ndarr.hxx,v $
|
|
* $Revision: 1.20 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org 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 version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef _NDARR_HXX
|
|
#define _NDARR_HXX
|
|
|
|
#include <com/sun/star/embed/XEmbeddedObject.hpp>
|
|
#include <svtools/svarray.hxx>
|
|
|
|
#ifndef _BPARR_HXX
|
|
#include <bparr.hxx>
|
|
#endif
|
|
#include <ndtyp.hxx>
|
|
|
|
#include <svtools/embedhlp.hxx>
|
|
#include <vector>
|
|
|
|
class Graphic;
|
|
class GraphicObject;
|
|
class String;
|
|
class SwAttrSet;
|
|
class SfxItemSet;
|
|
class SwCntntNode;
|
|
class SwDoc;
|
|
class SwGrfFmtColl;
|
|
class SwGrfNode;
|
|
class SwHistory;
|
|
class SwNode;
|
|
class SwNodeIndex;
|
|
class SwNodeRange;
|
|
class SwOLENode;
|
|
class SwOutlineNodes;
|
|
class SwPaM;
|
|
class SwSection;
|
|
class SwSectionFmt;
|
|
class SwSectionNode;
|
|
class SwStartNode;
|
|
class SwTableBoxFmt;
|
|
class SwTableFmt;
|
|
class SwTableLine;
|
|
class SwTableLineFmt;
|
|
class SwTableNode;
|
|
class SwTblToTxtSaves;
|
|
class SwTxtFmtColl;
|
|
class SwTxtNode;
|
|
class SwUndoTblToTxt;
|
|
class SwUndoTxtToTbl;
|
|
struct SwPosition;
|
|
|
|
|
|
// --------------------
|
|
// class SwNodes
|
|
// --------------------
|
|
|
|
typedef SwNode * SwNodePtr;
|
|
typedef BOOL (*FnForEach_SwNodes)( const SwNodePtr&, void* pArgs );
|
|
|
|
SV_DECL_PTRARR_SORT( SwOutlineNodes, SwNodePtr, 0, 10 )
|
|
|
|
class SW_DLLPUBLIC SwNodes: private BigPtrArray
|
|
{
|
|
friend class SwDoc;
|
|
friend class SwNode;
|
|
friend class SwNodeIndex;
|
|
|
|
SwNodeIndex* pRoot; // Liste aller Indizies auf Nodes
|
|
|
|
// --> OD 2008-05-14 #refactorlists# - removed <bSyncNumberAndNumRule>
|
|
void InsertNode( const SwNodePtr pNode,
|
|
const SwNodeIndex& rPos );
|
|
void InsertNode( const SwNodePtr pNode,
|
|
ULONG nPos );
|
|
// <--
|
|
|
|
|
|
SwDoc* pMyDoc; // in diesem Doc ist das Nodes-Array
|
|
|
|
SwNode *pEndOfPostIts, *pEndOfInserts, // das sind die festen Bereiche
|
|
*pEndOfAutotext, *pEndOfRedlines,
|
|
*pEndOfContent;
|
|
|
|
mutable SwOutlineNodes* pOutlineNds; // Array aller GliederiungsNodes
|
|
|
|
BOOL bInNodesDel : 1; // falls rekursiv aufgerufen wird
|
|
// Num/Outline nicht aktualisierem
|
|
BOOL bInDelUpdOutl : 1; // Flags fuers aktualisieren von Outl.
|
|
BOOL bInDelUpdNum : 1; // Flags fuers aktualisieren von Outl.
|
|
|
|
// fuer dier Verwaltung der Indizies
|
|
void RegisterIndex( SwNodeIndex& rIdx );
|
|
void DeRegisterIndex( SwNodeIndex& rIdx );
|
|
void RemoveNode( ULONG nDelPos, ULONG nLen, BOOL bDel );
|
|
|
|
// Aktionen auf die Nodes
|
|
void SectionUpDown( const SwNodeIndex & aStart, const SwNodeIndex & aEnd );
|
|
void DelNodes( const SwNodeIndex& rStart, ULONG nCnt = 1 );
|
|
|
|
void ChgNode( SwNodeIndex& rDelPos, ULONG nSize,
|
|
SwNodeIndex& rInsPos, BOOL bNewFrms );
|
|
|
|
void UpdtOutlineIdx( const SwNode& ); // Update ab Node alle OutlineNodes
|
|
|
|
void _CopyNodes( const SwNodeRange&, const SwNodeIndex&,
|
|
BOOL bNewFrms = TRUE, BOOL bTblInsDummyNode = FALSE ) const;
|
|
void _DelDummyNodes( const SwNodeRange& rRg );
|
|
|
|
protected:
|
|
SwNodes( SwDoc* pDoc );
|
|
|
|
public:
|
|
~SwNodes();
|
|
|
|
SwNodePtr operator[]( ULONG n ) const
|
|
{ return (SwNodePtr)BigPtrArray::operator[] ( n ); }
|
|
|
|
//JP 29.09.97: impl. steht im ndindex.hxx - sollte moeglichst bald auf die
|
|
// neue Schnittstelle angepasst werden
|
|
inline SwNodePtr operator[]( const SwNodeIndex& rIdx ) const;
|
|
|
|
ULONG Count() const { return BigPtrArray::Count(); }
|
|
void ForEach( FnForEach_SwNodes fnForEach, void* pArgs = 0 )
|
|
{
|
|
BigPtrArray::ForEach( 0, BigPtrArray::Count(),
|
|
(FnForEach) fnForEach, pArgs );
|
|
}
|
|
void ForEach( ULONG nStt, ULONG nEnd, FnForEach_SwNodes fnForEach, void* pArgs = 0 )
|
|
{
|
|
BigPtrArray::ForEach( nStt, nEnd, (FnForEach) fnForEach, pArgs );
|
|
}
|
|
void ForEach( const SwNodeIndex& rStart, const SwNodeIndex& rEnd,
|
|
FnForEach_SwNodes fnForEach, void* pArgs = 0 );
|
|
|
|
// eine noch leere Section
|
|
SwNode& GetEndOfPostIts() const { return *pEndOfPostIts; }
|
|
// Section fuer alle Fussnoten
|
|
SwNode& GetEndOfInserts() const { return *pEndOfInserts; }
|
|
// Section fuer alle Flys/Header/Footers
|
|
SwNode& GetEndOfAutotext() const { return *pEndOfAutotext; }
|
|
// Section fuer alle Redlines
|
|
SwNode& GetEndOfRedlines() const { return *pEndOfRedlines; }
|
|
// das ist der letzte EndNode einer SonderSection. Hier nach kommt nur
|
|
// noch die normale ContentSection (also der BodyText)
|
|
SwNode& GetEndOfExtras() const { return *pEndOfRedlines; }
|
|
// die normale ContentSection (also der BodyText)
|
|
SwNode& GetEndOfContent() const { return *pEndOfContent; }
|
|
|
|
// ist das NodesArray das normale vom Doc? (nicht das UndoNds, .. )
|
|
// Implementierung steht im doc.hxx (weil man dazu Doc kennen muss) !
|
|
BOOL IsDocNodes() const;
|
|
|
|
USHORT GetSectionLevel(const SwNodeIndex &rIndex) const;
|
|
void Delete(const SwNodeIndex &rPos, ULONG nNodes = 1);
|
|
|
|
BOOL _MoveNodes( const SwNodeRange&, SwNodes& rNodes, const SwNodeIndex&,
|
|
BOOL bNewFrms = TRUE );
|
|
void Move( SwPaM&, SwPosition&, SwNodes& rNodes, BOOL bSplitNd=TRUE );
|
|
|
|
void _Copy( const SwNodeRange& rRg, const SwNodeIndex& rInsPos,
|
|
BOOL bNewFrms = TRUE ) const
|
|
{ _CopyNodes( rRg, rInsPos, bNewFrms ); }
|
|
|
|
void SectionUp( SwNodeRange *);
|
|
void SectionDown( SwNodeRange *pRange, SwStartNodeType = SwNormalStartNode );
|
|
|
|
BOOL CheckNodesRange( const SwNodeIndex& rStt, const SwNodeIndex& rEnd ) const;
|
|
|
|
void GoStartOfSection(SwNodeIndex *) const;
|
|
void GoEndOfSection(SwNodeIndex *) const;
|
|
|
|
SwCntntNode* GoNext(SwNodeIndex *) const;
|
|
SwCntntNode* GoPrevious(SwNodeIndex *) const;
|
|
|
|
//Gehe zum naechsten/vorherigen Cntnt/Tabellennode, fuer den
|
|
//es LayoutFrames gibt, dabei Kopf-/Fusszeilen/Rahmen etc. nicht verlassen
|
|
SwNode* GoNextWithFrm(SwNodeIndex *) const;
|
|
SwNode* GoPreviousWithFrm(SwNodeIndex *) const;
|
|
|
|
// zum naechsten Content-Node, der nicht geschuetzt oder versteckt ist
|
|
// (beides auf FALSE ==> GoNext/GoPrevious!!!)
|
|
SwCntntNode* GoNextSection( SwNodeIndex *, int bSkipHidden = TRUE,
|
|
int bSkipProtect = TRUE ) const;
|
|
SwCntntNode* GoPrevSection( SwNodeIndex *, int bSkipHidden = TRUE,
|
|
int bSkipProtect = TRUE ) const;
|
|
|
|
// erzeuge ein leere Section von Start und EndNode. Darf nur gerufen
|
|
// werden, wenn eine neue Section mit Inhalt erzeugt werden soll.
|
|
// Zum Beispiel bei den Filtern/Undo/...
|
|
SwStartNode* MakeEmptySection( const SwNodeIndex& rIdx,
|
|
SwStartNodeType = SwNormalStartNode );
|
|
|
|
// die Impl. von "Make...Node" stehen in den angegebenen .ccx-Files
|
|
SwTxtNode *MakeTxtNode( const SwNodeIndex & rWhere,
|
|
SwTxtFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr = 0 ); // in ndtxt.cxx
|
|
SwStartNode* MakeTextSection( const SwNodeIndex & rWhere,
|
|
SwStartNodeType eSttNdTyp,
|
|
SwTxtFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr = 0 );
|
|
|
|
SwGrfNode *MakeGrfNode( const SwNodeIndex & rWhere,
|
|
const String& rGrfName,
|
|
const String& rFltName,
|
|
const Graphic* pGraphic,
|
|
SwGrfFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr = 0,
|
|
BOOL bDelayed = FALSE ); // in ndgrf.cxx
|
|
|
|
SwGrfNode *MakeGrfNode( const SwNodeIndex & rWhere,
|
|
const GraphicObject& rGrfObj,
|
|
SwGrfFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr = 0 ); // in ndgrf.cxx
|
|
|
|
SwOLENode *MakeOLENode( const SwNodeIndex & rWhere,
|
|
const svt::EmbeddedObjectRef&,
|
|
SwGrfFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr = 0 ); // in ndole.cxx
|
|
SwOLENode *MakeOLENode( const SwNodeIndex & rWhere,
|
|
const String &rName,
|
|
sal_Int64 nAspect,
|
|
SwGrfFmtColl *pColl,
|
|
SwAttrSet* pAutoAttr ); // in ndole.cxx
|
|
|
|
// Array aller GliederiungsNodes;
|
|
const SwOutlineNodes& GetOutLineNds() const;
|
|
|
|
//void UpdateOutlineNode( const SwNode&, BYTE nOldLevel, BYTE nNewLevel );//#outline level,removed by zhaojianwei
|
|
// alle Nodes Updaten - Rule/Format-Aenderung
|
|
void UpdateOutlineNode(SwNode & rNd);
|
|
|
|
// fuege die Nodes fuer die Tabelle ein
|
|
// wenn Lines angegeben, erzeuge die Matrix aus Lines & Boxen
|
|
// ansonsten nur die Anzahl von Boxen.
|
|
/* #109161#
|
|
|
|
New parameter pAttrSet: If pAttrSet is non-null and contains an
|
|
adjust item it is propagated to the table cells. If there is an
|
|
adjust in pCntntTxtColl or pHeadlineTxtColl this adjust item
|
|
overrides the item in pAttrSet.
|
|
|
|
*/
|
|
SwTableNode* InsertTable( const SwNodeIndex& rNdIdx,
|
|
USHORT nBoxes, SwTxtFmtColl* pCntntTxtColl,
|
|
USHORT nLines = 0, USHORT nRepeat = 0,
|
|
SwTxtFmtColl* pHeadlineTxtColl = 0,
|
|
const SwAttrSet * pAttrSet = 0);
|
|
|
|
// erzeuge aus dem makierten Bereich eine ausgeglichene Tabelle
|
|
SwTableNode* TextToTable( const SwNodeRange& rRange, sal_Unicode cCh,
|
|
SwTableFmt* pTblFmt,
|
|
SwTableLineFmt* pLineFmt,
|
|
SwTableBoxFmt* pBoxFmt,
|
|
SwTxtFmtColl* pTxtColl,
|
|
SwUndoTxtToTbl* pUndo = 0 );
|
|
//create a table from a vector of NodeRanges - API support
|
|
SwTableNode* TextToTable( const std::vector< std::vector<SwNodeRange> >& rTableNodes,
|
|
SwTableFmt* pTblFmt,
|
|
SwTableLineFmt* pLineFmt,
|
|
SwTableBoxFmt* pBoxFmt,
|
|
SwTxtFmtColl* pTxtColl
|
|
/*, SwUndo... pUndo*/ );
|
|
|
|
// erzeuge aus der Tabelle wieder normalen Text
|
|
BOOL TableToText( const SwNodeRange& rRange, sal_Unicode cCh,
|
|
SwUndoTblToTxt* = 0 );
|
|
// steht im untbl.cxx und darf nur vom Undoobject gerufen werden
|
|
SwTableNode* UndoTableToText( ULONG nStt, ULONG nEnd,
|
|
const SwTblToTxtSaves& rSavedData );
|
|
|
|
// fuege in der Line, vor der InsPos eine neue Box ein. Das Format
|
|
// wird von der nachfolgenden (vorhergenden;wenn an Ende) genommen
|
|
// in der Line muss schon eine Box vorhanden sein !
|
|
BOOL InsBoxen( SwTableNode*, SwTableLine*, SwTableBoxFmt*,
|
|
// Formate fuer den TextNode der Box
|
|
SwTxtFmtColl*, const SfxItemSet* pAutoAttr,
|
|
USHORT nInsPos, USHORT nCnt = 1 );
|
|
// Splittet eine Tabelle in der Grund-Zeile, in der der Index steht.
|
|
// Alle GrundZeilen dahinter wandern in eine neue Tabelle/-Node.
|
|
// Ist das Flag bCalcNewSize auf TRUE, wird fuer beide neuen Tabellen
|
|
// die neue SSize aus dem Max der Boxen errechnet; vorrausgesetzt,
|
|
// die SSize ist "absolut" gesetzt (LONG_MAX)
|
|
// (Wird zur Zeit nur fuer den RTF-Parser benoetigt)
|
|
SwTableNode* SplitTable( const SwNodeIndex& rPos, BOOL bAfter = TRUE,
|
|
BOOL bCalcNewSize = FALSE );
|
|
// fuegt 2 Tabellen, die hintereinander stehen, wieder zusammen
|
|
BOOL MergeTable( const SwNodeIndex& rPos, BOOL bWithPrev = TRUE,
|
|
USHORT nMode = 0, SwHistory* pHistory = 0 );
|
|
|
|
// fuege eine neue SwSection ein
|
|
SwSectionNode* InsertSection( const SwNodeIndex& rNdIdx,
|
|
SwSectionFmt& rSectionFmt,
|
|
const SwSection&,
|
|
const SwNodeIndex* pEnde,
|
|
BOOL bInsAtStart = TRUE,
|
|
BOOL bCreateFrms = TRUE );
|
|
|
|
// in welchem Doc steht das Nodes-Array ?
|
|
SwDoc* GetDoc() { return pMyDoc; }
|
|
const SwDoc* GetDoc() const { return pMyDoc; }
|
|
|
|
// suche den vorhergehenden [/nachfolgenden ] ContentNode oder
|
|
// TabellenNode mit Frames. Wird kein Ende angeben, dann wird mit
|
|
// dem FrameIndex begonnen; ansonsten, wird mit dem vor rFrmIdx und
|
|
// dem hintern pEnd die Suche gestartet. Sollte kein gueltiger Node
|
|
// gefunden werden, wird 0 returnt. rFrmIdx zeigt auf dem Node mit
|
|
// Frames
|
|
SwNode* FindPrvNxtFrmNode( SwNodeIndex& rFrmIdx,
|
|
const SwNode* pEnd = 0 ) const;
|
|
|
|
//-> #112139#
|
|
SwNode * DocumentSectionStartNode(SwNode * pNode) const;
|
|
SwNode * DocumentSectionEndNode(SwNode * pNode) const;
|
|
//<- #112139#
|
|
private:
|
|
// privater Constructor, weil nie kopiert werden darf !!
|
|
SwNodes( const SwNodes & rNodes );
|
|
};
|
|
|
|
|
|
|
|
#endif
|