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