LCOV - code coverage report
Current view: top level - cui/source/tabpages - tabstpge.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 407 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 41 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sfx2/app.hxx>
      21             : #include <svtools/ruler.hxx>
      22             : #include <svx/dialogs.hrc>
      23             : #include <vcl/settings.hxx>
      24             : #include <vcl/builderfactory.hxx>
      25             : 
      26             : #include <cuires.hrc>
      27             : #include <editeng/lrspitem.hxx>
      28             : #include "tabstpge.hxx"
      29             : #include <dialmgr.hxx>
      30             : #include "svx/dlgutil.hxx"
      31             : #include <sfx2/module.hxx>
      32             : #include <svl/cjkoptions.hxx>
      33             : #include <unotools/localedatawrapper.hxx>
      34             : #include <comphelper/processfactory.hxx>
      35             : #include <sfx2/request.hxx>
      36             : #include <svl/intitem.hxx>
      37             : 
      38             : // class TabWin_Impl -----------------------------------------------------
      39             : 
      40             : class TabWin_Impl : public vcl::Window
      41             : {
      42             :     VclPtr<SvxTabulatorTabPage> mpPage;
      43             : private:
      44             :     sal_uInt16  nTabStyle;
      45             : 
      46             : public:
      47             : 
      48           0 :     TabWin_Impl(vcl::Window* pParent, WinBits nBits)
      49             :         : Window(pParent, nBits)
      50             :         , mpPage(0)
      51           0 :         , nTabStyle(0)
      52             :     {
      53           0 :     }
      54           0 :     virtual ~TabWin_Impl() { disposeOnce(); }
      55           0 :     virtual void dispose() SAL_OVERRIDE { mpPage.clear(); vcl::Window::dispose(); }
      56             : 
      57             :     virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE;
      58             : 
      59           0 :     void SetTabulatorTabPage(SvxTabulatorTabPage* pPage) { mpPage = pPage; }
      60           0 :     void SetTabStyle(sal_uInt16 nStyle) {nTabStyle = nStyle; }
      61             : };
      62             : 
      63           0 : VCL_BUILDER_FACTORY_ARGS(TabWin_Impl, 0)
      64             : 
      65             : const sal_uInt16 SvxTabulatorTabPage::pRanges[] =
      66             : {
      67             :     SID_ATTR_TABSTOP,
      68             :     SID_ATTR_TABSTOP_OFFSET,
      69             :     0
      70             : };
      71             : 
      72           0 : void FillUpWithDefTabs_Impl( long nDefDist, SvxTabStopItem& rTabs )
      73             : {
      74           0 :     if( rTabs.Count() )
      75           0 :         return;
      76             :     {
      77           0 :         SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
      78           0 :         rTabs.Insert( aSwTabStop );
      79             :     }
      80             : }
      81             : 
      82           0 : void TabWin_Impl::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
      83             : {
      84             :     // Paint tabulators
      85           0 :     Point aPoint;
      86           0 :     Size aSize = rRenderContext.GetOutputSizePixel();
      87           0 :     aPoint.X() = aSize.Width() / 2;
      88           0 :     aPoint.Y() = aSize.Height() / 2;
      89           0 :     Ruler::DrawTab(rRenderContext, rRenderContext.GetSettings().GetStyleSettings().GetFontColor(), aPoint, nTabStyle);
      90           0 : }
      91             : 
      92           0 : SvxTabulatorTabPage::SvxTabulatorTabPage(vcl::Window* pParent, const SfxItemSet& rAttr)
      93             :     : SfxTabPage(pParent, "ParagraphTabsPage","cui/ui/paratabspage.ui", &rAttr)
      94             :     , aAktTab(0)
      95           0 :     , aNewTabs(0, 0, SVX_TAB_ADJUST_LEFT, GetWhich(SID_ATTR_TABSTOP))
      96             :     , nDefDist(0)
      97             :     , eDefUnit(FUNIT_100TH_MM)
      98           0 :     , bCheck(false)
      99             : {
     100           0 :     get(m_pTabBox,"ED_TABPOS");
     101             :     //the tab images
     102           0 :     get(m_pLeftWin,"drawingareaWIN_TABLEFT");
     103           0 :     get(m_pRightWin,"drawingareaWIN_TABRIGHT");
     104           0 :     get(m_pCenterWin,"drawingareaWIN_TABCENTER");
     105           0 :     get(m_pDezWin,"drawingareaWIN_TABDECIMAL");
     106           0 :     m_pLeftWin->SetTabulatorTabPage(this);
     107           0 :     m_pRightWin->SetTabulatorTabPage(this);
     108           0 :     m_pCenterWin->SetTabulatorTabPage(this);
     109           0 :     m_pDezWin->SetTabulatorTabPage(this);
     110           0 :     m_pLeftWin->SetTabStyle((sal_uInt16)(RULER_TAB_LEFT|WB_HORZ));
     111           0 :     m_pRightWin->SetTabStyle((sal_uInt16)(RULER_TAB_RIGHT|WB_HORZ));
     112           0 :     m_pCenterWin->SetTabStyle((sal_uInt16)(RULER_TAB_CENTER|WB_HORZ));
     113           0 :     m_pDezWin->SetTabStyle((sal_uInt16)(RULER_TAB_DECIMAL|WB_HORZ));
     114             :     //upper radiobuttons
     115           0 :     SvtCJKOptions aCJKOptions;
     116           0 :     get(m_pLeftTab,  aCJKOptions.IsAsianTypographyEnabled() ? "radiobuttonST_LEFTTAB_ASIAN" : "radiobuttonBTN_TABTYPE_LEFT");
     117           0 :     get(m_pRightTab, aCJKOptions.IsAsianTypographyEnabled() ? "radiobuttonST_RIGHTTAB_ASIAN" : "radiobuttonBTN_TABTYPE_RIGHT");
     118           0 :     m_pLeftTab->Show(true);
     119           0 :     m_pRightTab->Show(true);
     120           0 :     get(m_pCenterTab,"radiobuttonBTN_TABTYPE_CENTER");
     121           0 :     get(m_pDezTab,"radiobuttonBTN_TABTYPE_DECIMAL");
     122           0 :     get(m_pDezChar,"entryED_TABTYPE_DECCHAR");
     123           0 :     get(m_pDezCharLabel,"labelFT_TABTYPE_DECCHAR");
     124             :     //lower radio buttons
     125           0 :     get(m_pNoFillChar,"radiobuttonBTN_FILLCHAR_NO");
     126           0 :     get(m_pFillPoints,"radiobuttonBTN_FILLCHAR_POINTS");
     127           0 :     get(m_pFillDashLine,"radiobuttonBTN_FILLCHAR_DASHLINE");
     128           0 :     get(m_pFillSolidLine,"radiobuttonBTN_FILLCHAR_UNDERSCORE");
     129           0 :     get(m_pFillSpecial,"radiobuttonBTN_FILLCHAR_OTHER");
     130           0 :     get(m_pFillChar,"entryED_FILLCHAR_OTHER");
     131             :     //button bar
     132           0 :     get(m_pNewBtn,"buttonBTN_NEW");
     133           0 :     get(m_pDelAllBtn,"buttonBTN_DELALL");
     134           0 :     get(m_pDelBtn,"buttonBTN_DEL");
     135             : 
     136           0 :     get(m_pTypeFrame, "frameFL_TABTYPE");
     137           0 :     get(m_pFillFrame, "frameFL_FILLCHAR");
     138             : 
     139             :     // This page needs ExchangeSupport
     140           0 :     SetExchangeSupport();
     141             : 
     142             :     // Set metric
     143           0 :     FieldUnit eFUnit = GetModuleFieldUnit( rAttr );
     144           0 :     SetFieldUnit( *m_pTabBox, eFUnit );
     145             : 
     146             :     // Initialize buttons
     147           0 :     m_pNewBtn->SetClickHdl( LINK( this,SvxTabulatorTabPage, NewHdl_Impl ) );
     148           0 :     m_pDelBtn->SetClickHdl( LINK( this,SvxTabulatorTabPage, DelHdl_Impl ) );
     149           0 :     m_pDelAllBtn->SetClickHdl( LINK( this,SvxTabulatorTabPage, DelAllHdl_Impl ) );
     150             : 
     151           0 :     Link<> aLink = LINK( this, SvxTabulatorTabPage, TabTypeCheckHdl_Impl );
     152           0 :     m_pLeftTab->SetClickHdl( aLink );
     153           0 :     m_pRightTab->SetClickHdl( aLink );
     154           0 :     m_pDezTab->SetClickHdl( aLink );
     155           0 :     m_pCenterTab->SetClickHdl( aLink );
     156             : 
     157           0 :     m_pDezChar->SetLoseFocusHdl( LINK( this,  SvxTabulatorTabPage, GetDezCharHdl_Impl ) );
     158           0 :     m_pDezChar->Disable();
     159           0 :     m_pDezCharLabel->Disable();
     160             : 
     161           0 :     aLink = LINK( this, SvxTabulatorTabPage, FillTypeCheckHdl_Impl );
     162           0 :     m_pNoFillChar->SetClickHdl( aLink );
     163           0 :     m_pFillPoints->SetClickHdl( aLink );
     164           0 :     m_pFillDashLine->SetClickHdl( aLink );
     165           0 :     m_pFillSolidLine->SetClickHdl( aLink );
     166           0 :     m_pFillSpecial->SetClickHdl( aLink );
     167           0 :     m_pFillChar->SetLoseFocusHdl( LINK( this,  SvxTabulatorTabPage, GetFillCharHdl_Impl ) );
     168           0 :     m_pFillChar->Disable();
     169             : 
     170           0 :     m_pTabBox->SetDoubleClickHdl( LINK( this, SvxTabulatorTabPage, SelectHdl_Impl ) );
     171           0 :     m_pTabBox->SetModifyHdl( LINK( this, SvxTabulatorTabPage, ModifyHdl_Impl ) );
     172             : 
     173             :     // Get the default decimal char from the system
     174           0 :     const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
     175           0 :     aAktTab.GetDecimal() = rLocaleWrapper.getNumDecimalSep()[0];
     176           0 : }
     177             : 
     178           0 : SvxTabulatorTabPage::~SvxTabulatorTabPage()
     179             : {
     180           0 :     disposeOnce();
     181           0 : }
     182             : 
     183           0 : void SvxTabulatorTabPage::dispose()
     184             : {
     185           0 :     m_pTabBox.clear();
     186           0 :     m_pLeftTab.clear();
     187           0 :     m_pRightTab.clear();
     188           0 :     m_pCenterTab.clear();
     189           0 :     m_pDezTab.clear();
     190           0 :     m_pLeftWin.clear();
     191           0 :     m_pRightWin.clear();
     192           0 :     m_pCenterWin.clear();
     193           0 :     m_pDezWin.clear();
     194           0 :     m_pDezCharLabel.clear();
     195           0 :     m_pDezChar.clear();
     196           0 :     m_pNoFillChar.clear();
     197           0 :     m_pFillPoints.clear();
     198           0 :     m_pFillDashLine.clear();
     199           0 :     m_pFillSolidLine.clear();
     200           0 :     m_pFillSpecial.clear();
     201           0 :     m_pFillChar.clear();
     202           0 :     m_pNewBtn.clear();
     203           0 :     m_pDelAllBtn.clear();
     204           0 :     m_pDelBtn.clear();
     205           0 :     m_pTypeFrame.clear();
     206           0 :     m_pFillFrame.clear();
     207           0 :     SfxTabPage::dispose();
     208           0 : }
     209             : 
     210           0 : bool SvxTabulatorTabPage::FillItemSet(SfxItemSet* rSet)
     211             : {
     212           0 :     bool bModified = false;
     213             : 
     214             :     // Put the controls' values in here
     215           0 :     if (m_pNewBtn->IsEnabled())
     216           0 :         NewHdl_Impl( 0 );
     217             : 
     218             :     // Call the LoseFocus-Handler first
     219           0 :     GetDezCharHdl_Impl(m_pDezChar);
     220           0 :     GetFillCharHdl_Impl(m_pFillChar);
     221             : 
     222           0 :     FillUpWithDefTabs_Impl(nDefDist, aNewTabs);
     223           0 :     SfxItemPool* pPool = rSet->GetPool();
     224           0 :     MapUnit eUnit = (MapUnit)pPool->GetMetric(GetWhich(SID_ATTR_TABSTOP));
     225           0 :     const SfxPoolItem* pOld = GetOldItem(*rSet, SID_ATTR_TABSTOP);
     226             : 
     227           0 :     if (MAP_100TH_MM != eUnit)
     228             :     {
     229             :         // If the ItemSet contains a LRSpaceItem with negative first line indent,
     230             :         // the TabStopItem needs to have a DefTab at position 0.
     231             :         const SfxPoolItem* pLRSpace;
     232             :         // If not in the new set, then maybe in the old one
     233           0 :         if (SfxItemState::SET != rSet->GetItemState(GetWhich(SID_ATTR_LRSPACE), true, &pLRSpace))
     234           0 :             pLRSpace = GetOldItem(*rSet, SID_ATTR_LRSPACE);
     235             : 
     236           0 :         if (pLRSpace && static_cast<const SvxLRSpaceItem*>(pLRSpace)->GetTextFirstLineOfst() < 0)
     237             :         {
     238           0 :             SvxTabStop aNull(0, SVX_TAB_ADJUST_DEFAULT);
     239           0 :             aNewTabs.Insert(aNull);
     240             :         }
     241             : 
     242           0 :         SvxTabStopItem aTmp(aNewTabs);
     243           0 :         aTmp.Remove(0, aTmp.Count());
     244             : 
     245           0 :         for (sal_uInt16 i = 0; i < aNewTabs.Count(); ++i)
     246             :         {
     247           0 :             SvxTabStop aTmpStop = aNewTabs[i];
     248           0 :             aTmpStop.GetTabPos() = LogicToLogic(aTmpStop.GetTabPos(), MAP_100TH_MM, eUnit);
     249           0 :             aTmp.Insert(aTmpStop);
     250             :         }
     251             : 
     252           0 :         if (!pOld || !(*static_cast<const SvxTabStopItem*>(pOld) == aTmp))
     253             :         {
     254           0 :             rSet->Put(aTmp);
     255           0 :             bModified = true;
     256           0 :         }
     257             :     }
     258           0 :     else if (!pOld || !( *static_cast<const SvxTabStopItem*>(pOld) == aNewTabs))
     259             :     {
     260           0 :         rSet->Put(aNewTabs);
     261           0 :         bModified = true;
     262             :     }
     263           0 :     return bModified;
     264             : }
     265             : 
     266           0 : VclPtr<SfxTabPage> SvxTabulatorTabPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
     267             : {
     268           0 :     return VclPtr<SvxTabulatorTabPage>::Create(pParent, *rSet);
     269             : }
     270             : 
     271           0 : void SvxTabulatorTabPage::Reset(const SfxItemSet* rSet)
     272             : {
     273           0 :     SfxItemPool* pPool = rSet->GetPool();
     274           0 :     MapUnit eUnit = (MapUnit)pPool->GetMetric(GetWhich(SID_ATTR_TABSTOP));
     275             : 
     276             :     // Current tabs
     277           0 :     const SfxPoolItem* pItem = GetItem(*rSet, SID_ATTR_TABSTOP);
     278             : 
     279           0 :     if (pItem)
     280             :     {
     281           0 :         if (MAP_100TH_MM != eUnit)
     282             :         {
     283           0 :             SvxTabStopItem aTmp(*static_cast<const SvxTabStopItem*>(pItem));
     284           0 :             aNewTabs.Remove(0, aNewTabs.Count());
     285             : 
     286           0 :             for (sal_uInt16 i = 0; i < aTmp.Count(); ++i)
     287             :             {
     288           0 :                 SvxTabStop aTmpStop = aTmp[i];
     289           0 :                 aTmpStop.GetTabPos() = LogicToLogic(aTmpStop.GetTabPos(), eUnit, MAP_100TH_MM);
     290           0 :                 aNewTabs.Insert(aTmpStop);
     291           0 :             }
     292             :         }
     293             :         else
     294           0 :             aNewTabs = *static_cast<const SvxTabStopItem*>(pItem);
     295             :     }
     296             :     else
     297           0 :         aNewTabs.Remove(0, aNewTabs.Count());
     298             : 
     299             :     // Defaul tab distance
     300           0 :     nDefDist = SVX_TAB_DEFDIST;
     301           0 :     pItem = GetItem(*rSet, SID_ATTR_TABSTOP_DEFAULTS);
     302             : 
     303           0 :     if (pItem)
     304           0 :         nDefDist = LogicToLogic(long(static_cast<const SfxUInt16Item*>(pItem)->GetValue()), eUnit, MAP_100TH_MM);
     305             : 
     306             :     // Tab pos currently selected
     307           0 :     sal_uInt16 nTabPos = 0;
     308           0 :     pItem = GetItem(*rSet, SID_ATTR_TABSTOP_POS);
     309             : 
     310           0 :     if (pItem)
     311           0 :         nTabPos = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     312             : 
     313           0 :     InitTabPos_Impl(nTabPos);
     314           0 : }
     315             : 
     316           0 : void SvxTabulatorTabPage::DisableControls(const sal_uInt16 nFlag)
     317             : {
     318           0 :     if ((TABTYPE_LEFT & nFlag) == TABTYPE_LEFT)
     319             :     {
     320           0 :         m_pLeftTab->Disable();
     321           0 :         m_pLeftWin->Disable();
     322             :     }
     323           0 :     if ( ( TABTYPE_RIGHT & nFlag ) == TABTYPE_RIGHT )
     324             :     {
     325           0 :         m_pRightTab->Disable();
     326           0 :         m_pRightWin->Disable();
     327             :     }
     328           0 :     if ( ( TABTYPE_CENTER & nFlag ) == TABTYPE_CENTER )
     329             :     {
     330           0 :         m_pCenterTab->Disable();
     331           0 :         m_pCenterWin->Disable();
     332             :     }
     333           0 :     if ( ( TABTYPE_DEZIMAL & nFlag ) == TABTYPE_DEZIMAL )
     334             :     {
     335           0 :         m_pDezTab->Disable();
     336           0 :         m_pDezWin->Disable();
     337           0 :         m_pDezCharLabel->Disable();
     338           0 :         m_pDezChar->Disable();
     339             :     }
     340           0 :     if ( ( TABTYPE_ALL & nFlag ) == TABTYPE_ALL )
     341           0 :          m_pTypeFrame->Disable();
     342           0 :     if ( ( TABFILL_NONE & nFlag ) == TABFILL_NONE )
     343           0 :         m_pNoFillChar->Disable();
     344           0 :     if ( ( TABFILL_POINT & nFlag ) == TABFILL_POINT )
     345           0 :         m_pFillPoints->Disable();
     346           0 :     if ( ( TABFILL_DASHLINE & nFlag ) == TABFILL_DASHLINE )
     347           0 :         m_pFillDashLine->Disable();
     348           0 :     if ( ( TABFILL_SOLIDLINE & nFlag ) == TABFILL_SOLIDLINE )
     349           0 :         m_pFillSolidLine->Disable();
     350           0 :     if ( ( TABFILL_SPECIAL & nFlag ) == TABFILL_SPECIAL )
     351             :     {
     352           0 :         m_pFillSpecial->Disable();
     353           0 :         m_pFillChar->Disable();
     354             :     }
     355           0 :      if ( ( TABFILL_ALL & nFlag ) == TABFILL_ALL )
     356           0 :          m_pFillFrame->Disable();
     357           0 : }
     358             : 
     359           0 : SfxTabPage::sfxpg SvxTabulatorTabPage::DeactivatePage( SfxItemSet* _pSet )
     360             : {
     361           0 :     if ( _pSet )
     362           0 :         FillItemSet( _pSet );
     363           0 :     return LEAVE_PAGE;
     364             : }
     365             : 
     366           0 : void SvxTabulatorTabPage::InitTabPos_Impl( sal_uInt16 nTabPos )
     367             : {
     368           0 :     m_pTabBox->Clear();
     369             : 
     370           0 :     long nOffset = 0;
     371           0 :     const SfxPoolItem* pItem = 0;
     372           0 :     if (GetItemSet().GetItemState(SID_ATTR_TABSTOP_OFFSET, true, &pItem) == SfxItemState::SET)
     373             :     {
     374           0 :         nOffset = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     375           0 :         MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric(GetWhich(SID_ATTR_TABSTOP));
     376           0 :         nOffset = OutputDevice::LogicToLogic(nOffset, eUnit, MAP_100TH_MM);
     377             :     }
     378             : 
     379             :     // Correct current TabPos and default tabs
     380           0 :     for ( sal_uInt16 i = 0; i < aNewTabs.Count(); i++ )
     381             :     {
     382           0 :         if ( aNewTabs[i].GetAdjustment() != SVX_TAB_ADJUST_DEFAULT )
     383             :         {
     384           0 :             m_pTabBox->InsertValue( m_pTabBox->Normalize(
     385           0 :                 aNewTabs[i].GetTabPos() + nOffset ), eDefUnit );
     386             :         }
     387             :         else
     388           0 :             aNewTabs.Remove( i-- );
     389             :     }
     390             : 
     391             :     // Select current tabulator
     392           0 :     const sal_uInt16 nSize = aNewTabs.Count();
     393             : 
     394           0 :     if ( nTabPos >= nSize )
     395           0 :         nTabPos = 0;
     396             : 
     397             :     // Switch off all RadioButtons for a start
     398           0 :     m_pLeftTab->Check( true );
     399           0 :     m_pNoFillChar->Check( true );
     400             : 
     401           0 :     if( m_pTabBox->GetEntryCount() > 0 )
     402             :     {
     403           0 :         m_pTabBox->SetText( m_pTabBox->GetEntry( nTabPos ) );
     404           0 :         aAktTab = aNewTabs[nTabPos];
     405             : 
     406           0 :         SetFillAndTabType_Impl();
     407           0 :         m_pNewBtn->Disable();
     408           0 :         m_pDelBtn->Enable();
     409             :     }
     410             :     else
     411             :     {   // If no entry, 0 is the default value
     412           0 :         m_pTabBox->SetValue( 0, eDefUnit );
     413             : 
     414           0 :         m_pNewBtn->Enable();
     415           0 :         m_pDelBtn->Disable();
     416             :     }
     417           0 : }
     418             : 
     419           0 : void SvxTabulatorTabPage::SetFillAndTabType_Impl()
     420             : {
     421           0 :     RadioButton* pTypeBtn = 0;
     422           0 :     RadioButton* pFillBtn = 0;
     423             : 
     424           0 :     m_pDezChar->Disable();
     425           0 :     m_pDezCharLabel->Disable();
     426             : 
     427           0 :     if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_LEFT )
     428           0 :         pTypeBtn = m_pLeftTab;
     429           0 :     else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_RIGHT )
     430           0 :         pTypeBtn = m_pRightTab;
     431           0 :     else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_DECIMAL )
     432             :     {
     433           0 :         pTypeBtn = m_pDezTab;
     434           0 :         m_pDezChar->Enable();
     435           0 :         m_pDezCharLabel->Enable();
     436           0 :         m_pDezChar->SetText( OUString( (sal_Unicode)aAktTab.GetDecimal() ) );
     437             :     }
     438           0 :     else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_CENTER )
     439           0 :         pTypeBtn = m_pCenterTab;
     440             : 
     441           0 :     if ( pTypeBtn )
     442           0 :         pTypeBtn->Check();
     443             : 
     444           0 :     m_pFillChar->Disable();
     445           0 :     m_pFillChar->SetText( "" );
     446             : 
     447           0 :     if ( aAktTab.GetFill() == ' ' )
     448           0 :         pFillBtn = m_pNoFillChar;
     449           0 :     else if ( aAktTab.GetFill() == '-' )
     450           0 :         pFillBtn = m_pFillDashLine;
     451           0 :     else if ( aAktTab.GetFill() == '_' )
     452           0 :         pFillBtn = m_pFillSolidLine;
     453           0 :     else if ( aAktTab.GetFill() == '.' )
     454           0 :         pFillBtn = m_pFillPoints;
     455             :     else
     456             :     {
     457           0 :         pFillBtn = m_pFillSpecial;
     458           0 :         m_pFillChar->Enable();
     459           0 :         m_pFillChar->SetText( OUString( (sal_Unicode)aAktTab.GetFill() ) );
     460             :     }
     461           0 :     pFillBtn->Check();
     462           0 : }
     463             : 
     464           0 : IMPL_LINK( SvxTabulatorTabPage, NewHdl_Impl, Button *, pBtn )
     465             : {
     466             :     // Add a new one and select it
     467             :     // Get the value from the display
     468           0 :     long nVal = static_cast<long>(m_pTabBox->Denormalize( m_pTabBox->GetValue( eDefUnit ) ));
     469             : 
     470             :     // If the pBtn == 0 && the value == 0 then do not create a tab, because we create via OK
     471           0 :     if ( nVal == 0 && pBtn == 0 )
     472           0 :         return 0;
     473             : 
     474           0 :     long nOffset = 0;
     475           0 :     const SfxPoolItem* pItem = 0;
     476             : 
     477           0 :     if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, true, &pItem ) ==
     478             :          SfxItemState::SET )
     479             :     {
     480           0 :         nOffset = static_cast<const SfxInt32Item*>(pItem)->GetValue();
     481           0 :         MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
     482           0 :         nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM  );
     483             :     }
     484           0 :     const long nReal = nVal - nOffset;
     485           0 :     sal_Int32 nSize = m_pTabBox->GetEntryCount();
     486             : 
     487             :     sal_Int32 i;
     488           0 :     for( i = 0; i < nSize; i++ )
     489             :     {
     490           0 :         if ( nReal < aNewTabs[i].GetTabPos() )
     491           0 :             break;
     492             :     }
     493             : 
     494             :     // Make ListBox entry
     495           0 :     m_pTabBox->InsertValue( m_pTabBox->Normalize( nVal ), eDefUnit, i );
     496           0 :     aAktTab.GetTabPos() = nReal;
     497           0 :     SvxTabAdjust eAdj = SVX_TAB_ADJUST_LEFT;
     498             : 
     499           0 :     if ( m_pRightTab->IsChecked() )
     500           0 :         eAdj = SVX_TAB_ADJUST_RIGHT;
     501           0 :     else if ( m_pCenterTab->IsChecked() )
     502           0 :         eAdj = SVX_TAB_ADJUST_CENTER;
     503           0 :     else if ( m_pDezTab->IsChecked() )
     504           0 :         eAdj = SVX_TAB_ADJUST_DECIMAL;
     505             : 
     506           0 :     aAktTab.GetAdjustment() = eAdj;
     507           0 :     aNewTabs.Insert( aAktTab );
     508             : 
     509           0 :     m_pNewBtn->Disable();
     510           0 :     m_pDelBtn->Enable();
     511           0 :     m_pTabBox->GrabFocus();
     512             : 
     513             :     // If no RadioButton was clicked, we need to put anyway
     514           0 :     bCheck = true;
     515             :     // Set the selection into the position Edit
     516           0 :     m_pTabBox->SetSelection(Selection(0, m_pTabBox->GetText().getLength()));
     517           0 :     return 0;
     518             : }
     519             : 
     520           0 : IMPL_LINK_NOARG(SvxTabulatorTabPage, DelHdl_Impl)
     521             : {
     522           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue() );
     523             : 
     524           0 :     if ( nPos == COMBOBOX_ENTRY_NOTFOUND )
     525           0 :         return 0;
     526             : 
     527           0 :     if ( m_pTabBox->GetEntryCount() == 1 )
     528             :     {
     529           0 :         DelAllHdl_Impl( 0 );
     530           0 :         return 0;
     531             :     }
     532             : 
     533             :     // Delete Tab
     534           0 :     m_pTabBox->RemoveEntryAt(nPos);
     535           0 :     aNewTabs.Remove( nPos );
     536             : 
     537             :     // Reset aAktTab
     538           0 :     const sal_uInt16 nSize = aNewTabs.Count();
     539             : 
     540           0 :     if ( nSize > 0 )
     541             :     {
     542             :         // Correct Pos
     543           0 :         nPos = ( ( nSize - 1 ) >= nPos) ? nPos : nPos - 1;
     544           0 :         m_pTabBox->SetValue( m_pTabBox->GetValue( nPos ) );
     545           0 :         aAktTab = aNewTabs[nPos];
     546             :     }
     547             : 
     548             :     // If no Tabs Enable Disable Controls
     549           0 :     if ( m_pTabBox->GetEntryCount() == 0 )
     550             :     {
     551           0 :         m_pDelBtn->Disable();
     552           0 :         m_pNewBtn->Enable();
     553           0 :         m_pTabBox->GrabFocus();
     554             :     }
     555             : 
     556             :     // If no RadioButton was clicked, we need to put anyway
     557           0 :     bCheck = true;
     558           0 :     return 0;
     559             : }
     560             : 
     561           0 : IMPL_LINK_NOARG(SvxTabulatorTabPage, DelAllHdl_Impl)
     562             : {
     563           0 :     if ( aNewTabs.Count() )
     564             :     {
     565           0 :         aNewTabs = SvxTabStopItem( 0 );
     566           0 :         InitTabPos_Impl();
     567             : 
     568             :         // So that we put in FillItemSet()
     569           0 :         bCheck = true;
     570             :     }
     571           0 :     return 0;
     572             : }
     573             : 
     574           0 : IMPL_LINK( SvxTabulatorTabPage, TabTypeCheckHdl_Impl, RadioButton *, pBox )
     575             : {
     576           0 :     bCheck = true;
     577             :     SvxTabAdjust eAdj;
     578           0 :     m_pDezChar->Disable();
     579           0 :     m_pDezCharLabel->Disable();
     580           0 :     m_pDezChar->SetText( "" );
     581             : 
     582           0 :     if ( pBox == m_pLeftTab )
     583           0 :         eAdj = SVX_TAB_ADJUST_LEFT;
     584           0 :     else if ( pBox == m_pRightTab )
     585           0 :         eAdj = SVX_TAB_ADJUST_RIGHT;
     586           0 :     else if ( pBox == m_pCenterTab )
     587           0 :         eAdj = SVX_TAB_ADJUST_CENTER;
     588             :     else
     589             :     {
     590           0 :         eAdj = SVX_TAB_ADJUST_DECIMAL;
     591           0 :         m_pDezChar->Enable();
     592           0 :         m_pDezCharLabel->Enable();
     593           0 :         m_pDezChar->SetText( OUString( (sal_Unicode)aAktTab.GetDecimal() ) );
     594             :     }
     595             : 
     596           0 :     aAktTab.GetAdjustment() = eAdj;
     597           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit );
     598             : 
     599           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     600             :     {
     601           0 :         aNewTabs.Remove( nPos );
     602           0 :         aNewTabs.Insert( aAktTab );
     603             :     }
     604           0 :     return 0;
     605             : }
     606             : 
     607           0 : IMPL_LINK( SvxTabulatorTabPage, FillTypeCheckHdl_Impl, RadioButton *, pBox )
     608             : {
     609           0 :     bCheck = true;
     610           0 :     sal_uInt8 cFill = ' ';
     611           0 :     m_pFillChar->SetText( "" );
     612           0 :     m_pFillChar->Disable();
     613             : 
     614           0 :     if( pBox == m_pFillSpecial )
     615           0 :         m_pFillChar->Enable();
     616           0 :     else if ( pBox == m_pNoFillChar )
     617           0 :         cFill = ' ';
     618           0 :     else if ( pBox == m_pFillSolidLine )
     619           0 :         cFill = '_';
     620           0 :     else if ( pBox == m_pFillPoints )
     621           0 :         cFill = '.';
     622           0 :     else if ( pBox == m_pFillDashLine )
     623           0 :         cFill = '-';
     624             : 
     625           0 :     aAktTab.GetFill() = cFill;
     626           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit );
     627             : 
     628           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     629             :     {
     630           0 :         aNewTabs.Remove( nPos );
     631           0 :         aNewTabs.Insert( aAktTab );
     632             :     }
     633           0 :     return 0;
     634             : }
     635             : 
     636           0 : IMPL_LINK( SvxTabulatorTabPage, GetFillCharHdl_Impl, Edit *, pEdit )
     637             : {
     638           0 :     OUString aChar( pEdit->GetText() );
     639             : 
     640           0 :     if ( !aChar.isEmpty() )
     641           0 :         aAktTab.GetFill() = aChar[0];
     642             : 
     643           0 :     const sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit);
     644           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     645             :     {
     646           0 :         aNewTabs.Remove( nPos );
     647           0 :         aNewTabs.Insert( aAktTab );
     648             :     }
     649           0 :     return 0;
     650             : }
     651             : 
     652           0 : IMPL_LINK( SvxTabulatorTabPage, GetDezCharHdl_Impl, Edit *, pEdit )
     653             : {
     654           0 :     OUString aChar( pEdit->GetText() );
     655           0 :     if ( !aChar.isEmpty() && ( aChar[0] >= ' '))
     656           0 :         aAktTab.GetDecimal() = aChar[0];
     657             : 
     658           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit );
     659           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     660             :     {
     661           0 :         aNewTabs.Remove( nPos );
     662           0 :         aNewTabs.Insert( aAktTab );
     663             :     }
     664           0 :     return 0;
     665             : }
     666             : 
     667           0 : IMPL_LINK_NOARG(SvxTabulatorTabPage, SelectHdl_Impl)
     668             : {
     669           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit );
     670           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     671             :     {
     672           0 :         aAktTab = aNewTabs[nPos];
     673           0 :         m_pNewBtn->Disable();
     674           0 :         SetFillAndTabType_Impl();
     675             :     }
     676           0 :     return 0;
     677             : }
     678             : 
     679           0 : IMPL_LINK_NOARG(SvxTabulatorTabPage, ModifyHdl_Impl)
     680             : {
     681           0 :     sal_Int32 nPos = m_pTabBox->GetValuePos( m_pTabBox->GetValue( eDefUnit ), eDefUnit );
     682           0 :     if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
     683             :     {
     684           0 :         aAktTab = aNewTabs[nPos];
     685           0 :         SetFillAndTabType_Impl();
     686             : 
     687           0 :         aAktTab.GetTabPos() =
     688           0 :             static_cast<long>(m_pTabBox->Denormalize( m_pTabBox->GetValue( eDefUnit ) ));
     689             : 
     690           0 :         m_pNewBtn->Disable();
     691           0 :         m_pDelBtn->Enable();
     692           0 :         return 0;
     693             :     }
     694           0 :     m_pNewBtn->Enable();
     695           0 :     m_pDelBtn->Disable();
     696           0 :     return 0;
     697             : }
     698             : 
     699           0 : void SvxTabulatorTabPage::PageCreated(const SfxAllItemSet& aSet)
     700             : {
     701           0 :     SFX_ITEMSET_ARG (&aSet,pControlItem,SfxUInt16Item,SID_SVXTABULATORTABPAGE_CONTROLFLAGS,false);
     702           0 :     if (pControlItem)
     703           0 :         DisableControls(pControlItem->GetValue());
     704           0 : }
     705             : 
     706             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11