Files
libreoffice/sw/source/core/layout/layhelp.hxx
Michael Meeks caaeb0a046 re-base on ALv2 code. Includes:
Patches contributed by Oliver-Rainer Wittmann
    sw34bf06: #i117783# - Writer's implementation of XPagePrintable -
    apply print settings to new printing routines
    http://svn.apache.org/viewvc?view=revision&revision=1172115
    sw34bf06: #o12311627# use <rtl_random> methods to
    create unique ids for list styles and list ids
    http://svn.apache.org/viewvc?view=revision&revision=1172112
    sw34bf06 #i114725#,#i115828# - method <SwDoc::ClearDoc()> -
    clear list structures completely
    http://svn.apache.org/viewvc?view=revision&revision=1172122
    i#118572 - remove ui string and help content regarding usage of
    Java Mail in Writer's Mail Merge as Java Mail is not used.
    http://svn.apache.org/viewvc?view=revision&revision=1197035

    Patches contributed by Mathias Bauer
    cws mba34issues01: #i117718#: provide filter name in
    case storage of medium does not allow to detect one
    http://svn.apache.org/viewvc?view=revision&revision=1172350
    cws mba34issues01: #i117721#: directly provide
    parameters retrieved from SfxMedium
    http://svn.apache.org/viewvc?view=revision&revision=1172353
    gnumake4 work variously
    http://svn.apache.org/viewvc?view=revision&revision=1394707
    http://svn.apache.org/viewvc?view=revision&revision=1394326
    http://svn.apache.org/viewvc?view=revision&revision=1396797
    http://svn.apache.org/viewvc?view=revision&revision=1397315
    cws mba34issues01: #i117723#: convert assertion into trace
    http://svn.apache.org/viewvc?view=revision&revision=1172355
    cws mba34issues01: #i117699#: keep layout alive until swdoc dies
    http://svn.apache.org/viewvc?view=revision&revision=1172362
    cws mba34issues01: #i117943#: missing color attributes in RTF clipboard
    http://svn.apache.org/viewvc?view=revision&revision=1172363

    Patch contributed by Henning Brinkmann
    imported patch i#103878
    http://svn.apache.org/viewvc?view=revision&revision=1172109

    Patches contributed by Michael Stahl
    sw34bf06: #i117955#: WW8 export: disable storing of section breaks in endnotes
    http://svn.apache.org/viewvc?view=revision&revision=1172119

    Patch contributed by imacat
    Fixed the Asian language work count.
    http://svn.apache.org/viewvc?view=revision&revision=1241345

    Patch contributed by Pedro Giffuni
    i#20878 - Add comment with BZ issue for reference.
    http://svn.apache.org/viewvc?view=revision&revision=1244517

    Patch contributed by Andre Fischer
    Do not add targets for junit tests when junit is disabled.
    http://svn.apache.org/viewvc?view=revision&revision=1241508

add writerperfect dependency.
2012-11-30 10:10:38 +00:00

227 lines
7.7 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#ifndef SW_LAYHELP_HXX
#define SW_LAYHELP_HXX
#include <swrect.hxx>
#include <vector>
#include <deque>
class SwDoc;
class SwFrm;
class SwLayoutFrm;
class SwPageFrm;
class SwFlyFrm;
class SwSectionFrm;
class SwSectionNode;
class SvStream;
/*************************************************************************
* class SwLayCacheImpl
* contains the page break information and the text frame positions
* of the document (after loading)
* and is used inside the constructor of the layout rootframe to
* insert content and text frames at the right pages.
* For every page of the main text (body content, no footnotes, text frames etc.)
* we have the nodeindex of the first content at the page,
* the type of content ( table or paragraph )
* and if it's not the first part of the table/paragraph,
* the row/character-offset inside the table/paragraph.
* The text frame positions are stored in the SwPageFlyCache array.
*************************************************************************/
class SwFlyCache;
typedef boost::ptr_vector<SwFlyCache> SwPageFlyCache;
class SwLayCacheImpl : public std::vector<sal_uLong>
{
std::deque<xub_StrLen> aOffset;
std::vector<sal_uInt16> aType;
SwPageFlyCache aFlyCache;
bool bUseFlyCache;
void Insert( sal_uInt16 nType, sal_uLong nIndex, xub_StrLen nOffset );
public:
SwLayCacheImpl() {}
bool Read( SvStream& rStream );
sal_uLong GetBreakIndex( sal_uInt16 nIdx ) const { return std::vector<sal_uLong>::operator[]( nIdx ); }
xub_StrLen GetBreakOfst( size_t nIdx ) const { return aOffset[ nIdx ]; }
sal_uInt16 GetBreakType( sal_uInt16 nIdx ) const { return aType[ nIdx ]; }
sal_uInt16 GetFlyCount() const { return aFlyCache.size(); }
SwFlyCache *GetFlyCache( sal_uInt16 nIdx ) { return &aFlyCache[ nIdx ]; }
bool IsUseFlyCache() const { return bUseFlyCache; }
};
/*************************************************************************
* class SwActualSection
* helps to create the sectionframes during the _InsertCnt-function
* by controlling nested sections.
*************************************************************************/
class SwActualSection
{
SwActualSection *pUpper;
SwSectionFrm *pSectFrm;
SwSectionNode *pSectNode;
public:
SwActualSection( SwActualSection *pUpper,
SwSectionFrm *pSect,
SwSectionNode *pNd );
SwSectionFrm *GetSectionFrm() { return pSectFrm; }
void SetSectionFrm( SwSectionFrm *p ) { pSectFrm = p; }
SwSectionNode *GetSectionNode() { return pSectNode;}
SwActualSection *GetUpper() { return pUpper; }
};
/*************************************************************************
* class SwLayHelper
* helps during the _InsertCnt-function to create new pages.
* If there's a layoutcache available, this information is used.
*************************************************************************/
class SwLayHelper
{
SwFrm* &rpFrm;
SwFrm* &rpPrv;
SwPageFrm* &rpPage;
SwLayoutFrm* &rpLay;
SwActualSection* &rpActualSection;
sal_Bool &rbBreakAfter;
SwDoc* pDoc;
SwLayCacheImpl* pImpl;
sal_uLong nMaxParaPerPage;
sal_uLong nParagraphCnt;
sal_uLong nStartOfContent;
sal_uInt16 nIndex; // the index in the page break array
sal_uInt16 nFlyIdx; // the index in the fly cache array
bool bFirst : 1;
void _CheckFlyCache( SwPageFrm* pPage );
public:
SwLayHelper( SwDoc *pD, SwFrm* &rpF, SwFrm* &rpP, SwPageFrm* &rpPg,
SwLayoutFrm* &rpL, SwActualSection* &rpA, sal_Bool &rBrk,
sal_uLong nNodeIndex, bool bCache );
~SwLayHelper();
sal_uLong CalcPageCount();
bool CheckInsert( sal_uLong nNodeIndex );
bool CheckInsertPage();
// Look for fresh text frames at this (new) page and set them to the right
// position, if they are in the fly cache.
void CheckFlyCache( SwPageFrm* pPage )
{ if( pImpl && nFlyIdx < pImpl->GetFlyCount() ) _CheckFlyCache( pPage ); }
// Look for this text frame and set it to the right position,
// if it's in the fly cache.
static bool CheckPageFlyCache( SwPageFrm* &rpPage, SwFlyFrm* pFly );
};
/*************************************************************************
* class SwLayCacheIoImpl
* contains the data structures that are required to read and write a
* layout cache.
*************************************************************************/
#define SW_LAYCACHE_IO_REC_PAGES 'p'
#define SW_LAYCACHE_IO_REC_PARA 'P'
#define SW_LAYCACHE_IO_REC_TABLE 'T'
#define SW_LAYCACHE_IO_REC_FLY 'F'
#define SW_LAYCACHE_IO_VERSION_MAJOR 1
#define SW_LAYCACHE_IO_VERSION_MINOR 1
class SwLayCacheIoImpl
{
private:
struct RecTypeSize {
sal_uInt8 type;
sal_uLong size;
RecTypeSize(sal_uInt8 typ, sal_uLong siz) : type(typ), size(siz) {}
};
std::vector<RecTypeSize> aRecords;
SvStream *pStream;
sal_uLong nFlagRecEnd;
sal_uInt16 nMajorVersion;
sal_uInt16 nMinorVersion;
bool bWriteMode : 1;
bool bError : 1;
public:
SwLayCacheIoImpl( SvStream& rStrm, bool bWrtMd );
// Get input or output stream
SvStream& GetStream() const { return *pStream; }
// Open a record of type "nType"
bool OpenRec( sal_uInt8 nType );
// Close a record of type "nType". This skips any unread data that
// remains in the record.
bool CloseRec( sal_uInt8 nType );
// Return the number of bytes contained in the current record that
// haven't been read by now.
sal_uInt32 BytesLeft();
// Return the current record's type
sal_uInt8 Peek();
// Skip the current record
void SkipRec();
// Open a flag record for reading. The uppermost four bits are flags,
// while the lowermost are the flag record's size. Flag records cannot
// be nested.
sal_uInt8 OpenFlagRec();
// Open flag record for writing;
void OpenFlagRec( sal_uInt8 nFlags, sal_uInt8 nLen );
// Close a flag record. Any bytes left are skipped.
void CloseFlagRec();
bool HasError() const { return bError; }
sal_uInt16 GetMajorVersion() const { return nMajorVersion; }
sal_uInt16 GetMinorVersion() const { return nMinorVersion; }
};
// Stored information about text frames:
class SwFlyCache : public SwRect // position and size
{
public:
sal_uLong nOrdNum; // Id to recognize text frames
sal_uInt16 nPageNum; // page number
SwFlyCache( sal_uInt16 nP, sal_uLong nO, long nXL, long nYL, long nWL, long nHL ) :
SwRect( nXL, nYL, nWL, nHL ), nOrdNum( nO ), nPageNum( nP ){}
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */