LCOV - code coverage report
Current view: top level - svx/source/dialog - fontwork.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 2 408 0.5 %
Date: 2015-06-13 12:38:46 Functions: 4 39 10.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sfx2/module.hxx>
      21             : #include <sfx2/dispatch.hxx>
      22             : 
      23             : #include <svx/svdobj.hxx>
      24             : #include <svx/svdopath.hxx>
      25             : #include <svx/svdview.hxx>
      26             : #include <svx/svdocirc.hxx>
      27             : #include <svx/xtextit.hxx>
      28             : 
      29             : #include <svx/dialmgr.hxx>
      30             : #include "svx/dlgutil.hxx"
      31             : 
      32             : #include <svx/dialogs.hrc>
      33             : #include <svx/fontwork.hxx>
      34             : #include <editeng/outlobj.hxx>
      35             : #include <basegfx/polygon/b2dpolygon.hxx>
      36             : #include <basegfx/point/b2dpoint.hxx>
      37             : #include <vcl/settings.hxx>
      38             : 
      39         398 : SFX_IMPL_DOCKINGWINDOW_WITHID( SvxFontWorkChildWindow, SID_FONTWORK );
      40             : 
      41             : // ControllerItem for Fontwork
      42             : 
      43           0 : SvxFontWorkControllerItem::SvxFontWorkControllerItem
      44             : (
      45             :     sal_uInt16 _nId,
      46             :     SvxFontWorkDialog& rDlg,
      47             :     SfxBindings& rBindings
      48             : ) :
      49             : 
      50             :     SfxControllerItem( _nId, rBindings ),
      51             : 
      52           0 :     rFontWorkDlg( rDlg )
      53             : {
      54           0 : }
      55             : 
      56             : // StateChanged method for FontWork items
      57             : 
      58           0 : void SvxFontWorkControllerItem::StateChanged( sal_uInt16 /*nSID*/, SfxItemState /*eState*/,
      59             :                                               const SfxPoolItem* pItem )
      60             : {
      61           0 :     switch ( GetId() )
      62             :     {
      63             :         case SID_FORMTEXT_STYLE:
      64             :         {
      65             :             const XFormTextStyleItem* pStateItem =
      66           0 :                                 PTR_CAST(XFormTextStyleItem, pItem);
      67             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStyleItem expected");
      68           0 :             rFontWorkDlg.SetStyle_Impl(pStateItem);
      69           0 :             break;
      70             :         }
      71             :         case SID_FORMTEXT_ADJUST:
      72             :         {
      73             :             const XFormTextAdjustItem* pStateItem =
      74           0 :                                 PTR_CAST(XFormTextAdjustItem, pItem);
      75             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextAdjustItem expected");
      76           0 :             rFontWorkDlg.SetAdjust_Impl(pStateItem);
      77           0 :             break;
      78             :         }
      79             :         case SID_FORMTEXT_DISTANCE:
      80             :         {
      81             :             const XFormTextDistanceItem* pStateItem =
      82           0 :                                 PTR_CAST(XFormTextDistanceItem, pItem);
      83             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextDistanceItem erwartet");
      84           0 :             rFontWorkDlg.SetDistance_Impl(pStateItem);
      85           0 :             break;
      86             :         }
      87             :         case SID_FORMTEXT_START:
      88             :         {
      89             :             const XFormTextStartItem* pStateItem =
      90           0 :                                 PTR_CAST(XFormTextStartItem, pItem);
      91             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStartItem expected");
      92           0 :             rFontWorkDlg.SetStart_Impl(pStateItem);
      93           0 :             break;
      94             :         }
      95             :         case SID_FORMTEXT_MIRROR:
      96             :         {
      97             :             const XFormTextMirrorItem* pStateItem =
      98           0 :                                 PTR_CAST(XFormTextMirrorItem, pItem);
      99             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextMirrorItem expected");
     100           0 :             rFontWorkDlg.SetMirror_Impl(pStateItem);
     101           0 :             break;
     102             :         }
     103             :         case SID_FORMTEXT_HIDEFORM:
     104             :         {
     105             :             const XFormTextHideFormItem* pStateItem =
     106           0 :                                 PTR_CAST(XFormTextHideFormItem, pItem);
     107             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextHideFormItem expected");
     108           0 :             rFontWorkDlg.SetShowForm_Impl(pStateItem);
     109           0 :             break;
     110             :         }
     111             :         case SID_FORMTEXT_OUTLINE:
     112             :         {
     113             :             const XFormTextOutlineItem* pStateItem =
     114           0 :                                 PTR_CAST(XFormTextOutlineItem, pItem);
     115             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextOutlineItem expected");
     116           0 :             rFontWorkDlg.SetOutline_Impl(pStateItem);
     117           0 :             break;
     118             :         }
     119             :         case SID_FORMTEXT_SHADOW:
     120             :         {
     121             :             const XFormTextShadowItem* pStateItem =
     122           0 :                                 PTR_CAST(XFormTextShadowItem, pItem);
     123             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowItem expected");
     124           0 :             rFontWorkDlg.SetShadow_Impl(pStateItem);
     125           0 :             break;
     126             :         }
     127             :         case SID_FORMTEXT_SHDWCOLOR:
     128             :         {
     129             :             const XFormTextShadowColorItem* pStateItem =
     130           0 :                                 PTR_CAST(XFormTextShadowColorItem, pItem);
     131             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowColorItem expected");
     132           0 :             rFontWorkDlg.SetShadowColor_Impl(pStateItem);
     133           0 :             break;
     134             :         }
     135             :         case SID_FORMTEXT_SHDWXVAL:
     136             :         {
     137             :             const XFormTextShadowXValItem* pStateItem =
     138           0 :                                 PTR_CAST(XFormTextShadowXValItem, pItem);
     139             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowXValItem expected");
     140           0 :             rFontWorkDlg.SetShadowXVal_Impl(pStateItem);
     141           0 :             break;
     142             :         }
     143             :         case SID_FORMTEXT_SHDWYVAL:
     144             :         {
     145             :             const XFormTextShadowYValItem* pStateItem =
     146           0 :                                 PTR_CAST(XFormTextShadowYValItem, pItem);
     147             :             DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowYValItem expected");
     148           0 :             rFontWorkDlg.SetShadowYVal_Impl(pStateItem);
     149           0 :             break;
     150             :         }
     151             :     }
     152           0 : }
     153             : 
     154             : // Derivation from SfxChildWindow as "containers" for Fontwork dialog
     155             : 
     156           0 : SvxFontWorkChildWindow::SvxFontWorkChildWindow
     157             : (
     158             :     vcl::Window* _pParent,
     159             :     sal_uInt16 nId,
     160             :     SfxBindings* pBindings,
     161             :     SfxChildWinInfo* pInfo
     162             : ) :
     163             : 
     164           0 :     SfxChildWindow( _pParent, nId )
     165             : {
     166           0 :     VclPtrInstance<SvxFontWorkDialog> pDlg(pBindings, this, _pParent);
     167           0 :     pWindow = pDlg.get();
     168             : 
     169           0 :     eChildAlignment = SfxChildAlignment::NOALIGNMENT;
     170             : 
     171           0 :     pDlg->Initialize( pInfo );
     172           0 : }
     173             : 
     174             : // Floating Window to the attribution of text effects
     175           0 : SvxFontWorkDialog::SvxFontWorkDialog(SfxBindings *pBindinx,
     176             :                                      SfxChildWindow *pCW,
     177             :                                      vcl::Window* _pParent)
     178             :     : SfxDockingWindow(pBindinx, pCW, _pParent, "DockingFontwork", "svx/ui/dockingfontwork.ui")
     179             :     , rBindings(*pBindinx)
     180             :     , nLastStyleTbxId(0)
     181             :     , nLastAdjustTbxId(0)
     182             :     , nLastShadowTbxId(0)
     183             :     , nSaveShadowX(0)
     184             :     , nSaveShadowY(0)
     185             :     , nSaveShadowAngle(450)
     186           0 :     , nSaveShadowSize (100)
     187             : {
     188           0 :     get(m_pMtrFldDistance, "distance");
     189           0 :     get(m_pMtrFldTextStart, "indent");
     190           0 :     get(m_pMtrFldShadowX, "distancex");
     191           0 :     get(m_pMtrFldShadowY, "distancey");
     192           0 :     get(m_pShadowColorLB, "color");
     193           0 :     get(m_pFbShadowX, "shadowx");
     194           0 :     get(m_pFbShadowY, "shadowy");
     195             : 
     196           0 :     get(m_pTbxStyle, "style");
     197           0 :     nStyleOffId = m_pTbxStyle->GetItemId(0);
     198           0 :     m_pTbxStyle->SetItemBits(nStyleOffId, ToolBoxItemBits::AUTOCHECK);
     199           0 :     nStyleRotateId = m_pTbxStyle->GetItemId(1);
     200           0 :     m_pTbxStyle->SetItemBits(nStyleRotateId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     201           0 :     nStyleUprightId = m_pTbxStyle->GetItemId(2);
     202           0 :     m_pTbxStyle->SetItemBits(nStyleUprightId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     203           0 :     nStyleSlantXId = m_pTbxStyle->GetItemId(3);
     204           0 :     m_pTbxStyle->SetItemBits(nStyleSlantXId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     205           0 :     nStyleSlantYId = m_pTbxStyle->GetItemId(4);
     206           0 :     m_pTbxStyle->SetItemBits(nStyleSlantYId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     207             : 
     208           0 :     get(m_pTbxShadow, "shadow");
     209           0 :     nShowFormId = m_pTbxShadow->GetItemId(0);
     210           0 :     m_pTbxShadow->SetItemBits(nShowFormId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::CHECKABLE);
     211           0 :     nOutlineId = m_pTbxShadow->GetItemId(1);
     212           0 :     m_pTbxShadow->SetItemBits(nOutlineId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     213           0 :     nShadowOffId = m_pTbxShadow->GetItemId(2);
     214           0 :     m_pTbxShadow->SetItemBits(nShadowOffId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     215           0 :     nShadowNormalId = m_pTbxShadow->GetItemId(3);
     216           0 :     m_pTbxShadow->SetItemBits(nShadowNormalId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     217           0 :     nShadowSlantId = m_pTbxShadow->GetItemId(4);
     218           0 :     m_pTbxShadow->SetItemBits(nShadowSlantId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     219             : 
     220           0 :     get(m_pTbxAdjust, "adjust");
     221           0 :     nAdjustMirrorId = m_pTbxAdjust->GetItemId(0);
     222           0 :     m_pTbxAdjust->SetItemBits(nAdjustMirrorId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::CHECKABLE);
     223           0 :     nAdjustLeftId = m_pTbxAdjust->GetItemId(1);
     224           0 :     m_pTbxAdjust->SetItemBits(nAdjustLeftId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::CHECKABLE);
     225           0 :     nAdjustCenterId = m_pTbxAdjust->GetItemId(2);
     226           0 :     m_pTbxAdjust->SetItemBits(nAdjustCenterId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     227           0 :     nAdjustRightId = m_pTbxAdjust->GetItemId(3);
     228           0 :     m_pTbxAdjust->SetItemBits(nAdjustRightId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     229           0 :     nAdjustAutoSizeId = m_pTbxAdjust->GetItemId(4);
     230           0 :     m_pTbxAdjust->SetItemBits(nAdjustAutoSizeId, ToolBoxItemBits::AUTOCHECK|ToolBoxItemBits::RADIOCHECK);
     231             : 
     232           0 :     ApplyImageList();
     233             : 
     234           0 :     pCtrlItems[0] = new SvxFontWorkControllerItem(SID_FORMTEXT_STYLE, *this, rBindings);
     235           0 :     pCtrlItems[1] = new SvxFontWorkControllerItem(SID_FORMTEXT_ADJUST, *this, rBindings);
     236           0 :     pCtrlItems[2] = new SvxFontWorkControllerItem(SID_FORMTEXT_DISTANCE, *this, rBindings);
     237           0 :     pCtrlItems[3] = new SvxFontWorkControllerItem(SID_FORMTEXT_START, *this, rBindings);
     238           0 :     pCtrlItems[4] = new SvxFontWorkControllerItem(SID_FORMTEXT_MIRROR, *this, rBindings);
     239           0 :     pCtrlItems[5] = new SvxFontWorkControllerItem(SID_FORMTEXT_HIDEFORM, *this, rBindings);
     240           0 :     pCtrlItems[6] = new SvxFontWorkControllerItem(SID_FORMTEXT_OUTLINE, *this, rBindings);
     241           0 :     pCtrlItems[7] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHADOW, *this, rBindings);
     242           0 :     pCtrlItems[8] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWCOLOR, *this, rBindings);
     243           0 :     pCtrlItems[9] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWXVAL, *this, rBindings);
     244           0 :     pCtrlItems[10] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWYVAL, *this, rBindings);
     245             : 
     246           0 :     Size aSize = m_pTbxStyle->CalcWindowSizePixel();
     247           0 :     m_pTbxStyle->SetSizePixel(aSize);
     248           0 :     m_pTbxStyle->SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectStyleHdl_Impl) );
     249             : 
     250           0 :     m_pTbxAdjust->SetSizePixel(aSize);
     251           0 :     m_pTbxAdjust->SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectAdjustHdl_Impl) );
     252             : 
     253           0 :     m_pTbxShadow->SetSizePixel(aSize);
     254           0 :     m_pTbxShadow->SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectShadowHdl_Impl) );
     255             : 
     256           0 :     Link<> aLink = LINK(this, SvxFontWorkDialog, ModifyInputHdl_Impl);
     257           0 :     m_pMtrFldDistance->SetModifyHdl( aLink );
     258           0 :     m_pMtrFldTextStart->SetModifyHdl( aLink );
     259           0 :     m_pMtrFldShadowX->SetModifyHdl( aLink );
     260           0 :     m_pMtrFldShadowY->SetModifyHdl( aLink );
     261             : 
     262             :     // Set System metric
     263           0 :     const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
     264           0 :     SetFieldUnit(*m_pMtrFldDistance, eDlgUnit, true);
     265           0 :     SetFieldUnit(*m_pMtrFldTextStart, eDlgUnit, true);
     266           0 :     SetFieldUnit(*m_pMtrFldShadowX, eDlgUnit, true);
     267           0 :     SetFieldUnit(*m_pMtrFldShadowY, eDlgUnit, true);
     268           0 :     if( eDlgUnit == FUNIT_MM )
     269             :     {
     270           0 :         m_pMtrFldDistance->SetSpinSize( 50 );
     271           0 :         m_pMtrFldTextStart->SetSpinSize( 50 );
     272           0 :         m_pMtrFldShadowX->SetSpinSize( 50 );
     273           0 :         m_pMtrFldShadowY->SetSpinSize( 50 );
     274             :     }
     275             :     else
     276             :     {
     277           0 :         m_pMtrFldDistance->SetSpinSize( 10 );
     278           0 :         m_pMtrFldTextStart->SetSpinSize( 10 );
     279           0 :         m_pMtrFldShadowX->SetSpinSize( 10 );
     280           0 :         m_pMtrFldShadowY->SetSpinSize( 10 );
     281             :     }
     282             : 
     283           0 :     m_pShadowColorLB->SetSelectHdl( LINK(this, SvxFontWorkDialog, ColorSelectHdl_Impl) );
     284             : 
     285           0 :     aInputIdle.SetPriority(SchedulerPriority::LOWEST);
     286           0 :     aInputIdle.SetIdleHdl(LINK(this, SvxFontWorkDialog, InputTimoutHdl_Impl));
     287           0 : }
     288             : 
     289           0 : SvxFontWorkDialog::~SvxFontWorkDialog()
     290             : {
     291           0 :     disposeOnce();
     292           0 : }
     293             : 
     294           0 : void SvxFontWorkDialog::dispose()
     295             : {
     296           0 :     for (sal_uInt16 i = 0; i < CONTROLLER_COUNT; i++)
     297           0 :         pCtrlItems[i]->dispose();
     298           0 :     m_pTbxStyle.clear();
     299           0 :     m_pTbxAdjust.clear();
     300           0 :     m_pFbDistance.clear();
     301           0 :     m_pMtrFldDistance.clear();
     302           0 :     m_pFbTextStart.clear();
     303           0 :     m_pMtrFldTextStart.clear();
     304           0 :     m_pTbxShadow.clear();
     305           0 :     m_pFbShadowX.clear();
     306           0 :     m_pMtrFldShadowX.clear();
     307           0 :     m_pFbShadowY.clear();
     308           0 :     m_pMtrFldShadowY.clear();
     309           0 :     m_pShadowColorLB.clear();
     310           0 :     SfxDockingWindow::dispose();
     311           0 : }
     312             : 
     313           0 : SfxChildAlignment SvxFontWorkDialog::CheckAlignment( SfxChildAlignment eActAlign,
     314             :                                                      SfxChildAlignment eAlign )
     315             : {
     316             :     SfxChildAlignment eAlignment;
     317             : 
     318           0 :     switch ( eAlign )
     319             :     {
     320             :         case SfxChildAlignment::TOP:
     321             :         case SfxChildAlignment::HIGHESTTOP:
     322             :         case SfxChildAlignment::LOWESTTOP:
     323             :         case SfxChildAlignment::BOTTOM:
     324             :         case SfxChildAlignment::LOWESTBOTTOM:
     325             :         case SfxChildAlignment::HIGHESTBOTTOM:
     326             :         {
     327           0 :             eAlignment = eActAlign;
     328             :         }
     329           0 :         break;
     330             : 
     331             :         case SfxChildAlignment::LEFT:
     332             :         case SfxChildAlignment::RIGHT:
     333             :         case SfxChildAlignment::FIRSTLEFT:
     334             :         case SfxChildAlignment::LASTLEFT:
     335             :         case SfxChildAlignment::FIRSTRIGHT:
     336             :         case SfxChildAlignment::LASTRIGHT:
     337             :         {
     338           0 :             eAlignment = eAlign;
     339             :         }
     340           0 :         break;
     341             : 
     342             :         default:
     343             :         {
     344           0 :             eAlignment = eAlign;
     345             :         }
     346           0 :         break;
     347             :     }
     348             : 
     349           0 :     return eAlignment;
     350             : }
     351             : 
     352             : // Set style buttons
     353             : 
     354           0 : void SvxFontWorkDialog::SetStyle_Impl(const XFormTextStyleItem* pItem)
     355             : {
     356           0 :     if ( pItem )
     357             :     {
     358           0 :         sal_uInt16 nId = nStyleOffId;
     359             : 
     360           0 :         switch ( pItem->GetValue() )
     361             :         {
     362           0 :             case XFT_ROTATE : nId = nStyleRotateId;   break;
     363           0 :             case XFT_UPRIGHT: nId = nStyleUprightId;  break;
     364           0 :             case XFT_SLANTX : nId = nStyleSlantXId;   break;
     365           0 :             case XFT_SLANTY : nId = nStyleSlantYId;   break;
     366             :             default: ;//prevent warning
     367             :         }
     368           0 :         m_pTbxStyle->Enable();
     369             : 
     370             :         // Make sure that there is always exactly one checked toolbox item.
     371           0 :         if ( pItem->GetValue() == XFT_NONE )
     372             :         {
     373           0 :             m_pTbxStyle->CheckItem(nStyleRotateId, false);
     374           0 :             m_pTbxStyle->CheckItem(nStyleUprightId, false);
     375           0 :             m_pTbxStyle->CheckItem(nStyleSlantXId, false);
     376           0 :             m_pTbxStyle->CheckItem(nStyleSlantYId, false);
     377             : 
     378           0 :             m_pTbxStyle->CheckItem(nStyleOffId, true);
     379             :         }
     380             :         else
     381             :         {
     382           0 :             m_pTbxStyle->CheckItem(nStyleOffId, false);
     383           0 :             m_pTbxStyle->CheckItem(nId);
     384             :         }
     385             : 
     386           0 :         nLastStyleTbxId = nId;
     387             :     }
     388             :     else
     389           0 :         m_pTbxStyle->Disable();
     390           0 : }
     391             : 
     392             : // Set adjust buttons
     393             : 
     394           0 : void SvxFontWorkDialog::SetAdjust_Impl(const XFormTextAdjustItem* pItem)
     395             : {
     396           0 :     if ( pItem )
     397             :     {
     398             :         sal_uInt16 nId;
     399             : 
     400           0 :         m_pTbxAdjust->Enable();
     401           0 :         m_pMtrFldDistance->Enable();
     402             : 
     403           0 :         if ( pItem->GetValue() == XFT_LEFT || pItem->GetValue() == XFT_RIGHT )
     404             :         {
     405           0 :             if ( pItem->GetValue() == XFT_LEFT )    nId = nAdjustLeftId;
     406           0 :             else                                    nId = nAdjustRightId;
     407           0 :             m_pMtrFldTextStart->Enable();
     408             :         }
     409             :         else
     410             :         {
     411           0 :             if ( pItem->GetValue() == XFT_CENTER )  nId = nAdjustCenterId;
     412           0 :             else                                    nId = nAdjustAutoSizeId;
     413           0 :             m_pMtrFldTextStart->Disable();
     414             :         }
     415             : 
     416           0 :         if ( !m_pTbxAdjust->IsItemChecked(nId) )
     417             :         {
     418           0 :             m_pTbxAdjust->CheckItem(nId);
     419             :         }
     420           0 :         nLastAdjustTbxId = nId;
     421             :     }
     422             :     else
     423             :     {
     424           0 :         m_pTbxAdjust->Disable();
     425           0 :         m_pMtrFldTextStart->Disable();
     426           0 :         m_pMtrFldDistance->Disable();
     427             :     }
     428           0 : }
     429             : 
     430             : // Enter Distance value in the edit field
     431             : 
     432           0 : void SvxFontWorkDialog::SetDistance_Impl(const XFormTextDistanceItem* pItem)
     433             : {
     434             :     // Use HasChildPathFocus() instead of HasFocus() at SpinFields
     435           0 :     if ( pItem && !m_pMtrFldDistance->HasChildPathFocus() )
     436             :     {
     437           0 :         SetMetricValue(*m_pMtrFldDistance, pItem->GetValue(), SFX_MAPUNIT_100TH_MM);
     438             :     }
     439           0 : }
     440             : 
     441             : // Enter indent value in the edit field
     442             : 
     443           0 : void SvxFontWorkDialog::SetStart_Impl(const XFormTextStartItem* pItem)
     444             : {
     445             :     // Use HasChildPathFocus() instead of HasFocus() at SpinFields
     446           0 :     if ( pItem && !m_pMtrFldTextStart->HasChildPathFocus() )
     447             :     {
     448           0 :         SetMetricValue(*m_pMtrFldTextStart, pItem->GetValue(), SFX_MAPUNIT_100TH_MM);
     449             :     }
     450           0 : }
     451             : 
     452             : // Set button for reversing the direction of text
     453             : 
     454           0 : void SvxFontWorkDialog::SetMirror_Impl(const XFormTextMirrorItem* pItem)
     455             : {
     456           0 :     if ( pItem )
     457           0 :         m_pTbxAdjust->CheckItem(nAdjustMirrorId, pItem->GetValue());
     458           0 : }
     459             : 
     460             : // Set button for contour display
     461             : 
     462           0 : void SvxFontWorkDialog::SetShowForm_Impl(const XFormTextHideFormItem* pItem)
     463             : {
     464           0 :     if ( pItem )
     465           0 :         m_pTbxShadow->CheckItem(nShowFormId, !pItem->GetValue());
     466           0 : }
     467             : 
     468             : // Set button for text border
     469             : 
     470           0 : void SvxFontWorkDialog::SetOutline_Impl(const XFormTextOutlineItem* pItem)
     471             : {
     472           0 :     if ( pItem )
     473           0 :         m_pTbxShadow->CheckItem(nOutlineId, pItem->GetValue());
     474           0 : }
     475             : 
     476             : // Set shadow buttons
     477             : 
     478           0 : void SvxFontWorkDialog::SetShadow_Impl(const XFormTextShadowItem* pItem,
     479             :                                         bool bRestoreValues)
     480             : {
     481           0 :     if ( pItem )
     482             :     {
     483             :         sal_uInt16 nId;
     484             : 
     485           0 :         m_pTbxShadow->Enable();
     486             : 
     487           0 :         if ( pItem->GetValue() == XFTSHADOW_NONE )
     488             :         {
     489           0 :             nId = nShadowOffId;
     490           0 :             m_pFbShadowX->Hide();
     491           0 :             m_pFbShadowY->Hide();
     492           0 :             m_pMtrFldShadowX->Disable();
     493           0 :             m_pMtrFldShadowY->Disable();
     494           0 :             m_pShadowColorLB->Disable();
     495             :         }
     496             :         else
     497             :         {
     498           0 :             m_pFbShadowX->Show();
     499           0 :             m_pFbShadowY->Show();
     500           0 :             m_pMtrFldShadowX->Enable();
     501           0 :             m_pMtrFldShadowY->Enable();
     502           0 :             m_pShadowColorLB->Enable();
     503             : 
     504           0 :             if ( pItem->GetValue() == XFTSHADOW_NORMAL )
     505             :             {
     506           0 :                 nId = nShadowNormalId;
     507           0 :                 const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
     508             : 
     509           0 :                 m_pMtrFldShadowX->SetUnit( eDlgUnit );
     510           0 :                 m_pMtrFldShadowX->SetDecimalDigits(2);
     511           0 :                 m_pMtrFldShadowX->SetMin(LONG_MIN);
     512           0 :                 m_pMtrFldShadowX->SetMax(LONG_MAX);
     513           0 :                 if( eDlgUnit == FUNIT_MM )
     514           0 :                     m_pMtrFldShadowX->SetSpinSize( 50 );
     515             :                 else
     516           0 :                     m_pMtrFldShadowX->SetSpinSize( 10 );
     517             : 
     518           0 :                 m_pMtrFldShadowY->SetUnit( eDlgUnit );
     519           0 :                 m_pMtrFldShadowY->SetDecimalDigits(2);
     520           0 :                 m_pMtrFldShadowY->SetMin(LONG_MIN);
     521           0 :                 m_pMtrFldShadowY->SetMax(LONG_MAX);
     522           0 :                 if( eDlgUnit == FUNIT_MM )
     523           0 :                     m_pMtrFldShadowY->SetSpinSize( 50 );
     524             :                 else
     525           0 :                     m_pMtrFldShadowY->SetSpinSize( 10 );
     526             : 
     527           0 :                 if ( bRestoreValues )
     528             :                 {
     529           0 :                     SetMetricValue(*m_pMtrFldShadowX, nSaveShadowX, SFX_MAPUNIT_100TH_MM);
     530           0 :                     SetMetricValue(*m_pMtrFldShadowY, nSaveShadowY, SFX_MAPUNIT_100TH_MM);
     531             : 
     532           0 :                     XFormTextShadowXValItem aXItem( nSaveShadowX );
     533           0 :                     XFormTextShadowYValItem aYItem( nSaveShadowY );
     534             : 
     535           0 :                     GetBindings().GetDispatcher()->Execute(
     536           0 :                         SID_FORMTEXT_SHDWXVAL, SfxCallMode::RECORD, &aXItem, &aYItem, 0L );
     537             :                 }
     538             :             }
     539             :             else
     540             :             {
     541           0 :                 nId = nShadowSlantId;
     542             : 
     543           0 :                 m_pMtrFldShadowX->SetUnit(FUNIT_DEGREE);
     544           0 :                 m_pMtrFldShadowX->SetDecimalDigits(1);
     545           0 :                 m_pMtrFldShadowX->SetMin(-1800);
     546           0 :                 m_pMtrFldShadowX->SetMax( 1800);
     547           0 :                 m_pMtrFldShadowX->SetSpinSize(10);
     548             : 
     549           0 :                 m_pMtrFldShadowY->SetUnit(FUNIT_PERCENT);
     550           0 :                 m_pMtrFldShadowY->SetDecimalDigits(0);
     551           0 :                 m_pMtrFldShadowY->SetMin(-999);
     552           0 :                 m_pMtrFldShadowY->SetMax( 999);
     553           0 :                 m_pMtrFldShadowY->SetSpinSize(10);
     554             : 
     555           0 :                 if ( bRestoreValues )
     556             :                 {
     557           0 :                     m_pMtrFldShadowX->SetValue(nSaveShadowAngle);
     558           0 :                     m_pMtrFldShadowY->SetValue(nSaveShadowSize);
     559           0 :                     XFormTextShadowXValItem aXItem(nSaveShadowAngle);
     560           0 :                     XFormTextShadowYValItem aYItem(nSaveShadowSize);
     561           0 :                     GetBindings().GetDispatcher()->Execute(
     562           0 :                         SID_FORMTEXT_SHDWXVAL, SfxCallMode::RECORD, &aXItem, &aYItem, 0L );
     563             :                 }
     564             :             }
     565             :         }
     566             : 
     567           0 :         if ( !m_pTbxShadow->IsItemChecked(nId) )
     568             :         {
     569           0 :             m_pTbxShadow->CheckItem(nId);
     570             :         }
     571           0 :         nLastShadowTbxId = nId;
     572             : 
     573           0 :         ApplyImageList();
     574             :     }
     575             :     else
     576             :     {
     577           0 :         m_pTbxShadow->Disable();
     578           0 :         m_pMtrFldShadowX->Disable();
     579           0 :         m_pMtrFldShadowY->Disable();
     580           0 :         m_pShadowColorLB->Disable();
     581             :     }
     582           0 : }
     583             : 
     584             : // Insert shadow color in listbox
     585             : 
     586           0 : void SvxFontWorkDialog::SetShadowColor_Impl(const XFormTextShadowColorItem* pItem)
     587             : {
     588           0 :     if ( pItem )
     589           0 :         m_pShadowColorLB->SelectEntry(pItem->GetColorValue());
     590           0 : }
     591             : 
     592             : // Enter X-value for shadow in edit field
     593             : 
     594           0 : void SvxFontWorkDialog::SetShadowXVal_Impl(const XFormTextShadowXValItem* pItem)
     595             : {
     596             :     // Use HasChildPathFocus() instead of HasFocus() at SpinFields
     597           0 :     if ( pItem && !m_pMtrFldShadowX->HasChildPathFocus() )
     598             :     {
     599             :         // #i19251#
     600             :         // sal_Int32 nValue = pItem->GetValue();
     601             : 
     602             :         // #i19251#
     603             :         // The two involved fields/items are used double and contain/give different
     604             :         // values regarding to the access method. Thus, here we need to separate the access
     605             :         // methos regarding to the kind of value accessed.
     606           0 :         if (m_pTbxShadow->IsItemChecked(nShadowSlantId))
     607             :         {
     608             :             // #i19251#
     609             :             // There is no value correction necessary at all, i think this
     610             :             // was only tried to be done without understanding that the two
     611             :             // involved fields/items are used double and contain/give different
     612             :             // values regarding to the access method.
     613             :             // nValue = nValue - ( int( float( nValue ) / 360.0 ) * 360 );
     614           0 :             m_pMtrFldShadowX->SetValue(pItem->GetValue());
     615             :         }
     616             :         else
     617             :         {
     618           0 :             SetMetricValue(*m_pMtrFldShadowX, pItem->GetValue(), SFX_MAPUNIT_100TH_MM);
     619             :         }
     620             :     }
     621           0 : }
     622             : 
     623             : // Enter Y-value for shadow in edit field
     624             : 
     625           0 : void SvxFontWorkDialog::SetShadowYVal_Impl(const XFormTextShadowYValItem* pItem)
     626             : {
     627             :     // Use HasChildPathFocus() instead of HasFocus() at SpinFields
     628           0 :     if ( pItem && !m_pMtrFldShadowY->HasChildPathFocus() )
     629             :     {
     630             :         // #i19251#
     631             :         // The two involved fields/items are used double and contain/give different
     632             :         // values regarding to the access method. Thus, here we need to separate the access
     633             :         // methos regarding to the kind of value accessed.
     634           0 :         if (m_pTbxShadow->IsItemChecked(nShadowSlantId))
     635             :         {
     636           0 :             m_pMtrFldShadowY->SetValue(pItem->GetValue());
     637             :         }
     638             :         else
     639             :         {
     640           0 :             SetMetricValue(*m_pMtrFldShadowY, pItem->GetValue(), SFX_MAPUNIT_100TH_MM);
     641             :         }
     642             :     }
     643           0 : }
     644             : 
     645           0 : IMPL_LINK_NOARG_TYPED(SvxFontWorkDialog, SelectStyleHdl_Impl, ToolBox *, void)
     646             : {
     647           0 :     sal_uInt16 nId = m_pTbxStyle->GetCurItemId();
     648             : 
     649             :     // Execute this block when a different toolbox item has been clicked or
     650             :     // when the off item has been clicked.  The later is necessary to
     651             :     // override the toolbox behaviour of unchecking the item after second
     652             :     // click on it: One of the items has to be checked at all times (when
     653             :     // enabled that is.)
     654           0 :     if (nId == nStyleOffId || nId != nLastStyleTbxId )
     655             :     {
     656           0 :         XFormTextStyle eStyle = XFT_NONE;
     657             : 
     658           0 :         if (nId == nStyleRotateId)
     659           0 :             eStyle = XFT_ROTATE;
     660           0 :         else if (nId == nStyleUprightId)
     661           0 :             eStyle = XFT_UPRIGHT;
     662           0 :         else if (nId == nStyleSlantXId)
     663           0 :             eStyle = XFT_SLANTX;
     664           0 :         else if (nId == nStyleSlantYId)
     665           0 :             eStyle = XFT_SLANTY;
     666             : 
     667           0 :         XFormTextStyleItem aItem( eStyle );
     668           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_STYLE, SfxCallMode::RECORD, &aItem, 0L );
     669           0 :         SetStyle_Impl( &aItem );
     670           0 :         nLastStyleTbxId = nId;
     671             :     }
     672           0 : }
     673             : 
     674           0 : IMPL_LINK_NOARG_TYPED(SvxFontWorkDialog, SelectAdjustHdl_Impl, ToolBox *, void)
     675             : {
     676           0 :     sal_uInt16 nId = m_pTbxAdjust->GetCurItemId();
     677             : 
     678           0 :     if (nId == nAdjustMirrorId)
     679             :     {
     680           0 :         XFormTextMirrorItem aItem(m_pTbxAdjust->IsItemChecked(nId));
     681           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_MIRROR, SfxCallMode::SLOT, &aItem, 0L );
     682             :     }
     683           0 :     else if ( nId != nLastAdjustTbxId )
     684             :     {
     685           0 :         XFormTextAdjust eAdjust = XFT_AUTOSIZE;
     686             : 
     687           0 :         if (nId == nAdjustLeftId)
     688           0 :             eAdjust = XFT_LEFT;
     689           0 :         else if (nId == nAdjustCenterId)
     690           0 :             eAdjust = XFT_CENTER;
     691           0 :         else if (nId == nAdjustRightId)
     692           0 :             eAdjust = XFT_RIGHT;
     693             : 
     694           0 :         XFormTextAdjustItem aItem(eAdjust);
     695           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_ADJUST, SfxCallMode::RECORD, &aItem, 0L );
     696           0 :         SetAdjust_Impl(&aItem);
     697           0 :         nLastAdjustTbxId = nId;
     698             :     }
     699           0 : }
     700             : 
     701           0 : IMPL_LINK_NOARG_TYPED(SvxFontWorkDialog, SelectShadowHdl_Impl, ToolBox *, void)
     702             : {
     703           0 :     sal_uInt16 nId = m_pTbxShadow->GetCurItemId();
     704             : 
     705           0 :     if (nId == nShowFormId)
     706             :     {
     707           0 :         XFormTextHideFormItem aItem(!m_pTbxShadow->IsItemChecked(nId));
     708           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_HIDEFORM, SfxCallMode::RECORD, &aItem, 0L );
     709             :     }
     710           0 :     else if (nId == nOutlineId)
     711             :     {
     712           0 :         XFormTextOutlineItem aItem(m_pTbxShadow->IsItemChecked(nId));
     713           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_OUTLINE, SfxCallMode::RECORD, &aItem, 0L );
     714             :     }
     715           0 :     else if (nId != nLastShadowTbxId)
     716             :     {
     717           0 :         XFormTextShadow eShadow = XFTSHADOW_NONE;
     718             : 
     719           0 :         if (nLastShadowTbxId == nShadowNormalId)
     720             :         {
     721           0 :             nSaveShadowX = GetCoreValue(*m_pMtrFldShadowX, SFX_MAPUNIT_100TH_MM);
     722           0 :             nSaveShadowY = GetCoreValue(*m_pMtrFldShadowY, SFX_MAPUNIT_100TH_MM);
     723             :         }
     724           0 :         else if (nLastShadowTbxId == nShadowSlantId)
     725             :         {
     726           0 :             nSaveShadowAngle = static_cast<long>(m_pMtrFldShadowX->GetValue());
     727           0 :             nSaveShadowSize  = static_cast<long>(m_pMtrFldShadowY->GetValue());
     728             :         }
     729           0 :         nLastShadowTbxId = nId;
     730             : 
     731           0 :         if ( nId == nShadowNormalId)     eShadow = XFTSHADOW_NORMAL;
     732           0 :         else if (nId == nShadowSlantId) eShadow = XFTSHADOW_SLANT;
     733             : 
     734           0 :         XFormTextShadowItem aItem(eShadow);
     735           0 :         GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHADOW, SfxCallMode::RECORD, &aItem, 0L );
     736           0 :         SetShadow_Impl(&aItem, true);
     737             :     }
     738           0 : }
     739             : 
     740           0 : IMPL_LINK_NOARG(SvxFontWorkDialog, ModifyInputHdl_Impl)
     741             : {
     742           0 :     aInputIdle.Start();
     743           0 :     return 0;
     744             : }
     745             : 
     746           0 : IMPL_LINK_NOARG_TYPED(SvxFontWorkDialog, InputTimoutHdl_Impl, Idle *, void)
     747             : {
     748             :     // Possibly set the Metric system again. This should be done with a
     749             :     // listen, this is however not possible at the moment due to compabillity
     750             :     // issues.
     751           0 :     const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
     752           0 :     if( eDlgUnit != m_pMtrFldDistance->GetUnit() )
     753             :     {
     754           0 :         SetFieldUnit(*m_pMtrFldDistance, eDlgUnit, true);
     755           0 :         SetFieldUnit(*m_pMtrFldTextStart, eDlgUnit, true);
     756           0 :         m_pMtrFldDistance->SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
     757           0 :         m_pMtrFldTextStart->SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
     758             :     }
     759           0 :     if( eDlgUnit != m_pMtrFldShadowX->GetUnit() &&
     760           0 :         m_pTbxShadow->IsItemChecked(nShadowNormalId) )
     761             :     {
     762           0 :         SetFieldUnit(*m_pMtrFldShadowX, eDlgUnit, true);
     763           0 :         SetFieldUnit(*m_pMtrFldShadowY, eDlgUnit, true);
     764           0 :         m_pMtrFldShadowX->SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
     765           0 :         m_pMtrFldShadowY->SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
     766             :     }
     767             : 
     768           0 :     long nValue = GetCoreValue(*m_pMtrFldDistance, SFX_MAPUNIT_100TH_MM);
     769           0 :     XFormTextDistanceItem aDistItem( nValue );
     770           0 :     nValue = GetCoreValue(*m_pMtrFldTextStart, SFX_MAPUNIT_100TH_MM);
     771           0 :     XFormTextStartItem aStartItem( nValue );
     772             : 
     773           0 :     sal_Int32 nValueX(0L);
     774           0 :     sal_Int32 nValueY(0L);
     775             : 
     776             :     // #i19251#
     777             :     // The two involved fields/items are used double and contain/give different
     778             :     // values regarding to the access method. Thus, here we need to separate the access
     779             :     // methos regarding to the kind of value accessed.
     780           0 :     if (nLastShadowTbxId == nShadowNormalId)
     781             :     {
     782           0 :         nValueX = GetCoreValue(*m_pMtrFldShadowX, SFX_MAPUNIT_100TH_MM);
     783           0 :         nValueY = GetCoreValue(*m_pMtrFldShadowY, SFX_MAPUNIT_100TH_MM);
     784             :     }
     785           0 :     else if (nLastShadowTbxId == nShadowSlantId)
     786             :     {
     787           0 :         nValueX = static_cast<long>(m_pMtrFldShadowX->GetValue());
     788           0 :         nValueY = static_cast<long>(m_pMtrFldShadowY->GetValue());
     789             :     }
     790             : 
     791           0 :     XFormTextShadowXValItem aShadowXItem( nValueX );
     792           0 :     XFormTextShadowYValItem aShadowYItem( nValueY );
     793             : 
     794             :     // Slot-ID does not matter, the Exec method evaluates the entire item set
     795           0 :     GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_DISTANCE, SfxCallMode::RECORD, &aDistItem,
     796           0 :                                             &aStartItem, &aShadowXItem, &aShadowYItem, 0L );
     797           0 : }
     798             : 
     799           0 : IMPL_LINK_NOARG(SvxFontWorkDialog, ColorSelectHdl_Impl)
     800             : {
     801           0 :     XFormTextShadowColorItem aItem( "", m_pShadowColorLB->GetSelectEntryColor() );
     802           0 :     GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHDWCOLOR, SfxCallMode::RECORD, &aItem, 0L );
     803           0 :     return 0;
     804             : }
     805             : 
     806           0 : void SvxFontWorkDialog::SetColorList(const XColorListRef &pList)
     807             : {
     808           0 :     if ( pList.is() && pList != pColorList )
     809             :     {
     810           0 :         pColorList = pList;
     811           0 :         m_pShadowColorLB->Clear();
     812           0 :         m_pShadowColorLB->Fill(pColorList);
     813             :     }
     814           0 : }
     815             : 
     816           0 : void SvxFontWorkDialog::ApplyImageList()
     817             : {
     818           0 :     if (nLastShadowTbxId == nShadowSlantId)
     819             :     {
     820           0 :         m_pFbShadowX->SetImage(Image(SVX_RES(RID_SVXIMG_SHADOW_ANGLE)));
     821           0 :         m_pFbShadowY->SetImage(Image(SVX_RES(RID_SVXIMG_SHADOW_SIZE)));
     822             :     }
     823             :     else
     824             :     {
     825           0 :         m_pFbShadowX->SetImage(Image(SVX_RES(RID_SVXIMG_SHADOW_XDIST)));
     826           0 :         m_pFbShadowY->SetImage(Image(SVX_RES(RID_SVXIMG_SHADOW_YDIST)));
     827             :     }
     828         390 : }
     829             : 
     830             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11