LibreOffice Module sc (master)  1
autoform.cxx
Go to the documentation of this file.
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 
20 #include <memory>
21 #include <autoform.hxx>
22 
23 #include <sal/log.hxx>
24 #include <sfx2/docfile.hxx>
25 #include <unotools/pathoptions.hxx>
26 #include <svl/intitem.hxx>
27 #include <svl/itemset.hxx>
28 #include <vcl/outdev.hxx>
29 #include <svx/algitem.hxx>
30 #include <svx/dialmgr.hxx>
31 #include <svx/rotmodit.hxx>
32 #include <svx/strings.hrc>
33 #include <editeng/adjustitem.hxx>
34 #include <editeng/borderline.hxx>
35 #include <editeng/boxitem.hxx>
36 #include <editeng/brushitem.hxx>
37 #include <editeng/colritem.hxx>
38 #include <editeng/contouritem.hxx>
40 #include <editeng/fhgtitem.hxx>
41 #include <editeng/fontitem.hxx>
42 #include <editeng/justifyitem.hxx>
43 #include <editeng/langitem.hxx>
44 #include <editeng/lineitem.hxx>
45 #include <editeng/postitem.hxx>
46 #include <editeng/shdditem.hxx>
47 #include <editeng/udlnitem.hxx>
48 #include <editeng/wghtitem.hxx>
49 #include <tools/urlobj.hxx>
50 #include <comphelper/fileformat.h>
53 #include <tools/tenccvt.hxx>
54 #include <osl/diagnose.h>
55 #include <osl/thread.hxx>
56 
57 #include <attrib.hxx>
58 #include <globstr.hrc>
59 #include <scitems.hxx>
60 #include <scresid.hxx>
61 #include <document.hxx>
62 
63 /*
64  * XXX: BIG RED NOTICE! Changes MUST be binary file format compatible and MUST
65  * be synchronized with Writer's SwTableAutoFmtTbl sw/source/core/doc/tblafmt.cxx
66  */
67 
68 constexpr OUStringLiteral sAutoTblFmtName = u"autotbl.fmt";
69 
70 // till SO5PF
71 const sal_uInt16 AUTOFORMAT_ID_X = 9501;
72 const sal_uInt16 AUTOFORMAT_ID_358 = 9601;
73 const sal_uInt16 AUTOFORMAT_DATA_ID_X = 9502;
74 
75 // from SO5 on
76 // in following versions the value of the IDs must be higher
77 const sal_uInt16 AUTOFORMAT_ID_504 = 9801;
78 const sal_uInt16 AUTOFORMAT_DATA_ID_504 = 9802;
79 
80 const sal_uInt16 AUTOFORMAT_DATA_ID_552 = 9902;
81 
82 // --- from 680/dr25 on: store strings as UTF-8
83 const sal_uInt16 AUTOFORMAT_ID_680DR25 = 10021;
84 
85 // --- Bug fix to fdo#31005: Table Autoformats does not save/apply all properties (Writer and Calc)
86 const sal_uInt16 AUTOFORMAT_ID_31005 = 10041;
87 const sal_uInt16 AUTOFORMAT_DATA_ID_31005 = 10042;
88 
89 // current version
92 
93 namespace
94 {
97  {
98  blob.Reset();
99 
100  sal_uInt64 endOfBlob = 0;
101  stream.ReadUInt64( endOfBlob );
102 
103  const sal_uInt64 currentPosition = stream.Tell();
104  const sal_uInt64 blobSize = endOfBlob - currentPosition;
105  // A zero-size indicates an empty blob. This happens when Calc creates a new autoformat,
106  // since it (naturally) doesn't have any writer-specific data to write.
107  if (blobSize)
108  {
109  blob.pData.reset(new sal_uInt8[blobSize]);
110  blob.size = static_cast<std::size_t>(blobSize);
111  stream.ReadBytes(blob.pData.get(), blob.size);
112  }
113 
114  return stream;
115  }
116 
118  SvStream& WriteAutoFormatSwBlob(SvStream &stream, const AutoFormatSwBlob &blob)
119  {
120  const sal_uInt64 endOfBlob = stream.Tell() + sizeof(sal_uInt64) + blob.size;
121  stream.WriteUInt64( endOfBlob );
122  if (blob.size)
123  stream.WriteBytes(blob.pData.get(), blob.size);
124 
125  return stream;
126  }
127 }
128 
130 {
131 }
132 
133 void ScAfVersions::Load( SvStream& rStream, sal_uInt16 nVer )
134 {
135  LoadBlockA(rStream, nVer);
136  if (nVer >= AUTOFORMAT_ID_31005)
137  {
138  rStream >> swVersions;
139  }
140  LoadBlockB(rStream, nVer);
141 }
142 
143 void ScAfVersions::Write(SvStream& rStream, sal_uInt16 fileVersion)
144 {
145  AutoFormatVersions::WriteBlockA(rStream, fileVersion);
146 
147  if (fileVersion >= SOFFICE_FILEFORMAT_50)
148  {
149  WriteAutoFormatSwBlob( rStream, swVersions );
150  }
151 
152  AutoFormatVersions::WriteBlockB(rStream, fileVersion);
153 }
154 
156 {
157  // need to set default instances for base class AutoFormatBase here
158  // due to resource defines (e.g. ATTR_FONT) which are not available
159  // in svx and different in the different usages of derivations
160  m_aFont = std::make_unique<SvxFontItem>(ATTR_FONT);
161  m_aHeight = std::make_unique<SvxFontHeightItem>(240, 100, ATTR_FONT_HEIGHT);
162  m_aWeight = std::make_unique<SvxWeightItem>(WEIGHT_NORMAL, ATTR_FONT_WEIGHT);
163  m_aPosture = std::make_unique<SvxPostureItem>(ITALIC_NONE, ATTR_FONT_POSTURE);
164  m_aCJKFont = std::make_unique<SvxFontItem>(ATTR_CJK_FONT);
165  m_aCJKHeight = std::make_unique<SvxFontHeightItem>(240, 100, ATTR_CJK_FONT_HEIGHT);
166  m_aCJKWeight = std::make_unique<SvxWeightItem>(WEIGHT_NORMAL, ATTR_CJK_FONT_WEIGHT);
167  m_aCJKPosture = std::make_unique<SvxPostureItem>(ITALIC_NONE, ATTR_CJK_FONT_POSTURE);
168  m_aCTLFont = std::make_unique<SvxFontItem>(ATTR_CTL_FONT);
169  m_aCTLHeight = std::make_unique<SvxFontHeightItem>(240, 100, ATTR_CTL_FONT_HEIGHT);
170  m_aCTLWeight = std::make_unique<SvxWeightItem>(WEIGHT_NORMAL, ATTR_CTL_FONT_WEIGHT);
171  m_aCTLPosture = std::make_unique<SvxPostureItem>(ITALIC_NONE, ATTR_CTL_FONT_POSTURE);
172  m_aUnderline = std::make_unique<SvxUnderlineItem>(LINESTYLE_NONE,ATTR_FONT_UNDERLINE);
173  m_aOverline = std::make_unique<SvxOverlineItem>(LINESTYLE_NONE,ATTR_FONT_OVERLINE);
174  m_aCrossedOut = std::make_unique<SvxCrossedOutItem>(STRIKEOUT_NONE, ATTR_FONT_CROSSEDOUT);
175  m_aContour = std::make_unique<SvxContourItem>(false, ATTR_FONT_CONTOUR);
176  m_aShadowed = std::make_unique<SvxShadowedItem>(false, ATTR_FONT_SHADOWED);
177  m_aColor = std::make_unique<SvxColorItem>(ATTR_FONT_COLOR);
178  m_aBox = std::make_unique<SvxBoxItem>(ATTR_BORDER);
179  m_aTLBR = std::make_unique<SvxLineItem>(ATTR_BORDER_TLBR);
180  m_aBLTR = std::make_unique<SvxLineItem>(ATTR_BORDER_BLTR);
181  m_aBackground = std::make_unique<SvxBrushItem>(ATTR_BACKGROUND);
182  m_aAdjust = std::make_unique<SvxAdjustItem>(SvxAdjust::Left, 0);
183  m_aHorJustify = std::make_unique<SvxHorJustifyItem>(SvxCellHorJustify::Standard, ATTR_HOR_JUSTIFY);
184  m_aVerJustify = std::make_unique<SvxVerJustifyItem>(SvxCellVerJustify::Standard, ATTR_VER_JUSTIFY);
185  m_aStacked = std::make_unique<ScVerticalStackCell>();
186  m_aMargin = std::make_unique<SvxMarginItem>(ATTR_MARGIN);
187  m_aLinebreak = std::make_unique<ScLineBreakCell>();
188  m_aRotateAngle = std::make_unique<ScRotateValueItem>(0_deg100);
189  m_aRotateMode = std::make_unique<SvxRotateModeItem>(SVX_ROTATE_MODE_STANDARD, ATTR_ROTATE_MODE);
190 }
191 
193 : AutoFormatBase(rCopy),
194  // m_swFields was not copied in original, needed?
195  aNumFormat( rCopy.aNumFormat )
196 {
197 }
198 
200 {
201 }
202 
203 bool ScAutoFormatDataField::Load( SvStream& rStream, const ScAfVersions& rVersions, sal_uInt16 nVer )
204 {
205  LoadBlockA( rStream, rVersions, nVer );
206 
207  if (nVer >= AUTOFORMAT_DATA_ID_31005)
208  {
209  rStream >> m_swFields;
210  }
211 
212  LoadBlockB( rStream, rVersions, nVer );
213 
214  if( 0 == rVersions.nNumFormatVersion )
215  {
216  // --- from 680/dr25 on: store strings as UTF-8
217  rtl_TextEncoding eCharSet = (nVer >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet();
218  aNumFormat.Load( rStream, eCharSet );
219  }
220 
221  // adjust charset in font
222  rtl_TextEncoding eSysSet = osl_getThreadTextEncoding();
223  rtl_TextEncoding eSrcSet = rStream.GetStreamCharSet();
224  if( eSrcSet != eSysSet && m_aFont->GetCharSet() == eSrcSet )
225  m_aFont->SetCharSet(eSysSet);
226 
227  return (rStream.GetError() == ERRCODE_NONE);
228 }
229 
230 bool ScAutoFormatDataField::Save( SvStream& rStream, sal_uInt16 fileVersion )
231 {
232  SaveBlockA( rStream, fileVersion );
233 
234  if (fileVersion >= SOFFICE_FILEFORMAT_50)
235  {
236  WriteAutoFormatSwBlob( rStream, m_swFields );
237  }
238 
239  SaveBlockB( rStream, fileVersion );
240 
241  // --- from 680/dr25 on: store strings as UTF-8
242  aNumFormat.Save( rStream, RTL_TEXTENCODING_UTF8 );
243 
244  return (rStream.GetError() == ERRCODE_NONE);
245 }
246 
248 {
249  nStrResId = USHRT_MAX;
250 
252  bIncludeFont =
254  bIncludeFrame =
256  bIncludeWidthHeight = true;
257 
258  for( sal_uInt16 nIndex = 0; nIndex < 16; ++nIndex )
259  ppDataField[ nIndex ].reset( new ScAutoFormatDataField );
260 }
261 
263  aName( rData.aName ),
264  nStrResId( rData.nStrResId ),
265  bIncludeFont( rData.bIncludeFont ),
266  bIncludeJustify( rData.bIncludeJustify ),
267  bIncludeFrame( rData.bIncludeFrame ),
268  bIncludeBackground( rData.bIncludeBackground ),
269  bIncludeValueFormat( rData.bIncludeValueFormat ),
270  bIncludeWidthHeight( rData.bIncludeWidthHeight )
271 {
272  for( sal_uInt16 nIndex = 0; nIndex < 16; ++nIndex )
273  ppDataField[ nIndex ].reset( new ScAutoFormatDataField( rData.GetField( nIndex ) ) );
274 }
275 
277 {
278 }
279 
281 {
282  OSL_ENSURE( nIndex < 16, "ScAutoFormatData::GetField - illegal index" );
283  OSL_ENSURE( ppDataField[ nIndex ], "ScAutoFormatData::GetField - no data" );
284  return *ppDataField[ nIndex ];
285 }
286 
287 const ScAutoFormatDataField& ScAutoFormatData::GetField( sal_uInt16 nIndex ) const
288 {
289  OSL_ENSURE( nIndex < 16, "ScAutoFormatData::GetField - illegal index" );
290  OSL_ENSURE( ppDataField[ nIndex ], "ScAutoFormatData::GetField - no data" );
291  return *ppDataField[ nIndex ];
292 }
293 
294 const SfxPoolItem* ScAutoFormatData::GetItem( sal_uInt16 nIndex, sal_uInt16 nWhich ) const
295 {
296  const ScAutoFormatDataField& rField = GetField( nIndex );
297  switch( nWhich )
298  {
299  case ATTR_FONT: return &rField.GetFont();
300  case ATTR_FONT_HEIGHT: return &rField.GetHeight();
301  case ATTR_FONT_WEIGHT: return &rField.GetWeight();
302  case ATTR_FONT_POSTURE: return &rField.GetPosture();
303  case ATTR_CJK_FONT: return &rField.GetCJKFont();
304  case ATTR_CJK_FONT_HEIGHT: return &rField.GetCJKHeight();
305  case ATTR_CJK_FONT_WEIGHT: return &rField.GetCJKWeight();
306  case ATTR_CJK_FONT_POSTURE: return &rField.GetCJKPosture();
307  case ATTR_CTL_FONT: return &rField.GetCTLFont();
308  case ATTR_CTL_FONT_HEIGHT: return &rField.GetCTLHeight();
309  case ATTR_CTL_FONT_WEIGHT: return &rField.GetCTLWeight();
310  case ATTR_CTL_FONT_POSTURE: return &rField.GetCTLPosture();
311  case ATTR_FONT_UNDERLINE: return &rField.GetUnderline();
312  case ATTR_FONT_OVERLINE: return &rField.GetOverline();
313  case ATTR_FONT_CROSSEDOUT: return &rField.GetCrossedOut();
314  case ATTR_FONT_CONTOUR: return &rField.GetContour();
315  case ATTR_FONT_SHADOWED: return &rField.GetShadowed();
316  case ATTR_FONT_COLOR: return &rField.GetColor();
317  case ATTR_BORDER: return &rField.GetBox();
318  case ATTR_BORDER_TLBR: return &rField.GetTLBR();
319  case ATTR_BORDER_BLTR: return &rField.GetBLTR();
320  case ATTR_BACKGROUND: return &rField.GetBackground();
321  case ATTR_HOR_JUSTIFY: return &rField.GetHorJustify();
322  case ATTR_VER_JUSTIFY: return &rField.GetVerJustify();
323  case ATTR_STACKED: return &rField.GetStacked();
324  case ATTR_MARGIN: return &rField.GetMargin();
325  case ATTR_LINEBREAK: return &rField.GetLinebreak();
326  case ATTR_ROTATE_VALUE: return &rField.GetRotateAngle();
327  case ATTR_ROTATE_MODE: return &rField.GetRotateMode();
328  }
329  return nullptr;
330 }
331 
332 void ScAutoFormatData::PutItem( sal_uInt16 nIndex, const SfxPoolItem& rItem )
333 {
334  ScAutoFormatDataField& rField = GetField( nIndex );
335  switch( rItem.Which() )
336  {
337  case ATTR_FONT: rField.SetFont( rItem.StaticWhichCast(ATTR_FONT) ); break;
338  case ATTR_FONT_HEIGHT: rField.SetHeight( rItem.StaticWhichCast(ATTR_FONT_HEIGHT) ); break;
339  case ATTR_FONT_WEIGHT: rField.SetWeight( rItem.StaticWhichCast(ATTR_FONT_WEIGHT) ); break;
340  case ATTR_FONT_POSTURE: rField.SetPosture( rItem.StaticWhichCast(ATTR_FONT_POSTURE) ); break;
341  case ATTR_CJK_FONT: rField.SetCJKFont( rItem.StaticWhichCast(ATTR_CJK_FONT) ); break;
345  case ATTR_CTL_FONT: rField.SetCTLFont( rItem.StaticWhichCast(ATTR_CTL_FONT) ); break;
352  case ATTR_FONT_CONTOUR: rField.SetContour( rItem.StaticWhichCast(ATTR_FONT_CONTOUR) ); break;
354  case ATTR_FONT_COLOR: rField.SetColor( rItem.StaticWhichCast(ATTR_FONT_COLOR) ); break;
355  case ATTR_BORDER: rField.SetBox( rItem.StaticWhichCast(ATTR_BORDER) ); break;
356  case ATTR_BORDER_TLBR: rField.SetTLBR( rItem.StaticWhichCast(ATTR_BORDER_TLBR) ); break;
357  case ATTR_BORDER_BLTR: rField.SetBLTR( rItem.StaticWhichCast(ATTR_BORDER_BLTR) ); break;
358  case ATTR_BACKGROUND: rField.SetBackground( rItem.StaticWhichCast(ATTR_BACKGROUND) ); break;
359  case ATTR_HOR_JUSTIFY: rField.SetHorJustify( rItem.StaticWhichCast(ATTR_HOR_JUSTIFY) ); break;
360  case ATTR_VER_JUSTIFY: rField.SetVerJustify( rItem.StaticWhichCast(ATTR_VER_JUSTIFY) ); break;
361  case ATTR_STACKED: rField.SetStacked( rItem.StaticWhichCast(ATTR_STACKED) ); break;
362  case ATTR_MARGIN: rField.SetMargin( rItem.StaticWhichCast(ATTR_MARGIN) ); break;
363  case ATTR_LINEBREAK: rField.SetLinebreak( rItem.StaticWhichCast(ATTR_LINEBREAK) ); break;
365  case ATTR_ROTATE_MODE: rField.SetRotateMode( rItem.StaticWhichCast(ATTR_ROTATE_MODE) ); break;
366  }
367 }
368 
369 void ScAutoFormatData::CopyItem( sal_uInt16 nToIndex, sal_uInt16 nFromIndex, sal_uInt16 nWhich )
370 {
371  const SfxPoolItem* pItem = GetItem( nFromIndex, nWhich );
372  if( pItem )
373  PutItem( nToIndex, *pItem );
374 }
375 
376 const ScNumFormatAbbrev& ScAutoFormatData::GetNumFormat( sal_uInt16 nIndex ) const
377 {
378  return GetField( nIndex ).GetNumFormat();
379 }
380 
381 bool ScAutoFormatData::IsEqualData( sal_uInt16 nIndex1, sal_uInt16 nIndex2 ) const
382 {
383  bool bEqual = true;
384  const ScAutoFormatDataField& rField1 = GetField( nIndex1 );
385  const ScAutoFormatDataField& rField2 = GetField( nIndex2 );
386 
387  if( bIncludeValueFormat )
388  {
389  bEqual = bEqual
390  && (rField1.GetNumFormat() == rField2.GetNumFormat());
391  }
392  if( bIncludeFont )
393  {
394  bEqual = bEqual
395  && (rField1.GetFont() == rField2.GetFont())
396  && (rField1.GetHeight() == rField2.GetHeight())
397  && (rField1.GetWeight() == rField2.GetWeight())
398  && (rField1.GetPosture() == rField2.GetPosture())
399  && (rField1.GetCJKFont() == rField2.GetCJKFont())
400  && (rField1.GetCJKHeight() == rField2.GetCJKHeight())
401  && (rField1.GetCJKWeight() == rField2.GetCJKWeight())
402  && (rField1.GetCJKPosture() == rField2.GetCJKPosture())
403  && (rField1.GetCTLFont() == rField2.GetCTLFont())
404  && (rField1.GetCTLHeight() == rField2.GetCTLHeight())
405  && (rField1.GetCTLWeight() == rField2.GetCTLWeight())
406  && (rField1.GetCTLPosture() == rField2.GetCTLPosture())
407  && (rField1.GetUnderline() == rField2.GetUnderline())
408  && (rField1.GetOverline() == rField2.GetOverline())
409  && (rField1.GetCrossedOut() == rField2.GetCrossedOut())
410  && (rField1.GetContour() == rField2.GetContour())
411  && (rField1.GetShadowed() == rField2.GetShadowed())
412  && (rField1.GetColor() == rField2.GetColor());
413  }
414  if( bIncludeJustify )
415  {
416  bEqual = bEqual
417  && (rField1.GetHorJustify() == rField2.GetHorJustify())
418  && (rField1.GetVerJustify() == rField2.GetVerJustify())
419  && (rField1.GetStacked() == rField2.GetStacked())
420  && (rField1.GetLinebreak() == rField2.GetLinebreak())
421  && (rField1.GetMargin() == rField2.GetMargin())
422  && (rField1.GetRotateAngle() == rField2.GetRotateAngle())
423  && (rField1.GetRotateMode() == rField2.GetRotateMode());
424  }
425  if( bIncludeFrame )
426  {
427  bEqual = bEqual
428  && (rField1.GetBox() == rField2.GetBox())
429  && (rField1.GetTLBR() == rField2.GetTLBR())
430  && (rField1.GetBLTR() == rField2.GetBLTR());
431  }
432  if( bIncludeBackground )
433  {
434  bEqual = bEqual
435  && (rField1.GetBackground() == rField2.GetBackground());
436  }
437  return bEqual;
438 }
439 
440 void ScAutoFormatData::FillToItemSet( sal_uInt16 nIndex, SfxItemSet& rItemSet, const ScDocument& rDoc ) const
441 {
442  const ScAutoFormatDataField& rField = GetField( nIndex );
443 
444  if( bIncludeValueFormat )
445  {
446  ScNumFormatAbbrev& rNumFormat = const_cast<ScNumFormatAbbrev&>(rField.GetNumFormat());
447  SfxUInt32Item aValueFormat( ATTR_VALUE_FORMAT, 0 );
448  aValueFormat.SetValue( rNumFormat.GetFormatIndex( *rDoc.GetFormatTable() ) );
449  rItemSet.Put( aValueFormat );
450  rItemSet.Put( SvxLanguageItem( rNumFormat.GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
451  }
452  if( bIncludeFont )
453  {
454  rItemSet.Put( rField.GetFont() );
455  rItemSet.Put( rField.GetHeight() );
456  rItemSet.Put( rField.GetWeight() );
457  rItemSet.Put( rField.GetPosture() );
458  // do not insert empty CJK font
459  const SvxFontItem& rCJKFont = rField.GetCJKFont();
460  if (!rCJKFont.GetStyleName().isEmpty())
461  {
462  rItemSet.Put( rCJKFont );
463  rItemSet.Put( rField.GetCJKHeight() );
464  rItemSet.Put( rField.GetCJKWeight() );
465  rItemSet.Put( rField.GetCJKPosture() );
466  }
467  else
468  {
469  SvxFontHeightItem aFontHeightItem(rField.GetHeight());
470  aFontHeightItem.SetWhich(ATTR_CJK_FONT_HEIGHT);
471  rItemSet.Put( aFontHeightItem );
472  SvxWeightItem aWeightItem(rField.GetWeight());
473  aWeightItem.SetWhich(ATTR_CJK_FONT_WEIGHT);
474  rItemSet.Put( aWeightItem );
475  SvxPostureItem aPostureItem(rField.GetPosture());
476  aPostureItem.SetWhich(ATTR_CJK_FONT_POSTURE);
477  rItemSet.Put( aPostureItem );
478  }
479  // do not insert empty CTL font
480  const SvxFontItem& rCTLFont = rField.GetCTLFont();
481  if (!rCTLFont.GetStyleName().isEmpty())
482  {
483  rItemSet.Put( rCTLFont );
484  rItemSet.Put( rField.GetCTLHeight() );
485  rItemSet.Put( rField.GetCTLWeight() );
486  rItemSet.Put( rField.GetCTLPosture() );
487  }
488  else
489  {
490  SvxFontHeightItem aFontHeightItem(rField.GetHeight());
491  aFontHeightItem.SetWhich(ATTR_CTL_FONT_HEIGHT);
492  rItemSet.Put( aFontHeightItem );
493  SvxWeightItem aWeightItem(rField.GetWeight());
494  aWeightItem.SetWhich(ATTR_CTL_FONT_WEIGHT);
495  rItemSet.Put( aWeightItem );
496  SvxPostureItem aPostureItem(rField.GetPosture());
497  aPostureItem.SetWhich(ATTR_CTL_FONT_POSTURE);
498  rItemSet.Put( aPostureItem );
499  }
500  rItemSet.Put( rField.GetUnderline() );
501  rItemSet.Put( rField.GetOverline() );
502  rItemSet.Put( rField.GetCrossedOut() );
503  rItemSet.Put( rField.GetContour() );
504  rItemSet.Put( rField.GetShadowed() );
505  rItemSet.Put( rField.GetColor() );
506  }
507  if( bIncludeJustify )
508  {
509  rItemSet.Put( rField.GetHorJustify() );
510  rItemSet.Put( rField.GetVerJustify() );
511  rItemSet.Put( rField.GetStacked() );
512  rItemSet.Put( rField.GetLinebreak() );
513  rItemSet.Put( rField.GetMargin() );
514  rItemSet.Put( rField.GetRotateAngle() );
515  rItemSet.Put( rField.GetRotateMode() );
516  }
517  if( bIncludeFrame )
518  {
519  rItemSet.Put( rField.GetBox() );
520  rItemSet.Put( rField.GetTLBR() );
521  rItemSet.Put( rField.GetBLTR() );
522  }
523  if( bIncludeBackground )
524  rItemSet.Put( rField.GetBackground() );
525 }
526 
527 void ScAutoFormatData::GetFromItemSet( sal_uInt16 nIndex, const SfxItemSet& rItemSet, const ScNumFormatAbbrev& rNumFormat )
528 {
529  ScAutoFormatDataField& rField = GetField( nIndex );
530 
531  rField.SetNumFormat ( rNumFormat);
532  rField.SetFont ( rItemSet.Get( ATTR_FONT ) );
533  rField.SetHeight ( rItemSet.Get( ATTR_FONT_HEIGHT ) );
534  rField.SetWeight ( rItemSet.Get( ATTR_FONT_WEIGHT ) );
535  rField.SetPosture ( rItemSet.Get( ATTR_FONT_POSTURE ) );
536  rField.SetCJKFont ( rItemSet.Get( ATTR_CJK_FONT ) );
537  rField.SetCJKHeight ( rItemSet.Get( ATTR_CJK_FONT_HEIGHT ) );
538  rField.SetCJKWeight ( rItemSet.Get( ATTR_CJK_FONT_WEIGHT ) );
539  rField.SetCJKPosture ( rItemSet.Get( ATTR_CJK_FONT_POSTURE ) );
540  rField.SetCTLFont ( rItemSet.Get( ATTR_CTL_FONT ) );
541  rField.SetCTLHeight ( rItemSet.Get( ATTR_CTL_FONT_HEIGHT ) );
542  rField.SetCTLWeight ( rItemSet.Get( ATTR_CTL_FONT_WEIGHT ) );
543  rField.SetCTLPosture ( rItemSet.Get( ATTR_CTL_FONT_POSTURE ) );
544  rField.SetUnderline ( rItemSet.Get( ATTR_FONT_UNDERLINE ) );
545  rField.SetOverline ( rItemSet.Get( ATTR_FONT_OVERLINE ) );
546  rField.SetCrossedOut ( rItemSet.Get( ATTR_FONT_CROSSEDOUT ) );
547  rField.SetContour ( rItemSet.Get( ATTR_FONT_CONTOUR ) );
548  rField.SetShadowed ( rItemSet.Get( ATTR_FONT_SHADOWED ) );
549  rField.SetColor ( rItemSet.Get( ATTR_FONT_COLOR ) );
550  rField.SetTLBR ( rItemSet.Get( ATTR_BORDER_TLBR ) );
551  rField.SetBLTR ( rItemSet.Get( ATTR_BORDER_BLTR ) );
552  rField.SetHorJustify ( rItemSet.Get( ATTR_HOR_JUSTIFY ) );
553  rField.SetVerJustify ( rItemSet.Get( ATTR_VER_JUSTIFY ) );
554  rField.SetStacked ( rItemSet.Get( ATTR_STACKED ) );
555  rField.SetLinebreak ( rItemSet.Get( ATTR_LINEBREAK ) );
556  rField.SetMargin ( rItemSet.Get( ATTR_MARGIN ) );
557  rField.SetBackground ( rItemSet.Get( ATTR_BACKGROUND ) );
558  rField.SetRotateAngle ( rItemSet.Get( ATTR_ROTATE_VALUE ) );
559  rField.SetRotateMode ( rItemSet.Get( ATTR_ROTATE_MODE ) );
560 }
561 
563 {
564  RID_SVXSTR_TBLAFMT_3D,
565  RID_SVXSTR_TBLAFMT_BLACK1,
566  RID_SVXSTR_TBLAFMT_BLACK2,
567  RID_SVXSTR_TBLAFMT_BLUE,
568  RID_SVXSTR_TBLAFMT_BROWN,
569  RID_SVXSTR_TBLAFMT_CURRENCY,
570  RID_SVXSTR_TBLAFMT_CURRENCY_3D,
571  RID_SVXSTR_TBLAFMT_CURRENCY_GRAY,
572  RID_SVXSTR_TBLAFMT_CURRENCY_LAVENDER,
573  RID_SVXSTR_TBLAFMT_CURRENCY_TURQUOISE,
574  RID_SVXSTR_TBLAFMT_GRAY,
575  RID_SVXSTR_TBLAFMT_GREEN,
576  RID_SVXSTR_TBLAFMT_LAVENDER,
577  RID_SVXSTR_TBLAFMT_RED,
578  RID_SVXSTR_TBLAFMT_TURQUOISE,
579  RID_SVXSTR_TBLAFMT_YELLOW,
580  RID_SVXSTR_TBLAFMT_LO6_ACADEMIC,
581  RID_SVXSTR_TBLAFMT_LO6_BOX_LIST_BLUE,
582  RID_SVXSTR_TBLAFMT_LO6_BOX_LIST_GREEN,
583  RID_SVXSTR_TBLAFMT_LO6_BOX_LIST_RED,
584  RID_SVXSTR_TBLAFMT_LO6_BOX_LIST_YELLOW,
585  RID_SVXSTR_TBLAFMT_LO6_ELEGANT,
586  RID_SVXSTR_TBLAFMT_LO6_FINANCIAL,
587  RID_SVXSTR_TBLAFMT_LO6_SIMPLE_GRID_COLUMNS,
588  RID_SVXSTR_TBLAFMT_LO6_SIMPLE_GRID_ROWS,
589  RID_SVXSTR_TBLAFMT_LO6_SIMPLE_LIST_SHADED
590 };
591 
592 bool ScAutoFormatData::Load( SvStream& rStream, const ScAfVersions& rVersions )
593 {
594  sal_uInt16 nVer = 0;
595  rStream.ReadUInt16( nVer );
596  bool bRet = ERRCODE_NONE == rStream.GetError();
597  if( bRet && (nVer == AUTOFORMAT_DATA_ID_X ||
598  (AUTOFORMAT_DATA_ID_504 <= nVer && nVer <= AUTOFORMAT_DATA_ID)) )
599  {
600  // --- from 680/dr25 on: store strings as UTF-8
601  if (nVer >= AUTOFORMAT_ID_680DR25)
602  {
604  RTL_TEXTENCODING_UTF8);
605  }
606  else
607  aName = rStream.ReadUniOrByteString( rStream.GetStreamCharSet() );
608 
609  if( AUTOFORMAT_DATA_ID_552 <= nVer )
610  {
611  rStream.ReadUInt16( nStrResId );
612  if (nStrResId < SAL_N_ELEMENTS(RID_SVXSTR_TBLAFMT))
613  aName = SvxResId(RID_SVXSTR_TBLAFMT[nStrResId]);
614  else
615  nStrResId = USHRT_MAX;
616  }
617 
618  bool b;
619  rStream.ReadCharAsBool( b ); bIncludeFont = b;
620  rStream.ReadCharAsBool( b ); bIncludeJustify = b;
621  rStream.ReadCharAsBool( b ); bIncludeFrame = b;
622  rStream.ReadCharAsBool( b ); bIncludeBackground = b;
623  rStream.ReadCharAsBool( b ); bIncludeValueFormat = b;
624  rStream.ReadCharAsBool( b ); bIncludeWidthHeight = b;
625 
626  if (nVer >= AUTOFORMAT_DATA_ID_31005)
627  rStream >> m_swFields;
628 
629  bRet = ERRCODE_NONE == rStream.GetError();
630  for( sal_uInt16 i = 0; bRet && i < 16; ++i )
631  bRet = GetField( i ).Load( rStream, rVersions, nVer );
632  }
633  else
634  bRet = false;
635  return bRet;
636 }
637 
638 bool ScAutoFormatData::Save(SvStream& rStream, sal_uInt16 fileVersion)
639 {
640  rStream.WriteUInt16( AUTOFORMAT_DATA_ID );
641  // --- from 680/dr25 on: store strings as UTF-8
642  write_uInt16_lenPrefixed_uInt8s_FromOUString(rStream, aName, RTL_TEXTENCODING_UTF8);
643 
644  rStream.WriteUInt16( nStrResId );
645  rStream.WriteBool( bIncludeFont );
646  rStream.WriteBool( bIncludeJustify );
647  rStream.WriteBool( bIncludeFrame );
648  rStream.WriteBool( bIncludeBackground );
649  rStream.WriteBool( bIncludeValueFormat );
650  rStream.WriteBool( bIncludeWidthHeight );
651 
652  if (fileVersion >= SOFFICE_FILEFORMAT_50)
653  WriteAutoFormatSwBlob( rStream, m_swFields );
654 
655  bool bRet = ERRCODE_NONE == rStream.GetError();
656  for (sal_uInt16 i = 0; bRet && (i < 16); i++)
657  bRet = GetField( i ).Save( rStream, fileVersion );
658 
659  return bRet;
660 }
661 
663  mbSaveLater(false)
664 {
665  // create default autoformat
666  std::unique_ptr<ScAutoFormatData> pData(new ScAutoFormatData);
667  OUString aName(ScResId(STR_STYLENAME_STANDARD));
668  pData->SetName(aName);
669 
670  // default font, default height
672  DefaultFontType::LATIN_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne );
673  SvxFontItem aFontItem(
674  aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(),
675  aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_FONT );
676 
677  aStdFont = OutputDevice::GetDefaultFont(
678  DefaultFontType::CJK_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne );
679  SvxFontItem aCJKFontItem(
680  aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(),
681  aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CJK_FONT );
682 
683  aStdFont = OutputDevice::GetDefaultFont(
684  DefaultFontType::CTL_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne );
685  SvxFontItem aCTLFontItem(
686  aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(),
687  aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CTL_FONT );
688 
689  SvxFontHeightItem aHeight( 200, 100, ATTR_FONT_HEIGHT ); // 10 pt;
690 
691  // black thin border
692  Color aBlack( COL_BLACK );
694  SvxBoxItem aBox( ATTR_BORDER );
695  aBox.SetLine(&aLine, SvxBoxItemLine::LEFT);
696  aBox.SetLine(&aLine, SvxBoxItemLine::TOP);
697  aBox.SetLine(&aLine, SvxBoxItemLine::RIGHT);
698  aBox.SetLine(&aLine, SvxBoxItemLine::BOTTOM);
699 
700  Color aWhite(COL_WHITE);
701  SvxColorItem aWhiteText( aWhite, ATTR_FONT_COLOR );
702  SvxColorItem aBlackText( aBlack, ATTR_FONT_COLOR );
703  SvxBrushItem aBlueBack( COL_BLUE, ATTR_BACKGROUND );
704  SvxBrushItem aWhiteBack( aWhite, ATTR_BACKGROUND );
705  SvxBrushItem aGray70Back( Color(0x4d, 0x4d, 0x4d), ATTR_BACKGROUND );
706  SvxBrushItem aGray20Back( Color(0xcc, 0xcc, 0xcc), ATTR_BACKGROUND );
707 
708  for (sal_uInt16 i=0; i<16; i++)
709  {
710  pData->PutItem( i, aBox );
711  pData->PutItem( i, aFontItem );
712  pData->PutItem( i, aCJKFontItem );
713  pData->PutItem( i, aCTLFontItem );
714  aHeight.SetWhich( ATTR_FONT_HEIGHT );
715  pData->PutItem( i, aHeight );
716  aHeight.SetWhich( ATTR_CJK_FONT_HEIGHT );
717  pData->PutItem( i, aHeight );
718  aHeight.SetWhich( ATTR_CTL_FONT_HEIGHT );
719  pData->PutItem( i, aHeight );
720  if (i<4) // top: white on blue
721  {
722  pData->PutItem( i, aWhiteText );
723  pData->PutItem( i, aBlueBack );
724  }
725  else if ( i%4 == 0 ) // left: white on gray70
726  {
727  pData->PutItem( i, aWhiteText );
728  pData->PutItem( i, aGray70Back );
729  }
730  else if ( i%4 == 3 || i >= 12 ) // right and bottom: black on gray20
731  {
732  pData->PutItem( i, aBlackText );
733  pData->PutItem( i, aGray20Back );
734  }
735  else // center: black on white
736  {
737  pData->PutItem( i, aBlackText );
738  pData->PutItem( i, aWhiteBack );
739  }
740  }
741 
742  insert(std::move(pData));
743 }
744 
745 bool DefaultFirstEntry::operator() (const OUString& left, const OUString& right) const
746 {
747  OUString aStrStandard(ScResId(STR_STYLENAME_STANDARD));
748  if (ScGlobal::GetTransliteration().isEqual( left, right ) )
749  return false;
750  if ( ScGlobal::GetTransliteration().isEqual( left, aStrStandard ) )
751  return true;
752  if ( ScGlobal::GetTransliteration().isEqual( right, aStrStandard ) )
753  return false;
754  return ScGlobal::GetCollator().compareString( left, right) < 0;
755 }
756 
757 void ScAutoFormat::SetSaveLater( bool bSet )
758 {
759  mbSaveLater = bSet;
760 }
761 
762 const ScAutoFormatData* ScAutoFormat::findByIndex(size_t nIndex) const
763 {
764  if (nIndex >= m_Data.size())
765  return nullptr;
766 
767  MapType::const_iterator it = m_Data.begin();
768  std::advance(it, nIndex);
769  return it->second.get();
770 }
771 
773 {
774  if (nIndex >= m_Data.size())
775  return nullptr;
776 
777  MapType::iterator it = m_Data.begin();
778  std::advance(it, nIndex);
779  return it->second.get();
780 }
781 
783 {
784  return m_Data.find(rName);
785 }
786 
787 ScAutoFormat::iterator ScAutoFormat::insert(std::unique_ptr<ScAutoFormatData> pNew)
788 {
789  OUString aName = pNew->GetName();
790  return m_Data.insert(std::make_pair(aName, std::move(pNew))).first;
791 }
792 
794 {
795  m_Data.erase(it);
796 }
797 
798 size_t ScAutoFormat::size() const
799 {
800  return m_Data.size();
801 }
802 
804 {
805  return m_Data.begin();
806 }
807 
809 {
810  return m_Data.end();
811 }
812 
814 {
815  return m_Data.begin();
816 }
817 
819 {
820  return m_Data.end();
821 }
822 
824 {
826  SvtPathOptions aPathOpt;
827  aURL.SetSmartURL( aPathOpt.GetUserConfigPath() );
828  aURL.setFinalSlash();
829  aURL.Append( sAutoTblFmtName );
830 
831  SfxMedium aMedium( aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), StreamMode::READ );
832  SvStream* pStream = aMedium.GetInStream();
833  bool bRet = (pStream && pStream->GetError() == ERRCODE_NONE);
834  if (bRet)
835  {
836  SvStream& rStream = *pStream;
837  // Attention: A common header has to be read
838  sal_uInt16 nVal = 0;
839  rStream.ReadUInt16( nVal );
840  bRet = ERRCODE_NONE == rStream.GetError();
841 
842  if (bRet)
843  {
844  if( nVal == AUTOFORMAT_ID_358 ||
845  (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) )
846  {
847  sal_uInt8 nChrSet, nCnt;
848  sal_uInt64 nPos = rStream.Tell();
849  rStream.ReadUChar( nCnt ).ReadUChar( nChrSet );
850  if( rStream.Tell() != sal_uLong(nPos + nCnt) )
851  {
852  OSL_FAIL( "header contains more/newer data" );
853  rStream.Seek( nPos + nCnt );
854  }
855  rStream.SetStreamCharSet( GetSOLoadTextEncoding( nChrSet ) );
857  }
858 
859  if( nVal == AUTOFORMAT_ID_358 || nVal == AUTOFORMAT_ID_X ||
860  (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) )
861  {
862  m_aVersions.Load( rStream, nVal ); // item versions
863 
864  sal_uInt16 nCnt = 0;
865  rStream.ReadUInt16( nCnt );
866  bRet = (rStream.GetError() == ERRCODE_NONE);
867 
868  // there has to at least be a sal_uInt16 header
869  const size_t nMaxRecords = rStream.remainingSize() / sizeof(sal_uInt16);
870  if (nCnt > nMaxRecords)
871  {
872  SAL_WARN("sc", "Parsing error: " << nMaxRecords <<
873  " max possible entries, but " << nCnt << " claimed, truncating");
874  nCnt = nMaxRecords;
875  }
876 
877  for (sal_uInt16 i=0; bRet && (i < nCnt); i++)
878  {
879  std::unique_ptr<ScAutoFormatData> pData(new ScAutoFormatData());
880  bRet = pData->Load(rStream, m_aVersions);
881  insert(std::move(pData));
882  }
883  }
884  }
885  }
886  mbSaveLater = false;
887 }
888 
890 {
892  SvtPathOptions aPathOpt;
893  aURL.SetSmartURL( aPathOpt.GetUserConfigPath() );
894  aURL.setFinalSlash();
895  aURL.Append(sAutoTblFmtName);
896 
897  SfxMedium aMedium( aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), StreamMode::WRITE );
898  SvStream* pStream = aMedium.GetOutStream();
899  bool bRet = (pStream && pStream->GetError() == ERRCODE_NONE);
900  if (bRet)
901  {
902  const sal_uInt16 fileVersion = SOFFICE_FILEFORMAT_50;
903  SvStream& rStream = *pStream;
904  rStream.SetVersion( fileVersion );
905 
906  // Attention: A common header has to be saved
907  rStream.WriteUInt16( AUTOFORMAT_ID )
908  .WriteUChar( 2 ) // Number of chars of the header including this
910  osl_getThreadTextEncoding() ) );
911  m_aVersions.Write(rStream, fileVersion);
912 
913  bRet &= (rStream.GetError() == ERRCODE_NONE);
914 
915  rStream.WriteUInt16( m_Data.size() - 1 );
916  bRet &= (rStream.GetError() == ERRCODE_NONE);
917  MapType::iterator it = m_Data.begin(), itEnd = m_Data.end();
918  if (it != itEnd)
919  {
920  for (++it; bRet && it != itEnd; ++it) // Skip the first item.
921  {
922  bRet &= it->second->Save(rStream, fileVersion);
923  }
924  }
925 
926  rStream.FlushBuffer();
927 
928  aMedium.Commit();
929  }
930  mbSaveLater = false;
931  return bRet;
932 }
933 
934 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SvStream & WriteBool(bool b)
constexpr TypedWhichId< SvxWeightItem > ATTR_CTL_FONT_WEIGHT(118)
std::unique_ptr< SvxBrushItem > m_aBackground
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
URL aURL
std::unique_ptr< SfxBoolItem > m_aStacked
const SvxRotateModeItem & GetRotateMode() const
static const sal_Int16 VeryThin
SvStream & WriteUInt64(sal_uInt64 nuInt64)
sal_Int32 nIndex
SAL_DLLPRIVATE ScAutoFormatDataField & GetField(sal_uInt16 nIndex)
Definition: autoform.cxx:280
void SetBackground(const SvxBrushItem &rNew)
void Load(SvStream &rStream, rtl_TextEncoding eByteStrSet)
Definition: zforauto.cxx:43
void erase(const iterator &it)
Definition: autoform.cxx:793
std::unique_ptr< SvxPostureItem > m_aCTLPosture
const SfxBoolItem & GetLinebreak() const
void SetOverline(const SvxOverlineItem &rNew)
constexpr TypedWhichId< SvxLanguageItem > ATTR_LANGUAGE_FORMAT(147)
const OUString & GetFamilyName() const
sal_Int32 compareString(const OUString &s1, const OUString &s2) const
OUString ScResId(TranslateId aId)
Definition: scdll.cxx:89
std::unique_ptr< SvxFontHeightItem > m_aHeight
constexpr TypedWhichId< SvxBoxItem > ATTR_BORDER(150)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
void CopyItem(sal_uInt16 nToIndex, sal_uInt16 nFromIndex, sal_uInt16 nWhich)
Definition: autoform.cxx:369
void SetCJKPosture(const SvxPostureItem &rNew)
void SetCJKFont(const SvxFontItem &rNew)
sal_uInt16 nStrResId
Definition: autoform.hxx:115
void SetMargin(const SvxMarginItem &rNew)
bool LoadBlockB(SvStream &rStream, const AutoFormatVersions &rVersions, sal_uInt16 nVer)
#define LANGUAGE_ENGLISH_US
size_t size() const
Definition: autoform.cxx:798
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
bool Save(SvStream &rStream, sal_uInt16 fileVersion)
Definition: autoform.cxx:638
std::unique_ptr< SfxInt32Item > m_aRotateAngle
const OUString & GetStyleName() const
void LoadBlockB(SvStream &rStream, sal_uInt16 nVer)
bool Save(SvStream &rStream, sal_uInt16 fileVersion)
Definition: autoform.cxx:230
std::unique_ptr< SvxFontItem > m_aFont
iterator insert(std::unique_ptr< ScAutoFormatData > pNew)
Definition: autoform.cxx:787
std::size_t size
Definition: autoform.hxx:57
std::unique_ptr< SvxContourItem > m_aContour
std::unique_ptr< sal_Int32[]> pData
const SvxFontHeightItem & GetCTLHeight() const
const SvxShadowedItem & GetShadowed() const
constexpr TypedWhichId< SvxCrossedOutItem > ATTR_FONT_CROSSEDOUT(106)
void Save(SvStream &rStream, rtl_TextEncoding eByteStrSet) const
Definition: zforauto.cxx:54
sal_uIntPtr sal_uLong
constexpr TypedWhichId< SvxRotateModeItem > ATTR_ROTATE_MODE(136)
const sal_uInt16 AUTOFORMAT_ID_358
Definition: autoform.cxx:72
SvStream & ReadCharAsBool(bool &rBool)
SVX_ROTATE_MODE_STANDARD
void SetSaveLater(bool bSet)
Definition: autoform.cxx:757
const SvxWeightItem & GetCTLWeight() const
const SvxFontItem & GetCTLFont() const
sal_uInt64 Seek(sal_uInt64 nPos)
std::unique_ptr< SvxFontHeightItem > m_aCJKHeight
bool SaveBlockB(SvStream &rStream, sal_uInt16 fileVersion) const
static void WriteBlockB(SvStream &rStream, sal_uInt16 fileVersion)
constexpr TypedWhichId< SvxFontItem > ATTR_FONT(100)
constexpr TypedWhichId< ScLineBreakCell > ATTR_LINEBREAK(139)
void SetContour(const SvxContourItem &rNew)
ScAfVersions m_aVersions
Definition: autoform.hxx:184
const SvxBrushItem & GetBackground() const
void SetCTLPosture(const SvxPostureItem &rNew)
rtl_TextEncoding GetSOStoreTextEncoding(rtl_TextEncoding eEncoding)
SvStream & ReadUInt64(sal_uInt64 &rUInt64)
const SvxPostureItem & GetCTLPosture() const
void SetCTLWeight(const SvxWeightItem &rNew)
bool Load(SvStream &rStream, const ScAfVersions &rVersions)
Definition: autoform.cxx:592
const SfxBoolItem & GetStacked() const
const SvxWeightItem & GetCJKWeight() const
static void WriteBlockA(SvStream &rStream, sal_uInt16 fileVersion)
FontFamily GetFamilyType()
bool IsEqualData(sal_uInt16 nIndex1, sal_uInt16 nIndex2) const
Definition: autoform.cxx:381
bool mbSaveLater
Definition: autoform.hxx:183
std::unique_ptr< SvxUnderlineItem > m_aUnderline
std::unique_ptr< SvxShadowedItem > m_aShadowed
constexpr TypedWhichId< ScRotateValueItem > ATTR_ROTATE_VALUE(135)
const SvxFontItem & GetFont() const
AutoFormatSwBlob m_swFields
Definition: autoform.hxx:88
std::unique_ptr< SvxOverlineItem > m_aOverline
void FillToItemSet(sal_uInt16 nIndex, SfxItemSet &rItemSet, const ScDocument &rDoc) const
Definition: autoform.cxx:440
void SetHeight(const SvxFontHeightItem &rNew)
bool setFinalSlash()
ErrCode GetError() const
LINESTYLE_NONE
void SetUnderline(const SvxUnderlineItem &rNew)
bool LoadBlockA(SvStream &rStream, const AutoFormatVersions &rVersions, sal_uInt16 nVer)
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOUString(SvStream &rStrm, std::u16string_view rStr, rtl_TextEncoding eEnc)
std::unique_ptr< SvxPostureItem > m_aCJKPosture
std::unique_ptr< SvxCrossedOutItem > m_aCrossedOut
std::unique_ptr< SvxHorJustifyItem > m_aHorJustify
void SetCJKWeight(const SvxWeightItem &rNew)
std::unique_ptr< SvxMarginItem > m_aMargin
OUString SvxResId(TranslateId aId)
ScNumFormatAbbrev aNumFormat
Definition: autoform.hxx:91
const SvxUnderlineItem & GetUnderline() const
MapType::iterator iterator
Definition: autoform.hxx:191
std::array< std::unique_ptr< ScAutoFormatDataField >, 16 > ppDataField
Definition: autoform.hxx:129
AutoFormatSwBlob swVersions
Definition: autoform.hxx:76
void SetLinebreak(const SfxBoolItem &rNew)
void SetTLBR(const SvxLineItem &rNew)
sal_uInt16 nNumFormatVersion
const SvxWeightItem & GetWeight() const
std::unique_ptr< SfxBoolItem > m_aLinebreak
sal_uInt64 remainingSize()
const_iterator begin() const
Definition: autoform.cxx:803
void FlushBuffer()
constexpr TypedWhichId< SvxUnderlineItem > ATTR_FONT_UNDERLINE(104)
const OUString & GetStyleName() const
void SetVerJustify(const SvxVerJustifyItem &rNew)
bool bIncludeValueFormat
Definition: autoform.hxx:123
const sal_uInt16 AUTOFORMAT_DATA_ID_552
Definition: autoform.cxx:80
#define SAL_N_ELEMENTS(arr)
void SetShadowed(const SvxShadowedItem &rNew)
AutoFormatSwBlob m_swFields
Definition: autoform.hxx:127
const SvxContourItem & GetContour() const
constexpr TypedWhichId< SvxLineItem > ATTR_BORDER_TLBR(141)
std::unique_ptr< sal_uInt8[]> pData
Definition: autoform.hxx:56
void SetCrossedOut(const SvxCrossedOutItem &rNew)
bool bIncludeBackground
Definition: autoform.hxx:120
bool bIncludeWidthHeight
Definition: autoform.hxx:124
constexpr TypedWhichId< SvxPostureItem > ATTR_FONT_POSTURE(103)
SC_DLLPUBLIC SvNumberFormatter * GetFormatTable() const
Definition: documen2.cxx:442
const ScNumFormatAbbrev & GetNumFormat(sal_uInt16 nIndex) const
Definition: autoform.cxx:376
const sal_uInt16 AUTOFORMAT_DATA_ID_504
Definition: autoform.cxx:78
Contains all items for one cell of a table autoformat.
Definition: autoform.hxx:85
constexpr TypedWhichId< SvxShadowedItem > ATTR_FONT_SHADOWED(108)
#define SOFFICE_FILEFORMAT_50
LanguageType GetLanguage() const
Definition: zforauto.hxx:46
const OUString & GetUserConfigPath() const
OUString read_uInt16_lenPrefixed_uInt8s_ToOUString(SvStream &rStrm, rtl_TextEncoding eEnc)
FontPitch GetPitch()
constexpr TypedWhichId< SvxFontHeightItem > ATTR_CJK_FONT_HEIGHT(112)
void SetWeight(const SvxWeightItem &rNew)
int i
T & StaticWhichCast(TypedWhichId< T > nId)
const SvxFontHeightItem & GetCJKHeight() const
void SetBox(const SvxBoxItem &rNew)
constexpr OUStringLiteral sAutoTblFmtName
Definition: autoform.cxx:68
void LoadBlockA(SvStream &rStream, sal_uInt16 nVer)
void SetBLTR(const SvxLineItem &rNew)
const ScNumFormatAbbrev & GetNumFormat() const
Definition: autoform.hxx:102
std::unique_ptr< SvxLineItem > m_aTLBR
std::unique_ptr< SvxBoxItem > m_aBox
constexpr TypedWhichId< SvxVerJustifyItem > ATTR_VER_JUSTIFY(132)
void SetRotateMode(const SvxRotateModeItem &rNew)
std::unique_ptr< SvxVerJustifyItem > m_aVerJustify
std::unique_ptr< SvxWeightItem > m_aCTLWeight
const sal_uInt16 AUTOFORMAT_ID_680DR25
Definition: autoform.cxx:83
void SetCTLHeight(const SvxFontHeightItem &rNew)
A binary blob of writer-specific data.
Definition: autoform.hxx:54
void SetCJKHeight(const SvxFontHeightItem &rNew)
const sal_uInt16 AUTOFORMAT_DATA_ID_31005
Definition: autoform.cxx:87
const sal_uInt16 AUTOFORMAT_ID_X
Definition: autoform.cxx:71
std::size_t WriteBytes(const void *pData, std::size_t nSize)
WEIGHT_NORMAL
float u
std::unique_ptr< SvxAdjustItem > m_aAdjust
OUString aName
Definition: autoform.hxx:114
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALUE_FORMAT(146)
void PutItem(sal_uInt16 nIndex, const SfxPoolItem &rItem)
Definition: autoform.cxx:332
XclImpStream & operator>>(XclImpStream &rStrm, XclImpDffPropSet &rPropSet)
Definition: xiescher.cxx:4446
void SetNumFormat(const ScNumFormatAbbrev &rNumFormat)
Definition: autoform.hxx:105
bool SaveBlockA(SvStream &rStream, sal_uInt16 fileVersion) const
const ScAutoFormatData * findByIndex(size_t nIndex) const
Definition: autoform.cxx:762
void SetHorJustify(const SvxHorJustifyItem &rNew)
constexpr TypedWhichId< ScVerticalStackCell > ATTR_STACKED(134)
SvStream & ReadUChar(unsigned char &rChar)
std::unique_ptr< SvxFontItem > m_aCTLFont
ITALIC_NONE
void SetVersion(sal_Int32 n)
constexpr TypedWhichId< SvxFontHeightItem > ATTR_CTL_FONT_HEIGHT(117)
constexpr TypedWhichId< SvxFontItem > ATTR_CTL_FONT(116)
rtl_TextEncoding GetSOLoadTextEncoding(rtl_TextEncoding eEncoding)
const SvxPostureItem & GetCJKPosture() const
bool Save()
Definition: autoform.cxx:889
std::unique_ptr< SvxPostureItem > m_aPosture
void SetFont(const SvxFontItem &rNew)
Reference< XOutputStream > stream
const SvxVerJustifyItem & GetVerJustify() const
std::size_t ReadBytes(void *pData, std::size_t nSize)
constexpr TypedWhichId< SvxFontItem > ATTR_CJK_FONT(111)
constexpr TypedWhichId< SvxBrushItem > ATTR_BACKGROUND(148)
const sal_uInt16 AUTOFORMAT_ID
Definition: autoform.cxx:90
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
MapType m_Data
Definition: autoform.hxx:182
iterator find(const OUString &rName)
Definition: autoform.cxx:782
void SetStacked(const SfxBoolItem &rNew)
void Load()
Definition: autoform.cxx:823
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SvxHorJustifyItem & GetHorJustify() const
const_iterator end() const
Definition: autoform.cxx:808
const SvxCrossedOutItem & GetCrossedOut() const
void GetFromItemSet(sal_uInt16 nIndex, const SfxItemSet &rItemSet, const ScNumFormatAbbrev &rNumFormat)
Definition: autoform.cxx:527
const SfxPoolItem * GetItem(sal_uInt16 nIndex, sal_uInt16 nWhich) const
Definition: autoform.cxx:294
void SetRotateAngle(const SfxInt32Item &rNew)
constexpr TypedWhichId< SvxPostureItem > ATTR_CTL_FONT_POSTURE(119)
sal_uInt32 GetFormatIndex(SvNumberFormatter &rFormatter)
Definition: zforauto.cxx:79
const sal_uInt16 AUTOFORMAT_ID_504
Definition: autoform.cxx:77
const SvxLineItem & GetBLTR() const
#define SOFFICE_FILEFORMAT_40
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
void Load(SvStream &rStream, sal_uInt16 nVer)
Definition: autoform.cxx:133
#define ERRCODE_NONE
const SvxOverlineItem & GetOverline() const
constexpr TypedWhichId< SvxOverlineItem > ATTR_FONT_OVERLINE(105)
static SC_DLLPUBLIC CollatorWrapper & GetCollator()
case-insensitive collator
Definition: global.cxx:1044
const SvxLineItem & GetTLBR() const
unsigned char sal_uInt8
std::unique_ptr< SvxRotateModeItem > m_aRotateMode
std::unique_ptr< SvxLineItem > m_aBLTR
std::unique_ptr< SvxFontItem > m_aCJKFont
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
OUString aName
SvStream & WriteUChar(unsigned char nChar)
constexpr TypedWhichId< SvxPostureItem > ATTR_CJK_FONT_POSTURE(114)
MapType::const_iterator const_iterator
Definition: autoform.hxx:190
void SetStreamCharSet(rtl_TextEncoding eCharSet)
rtl_TextEncoding GetStreamCharSet() const
constexpr TypedWhichId< SvxWeightItem > ATTR_FONT_WEIGHT(102)
constexpr TypedWhichId< SvxHorJustifyItem > ATTR_HOR_JUSTIFY(129)
const SvxFontItem & GetCJKFont() const
sal_uInt64 Tell() const
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
bool Append(std::u16string_view rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
std::unique_ptr< SvxColorItem > m_aColor
bool operator()(const OUString &left, const OUString &right) const
Definition: autoform.cxx:745
Struct with version numbers of the Items.
Definition: autoform.hxx:73
void SetValue(sal_uInt32 nTheValue)
std::unique_ptr< SvxWeightItem > m_aCJKWeight
const sal_uInt16 AUTOFORMAT_DATA_ID_X
Definition: autoform.cxx:73
std::unique_ptr< SvxWeightItem > m_aWeight
void SetPosture(const SvxPostureItem &rNew)
#define SAL_WARN(area, stream)
constexpr::Color COL_BLUE(0x00, 0x00, 0x80)
const SvxMarginItem & GetMargin() const
STRIKEOUT_NONE
static SC_DLLPUBLIC::utl::TransliterationWrapper & GetTransliteration()
Definition: global.cxx:975
const SvxPostureItem & GetPosture() const
const SvxColorItem & GetColor() const
const sal_uInt16 AUTOFORMAT_DATA_ID
Definition: autoform.cxx:91
void SetCTLFont(const SvxFontItem &rNew)
std::unique_ptr< SvxFontHeightItem > m_aCTLHeight
constexpr TypedWhichId< SvxColorItem > ATTR_FONT_COLOR(109)
constexpr TypedWhichId< SvxWeightItem > ATTR_CJK_FONT_WEIGHT(113)
constexpr TypedWhichId< SvxFontHeightItem > ATTR_FONT_HEIGHT(101)
constexpr TypedWhichId< SvxLineItem > ATTR_BORDER_BLTR(142)
constexpr TypedWhichId< SvxContourItem > ATTR_FONT_CONTOUR(107)
sal_uInt16 Which() const
void Write(SvStream &rStream, sal_uInt16 fileVersion)
Definition: autoform.cxx:143
const SvxBoxItem & GetBox() const
const SvxFontHeightItem & GetHeight() const
bool Load(SvStream &rStream, const ScAfVersions &rVersions, sal_uInt16 nVer)
Definition: autoform.cxx:203
rtl_TextEncoding GetCharSet() const
const TranslateId RID_SVXSTR_TBLAFMT[]
Definition: autoform.cxx:562
const sal_uInt16 AUTOFORMAT_ID_31005
Definition: autoform.cxx:86
sal_uInt16 nPos
constexpr TypedWhichId< SvxMarginItem > ATTR_MARGIN(143)
bool SetSmartURL(OUString const &rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)
const SfxInt32Item & GetRotateAngle() const
void SetColor(const SvxColorItem &rNew)
OUString ReadUniOrByteString(rtl_TextEncoding eSrcCharSet)
void SetLine(const editeng::SvxBorderLine *pNew, SvxBoxItemLine nLine)