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

Generated by: LCOV version 1.10