LCOV - code coverage report
Current view: top level - svx/source/sidebar/paragraph - ParaLineSpacingControl.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 424 0.2 %
Date: 2014-11-03 Functions: 2 18 11.1 %
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             : #include "ParaLineSpacingControl.hxx"
      20             : #include "ParaPropertyPanel.hrc"
      21             : #include <sfx2/sidebar/ResourceDefinitions.hrc>
      22             : #include <svx/dialogs.hrc>
      23             : #include <svx/dialmgr.hxx>
      24             : #include <unotools/viewoptions.hxx>
      25             : #include <editeng/kernitem.hxx>
      26             : #include <sfx2/bindings.hxx>
      27             : #include <sfx2/dispatch.hxx>
      28             : #include <sfx2/sidebar/Theme.hxx>
      29             : #include <svtools/unitconv.hxx>
      30             : #include <vcl/settings.hxx>
      31             : 
      32             : #define _DEFAULT_LINE_SPACING  200
      33             : #define FIX_DIST_DEF           283
      34             : #define LINESPACE_1            100
      35             : #define LINESPACE_15           150
      36             : #define LINESPACE_2            200
      37             : #define LINESPACE_115          115
      38             : 
      39             : #define LLINESPACE_1          0
      40             : #define LLINESPACE_15         1
      41             : #define LLINESPACE_2          2
      42             : #define LLINESPACE_PROP       3
      43             : #define LLINESPACE_MIN        4
      44             : #define LLINESPACE_DURCH      5
      45             : #define LLINESPACE_FIX        6
      46             : 
      47             : #define DO_NOT_CUSTOM          false
      48             : #define USE_CUSTOM             true
      49             : 
      50             : #define LSP_POS_GLOBAL_VALUE   "Line_Spacing_Pos"
      51             : #define LSP_LV_GLOBAL_VALUE    "Line_Spacing_Lv"
      52             : #define BEGIN_VALUE            28
      53             : 
      54             : using namespace svx::sidebar;
      55             : 
      56           0 : ParaLineSpacingControl::ParaLineSpacingControl(vcl::Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel)
      57           0 :     : PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING))
      58             :     , mbUseLineSPCustom             (false)
      59             :     , mbLineSPDisable               (false)
      60             :     , mrParaPropertyPanel(rPanel)
      61             :     , mpBindings(NULL)
      62             :     , nMinFixDist(BEGIN_VALUE)
      63             :     , pActLineDistFld(&aLineDistAtPercentBox)
      64           0 :     , maLineSpacing(ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES( LINE_SPACING ) )
      65           0 :     , maCustomFT        ( this, SVX_RES( FT_CUSTOM ) )
      66           0 :     , maLSpacingFT      ( this, SVX_RES( FT_LINE_SPACING ) )
      67           0 :     , aLineDist( this, SVX_RES( LB_LINE_SPACING ))
      68           0 :     , maOfFT            ( this, SVX_RES( FT_OF ) )
      69           0 :     , aLineDistAtPercentBox   ( this, SVX_RES( ED_SBINDE_LINEDISTPERCENT ) )
      70           0 :     , aLineDistAtMetricBox    ( this, SVX_RES( ED_SBINDE_LINEDISTPOINT ) )
      71           0 :     , maSpacing1       (SVX_RES(IMG_SPACING1))
      72           0 :     , maSpacing115     (SVX_RES(IMG_SPACING115))
      73           0 :     , maSpacing15      (SVX_RES(IMG_SPACING15))
      74           0 :     , maSpacing2       (SVX_RES(IMG_SPACING2))
      75           0 :     , maSelSpacing1    (SVX_RES(IMG_SEL_SPACING1))
      76           0 :     , maSelSpacing115  (SVX_RES(IMG_SEL_SPACING115))
      77           0 :     , maSelSpacing15   (SVX_RES(IMG_SEL_SPACING15))
      78           0 :     , maSelSpacing2    (SVX_RES(IMG_SEL_SPACING2))
      79           0 :     , maImgCus         (SVX_RES(IMG_PARA_CUSTOM))
      80           0 :     , maImgCusGrey     (SVX_RES(IMG_PARA_CUSTOM_GRAY))
      81           0 :     , maStrCus         (SVX_RESSTR(STR_LCVALUE))
      82             :     , mpImg(NULL)
      83             :     , mpImgSel(NULL)
      84             :     , mpStr(NULL)
      85             :     , mpStrTip(NULL)
      86           0 :     , maLine(SVX_RESSTR(STR_LSPACING))
      87           0 :     , maOf(SVX_RESSTR(STR_LS_OF))
      88             :     , maValue( 0 )
      89           0 :     , maPos( 0 )
      90             : {
      91           0 :     initial();
      92           0 :     FreeResource();
      93           0 :     mpBindings = mrParaPropertyPanel.GetBindings();
      94             : //  m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric();
      95           0 :     m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM;
      96           0 : }
      97           0 : ParaLineSpacingControl::~ParaLineSpacingControl()
      98             : {
      99           0 :     delete[] mpImg;
     100           0 :     delete[] mpImgSel;
     101           0 :     delete[] mpStr;
     102           0 :     delete[] mpStrTip;
     103           0 : }
     104             : 
     105           0 : void ParaLineSpacingControl::initial()
     106             : {
     107           0 :     maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK |  WB_NO_DIRECTSELECT  );
     108             : 
     109             :     maLineSpacing.SetControlBackground(
     110           0 :         GetSettings().GetStyleSettings().GetHighContrastMode()
     111           0 :         ? GetSettings().GetStyleSettings().GetMenuColor()
     112           0 :         : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
     113             :     maLineSpacing.SetColor(
     114           0 :         GetSettings().GetStyleSettings().GetHighContrastMode()
     115           0 :         ? GetSettings().GetStyleSettings().GetMenuColor()
     116           0 :         : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
     117             :     maLineSpacing.SetBackground(
     118           0 :         GetSettings().GetStyleSettings().GetHighContrastMode()
     119           0 :         ? GetSettings().GetStyleSettings().GetMenuColor()
     120           0 :         : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
     121             : 
     122           0 :     mpImg = new Image[4];
     123           0 :     mpImg[0] = maSpacing1;
     124           0 :     mpImg[1] = maSpacing115;
     125           0 :     mpImg[2] = maSpacing15;
     126           0 :     mpImg[3] = maSpacing2;
     127             : 
     128           0 :     mpImgSel = new Image[4];
     129           0 :     mpImgSel[0] = maSelSpacing1;
     130           0 :     mpImgSel[1] = maSelSpacing115;
     131           0 :     mpImgSel[2] = maSelSpacing15;
     132           0 :     mpImgSel[3] = maSelSpacing2;
     133             : 
     134           0 :     mpStr = new OUString[4];
     135           0 :     mpStr[0] = SVX_RESSTR(STR_SPACING1);
     136           0 :     mpStr[1] = SVX_RESSTR(STR_SPACING115);
     137           0 :     mpStr[2] = SVX_RESSTR(STR_SPACING15);
     138           0 :     mpStr[3] = SVX_RESSTR(STR_SPACING2);
     139             : 
     140           0 :     mpStrTip = new OUString[4];
     141           0 :     mpStrTip[0] = SVX_RESSTR(STR_LS_SINGLE);
     142           0 :     mpStrTip[1] = SVX_RESSTR(STR_LS_115);
     143           0 :     mpStrTip[2] = SVX_RESSTR(STR_LS_15);
     144           0 :     mpStrTip[3] = SVX_RESSTR(STR_LS_DOUBLE);
     145           0 :     for (int i=0;i<4;i++)
     146           0 :         maLineSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]);
     147             : 
     148           0 :     maLineSpacing.AddItem( maImgCus, 0, maStrCus, 0 );
     149             : 
     150           0 :     SetAllNoSel();
     151           0 :     Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl );
     152           0 :     maLineSpacing.SetSelectHdl(aLink);
     153           0 :     maLineSpacing.StartSelection();
     154           0 :     maLineSpacing.Show();
     155             : 
     156           0 :     aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl );
     157           0 :     aLineDist.SetSelectHdl(aLink);
     158           0 :     aLineDist.SelectEntryPos( LLINESPACE_1 ) ;
     159           0 :     aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl );
     160           0 :     aLineDistAtPercentBox.SetModifyHdl( aLink );
     161           0 :     aLineDistAtMetricBox.SetModifyHdl( aLink );
     162           0 : }
     163             : 
     164             : 
     165           0 : void ParaLineSpacingControl::PopupModeEndCallback()
     166             : {
     167           0 :     if( mbUseLineSPCustom )
     168             :     {
     169             :         //maLinePos = mpLineSPPage->maPos;
     170             :         //maLineValue = mpLineSPPage->maValue;
     171             : 
     172           0 :         SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
     173           0 :         ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1);
     174           0 :         aSeq[0].Name = "maLinePos";
     175           0 :         aSeq[0].Value <<= ::rtl::OUString::number(maPos);
     176           0 :         aWinOpt.SetUserData( aSeq );
     177             : 
     178           0 :         SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
     179           0 :         aSeq[0].Name = "maLineValue";
     180           0 :         aSeq[0].Value <<= ::rtl::OUString::number(maValue);
     181           0 :         aWinOpt2.SetUserData( aSeq );
     182             :     }
     183           0 : }
     184             : 
     185           0 : void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext)
     186             : {
     187           0 :     SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
     188           0 :     if ( aWinOpt.Exists() )
     189             :     {
     190           0 :         ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
     191           0 :         ::rtl::OUString aTmp;
     192           0 :         if ( aSeq.getLength())
     193           0 :             aSeq[0].Value >>= aTmp;
     194             : 
     195           0 :         OUString aWinData( aTmp );
     196           0 :         maPos = (sal_uInt16)aWinData.toInt32();
     197             :     }
     198             : 
     199           0 :     SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
     200           0 :     if ( aWinOpt2.Exists() )
     201             :     {
     202           0 :         ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
     203           0 :         ::rtl::OUString aTmp;
     204           0 :         if ( aSeq.getLength())
     205           0 :             aSeq[0].Value >>= aTmp;
     206             : 
     207           0 :         OUString aWinData( aTmp );
     208           0 :         maValue = (sal_uInt16)aWinData.toInt32();
     209             :     }
     210           0 :     OUString sHelpText;
     211           0 :     switch(maPos)
     212             :     {
     213             :         case LLINESPACE_1:
     214           0 :             sHelpText += mpStrTip[0];
     215           0 :             break;
     216             :         case LLINESPACE_15:
     217           0 :             sHelpText += mpStrTip[2];
     218           0 :             break;
     219             :         case LLINESPACE_2:
     220           0 :             sHelpText += mpStrTip[3];
     221           0 :             break;
     222             :         case LLINESPACE_PROP:
     223           0 :             sHelpText +=maLine;
     224           0 :             sHelpText += "Proportion: ";
     225           0 :             sHelpText += maOf;
     226           0 :             sHelpText += OUString::number( maValue );
     227           0 :             break;
     228             :         case LLINESPACE_MIN:
     229           0 :             sHelpText += maLine;
     230           0 :             sHelpText += "At Least: ";
     231           0 :             sHelpText += maOf;
     232           0 :             sHelpText += OUString::number( maValue );
     233           0 :             break;
     234             :         case LLINESPACE_DURCH:
     235           0 :             sHelpText += maLine;
     236           0 :             sHelpText += "Leading: ";
     237           0 :             sHelpText += maOf;
     238           0 :             sHelpText += OUString::number( maValue );
     239           0 :             break;
     240             :         case LLINESPACE_FIX:
     241           0 :             sHelpText += maLine;
     242           0 :             sHelpText += "Fixed: ";
     243           0 :             sHelpText += maOf;
     244           0 :             sHelpText += OUString::number( maValue );
     245           0 :             break;
     246             :     }
     247           0 :     if( !aWinOpt.Exists() && !aWinOpt2.Exists() )
     248           0 :         mbLineSPDisable = true;
     249             :     else
     250           0 :         mbLineSPDisable = false;
     251             : 
     252           0 :     if( mbLineSPDisable )
     253           0 :         maLineSpacing.ReplaceItemImages(5, maImgCusGrey,0);
     254             :     else
     255             :     {
     256           0 :         maLineSpacing.ReplaceItemImages(5, maImgCus,0);
     257           0 :         maLineSpacing.SetItemText(5,sHelpText);
     258             :     }
     259             : 
     260           0 :     SfxItemState eState = currSPState;
     261             : 
     262           0 :     SetFieldUnit( aLineDistAtMetricBox, currMetricUnit );
     263             : 
     264             : //  mpLineSPPage->SetAllNoSel();
     265           0 :     aLineDist.Enable();
     266           0 :     pActLineDistFld->Enable();
     267           0 :     pActLineDistFld->SetText( "" );
     268             :     //bool bValueSetFocus = sal_False;        //wj
     269             : 
     270           0 :     if( eState >= SfxItemState::DEFAULT )
     271             :     {
     272             :     //  SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric();
     273           0 :         SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM;
     274           0 :         m_eLNSpaceUnit = eUnit;
     275             : 
     276           0 :         switch( currSPItem->GetLineSpaceRule() )
     277             :         {
     278             :         case SVX_LINE_SPACE_AUTO:
     279             :             {
     280           0 :                 SvxInterLineSpace eInter = currSPItem->GetInterLineSpaceRule();
     281             : 
     282           0 :                 switch( eInter )
     283             :                 {
     284             :                 case SVX_INTER_LINE_SPACE_OFF:
     285             :                     {
     286           0 :                         aLineDist.SelectEntryPos( LLINESPACE_1 );
     287           0 :                         pActLineDistFld->Disable();
     288           0 :                         pActLineDistFld->SetText( "" );
     289           0 :                         mbUseLineSPCustom = DO_NOT_CUSTOM;
     290           0 :                         if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
     291             :                         {
     292           0 :                             maLineSpacing.SelectItem(1);
     293             :                             //bValueSetFocus = sal_True;  //wj
     294             :                         }
     295             :                     }
     296           0 :                     break;
     297             : 
     298             :                 case SVX_INTER_LINE_SPACE_PROP:
     299             :                     {
     300           0 :                         if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
     301             :                         {
     302           0 :                             aLineDist.SelectEntryPos( LLINESPACE_1 );
     303           0 :                             pActLineDistFld->Disable();
     304           0 :                             pActLineDistFld->SetText( "" );
     305           0 :                             mbUseLineSPCustom = DO_NOT_CUSTOM;
     306           0 :                             maLineSpacing.SelectItem(1);
     307             :                             //bValueSetFocus = sal_True;  //wj
     308           0 :                             break;
     309             :                         }
     310           0 :                         if ( LINESPACE_15 == currSPItem->GetPropLineSpace() )
     311             :                         {
     312           0 :                             aLineDist.SelectEntryPos( LLINESPACE_15 );
     313           0 :                             pActLineDistFld->Disable();
     314           0 :                             pActLineDistFld->SetText( "" );
     315             : 
     316           0 :                             mbUseLineSPCustom = DO_NOT_CUSTOM;
     317           0 :                             maLineSpacing.SelectItem(3);
     318             :                             //bValueSetFocus = sal_True;  //wj
     319           0 :                             break;
     320             :                         }
     321           0 :                         if ( LINESPACE_2 == currSPItem->GetPropLineSpace() )
     322             :                         {
     323           0 :                             aLineDist.SelectEntryPos( LLINESPACE_2 );
     324           0 :                             pActLineDistFld->Disable();
     325           0 :                             pActLineDistFld->SetText( "" );
     326             : 
     327           0 :                             mbUseLineSPCustom = DO_NOT_CUSTOM;
     328           0 :                             maLineSpacing.SelectItem(4);
     329             :                             //bValueSetFocus = sal_True;  //wj
     330           0 :                             break;
     331             :                         }
     332             : 
     333           0 :                         aLineDist.SelectEntryPos( LLINESPACE_PROP );
     334           0 :                         if(pActLineDistFld != &(aLineDistAtPercentBox))
     335             :                         {
     336           0 :                             pActLineDistFld->Disable();
     337           0 :                             pActLineDistFld->Hide();
     338           0 :                             pActLineDistFld = &(aLineDistAtPercentBox);
     339             :                         }
     340             :                         else
     341             :                         {
     342           0 :                             pActLineDistFld = &(aLineDistAtMetricBox);
     343           0 :                             pActLineDistFld->Disable();
     344           0 :                             pActLineDistFld->Hide();
     345           0 :                             pActLineDistFld = &(aLineDistAtPercentBox);
     346             :                         }
     347           0 :                         pActLineDistFld->Enable();
     348           0 :                         pActLineDistFld->Show();
     349             :                         aLineDistAtPercentBox.
     350             :                             SetValue( aLineDistAtPercentBox.Normalize(
     351           0 :                             currSPItem->GetPropLineSpace() ) );
     352             : 
     353           0 :                         if( currSPItem->GetPropLineSpace() == LINESPACE_115 )
     354             :                         {
     355           0 :                             mbUseLineSPCustom = DO_NOT_CUSTOM;
     356           0 :                             maLineSpacing.SelectItem(2);
     357             :                             //bValueSetFocus = sal_True;  //wj
     358             :                         }
     359             :                         else
     360             :                         {
     361           0 :                             mbUseLineSPCustom = USE_CUSTOM;
     362           0 :                             maLineSpacing.SetNoSelection();
     363           0 :                                                  maLineSpacing.SelectItem(0);
     364             :                         }
     365             :                     }
     366           0 :                     break;
     367             : 
     368             :                 case SVX_INTER_LINE_SPACE_FIX:
     369             :                     {
     370           0 :                         if(pActLineDistFld != &(aLineDistAtMetricBox))
     371             :                         {
     372           0 :                             pActLineDistFld->Disable();
     373           0 :                             pActLineDistFld->Hide();
     374           0 :                             pActLineDistFld = &(aLineDistAtMetricBox);
     375             :                         }
     376             :                         else
     377             :                         {
     378           0 :                             pActLineDistFld = &(aLineDistAtPercentBox);
     379           0 :                             pActLineDistFld->Disable();
     380           0 :                             pActLineDistFld->Hide();
     381           0 :                             pActLineDistFld = &(aLineDistAtMetricBox);
     382             :                         }
     383           0 :                         pActLineDistFld->Enable();
     384           0 :                         pActLineDistFld->Show();
     385           0 :                         maLineSpacing.SetNoSelection();
     386           0 :                                           maLineSpacing.SelectItem(0);
     387             : 
     388             :                         SetMetricValue( aLineDistAtMetricBox,
     389           0 :                             currSPItem->GetInterLineSpace(), eUnit );
     390           0 :                         aLineDist.SelectEntryPos( LLINESPACE_DURCH );
     391             : 
     392           0 :                         mbUseLineSPCustom = USE_CUSTOM;
     393             :                     }
     394           0 :                     break;
     395             :                 default:
     396           0 :                     break;
     397             :                 }
     398             :             }
     399           0 :             break;
     400             :         case SVX_LINE_SPACE_FIX:
     401             :             {
     402           0 :                 if(pActLineDistFld != &(aLineDistAtMetricBox))
     403             :                 {
     404           0 :                     pActLineDistFld->Disable();
     405           0 :                     pActLineDistFld->Hide();
     406           0 :                     pActLineDistFld = &(aLineDistAtMetricBox);
     407             :                 }
     408             :                 else
     409             :                 {
     410           0 :                     pActLineDistFld = &(aLineDistAtPercentBox);
     411           0 :                     pActLineDistFld->Disable();
     412           0 :                     pActLineDistFld->Hide();
     413           0 :                     pActLineDistFld = &(aLineDistAtMetricBox);
     414             :                 }
     415           0 :                 pActLineDistFld->Enable();
     416           0 :                 pActLineDistFld->Show();
     417           0 :                 maLineSpacing.SetNoSelection();
     418           0 :                             maLineSpacing.SelectItem(0);
     419             : 
     420           0 :                 SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
     421           0 :                 aLineDist.SelectEntryPos( LLINESPACE_FIX );
     422             : 
     423           0 :                 mbUseLineSPCustom = USE_CUSTOM;
     424             :             }
     425           0 :             break;
     426             : 
     427             :         case SVX_LINE_SPACE_MIN:
     428             :             {
     429           0 :                 if(pActLineDistFld != &(aLineDistAtMetricBox))
     430             :                 {
     431           0 :                     pActLineDistFld->Disable();
     432           0 :                     pActLineDistFld->Hide();
     433           0 :                     pActLineDistFld = &(aLineDistAtMetricBox);
     434             :                 }
     435             :                 else
     436             :                 {
     437           0 :                     pActLineDistFld = &(aLineDistAtPercentBox);
     438           0 :                     pActLineDistFld->Disable();
     439           0 :                     pActLineDistFld->Hide();
     440           0 :                     pActLineDistFld = &(aLineDistAtMetricBox);
     441             :                 }
     442           0 :                 pActLineDistFld->Enable();
     443           0 :                 pActLineDistFld->Show();
     444           0 :                 maLineSpacing.SetNoSelection();
     445           0 :                             maLineSpacing.SelectItem(0);
     446             : 
     447           0 :                 SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
     448           0 :                 aLineDist.SelectEntryPos( LLINESPACE_MIN );
     449           0 :                 mbUseLineSPCustom = USE_CUSTOM;
     450             :             }
     451           0 :             break;
     452             :         default:
     453           0 :             break;
     454             :         }
     455             :     }
     456           0 :     else if( eState == SfxItemState::DISABLED )
     457             :     {
     458           0 :         aLineDist.Disable();
     459           0 :         pActLineDistFld->Enable(false);
     460           0 :         pActLineDistFld->SetText( "" );
     461           0 :         maLineSpacing.SetNoSelection();
     462           0 :               maLineSpacing.SelectItem(0);
     463             : 
     464           0 :         mbUseLineSPCustom = DO_NOT_CUSTOM;
     465             :     }
     466             :     else
     467             :     {
     468           0 :         pActLineDistFld->Enable(false);
     469           0 :         pActLineDistFld->SetText( "" );
     470           0 :         aLineDist.SetNoSelection();
     471           0 :         maLineSpacing.SetNoSelection();
     472           0 :               maLineSpacing.SelectItem(0);
     473           0 :         mbUseLineSPCustom = DO_NOT_CUSTOM;
     474             :     }
     475             : 
     476           0 :     aLineDist.SaveValue();
     477             : 
     478           0 :     const sal_uInt16 uCount = aLineDist.GetEntryCount();
     479           0 :     if( uCount == LLINESPACE_FIX + 1 )
     480             :     {
     481           0 :         switch (currentContext.GetCombinedContext_DI())
     482             :         {
     483             :         case CombinedEnumContext(Application_DrawImpress, Context_Table):
     484             :         case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
     485             :         case CombinedEnumContext(Application_DrawImpress, Context_Draw):
     486             :         case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
     487             :         case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
     488             :         case CombinedEnumContext(Application_Calc, Context_DrawText):
     489             :         case CombinedEnumContext(Application_WriterVariants, Context_DrawText):
     490             :         case CombinedEnumContext(Application_WriterVariants, Context_Annotation):
     491             :             {
     492           0 :                 aLineDist.RemoveEntry(LLINESPACE_FIX);
     493             :             }
     494             :         }
     495             :     }
     496           0 :     else if( uCount == LLINESPACE_FIX)
     497             :     {
     498           0 :         switch (currentContext.GetCombinedContext_DI())
     499             :         {
     500             :             case CombinedEnumContext(Application_WriterVariants, Context_Default):
     501             :             case CombinedEnumContext(Application_WriterVariants, Context_Text):
     502             :             case CombinedEnumContext(Application_WriterVariants, Context_Table):
     503             :             {
     504           0 :                 aLineDist.InsertEntry(OUString("Fixed"), LLINESPACE_FIX);
     505             :             }
     506             :         }
     507             :     }
     508           0 :     maLineSpacing.Format();
     509           0 :     maLineSpacing.StartSelection();
     510           0 : }
     511             : 
     512           0 : void ParaLineSpacingControl::SetAllNoSel()
     513             : {
     514           0 :     maLineSpacing.SelectItem(1);
     515           0 :     maLineSpacing.SetNoSelection();
     516           0 : }
     517             : 
     518           0 : IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox )
     519             : {
     520           0 :     maLineSpacing.SetNoSelection();
     521           0 :        maLineSpacing.SelectItem(0);
     522           0 :     maLineSpacing.Format();
     523           0 :     maLineSpacing.StartSelection();
     524             : 
     525           0 :     switch( pBox->GetSelectEntryPos() )
     526             :     {
     527             :         case LLINESPACE_1:
     528             :         case LLINESPACE_15:
     529             :         case LLINESPACE_2:
     530           0 :             pActLineDistFld->Enable(false);
     531           0 :             pActLineDistFld->SetText( "" );
     532           0 :             break;
     533             : 
     534             :         case LLINESPACE_DURCH:
     535           0 :             aLineDistAtPercentBox.Hide();
     536           0 :             pActLineDistFld = &aLineDistAtMetricBox;
     537           0 :             aLineDistAtMetricBox.SetMin(0);
     538             : 
     539             : 
     540           0 :             if ( aLineDistAtMetricBox.GetText().isEmpty() )
     541             :                 aLineDistAtMetricBox.SetValue(
     542           0 :                     aLineDistAtMetricBox.Normalize( 0 ) );
     543           0 :             aLineDistAtPercentBox.Hide();
     544           0 :             pActLineDistFld->Show();
     545           0 :             pActLineDistFld->Enable();
     546           0 :             break;
     547             : 
     548             :         case LLINESPACE_MIN:
     549           0 :             aLineDistAtPercentBox.Hide();
     550           0 :             pActLineDistFld = &aLineDistAtMetricBox;
     551           0 :             aLineDistAtMetricBox.SetMin(0);
     552             : 
     553           0 :             if ( aLineDistAtMetricBox.GetText().isEmpty() )
     554             :                 aLineDistAtMetricBox.SetValue(
     555           0 :                     aLineDistAtMetricBox.Normalize( 0 ), FUNIT_TWIP );
     556           0 :             aLineDistAtPercentBox.Hide();
     557           0 :             pActLineDistFld->Show();
     558           0 :             pActLineDistFld->Enable();
     559           0 :             break;
     560             : 
     561             :         case LLINESPACE_PROP:
     562           0 :             aLineDistAtMetricBox.Hide();
     563           0 :             pActLineDistFld = &aLineDistAtPercentBox;
     564             : 
     565           0 :             if ( aLineDistAtPercentBox.GetText().isEmpty() )
     566             :                 aLineDistAtPercentBox.SetValue(
     567           0 :                     aLineDistAtPercentBox.Normalize( 100 ), FUNIT_TWIP );
     568           0 :             aLineDistAtMetricBox.Hide();
     569           0 :             pActLineDistFld->Show();
     570           0 :             pActLineDistFld->Enable();
     571           0 :             break;
     572             :         case LLINESPACE_FIX:
     573             :         {
     574           0 :             aLineDistAtPercentBox.Hide();
     575           0 :             pActLineDistFld = &aLineDistAtMetricBox;
     576           0 :             sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
     577           0 :             aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP);
     578             : 
     579           0 :             if ( aLineDistAtMetricBox.GetValue() != nTemp )
     580             :                 SetMetricValue( aLineDistAtMetricBox,
     581           0 :                                     FIX_DIST_DEF, SFX_MAPUNIT_TWIP );
     582           0 :             aLineDistAtPercentBox.Hide();
     583           0 :             pActLineDistFld->Show();
     584           0 :             pActLineDistFld->Enable();
     585             :         }
     586           0 :         break;
     587             :     }
     588           0 :     ExecuteLineSpace();
     589           0 :     return 0;
     590             : }
     591             : 
     592           0 : IMPL_LINK_NOARG( ParaLineSpacingControl, LineSPDistAtHdl_Impl )
     593             : {
     594           0 :     ExecuteLineSpace();
     595           0 :     return (0L);
     596             : }
     597             : 
     598           0 : void ParaLineSpacingControl::ExecuteLineSpace()
     599             : {
     600           0 :     aLineDist.SaveValue();
     601           0 :     maLineSpacing.SetNoSelection();
     602             : 
     603           0 :     SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
     604           0 :     sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
     605             : 
     606           0 :     switch ( nPos )
     607             :     {
     608             :         case LLINESPACE_1:
     609             :         case LLINESPACE_15:
     610             :         case LLINESPACE_2:
     611             :             {
     612           0 :                 SetLineSpace( aSpacing, nPos );
     613           0 :                 maPos = nPos;
     614             :             }
     615           0 :             break;
     616             : 
     617             :         case LLINESPACE_PROP:
     618             :             {
     619             :                 SetLineSpace( aSpacing, nPos,
     620             :                     aLineDistAtPercentBox.Denormalize(
     621           0 :                     (long)aLineDistAtPercentBox.GetValue() ) );
     622           0 :                 maPos = nPos;
     623           0 :                 maValue =aLineDistAtPercentBox.GetValue();
     624             :             }
     625           0 :             break;
     626             : 
     627             :         case LLINESPACE_MIN:
     628             :         case LLINESPACE_DURCH:
     629             :         case LLINESPACE_FIX:
     630             :             {
     631             :                 SetLineSpace( aSpacing, nPos,
     632           0 :                     GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ) );
     633           0 :                 maPos = nPos;
     634           0 :                 maValue = GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit );
     635             :             }
     636           0 :         break;
     637             : 
     638             :         default:
     639             :             OSL_ENSURE(false, "error!!");
     640           0 :             break;
     641             :     }
     642             : 
     643             :     mpBindings->GetDispatcher()->Execute(
     644           0 :             SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
     645             : 
     646           0 :     mbUseLineSPCustom = USE_CUSTOM;
     647           0 : }
     648             : 
     649           0 : void ParaLineSpacingControl::SetLineSpace( SvxLineSpacingItem& rLineSpace,
     650             :                         int eSpace, long lValue )
     651             : {
     652           0 :     switch ( eSpace )
     653             :     {
     654             :         case LLINESPACE_1:
     655           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     656           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     657           0 :             break;
     658             : 
     659             :         case LLINESPACE_15:
     660           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     661           0 :             rLineSpace.SetPropLineSpace( LINESPACE_15 );
     662           0 :             break;
     663             : 
     664             :         case LLINESPACE_2:
     665           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     666           0 :             rLineSpace.SetPropLineSpace( LINESPACE_2 );
     667           0 :             break;
     668             : 
     669             :         case LLINESPACE_PROP:
     670           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     671           0 :             rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
     672           0 :             break;
     673             : 
     674             :         case LLINESPACE_MIN:
     675           0 :             rLineSpace.SetLineHeight( (sal_uInt16)lValue );
     676           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     677           0 :             break;
     678             : 
     679             :         case LLINESPACE_DURCH:
     680           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     681           0 :             rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
     682           0 :             break;
     683             : 
     684             :         case LLINESPACE_FIX:
     685           0 :             rLineSpace.SetLineHeight((sal_uInt16)lValue);
     686           0 :             rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
     687           0 :             rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
     688           0 :         break;
     689             :     }
     690           0 : }
     691             : 
     692           0 : IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl)
     693             : {
     694           0 :     maLineSpacing.SetNoSelection();
     695           0 :     bool bClosePop = true;
     696           0 :     if(pControl == &maLineSpacing)
     697             :     {
     698           0 :         sal_uInt16 iPos = maLineSpacing.GetSelectItemId();
     699           0 :         switch ( iPos )
     700             :         {
     701             :             case 1:
     702           0 :                 ExecuteLineSpacing( false, 0 );
     703           0 :                 break;
     704             :             case 2:
     705           0 :                 ExecuteLineSpacing( false, 3 );
     706           0 :                 break;
     707             :             case 3:
     708           0 :                 ExecuteLineSpacing( false, 1 );
     709           0 :                 break;
     710             :             case 4:
     711           0 :                 ExecuteLineSpacing( false, 2 );
     712           0 :                 break;
     713             :             case 5:
     714             :                 {
     715           0 :                     if(!(mbLineSPDisable))
     716             :                     {
     717             :                         //maPos = mrParaPropertyPanel.maLinePos;
     718           0 :                         aLineDist.SelectEntryPos( maPos ) ;
     719           0 :                         aLineDist.SaveValue();
     720             :                         //maValue = mrParaPropertyPanel.maLineValue;
     721             : 
     722           0 :                         SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
     723           0 :                         switch(maPos)
     724             :                         {
     725             :                         case LLINESPACE_1:
     726             :                         case LLINESPACE_15:
     727             :                         case LLINESPACE_2:
     728           0 :                             SetLineSpace( aSpacing, maPos );
     729           0 :                             break;
     730             : 
     731             :                         case LLINESPACE_PROP:
     732             :                             SetLineSpace( aSpacing, maPos,
     733           0 :                                 aLineDistAtPercentBox.Denormalize( (long)maValue ) );
     734           0 :                             break;
     735             : 
     736             :                         case LLINESPACE_MIN:
     737             :                         case LLINESPACE_DURCH:
     738             :                         case LLINESPACE_FIX:
     739           0 :                             SetLineSpace( aSpacing, maPos, (long)maValue );
     740           0 :                             break;
     741             :                         }
     742             : 
     743             :                         mpBindings->GetDispatcher()->Execute(
     744           0 :                             SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
     745             : 
     746           0 :                         ExecuteLineSpacing( USE_CUSTOM, 0 );
     747             :                     }
     748             :                     else
     749           0 :                         bClosePop = false;
     750             :                 }
     751           0 :                 break;
     752             :         }
     753             :     }
     754           0 :     if(bClosePop)
     755           0 :         mrParaPropertyPanel.EndSpacingPopupMode();
     756           0 :     return 0;
     757             : }
     758             : 
     759           0 : void ParaLineSpacingControl::ExecuteLineSpacing( bool aIsCustom, sal_uInt16 aEntry )
     760             : {
     761           0 :     if( !aIsCustom )
     762             :     {
     763           0 :         aLineDist.SelectEntryPos( aEntry ) ;
     764           0 :         aLineDist.SaveValue();
     765           0 :         SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
     766           0 :         sal_uInt16 nPos = aEntry;
     767           0 :         if( aEntry == LLINESPACE_PROP )
     768           0 :             SetLineSpace( aSpacing, nPos, aLineDistAtPercentBox.Denormalize( (long)115 ) );
     769             :         else
     770           0 :             SetLineSpace( aSpacing, nPos );
     771             : 
     772             :         mpBindings->GetDispatcher()->Execute(
     773           0 :             SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
     774             :     }
     775             : 
     776           0 :     if( !aIsCustom )
     777             :     {
     778           0 :         mbUseLineSPCustom = DO_NOT_CUSTOM;
     779           0 :         mrParaPropertyPanel.EndSpacingPopupMode();
     780             :     }
     781           0 :     maLineSpacing.SetNoSelection();
     782         594 : }
     783             : 
     784             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10