Files
libreoffice/sw/source/core/inc/tblrwcl.hxx

200 lines
6.3 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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.
2011-03-31 10:05:04 +02:00
/*
* 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 .
*/
2000-09-18 23:08:29 +00:00
#ifndef _TBLRWCL_HXX
#define _TBLRWCL_HXX
2011-09-20 09:43:40 +02:00
#include <cstddef>
#include <vector>
2000-09-18 23:08:29 +00:00
#include <swtypes.hxx>
#include <tblsel.hxx>
#include <swtable.hxx>
namespace editeng { class SvxBorderLine; }
2000-09-18 23:08:29 +00:00
class SwDoc;
class SwTableNode;
class SwTableLine;
class SwTableBox;
class SwTableBoxFmt;
class SwHistory;
class SwCntntNode;
class SfxPoolItem;
class SwShareBoxFmts;
class SwFmtFrmSize;
struct _CpyPara;
struct _InsULPara;
2000-09-18 23:08:29 +00:00
void sw_LineSetHeadCondColl( const SwTableLine* pLine );
2000-09-18 23:08:29 +00:00
#ifdef DBG_UTIL
2000-09-18 23:08:29 +00:00
void _CheckBoxWidth( const SwTableLine& rLine, SwTwips nSize );
#endif
void _InsTblBox( SwDoc* pDoc, SwTableNode* pTblNd,
SwTableLine* pLine, SwTableBoxFmt* pBoxFrmFmt,
SwTableBox* pBox, sal_uInt16 nInsPos, sal_uInt16 nCnt = 1 );
2000-09-18 23:08:29 +00:00
CWS-TOOLING: integrate CWS libmsword 2008-12-18 12:33:19 +0100 kendy r265681 : Export less symbols. 2008-12-17 19:26:56 +0100 kendy r265655 : Move libmsword to the -writer package. 2008-12-15 17:46:16 +0100 kendy r265516 : Enable exceptions for iodetect.cxx. 2008-12-15 15:17:53 +0100 kendy r265504 : Deliver the msword.dll. 2008-12-09 19:38:17 +0100 kendy r265138 : Remove accidentally added method. 2008-12-09 19:33:57 +0100 kendy r265137 : Fix linking on Win32. 2008-12-09 18:37:16 +0100 kendy r265135 : Move SwFltControlStack::Delete() to ww1/fltshell.cxx to fix linking. 2008-12-09 18:01:56 +0100 kendy r265127 : Visibility fixes. 2008-12-09 15:51:52 +0100 kendy r265109 : Fix ambiguous usage of class Color. 2008-12-09 14:54:27 +0100 kendy r265091 : Add #include "precompiled_sw.hxx" to fix --enable-pch build. 2008-12-09 14:44:59 +0100 kendy r265088 : Add #include "precompiled_sw.hxx" to fix --enable-pch build. 2008-12-08 19:14:49 +0100 kendy r265015 : #i96313# Get rid of inc/iodetect.cxx, it's a really bad idea to share code by #ifdefing parts of it, and #including a .cxx file ;-) This change moves it to iodetect.cxx, which is compiled to a .o/.obj that is used where needed. 2008-11-20 17:45:08 +0100 kendy r264083 : #i96313# Make the destruction of Readers consistent. 2008-11-20 17:18:11 +0100 kendy r264070 : #i96313# Added missing SW_DLLPUBLIC for (Import|Export)(DOC|RTF). 2008-11-18 19:21:07 +0100 kendy r263797 : #i96313# Remove accidentally added file. 2008-11-18 17:14:31 +0100 kendy r263790 : #i96313# Split doc and rtf filters into a separate library From: Radek Doulik <rodo@novell.com> fix SwFieldBookmark class visibility (suggested by kendy) 2008-11-18 17:14:01 +0100 kendy r263789 : #i96313# Split doc and rtf filters into a separate library From: Fridrich Strba <fstrba@novell.com> add visibility markup to allow linking 2008-11-18 17:13:29 +0100 kendy r263788 : #i96313# Split doc and rtf filters into a separate library From: Jan Holesovsky <kendy@suse.cz> Visibility markup for libmsword. This is the most trivial approach, every class that had a symbol that needed to be visible was marked with SW_DLLPUBLIC; the correct (but more time consuming) way would be to mark just the exact methods that were needed. To be done later if generally shows that the separate libmsword makes sense; and also now we have the upper limit of symbols that needed to be added, and we can only make it better [decrease the number] ;-) 2008-11-18 17:12:58 +0100 kendy r263787 : #i96313# Split doc and rtf filters into a separate library From: Jan Holesovsky <kendy@suse.cz> Added the missing msword.map. 2008-11-18 17:12:25 +0100 kendy r263786 : #i96313# Split doc and rtf filters into a separate library From: Jan Holesovsky <kendy@suse.cz> scp2 change for libmsword. 2008-11-18 17:11:55 +0100 kendy r263785 : #i96313# Split doc and rtf filters into a separate library From: Jan Holesovsky <kendy@suse.cz> Convert the binary .doc and .rtf filters into a separate library. It is called 'libmsword' and loaded on demand when either of the formats (.doc, .rtf) is loaded or saved.
2009-01-05 14:06:42 +00:00
SW_DLLPUBLIC void _DeleteBox( SwTable& rTbl, SwTableBox* pBox, SwUndo* pUndo = 0,
bool bCalcNewSize = true, const bool bCorrBorder = true,
2000-09-18 23:08:29 +00:00
SwShareBoxFmts* pShareFmts = 0 );
// Klasse fuers SplitTable
// sammelt von einer Line die Boxen aller obersten oder untersten Lines
// in einem Array. Zusaetzlich werden die Positionen vermerkt.
// ( die Implementierung steht im ndtbl.cxx)
class SwCollectTblLineBoxes
{
std::vector<sal_uInt16> aPosArr;
std::vector<SwTableBox*> m_Boxes;
2000-09-18 23:08:29 +00:00
SwHistory* pHst;
sal_uInt16 nMode, nWidth;
bool bGetFromTop : 1;
bool bGetValues : 1;
2000-09-18 23:08:29 +00:00
public:
SwCollectTblLineBoxes( bool bTop, sal_uInt16 nMd = 0, SwHistory* pHist=0 )
:
pHst( pHist ), nMode( nMd ), nWidth( 0 ),
bGetFromTop( bTop ), bGetValues( true )
2000-09-18 23:08:29 +00:00
{}
void AddBox( const SwTableBox& rBox );
const SwTableBox* GetBoxOfPos( const SwTableBox& rBox );
void AddToUndoHistory( const SwCntntNode& rNd );
size_t Count() const { return m_Boxes.size(); }
2011-09-20 09:43:40 +02:00
const SwTableBox& GetBox( std::size_t nPos, sal_uInt16* pWidth = 0 ) const
2000-09-18 23:08:29 +00:00
{
// hier wird die EndPos der Spalte benoetigt!
if( pWidth )
2011-09-20 09:43:40 +02:00
*pWidth = (nPos+1 == aPosArr.size()) ? nWidth
2000-09-18 23:08:29 +00:00
: aPosArr[ nPos+1 ];
return *m_Boxes[ nPos ];
2000-09-18 23:08:29 +00:00
}
bool IsGetFromTop() const { return bGetFromTop; }
bool IsGetValues() const { return bGetValues; }
2000-09-18 23:08:29 +00:00
sal_uInt16 GetMode() const { return nMode; }
void SetValues( bool bFlag ) { bGetValues = false; nWidth = 0;
2000-09-18 23:08:29 +00:00
bGetFromTop = bFlag; }
bool Resize( sal_uInt16 nOffset, sal_uInt16 nWidth );
2000-09-18 23:08:29 +00:00
};
void sw_Box_CollectBox( const SwTableBox* pBox, SwCollectTblLineBoxes* pSplPara );
bool sw_Line_CollectBox( const SwTableLine*& rpLine, void* pPara );
2000-09-18 23:08:29 +00:00
void sw_BoxSetSplitBoxFmts( SwTableBox* pBox, SwCollectTblLineBoxes* pSplPara );
2000-09-18 23:08:29 +00:00
// This structure is needed by Undo to restore row span attributes
// when a table has been splitted into two tables
struct SwSaveRowSpan
{
sal_uInt16 mnSplitLine; // the line number where the table has been splitted
std::vector< long > mnRowSpans; // the row span attributes in this line
SwSaveRowSpan( SwTableBoxes& rBoxes, sal_uInt16 nSplitLn );
};
2000-09-18 23:08:29 +00:00
struct _SwGCLineBorder
{
const SwTableLines* pLines;
SwShareBoxFmts* pShareFmts;
sal_uInt16 nLinePos;
2000-09-18 23:08:29 +00:00
_SwGCLineBorder( const SwTable& rTable )
: pLines( &rTable.GetTabLines() ), pShareFmts(0), nLinePos( 0 ) {}
2000-09-18 23:08:29 +00:00
_SwGCLineBorder( const SwTableBox& rBox )
: pLines( &rBox.GetTabLines() ), pShareFmts(0), nLinePos( 0 ) {}
bool IsLastLine() const { return nLinePos + 1 >= (sal_uInt16)pLines->size(); }
2000-09-18 23:08:29 +00:00
};
class _SwGCBorder_BoxBrd
{
const editeng::SvxBorderLine* pBrdLn;
bool bAnyBorderFnd;
2000-09-18 23:08:29 +00:00
public:
_SwGCBorder_BoxBrd() : pBrdLn( 0 ), bAnyBorderFnd( false ) {}
2000-09-18 23:08:29 +00:00
void SetBorder( const editeng::SvxBorderLine& rBorderLine )
{ pBrdLn = &rBorderLine; bAnyBorderFnd = false; }
2000-09-18 23:08:29 +00:00
// checke, ob die linke Border dieselbe wie die gesetzte ist
// returnt false falls gar keine Border gesetzt ist
bool CheckLeftBorderOfFormat( const SwFrmFmt& rFmt );
2000-09-18 23:08:29 +00:00
bool IsAnyBorderFound() const { return bAnyBorderFnd; }
2000-09-18 23:08:29 +00:00
};
void sw_GC_Line_Border( const SwTableLine* pLine, _SwGCLineBorder* pGCPara );
2000-09-18 23:08:29 +00:00
class SwShareBoxFmt
{
const SwFrmFmt* pOldFmt;
std::vector<SwFrmFmt*> aNewFmts;
2000-09-18 23:08:29 +00:00
public:
SwShareBoxFmt( const SwFrmFmt& rFmt )
: pOldFmt( &rFmt )
2000-09-18 23:08:29 +00:00
{}
const SwFrmFmt& GetOldFormat() const { return *pOldFmt; }
SwFrmFmt* GetFormat( long nWidth ) const;
SwFrmFmt* GetFormat( const SfxPoolItem& rItem ) const;
void AddFormat( SwFrmFmt& rFmt );
// returnt sal_True, wenn geloescht werden kann
bool RemoveFormat( const SwFrmFmt& rFmt );
2000-09-18 23:08:29 +00:00
};
typedef boost::ptr_vector<SwShareBoxFmt> _SwShareBoxFmts;
2000-09-18 23:08:29 +00:00
class SwShareBoxFmts
{
_SwShareBoxFmts aShareArr;
bool Seek_Entry( const SwFrmFmt& rFmt, sal_uInt16* pPos ) const;
2000-09-18 23:08:29 +00:00
void ChangeFrmFmt( SwTableBox* pBox, SwTableLine* pLn, SwFrmFmt& rFmt );
public:
SwShareBoxFmts() {}
~SwShareBoxFmts();
SwFrmFmt* GetFormat( const SwFrmFmt& rFmt, long nWidth ) const;
SwFrmFmt* GetFormat( const SwFrmFmt& rFmt, const SfxPoolItem& ) const;
void AddFormat( const SwFrmFmt& rOld, SwFrmFmt& rNew );
2000-09-18 23:08:29 +00:00
void SetSize( SwTableBox& rBox, const SwFmtFrmSize& rSz );
void SetAttr( SwTableBox& rBox, const SfxPoolItem& rItem );
void SetAttr( SwTableLine& rLine, const SfxPoolItem& rItem );
void RemoveFormat( const SwFrmFmt& rFmt );
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */