LCOV - code coverage report
Current view: top level - sw/source/uibase/utlui - uitool.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 191 405 47.2 %
Date: 2015-06-13 12:38:46 Functions: 9 24 37.5 %
Legend: Lines: hit not hit

          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 <hintids.hxx>
      21             : 
      22             : #include <osl/diagnose.h>
      23             : #include <tools/datetime.hxx>
      24             : #include <vcl/svapp.hxx>
      25             : #include <unotools/collatorwrapper.hxx>
      26             : #include <svl/urihelper.hxx>
      27             : #include <svl/stritem.hxx>
      28             : #include <svl/grabbagitem.hxx>
      29             : #include <unotools/syslocale.hxx>
      30             : #include <sfx2/app.hxx>
      31             : #include <IDocumentStylePoolAccess.hxx>
      32             : #include <sfx2/docfile.hxx>
      33             : #include <sfx2/docfilt.hxx>
      34             : #include <editeng/pmdlitem.hxx>
      35             : #include <editeng/tstpitem.hxx>
      36             : #include <editeng/boxitem.hxx>
      37             : #include <editeng/shaditem.hxx>
      38             : #include <editeng/sizeitem.hxx>
      39             : #include <editeng/brushitem.hxx>
      40             : #include <svx/pageitem.hxx>
      41             : #include <editeng/lrspitem.hxx>
      42             : #include <svl/style.hxx>
      43             : #include <vcl/lstbox.hxx>
      44             : #include <unotools/localedatawrapper.hxx>
      45             : #include <com/sun/star/frame/XDispatch.hpp>
      46             : #include <com/sun/star/frame/XDispatchProvider.hpp>
      47             : #include <com/sun/star/util/URLTransformer.hpp>
      48             : #include <com/sun/star/util/XURLTransformer.hpp>
      49             : #include <comphelper/processfactory.hxx>
      50             : #include <sfx2/viewfrm.hxx>
      51             : #include <fmtornt.hxx>
      52             : #include <tabcol.hxx>
      53             : #include <edtwin.hxx>
      54             : #include <fmtfsize.hxx>
      55             : #include <fmthdft.hxx>
      56             : #include <fmtpdsc.hxx>
      57             : #include <wview.hxx>
      58             : #include <uiitems.hxx>
      59             : #include <docsh.hxx>
      60             : #include <wrtsh.hxx>
      61             : #include <swmodule.hxx>
      62             : #include <view.hxx>
      63             : #include <uitool.hxx>
      64             : #include <frmatr.hxx>
      65             : #include <paratr.hxx>
      66             : #include <fmtcol.hxx>
      67             : #include <poolfmt.hxx>
      68             : #include "usrpref.hxx"
      69             : 
      70             : #include <cmdid.h>
      71             : #include <globals.hrc>
      72             : #include <utlui.hrc>
      73             : #include <doc.hxx>
      74             : #include <docary.hxx>
      75             : #include <charfmt.hxx>
      76             : #include <SwStyleNameMapper.hxx>
      77             : // 50 cm 28350
      78             : 
      79             : #define MAXHEIGHT 28350
      80             : #define MAXWIDTH  28350
      81             : 
      82             : using namespace ::com::sun::star;
      83             : 
      84             : // General list of string pointer
      85             : 
      86             : // Switch metric
      87             : 
      88           0 : void SetMetric(MetricFormatter& rCtrl, FieldUnit eUnit)
      89             : {
      90           0 :     SwTwips nMin = static_cast< SwTwips >(rCtrl.GetMin(FUNIT_TWIP));
      91           0 :     SwTwips nMax = static_cast< SwTwips >(rCtrl.GetMax(FUNIT_TWIP));
      92             : 
      93           0 :     rCtrl.SetUnit(eUnit);
      94             : 
      95           0 :     rCtrl.SetMin(nMin, FUNIT_TWIP);
      96           0 :     rCtrl.SetMax(nMax, FUNIT_TWIP);
      97           0 : }
      98             : 
      99             : // Set boxinfo attribute
     100             : 
     101           0 : void PrepareBoxInfo(SfxItemSet& rSet, const SwWrtShell& rSh)
     102             : {
     103           0 :     SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
     104             :     const SfxPoolItem *pBoxInfo;
     105           0 :     if ( SfxItemState::SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
     106           0 :                                         true, &pBoxInfo))
     107           0 :         aBoxInfo = *static_cast<const SvxBoxInfoItem*>(pBoxInfo);
     108             : 
     109             :         // Table variant: If more than one table cells are selected
     110           0 :     rSh.GetCrsr();                  //So that GetCrsrCnt() returns the right thing
     111           0 :     aBoxInfo.SetTable          (rSh.IsTableMode() && rSh.GetCrsrCnt() > 1);
     112             :         // Always show the distance field
     113           0 :     aBoxInfo.SetDist           (true);
     114             :         // Set minimal size in tables and paragraphs
     115           0 :     aBoxInfo.SetMinDist        (rSh.IsTableMode() || rSh.GetSelectionType() & (nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL));
     116             :         // Set always the default distance
     117           0 :     aBoxInfo.SetDefDist        (MIN_BORDER_DIST);
     118             :         // Single lines can have only in tables DontCare-Status
     119           0 :     aBoxInfo.SetValid(SvxBoxInfoItemValidFlags::DISABLE, !rSh.IsTableMode());
     120             : 
     121           0 :     rSet.Put(aBoxInfo);
     122           0 : }
     123             : 
     124           0 : void ConvertAttrCharToGen(SfxItemSet& rSet, const sal_uInt8 nMode)
     125             : {
     126             :     // Background / highlight
     127             :     {
     128             :         // Always use the visible background
     129             :         const SfxPoolItem *pTmpBrush;
     130           0 :         bool bUseHighlight = false;
     131           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_CHRATR_HIGHLIGHT, true, &pTmpBrush ) )
     132             :         {
     133           0 :             SvxBrushItem aTmpBrush( *static_cast<const SvxBrushItem*>(pTmpBrush) );
     134           0 :             if( aTmpBrush.GetColor() != COL_TRANSPARENT )
     135             :             {
     136           0 :                 aTmpBrush.SetWhich( RES_BACKGROUND );
     137           0 :                 rSet.Put( aTmpBrush );
     138           0 :                 bUseHighlight = true;
     139           0 :             }
     140             :         }
     141           0 :         if( !bUseHighlight )
     142             :         {
     143           0 :             if( SfxItemState::SET == rSet.GetItemState( RES_CHRATR_BACKGROUND, true, &pTmpBrush ) )
     144             :             {
     145           0 :                 SvxBrushItem aTmpBrush( *static_cast<const SvxBrushItem*>(pTmpBrush) );
     146           0 :                 aTmpBrush.SetWhich( RES_BACKGROUND );
     147           0 :                 rSet.Put( aTmpBrush );
     148             :             }
     149             :             else
     150           0 :                 rSet.ClearItem(RES_BACKGROUND);
     151             :         }
     152             :     }
     153             : 
     154           0 :     if( nMode == CONV_ATTR_STD )
     155             :     {
     156             :         // Border
     157             :         const SfxPoolItem *pTmpItem;
     158           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_CHRATR_BOX, true, &pTmpItem ) )
     159             :         {
     160           0 :             SvxBoxItem aTmpBox( *static_cast<const SvxBoxItem*>(pTmpItem) );
     161           0 :             aTmpBox.SetWhich( RES_BOX );
     162           0 :             rSet.Put( aTmpBox );
     163             :         }
     164             :         else
     165           0 :             rSet.ClearItem(RES_BOX);
     166             : 
     167             :         // Border shadow
     168           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_CHRATR_SHADOW, false, &pTmpItem ) )
     169             :         {
     170           0 :             SvxShadowItem aTmpShadow( *static_cast<const SvxShadowItem*>(pTmpItem) );
     171           0 :             aTmpShadow.SetWhich( RES_SHADOW );
     172           0 :             rSet.Put( aTmpShadow );
     173             :         }
     174             :         else
     175           0 :             rSet.ClearItem( RES_SHADOW );
     176             :     }
     177           0 : }
     178             : 
     179           0 : void ConvertAttrGenToChar(SfxItemSet& rSet, const SfxItemSet& rOrigSet, const sal_uInt8 nMode)
     180             : {
     181             :     // Background / highlighting
     182             :     {
     183             :         const SfxPoolItem *pTmpItem;
     184           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_BACKGROUND, false, &pTmpItem ) )
     185             :         {
     186           0 :             SvxBrushItem aTmpBrush( *static_cast<const SvxBrushItem*>(pTmpItem) );
     187           0 :             aTmpBrush.SetWhich( RES_CHRATR_BACKGROUND );
     188           0 :             rSet.Put( aTmpBrush );
     189             : 
     190             :             // Highlight is an MS specific thing, so remove it at the first time when LO modifies
     191             :             // this part of the imported document.
     192           0 :             rSet.Put( SvxBrushItem(RES_CHRATR_HIGHLIGHT) );
     193             : 
     194             :             // Remove shading marker
     195           0 :             if( SfxItemState::SET == rOrigSet.GetItemState( RES_CHRATR_GRABBAG, false, &pTmpItem ) )
     196             :             {
     197           0 :                 SfxGrabBagItem aGrabBag(*static_cast<const SfxGrabBagItem*>(pTmpItem));
     198           0 :                 std::map<OUString, com::sun::star::uno::Any>& rMap = aGrabBag.GetGrabBag();
     199           0 :                 auto aIterator = rMap.find("CharShadingMarker");
     200           0 :                 if( aIterator != rMap.end() )
     201             :                 {
     202           0 :                     aIterator->second = uno::makeAny(false);
     203             :                 }
     204           0 :                 rSet.Put( aGrabBag );
     205           0 :             }
     206             :         }
     207           0 :         rSet.ClearItem( RES_BACKGROUND );
     208             :     }
     209             : 
     210           0 :     if( nMode == CONV_ATTR_STD )
     211             :     {
     212             :         // Border
     213             :         const SfxPoolItem *pTmpItem;
     214           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_BOX, false, &pTmpItem ) )
     215             :         {
     216           0 :             SvxBoxItem aTmpBox( *static_cast<const SvxBoxItem*>(pTmpItem) );
     217           0 :             aTmpBox.SetWhich( RES_CHRATR_BOX );
     218           0 :             rSet.Put( aTmpBox );
     219             :         }
     220           0 :         rSet.ClearItem( RES_BOX );
     221             : 
     222             :         // Border shadow
     223           0 :         if( SfxItemState::SET == rSet.GetItemState( RES_SHADOW, false, &pTmpItem ) )
     224             :         {
     225           0 :             SvxShadowItem aTmpShadow( *static_cast<const SvxShadowItem*>(pTmpItem) );
     226           0 :             aTmpShadow.SetWhich( RES_CHRATR_SHADOW );
     227           0 :             rSet.Put( aTmpShadow );
     228             :         }
     229           0 :         rSet.ClearItem( RES_SHADOW );
     230             :     }
     231           0 : }
     232             : 
     233             : // Fill header footer
     234             : 
     235        5069 : void FillHdFt(SwFrameFormat* pFormat, const  SfxItemSet& rSet)
     236             : {
     237        5069 :     SwAttrSet aSet(pFormat->GetAttrSet());
     238        5069 :     aSet.Put(rSet);
     239             : 
     240        5069 :     const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(rSet.Get(SID_ATTR_PAGE_SIZE));
     241        5069 :     const SfxBoolItem& rDynamic = static_cast<const SfxBoolItem&>(rSet.Get(SID_ATTR_PAGE_DYNAMIC));
     242             : 
     243             :     // Convert size
     244        5069 :     SwFormatFrmSize aFrmSize(rDynamic.GetValue() ? ATT_MIN_SIZE : ATT_FIX_SIZE,
     245        5069 :                             rSize.GetSize().Width(),
     246       20276 :                             rSize.GetSize().Height());
     247        5069 :     aSet.Put(aFrmSize);
     248       10138 :     pFormat->SetFormatAttr(aSet);
     249        5069 : }
     250             : 
     251             : /// Convert from UseOnPage to SvxPageUsage.
     252       19433 : UseOnPage lcl_convertUseToSvx(UseOnPage nUse)
     253             : {
     254       19433 :     UseOnPage nRet = nsUseOnPage::PD_NONE;
     255       19433 :     if ((nUse & nsUseOnPage::PD_LEFT) == nsUseOnPage::PD_LEFT)
     256       19369 :         nRet |= SVX_PAGE_LEFT;
     257       19433 :     if ((nUse & nsUseOnPage::PD_RIGHT) == nsUseOnPage::PD_RIGHT)
     258       19399 :         nRet |= SVX_PAGE_RIGHT;
     259       19433 :     if ((nUse & nsUseOnPage::PD_ALL) == nsUseOnPage::PD_ALL)
     260       19335 :         nRet |= SVX_PAGE_ALL;
     261       19433 :     if ((nUse & nsUseOnPage::PD_MIRROR) == nsUseOnPage::PD_MIRROR)
     262         503 :         nRet |= SVX_PAGE_MIRROR;
     263       19433 :     return nRet;
     264             : }
     265             : 
     266             : /// Convert from SvxPageUsage to UseOnPage.
     267        7365 : UseOnPage lcl_convertUseFromSvx(UseOnPage nUse)
     268             : {
     269        7365 :     UseOnPage nRet = nsUseOnPage::PD_NONE;
     270        7365 :     if ((nUse & SVX_PAGE_LEFT) == SVX_PAGE_LEFT)
     271        7320 :         nRet |= nsUseOnPage::PD_LEFT;
     272        7365 :     if ((nUse & SVX_PAGE_RIGHT) == SVX_PAGE_RIGHT)
     273        7342 :         nRet |= nsUseOnPage::PD_RIGHT;
     274        7365 :     if ((nUse & SVX_PAGE_ALL) == SVX_PAGE_ALL)
     275        7297 :         nRet |= nsUseOnPage::PD_ALL;
     276        7365 :     if ((nUse & SVX_PAGE_MIRROR) == SVX_PAGE_MIRROR)
     277         185 :         nRet |= nsUseOnPage::PD_MIRROR;
     278        7365 :     return nRet;
     279             : }
     280             : 
     281             : // PageDesc <-> convert into sets and back
     282             : 
     283        7365 : void ItemSetToPageDesc( const SfxItemSet& rSet, SwPageDesc& rPageDesc )
     284             : {
     285        7365 :     SwFrameFormat& rMaster = rPageDesc.GetMaster();
     286        7365 :     int nFirstShare = -1;
     287             : 
     288             :     // Transfer all general frame attributes
     289        7365 :     rMaster.SetFormatAttr(rSet);
     290             : 
     291             :     // PageData
     292        7365 :     if(rSet.GetItemState(SID_ATTR_PAGE) == SfxItemState::SET)
     293             :     {
     294        7365 :         const SvxPageItem& rPageItem = static_cast<const SvxPageItem&>(rSet.Get(SID_ATTR_PAGE));
     295             : 
     296        7365 :         const sal_uInt16 nUse = rPageItem.GetPageUsage();
     297        7365 :         if(nUse)
     298        7365 :             rPageDesc.SetUseOn( lcl_convertUseFromSvx((UseOnPage) nUse) );
     299        7365 :         rPageDesc.SetLandscape(rPageItem.IsLandscape());
     300        7365 :         SvxNumberType aNumType;
     301        7365 :         aNumType.SetNumberingType( static_cast< sal_Int16 >(rPageItem.GetNumType()) );
     302        7365 :         rPageDesc.SetNumType(aNumType);
     303             :     }
     304             :     // Size
     305        7365 :     if(rSet.GetItemState(SID_ATTR_PAGE_SIZE) == SfxItemState::SET)
     306             :     {
     307        7365 :         const SvxSizeItem& rSizeItem = static_cast<const SvxSizeItem&>(rSet.Get(SID_ATTR_PAGE_SIZE));
     308        7365 :         SwFormatFrmSize aSize(ATT_FIX_SIZE);
     309        7365 :         aSize.SetSize(rSizeItem.GetSize());
     310        7365 :         rMaster.SetFormatAttr(aSize);
     311             :     }
     312             :     // Evaluate header attributes
     313             :     const SfxPoolItem* pItem;
     314        7365 :     if( SfxItemState::SET == rSet.GetItemState( SID_ATTR_PAGE_HEADERSET,
     315        7365 :             false, &pItem ) )
     316             :     {
     317        3044 :         const SfxItemSet& rHeaderSet = static_cast<const SvxSetItem*>(pItem)->GetItemSet();
     318        3044 :         const SfxBoolItem& rHeaderOn = static_cast<const SfxBoolItem&>(rHeaderSet.Get(SID_ATTR_PAGE_ON));
     319             : 
     320        3044 :         if(rHeaderOn.GetValue())
     321             :         {
     322             :             // Take over values
     323        3039 :             if(!rMaster.GetHeader().IsActive())
     324         627 :                 rMaster.SetFormatAttr(SwFormatHeader(true));
     325             : 
     326             :             // Pick out everything and adapt the header format
     327        3039 :             SwFormatHeader aHeaderFormat(rMaster.GetHeader());
     328        3039 :             SwFrameFormat *pHeaderFormat = aHeaderFormat.GetHeaderFormat();
     329             :             OSL_ENSURE(pHeaderFormat != 0, "no header format");
     330             : 
     331        3039 :             ::FillHdFt(pHeaderFormat, rHeaderSet);
     332             : 
     333             :             rPageDesc.ChgHeaderShare(static_cast<const SfxBoolItem&>(
     334        3039 :                         rHeaderSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
     335        3039 :             if (nFirstShare < 0)
     336             :             {
     337             :                 rPageDesc.ChgFirstShare(static_cast<const SfxBoolItem&>(
     338        3039 :                             rHeaderSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
     339        3039 :                 nFirstShare = rPageDesc.IsFirstShared() ? 1 : 0;
     340        3039 :             }
     341             :         }
     342             :         else
     343             :         {
     344             :             // Disable header
     345           5 :             if(rMaster.GetHeader().IsActive())
     346             :             {
     347           5 :                 rMaster.SetFormatAttr(SwFormatHeader(false));
     348           5 :                 rPageDesc.ChgHeaderShare(false);
     349             :             }
     350             :         }
     351             :     }
     352             : 
     353             :     // Evaluate footer attributes
     354        7365 :     if( SfxItemState::SET == rSet.GetItemState( SID_ATTR_PAGE_FOOTERSET,
     355        7365 :             false, &pItem ) )
     356             :     {
     357        2033 :         const SfxItemSet& rFooterSet = static_cast<const SvxSetItem*>(pItem)->GetItemSet();
     358        2033 :         const SfxBoolItem& rFooterOn = static_cast<const SfxBoolItem&>(rFooterSet.Get(SID_ATTR_PAGE_ON));
     359             : 
     360        2033 :         if(rFooterOn.GetValue())
     361             :         {
     362             :             // Take over values
     363        2030 :             if(!rMaster.GetFooter().IsActive())
     364         627 :                 rMaster.SetFormatAttr(SwFormatFooter(true));
     365             : 
     366             :             // Pick out everything and adapt the footer format
     367        2030 :             SwFormatFooter aFooterFormat(rMaster.GetFooter());
     368        2030 :             SwFrameFormat *pFooterFormat = aFooterFormat.GetFooterFormat();
     369             :             OSL_ENSURE(pFooterFormat != 0, "no footer format");
     370             : 
     371        2030 :             ::FillHdFt(pFooterFormat, rFooterSet);
     372             : 
     373             :             rPageDesc.ChgFooterShare(static_cast<const SfxBoolItem&>(
     374        2030 :                         rFooterSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
     375        2030 :             if (nFirstShare < 0)
     376             :             {
     377             :                 rPageDesc.ChgFirstShare(static_cast<const SfxBoolItem&>(
     378         379 :                             rFooterSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
     379         379 :                 nFirstShare = rPageDesc.IsFirstShared() ? 1 : 0;
     380        2030 :             }
     381             :         }
     382             :         else
     383             :         {
     384             :             // Disable footer
     385           3 :             if(rMaster.GetFooter().IsActive())
     386             :             {
     387           3 :                 rMaster.SetFormatAttr(SwFormatFooter(false));
     388           3 :                 rPageDesc.ChgFooterShare(false);
     389             :             }
     390             :         }
     391             :     }
     392             : 
     393             :     // Footnotes
     394             : 
     395        7365 :     if( SfxItemState::SET == rSet.GetItemState( FN_PARAM_FTN_INFO,
     396        7365 :             false, &pItem ) )
     397        7365 :         rPageDesc.SetFootnoteInfo( static_cast<const SwPageFootnoteInfoItem*>(pItem)->GetPageFootnoteInfo() );
     398             : 
     399             :     // Columns
     400             : 
     401             :     // Register compliant
     402             : 
     403        7365 :     if(SfxItemState::SET == rSet.GetItemState(
     404        7365 :                             SID_SWREGISTER_MODE, false, &pItem))
     405             :     {
     406        7365 :         bool bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     407        7365 :         if(!bSet)
     408        7335 :             rPageDesc.SetRegisterFormatColl(0);
     409          30 :         else if(SfxItemState::SET == rSet.GetItemState(
     410          30 :                                 SID_SWREGISTER_COLLECTION, false, &pItem))
     411             :         {
     412          30 :             const OUString& rColl = static_cast<const SfxStringItem*>(pItem)->GetValue();
     413          30 :             SwDoc& rDoc = *rMaster.GetDoc();
     414          30 :             SwTextFormatColl* pColl = rDoc.FindTextFormatCollByName( rColl );
     415          30 :             if( !pColl )
     416             :             {
     417             :                 const sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(
     418           0 :                     rColl, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     419           0 :                 if( USHRT_MAX != nId )
     420           0 :                     pColl = rDoc.getIDocumentStylePoolAccess().GetTextCollFromPool( nId );
     421             :                 else
     422             :                     pColl = rDoc.MakeTextFormatColl( rColl,
     423           0 :                                 rDoc.GetDfltTextFormatColl() );
     424             :             }
     425          30 :             if( pColl )
     426          30 :                 pColl->SetFormatAttr( SwRegisterItem ( true ));
     427          30 :             rPageDesc.SetRegisterFormatColl( pColl );
     428             :         }
     429             :     }
     430        7365 : }
     431             : 
     432       19433 : void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
     433             : {
     434       19433 :     const SwFrameFormat& rMaster = rPageDesc.GetMaster();
     435             : 
     436             :     // Page data
     437       19433 :     SvxPageItem aPageItem(SID_ATTR_PAGE);
     438       19433 :     aPageItem.SetDescName(rPageDesc.GetName());
     439       19433 :     aPageItem.SetPageUsage(lcl_convertUseToSvx(rPageDesc.GetUseOn()));
     440       19433 :     aPageItem.SetLandscape(rPageDesc.GetLandscape());
     441       19433 :     aPageItem.SetNumType((SvxNumType)rPageDesc.GetNumType().GetNumberingType());
     442       19433 :     rSet.Put(aPageItem);
     443             : 
     444             :     // Size
     445       38866 :     SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, rMaster.GetFrmSize().GetSize());
     446       19433 :     rSet.Put(aSizeItem);
     447             : 
     448             :     // Maximum size
     449       38866 :     SvxSizeItem aMaxSizeItem(SID_ATTR_PAGE_MAXSIZE, Size(MAXWIDTH, MAXHEIGHT));
     450       19433 :     rSet.Put(aMaxSizeItem);
     451             : 
     452             :     // Margins, border and the other stuff.
     453       19433 :     rSet.Put(rMaster.GetAttrSet());
     454             : 
     455       38866 :     SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
     456             :     const SfxPoolItem *pBoxInfo;
     457       19433 :     if ( SfxItemState::SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
     458       19433 :                                             true, &pBoxInfo) )
     459         547 :         aBoxInfo = *static_cast<const SvxBoxInfoItem*>(pBoxInfo);
     460             : 
     461       19433 :     aBoxInfo.SetTable( false );
     462             :         // Show always the distance field
     463       19433 :     aBoxInfo.SetDist( true);
     464             :         // Set minimal size in tables and paragraphs
     465       19433 :     aBoxInfo.SetMinDist( false );
     466             :         // Set always the default distance
     467       19433 :     aBoxInfo.SetDefDist( MIN_BORDER_DIST );
     468             :         // Single lines can have only in tables DontCare-Status
     469       19433 :     aBoxInfo.SetValid( SvxBoxInfoItemValidFlags::DISABLE );
     470       19433 :     rSet.Put( aBoxInfo );
     471             : 
     472       38866 :     SfxStringItem aFollow(SID_ATTR_PAGE_EXT1, OUString());
     473       19433 :     if(rPageDesc.GetFollow())
     474       19433 :         aFollow.SetValue(rPageDesc.GetFollow()->GetName());
     475       19433 :     rSet.Put(aFollow);
     476             : 
     477             :     // Header
     478       19433 :     if(rMaster.GetHeader().IsActive())
     479             :     {
     480        4998 :         const SwFormatHeader &rHeaderFormat = rMaster.GetHeader();
     481        4998 :         const SwFrameFormat *pHeaderFormat = rHeaderFormat.GetHeaderFormat();
     482             :         OSL_ENSURE(pHeaderFormat != 0, "no header format");
     483             : 
     484             :         // HeaderInfo, margins, background, border
     485        4998 :         SfxItemSet aHeaderSet(*rSet.GetPool(),
     486             :             RES_FRMATR_BEGIN,RES_FRMATR_END - 1,            // [82
     487             : 
     488             :             //UUUU FillAttribute support
     489             :             XATTR_FILL_FIRST, XATTR_FILL_LAST,              // [1014
     490             : 
     491             :             SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER,    // [10023
     492             :             SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE,          // [10051
     493             :             SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED,          // [10060
     494             :             SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST,
     495        4998 :             0, 0);
     496             : 
     497             :         //UUUU set correct parent to get the XFILL_NONE FillStyle as needed
     498        4998 :         aHeaderSet.SetParent(&rMaster.GetDoc()->GetDfltFrameFormat()->GetAttrSet());
     499             : 
     500             :         // Dynamic or fixed height
     501        9996 :         SfxBoolItem aOn(SID_ATTR_PAGE_ON, true);
     502        4998 :         aHeaderSet.Put(aOn);
     503             : 
     504        4998 :         const SwFormatFrmSize &rFrmSize = pHeaderFormat->GetFrmSize();
     505        4998 :         const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
     506        9996 :         SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
     507        4998 :         aHeaderSet.Put(aDynamic);
     508             : 
     509             :         // Left equal right
     510        9996 :         SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsHeaderShared());
     511        4998 :         aHeaderSet.Put(aShared);
     512        9996 :         SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
     513        4998 :         aHeaderSet.Put(aFirstShared);
     514             : 
     515             :         // Size
     516        9996 :         SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
     517        4998 :         aHeaderSet.Put(aSize);
     518             : 
     519             :         // Shifting frame attributes
     520        4998 :         aHeaderSet.Put(pHeaderFormat->GetAttrSet());
     521        4998 :         aHeaderSet.Put( aBoxInfo );
     522             : 
     523             :         // Create SetItem
     524        9996 :         SvxSetItem aSetItem(SID_ATTR_PAGE_HEADERSET, aHeaderSet);
     525        9996 :         rSet.Put(aSetItem);
     526             :     }
     527             : 
     528             :     // Footer
     529       19433 :     if(rMaster.GetFooter().IsActive())
     530             :     {
     531        3549 :         const SwFormatFooter &rFooterFormat = rMaster.GetFooter();
     532        3549 :         const SwFrameFormat *pFooterFormat = rFooterFormat.GetFooterFormat();
     533             :         OSL_ENSURE(pFooterFormat != 0, "no footer format");
     534             : 
     535             :         // FooterInfo, margins, background, border
     536        3549 :         SfxItemSet aFooterSet(*rSet.GetPool(),
     537             :             RES_FRMATR_BEGIN,RES_FRMATR_END - 1,            // [82
     538             : 
     539             :             //UUUU FillAttribute support
     540             :             XATTR_FILL_FIRST, XATTR_FILL_LAST,              // [1014
     541             : 
     542             :             SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER,    // [10023
     543             :             SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE,          // [10051
     544             :             SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED,          // [10060
     545             :             SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST,
     546        3549 :             0, 0);
     547             : 
     548             :         //UUUU set correct parent to get the XFILL_NONE FillStyle as needed
     549        3549 :         aFooterSet.SetParent(&rMaster.GetDoc()->GetDfltFrameFormat()->GetAttrSet());
     550             : 
     551             :         // Dynamic or fixed height
     552        7098 :         SfxBoolItem aOn(SID_ATTR_PAGE_ON, true);
     553        3549 :         aFooterSet.Put(aOn);
     554             : 
     555        3549 :         const SwFormatFrmSize &rFrmSize = pFooterFormat->GetFrmSize();
     556        3549 :         const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
     557        7098 :         SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
     558        3549 :         aFooterSet.Put(aDynamic);
     559             : 
     560             :         // Left equal right
     561        7098 :         SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsFooterShared());
     562        3549 :         aFooterSet.Put(aShared);
     563        7098 :         SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
     564        3549 :         aFooterSet.Put(aFirstShared);
     565             : 
     566             :         // Size
     567        7098 :         SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
     568        3549 :         aFooterSet.Put(aSize);
     569             : 
     570             :         // Shifting Frame attributes
     571        3549 :         aFooterSet.Put(pFooterFormat->GetAttrSet());
     572        3549 :         aFooterSet.Put( aBoxInfo );
     573             : 
     574             :         // Create SetItem
     575        7098 :         SvxSetItem aSetItem(SID_ATTR_PAGE_FOOTERSET, aFooterSet);
     576        7098 :         rSet.Put(aSetItem);
     577             :     }
     578             : 
     579             :     // Integrate footnotes
     580       19433 :     SwPageFootnoteInfo& rInfo = (SwPageFootnoteInfo&)rPageDesc.GetFootnoteInfo();
     581       38866 :     SwPageFootnoteInfoItem aFootnoteItem(FN_PARAM_FTN_INFO, rInfo);
     582       19433 :     rSet.Put(aFootnoteItem);
     583             : 
     584             :     // Register compliant
     585       19433 :     const SwTextFormatColl* pCol = rPageDesc.GetRegisterFormatColl();
     586       38866 :     SwRegisterItem aReg(pCol != 0);
     587       19433 :     aReg.SetWhich(SID_SWREGISTER_MODE);
     588       19433 :     rSet.Put(aReg);
     589       19433 :     if(pCol)
     590       19541 :         rSet.Put(SfxStringItem(SID_SWREGISTER_COLLECTION, pCol->GetName()));
     591             : 
     592       19433 : }
     593             : 
     594             : // Set DefaultTabs
     595             : 
     596           0 : void MakeDefTabs(SwTwips nDefDist, SvxTabStopItem& rTabs)
     597             : {
     598           0 :     if( rTabs.Count() )
     599           0 :         return;
     600             :     {
     601           0 :         SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
     602           0 :         rTabs.Insert( aSwTabStop );
     603             :     }
     604             : }
     605             : 
     606             : // Distance between two tabs
     607             : 
     608         542 : SwTwips GetTabDist(const SvxTabStopItem& rTabs)
     609             : {
     610         542 :     return rTabs.Count() ? rTabs[0].GetTabPos() : 1134; // 1134 = 2 cm
     611             : }
     612             : 
     613             : // Inquire if in the set is a Sfx-PageDesc combination present and return it.
     614           0 : void SfxToSwPageDescAttr( const SwWrtShell& rShell, SfxItemSet& rSet )
     615             : {
     616             :     const SfxPoolItem* pItem;
     617           0 :     SwFormatPageDesc aPgDesc;
     618             : 
     619           0 :     bool bChanged = false;
     620             :     // Page number
     621           0 :     if(SfxItemState::SET == rSet.GetItemState(SID_ATTR_PARA_PAGENUM, false, &pItem))
     622             :     {
     623           0 :         aPgDesc.SetNumOffset(static_cast<const SfxUInt16Item*>(pItem)->GetValue());
     624           0 :         bChanged = true;
     625             :     }
     626           0 :     if( SfxItemState::SET == rSet.GetItemState( SID_ATTR_PARA_MODEL, false, &pItem ))
     627             :     {
     628           0 :         const OUString& rDescName = static_cast<const SvxPageModelItem*>(pItem)->GetValue();
     629           0 :         if( !rDescName.isEmpty() )   // No name -> disable PageDesc!
     630             :         {
     631             :             // Delete only, if PageDesc will be enabled!
     632           0 :             rSet.ClearItem( RES_BREAK );
     633             :             SwPageDesc* pDesc = ((SwWrtShell&)rShell).FindPageDescByName(
     634           0 :                                                     rDescName, true );
     635           0 :             if( pDesc )
     636           0 :                 aPgDesc.RegisterToPageDesc( *pDesc );
     637             :         }
     638           0 :         rSet.ClearItem( SID_ATTR_PARA_MODEL );
     639           0 :         bChanged = true;
     640             :     }
     641             :     else
     642             :     {
     643           0 :         SfxItemSet aCoreSet(rShell.GetView().GetPool(), RES_PAGEDESC, RES_PAGEDESC );
     644           0 :         rShell.GetCurAttr( aCoreSet );
     645           0 :         if(SfxItemState::SET == aCoreSet.GetItemState( RES_PAGEDESC, true, &pItem ) )
     646             :         {
     647           0 :             if( static_cast<const SwFormatPageDesc*>(pItem)->GetPageDesc() )
     648             :             {
     649           0 :                 aPgDesc.RegisterToPageDesc( *const_cast<SwFormatPageDesc*>(static_cast<const SwFormatPageDesc*>(pItem))->GetPageDesc() );
     650             :             }
     651           0 :         }
     652             :     }
     653             : 
     654           0 :     if(bChanged)
     655           0 :         rSet.Put( aPgDesc );
     656           0 : }
     657             : 
     658             : // Inquire if in the set is a Sfx-PageDesc combination present and return it.
     659           0 : void SwToSfxPageDescAttr( SfxItemSet& rCoreSet )
     660             : {
     661           0 :     const SfxPoolItem* pItem = 0;
     662           0 :     OUString aName;
     663           0 :     ::boost::optional<sal_uInt16> oNumOffset;
     664           0 :     bool bPut = true;
     665           0 :     switch( rCoreSet.GetItemState( RES_PAGEDESC, true, &pItem ) )
     666             :     {
     667             :     case SfxItemState::SET:
     668             :         {
     669           0 :             if( static_cast<const SwFormatPageDesc*>(pItem)->GetPageDesc() )
     670             :             {
     671           0 :                 aName = static_cast<const SwFormatPageDesc*>(pItem)->GetPageDesc()->GetName();
     672           0 :                 oNumOffset = static_cast<const SwFormatPageDesc*>(pItem)->GetNumOffset();
     673             :             }
     674           0 :             rCoreSet.ClearItem( RES_PAGEDESC );
     675             :             // Page number
     676             :         }
     677           0 :         break;
     678             : 
     679             :     case SfxItemState::DEFAULT:
     680           0 :         break;
     681             : 
     682             :     default:
     683           0 :         bPut = false;
     684             :     }
     685             : 
     686           0 :     if (oNumOffset)
     687             :     {
     688           0 :         SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM, oNumOffset.get() );
     689           0 :         rCoreSet.Put( aPageNum );
     690             :     }
     691             : 
     692           0 :     if(bPut)
     693           0 :         rCoreSet.Put( SvxPageModelItem( aName, true, SID_ATTR_PARA_MODEL ) );
     694           0 : }
     695             : 
     696             : // Determine metric
     697             : 
     698         727 : FieldUnit   GetDfltMetric(bool bWeb)
     699             : {
     700         727 :     return SW_MOD()->GetUsrPref(bWeb)->GetMetric();
     701             : }
     702             : 
     703             : // Determine metric
     704             : 
     705           0 : void    SetDfltMetric( FieldUnit eMetric, bool bWeb )
     706             : {
     707           0 :     SW_MOD()->ApplyUserMetric(eMetric, bWeb);
     708           0 : }
     709             : 
     710           0 : sal_Int32 InsertStringSorted(const OUString& rEntry, ListBox& rToFill, sal_Int32 nOffset )
     711             : {
     712           0 :     CollatorWrapper& rCaseColl = ::GetAppCaseCollator();
     713           0 :     const sal_Int32 nCount = rToFill.GetEntryCount();
     714           0 :     while (nOffset < nCount)
     715             :     {
     716           0 :         if( 0 < rCaseColl.compareString( rToFill.GetEntry(nOffset), rEntry ))
     717           0 :             break;
     718           0 :         ++nOffset;
     719             :     }
     720           0 :     return rToFill.InsertEntry(rEntry, nOffset);
     721             : }
     722             : 
     723           0 : void FillCharStyleListBox(ListBox& rToFill, SwDocShell* pDocSh, bool bSorted, bool bWithDefault)
     724             : {
     725           0 :     const sal_Int32 nOffset = rToFill.GetEntryCount() > 0 ? 1 : 0;
     726           0 :     SfxStyleSheetBasePool* pPool = pDocSh->GetStyleSheetPool();
     727           0 :     pPool->SetSearchMask(SFX_STYLE_FAMILY_CHAR, SFXSTYLEBIT_ALL);
     728           0 :     SwDoc* pDoc = pDocSh->GetDoc();
     729           0 :     const SfxStyleSheetBase* pBase = pPool->First();
     730           0 :     OUString sStandard;
     731           0 :     SwStyleNameMapper::FillUIName( RES_POOLCOLL_STANDARD, sStandard );
     732           0 :     while(pBase)
     733             :     {
     734           0 :         if(bWithDefault || pBase->GetName() !=  sStandard)
     735             :         {
     736             :             const sal_Int32 nPos = bSorted
     737           0 :                 ? InsertStringSorted(pBase->GetName(), rToFill, nOffset )
     738           0 :                 : rToFill.InsertEntry(pBase->GetName());
     739           0 :             sal_IntPtr nPoolId = SwStyleNameMapper::GetPoolIdFromUIName( pBase->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT );
     740           0 :             rToFill.SetEntryData( nPos, reinterpret_cast<void*>(nPoolId));
     741             :         }
     742           0 :         pBase = pPool->Next();
     743             :     }
     744             :     // non-pool styles
     745           0 :     const SwCharFormats* pFormats = pDoc->GetCharFormats();
     746           0 :     for(size_t i = 0; i < pFormats->size(); ++i)
     747             :     {
     748           0 :         const SwCharFormat* pFormat = (*pFormats)[i];
     749           0 :         if(pFormat->IsDefault())
     750           0 :             continue;
     751           0 :         const OUString& rName = pFormat->GetName();
     752           0 :         if(rToFill.GetEntryPos(rName) == LISTBOX_ENTRY_NOTFOUND)
     753             :         {
     754             :             const sal_Int32 nPos = bSorted
     755             :                 ? InsertStringSorted(rName, rToFill, nOffset )
     756           0 :                 : rToFill.InsertEntry(rName);
     757           0 :             sal_IntPtr nPoolId = USHRT_MAX;
     758           0 :             rToFill.SetEntryData( nPos, reinterpret_cast<void*>(nPoolId));
     759             :         }
     760           0 :     }
     761           0 : };
     762             : 
     763           0 : SwTwips GetTableWidth( SwFrameFormat* pFormat, SwTabCols& rCols, sal_uInt16 *pPercent,
     764             :             SwWrtShell* pSh )
     765             : {
     766             :     // To get the width is slightly more complicated.
     767           0 :     SwTwips nWidth = 0;
     768           0 :     const sal_Int16 eOri = pFormat->GetHoriOrient().GetHoriOrient();
     769           0 :     switch(eOri)
     770             :     {
     771           0 :         case text::HoriOrientation::FULL: nWidth = rCols.GetRight(); break;
     772             :         case text::HoriOrientation::LEFT_AND_WIDTH:
     773             :         case text::HoriOrientation::LEFT:
     774             :         case text::HoriOrientation::RIGHT:
     775             :         case text::HoriOrientation::CENTER:
     776           0 :             nWidth = pFormat->GetFrmSize().GetWidth();
     777           0 :         break;
     778             :         default:
     779             :         {
     780           0 :             if(pSh)
     781             :             {
     782           0 :                 if ( 0 == pSh->GetFlyFrameFormat() )
     783             :                 {
     784           0 :                     nWidth = pSh->GetAnyCurRect(RECT_PAGE_PRT).Width();
     785             :                 }
     786             :                 else
     787             :                 {
     788           0 :                     nWidth = pSh->GetAnyCurRect(RECT_FLY_PRT_EMBEDDED).Width();
     789             :                 }
     790             :             }
     791             :             else
     792             :             {
     793             :                 OSL_FAIL("where to get the actual width from?");
     794             :             }
     795           0 :             const SvxLRSpaceItem& rLRSpace = pFormat->GetLRSpace();
     796           0 :             nWidth -= (rLRSpace.GetRight() + rLRSpace.GetLeft());
     797             :         }
     798             :     }
     799           0 :     if (pPercent)
     800           0 :         *pPercent = pFormat->GetFrmSize().GetWidthPercent();
     801           0 :     return nWidth;
     802             : }
     803             : 
     804           0 : OUString GetAppLangDateTimeString( const DateTime& rDT )
     805             : {
     806           0 :     const SvtSysLocale aSysLocale;
     807           0 :     const LocaleDataWrapper& rAppLclData = aSysLocale.GetLocaleData();
     808           0 :     OUString sRet = rAppLclData.getDate( rDT ) + " " + rAppLclData.getTime( rDT, false, false );
     809           0 :     return sRet;
     810             : }
     811             : 
     812             : // Add a new function which can get and set the current "SID_ATTR_APPLYCHARUNIT" value
     813             : 
     814           0 : bool HasCharUnit( bool bWeb)
     815             : {
     816           0 :     return SW_MOD()->GetUsrPref(bWeb)->IsApplyCharUnit();
     817             : }
     818             : 
     819           0 : void SetApplyCharUnit(bool bApplyChar, bool bWeb)
     820             : {
     821           0 :     SW_MOD()->ApplyUserCharUnit(bApplyChar, bWeb);
     822           0 : }
     823             : 
     824           0 : bool ExecuteMenuCommand( PopupMenu& rMenu, SfxViewFrame& rViewFrame, sal_uInt16 nId )
     825             : {
     826           0 :     bool bRet = false;
     827           0 :     const sal_uInt16 nItemCount = rMenu.GetItemCount();
     828           0 :     OUString sCommand;
     829           0 :     for( sal_uInt16 nItem = 0; nItem < nItemCount; ++nItem)
     830             :     {
     831           0 :         PopupMenu* pPopup = rMenu.GetPopupMenu( rMenu.GetItemId( nItem ) );
     832           0 :         if(pPopup)
     833             :         {
     834           0 :             sCommand = pPopup->GetItemCommand(nId);
     835           0 :             if(!sCommand.isEmpty())
     836           0 :                 break;
     837             :         }
     838             :     }
     839           0 :     if(!sCommand.isEmpty())
     840             :     {
     841           0 :         uno::Reference< frame::XFrame >  xFrame = rViewFrame.GetFrame().GetFrameInterface();
     842           0 :         uno::Reference < frame::XDispatchProvider > xProv( xFrame, uno::UNO_QUERY );
     843           0 :         util::URL aURL;
     844           0 :         aURL.Complete = sCommand;
     845           0 :         uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create(::comphelper::getProcessComponentContext() ) );
     846           0 :         xTrans->parseStrict( aURL );
     847           0 :         uno::Reference< frame::XDispatch >  xDisp = xProv->queryDispatch( aURL, OUString(), 0 );
     848           0 :         if( xDisp.is() )
     849             :         {
     850           0 :             uno::Sequence< beans::PropertyValue > aSeq;
     851           0 :             xDisp->dispatch( aURL, aSeq );
     852           0 :             bRet = true;
     853           0 :         }
     854             :     }
     855           0 :     return bRet;
     856         177 : }
     857             : 
     858             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11