LCOV - code coverage report
Current view: top level - libreoffice/sw/source/ui/utlui - uitool.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 174 355 49.0 %
Date: 2012-12-27 Functions: 6 20 30.0 %
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 <sfx2/docfile.hxx>
      31             : #include <sfx2/docfilt.hxx>
      32             : #include <editeng/pmdlitem.hxx>
      33             : #include <editeng/tstpitem.hxx>
      34             : #include <editeng/boxitem.hxx>
      35             : #include <editeng/sizeitem.hxx>
      36             : #include <svx/pageitem.hxx>
      37             : #include <editeng/lrspitem.hxx>
      38             : #include <svl/style.hxx>
      39             : #include <vcl/lstbox.hxx>
      40             : #include <unotools/localedatawrapper.hxx>
      41             : #include <com/sun/star/frame/XDispatch.hpp>
      42             : #include <com/sun/star/frame/XDispatchProvider.hpp>
      43             : #include <com/sun/star/util/URLTransformer.hpp>
      44             : #include <com/sun/star/util/XURLTransformer.hpp>
      45             : #include <comphelper/processfactory.hxx>
      46             : #include <sfx2/viewfrm.hxx>
      47             : #include <fmtornt.hxx>
      48             : #include <tabcol.hxx>
      49             : #include <edtwin.hxx>
      50             : #include <fmtfsize.hxx>
      51             : #include <fmthdft.hxx>
      52             : #include <fmtpdsc.hxx>
      53             : #include <wview.hxx>
      54             : #include <uiitems.hxx>
      55             : #include <docsh.hxx>
      56             : #include <wrtsh.hxx>
      57             : #include <swmodule.hxx>
      58             : #include <view.hxx>
      59             : #include <uitool.hxx>
      60             : #include <frmatr.hxx>
      61             : #include <paratr.hxx>
      62             : #include <fmtcol.hxx>
      63             : #include <poolfmt.hxx>
      64             : #include "usrpref.hxx"
      65             : 
      66             : #include <cmdid.h>
      67             : #include <globals.hrc>
      68             : #include <utlui.hrc>
      69             : #include <doc.hxx>
      70             : #include <docary.hxx>
      71             : #include <charfmt.hxx>
      72             : #include <SwStyleNameMapper.hxx>
      73             : // 50 cm 28350
      74             : //
      75             : #define MAXHEIGHT 28350
      76             : #define MAXWIDTH  28350
      77             : 
      78             : using namespace ::com::sun::star;
      79             : /*--------------------------------------------------------------------
      80             :     Beschreibung: Allgemeine List von StringPointern
      81             :  --------------------------------------------------------------------*/
      82             : 
      83             : 
      84             : /*--------------------------------------------------------------------
      85             :     Beschreibung: Metric umschalten
      86             :  --------------------------------------------------------------------*/
      87             : 
      88             : 
      89           0 : void SetMetric(MetricFormatter& rCtrl, FieldUnit eUnit)
      90             : {
      91           0 :     SwTwips nMin = static_cast< SwTwips >(rCtrl.GetMin(FUNIT_TWIP));
      92           0 :     SwTwips nMax = static_cast< SwTwips >(rCtrl.GetMax(FUNIT_TWIP));
      93             : 
      94           0 :     rCtrl.SetUnit(eUnit);
      95             : 
      96           0 :     rCtrl.SetMin(nMin, FUNIT_TWIP);
      97           0 :     rCtrl.SetMax(nMax, FUNIT_TWIP);
      98           0 : }
      99             : 
     100             : /*--------------------------------------------------------------------
     101             :     Beschreibung:   Boxinfo-Attribut setzen
     102             :  --------------------------------------------------------------------*/
     103             : 
     104             : 
     105           0 : void PrepareBoxInfo(SfxItemSet& rSet, const SwWrtShell& rSh)
     106             : {
     107           0 :     SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
     108             :     const SfxPoolItem *pBoxInfo;
     109           0 :     if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
     110           0 :                                         sal_True, &pBoxInfo))
     111           0 :         aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo;
     112             : 
     113             :         // Tabellenvariante, wenn mehrere Tabellenzellen selektiert
     114           0 :     rSh.GetCrsr();                  //Damit GetCrsrCnt() auch das Richtige liefert
     115           0 :     aBoxInfo.SetTable          (rSh.IsTableMode() && rSh.GetCrsrCnt() > 1);
     116             :         // Abstandsfeld immer anzeigen
     117           0 :     aBoxInfo.SetDist           ((sal_Bool) sal_True);
     118             :         // Minimalgroesse in Tabellen und Absaetzen setzen
     119           0 :     aBoxInfo.SetMinDist        (rSh.IsTableMode() || rSh.GetSelectionType() & (nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL));
     120             :         // Default-Abstand immer setzen
     121           0 :     aBoxInfo.SetDefDist        (MIN_BORDER_DIST);
     122             :         // Einzelne Linien koennen nur in Tabellen DontCare-Status haben
     123           0 :     aBoxInfo.SetValid(VALID_DISABLE, !rSh.IsTableMode());
     124             : 
     125           0 :     rSet.Put(aBoxInfo);
     126           0 : }
     127             : 
     128             : /*--------------------------------------------------------------------
     129             :     Beschreibung:   Header Footer fuellen
     130             :  --------------------------------------------------------------------*/
     131             : 
     132             : 
     133         146 : void FillHdFt(SwFrmFmt* pFmt, const  SfxItemSet& rSet)
     134             : {
     135         146 :     SwAttrSet aSet(pFmt->GetAttrSet());
     136         146 :     aSet.Put(rSet);
     137             : 
     138         146 :     const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE);
     139         146 :     const SfxBoolItem& rDynamic = (const SfxBoolItem&)rSet.Get(SID_ATTR_PAGE_DYNAMIC);
     140             : 
     141             :     // Groesse umsetzen
     142             :     //
     143         146 :     SwFmtFrmSize aFrmSize(rDynamic.GetValue() ? ATT_MIN_SIZE : ATT_FIX_SIZE,
     144         146 :                             rSize.GetSize().Width(),
     145         438 :                             rSize.GetSize().Height());
     146         146 :     aSet.Put(aFrmSize);
     147         146 :     pFmt->SetFmtAttr(aSet);
     148         146 : }
     149             : 
     150             : /// Convert from UseOnPage to SvxPageUsage.
     151        1123 : UseOnPage lcl_convertUseToSvx(UseOnPage nUse)
     152             : {
     153        1123 :     UseOnPage nRet = nsUseOnPage::PD_NONE;
     154        1123 :     if ((nUse & nsUseOnPage::PD_LEFT) == nsUseOnPage::PD_LEFT)
     155        1123 :         nRet |= SVX_PAGE_LEFT;
     156        1123 :     if ((nUse & nsUseOnPage::PD_RIGHT) == nsUseOnPage::PD_RIGHT)
     157        1121 :         nRet |= SVX_PAGE_RIGHT;
     158        1123 :     if ((nUse & nsUseOnPage::PD_ALL) == nsUseOnPage::PD_ALL)
     159        1121 :         nRet |= SVX_PAGE_ALL;
     160        1123 :     if ((nUse & nsUseOnPage::PD_MIRROR) == nsUseOnPage::PD_MIRROR)
     161         102 :         nRet |= SVX_PAGE_MIRROR;
     162        1123 :     return nRet;
     163             : }
     164             : 
     165             : /// Convert from SvxPageUsage to UseOnPage.
     166         411 : UseOnPage lcl_convertUseFromSvx(UseOnPage nUse)
     167             : {
     168         411 :     UseOnPage nRet = nsUseOnPage::PD_NONE;
     169         411 :     if ((nUse & SVX_PAGE_LEFT) == SVX_PAGE_LEFT)
     170         409 :         nRet |= nsUseOnPage::PD_LEFT;
     171         411 :     if ((nUse & SVX_PAGE_RIGHT) == SVX_PAGE_RIGHT)
     172         410 :         nRet |= nsUseOnPage::PD_RIGHT;
     173         411 :     if ((nUse & SVX_PAGE_ALL) == SVX_PAGE_ALL)
     174         408 :         nRet |= nsUseOnPage::PD_ALL;
     175         411 :     if ((nUse & SVX_PAGE_MIRROR) == SVX_PAGE_MIRROR)
     176          26 :         nRet |= nsUseOnPage::PD_MIRROR;
     177         411 :     return nRet;
     178             : }
     179             : 
     180             : /*--------------------------------------------------------------------
     181             :     Beschreibung:   PageDesc <-> in Sets wandeln und zurueck
     182             :  --------------------------------------------------------------------*/
     183             : 
     184             : 
     185         411 : void ItemSetToPageDesc( const SfxItemSet& rSet, SwPageDesc& rPageDesc )
     186             : {
     187         411 :     SwFrmFmt& rMaster = rPageDesc.GetMaster();
     188         411 :     int nFirstShare = -1;
     189             : 
     190             :     // alle allgemeinen Rahmen-Attribute uebertragen
     191             :     //
     192         411 :     rMaster.SetFmtAttr(rSet);
     193             : 
     194             :     // PageData
     195             :     //
     196         411 :     if(rSet.GetItemState(SID_ATTR_PAGE) == SFX_ITEM_SET)
     197             :     {
     198         411 :         const SvxPageItem& rPageItem = (const SvxPageItem&)rSet.Get(SID_ATTR_PAGE);
     199             : 
     200         411 :         sal_uInt16 nUse = (sal_uInt16)rPageItem.GetPageUsage();
     201         411 :         if(nUse & 0x04)
     202          26 :             nUse |= 0x03;
     203         411 :         if(nUse)
     204         411 :             rPageDesc.SetUseOn( lcl_convertUseFromSvx((UseOnPage) nUse) );
     205         411 :         rPageDesc.SetLandscape(rPageItem.IsLandscape());
     206         411 :         SvxNumberType aNumType;
     207         411 :         aNumType.SetNumberingType( static_cast< sal_Int16 >(rPageItem.GetNumType()) );
     208         411 :         rPageDesc.SetNumType(aNumType);
     209             :     }
     210             :     // Groesse
     211             :     //
     212         411 :     if(rSet.GetItemState(SID_ATTR_PAGE_SIZE) == SFX_ITEM_SET)
     213             :     {
     214         411 :         const SvxSizeItem& rSizeItem = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE);
     215         411 :         SwFmtFrmSize aSize(ATT_FIX_SIZE);
     216         411 :         aSize.SetSize(rSizeItem.GetSize());
     217         411 :         rMaster.SetFmtAttr(aSize);
     218             :     }
     219             :     // Kopzeilen-Attribute auswerten
     220             :     //
     221             :     const SfxPoolItem* pItem;
     222         411 :     if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_HEADERSET,
     223         411 :             sal_False, &pItem ) )
     224             :     {
     225          90 :         const SfxItemSet& rHeaderSet = ((SvxSetItem*)pItem)->GetItemSet();
     226          90 :         const SfxBoolItem& rHeaderOn = (const SfxBoolItem&)rHeaderSet.Get(SID_ATTR_PAGE_ON);
     227             : 
     228          90 :         if(rHeaderOn.GetValue())
     229             :         {
     230             :             // Werte uebernehmen
     231          90 :             if(!rMaster.GetHeader().IsActive())
     232          23 :                 rMaster.SetFmtAttr(SwFmtHeader(sal_True));
     233             : 
     234             :             // Das Headerformat rausholen und anpassen
     235             :             //
     236          90 :             SwFmtHeader aHeaderFmt(rMaster.GetHeader());
     237          90 :             SwFrmFmt *pHeaderFmt = aHeaderFmt.GetHeaderFmt();
     238             :             OSL_ENSURE(pHeaderFmt != 0, "no header format");
     239             : 
     240          90 :             ::FillHdFt(pHeaderFmt, rHeaderSet);
     241             : 
     242             :             rPageDesc.ChgHeaderShare(((const SfxBoolItem&)
     243          90 :                         rHeaderSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
     244          90 :             if (nFirstShare < 0)
     245             :             {
     246             :                 rPageDesc.ChgFirstShare(((const SfxBoolItem&)
     247          90 :                             rHeaderSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
     248          90 :                 nFirstShare = rPageDesc.IsFirstShared();
     249          90 :             }
     250             :         }
     251             :         else
     252             :         {   // Header ausschalten
     253             :             //
     254           0 :             if(rMaster.GetHeader().IsActive())
     255             :             {
     256           0 :                 rMaster.SetFmtAttr(SwFmtHeader(sal_Bool(sal_False)));
     257           0 :                 rPageDesc.ChgHeaderShare(sal_False);
     258             :             }
     259             :         }
     260             :     }
     261             : 
     262             :     // Fusszeilen-Attribute auswerten
     263             :     //
     264         411 :     if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_FOOTERSET,
     265         411 :             sal_False, &pItem ) )
     266             :     {
     267          56 :         const SfxItemSet& rFooterSet = ((SvxSetItem*)pItem)->GetItemSet();
     268          56 :         const SfxBoolItem& rFooterOn = (const SfxBoolItem&)rFooterSet.Get(SID_ATTR_PAGE_ON);
     269             : 
     270          56 :         if(rFooterOn.GetValue())
     271             :         {
     272             :             // Werte uebernehmen
     273          56 :             if(!rMaster.GetFooter().IsActive())
     274          19 :                 rMaster.SetFmtAttr(SwFmtFooter(sal_True));
     275             : 
     276             :             // Das Footerformat rausholen und anpassen
     277             :             //
     278          56 :             SwFmtFooter aFooterFmt(rMaster.GetFooter());
     279          56 :             SwFrmFmt *pFooterFmt = aFooterFmt.GetFooterFmt();
     280             :             OSL_ENSURE(pFooterFmt != 0, "no footer format");
     281             : 
     282          56 :             ::FillHdFt(pFooterFmt, rFooterSet);
     283             : 
     284             :             rPageDesc.ChgFooterShare(((const SfxBoolItem&)
     285          56 :                         rFooterSet.Get(SID_ATTR_PAGE_SHARED)).GetValue());
     286          56 :             if (nFirstShare < 0)
     287             :             {
     288             :                 rPageDesc.ChgFirstShare(((const SfxBoolItem&)
     289           6 :                             rFooterSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
     290           6 :                 nFirstShare = rPageDesc.IsFirstShared();
     291          56 :             }
     292             :         }
     293             :         else
     294             :         {   // Footer ausschalten
     295             :             //
     296           0 :             if(rMaster.GetFooter().IsActive())
     297             :             {
     298           0 :                 rMaster.SetFmtAttr(SwFmtFooter(sal_Bool(sal_False)));
     299           0 :                 rPageDesc.ChgFooterShare(sal_False);
     300             :             }
     301             :         }
     302             :     }
     303             : 
     304             :     // Fussnoten
     305             :     //
     306         411 :     if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_FTN_INFO,
     307         411 :             sal_False, &pItem ) )
     308         411 :         rPageDesc.SetFtnInfo( ((SwPageFtnInfoItem*)pItem)->GetPageFtnInfo() );
     309             : 
     310             : 
     311             :     //
     312             :     // Columns
     313             :     //
     314             : 
     315             :     // Registerhaltigkeit
     316             : 
     317         411 :     if(SFX_ITEM_SET == rSet.GetItemState(
     318         411 :                             SID_SWREGISTER_MODE, sal_False, &pItem))
     319             :     {
     320         411 :         sal_Bool bSet = ((const SfxBoolItem*)pItem)->GetValue();
     321         411 :         if(!bSet)
     322         411 :             rPageDesc.SetRegisterFmtColl(0);
     323           0 :         else if(SFX_ITEM_SET == rSet.GetItemState(
     324           0 :                                 SID_SWREGISTER_COLLECTION, sal_False, &pItem))
     325             :         {
     326           0 :             const String& rColl = ((const SfxStringItem*)pItem)->GetValue();
     327           0 :             SwDoc& rDoc = *rMaster.GetDoc();
     328           0 :             SwTxtFmtColl* pColl = rDoc.FindTxtFmtCollByName( rColl );
     329           0 :             if( !pColl )
     330             :             {
     331           0 :                 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rColl, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     332           0 :                 if( USHRT_MAX != nId )
     333           0 :                     pColl = rDoc.GetTxtCollFromPool( nId );
     334             :                 else
     335             :                     pColl = rDoc.MakeTxtFmtColl( rColl,
     336           0 :                                 (SwTxtFmtColl*)rDoc.GetDfltTxtFmtColl() );
     337             :             }
     338           0 :             if( pColl )
     339           0 :                 pColl->SetFmtAttr( SwRegisterItem ( sal_True ));
     340           0 :             rPageDesc.SetRegisterFmtColl( pColl );
     341             :         }
     342             :     }
     343         411 : }
     344             : 
     345        1123 : void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
     346             : {
     347        1123 :     const SwFrmFmt& rMaster = rPageDesc.GetMaster();
     348             : 
     349             :     // Seitendaten
     350             :     //
     351        1123 :     SvxPageItem aPageItem(SID_ATTR_PAGE);
     352        1123 :     aPageItem.SetDescName(rPageDesc.GetName());
     353        1123 :     aPageItem.SetPageUsage(lcl_convertUseToSvx(rPageDesc.GetUseOn()));
     354        1123 :     aPageItem.SetLandscape(rPageDesc.GetLandscape());
     355        1123 :     aPageItem.SetNumType((SvxNumType)rPageDesc.GetNumType().GetNumberingType());
     356        1123 :     rSet.Put(aPageItem);
     357             : 
     358             :     // Groesse
     359        1123 :     SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, rMaster.GetFrmSize().GetSize());
     360        1123 :     rSet.Put(aSizeItem);
     361             : 
     362             :     // Maximale Groesse
     363        1123 :     SvxSizeItem aMaxSizeItem(SID_ATTR_PAGE_MAXSIZE, Size(MAXWIDTH, MAXHEIGHT));
     364        1123 :     rSet.Put(aMaxSizeItem);
     365             : 
     366             :     // Raender, Umrandung und das andere Zeug
     367             :     //
     368        1123 :     rSet.Put(rMaster.GetAttrSet());
     369             : 
     370        1123 :     SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
     371             :     const SfxPoolItem *pBoxInfo;
     372        1123 :     if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER,
     373        1123 :                                             sal_True, &pBoxInfo) )
     374          28 :         aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo;
     375             : 
     376        1123 :     aBoxInfo.SetTable( sal_False );
     377             :         // Abstandsfeld immer anzeigen
     378        1123 :     aBoxInfo.SetDist( sal_True);
     379             :         // Minimalgroesse in Tabellen und Absaetzen setzen
     380        1123 :     aBoxInfo.SetMinDist( sal_False );
     381             :     // Default-Abstand immer setzen
     382        1123 :     aBoxInfo.SetDefDist( MIN_BORDER_DIST );
     383             :         // Einzelne Linien koennen nur in Tabellen DontCare-Status haben
     384        1123 :     aBoxInfo.SetValid( VALID_DISABLE );
     385        1123 :     rSet.Put( aBoxInfo );
     386             : 
     387             : 
     388        1123 :     SfxStringItem aFollow(SID_ATTR_PAGE_EXT1, aEmptyStr);
     389        1123 :     if(rPageDesc.GetFollow())
     390        1123 :         aFollow.SetValue(rPageDesc.GetFollow()->GetName());
     391        1123 :     rSet.Put(aFollow);
     392             : 
     393             :     // Header
     394             :     //
     395        1123 :     if(rMaster.GetHeader().IsActive())
     396             :     {
     397         226 :         const SwFmtHeader &rHeaderFmt = rMaster.GetHeader();
     398         226 :         const SwFrmFmt *pHeaderFmt = rHeaderFmt.GetHeaderFmt();
     399             :         OSL_ENSURE(pHeaderFmt != 0, "no header format");
     400             : 
     401             :         // HeaderInfo, Raender, Hintergrund, Umrandung
     402             :         //
     403         226 :         SfxItemSet aHeaderSet( *rSet.GetPool(),
     404             :                     SID_ATTR_PAGE_ON,       SID_ATTR_PAGE_SHARED,
     405             :                     SID_ATTR_PAGE_SHARED_FIRST, SID_ATTR_PAGE_SHARED_FIRST,
     406             :                     SID_ATTR_PAGE_SIZE,     SID_ATTR_PAGE_SIZE,
     407             :                     SID_ATTR_BORDER_INNER,  SID_ATTR_BORDER_INNER,
     408             :                     RES_FRMATR_BEGIN,       RES_FRMATR_END-1,
     409         226 :                     0);
     410             : 
     411             :         // dynamische oder feste Hoehe
     412             :         //
     413         226 :         SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True);
     414         226 :         aHeaderSet.Put(aOn);
     415             : 
     416         226 :         const SwFmtFrmSize &rFrmSize = pHeaderFmt->GetFrmSize();
     417         226 :         const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
     418         226 :         SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
     419         226 :         aHeaderSet.Put(aDynamic);
     420             : 
     421             :         // Links gleich rechts
     422             :         //
     423         226 :         SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsHeaderShared());
     424         226 :         aHeaderSet.Put(aShared);
     425         226 :         SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
     426         226 :         aHeaderSet.Put(aFirstShared);
     427             : 
     428             :         // Groesse
     429         226 :         SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
     430         226 :         aHeaderSet.Put(aSize);
     431             : 
     432             :         // Rahmen-Attribute umschaufeln
     433             :         //
     434         226 :         aHeaderSet.Put(pHeaderFmt->GetAttrSet());
     435         226 :         aHeaderSet.Put( aBoxInfo );
     436             : 
     437             :         // SetItem erzeugen
     438             :         //
     439         226 :         SvxSetItem aSetItem(SID_ATTR_PAGE_HEADERSET, aHeaderSet);
     440         226 :         rSet.Put(aSetItem);
     441             :     }
     442             : 
     443             :     // Footer
     444        1123 :     if(rMaster.GetFooter().IsActive())
     445             :     {
     446         153 :         const SwFmtFooter &rFooterFmt = rMaster.GetFooter();
     447         153 :         const SwFrmFmt *pFooterFmt = rFooterFmt.GetFooterFmt();
     448             :         OSL_ENSURE(pFooterFmt != 0, "no footer format");
     449             : 
     450             :         // FooterInfo, Raender, Hintergrund, Umrandung
     451             :         //
     452         153 :         SfxItemSet aFooterSet( *rSet.GetPool(),
     453             :                     SID_ATTR_PAGE_ON,       SID_ATTR_PAGE_SHARED,
     454             :                     SID_ATTR_PAGE_SHARED_FIRST, SID_ATTR_PAGE_SHARED_FIRST,
     455             :                     SID_ATTR_PAGE_SIZE,     SID_ATTR_PAGE_SIZE,
     456             :                     SID_ATTR_BORDER_INNER,  SID_ATTR_BORDER_INNER,
     457             :                     RES_FRMATR_BEGIN,       RES_FRMATR_END-1,
     458         153 :                     0);
     459             : 
     460             :         // dynamische oder feste Hoehe
     461             :         //
     462         153 :         SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True);
     463         153 :         aFooterSet.Put(aOn);
     464             : 
     465         153 :         const SwFmtFrmSize &rFrmSize = pFooterFmt->GetFrmSize();
     466         153 :         const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType();
     467         153 :         SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE);
     468         153 :         aFooterSet.Put(aDynamic);
     469             : 
     470             :         // Links gleich rechts
     471             :         //
     472         153 :         SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsFooterShared());
     473         153 :         aFooterSet.Put(aShared);
     474         153 :         SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
     475         153 :         aFooterSet.Put(aFirstShared);
     476             : 
     477             :         // Groesse
     478         153 :         SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize()));
     479         153 :         aFooterSet.Put(aSize);
     480             : 
     481             :         // Rahmen-Attribute umschaufeln
     482             :         //
     483         153 :         aFooterSet.Put(pFooterFmt->GetAttrSet());
     484         153 :         aFooterSet.Put( aBoxInfo );
     485             : 
     486             :         // SetItem erzeugen
     487             :         //
     488         153 :         SvxSetItem aSetItem(SID_ATTR_PAGE_FOOTERSET, aFooterSet);
     489         153 :         rSet.Put(aSetItem);
     490             :     }
     491             : 
     492             :     // Fussnoten einbauen
     493             :     //
     494        1123 :     SwPageFtnInfo& rInfo = (SwPageFtnInfo&)rPageDesc.GetFtnInfo();
     495        1123 :     SwPageFtnInfoItem aFtnItem(FN_PARAM_FTN_INFO, rInfo);
     496        1123 :     rSet.Put(aFtnItem);
     497             : 
     498             :     // Registerhaltigkeit
     499             : 
     500        1123 :     const SwTxtFmtColl* pCol = rPageDesc.GetRegisterFmtColl();
     501        1123 :     SwRegisterItem aReg(pCol != 0);
     502        1123 :     aReg.SetWhich(SID_SWREGISTER_MODE);
     503        1123 :     rSet.Put(aReg);
     504        1123 :     if(pCol)
     505           0 :         rSet.Put(SfxStringItem(SID_SWREGISTER_COLLECTION, pCol->GetName()));
     506             : 
     507        1123 : }
     508             : 
     509             : 
     510             : /*--------------------------------------------------------------------
     511             :     Beschreibung:   DefaultTabs setzen
     512             :  --------------------------------------------------------------------*/
     513             : 
     514             : 
     515           0 : void MakeDefTabs(SwTwips nDefDist, SvxTabStopItem& rTabs)
     516             : {
     517           0 :     if( rTabs.Count() )
     518           0 :         return;
     519             :     {
     520           0 :         SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
     521           0 :         rTabs.Insert( aSwTabStop );
     522             :     }
     523             : }
     524             : 
     525             : /*--------------------------------------------------------------------
     526             :     Beschreibung:   Abstand zwischen zwei Tabs
     527             :  --------------------------------------------------------------------*/
     528             : 
     529             : 
     530         104 : sal_uInt16 GetTabDist(const SvxTabStopItem& rTabs)
     531             : {
     532             :     sal_uInt16 nDefDist;
     533         104 :     if( rTabs.Count() )
     534         104 :         nDefDist = (sal_uInt16)( rTabs[0].GetTabPos() );
     535             :     else
     536           0 :         nDefDist = 1134;     // 2cm
     537         104 :     return nDefDist;
     538             : }
     539             : 
     540             : 
     541             : // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese
     542           0 : void SfxToSwPageDescAttr( const SwWrtShell& rShell, SfxItemSet& rSet )
     543             : {
     544             :     const SfxPoolItem* pItem;
     545           0 :     SwFmtPageDesc aPgDesc;
     546             : 
     547           0 :     sal_Bool bChanged = sal_False;
     548             :     // Seitennummer
     549           0 :     if(SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_PARA_PAGENUM, sal_False, &pItem))
     550             :     {
     551           0 :         aPgDesc.SetNumOffset(((SfxUInt16Item*)pItem)->GetValue());
     552           0 :         bChanged = sal_True;
     553             :     }
     554           0 :     if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PARA_MODEL, sal_False, &pItem ))
     555             :     {
     556           0 :         const String& rDescName = ((SvxPageModelItem*)pItem)->GetValue();
     557           0 :         if( rDescName.Len() )   // kein Name -> PageDesc ausschalten!
     558             :         {
     559             :             // nur loeschen, wenn PageDesc eingschaltet wird!
     560           0 :             rSet.ClearItem( RES_BREAK );
     561             :             SwPageDesc* pDesc = ((SwWrtShell&)rShell).FindPageDescByName(
     562           0 :                                                     rDescName, sal_True );
     563           0 :             if( pDesc )
     564           0 :                 aPgDesc.RegisterToPageDesc( *pDesc );
     565             :         }
     566           0 :         rSet.ClearItem( SID_ATTR_PARA_MODEL );
     567           0 :         bChanged = sal_True;
     568             :     }
     569             :     else
     570             :     {
     571           0 :         SfxItemSet aCoreSet(rShell.GetView().GetPool(), RES_PAGEDESC, RES_PAGEDESC );
     572           0 :         rShell.GetCurAttr( aCoreSet );
     573           0 :         if(SFX_ITEM_SET == aCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) )
     574             :         {
     575           0 :             if( ((SwFmtPageDesc*)pItem)->GetPageDesc() )
     576             :             {
     577           0 :                 aPgDesc.RegisterToPageDesc( *((SwFmtPageDesc*)pItem)->GetPageDesc() );
     578             :             }
     579           0 :         }
     580             :     }
     581             : 
     582             : 
     583           0 :     if(bChanged)
     584           0 :         rSet.Put( aPgDesc );
     585           0 : }
     586             : 
     587             : 
     588             : // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese
     589           0 : void SwToSfxPageDescAttr( SfxItemSet& rCoreSet )
     590             : {
     591           0 :     const SfxPoolItem* pItem = 0;
     592           0 :     String aName;
     593           0 :     sal_uInt16 nPageNum = 0;
     594           0 :     sal_Bool bPut = sal_True;
     595           0 :     switch( rCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) )
     596             :     {
     597             :     case SFX_ITEM_SET:
     598             :         {
     599           0 :             if( ((SwFmtPageDesc*)pItem)->GetPageDesc() )
     600             :             {
     601           0 :                 aName = ((SwFmtPageDesc*)pItem)->GetPageDesc()->GetName();
     602           0 :                 nPageNum = ((SwFmtPageDesc*)pItem)->GetNumOffset();
     603             :             }
     604           0 :             rCoreSet.ClearItem( RES_PAGEDESC );
     605             :             // Seitennummer
     606             :         }
     607           0 :         break;
     608             : 
     609             :     case SFX_ITEM_AVAILABLE:
     610           0 :         break;
     611             : 
     612             :     default:
     613           0 :         bPut = sal_False;
     614             :     }
     615           0 :     SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM, nPageNum );
     616           0 :     rCoreSet.Put( aPageNum );
     617             : 
     618           0 :     if(bPut)
     619           0 :         rCoreSet.Put( SvxPageModelItem( aName, sal_True, SID_ATTR_PARA_MODEL ) );
     620           0 : }
     621             : 
     622             : /*--------------------------------------------------------------------
     623             :     Beschreibung:   Metric ermitteln
     624             :  --------------------------------------------------------------------*/
     625             : 
     626             : 
     627           0 : FieldUnit   GetDfltMetric(sal_Bool bWeb)
     628             : {
     629           0 :     return SW_MOD()->GetUsrPref(bWeb)->GetMetric();
     630             : }
     631             : 
     632             : /*--------------------------------------------------------------------
     633             :     Beschreibung:   Metric ermitteln
     634             :  --------------------------------------------------------------------*/
     635             : 
     636             : 
     637           0 : void    SetDfltMetric( FieldUnit eMetric, sal_Bool bWeb )
     638             : {
     639           0 :     SW_MOD()->ApplyUserMetric(eMetric, bWeb);
     640           0 : }
     641             : 
     642           0 : sal_uInt16 InsertStringSorted(const String& rEntry, ListBox& rToFill, sal_uInt16 nOffset )
     643             : {
     644           0 :     sal_uInt16 i = nOffset;
     645           0 :     CollatorWrapper& rCaseColl = ::GetAppCaseCollator();
     646             : 
     647           0 :     for( ; i < rToFill.GetEntryCount(); i++ )
     648             :     {
     649           0 :         if( 0 < rCaseColl.compareString( rToFill.GetEntry(i), rEntry ))
     650           0 :             break;
     651             :     }
     652           0 :     return rToFill.InsertEntry(rEntry, i);
     653             : }
     654           0 : void FillCharStyleListBox(ListBox& rToFill, SwDocShell* pDocSh, sal_Bool bSorted, sal_Bool bWithDefault)
     655             : {
     656           0 :     sal_Bool bHasOffset = rToFill.GetEntryCount() > 0;
     657           0 :     SfxStyleSheetBasePool* pPool = pDocSh->GetStyleSheetPool();
     658           0 :     pPool->SetSearchMask(SFX_STYLE_FAMILY_CHAR, SFXSTYLEBIT_ALL);
     659           0 :     SwDoc* pDoc = pDocSh->GetDoc();
     660           0 :     const SfxStyleSheetBase* pBase = pPool->First();
     661           0 :     String sStandard;
     662           0 :     SwStyleNameMapper::FillUIName( RES_POOLCOLL_STANDARD, sStandard );
     663           0 :     while(pBase)
     664             :     {
     665           0 :         if(bWithDefault || pBase->GetName() !=  sStandard)
     666             :         {
     667             :             sal_uInt16 nPos;
     668           0 :             if(bSorted)
     669           0 :                 nPos = InsertStringSorted(pBase->GetName(), rToFill, bHasOffset );
     670             :             else
     671           0 :                 nPos = rToFill.InsertEntry(pBase->GetName());
     672           0 :             long nPoolId = SwStyleNameMapper::GetPoolIdFromUIName( pBase->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT );
     673           0 :             rToFill.SetEntryData( nPos, (void*) (nPoolId));
     674             :         }
     675           0 :         pBase = pPool->Next();
     676             :     }
     677             :     // non-pool styles
     678           0 :     const SwCharFmts* pFmts = pDoc->GetCharFmts();
     679           0 :     for(sal_uInt16 i = 0; i < pFmts->size(); i++)
     680             :     {
     681           0 :         const SwCharFmt* pFmt = (*pFmts)[i];
     682           0 :         if(pFmt->IsDefault())
     683           0 :             continue;
     684           0 :         const String& rName = pFmt->GetName();
     685           0 :         if(rToFill.GetEntryPos(rName) == LISTBOX_ENTRY_NOTFOUND)
     686             :         {
     687             :             sal_uInt16 nPos;
     688           0 :             if(bSorted)
     689           0 :                 nPos = InsertStringSorted(rName, rToFill, bHasOffset );
     690             :             else
     691           0 :                 nPos = rToFill.InsertEntry(rName);
     692           0 :             long nPoolId = USHRT_MAX;
     693           0 :             rToFill.SetEntryData( nPos, (void*) (nPoolId));
     694             :         }
     695           0 :     }
     696           0 : };
     697             : 
     698           0 : SwTwips GetTableWidth( SwFrmFmt* pFmt, SwTabCols& rCols, sal_uInt16 *pPercent,
     699             :             SwWrtShell* pSh )
     700             : {
     701             :     //Die Breite zu besorgen ist etwas komplizierter.
     702           0 :     SwTwips nWidth = 0;
     703           0 :     const sal_Int16 eOri = pFmt->GetHoriOrient().GetHoriOrient();
     704           0 :     switch(eOri)
     705             :     {
     706           0 :         case text::HoriOrientation::FULL: nWidth = rCols.GetRight(); break;
     707             :         case text::HoriOrientation::LEFT_AND_WIDTH:
     708             :         case text::HoriOrientation::LEFT:
     709             :         case text::HoriOrientation::RIGHT:
     710             :         case text::HoriOrientation::CENTER:
     711           0 :             nWidth = pFmt->GetFrmSize().GetWidth();
     712           0 :         break;
     713             :         default:
     714             :         {
     715           0 :             if(pSh)
     716             :             {
     717           0 :                 if ( 0 == pSh->GetFlyFrmFmt() )
     718             :                 {
     719           0 :                     nWidth = pSh->GetAnyCurRect(RECT_PAGE_PRT).Width();
     720             :                 }
     721             :                 else
     722             :                 {
     723           0 :                     nWidth = pSh->GetAnyCurRect(RECT_FLY_PRT_EMBEDDED).Width();
     724             :                 }
     725             :             }
     726             :             else
     727             :             {
     728             :                 OSL_FAIL("where to get the actual width from?");
     729             :             }
     730           0 :             const SvxLRSpaceItem& rLRSpace = pFmt->GetLRSpace();
     731           0 :             nWidth -= (rLRSpace.GetRight() + rLRSpace.GetLeft());
     732             :         }
     733             :     }
     734           0 :     if (pPercent)
     735           0 :         *pPercent = pFmt->GetFrmSize().GetWidthPercent();
     736           0 :     return nWidth;
     737             : }
     738             : 
     739           0 : String GetAppLangDateTimeString( const DateTime& rDT )
     740             : {
     741           0 :     const SvtSysLocale aSysLocale;
     742           0 :     const LocaleDataWrapper& rAppLclData = aSysLocale.GetLocaleData();
     743           0 :     String sRet( rAppLclData.getDate( rDT ));
     744           0 :     ( sRet += ' ' ) += rAppLclData.getTime( rDT, sal_False, sal_False );
     745           0 :     return sRet;
     746             : }
     747             : 
     748             : /*----------------------------------------------------------------------------
     749             :  * add a new function which can get and set the current "SID_ATTR_APPLYCHARUNIT" value
     750             :  *---------------------------------------------------------------------------*/
     751           0 : sal_Bool HasCharUnit( sal_Bool bWeb)
     752             : {
     753           0 :     return SW_MOD()->GetUsrPref(bWeb)->IsApplyCharUnit();
     754             : }
     755             : 
     756           0 : void SetApplyCharUnit(sal_Bool bApplyChar, sal_Bool bWeb)
     757             : {
     758           0 :     SW_MOD()->ApplyUserCharUnit(bApplyChar, bWeb);
     759           0 : }
     760             : 
     761           0 : bool ExecuteMenuCommand( PopupMenu& rMenu, SfxViewFrame& rViewFrame, sal_uInt16 nId )
     762             : {
     763           0 :     bool bRet = false;
     764           0 :     sal_uInt16 nItemCount = rMenu.GetItemCount();
     765           0 :     String sCommand;
     766           0 :     for( sal_uInt16 nItem = 0; nItem < nItemCount; ++nItem)
     767             :     {
     768           0 :         PopupMenu* pPopup = rMenu.GetPopupMenu( rMenu.GetItemId( nItem ) );
     769           0 :         if(pPopup)
     770             :         {
     771           0 :             sCommand = pPopup->GetItemCommand(nId);
     772           0 :             if(sCommand.Len())
     773           0 :                 break;
     774             :         }
     775             :     }
     776           0 :     if(sCommand.Len())
     777             :     {
     778           0 :         uno::Reference< frame::XFrame >  xFrame = rViewFrame.GetFrame().GetFrameInterface();
     779           0 :         uno::Reference < frame::XDispatchProvider > xProv( xFrame, uno::UNO_QUERY );
     780           0 :         util::URL aURL;
     781           0 :         aURL.Complete = sCommand;
     782           0 :         uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create(::comphelper::getProcessComponentContext() ) );
     783           0 :         xTrans->parseStrict( aURL );
     784           0 :         uno::Reference< frame::XDispatch >  xDisp = xProv->queryDispatch( aURL, ::rtl::OUString(), 0 );
     785           0 :         if( xDisp.is() )
     786             :         {
     787           0 :             uno::Sequence< beans::PropertyValue > aSeq;
     788           0 :             xDisp->dispatch( aURL, aSeq );
     789           0 :             bRet = true;
     790           0 :         }
     791             :     }
     792           0 :     return bRet;
     793             : }
     794             : 
     795             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10