LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/dlg - tpoption.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 393 0.0 %
Date: 2012-12-27 Functions: 0 32 0.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             : 
      21             : #ifdef SD_DLLIMPLEMENTATION
      22             : #undef SD_DLLIMPLEMENTATION
      23             : #endif
      24             : 
      25             : #include <com/sun/star/document/PrinterIndependentLayout.hpp>
      26             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      27             : #include <com/sun/star/frame/Desktop.hpp>
      28             : #include <com/sun/star/lang/XComponent.hpp>
      29             : #include <com/sun/star/container/XEnumerationAccess.hpp>
      30             : #include <comphelper/processfactory.hxx>
      31             : #include <comphelper/string.hxx>
      32             : #include <com/sun/star/uno/Exception.hpp>
      33             : #include <sfx2/module.hxx>
      34             : #include <sfx2/app.hxx>
      35             : #include <svx/svxids.hrc>
      36             : #include <svx/dialogs.hrc>
      37             : #include <svx/strarray.hxx>
      38             : #include <svx/dlgutil.hxx>
      39             : #include <vcl/msgbox.hxx>
      40             : 
      41             : #include "sdattr.hxx"
      42             : #include "sdresid.hxx"
      43             : #include "optsitem.hxx"
      44             : #include "tpoption.hrc"
      45             : #include "tpoption.hxx"
      46             : #include "strings.hrc"
      47             : #include "app.hrc"
      48             : #include <svl/intitem.hxx>
      49             : #include <sfx2/request.hxx>
      50             : 
      51             : using namespace ::com::sun::star;
      52             : using namespace ::com::sun::star::uno;
      53             : 
      54           0 : SdTpOptionsSnap::SdTpOptionsSnap( Window* pParent, const SfxItemSet& rInAttrs  ) :
      55           0 :         SvxGridTabPage(pParent, rInAttrs)
      56             : {
      57           0 :     aGrpSnap.Show();
      58           0 :     aCbxSnapHelplines.Show();
      59           0 :     aCbxSnapBorder.Show();
      60           0 :     aCbxSnapFrame.Show();
      61           0 :     aCbxSnapPoints.Show();
      62           0 :     aFtSnapArea.Show();
      63           0 :     aMtrFldSnapArea.Show();
      64           0 :     aGrpOrtho.Show();
      65           0 :     aCbxOrtho.Show();
      66           0 :     aCbxBigOrtho.Show();
      67           0 :     aCbxRotate.Show();
      68           0 :     aMtrFldAngle.Show();
      69           0 :     aFtBezAngle.Show();
      70           0 :     aMtrFldBezAngle.Show();
      71           0 :     aSeparatorFL.Show();
      72           0 : }
      73             : 
      74             : // -----------------------------------------------------------------------
      75             : 
      76           0 : SdTpOptionsSnap::~SdTpOptionsSnap()
      77             : {
      78           0 : }
      79             : 
      80             : // -----------------------------------------------------------------------
      81             : 
      82           0 : sal_Bool SdTpOptionsSnap::FillItemSet( SfxItemSet& rAttrs )
      83             : {
      84           0 :     SvxGridTabPage::FillItemSet(rAttrs);
      85           0 :     SdOptionsSnapItem* pOptsItem = NULL;
      86           0 :     SdOptionsSnapItem aOptsItem( ATTR_OPTIONS_SNAP );
      87             : 
      88           0 :     aOptsItem.GetOptionsSnap().SetSnapHelplines( aCbxSnapHelplines.IsChecked() );
      89           0 :     aOptsItem.GetOptionsSnap().SetSnapBorder( aCbxSnapBorder.IsChecked() );
      90           0 :     aOptsItem.GetOptionsSnap().SetSnapFrame( aCbxSnapFrame.IsChecked() );
      91           0 :     aOptsItem.GetOptionsSnap().SetSnapPoints( aCbxSnapPoints.IsChecked() );
      92           0 :     aOptsItem.GetOptionsSnap().SetOrtho( aCbxOrtho.IsChecked() );
      93           0 :     aOptsItem.GetOptionsSnap().SetBigOrtho( aCbxBigOrtho.IsChecked() );
      94           0 :     aOptsItem.GetOptionsSnap().SetRotate( aCbxRotate.IsChecked() );
      95           0 :     aOptsItem.GetOptionsSnap().SetSnapArea( (sal_Int16) aMtrFldSnapArea.GetValue() );
      96           0 :     aOptsItem.GetOptionsSnap().SetAngle( (sal_Int16) aMtrFldAngle.GetValue() );
      97           0 :     aOptsItem.GetOptionsSnap().SetEliminatePolyPointLimitAngle( (sal_Int16) aMtrFldBezAngle.GetValue() );
      98             : 
      99           0 :     if( pOptsItem == NULL || !(aOptsItem == *pOptsItem) )
     100           0 :         rAttrs.Put( aOptsItem );
     101             : 
     102             :     // Evtl. vorhandenes GridItem wird geholt, um nicht versehentlich
     103             :     // irgendwelche Standardwerte einzustellen
     104           0 :     return( sal_True );
     105             : }
     106             : 
     107             : // -----------------------------------------------------------------------
     108             : 
     109           0 : void SdTpOptionsSnap::Reset( const SfxItemSet& rAttrs )
     110             : {
     111           0 :     SvxGridTabPage::Reset(rAttrs);
     112             : 
     113             :     SdOptionsSnapItem aOptsItem( (const SdOptionsSnapItem&) rAttrs.
     114           0 :                         Get( ATTR_OPTIONS_SNAP ) );
     115             : 
     116           0 :     aCbxSnapHelplines.Check( aOptsItem.GetOptionsSnap().IsSnapHelplines() );
     117           0 :     aCbxSnapBorder.Check( aOptsItem.GetOptionsSnap().IsSnapBorder() );
     118           0 :     aCbxSnapFrame.Check( aOptsItem.GetOptionsSnap().IsSnapFrame() );
     119           0 :     aCbxSnapPoints.Check( aOptsItem.GetOptionsSnap().IsSnapPoints() );
     120           0 :     aCbxOrtho.Check( aOptsItem.GetOptionsSnap().IsOrtho() );
     121           0 :     aCbxBigOrtho.Check( aOptsItem.GetOptionsSnap().IsBigOrtho() );
     122           0 :     aCbxRotate.Check( aOptsItem.GetOptionsSnap().IsRotate() );
     123           0 :     aMtrFldSnapArea.SetValue( aOptsItem.GetOptionsSnap().GetSnapArea() );
     124           0 :     aMtrFldAngle.SetValue( aOptsItem.GetOptionsSnap().GetAngle() );
     125           0 :     aMtrFldBezAngle.SetValue( aOptsItem.GetOptionsSnap().GetEliminatePolyPointLimitAngle() );
     126             : 
     127           0 :     aCbxRotate.GetClickHdl().Call(0);
     128           0 : }
     129             : 
     130             : // -----------------------------------------------------------------------
     131             : 
     132           0 : SfxTabPage* SdTpOptionsSnap::Create( Window* pWindow,
     133             :                 const SfxItemSet& rAttrs )
     134             : {
     135           0 :     return( new SdTpOptionsSnap( pWindow, rAttrs ) );
     136             : }
     137             : 
     138             : /*************************************************************************
     139             : |*
     140             : |*  TabPage zum Einstellen der Inhalte-Optionen
     141             : |*
     142             : \************************************************************************/
     143             : 
     144           0 : SdTpOptionsContents::SdTpOptionsContents( Window* pParent, const SfxItemSet& rInAttrs  ) :
     145             :         SfxTabPage          ( pParent, SdResId( TP_OPTIONS_CONTENTS ), rInAttrs ),
     146             :         aGrpDisplay         ( this, SdResId( GRP_DISPLAY ) ),
     147             :         aCbxRuler           ( this, SdResId( CBX_RULER ) ),
     148             :         aCbxDragStripes     ( this, SdResId( CBX_HELPLINES ) ),
     149             :         aCbxHandlesBezier   ( this, SdResId( CBX_HANDLES_BEZIER ) ),
     150           0 :         aCbxMoveOutline     ( this, SdResId( CBX_MOVE_OUTLINE ) )
     151             : {
     152           0 :     FreeResource();
     153           0 : }
     154             : 
     155             : // -----------------------------------------------------------------------
     156             : 
     157           0 : SdTpOptionsContents::~SdTpOptionsContents()
     158             : {
     159           0 : }
     160             : 
     161             : // -----------------------------------------------------------------------
     162             : 
     163           0 : sal_Bool SdTpOptionsContents::FillItemSet( SfxItemSet& rAttrs )
     164             : {
     165           0 :     sal_Bool bModified = sal_False;
     166             : 
     167           0 :     if( aCbxRuler.GetSavedValue()           != aCbxRuler.IsChecked() ||
     168           0 :         aCbxMoveOutline.GetSavedValue()     != aCbxMoveOutline.IsChecked() ||
     169           0 :         aCbxDragStripes.GetSavedValue()     != aCbxDragStripes.IsChecked() ||
     170           0 :         aCbxHandlesBezier.GetSavedValue()   != aCbxHandlesBezier.IsChecked() )
     171             :     {
     172           0 :         SdOptionsLayoutItem aOptsItem( ATTR_OPTIONS_LAYOUT );
     173             : 
     174           0 :         aOptsItem.GetOptionsLayout().SetRulerVisible( aCbxRuler.IsChecked() );
     175           0 :         aOptsItem.GetOptionsLayout().SetMoveOutline( aCbxMoveOutline.IsChecked() );
     176           0 :         aOptsItem.GetOptionsLayout().SetDragStripes( aCbxDragStripes.IsChecked() );
     177           0 :         aOptsItem.GetOptionsLayout().SetHandlesBezier( aCbxHandlesBezier.IsChecked() );
     178             : 
     179           0 :         rAttrs.Put( aOptsItem );
     180           0 :         bModified = sal_True;
     181             :     }
     182           0 :     return( bModified );
     183             : }
     184             : 
     185             : // -----------------------------------------------------------------------
     186             : 
     187           0 : void SdTpOptionsContents::Reset( const SfxItemSet& rAttrs )
     188             : {
     189             :     SdOptionsContentsItem aOptsItem( (const SdOptionsContentsItem&) rAttrs.
     190           0 :                         Get( ATTR_OPTIONS_CONTENTS ) );
     191             : 
     192             :     SdOptionsLayoutItem aLayoutItem( (const SdOptionsLayoutItem&) rAttrs.
     193           0 :                         Get( ATTR_OPTIONS_LAYOUT ) );
     194             : 
     195           0 :     aCbxRuler.Check( aLayoutItem.GetOptionsLayout().IsRulerVisible() );
     196           0 :     aCbxMoveOutline.Check( aLayoutItem.GetOptionsLayout().IsMoveOutline() );
     197           0 :     aCbxDragStripes.Check( aLayoutItem.GetOptionsLayout().IsDragStripes() );
     198           0 :     aCbxHandlesBezier.Check( aLayoutItem.GetOptionsLayout().IsHandlesBezier() );
     199             : 
     200           0 :     aCbxRuler.SaveValue();
     201           0 :     aCbxMoveOutline.SaveValue();
     202           0 :     aCbxDragStripes.SaveValue();
     203           0 :     aCbxHandlesBezier.SaveValue();
     204           0 : }
     205             : 
     206             : // -----------------------------------------------------------------------
     207             : 
     208           0 : SfxTabPage* SdTpOptionsContents::Create( Window* pWindow,
     209             :                 const SfxItemSet& rAttrs )
     210             : {
     211           0 :     return( new SdTpOptionsContents( pWindow, rAttrs ) );
     212             : }
     213             : 
     214             : /*************************************************************************
     215             : |*
     216             : |*  TabPage zum Einstellen der Sonstige-Optionen
     217             : |*
     218             : \************************************************************************/
     219             : #define TABLE_COUNT 12
     220             : #define TOKEN (sal_Unicode(':'))
     221             : 
     222           0 : SdTpOptionsMisc::SdTpOptionsMisc( Window* pParent, const SfxItemSet& rInAttrs  ) :
     223             :         SfxTabPage          ( pParent, SdResId( TP_OPTIONS_MISC ), rInAttrs ),
     224             :     aGrpText                    ( this, SdResId( GRP_TEXT ) ),
     225             :     aCbxQuickEdit               ( this, SdResId( CBX_QUICKEDIT ) ),
     226             :     aCbxPickThrough             ( this, SdResId( CBX_PICKTHROUGH ) ),
     227             : 
     228             :     // Template & Layout laufen z.Z. synchron!
     229             :     aGrpProgramStart            ( this, SdResId( GRP_PROGRAMSTART ) ),
     230             :     aCbxStartWithTemplate       ( this, SdResId( CBX_START_WITH_TEMPLATE ) ),
     231             : 
     232             :     aGrpSettings                ( this, SdResId( GRP_SETTINGS ) ),
     233             :     aCbxMasterPageCache         ( this, SdResId( CBX_MASTERPAGE_CACHE ) ),
     234             :     aCbxCopy                    ( this, SdResId( CBX_COPY ) ),
     235             :     aCbxMarkedHitMovesAlways    ( this, SdResId( CBX_MARKED_HIT_MOVES_ALWAYS ) ),
     236             :     aCbxCrookNoContortion       ( this, SdResId( CBX_CROOK_NO_CONTORTION ) ),
     237             : 
     238             :     aTxtMetric                  ( this, SdResId( FT_METRIC ) ),
     239             :     aLbMetric                   ( this, SdResId( LB_METRIC ) ),
     240             :     aTxtTabstop                 ( this, SdResId( FT_TABSTOP ) ),
     241             :     aMtrFldTabstop              ( this, SdResId( MTR_FLD_TABSTOP ) ),
     242             : 
     243             :     aCbxStartWithActualPage     ( this, SdResId( CBX_START_WITH_ACTUAL_PAGE ) ),
     244             :     aGrpStartWithActualPage     ( this, SdResId( GRP_START_WITH_ACTUAL_PAGE ) ),
     245             :     aCbxEnableSdremote          ( this, SdResId( CBX_ENABLE_SDREMOTE ) ),
     246             :     aTxtCompatibility           ( this, SdResId( FT_COMPATIBILITY ) ),
     247             :     aCbxUsePrinterMetrics       ( this, SdResId( CB_USE_PRINTER_METRICS ) ),
     248             :     aCbxCompatibility           ( this, SdResId( CB_MERGE_PARA_DIST ) ),
     249             :     aGrpScale                   ( this, SdResId( GRP_SCALE ) ),
     250             :     aFtScale                    ( this, SdResId( FT_SCALE ) ),
     251             :     aCbScale                    ( this, SdResId( CB_SCALE ) ),
     252             :     aFtOriginal                 ( this, SdResId( FT_ORIGINAL ) ),
     253             :     aFtEquivalent               ( this, SdResId( FT_EQUIVALENT ) ),
     254             :     aFtPageWidth                ( this, SdResId( FT_PAGEWIDTH ) ),
     255             :     aFiInfo1                    ( this, SdResId( FI_INFO_1 ) ),
     256             :     aMtrFldOriginalWidth        ( this, SdResId( MTR_FLD_ORIGINAL_WIDTH ) ),
     257             :     aFtPageHeight               ( this, SdResId( FT_PAGEHEIGHT ) ),
     258             :     aFiInfo2                    ( this, SdResId( FI_INFO_2 ) ),
     259             :     aMtrFldOriginalHeight       ( this, SdResId( MTR_FLD_ORIGINAL_HEIGHT ) ),
     260             :     aMtrFldInfo1                ( this, WinBits( WB_HIDE ) ),
     261           0 :     aMtrFldInfo2                ( this, WinBits( WB_HIDE ) )
     262             : {
     263           0 :     FreeResource();
     264           0 :     SetExchangeSupport();
     265             : 
     266             :     // Metrik einstellen
     267             :     FieldUnit eFUnit;
     268             : 
     269           0 :     sal_uInt16 nWhich = GetWhich( SID_ATTR_METRIC );
     270           0 :     if ( rInAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
     271             :     {
     272           0 :         const SfxUInt16Item& rItem = (SfxUInt16Item&)rInAttrs.Get( nWhich );
     273           0 :         eFUnit = (FieldUnit)rItem.GetValue();
     274             :     }
     275             :     else
     276           0 :         eFUnit = SfxModule::GetCurrentFieldUnit();
     277             : 
     278           0 :     SetFieldUnit( aMtrFldTabstop, eFUnit );
     279             : 
     280             :     // ListBox mit Metriken f"ullen
     281           0 :     SvxStringArray aMetricArr( RID_SVXSTR_FIELDUNIT_TABLE );
     282             :     sal_uInt16 i;
     283             : 
     284           0 :     for ( i = 0; i < aMetricArr.Count(); ++i )
     285             :     {
     286           0 :         String sMetric = aMetricArr.GetStringByPos( i );
     287           0 :         long nFieldUnit = aMetricArr.GetValue( i );
     288           0 :         sal_uInt16 nPos = aLbMetric.InsertEntry( sMetric );
     289           0 :         aLbMetric.SetEntryData( nPos, (void*)nFieldUnit );
     290           0 :     }
     291           0 :     aLbMetric.SetSelectHdl( LINK( this, SdTpOptionsMisc, SelectMetricHdl_Impl ) );
     292             : 
     293           0 :     SetFieldUnit( aMtrFldOriginalWidth, eFUnit );
     294           0 :     SetFieldUnit( aMtrFldOriginalHeight, eFUnit );
     295           0 :     aMtrFldOriginalWidth.SetLast( 999999999 );
     296           0 :     aMtrFldOriginalWidth.SetMax( 999999999 );
     297           0 :     aMtrFldOriginalHeight.SetLast( 999999999 );
     298           0 :     aMtrFldOriginalHeight.SetMax( 999999999 );
     299             : 
     300             :     // Temporaere Fields fuer Info-Texte (fuer Formatierung/Berechnung)
     301           0 :     aMtrFldInfo1.SetUnit( eFUnit );
     302           0 :     aMtrFldInfo1.SetMax( 999999999 );
     303           0 :     aMtrFldInfo1.SetDecimalDigits( 2 );
     304           0 :     aMtrFldInfo2.SetUnit( eFUnit );
     305           0 :     aMtrFldInfo2.SetMax( 999999999 );
     306           0 :     aMtrFldInfo2.SetDecimalDigits( 2 );
     307             : 
     308             :     // PoolUnit ermitteln
     309           0 :     SfxItemPool* pPool = rInAttrs.GetPool();
     310             :     DBG_ASSERT( pPool, "Wo ist der Pool?" );
     311           0 :     ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH );
     312             : 
     313             :     // Fuellen der CB
     314             :     sal_uInt16 aTable[ TABLE_COUNT ] =
     315           0 :         { 1, 2, 4, 5, 8, 10, 16, 20, 30, 40, 50, 100 };
     316             : 
     317           0 :     for( i = 0; i < TABLE_COUNT; i++ )
     318           0 :         aCbScale.InsertEntry( GetScale( 1, aTable[i] ) );
     319           0 :     for( i = 1; i < TABLE_COUNT; i++ )
     320           0 :         aCbScale.InsertEntry( GetScale(  aTable[i], 1 ) );
     321           0 : }
     322             : 
     323             : // -----------------------------------------------------------------------
     324             : 
     325           0 : SdTpOptionsMisc::~SdTpOptionsMisc()
     326             : {
     327           0 : }
     328             : // -----------------------------------------------------------------------
     329           0 : void SdTpOptionsMisc::ActivatePage( const SfxItemSet& rSet )
     330             : {
     331             :     // Hier muss noch einmal SaveValue gerufen werden, da sonst u.U.
     332             :     // der Wert in anderen TabPages keine Wirkung hat
     333           0 :     aLbMetric.SaveValue();
     334             :     // Metrik ggfs. aendern (da TabPage im Dialog liegt,
     335             :     // wo die Metrik eingestellt werden kann
     336           0 :     const SfxPoolItem* pAttr = NULL;
     337           0 :     if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_METRIC , sal_False,
     338           0 :                                     (const SfxPoolItem**)&pAttr ))
     339             :     {
     340           0 :         const SfxUInt16Item* pItem = (SfxUInt16Item*) pAttr;
     341             : 
     342           0 :         FieldUnit eFUnit = (FieldUnit)(long)pItem->GetValue();
     343             : 
     344           0 :         if( eFUnit != aMtrFldOriginalWidth.GetUnit() )
     345             :         {
     346             :             // Metriken einstellen
     347           0 :             sal_Int64 nVal = aMtrFldOriginalWidth.Denormalize( aMtrFldOriginalWidth.GetValue( FUNIT_TWIP ) );
     348           0 :             SetFieldUnit( aMtrFldOriginalWidth, eFUnit, sal_True );
     349           0 :             aMtrFldOriginalWidth.SetValue( aMtrFldOriginalWidth.Normalize( nVal ), FUNIT_TWIP );
     350             : 
     351           0 :             nVal = aMtrFldOriginalHeight.Denormalize( aMtrFldOriginalHeight.GetValue( FUNIT_TWIP ) );
     352           0 :             SetFieldUnit( aMtrFldOriginalHeight, eFUnit, sal_True );
     353           0 :             aMtrFldOriginalHeight.SetValue( aMtrFldOriginalHeight.Normalize( nVal ), FUNIT_TWIP );
     354             : 
     355             : 
     356           0 :             if( nWidth != 0 && nHeight != 0 )
     357             :             {
     358           0 :                 aMtrFldInfo1.SetUnit( eFUnit );
     359           0 :                 aMtrFldInfo2.SetUnit( eFUnit );
     360             : 
     361           0 :                 SetMetricValue( aMtrFldInfo1, nWidth, ePoolUnit );
     362           0 :                 aInfo1 = aMtrFldInfo1.GetText();
     363           0 :                 aFiInfo1.SetText( aInfo1 );
     364             : 
     365           0 :                 SetMetricValue( aMtrFldInfo2, nHeight, ePoolUnit );
     366           0 :                 aInfo2 = aMtrFldInfo2.GetText();
     367           0 :                 aFiInfo2.SetText( aInfo2 );
     368             :             }
     369             :         }
     370             :     }
     371           0 : }
     372             : 
     373             : // -----------------------------------------------------------------------
     374             : 
     375           0 : int SdTpOptionsMisc::DeactivatePage( SfxItemSet* pActiveSet )
     376             : {
     377             :     // Parsercheck
     378             :     sal_Int32 nX, nY;
     379           0 :     if( SetScale( aCbScale.GetText(), nX, nY ) )
     380             :     {
     381           0 :         if( pActiveSet )
     382           0 :             FillItemSet( *pActiveSet );
     383           0 :         return( LEAVE_PAGE );
     384             :     }
     385           0 :     WarningBox aWarnBox( GetParent(), WB_YES_NO, String( SdResId( STR_WARN_SCALE_FAIL ) ) );
     386           0 :     short nReturn = aWarnBox.Execute();
     387             : 
     388           0 :     if( nReturn == RET_YES )
     389           0 :         return( KEEP_PAGE );
     390             : 
     391           0 :     if( pActiveSet )
     392           0 :         FillItemSet( *pActiveSet );
     393             : 
     394           0 :     return( LEAVE_PAGE );
     395             : }
     396             : 
     397             : // -----------------------------------------------------------------------
     398             : 
     399           0 : sal_Bool SdTpOptionsMisc::FillItemSet( SfxItemSet& rAttrs )
     400             : {
     401           0 :     sal_Bool bModified = sal_False;
     402             : 
     403           0 :     if( aCbxStartWithTemplate.GetSavedValue()   != aCbxStartWithTemplate.IsChecked() ||
     404           0 :         aCbxMarkedHitMovesAlways.GetSavedValue()!= aCbxMarkedHitMovesAlways.IsChecked() ||
     405           0 :         aCbxCrookNoContortion.GetSavedValue()   != aCbxCrookNoContortion.IsChecked() ||
     406           0 :         aCbxQuickEdit.GetSavedValue()           != aCbxQuickEdit.IsChecked() ||
     407           0 :         aCbxPickThrough.GetSavedValue()         != aCbxPickThrough.IsChecked() ||
     408           0 :         aCbxMasterPageCache.GetSavedValue()     != aCbxMasterPageCache.IsChecked() ||
     409           0 :         aCbxCopy.GetSavedValue()                != aCbxCopy.IsChecked() ||
     410           0 :         aCbxStartWithActualPage.GetSavedValue() != aCbxStartWithActualPage.IsChecked() ||
     411           0 :         aCbxEnableSdremote.GetSavedValue()      != aCbxEnableSdremote.IsChecked() ||
     412           0 :         aCbxCompatibility.GetSavedValue()       != aCbxCompatibility.IsChecked() ||
     413           0 :         aCbxUsePrinterMetrics.GetSavedValue()   != aCbxUsePrinterMetrics.IsChecked() )
     414             :     {
     415           0 :         SdOptionsMiscItem aOptsItem( ATTR_OPTIONS_MISC );
     416             : 
     417           0 :         aOptsItem.GetOptionsMisc().SetStartWithTemplate( aCbxStartWithTemplate.IsChecked() );
     418           0 :         aOptsItem.GetOptionsMisc().SetMarkedHitMovesAlways( aCbxMarkedHitMovesAlways.IsChecked() );
     419           0 :         aOptsItem.GetOptionsMisc().SetCrookNoContortion( aCbxCrookNoContortion.IsChecked() );
     420           0 :         aOptsItem.GetOptionsMisc().SetQuickEdit( aCbxQuickEdit.IsChecked() );
     421           0 :         aOptsItem.GetOptionsMisc().SetPickThrough( aCbxPickThrough.IsChecked() );
     422           0 :         aOptsItem.GetOptionsMisc().SetMasterPagePaintCaching( aCbxMasterPageCache.IsChecked() );
     423           0 :         aOptsItem.GetOptionsMisc().SetDragWithCopy( aCbxCopy.IsChecked() );
     424           0 :         aOptsItem.GetOptionsMisc().SetStartWithActualPage( aCbxStartWithActualPage.IsChecked() );
     425           0 :         aOptsItem.GetOptionsMisc().SetEnableSdremote( aCbxEnableSdremote.IsChecked() );
     426           0 :         aOptsItem.GetOptionsMisc().SetSummationOfParagraphs( aCbxCompatibility.IsChecked() );
     427           0 :         aOptsItem.GetOptionsMisc().SetPrinterIndependentLayout (
     428           0 :             aCbxUsePrinterMetrics.IsChecked()
     429             :             ? ::com::sun::star::document::PrinterIndependentLayout::DISABLED
     430           0 :             : ::com::sun::star::document::PrinterIndependentLayout::ENABLED);
     431           0 :         rAttrs.Put( aOptsItem );
     432             : 
     433           0 :         bModified = sal_True;
     434             :     }
     435             : 
     436             :     // Metrik
     437           0 :     const sal_uInt16 nMPos = aLbMetric.GetSelectEntryPos();
     438           0 :     if ( nMPos != aLbMetric.GetSavedValue() )
     439             :     {
     440           0 :         sal_uInt16 nFieldUnit = (sal_uInt16)(long)aLbMetric.GetEntryData( nMPos );
     441           0 :         rAttrs.Put( SfxUInt16Item( GetWhich( SID_ATTR_METRIC ),
     442           0 :                                      (sal_uInt16)nFieldUnit ) );
     443           0 :         bModified |= sal_True;
     444             :     }
     445             : 
     446             :     // Tabulatorabstand
     447           0 :     if( aMtrFldTabstop.GetText() != aMtrFldTabstop.GetSavedValue() )
     448             :     {
     449           0 :         sal_uInt16 nWh = GetWhich( SID_ATTR_DEFTABSTOP );
     450           0 :         SfxMapUnit eUnit = rAttrs.GetPool()->GetMetric( nWh );
     451           0 :         SfxUInt16Item aDef( nWh,(sal_uInt16)GetCoreValue( aMtrFldTabstop, eUnit ) );
     452           0 :         rAttrs.Put( aDef );
     453           0 :         bModified |= sal_True;
     454             :     }
     455             : 
     456             :     sal_Int32 nX, nY;
     457           0 :     if( SetScale( aCbScale.GetText(), nX, nY ) )
     458             :     {
     459           0 :         rAttrs.Put( SfxInt32Item( ATTR_OPTIONS_SCALE_X, nX ) );
     460           0 :         rAttrs.Put( SfxInt32Item( ATTR_OPTIONS_SCALE_Y, nY ) );
     461             : 
     462           0 :         bModified = sal_True;
     463             :     }
     464             : 
     465           0 :     return( bModified );
     466             : }
     467             : 
     468             : // -----------------------------------------------------------------------
     469             : 
     470           0 : void SdTpOptionsMisc::Reset( const SfxItemSet& rAttrs )
     471             : {
     472             :     SdOptionsMiscItem aOptsItem( (const SdOptionsMiscItem&) rAttrs.
     473           0 :                         Get( ATTR_OPTIONS_MISC ) );
     474             : 
     475           0 :     aCbxStartWithTemplate.Check( aOptsItem.GetOptionsMisc().IsStartWithTemplate() );
     476           0 :     aCbxMarkedHitMovesAlways.Check( aOptsItem.GetOptionsMisc().IsMarkedHitMovesAlways() );
     477           0 :     aCbxCrookNoContortion.Check( aOptsItem.GetOptionsMisc().IsCrookNoContortion() );
     478           0 :     aCbxQuickEdit.Check( aOptsItem.GetOptionsMisc().IsQuickEdit() );
     479           0 :     aCbxPickThrough.Check( aOptsItem.GetOptionsMisc().IsPickThrough() );
     480           0 :     aCbxMasterPageCache.Check( aOptsItem.GetOptionsMisc().IsMasterPagePaintCaching() );
     481           0 :     aCbxCopy.Check( aOptsItem.GetOptionsMisc().IsDragWithCopy() );
     482           0 :     aCbxStartWithActualPage.Check( aOptsItem.GetOptionsMisc().IsStartWithActualPage() );
     483           0 :     aCbxEnableSdremote.Check( aOptsItem.GetOptionsMisc().IsEnableSdremote() );
     484           0 :     aCbxCompatibility.Check( aOptsItem.GetOptionsMisc().IsSummationOfParagraphs() );
     485           0 :     aCbxUsePrinterMetrics.Check( aOptsItem.GetOptionsMisc().GetPrinterIndependentLayout()==1 );
     486           0 :     aCbxStartWithTemplate.SaveValue();
     487           0 :     aCbxMarkedHitMovesAlways.SaveValue();
     488           0 :     aCbxCrookNoContortion.SaveValue();
     489           0 :     aCbxQuickEdit.SaveValue();
     490           0 :     aCbxPickThrough.SaveValue();
     491             : 
     492           0 :     aCbxMasterPageCache.SaveValue();
     493           0 :     aCbxCopy.SaveValue();
     494           0 :     aCbxEnableSdremote.SaveValue();
     495           0 :     aCbxCompatibility.SaveValue();
     496           0 :     aCbxUsePrinterMetrics.SaveValue();
     497             : 
     498             :     // Metrik
     499           0 :     sal_uInt16 nWhich = GetWhich( SID_ATTR_METRIC );
     500           0 :     aLbMetric.SetNoSelection();
     501             : 
     502           0 :     if ( rAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
     503             :     {
     504           0 :         const SfxUInt16Item& rItem = (SfxUInt16Item&)rAttrs.Get( nWhich );
     505           0 :         long nFieldUnit = (long)rItem.GetValue();
     506             : 
     507           0 :         for ( sal_uInt16 i = 0; i < aLbMetric.GetEntryCount(); ++i )
     508             :         {
     509           0 :             if ( (long)aLbMetric.GetEntryData( i ) == nFieldUnit )
     510             :             {
     511           0 :                 aLbMetric.SelectEntryPos( i );
     512           0 :                 break;
     513             :             }
     514             :         }
     515             :     }
     516             : 
     517             :     // Tabulatorabstand
     518           0 :     nWhich = GetWhich( SID_ATTR_DEFTABSTOP );
     519           0 :     if( rAttrs.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
     520             :     {
     521           0 :         SfxMapUnit eUnit = rAttrs.GetPool()->GetMetric( nWhich );
     522           0 :         const SfxUInt16Item& rItem = (SfxUInt16Item&)rAttrs.Get( nWhich );
     523           0 :         SetMetricValue( aMtrFldTabstop, rItem.GetValue(), eUnit );
     524             :     }
     525           0 :     aLbMetric.SaveValue();
     526           0 :     aMtrFldTabstop.SaveValue();
     527             :     //Scale
     528             :     sal_Int32 nX = ( (const SfxInt32Item&) rAttrs.
     529           0 :                  Get( ATTR_OPTIONS_SCALE_X ) ).GetValue();
     530             :     sal_Int32 nY = ( (const SfxInt32Item&) rAttrs.
     531           0 :                  Get( ATTR_OPTIONS_SCALE_Y ) ).GetValue();
     532             :     nWidth = ( (const SfxUInt32Item&) rAttrs.
     533           0 :                     Get( ATTR_OPTIONS_SCALE_WIDTH ) ).GetValue();
     534             :     nHeight = ( (const SfxUInt32Item&) rAttrs.
     535           0 :                     Get( ATTR_OPTIONS_SCALE_HEIGHT ) ).GetValue();
     536             : 
     537           0 :     aCbScale.SetText( GetScale( nX, nY ) );
     538             : 
     539           0 :     aFtOriginal.Hide();
     540           0 :     aFtEquivalent.Hide();
     541           0 :     aMtrFldOriginalWidth.Hide();
     542           0 :     aMtrFldOriginalWidth.SetText( aInfo1 ); // leer
     543           0 :     aMtrFldOriginalHeight.Hide();
     544           0 :     aMtrFldOriginalHeight.SetText( aInfo2 ); //leer
     545           0 :     aFtPageWidth.Hide();
     546           0 :     aFtPageHeight.Hide();
     547           0 :     aFiInfo1.Hide();
     548           0 :     aFiInfo2.Hide();
     549             : 
     550           0 :     UpdateCompatibilityControls ();
     551           0 : }
     552             : 
     553             : // -----------------------------------------------------------------------
     554             : 
     555           0 : SfxTabPage* SdTpOptionsMisc::Create( Window* pWindow,
     556             :                 const SfxItemSet& rAttrs )
     557             : {
     558           0 :     return( new SdTpOptionsMisc( pWindow, rAttrs ) );
     559             : }
     560             : //------------------------------------------------------------------------
     561             : 
     562           0 : IMPL_LINK_NOARG(SdTpOptionsMisc, SelectMetricHdl_Impl)
     563             : {
     564           0 :     sal_uInt16 nPos = aLbMetric.GetSelectEntryPos();
     565             : 
     566           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     567             :     {
     568           0 :         FieldUnit eUnit = (FieldUnit)(long)aLbMetric.GetEntryData( nPos );
     569             :         sal_Int64 nVal =
     570           0 :             aMtrFldTabstop.Denormalize( aMtrFldTabstop.GetValue( FUNIT_TWIP ) );
     571           0 :         SetFieldUnit( aMtrFldTabstop, eUnit );
     572           0 :         aMtrFldTabstop.SetValue( aMtrFldTabstop.Normalize( nVal ), FUNIT_TWIP );
     573             :     }
     574           0 :     return 0;
     575             : }
     576             : 
     577             : 
     578             : namespace {
     579           0 : void lcl_MoveWin( Window& rWin, long nYDiff)
     580             : {
     581           0 :     Point aPos(rWin.GetPosPixel());
     582           0 :     aPos.Y() += nYDiff;
     583           0 :     rWin.SetPosPixel (aPos);
     584           0 : }
     585             : 
     586           0 : void lcl_MoveWin( Window& rWin, long nXdiff, long nYdiff)
     587             : {
     588           0 :     Point aPos(rWin.GetPosPixel());
     589           0 :     aPos.X() += nXdiff;
     590           0 :     aPos.Y() += nYdiff;
     591           0 :     rWin.SetPosPixel(aPos);
     592           0 : }
     593             : }
     594             : 
     595           0 : void SdTpOptionsMisc::SetImpressMode (void)
     596             : {
     597           0 :     long nDialogWidth = GetSizePixel().Width();
     598           0 :     long nLineHeight = aCbxPickThrough.GetPosPixel().Y()
     599           0 :         - aCbxQuickEdit.GetPosPixel().Y();
     600             : 
     601             :     // Put both "Text objects" check boxes side by side.
     602             :     lcl_MoveWin (aCbxPickThrough,
     603           0 :         nDialogWidth/2 - aCbxPickThrough.GetPosPixel().X(),
     604           0 :         -nLineHeight);
     605             : 
     606             :     // Move the other controls up one line.
     607           0 :     lcl_MoveWin (aGrpProgramStart, -nLineHeight);
     608           0 :     lcl_MoveWin (aCbxStartWithTemplate, -nLineHeight);
     609           0 :     lcl_MoveWin (aGrpSettings, -nLineHeight);
     610           0 :     lcl_MoveWin (aCbxMasterPageCache, -nLineHeight);
     611           0 :     lcl_MoveWin (aCbxCopy, -nLineHeight);
     612           0 :     lcl_MoveWin (aCbxMarkedHitMovesAlways, -nLineHeight);
     613           0 :     lcl_MoveWin (aCbxCrookNoContortion, -nLineHeight);
     614           0 :     lcl_MoveWin (aTxtMetric, -nLineHeight);
     615           0 :     lcl_MoveWin (aLbMetric, -nLineHeight);
     616           0 :     lcl_MoveWin (aTxtTabstop, -nLineHeight);
     617           0 :     lcl_MoveWin (aMtrFldTabstop, -nLineHeight);
     618           0 :     lcl_MoveWin (aGrpStartWithActualPage, -nLineHeight);
     619           0 :     lcl_MoveWin (aCbxStartWithActualPage, -nLineHeight);
     620           0 :     lcl_MoveWin (aCbxEnableSdremote, -nLineHeight);
     621           0 :     lcl_MoveWin (aTxtCompatibility, -nLineHeight);
     622             : 
     623             :     // Move the printer-independent-metrics check box up two lines to change
     624             :     // places with spacing-between-paragraphs check box.
     625           0 :     lcl_MoveWin (aCbxUsePrinterMetrics, -2*nLineHeight);
     626             : #ifndef ENABLE_SDREMOTE_BLUETOOTH
     627             :     aCbxEnableSdremote.Hide();
     628             : #endif
     629           0 : }
     630             : 
     631           0 : void    SdTpOptionsMisc::SetDrawMode()
     632             : {
     633           0 :     aCbxStartWithTemplate.Hide();
     634           0 :     aGrpProgramStart.Hide();
     635           0 :     aCbxStartWithActualPage.Hide();
     636           0 :     aCbxEnableSdremote.Hide();
     637           0 :     aCbxCompatibility.Hide();
     638           0 :     aGrpStartWithActualPage.Hide();
     639           0 :     aCbxCrookNoContortion.Show();
     640             : 
     641           0 :     aGrpScale.Show();
     642           0 :     aFtScale.Show();
     643           0 :     aCbScale.Show();
     644             : 
     645           0 :     aFtOriginal.Show();
     646           0 :     aFtEquivalent.Show();
     647             : 
     648           0 :     aFtPageWidth.Show();
     649           0 :     aFiInfo1.Show();
     650           0 :     aMtrFldOriginalWidth.Show();
     651             : 
     652           0 :     aFtPageHeight.Show();
     653           0 :     aFiInfo2.Show();
     654           0 :     aMtrFldOriginalHeight.Show();
     655             : 
     656           0 :     long nDiff = aGrpSettings.GetPosPixel().Y() - aGrpProgramStart.GetPosPixel().Y();
     657           0 :     lcl_MoveWin( aGrpSettings, -nDiff );
     658           0 :     lcl_MoveWin( aCbxMasterPageCache, -nDiff );
     659           0 :     lcl_MoveWin( aCbxCopy, -nDiff );
     660           0 :     lcl_MoveWin( aCbxMarkedHitMovesAlways, -nDiff );
     661           0 :     lcl_MoveWin( aCbxCrookNoContortion, -nDiff );
     662           0 :     nDiff -= aCbxCrookNoContortion.GetPosPixel().Y() - aCbxMarkedHitMovesAlways.GetPosPixel().Y();
     663           0 :     lcl_MoveWin( aTxtMetric, -nDiff );
     664           0 :     lcl_MoveWin( aLbMetric, -nDiff );
     665           0 :     lcl_MoveWin( aTxtTabstop, -nDiff );
     666           0 :     lcl_MoveWin( aMtrFldTabstop, -nDiff );
     667             : 
     668             :     // Move the scale controls so that they are visually centered betwen the
     669             :     // group controls above and below.
     670           0 :     lcl_MoveWin (aFtScale, -17);
     671           0 :     lcl_MoveWin (aCbScale, -17);
     672             : 
     673             :     // Move the printer-independent-metrics check box in the place that the
     674             :     // spacing-between-paragraphs check box normally is in.
     675           0 :     aCbxUsePrinterMetrics.SetPosPixel (aCbxCompatibility.GetPosPixel());
     676           0 : }
     677             : 
     678             : // -----------------------------------------------------------------------
     679             : 
     680           0 : String SdTpOptionsMisc::GetScale( sal_Int32 nX, sal_Int32 nY )
     681             : {
     682           0 :     String aScale( UniString::CreateFromInt32( nX ) );
     683           0 :     aScale.Append( TOKEN );
     684           0 :     aScale.Append( UniString::CreateFromInt32( nY ) );
     685             : 
     686           0 :     return( aScale );
     687             : }
     688             : 
     689             : // -----------------------------------------------------------------------
     690             : 
     691           0 : sal_Bool SdTpOptionsMisc::SetScale( const String& aScale, sal_Int32& rX, sal_Int32& rY )
     692             : {
     693           0 :     if( comphelper::string::getTokenCount(aScale, TOKEN) != 2 )
     694           0 :         return( sal_False );
     695             : 
     696           0 :     rtl::OUString aTmp(aScale.GetToken( 0, TOKEN ));
     697           0 :     if (!comphelper::string::isdigitAsciiString(aTmp))
     698           0 :         return sal_False;
     699             : 
     700           0 :     rX = (long) aTmp.toInt32();
     701           0 :     if( rX == 0 )
     702           0 :         return( sal_False );
     703             : 
     704           0 :     aTmp = aScale.GetToken( 1, TOKEN );
     705           0 :     if (!comphelper::string::isdigitAsciiString(aTmp))
     706           0 :         return sal_False;
     707             : 
     708           0 :     rY = (long) aTmp.toInt32();
     709           0 :     if( rY == 0 )
     710           0 :         return sal_False;
     711             : 
     712           0 :     return sal_True;
     713             : }
     714             : 
     715           0 : void SdTpOptionsMisc::UpdateCompatibilityControls (void)
     716             : {
     717             :     // Disable the compatibility controls by default.  Enable them only when
     718             :     // there is at least one open document.
     719           0 :     sal_Bool bIsEnabled = sal_False;
     720             : 
     721             :     try
     722             :     {
     723             :         // Get a component enumeration from the desktop and search it for documents.
     724           0 :         Reference<uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext());
     725             :         do
     726             :         {
     727           0 :             Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(xContext);
     728             : 
     729             :             Reference<container::XEnumerationAccess> xComponents (
     730           0 :                 xDesktop->getComponents(), UNO_QUERY);
     731           0 :             if ( ! xComponents.is())
     732             :                 break;
     733             : 
     734             :             Reference<container::XEnumeration> xEnumeration (
     735           0 :                 xComponents->createEnumeration());
     736           0 :             if ( ! xEnumeration.is())
     737             :                 break;
     738             : 
     739           0 :             while (xEnumeration->hasMoreElements())
     740             :             {
     741           0 :                 Reference<frame::XModel> xModel (xEnumeration->nextElement(), UNO_QUERY);
     742           0 :                 if (xModel.is())
     743             :                 {
     744             :                     // There is at leas one model/document: Enable the compatibility controls.
     745           0 :                     bIsEnabled = sal_True;
     746             :                     break;
     747             :                 }
     748           0 :             }
     749             : 
     750             :         }
     751           0 :         while (false); // One 'loop'.
     752             :     }
     753           0 :     catch (const uno::Exception&)
     754             :     {
     755             :         // When there is an exception then simply use the default value of
     756             :         // bIsEnabled and disable the controls.
     757             :     }
     758             : 
     759           0 :     aTxtCompatibility.Enable (bIsEnabled);
     760           0 :     aCbxCompatibility.Enable(bIsEnabled);
     761           0 :     aCbxUsePrinterMetrics.Enable (bIsEnabled);
     762           0 : }
     763             : 
     764           0 : void SdTpOptionsMisc::PageCreated (SfxAllItemSet aSet)
     765             : {
     766           0 :     SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_SDMODE_FLAG,sal_False);
     767           0 :     if (pFlagItem)
     768             :     {
     769           0 :         sal_uInt32 nFlags=pFlagItem->GetValue();
     770           0 :         if ( ( nFlags & SD_DRAW_MODE ) == SD_DRAW_MODE )
     771           0 :             SetDrawMode();
     772           0 :         if ( ( nFlags & SD_IMPRESS_MODE ) == SD_IMPRESS_MODE )
     773           0 :             SetImpressMode();
     774             :     }
     775           0 : }
     776             : 
     777             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10