Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #include <TDefTableHandler.hxx>
20 : #include <PropertyMap.hxx>
21 : #include <ConversionHelper.hxx>
22 : #include <ooxml/resourceids.hxx>
23 : #include <filter/msfilter/util.hxx>
24 : #include <com/sun/star/table/BorderLine2.hpp>
25 : #include <com/sun/star/text/TableColumnSeparator.hpp>
26 : #include <com/sun/star/text/VertOrientation.hpp>
27 :
28 : #include "dmapperLoggers.hxx"
29 :
30 : namespace writerfilter {
31 : namespace dmapper {
32 :
33 : using namespace ::com::sun::star;
34 :
35 :
36 :
37 3891 : TDefTableHandler::TDefTableHandler(bool bOOXML) :
38 : LoggedProperties(dmapper_logger, "TDefTableHandler"),
39 : m_nLineWidth(0),
40 : m_nLineType(0),
41 : m_nLineColor(0),
42 : m_nLineDistance(0),
43 3891 : m_bOOXML( bOOXML )
44 : {
45 3891 : }
46 :
47 :
48 7782 : TDefTableHandler::~TDefTableHandler()
49 : {
50 7782 : }
51 :
52 15052 : OUString TDefTableHandler::getBorderTypeString(sal_Int32 nType)
53 : {
54 15052 : switch (nType)
55 : {
56 2523 : case 255: return OUString("nil");
57 1273 : case 0: return OUString("none");
58 10721 : case 1: return OUString("single");
59 0 : case 2: return OUString("thick");
60 112 : case 3: return OUString("double");
61 4 : case 6: return OUString("dotted");
62 24 : case 7: return OUString("dashed");
63 0 : case 8: return OUString("dotDash");
64 0 : case 9: return OUString("dotDotDash");
65 0 : case 10: return OUString("triple");
66 20 : case 11: return OUString("thinThickSmallGap");
67 28 : case 12: return OUString("thickThinSmallGap");
68 0 : case 13: return OUString("thinThickThinSmallGap");
69 4 : case 14: return OUString("thinThickMediumGap");
70 19 : case 15: return OUString("thickThinMediumGap");
71 0 : case 16: return OUString("thinThickThinMediumGap");
72 49 : case 17: return OUString("thinThickLargeGap");
73 148 : case 18: return OUString("thickThinLargeGap");
74 0 : case 19: return OUString("thinThickThinLargeGap");
75 0 : case 20: return OUString("wave");
76 0 : case 21: return OUString("doubleWave");
77 60 : case 22: return OUString("dashSmallGap");
78 0 : case 23: return OUString("dashDotStroked");
79 16 : case 24: return OUString("threeDEmboss");
80 16 : case 25: return OUString("threeDEngrave");
81 0 : case 26: return OUString("outset");
82 0 : case 27: return OUString("inset");
83 0 : case 64: return OUString("apples");
84 0 : case 65: return OUString("archedScallops");
85 0 : case 66: return OUString("babyPacifier");
86 0 : case 67: return OUString("babyRattle");
87 0 : case 68: return OUString("balloons3Colors");
88 0 : case 69: return OUString("balloonsHotAir");
89 0 : case 70: return OUString("basicBlackDashes");
90 0 : case 71: return OUString("basicBlackDots");
91 0 : case 72: return OUString("basicBlackSquares");
92 0 : case 73: return OUString("basicThinLines");
93 0 : case 74: return OUString("basicWhiteDashes");
94 0 : case 75: return OUString("basicWhiteDots");
95 0 : case 76: return OUString("basicWhiteSquares");
96 0 : case 77: return OUString("basicWideInline");
97 0 : case 78: return OUString("basicWideMidline");
98 0 : case 79: return OUString("basicWideOutline");
99 0 : case 80: return OUString("bats");
100 0 : case 81: return OUString("birds");
101 0 : case 82: return OUString("birdsFlight");
102 0 : case 83: return OUString("cabins");
103 0 : case 84: return OUString("cakeSlice");
104 0 : case 85: return OUString("candyCorn");
105 0 : case 86: return OUString("celticKnotwork");
106 0 : case 87: return OUString("certificateBanner");
107 0 : case 88: return OUString("chainLink");
108 0 : case 89: return OUString("champagneBottle");
109 0 : case 90: return OUString("checkedBarBlack");
110 0 : case 91: return OUString("checkedBarColor");
111 0 : case 92: return OUString("checkered");
112 0 : case 93: return OUString("christmasTree");
113 0 : case 94: return OUString("circlesLines");
114 0 : case 95: return OUString("circlesRectangles");
115 0 : case 96: return OUString("classicalWave");
116 0 : case 97: return OUString("clocks");
117 0 : case 98: return OUString("compass");
118 0 : case 99: return OUString("confetti");
119 0 : case 100: return OUString("confettiGrays");
120 0 : case 101: return OUString("confettiOutline");
121 0 : case 102: return OUString("confettiStreamers");
122 0 : case 103: return OUString("confettiWhite");
123 0 : case 104: return OUString("cornerTriangles");
124 0 : case 105: return OUString("couponCutoutDashes");
125 0 : case 106: return OUString("couponCutoutDots");
126 0 : case 107: return OUString("crazyMaze");
127 0 : case 108: return OUString("creaturesButterfly");
128 0 : case 109: return OUString("creaturesFish");
129 0 : case 110: return OUString("creaturesInsects");
130 0 : case 111: return OUString("creaturesLadyBug");
131 0 : case 112: return OUString("crossStitch");
132 0 : case 113: return OUString("cup");
133 0 : case 114: return OUString("decoArch");
134 0 : case 115: return OUString("decoArchColor");
135 0 : case 116: return OUString("decoBlocks");
136 0 : case 117: return OUString("diamondsGray");
137 0 : case 118: return OUString("doubleD");
138 0 : case 119: return OUString("doubleDiamonds");
139 0 : case 120: return OUString("earth1");
140 0 : case 121: return OUString("earth2");
141 0 : case 122: return OUString("eclipsingSquares1");
142 0 : case 123: return OUString("eclipsingSquares2");
143 0 : case 124: return OUString("eggsBlack");
144 0 : case 125: return OUString("fans");
145 0 : case 126: return OUString("film");
146 0 : case 127: return OUString("firecrackers");
147 0 : case 128: return OUString("flowersBlockPrint");
148 0 : case 129: return OUString("flowersDaisies");
149 0 : case 130: return OUString("flowersModern1");
150 0 : case 131: return OUString("flowersModern2");
151 0 : case 132: return OUString("flowersPansy");
152 0 : case 133: return OUString("flowersRedRose");
153 0 : case 134: return OUString("flowersRoses");
154 0 : case 135: return OUString("flowersTeacup");
155 0 : case 136: return OUString("flowersTiny");
156 0 : case 137: return OUString("gems");
157 0 : case 138: return OUString("gingerbreadMan");
158 0 : case 139: return OUString("gradient");
159 0 : case 140: return OUString("handmade1");
160 0 : case 141: return OUString("handmade2");
161 0 : case 142: return OUString("heartBalloon");
162 0 : case 143: return OUString("heartGray");
163 0 : case 144: return OUString("hearts");
164 0 : case 145: return OUString("heebieJeebies");
165 0 : case 146: return OUString("holly");
166 0 : case 147: return OUString("houseFunky");
167 0 : case 148: return OUString("hypnotic");
168 0 : case 149: return OUString("iceCreamCones");
169 0 : case 150: return OUString("lightBulb");
170 0 : case 151: return OUString("lightning1");
171 0 : case 152: return OUString("lightning2");
172 0 : case 153: return OUString("mapPins");
173 0 : case 154: return OUString("mapleLeaf");
174 0 : case 155: return OUString("mapleMuffins");
175 0 : case 156: return OUString("marquee");
176 0 : case 157: return OUString("marqueeToothed");
177 0 : case 158: return OUString("moons");
178 0 : case 159: return OUString("mosaic");
179 0 : case 160: return OUString("musicNotes");
180 0 : case 161: return OUString("northwest");
181 0 : case 162: return OUString("ovals");
182 0 : case 163: return OUString("packages");
183 0 : case 164: return OUString("palmsBlack");
184 0 : case 165: return OUString("palmsColor");
185 0 : case 166: return OUString("paperClips");
186 0 : case 167: return OUString("papyrus");
187 0 : case 168: return OUString("partyFavor");
188 0 : case 169: return OUString("partyGlass");
189 0 : case 170: return OUString("pencils");
190 0 : case 171: return OUString("people");
191 0 : case 172: return OUString("peopleWaving");
192 0 : case 173: return OUString("peopleHats");
193 0 : case 174: return OUString("poinsettias");
194 0 : case 175: return OUString("postageStamp");
195 0 : case 176: return OUString("pumpkin1");
196 0 : case 177: return OUString("pushPinNote2");
197 0 : case 178: return OUString("pushPinNote1");
198 0 : case 179: return OUString("pyramids");
199 0 : case 180: return OUString("pyramidsAbove");
200 0 : case 181: return OUString("quadrants");
201 0 : case 182: return OUString("rings");
202 0 : case 183: return OUString("safari");
203 0 : case 184: return OUString("sawtooth");
204 0 : case 185: return OUString("sawtoothGray");
205 0 : case 186: return OUString("scaredCat");
206 0 : case 187: return OUString("seattle");
207 0 : case 188: return OUString("shadowedSquares");
208 0 : case 189: return OUString("sharksTeeth");
209 0 : case 190: return OUString("shorebirdTracks");
210 0 : case 191: return OUString("skyrocket");
211 0 : case 192: return OUString("snowflakeFancy");
212 0 : case 193: return OUString("snowflakes");
213 0 : case 194: return OUString("sombrero");
214 0 : case 195: return OUString("southwest");
215 0 : case 196: return OUString("stars");
216 0 : case 197: return OUString("starsTop");
217 0 : case 198: return OUString("stars3d");
218 0 : case 199: return OUString("starsBlack");
219 0 : case 200: return OUString("starsShadowed");
220 0 : case 201: return OUString("sun");
221 0 : case 202: return OUString("swirligig");
222 0 : case 203: return OUString("tornPaper");
223 0 : case 204: return OUString("tornPaperBlack");
224 0 : case 205: return OUString("trees");
225 0 : case 206: return OUString("triangleParty");
226 0 : case 207: return OUString("triangles");
227 0 : case 208: return OUString("tribal1");
228 0 : case 209: return OUString("tribal2");
229 0 : case 210: return OUString("tribal3");
230 0 : case 211: return OUString("tribal4");
231 0 : case 212: return OUString("tribal5");
232 0 : case 213: return OUString("tribal6");
233 0 : case 214: return OUString("twistedLines1");
234 0 : case 215: return OUString("twistedLines2");
235 0 : case 216: return OUString("vine");
236 0 : case 217: return OUString("waveline");
237 0 : case 218: return OUString("weavingAngles");
238 0 : case 219: return OUString("weavingBraid");
239 0 : case 220: return OUString("weavingRibbon");
240 0 : case 221: return OUString("weavingStrips");
241 0 : case 222: return OUString("whiteFlowers");
242 0 : case 223: return OUString("woodwork");
243 0 : case 224: return OUString("xIllusions");
244 0 : case 225: return OUString("zanyTriangles");
245 0 : case 226: return OUString("zigZag");
246 0 : case 227: return OUString("zigZagStitch");
247 35 : default: break;
248 : }
249 35 : return OUString();
250 : }
251 :
252 2853 : OUString TDefTableHandler::getThemeColorTypeString(sal_Int32 nType)
253 : {
254 2853 : switch (nType)
255 : {
256 2 : case NS_ooxml::LN_Value_St_ThemeColor_dark1: return OUString("dark1");
257 0 : case NS_ooxml::LN_Value_St_ThemeColor_light1: return OUString("light1");
258 0 : case NS_ooxml::LN_Value_St_ThemeColor_dark2: return OUString("dark2");
259 0 : case NS_ooxml::LN_Value_St_ThemeColor_light2: return OUString("light2");
260 927 : case NS_ooxml::LN_Value_St_ThemeColor_accent1: return OUString("accent1");
261 259 : case NS_ooxml::LN_Value_St_ThemeColor_accent2: return OUString("accent2");
262 105 : case NS_ooxml::LN_Value_St_ThemeColor_accent3: return OUString("accent3");
263 15 : case NS_ooxml::LN_Value_St_ThemeColor_accent4: return OUString("accent4");
264 35 : case NS_ooxml::LN_Value_St_ThemeColor_accent5: return OUString("accent5");
265 233 : case NS_ooxml::LN_Value_St_ThemeColor_accent6: return OUString("accent6");
266 72 : case NS_ooxml::LN_Value_St_ThemeColor_hyperlink: return OUString("hyperlink");
267 12 : case NS_ooxml::LN_Value_St_ThemeColor_followedHyperlink: return OUString("followedHyperlink");
268 0 : case NS_ooxml::LN_Value_St_ThemeColor_none: return OUString("none");
269 435 : case NS_ooxml::LN_Value_St_ThemeColor_background1: return OUString("background1");
270 600 : case NS_ooxml::LN_Value_St_ThemeColor_text1: return OUString("text1");
271 0 : case NS_ooxml::LN_Value_St_ThemeColor_background2: return OUString("background2");
272 124 : case NS_ooxml::LN_Value_St_ThemeColor_text2: return OUString("text2");
273 34 : default: break;
274 : }
275 34 : return OUString();
276 : }
277 :
278 31336 : void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
279 : {
280 31336 : sal_Int32 nIntValue = rVal.getInt();
281 : (void)nIntValue;
282 : (void)rName;
283 31336 : switch( rName )
284 : {
285 : case NS_ooxml::LN_CT_Border_sz:
286 : // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
287 7366 : m_nLineWidth = nIntValue * 5 / 2;
288 7366 : appendGrabBag("sz", OUString::number(nIntValue));
289 7366 : break;
290 : case NS_ooxml::LN_CT_Border_val:
291 9512 : m_nLineType = nIntValue;
292 9512 : appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
293 9512 : break;
294 : case NS_ooxml::LN_CT_Border_color:
295 7159 : appendGrabBag("color", OStringToOUString(msfilter::util::ConvertColor(nIntValue, /*bAutoColor=*/true), RTL_TEXTENCODING_UTF8));
296 7159 : m_nLineColor = nIntValue;
297 7159 : break;
298 : case NS_ooxml::LN_CT_Border_space:
299 7065 : appendGrabBag("space", OUString::number(nIntValue));
300 7065 : m_nLineDistance = nIntValue;
301 7065 : break;
302 : case NS_ooxml::LN_CT_Border_shadow:
303 : //if 1 then line has shadow - unsupported
304 : case NS_ooxml::LN_CT_Border_frame:
305 : // ignored
306 0 : break;
307 : case NS_ooxml::LN_CT_Border_themeColor:
308 208 : appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
309 208 : break;
310 : case NS_ooxml::LN_CT_Border_themeTint:
311 : case NS_ooxml::LN_CT_Border_themeShade:
312 : // ignored
313 26 : break;
314 : default:
315 : OSL_FAIL("unknown attribute");
316 : }
317 31336 : }
318 :
319 :
320 9699 : void TDefTableHandler::localResolve(Id rName, writerfilter::Reference<Properties>::Pointer_t pProperties)
321 : {
322 9699 : if( pProperties.get())
323 : {
324 9699 : m_nLineWidth = m_nLineType = m_nLineColor = m_nLineDistance = 0;
325 9699 : std::vector<beans::PropertyValue> aSavedGrabBag;
326 9699 : if (!m_aInteropGrabBagName.isEmpty())
327 : {
328 2370 : aSavedGrabBag = m_aInteropGrabBag;
329 2370 : m_aInteropGrabBag.clear();
330 : }
331 9699 : pProperties->resolve( *this );
332 9699 : table::BorderLine2 aBorderLine;
333 : ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
334 9699 : aBorderLine, m_bOOXML );
335 9699 : bool rtl = false; // TODO
336 9699 : switch( rName )
337 : {
338 : case NS_ooxml::LN_CT_TcBorders_top:
339 2411 : m_aTopBorderLines.push_back(aBorderLine);
340 2411 : if (!m_aInteropGrabBagName.isEmpty())
341 255 : aSavedGrabBag.push_back(getInteropGrabBag("top"));
342 2411 : break;
343 : case NS_ooxml::LN_CT_TcBorders_start:
344 304 : if( rtl )
345 0 : m_aRightBorderLines.push_back(aBorderLine);
346 : else
347 304 : m_aLeftBorderLines.push_back(aBorderLine);
348 304 : if (!m_aInteropGrabBagName.isEmpty())
349 0 : aSavedGrabBag.push_back(getInteropGrabBag("start"));
350 304 : break;
351 : case NS_ooxml::LN_CT_TcBorders_left:
352 1253 : m_aLeftBorderLines.push_back(aBorderLine);
353 1253 : if (!m_aInteropGrabBagName.isEmpty())
354 220 : aSavedGrabBag.push_back(getInteropGrabBag("left"));
355 1253 : break;
356 : case NS_ooxml::LN_CT_TcBorders_bottom:
357 2004 : m_aBottomBorderLines.push_back(aBorderLine);
358 2004 : if (!m_aInteropGrabBagName.isEmpty())
359 272 : aSavedGrabBag.push_back(getInteropGrabBag("bottom"));
360 2004 : break;
361 : case NS_ooxml::LN_CT_TcBorders_end:
362 320 : if( rtl )
363 0 : m_aLeftBorderLines.push_back(aBorderLine);
364 : else
365 320 : m_aRightBorderLines.push_back(aBorderLine);
366 320 : if (!m_aInteropGrabBagName.isEmpty())
367 0 : aSavedGrabBag.push_back(getInteropGrabBag("end"));
368 320 : break;
369 : case NS_ooxml::LN_CT_TcBorders_right:
370 1302 : m_aRightBorderLines.push_back(aBorderLine);
371 1302 : if (!m_aInteropGrabBagName.isEmpty())
372 235 : aSavedGrabBag.push_back(getInteropGrabBag("right"));
373 1302 : break;
374 : case NS_ooxml::LN_CT_TcBorders_insideH:
375 548 : m_aInsideHBorderLines.push_back(aBorderLine);
376 548 : if (!m_aInteropGrabBagName.isEmpty())
377 177 : aSavedGrabBag.push_back(getInteropGrabBag("insideH"));
378 548 : break;
379 : case NS_ooxml::LN_CT_TcBorders_insideV:
380 525 : m_aInsideVBorderLines.push_back(aBorderLine);
381 525 : if (!m_aInteropGrabBagName.isEmpty())
382 179 : aSavedGrabBag.push_back(getInteropGrabBag("insideV"));
383 525 : break;
384 : case NS_ooxml::LN_CT_TcBorders_tl2br:
385 516 : if (!m_aInteropGrabBagName.isEmpty())
386 516 : aSavedGrabBag.push_back(getInteropGrabBag("tl2br"));
387 516 : break;
388 : case NS_ooxml::LN_CT_TcBorders_tr2bl:
389 516 : if (!m_aInteropGrabBagName.isEmpty())
390 516 : aSavedGrabBag.push_back(getInteropGrabBag("tr2bl"));
391 516 : break;
392 : default:;
393 : }
394 9699 : if (!m_aInteropGrabBagName.isEmpty())
395 2370 : m_aInteropGrabBag = aSavedGrabBag;
396 : }
397 9699 : }
398 :
399 :
400 9699 : void TDefTableHandler::lcl_sprm(Sprm & rSprm)
401 : {
402 9699 : switch( rSprm.getId() )
403 : {
404 : case NS_ooxml::LN_CT_TcBorders_top:
405 : case NS_ooxml::LN_CT_TcBorders_left:
406 : case NS_ooxml::LN_CT_TcBorders_start:
407 : case NS_ooxml::LN_CT_TcBorders_bottom:
408 : case NS_ooxml::LN_CT_TcBorders_right:
409 : case NS_ooxml::LN_CT_TcBorders_end:
410 : case NS_ooxml::LN_CT_TcBorders_insideH:
411 : case NS_ooxml::LN_CT_TcBorders_insideV:
412 : case NS_ooxml::LN_CT_TcBorders_tl2br:
413 : case NS_ooxml::LN_CT_TcBorders_tr2bl:
414 : {
415 9699 : writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
416 9699 : localResolve( rSprm.getId(), pProperties );
417 : }
418 9699 : break;
419 : default:;
420 : }
421 9699 : }
422 :
423 :
424 0 : PropertyMapPtr TDefTableHandler::getRowProperties() const
425 : {
426 0 : PropertyMapPtr pPropertyMap(new PropertyMap);
427 :
428 : // Writer only wants the separators, Word provides also the outer border positions
429 0 : if( m_aCellBorderPositions.size() > 2 )
430 : {
431 : //determine table width
432 0 : double nFullWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
433 : //the positions have to be distibuted in a range of 10000
434 0 : const double nFullWidthRelative = 10000.;
435 0 : uno::Sequence< text::TableColumnSeparator > aSeparators( m_aCellBorderPositions.size() - 2 );
436 0 : text::TableColumnSeparator* pSeparators = aSeparators.getArray();
437 0 : for( sal_uInt32 nBorder = 1; nBorder < m_aCellBorderPositions.size() - 1; ++nBorder )
438 : {
439 : sal_Int16 nRelPos =
440 0 : sal::static_int_cast< sal_Int16 >(double(m_aCellBorderPositions[nBorder]) * nFullWidthRelative / nFullWidth );
441 :
442 0 : pSeparators[nBorder - 1].Position = nRelPos;
443 0 : pSeparators[nBorder - 1].IsVisible = sal_True;
444 : }
445 0 : pPropertyMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, uno::makeAny( aSeparators ) );
446 : }
447 :
448 0 : return pPropertyMap;
449 : }
450 :
451 :
452 3891 : void TDefTableHandler::fillCellProperties(
453 : size_t nCell, ::boost::shared_ptr< TablePropertyMap > pCellProperties ) const
454 : {
455 3891 : if( m_aCellBorderPositions.size() > nCell )
456 : {
457 0 : sal_Int16 nVertOrient = text::VertOrientation::NONE;
458 0 : switch( m_aCellVertAlign[nCell] ) //0 - top 1 - center 2 - bottom
459 : {
460 0 : case 1: nVertOrient = text::VertOrientation::CENTER; break;
461 0 : case 2: nVertOrient = text::VertOrientation::BOTTOM; break;
462 : default:;
463 : }
464 0 : pCellProperties->Insert( PROP_VERT_ORIENT, uno::makeAny( nVertOrient ) );
465 : }
466 3891 : if( m_aTopBorderLines.size() > nCell )
467 2411 : pCellProperties->Insert( PROP_TOP_BORDER, uno::makeAny( m_aTopBorderLines[nCell] ) );
468 3891 : if( m_aLeftBorderLines.size() > nCell )
469 1557 : pCellProperties->Insert( PROP_LEFT_BORDER, uno::makeAny( m_aLeftBorderLines[nCell] ) );
470 3891 : if( m_aBottomBorderLines.size() > nCell )
471 2004 : pCellProperties->Insert( PROP_BOTTOM_BORDER, uno::makeAny( m_aBottomBorderLines[nCell] ) );
472 3891 : if( m_aRightBorderLines.size() > nCell )
473 1622 : pCellProperties->Insert( PROP_RIGHT_BORDER, uno::makeAny( m_aRightBorderLines[nCell] ) );
474 3891 : if( m_aInsideHBorderLines.size() > nCell )
475 548 : pCellProperties->Insert( META_PROP_HORIZONTAL_BORDER, uno::makeAny( m_aInsideHBorderLines[nCell] ) );
476 3891 : if( m_aInsideVBorderLines.size() > nCell )
477 525 : pCellProperties->Insert( META_PROP_VERTICAL_BORDER, uno::makeAny( m_aInsideVBorderLines[nCell] ) );
478 3891 : }
479 :
480 :
481 0 : sal_Int32 TDefTableHandler::getTableWidth() const
482 : {
483 0 : sal_Int32 nWidth = 0;
484 0 : if( m_aCellBorderPositions.size() > 1 )
485 : {
486 : //determine table width
487 0 : nWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
488 : }
489 0 : return nWidth;
490 : }
491 :
492 :
493 0 : size_t TDefTableHandler::getCellCount() const
494 : {
495 0 : return m_aCellVertAlign.size();
496 : }
497 :
498 701 : void TDefTableHandler::enableInteropGrabBag(const OUString& aName)
499 : {
500 701 : m_aInteropGrabBagName = aName;
501 701 : }
502 :
503 3071 : beans::PropertyValue TDefTableHandler::getInteropGrabBag(const OUString& aName)
504 : {
505 3071 : beans::PropertyValue aRet;
506 3071 : if (aName.isEmpty())
507 701 : aRet.Name = m_aInteropGrabBagName;
508 : else
509 2370 : aRet.Name = aName;
510 :
511 6142 : uno::Sequence<beans::PropertyValue> aSeq(m_aInteropGrabBag.size());
512 3071 : beans::PropertyValue* pSeq = aSeq.getArray();
513 12976 : for (std::vector<beans::PropertyValue>::iterator i = m_aInteropGrabBag.begin(); i != m_aInteropGrabBag.end(); ++i)
514 9905 : *pSeq++ = *i;
515 3071 : m_aInteropGrabBag.clear();
516 :
517 3071 : aRet.Value = uno::makeAny(aSeq);
518 6142 : return aRet;
519 : }
520 :
521 31310 : void TDefTableHandler::appendGrabBag(const OUString& aKey, const OUString& aValue)
522 : {
523 31310 : beans::PropertyValue aProperty;
524 31310 : aProperty.Name = aKey;
525 31310 : aProperty.Value = uno::makeAny(aValue);
526 31310 : m_aInteropGrabBag.push_back(aProperty);
527 31310 : }
528 :
529 : } //namespace dmapper
530 : } //namespace writerfilter
531 :
532 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|