Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*************************************************************************
3 : *
4 : * The Contents of this file are made available subject to the terms of
5 : * either of the following licenses
6 : *
7 : * - GNU Lesser General Public License Version 2.1
8 : * - Sun Industry Standards Source License Version 1.1
9 : *
10 : * Sun Microsystems Inc., October, 2000
11 : *
12 : * GNU Lesser General Public License Version 2.1
13 : * =============================================
14 : * Copyright 2000 by Sun Microsystems, Inc.
15 : * 901 San Antonio Road, Palo Alto, CA 94303, USA
16 : *
17 : * This library is free software; you can redistribute it and/or
18 : * modify it under the terms of the GNU Lesser General Public
19 : * License version 2.1, as published by the Free Software Foundation.
20 : *
21 : * This library is distributed in the hope that it will be useful,
22 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 : * Lesser General Public License for more details.
25 : *
26 : * You should have received a copy of the GNU Lesser General Public
27 : * License along with this library; if not, write to the Free Software
28 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 : * MA 02111-1307 USA
30 : *
31 : *
32 : * Sun Industry Standards Source License Version 1.1
33 : * =================================================
34 : * The contents of this file are subject to the Sun Industry Standards
35 : * Source License Version 1.1 (the "License"); You may not use this file
36 : * except in compliance with the License. You may obtain a copy of the
37 : * License at http://www.openoffice.org/license.html.
38 : *
39 : * Software provided under this License is provided on an "AS IS" basis,
40 : * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 : * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 : * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 : * See the License for the specific provisions governing your rights and
44 : * obligations concerning the Software.
45 : *
46 : * The Initial Developer of the Original Code is: IBM Corporation
47 : *
48 : * Copyright: 2008 by IBM Corporation
49 : *
50 : * All Rights Reserved.
51 : *
52 : * Contributor(s): _______________________________________
53 : *
54 : *
55 : ************************************************************************/
56 : /**
57 : * @file
58 : * For LWP filter architecture prototype - table layouts
59 : */
60 : /*************************************************************************
61 : * Change History
62 : Mar 2005 Created
63 : ************************************************************************/
64 : #ifndef INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_LWPTABLELAYOUT_HXX
65 : #define INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_LWPTABLELAYOUT_HXX
66 : #include <vector>
67 : #include <map>
68 : #include "lwplayout.hxx"
69 :
70 : class XFTableStyle;
71 : class XFTable;
72 : class XFCell;
73 : class LwpTable;
74 : class LwpFrame;
75 : class LwpSuperTableLayout;
76 : class LwpRowLayout;
77 : class LwpCellLayout;
78 : class LwpTableHeadingLayout;
79 : class LwpRowHeadingLayout;
80 : class LwpConnectedCellLayout;
81 : class LwpColumnLayout;
82 :
83 : /**
84 : * @brief
85 : * VO_TABLELAYOUT object and functions for registering styles and coverting tables
86 : */
87 : class LwpTableLayout: public LwpLayout
88 : {
89 : public:
90 : LwpTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
91 : virtual ~LwpTableLayout();
92 4 : virtual LWP_LAYOUT_TYPE GetLayoutType () SAL_OVERRIDE { return LWP_TABLE_LAYOUT;}
93 10 : LwpObjectID& GetColumnLayoutHead(){return m_ColumnLayout;}
94 : void RegisterStyle() SAL_OVERRIDE;
95 : LwpTable * GetTable();
96 80 : LwpCellLayout * GetDefaultCellLayout(){return m_pDefaultCellLayout;}
97 : LwpSuperTableLayout * GetSuperTableLayout();
98 : LwpObjectID * SearchCellStoryMap(sal_uInt16 nRow, sal_uInt16 nCol);
99 : LwpCellLayout * GetCellByRowCol(sal_uInt16 nRow, sal_uInt16 nCol);
100 : OUString GetColumnWidth(sal_uInt16 nCol);
101 6 : void SetWordProCellMap(sal_uInt16 nRow, sal_uInt16 nCol, LwpCellLayout * pCell)
102 : {
103 6 : if (nRow >= m_nRows || nCol >= m_nCols)
104 6 : return;
105 6 : m_WordProCellsMap[static_cast<size_t>(nRow) * m_nCols + nCol] = pCell;
106 : };
107 : protected:
108 : void Read() SAL_OVERRIDE;
109 : void TraverseTable();
110 : void RegisterColumns();
111 : void RegisterRows();
112 : void ParseTable();
113 : void PostProcessParagraph(XFCell *pCell, sal_uInt16 nRowID, sal_uInt16 nColID);
114 :
115 : sal_uInt16 m_nRows;
116 : sal_uInt16 m_nCols;
117 :
118 : private:
119 : //CColumnLayoutHead cColumnLayout;
120 : LwpObjectID m_ColumnLayout;
121 : LwpCellLayout * m_pDefaultCellLayout;
122 : OUString m_DefaultColumnStyleName;
123 : OUString m_DefaultRowStyleName;
124 :
125 : // wordpro cell map
126 : std::vector<LwpCellLayout *> m_WordProCellsMap;
127 : // column vector
128 : LwpColumnLayout ** m_pColumns;
129 :
130 : public:
131 : void XFConvert(XFContentContainer* pCont) SAL_OVERRIDE;
132 : void ConvertTable(XFTable* pXFTable,sal_uInt16 nStartRow,
133 : sal_uInt16 nEndRow,sal_uInt8 nStartCol,sal_uInt8 nEndCol);
134 0 : OUString GetDefaultRowStyleName(){return m_DefaultRowStyleName;}
135 : void SetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol,XFCell* pXFCell);
136 : XFCell* GetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol);
137 0 : std::map<sal_uInt16,LwpRowLayout*> GetRowsMap(){return m_RowsMap;}
138 : LwpRowLayout* GetRowLayout(sal_uInt16 nRow);
139 : private:
140 : void ConvertDefaultRow(XFTable* pXFTable,sal_uInt8 nStartCol,
141 : sal_uInt8 nEndCol,sal_uInt16 nRowID);
142 : void ConvertColumn(XFTable *pXFTable,sal_uInt8 nStartCol,sal_uInt8 nEndCol);
143 : sal_uInt16 ConvertHeadingRow(XFTable* pXFTable,sal_uInt16 nStartHeadRow,sal_uInt16 nEndHeadRow);
144 : bool FindSplitColMark(XFTable* pXFTable,sal_uInt8* pCellMark,sal_uInt8& nMaxColSpan);
145 : void SplitRowToCells(XFTable* pTmpTable,XFTable* pXFTable,
146 : sal_uInt8 nFirstColSpann,sal_uInt8* pCellMark);
147 :
148 : std::map<sal_uInt16,LwpRowLayout*> m_RowsMap;
149 : void SplitConflictCells();
150 : XFTable* m_pXFTable;
151 : std::map<std::pair<sal_uInt16,sal_uInt8>,XFCell*> m_CellsMap;
152 :
153 : void PutCellVals(LwpFoundry* pFoundry, LwpObjectID aTableID);
154 : };
155 : /**
156 : * @brief
157 : * VO_SUPERTABLELAYOUT object
158 : */
159 : class LwpSuperTableLayout: public LwpPlacableLayout
160 : {
161 : public:
162 : LwpSuperTableLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
163 : virtual ~LwpSuperTableLayout();
164 4 : virtual LWP_LAYOUT_TYPE GetLayoutType () SAL_OVERRIDE { return LWP_SUPERTABLE_LAYOUT;}
165 : void RegisterNewStyle();
166 : // for table style
167 : // add by , 06/03/2005
168 : void ApplyPatternFill(XFTableStyle* pTableStyle);
169 : void ApplyBackGround(XFTableStyle* pTableStyle);
170 : // end add
171 :
172 : void ApplyBackColor(XFTableStyle *pTableStyle);
173 : void ApplyShadow(XFTableStyle *pTableStyle);
174 : double GetWidth() SAL_OVERRIDE;
175 : double GetTableWidth();
176 : void ApplyWatermark(XFTableStyle *pTableStyle);
177 : void ApplyAlignment(XFTableStyle * pTableStyle);
178 : void XFConvert(XFContentContainer* pCont) SAL_OVERRIDE;
179 : // for frame style
180 : virtual void XFConvertFrame(XFContentContainer* pCont, sal_Int32 nStart = 0, sal_Int32 nEnd = 0, bool bAll = false) SAL_OVERRIDE;
181 : void RegisterFrameStyle();
182 : LwpTableHeadingLayout* GetTableHeadingLayout();
183 : protected:
184 : void Read() SAL_OVERRIDE;
185 : LwpTableLayout* GetTableLayout();
186 : bool IsSizeRightToContent();
187 : bool IsJustifiable();
188 : LwpFrame* m_pFrame;
189 :
190 : private:
191 : };
192 : /**
193 : * @brief
194 : * VO_COLUMNLAYOUT object
195 : */
196 : class LwpColumnLayout : public LwpVirtualLayout
197 : {
198 : public:
199 : LwpColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
200 : virtual ~LwpColumnLayout();
201 0 : virtual LWP_LAYOUT_TYPE GetLayoutType () SAL_OVERRIDE { return LWP_COLUMN_LAYOUT;}
202 0 : sal_uInt32 GetColumnID(){return ccolid;}
203 0 : double GetWidth() SAL_OVERRIDE {return LwpTools::ConvertFromUnitsToMetric(cwidth);}
204 : using LwpVirtualLayout::RegisterStyle;
205 : void RegisterStyle(double dCalculatedWidth);
206 0 : bool IsJustifiable(){return (( m_nAttributes2 & STYLE2_JUSTIFIABLE) != 0);}
207 : protected:
208 : void Read() SAL_OVERRIDE;
209 : sal_uInt8 ccolid;
210 : sal_Int32 cwidth;
211 :
212 : };
213 : /**
214 : * @brief
215 : * VO_TABLEHEADINGLAYOUT object
216 : */
217 : class LwpTableHeadingLayout : public LwpTableLayout
218 : {
219 : public:
220 : LwpTableHeadingLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
221 : virtual ~LwpTableHeadingLayout();
222 0 : virtual LWP_LAYOUT_TYPE GetLayoutType () SAL_OVERRIDE { return LWP_TABLE_HEADING_LAYOUT;}
223 : void GetStartEndRow(sal_uInt16& nStartRow, sal_uInt16& nEndRow);
224 : LwpRowHeadingLayout * GetFirstRowHeadingLayout();
225 : protected:
226 : void Read() SAL_OVERRIDE;
227 : sal_uInt16 cStartRow;
228 : sal_uInt16 cEndRow;
229 : };
230 : /**
231 : * @brief
232 : * VO_SUPERPARALLELCOLUMNLAYOUT object
233 : */
234 : class LwpSuperParallelColumnLayout : public LwpSuperTableLayout
235 : {
236 : public:
237 : LwpSuperParallelColumnLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
238 : virtual ~LwpSuperParallelColumnLayout();
239 : protected:
240 : void Read() SAL_OVERRIDE;
241 : };
242 :
243 : /**
244 : * @brief
245 : * VO_PCOLLAYOUT object
246 : */
247 : class LwpParallelColumnsLayout : public LwpTableLayout
248 : {
249 : public:
250 : LwpParallelColumnsLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
251 : virtual ~LwpParallelColumnsLayout();
252 : protected:
253 : void Read() SAL_OVERRIDE;
254 : };
255 :
256 : class LwpSuperGlossaryLayout : public LwpSuperTableLayout
257 : {
258 : public:
259 : LwpSuperGlossaryLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
260 : virtual ~LwpSuperGlossaryLayout();
261 : protected:
262 : void Read() SAL_OVERRIDE;
263 : };
264 :
265 : #include "lwpcelllayout.hxx"
266 : #include "lwprowlayout.hxx"
267 :
268 : #endif
269 :
270 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|