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 :
20 : #include <com/sun/star/util/CellProtection.hpp>
21 : #include <com/sun/star/util/XProtectable.hpp>
22 : #include <com/sun/star/text/XText.hpp>
23 : #include <com/sun/star/beans/XPropertySet.hpp>
24 :
25 : #include "scitems.hxx"
26 : #include <editeng/eeitem.hxx>
27 :
28 : #include <editeng/boxitem.hxx>
29 : #include <editeng/editdata.hxx>
30 : #include <editeng/editeng.hxx>
31 : #include <editeng/editobj.hxx>
32 : #include <editeng/flditem.hxx>
33 :
34 : #include "attrib.hxx"
35 : #include "global.hxx"
36 : #include "editutil.hxx"
37 : #include "sc.hrc"
38 : #include "globstr.hrc"
39 :
40 : #include "textuno.hxx"
41 :
42 : using namespace com::sun::star;
43 :
44 4116 : TYPEINIT1(ScMergeAttr, SfxPoolItem);
45 4389 : TYPEINIT1_AUTOFACTORY(ScProtectionAttr, SfxPoolItem);
46 11781 : TYPEINIT1(ScRangeItem, SfxPoolItem);
47 3927 : TYPEINIT1(ScTableListItem, SfxPoolItem);
48 20018 : TYPEINIT1(ScPageHFItem, SfxPoolItem);
49 11784 : TYPEINIT1(ScViewObjectModeItem, SfxEnumItem);
50 52 : TYPEINIT1(ScDoubleItem, SfxPoolItem);
51 3927 : TYPEINIT1(ScPageScaleToItem, SfxPoolItem);
52 12532 : TYPEINIT1(ScCondFormatItem, SfxPoolItem);
53 :
54 : /**
55 : * General Help Function
56 : */
57 1015 : bool ScHasPriority( const ::editeng::SvxBorderLine* pThis, const ::editeng::SvxBorderLine* pOther )
58 : {
59 :
60 1015 : if (!pThis)
61 947 : return false;
62 68 : if (!pOther)
63 68 : return true;
64 :
65 0 : sal_uInt16 nThisSize = pThis->GetScaledWidth();
66 0 : sal_uInt16 nOtherSize = pOther->GetScaledWidth();
67 :
68 0 : if (nThisSize > nOtherSize)
69 0 : return true;
70 0 : else if (nThisSize < nOtherSize)
71 0 : return false;
72 : else
73 : {
74 0 : if ( pOther->GetInWidth() && !pThis->GetInWidth() )
75 0 : return true;
76 0 : else if ( pThis->GetInWidth() && !pOther->GetInWidth() )
77 0 : return false;
78 : else
79 : {
80 0 : return true; // FIXME: What is this?
81 : }
82 : }
83 : }
84 :
85 : /** Item - Implementations */
86 :
87 : /**
88 : * Merge
89 : */
90 1378 : ScMergeAttr::ScMergeAttr():
91 : SfxPoolItem(ATTR_MERGE),
92 : nColMerge(0),
93 1378 : nRowMerge(0)
94 1378 : {}
95 :
96 742 : ScMergeAttr::ScMergeAttr( SCsCOL nCol, SCsROW nRow):
97 : SfxPoolItem(ATTR_MERGE),
98 : nColMerge(nCol),
99 742 : nRowMerge(nRow)
100 742 : {}
101 :
102 51 : ScMergeAttr::ScMergeAttr(const ScMergeAttr& rItem):
103 51 : SfxPoolItem(ATTR_MERGE)
104 : {
105 51 : nColMerge = rItem.nColMerge;
106 51 : nRowMerge = rItem.nRowMerge;
107 51 : }
108 :
109 3462 : ScMergeAttr::~ScMergeAttr()
110 : {
111 3462 : }
112 :
113 2300 : bool ScMergeAttr::operator==( const SfxPoolItem& rItem ) const
114 : {
115 : OSL_ENSURE( Which() != rItem.Which() || Type() == rItem.Type(), "which ==, type !=" );
116 2300 : return (Which() == rItem.Which())
117 2300 : && (nColMerge == static_cast<const ScMergeAttr&>(rItem).nColMerge)
118 4147 : && (nRowMerge == static_cast<const ScMergeAttr&>(rItem).nRowMerge);
119 : }
120 :
121 51 : SfxPoolItem* ScMergeAttr::Clone( SfxItemPool * ) const
122 : {
123 51 : return new ScMergeAttr(*this);
124 : }
125 :
126 0 : SfxPoolItem* ScMergeAttr::Create( SvStream& rStream, sal_uInt16 /* nVer */ ) const
127 : {
128 : sal_Int16 nCol;
129 : sal_Int16 nRow;
130 0 : rStream.ReadInt16( nCol );
131 0 : rStream.ReadInt16( nRow );
132 0 : return new ScMergeAttr(static_cast<SCCOL>(nCol),static_cast<SCROW>(nRow));
133 : }
134 :
135 : /**
136 : * MergeFlag
137 : */
138 1378 : ScMergeFlagAttr::ScMergeFlagAttr():
139 1378 : SfxInt16Item(ATTR_MERGE_FLAG, 0)
140 : {
141 1378 : }
142 :
143 8231 : ScMergeFlagAttr::ScMergeFlagAttr(sal_Int16 nFlags):
144 8231 : SfxInt16Item(ATTR_MERGE_FLAG, nFlags)
145 : {
146 8231 : }
147 :
148 11615 : ScMergeFlagAttr::~ScMergeFlagAttr()
149 : {
150 11615 : }
151 :
152 386 : SfxPoolItem * ScMergeFlagAttr::Clone(SfxItemPool *) const
153 : {
154 386 : return new ScMergeFlagAttr(*this);
155 : }
156 :
157 28 : bool ScMergeFlagAttr::HasPivotButton() const
158 : {
159 28 : return (GetValue() & SC_MF_BUTTON) != 0;
160 : }
161 :
162 0 : bool ScMergeFlagAttr::HasPivotPopupButton() const
163 : {
164 0 : return (GetValue() & SC_MF_BUTTON_POPUP) != 0;
165 : }
166 :
167 : /**
168 : * Protection
169 : */
170 1385 : ScProtectionAttr::ScProtectionAttr():
171 : SfxPoolItem(ATTR_PROTECTION),
172 : bProtection(true),
173 : bHideFormula(false),
174 : bHideCell(false),
175 1385 : bHidePrint(false)
176 : {
177 1385 : }
178 :
179 318 : ScProtectionAttr::ScProtectionAttr( bool bProtect, bool bHFormula,
180 : bool bHCell, bool bHPrint):
181 : SfxPoolItem(ATTR_PROTECTION),
182 : bProtection(bProtect),
183 : bHideFormula(bHFormula),
184 : bHideCell(bHCell),
185 318 : bHidePrint(bHPrint)
186 : {
187 318 : }
188 :
189 45 : ScProtectionAttr::ScProtectionAttr(const ScProtectionAttr& rItem):
190 45 : SfxPoolItem(ATTR_PROTECTION)
191 : {
192 45 : bProtection = rItem.bProtection;
193 45 : bHideFormula = rItem.bHideFormula;
194 45 : bHideCell = rItem.bHideCell;
195 45 : bHidePrint = rItem.bHidePrint;
196 45 : }
197 :
198 3035 : ScProtectionAttr::~ScProtectionAttr()
199 : {
200 3035 : }
201 :
202 20 : bool ScProtectionAttr::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
203 : {
204 20 : nMemberId &= ~CONVERT_TWIPS;
205 20 : switch ( nMemberId )
206 : {
207 : case 0 :
208 : {
209 20 : util::CellProtection aProtection;
210 20 : aProtection.IsLocked = bProtection;
211 20 : aProtection.IsFormulaHidden = bHideFormula;
212 20 : aProtection.IsHidden = bHideCell;
213 20 : aProtection.IsPrintHidden = bHidePrint;
214 20 : rVal <<= aProtection;
215 20 : break;
216 : }
217 : case MID_1 :
218 0 : rVal <<= bProtection; break;
219 : case MID_2 :
220 0 : rVal <<= bHideFormula; break;
221 : case MID_3 :
222 0 : rVal <<= bHideCell; break;
223 : case MID_4 :
224 0 : rVal <<= bHidePrint; break;
225 : default:
226 : OSL_FAIL("Wrong MemberID!");
227 0 : return false;
228 : }
229 :
230 20 : return true;
231 : }
232 :
233 13 : bool ScProtectionAttr::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
234 : {
235 13 : bool bRet = false;
236 13 : bool bVal = false;
237 13 : nMemberId &= ~CONVERT_TWIPS;
238 13 : switch ( nMemberId )
239 : {
240 : case 0 :
241 : {
242 13 : util::CellProtection aProtection;
243 13 : if ( rVal >>= aProtection )
244 : {
245 13 : bProtection = aProtection.IsLocked;
246 13 : bHideFormula = aProtection.IsFormulaHidden;
247 13 : bHideCell = aProtection.IsHidden;
248 13 : bHidePrint = aProtection.IsPrintHidden;
249 13 : bRet = true;
250 : }
251 : else
252 : {
253 : OSL_FAIL("exception - wrong argument");
254 : }
255 13 : break;
256 : }
257 : case MID_1 :
258 0 : bRet = (rVal >>= bVal); if (bRet) bProtection=bVal; break;
259 : case MID_2 :
260 0 : bRet = (rVal >>= bVal); if (bRet) bHideFormula=bVal; break;
261 : case MID_3 :
262 0 : bRet = (rVal >>= bVal); if (bRet) bHideCell=bVal; break;
263 : case MID_4 :
264 0 : bRet = (rVal >>= bVal); if (bRet) bHidePrint=bVal; break;
265 : default:
266 : OSL_FAIL("Wrong MemberID!");
267 : }
268 :
269 13 : return bRet;
270 : }
271 :
272 0 : OUString ScProtectionAttr::GetValueText() const
273 : {
274 0 : const OUString aStrYes ( ScGlobal::GetRscString(STR_YES) );
275 0 : const OUString aStrNo ( ScGlobal::GetRscString(STR_NO) );
276 :
277 : const OUString aValue = "("
278 0 : + (bProtection ? aStrYes : aStrNo)
279 0 : + ","
280 0 : + (bHideFormula ? aStrYes : aStrNo)
281 0 : + ","
282 0 : + (bHideCell ? aStrYes : aStrNo)
283 0 : + ","
284 0 : + (bHidePrint ? aStrYes : aStrNo)
285 0 : + ")";
286 :
287 0 : return aValue;
288 : }
289 :
290 0 : bool ScProtectionAttr::GetPresentation
291 : (
292 : SfxItemPresentation ePres,
293 : SfxMapUnit /* eCoreMetric */,
294 : SfxMapUnit /* ePresMetric */,
295 : OUString& rText,
296 : const IntlWrapper* /* pIntl */
297 : ) const
298 : {
299 0 : const OUString aStrYes ( ScGlobal::GetRscString(STR_YES) );
300 0 : const OUString aStrNo ( ScGlobal::GetRscString(STR_NO) );
301 :
302 0 : switch ( ePres )
303 : {
304 : case SFX_ITEM_PRESENTATION_NAMELESS:
305 0 : rText = GetValueText();
306 0 : break;
307 :
308 : case SFX_ITEM_PRESENTATION_COMPLETE:
309 0 : rText = ScGlobal::GetRscString(STR_PROTECTION)
310 0 : + ": "
311 0 : + (bProtection ? aStrYes : aStrNo)
312 0 : + ", "
313 0 : + ScGlobal::GetRscString(STR_FORMULAS)
314 0 : + ": "
315 0 : + (!bHideFormula ? aStrYes : aStrNo)
316 0 : + ", "
317 0 : + ScGlobal::GetRscString(STR_HIDE)
318 0 : + ": "
319 0 : + (bHideCell ? aStrYes : aStrNo)
320 0 : + ", "
321 0 : + ScGlobal::GetRscString(STR_PRINT)
322 0 : + ": "
323 0 : + (!bHidePrint ? aStrYes : aStrNo);
324 0 : break;
325 :
326 0 : default: break;
327 : }
328 :
329 0 : return true;
330 : }
331 :
332 315 : bool ScProtectionAttr::operator==( const SfxPoolItem& rItem ) const
333 : {
334 : OSL_ENSURE( Which() != rItem.Which() || Type() == rItem.Type(), "which ==, type !=" );
335 315 : return (Which() == rItem.Which())
336 315 : && (bProtection == static_cast<const ScProtectionAttr&>(rItem).bProtection)
337 302 : && (bHideFormula == static_cast<const ScProtectionAttr&>(rItem).bHideFormula)
338 302 : && (bHideCell == static_cast<const ScProtectionAttr&>(rItem).bHideCell)
339 617 : && (bHidePrint == static_cast<const ScProtectionAttr&>(rItem).bHidePrint);
340 : }
341 :
342 45 : SfxPoolItem* ScProtectionAttr::Clone( SfxItemPool * ) const
343 : {
344 45 : return new ScProtectionAttr(*this);
345 : }
346 :
347 0 : SfxPoolItem* ScProtectionAttr::Create( SvStream& rStream, sal_uInt16 /* n */ ) const
348 : {
349 : bool bProtect;
350 : bool bHFormula;
351 : bool bHCell;
352 : bool bHPrint;
353 :
354 0 : rStream.ReadCharAsBool( bProtect );
355 0 : rStream.ReadCharAsBool( bHFormula );
356 0 : rStream.ReadCharAsBool( bHCell );
357 0 : rStream.ReadCharAsBool( bHPrint );
358 :
359 0 : return new ScProtectionAttr(bProtect,bHFormula,bHCell,bHPrint);
360 : }
361 :
362 7 : bool ScProtectionAttr::SetProtection( bool bProtect)
363 : {
364 7 : bProtection = bProtect;
365 7 : return true;
366 : }
367 :
368 0 : bool ScProtectionAttr::SetHideFormula( bool bHFormula)
369 : {
370 0 : bHideFormula = bHFormula;
371 0 : return true;
372 : }
373 :
374 0 : bool ScProtectionAttr::SetHideCell( bool bHCell)
375 : {
376 0 : bHideCell = bHCell;
377 0 : return true;
378 : }
379 :
380 0 : bool ScProtectionAttr::SetHidePrint( bool bHPrint)
381 : {
382 0 : bHidePrint = bHPrint;
383 0 : return true;
384 : }
385 :
386 : /**
387 : * ScRangeItem - Table range
388 : */
389 0 : bool ScRangeItem::operator==( const SfxPoolItem& rAttr ) const
390 : {
391 : assert(SfxPoolItem::operator==(rAttr));
392 :
393 0 : return aRange == static_cast<const ScRangeItem&>(rAttr).aRange;
394 : }
395 :
396 0 : SfxPoolItem* ScRangeItem::Clone( SfxItemPool* ) const
397 : {
398 0 : return new ScRangeItem( *this );
399 : }
400 :
401 0 : bool ScRangeItem::GetPresentation
402 : (
403 : SfxItemPresentation ePres,
404 : SfxMapUnit /* eCoreUnit */,
405 : SfxMapUnit /* ePresUnit */,
406 : OUString& rText,
407 : const IntlWrapper* /* pIntl */
408 : ) const
409 : {
410 0 : rText.clear();
411 :
412 0 : switch ( ePres )
413 : {
414 : case SFX_ITEM_PRESENTATION_COMPLETE:
415 0 : rText = ScGlobal::GetRscString(STR_AREA) + ": ";
416 : /* !!! fall-through !!! */
417 :
418 : case SFX_ITEM_PRESENTATION_NAMELESS:
419 : {
420 : /* Always use OOo:A1 format */
421 0 : rText += aRange.Format();
422 : }
423 0 : break;
424 :
425 : default:
426 : {
427 : // added to avoid warnings
428 : }
429 : }
430 :
431 0 : return true;
432 : }
433 :
434 : /**
435 : * ScTableListItem - List from Tables (-numbers)
436 : */
437 0 : ScTableListItem::ScTableListItem( const ScTableListItem& rCpy )
438 0 : : SfxPoolItem ( rCpy.Which() ),
439 0 : nCount ( rCpy.nCount )
440 : {
441 0 : if ( nCount > 0 )
442 : {
443 0 : pTabArr = new SCTAB [nCount];
444 :
445 0 : for ( sal_uInt16 i=0; i<nCount; i++ )
446 0 : pTabArr[i] = rCpy.pTabArr[i];
447 : }
448 : else
449 0 : pTabArr = NULL;
450 0 : }
451 :
452 3927 : ScTableListItem::~ScTableListItem()
453 : {
454 1309 : delete [] pTabArr;
455 2618 : }
456 :
457 0 : ScTableListItem& ScTableListItem::operator=( const ScTableListItem& rCpy )
458 : {
459 0 : delete [] pTabArr;
460 :
461 0 : if ( rCpy.nCount > 0 )
462 : {
463 0 : pTabArr = new SCTAB [rCpy.nCount];
464 0 : for ( sal_uInt16 i=0; i<rCpy.nCount; i++ )
465 0 : pTabArr[i] = rCpy.pTabArr[i];
466 : }
467 : else
468 0 : pTabArr = NULL;
469 :
470 0 : nCount = rCpy.nCount;
471 :
472 0 : return *this;
473 : }
474 :
475 0 : bool ScTableListItem::operator==( const SfxPoolItem& rAttr ) const
476 : {
477 : assert(SfxPoolItem::operator==(rAttr));
478 :
479 0 : const ScTableListItem& rCmp = static_cast<const ScTableListItem&>(rAttr);
480 0 : bool bEqual = (nCount == rCmp.nCount);
481 :
482 0 : if ( nCount > 0 )
483 : {
484 0 : sal_uInt16 i=0;
485 :
486 0 : bEqual = ( pTabArr && rCmp.pTabArr );
487 :
488 0 : while ( bEqual && i<nCount )
489 : {
490 0 : bEqual = ( pTabArr[i] == rCmp.pTabArr[i] );
491 0 : i++;
492 : }
493 : }
494 0 : return bEqual;
495 : }
496 :
497 0 : SfxPoolItem* ScTableListItem::Clone( SfxItemPool* ) const
498 : {
499 0 : return new ScTableListItem( *this );
500 : }
501 :
502 0 : bool ScTableListItem::GetPresentation
503 : (
504 : SfxItemPresentation ePres,
505 : SfxMapUnit /* eCoreUnit */,
506 : SfxMapUnit /* ePresUnit */,
507 : OUString& rText,
508 : const IntlWrapper* /* pIntl */
509 : ) const
510 : {
511 0 : switch ( ePres )
512 : {
513 : case SFX_ITEM_PRESENTATION_NAMELESS:
514 : {
515 0 : rText = "(";
516 0 : if ( nCount>0 && pTabArr )
517 0 : for ( sal_uInt16 i=0; i<nCount; i++ )
518 : {
519 0 : rText += OUString::number( pTabArr[i] );
520 0 : if ( i<(nCount-1) )
521 0 : rText += ",";
522 : }
523 0 : rText += ")";
524 : }
525 0 : return true;
526 :
527 : case SFX_ITEM_PRESENTATION_COMPLETE:
528 0 : rText.clear();
529 0 : return false;
530 :
531 : default:
532 : {
533 : // added to avoid warnings
534 : }
535 : }
536 :
537 0 : return false;
538 : }
539 :
540 : /**
541 : * ScPageHFItem - Dates from the Head and Foot lines
542 : */
543 6874 : ScPageHFItem::ScPageHFItem( sal_uInt16 nWhichP )
544 : : SfxPoolItem ( nWhichP ),
545 : pLeftArea ( NULL ),
546 : pCenterArea ( NULL ),
547 6874 : pRightArea ( NULL )
548 : {
549 6874 : }
550 :
551 8759 : ScPageHFItem::ScPageHFItem( const ScPageHFItem& rItem )
552 : : SfxPoolItem ( rItem ),
553 : pLeftArea ( NULL ),
554 : pCenterArea ( NULL ),
555 8759 : pRightArea ( NULL )
556 : {
557 8759 : if ( rItem.pLeftArea )
558 3637 : pLeftArea = rItem.pLeftArea->Clone();
559 8759 : if ( rItem.pCenterArea )
560 3729 : pCenterArea = rItem.pCenterArea->Clone();
561 8759 : if ( rItem.pRightArea )
562 3637 : pRightArea = rItem.pRightArea->Clone();
563 8759 : }
564 :
565 45789 : ScPageHFItem::~ScPageHFItem()
566 : {
567 15311 : delete pLeftArea;
568 15311 : delete pCenterArea;
569 15311 : delete pRightArea;
570 30478 : }
571 :
572 2167 : bool ScPageHFItem::QueryValue( uno::Any& rVal, sal_uInt8 /* nMemberId */ ) const
573 : {
574 : uno::Reference<sheet::XHeaderFooterContent> xContent =
575 2167 : new ScHeaderFooterContentObj( pLeftArea, pCenterArea, pRightArea );
576 :
577 2167 : rVal <<= xContent;
578 2167 : return true;
579 : }
580 :
581 1674 : bool ScPageHFItem::PutValue( const uno::Any& rVal, sal_uInt8 /* nMemberId */ )
582 : {
583 1674 : bool bRet = false;
584 1674 : uno::Reference<sheet::XHeaderFooterContent> xContent;
585 1674 : if ( rVal >>= xContent )
586 : {
587 1674 : if ( xContent.is() )
588 : {
589 : rtl::Reference<ScHeaderFooterContentObj> pImp =
590 1674 : ScHeaderFooterContentObj::getImplementation( xContent );
591 1674 : if (pImp.is())
592 : {
593 1674 : const EditTextObject* pImpLeft = pImp->GetLeftEditObject();
594 1674 : delete pLeftArea;
595 1674 : pLeftArea = pImpLeft ? pImpLeft->Clone() : NULL;
596 :
597 1674 : const EditTextObject* pImpCenter = pImp->GetCenterEditObject();
598 1674 : delete pCenterArea;
599 1674 : pCenterArea = pImpCenter ? pImpCenter->Clone() : NULL;
600 :
601 1674 : const EditTextObject* pImpRight = pImp->GetRightEditObject();
602 1674 : delete pRightArea;
603 1674 : pRightArea = pImpRight ? pImpRight->Clone() : NULL;
604 :
605 1674 : if ( !pLeftArea || !pCenterArea || !pRightArea )
606 : {
607 : // no Text with Null are left
608 86 : ScEditEngineDefaulter aEngine( EditEngine::CreatePool(), true );
609 86 : if (!pLeftArea)
610 86 : pLeftArea = aEngine.CreateTextObject();
611 86 : if (!pCenterArea)
612 0 : pCenterArea = aEngine.CreateTextObject();
613 86 : if (!pRightArea)
614 86 : pRightArea = aEngine.CreateTextObject();
615 : }
616 :
617 1674 : bRet = true;
618 1674 : }
619 : }
620 : }
621 :
622 1674 : if (!bRet)
623 : {
624 : OSL_FAIL("exception - wrong argument");
625 : }
626 :
627 1674 : return true;
628 : }
629 :
630 10279 : bool ScPageHFItem::operator==( const SfxPoolItem& rItem ) const
631 : {
632 : assert(SfxPoolItem::operator==(rItem));
633 :
634 10279 : const ScPageHFItem& r = static_cast<const ScPageHFItem&>(rItem);
635 :
636 10279 : return ScGlobal::EETextObjEqual(pLeftArea, r.pLeftArea)
637 2003 : && ScGlobal::EETextObjEqual(pCenterArea, r.pCenterArea)
638 10840 : && ScGlobal::EETextObjEqual(pRightArea, r.pRightArea);
639 : }
640 :
641 8759 : SfxPoolItem* ScPageHFItem::Clone( SfxItemPool* ) const
642 : {
643 8759 : return new ScPageHFItem( *this );
644 : }
645 :
646 0 : static void lcl_SetSpace( OUString& rStr, const ESelection& rSel )
647 : {
648 : // Text replaced by a space to ensure they are positions:
649 0 : sal_Int32 nLen = rSel.nEndPos-rSel.nStartPos;
650 0 : rStr = rStr.replaceAt( rSel.nStartPos, nLen, " " );
651 0 : }
652 :
653 0 : static bool lcl_ConvertFields(EditEngine& rEng, const OUString* pCommands)
654 : {
655 0 : bool bChange = false;
656 0 : sal_Int32 nParCnt = rEng.GetParagraphCount();
657 0 : for (sal_Int32 nPar = 0; nPar<nParCnt; nPar++)
658 : {
659 0 : OUString aStr = rEng.GetText( nPar );
660 : sal_Int32 nPos;
661 :
662 0 : while ((nPos = aStr.indexOf(pCommands[0])) != -1)
663 : {
664 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[0].getLength() );
665 0 : rEng.QuickInsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), aSel );
666 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
667 : }
668 0 : while ((nPos = aStr.indexOf(pCommands[1])) != -1)
669 : {
670 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[1].getLength() );
671 0 : rEng.QuickInsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), aSel );
672 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
673 : }
674 0 : while ((nPos = aStr.indexOf(pCommands[2])) != -1)
675 : {
676 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[2].getLength() );
677 0 : rEng.QuickInsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD), aSel );
678 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
679 : }
680 0 : while ((nPos = aStr.indexOf(pCommands[3])) != -1)
681 : {
682 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[3].getLength() );
683 0 : rEng.QuickInsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD ), aSel );
684 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
685 : }
686 0 : while ((nPos = aStr.indexOf(pCommands[4])) != -1)
687 : {
688 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[4].getLength() );
689 0 : rEng.QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), aSel );
690 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
691 : }
692 0 : while ((nPos = aStr.indexOf(pCommands[5])) != -1)
693 : {
694 0 : ESelection aSel( nPar,nPos, nPar,nPos+pCommands[5].getLength() );
695 0 : rEng.QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), aSel );
696 0 : lcl_SetSpace(aStr, aSel ); bChange = true;
697 : }
698 0 : }
699 0 : return bChange;
700 : }
701 :
702 : #define SC_FIELD_COUNT 6
703 :
704 0 : SfxPoolItem* ScPageHFItem::Create( SvStream& rStream, sal_uInt16 nVer ) const
705 : {
706 0 : EditTextObject* pLeft = EditTextObject::Create(rStream);
707 0 : EditTextObject* pCenter = EditTextObject::Create(rStream);
708 0 : EditTextObject* pRight = EditTextObject::Create(rStream);
709 :
710 : OSL_ENSURE( pLeft && pCenter && pRight, "Error reading ScPageHFItem" );
711 :
712 0 : if ( pLeft == NULL || pLeft->GetParagraphCount() == 0 ||
713 0 : pCenter == NULL || pCenter->GetParagraphCount() == 0 ||
714 0 : pRight == NULL || pRight->GetParagraphCount() == 0 )
715 : {
716 : // If successfully loaded, each object contains at least one paragraph.
717 : // Excel import in 5.1 created broken TextObjects (#67442#) that are
718 : // corrected here to avoid saving wrong files again (#90487#).
719 0 : ScEditEngineDefaulter aEngine( EditEngine::CreatePool(), true );
720 0 : if ( pLeft == NULL || pLeft->GetParagraphCount() == 0 )
721 : {
722 0 : delete pLeft;
723 0 : pLeft = aEngine.CreateTextObject();
724 : }
725 0 : if ( pCenter == NULL || pCenter->GetParagraphCount() == 0 )
726 : {
727 0 : delete pCenter;
728 0 : pCenter = aEngine.CreateTextObject();
729 : }
730 0 : if ( pRight == NULL || pRight->GetParagraphCount() == 0 )
731 : {
732 0 : delete pRight;
733 0 : pRight = aEngine.CreateTextObject();
734 0 : }
735 : }
736 :
737 0 : if ( nVer < 1 ) // old field command conversions
738 : {
739 : sal_uInt16 i;
740 0 : const OUString& rDel = ScGlobal::GetRscString( STR_HFCMD_DELIMITER );
741 0 : OUString aCommands[SC_FIELD_COUNT];
742 0 : for (i=0; i<SC_FIELD_COUNT; i++)
743 0 : aCommands[i] = rDel;
744 0 : aCommands[0] += ScGlobal::GetRscString(STR_HFCMD_PAGE);
745 0 : aCommands[1] += ScGlobal::GetRscString(STR_HFCMD_PAGES);
746 0 : aCommands[2] += ScGlobal::GetRscString(STR_HFCMD_DATE);
747 0 : aCommands[3] += ScGlobal::GetRscString(STR_HFCMD_TIME);
748 0 : aCommands[4] += ScGlobal::GetRscString(STR_HFCMD_FILE);
749 0 : aCommands[5] += ScGlobal::GetRscString(STR_HFCMD_TABLE);
750 0 : for (i=0; i<SC_FIELD_COUNT; i++)
751 0 : aCommands[i] += rDel;
752 :
753 0 : ScEditEngineDefaulter aEngine( EditEngine::CreatePool(), true );
754 0 : aEngine.SetText(*pLeft);
755 0 : if (lcl_ConvertFields(aEngine,aCommands))
756 : {
757 0 : delete pLeft;
758 0 : pLeft = aEngine.CreateTextObject();
759 : }
760 0 : aEngine.SetText(*pCenter);
761 0 : if (lcl_ConvertFields(aEngine,aCommands))
762 : {
763 0 : delete pCenter;
764 0 : pCenter = aEngine.CreateTextObject();
765 : }
766 0 : aEngine.SetText(*pRight);
767 0 : if (lcl_ConvertFields(aEngine,aCommands))
768 : {
769 0 : delete pRight;
770 0 : pRight = aEngine.CreateTextObject();
771 0 : }
772 : }
773 : else if ( nVer < 2 ) {} // nothing to do: SvxFileField is not exchanged for SvxExtFileField
774 :
775 0 : ScPageHFItem* pItem = new ScPageHFItem( Which() );
776 0 : pItem->SetArea( pLeft, SC_HF_LEFTAREA );
777 0 : pItem->SetArea( pCenter, SC_HF_CENTERAREA );
778 0 : pItem->SetArea( pRight, SC_HF_RIGHTAREA );
779 :
780 0 : return pItem;
781 : }
782 :
783 2448 : void ScPageHFItem::SetLeftArea( const EditTextObject& rNew )
784 : {
785 2448 : delete pLeftArea;
786 2448 : pLeftArea = rNew.Clone();
787 2448 : }
788 :
789 2580 : void ScPageHFItem::SetCenterArea( const EditTextObject& rNew )
790 : {
791 2580 : delete pCenterArea;
792 2580 : pCenterArea = rNew.Clone();
793 2580 : }
794 :
795 2448 : void ScPageHFItem::SetRightArea( const EditTextObject& rNew )
796 : {
797 2448 : delete pRightArea;
798 2448 : pRightArea = rNew.Clone();
799 2448 : }
800 :
801 0 : void ScPageHFItem::SetArea( EditTextObject *pNew, int nArea )
802 : {
803 0 : switch ( nArea )
804 : {
805 0 : case SC_HF_LEFTAREA: delete pLeftArea; pLeftArea = pNew; break;
806 0 : case SC_HF_CENTERAREA: delete pCenterArea; pCenterArea = pNew; break;
807 0 : case SC_HF_RIGHTAREA: delete pRightArea; pRightArea = pNew; break;
808 : default:
809 : OSL_FAIL( "New Area?" );
810 : }
811 0 : }
812 :
813 : /**
814 : * ScViewObjectModeItem - Display Mode of View Objects
815 : */
816 4134 : ScViewObjectModeItem::ScViewObjectModeItem( sal_uInt16 nWhichP )
817 4134 : : SfxEnumItem( nWhichP, VOBJ_MODE_SHOW )
818 : {
819 4134 : }
820 :
821 30 : ScViewObjectModeItem::ScViewObjectModeItem( sal_uInt16 nWhichP, ScVObjMode eMode )
822 30 : : SfxEnumItem( nWhichP, sal::static_int_cast<sal_uInt16>(eMode) )
823 : {
824 30 : }
825 :
826 7938 : ScViewObjectModeItem::~ScViewObjectModeItem()
827 : {
828 7938 : }
829 :
830 0 : bool ScViewObjectModeItem::GetPresentation
831 : (
832 : SfxItemPresentation ePres,
833 : SfxMapUnit /* eCoreUnit */,
834 : SfxMapUnit /* ePresUnit */,
835 : OUString& rText,
836 : const IntlWrapper* /* pIntl */
837 : ) const
838 : {
839 0 : OUString aDel(": ");
840 0 : rText.clear();
841 :
842 0 : switch ( ePres )
843 : {
844 : case SFX_ITEM_PRESENTATION_COMPLETE:
845 0 : switch( Which() )
846 : {
847 : case SID_SCATTR_PAGE_CHARTS:
848 0 : rText = ScGlobal::GetRscString(STR_VOBJ_CHART) + aDel;
849 0 : break;
850 :
851 : case SID_SCATTR_PAGE_OBJECTS:
852 0 : rText = ScGlobal::GetRscString(STR_VOBJ_OBJECT) + aDel;
853 0 : break;
854 :
855 : case SID_SCATTR_PAGE_DRAWINGS:
856 0 : rText = ScGlobal::GetRscString(STR_VOBJ_DRAWINGS) + aDel;
857 0 : break;
858 :
859 : default:
860 0 : ePres = SFX_ITEM_PRESENTATION_NAMELESS; // Default setting!
861 0 : break;
862 : }
863 : /* !!! fall-through !!! */
864 : case SFX_ITEM_PRESENTATION_NAMELESS:
865 0 : rText += ScGlobal::GetRscString(STR_VOBJ_MODE_SHOW+GetValue());
866 0 : return true;
867 : break;
868 :
869 0 : default: break;
870 : // added to avoid warnings
871 : }
872 :
873 0 : return false;
874 : }
875 :
876 0 : sal_uInt16 ScViewObjectModeItem::GetValueCount() const
877 : {
878 0 : return 2;
879 : }
880 :
881 30 : SfxPoolItem* ScViewObjectModeItem::Clone( SfxItemPool* ) const
882 : {
883 30 : return new ScViewObjectModeItem( *this );
884 : }
885 :
886 0 : sal_uInt16 ScViewObjectModeItem::GetVersion( sal_uInt16 /* nFileVersion */ ) const
887 : {
888 0 : return 1;
889 : }
890 :
891 0 : SfxPoolItem* ScViewObjectModeItem::Create(
892 : SvStream& rStream,
893 : sal_uInt16 nVersion ) const
894 : {
895 0 : if ( nVersion == 0 )
896 : {
897 : // Old Version with AllEnuItem -> produce with Mode "Show"
898 0 : return new ScViewObjectModeItem( Which() );
899 : }
900 : else
901 : {
902 : sal_uInt16 nVal;
903 0 : rStream.ReadUInt16( nVal );
904 :
905 : //#i80528# adapt to new range eventually
906 0 : if((sal_uInt16)VOBJ_MODE_HIDE < nVal) nVal = (sal_uInt16)VOBJ_MODE_SHOW;
907 :
908 0 : return new ScViewObjectModeItem( Which(), (ScVObjMode)nVal);
909 : }
910 : }
911 :
912 : /**
913 : * Double
914 : */
915 0 : ScDoubleItem::ScDoubleItem( sal_uInt16 nWhichP, double nVal )
916 : : SfxPoolItem ( nWhichP ),
917 0 : nValue ( nVal )
918 : {
919 0 : }
920 :
921 0 : ScDoubleItem::ScDoubleItem( const ScDoubleItem& rItem )
922 0 : : SfxPoolItem ( rItem )
923 : {
924 0 : nValue = rItem.nValue;
925 0 : }
926 :
927 0 : bool ScDoubleItem::operator==( const SfxPoolItem& rItem ) const
928 : {
929 : assert(SfxPoolItem::operator==(rItem));
930 0 : const ScDoubleItem& _rItem = static_cast<const ScDoubleItem&>(rItem);
931 0 : return nValue == _rItem.nValue;
932 : }
933 :
934 0 : SfxPoolItem* ScDoubleItem::Clone( SfxItemPool* ) const
935 : {
936 0 : return new ScDoubleItem( *this );
937 : }
938 :
939 0 : SfxPoolItem* ScDoubleItem::Create( SvStream& rStream, sal_uInt16 /* nVer */ ) const
940 : {
941 0 : double nTmp=0;
942 0 : rStream.ReadDouble( nTmp );
943 :
944 0 : ScDoubleItem* pItem = new ScDoubleItem( Which(), nTmp );
945 :
946 0 : return pItem;
947 : }
948 :
949 0 : ScDoubleItem::~ScDoubleItem()
950 : {
951 0 : }
952 :
953 1816 : ScPageScaleToItem::ScPageScaleToItem() :
954 : SfxPoolItem( ATTR_PAGE_SCALETO ),
955 : mnWidth( 0 ),
956 1816 : mnHeight( 0 )
957 : {
958 1816 : }
959 :
960 1379 : ScPageScaleToItem::ScPageScaleToItem( sal_uInt16 nWidth, sal_uInt16 nHeight ) :
961 : SfxPoolItem( ATTR_PAGE_SCALETO ),
962 : mnWidth( nWidth ),
963 1379 : mnHeight( nHeight )
964 : {
965 1379 : }
966 :
967 8093 : ScPageScaleToItem::~ScPageScaleToItem()
968 : {
969 8093 : }
970 :
971 1827 : ScPageScaleToItem* ScPageScaleToItem::Clone( SfxItemPool* ) const
972 : {
973 1827 : return new ScPageScaleToItem( *this );
974 : }
975 :
976 17 : bool ScPageScaleToItem::operator==( const SfxPoolItem& rCmp ) const
977 : {
978 : assert(SfxPoolItem::operator==(rCmp));
979 17 : const ScPageScaleToItem& rPageCmp = static_cast< const ScPageScaleToItem& >( rCmp );
980 17 : return (mnWidth == rPageCmp.mnWidth) && (mnHeight == rPageCmp.mnHeight);
981 : }
982 :
983 : namespace {
984 0 : void lclAppendScalePageCount( OUString& rText, sal_uInt16 nPages )
985 : {
986 0 : rText += ": ";
987 0 : if( nPages )
988 : {
989 0 : OUString aPages( ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALE_PAGES ) );
990 0 : rText += aPages.replaceFirst( "%1", OUString::number( nPages ) );
991 : }
992 : else
993 0 : rText += ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALE_AUTO );
994 0 : }
995 : } // namespace
996 :
997 0 : bool ScPageScaleToItem::GetPresentation(
998 : SfxItemPresentation ePres, SfxMapUnit, SfxMapUnit, OUString& rText, const IntlWrapper* ) const
999 : {
1000 0 : rText.clear();
1001 0 : if( !IsValid())
1002 0 : return false;
1003 :
1004 0 : OUString aName( ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALETO ) );
1005 0 : OUString aValue( ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALE_WIDTH ) );
1006 0 : lclAppendScalePageCount( aValue, mnWidth );
1007 0 : aValue = aValue + ", " + ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALE_HEIGHT );
1008 0 : lclAppendScalePageCount( aValue, mnHeight );
1009 :
1010 0 : switch( ePres )
1011 : {
1012 : case SFX_ITEM_PRESENTATION_NAMELESS:
1013 0 : rText = aValue;
1014 0 : return true;
1015 : break;
1016 :
1017 : case SFX_ITEM_PRESENTATION_COMPLETE:
1018 0 : rText = aName + " (" + aValue + ")";
1019 0 : return true;
1020 : break;
1021 :
1022 : default:
1023 : OSL_FAIL( "ScPageScaleToItem::GetPresentation - unknown presentation mode" );
1024 : }
1025 0 : return false;
1026 : }
1027 :
1028 0 : bool ScPageScaleToItem::QueryValue( uno::Any& rAny, sal_uInt8 nMemberId ) const
1029 : {
1030 0 : bool bRet = true;
1031 0 : switch( nMemberId )
1032 : {
1033 0 : case SC_MID_PAGE_SCALETO_WIDTH: rAny <<= mnWidth; break;
1034 0 : case SC_MID_PAGE_SCALETO_HEIGHT: rAny <<= mnHeight; break;
1035 : default:
1036 : OSL_FAIL( "ScPageScaleToItem::QueryValue - unknown member ID" );
1037 0 : bRet = false;
1038 : }
1039 0 : return bRet;
1040 : }
1041 :
1042 0 : bool ScPageScaleToItem::PutValue( const uno::Any& rAny, sal_uInt8 nMemberId )
1043 : {
1044 0 : bool bRet = false;
1045 0 : switch( nMemberId )
1046 : {
1047 0 : case SC_MID_PAGE_SCALETO_WIDTH: bRet = rAny >>= mnWidth; break;
1048 0 : case SC_MID_PAGE_SCALETO_HEIGHT: bRet = rAny >>= mnHeight; break;
1049 : default:
1050 : OSL_FAIL( "ScPageScaleToItem::PutValue - unknown member ID" );
1051 : }
1052 0 : return bRet;
1053 : }
1054 :
1055 5723 : ScCondFormatItem::ScCondFormatItem():
1056 5723 : SfxPoolItem( ATTR_CONDITIONAL )
1057 : {
1058 5723 : }
1059 :
1060 150 : ScCondFormatItem::ScCondFormatItem( const std::vector<sal_uInt32>& rIndex ):
1061 : SfxPoolItem( ATTR_CONDITIONAL ),
1062 150 : maIndex( rIndex )
1063 : {
1064 150 : }
1065 :
1066 7243 : ScCondFormatItem::~ScCondFormatItem()
1067 : {
1068 7243 : }
1069 :
1070 8705 : bool ScCondFormatItem::operator==( const SfxPoolItem& rCmp ) const
1071 : {
1072 8705 : return maIndex == static_cast<const ScCondFormatItem&>(rCmp).maIndex;
1073 : }
1074 :
1075 150 : ScCondFormatItem* ScCondFormatItem::Clone(SfxItemPool*) const
1076 : {
1077 150 : return new ScCondFormatItem(maIndex);
1078 : }
1079 :
1080 0 : void ScCondFormatItem::AddCondFormatData( sal_uInt32 nIndex )
1081 : {
1082 0 : maIndex.push_back(nIndex);
1083 0 : }
1084 :
1085 4345 : void ScCondFormatItem::SetCondFormatData( const std::vector<sal_uInt32>& rIndex )
1086 : {
1087 4345 : maIndex = rIndex;
1088 4501 : }
1089 :
1090 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|