LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - linectrl.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 73 286 25.5 %
Date: 2014-11-03 Functions: 23 42 54.8 %
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 <string>
      21             : 
      22             : #include <vcl/toolbox.hxx>
      23             : #include <sfx2/app.hxx>
      24             : #include <sfx2/dispatch.hxx>
      25             : #include <sfx2/objsh.hxx>
      26             : 
      27             : #include <svx/dialogs.hrc>
      28             : #include "helpid.hrc"
      29             : 
      30             : #include "svx/drawitem.hxx"
      31             : #include "svx/xattr.hxx"
      32             : #include <svx/xtable.hxx>
      33             : #include "svx/linectrl.hxx"
      34             : #include <svx/itemwin.hxx>
      35             : #include <svx/dialmgr.hxx>
      36             : #include <svx/unoapi.hxx>
      37             : #include <boost/scoped_ptr.hpp>
      38             : 
      39             : using namespace ::com::sun::star::uno;
      40             : using namespace ::com::sun::star::beans;
      41             : using namespace ::com::sun::star::util;
      42             : using namespace ::com::sun::star::frame;
      43             : using namespace ::com::sun::star::lang;
      44             : 
      45             : // For End Line Controlleer
      46             : #define MAX_LINES 12
      47             : 
      48         326 : SFX_IMPL_TOOLBOX_CONTROL( SvxLineStyleToolBoxControl, XLineStyleItem );
      49         326 : SFX_IMPL_TOOLBOX_CONTROL( SvxLineWidthToolBoxControl, XLineWidthItem );
      50         326 : SFX_IMPL_TOOLBOX_CONTROL( SvxLineEndToolBoxControl,   SfxBoolItem );
      51             : 
      52         126 : SvxLineStyleToolBoxControl::SvxLineStyleToolBoxControl( sal_uInt16 nSlotId,
      53             :                                                         sal_uInt16 nId,
      54             :                                                         ToolBox& rTbx ) :
      55             :     SfxToolBoxControl( nSlotId, nId, rTbx ),
      56             :     pStyleItem      ( NULL ),
      57             :     pDashItem       ( NULL ),
      58         126 :     bUpdate         ( false )
      59             : {
      60         126 :     addStatusListener( OUString( ".uno:LineDash" ));
      61         126 :     addStatusListener( OUString( ".uno:DashListState" ));
      62         126 : }
      63             : 
      64             : 
      65             : 
      66         378 : SvxLineStyleToolBoxControl::~SvxLineStyleToolBoxControl()
      67             : {
      68         126 :     delete pStyleItem;
      69         126 :     delete pDashItem;
      70         252 : }
      71             : 
      72             : 
      73             : 
      74         198 : void SvxLineStyleToolBoxControl::StateChanged (
      75             : 
      76             :     sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
      77             : 
      78             : {
      79         198 :     SvxLineBox* pBox = static_cast<SvxLineBox*>( GetToolBox().GetItemWindow( GetId() ) );
      80             :     DBG_ASSERT( pBox, "Window not found!" );
      81             : 
      82         198 :     if( eState == SfxItemState::DISABLED )
      83             :     {
      84           0 :         pBox->Disable();
      85           0 :         pBox->SetNoSelection();
      86             :     }
      87             :     else
      88             :     {
      89         198 :         pBox->Enable();
      90             : 
      91         198 :         if ( eState == SfxItemState::DEFAULT )
      92             :         {
      93         132 :             if( nSID == SID_ATTR_LINE_STYLE )
      94             :             {
      95          66 :                 delete pStyleItem;
      96          66 :                 pStyleItem = static_cast<XLineStyleItem*>(pState->Clone());
      97             :             }
      98          66 :             else if( nSID == SID_ATTR_LINE_DASH )
      99             :             {
     100          66 :                 delete pDashItem;
     101          66 :                 pDashItem = static_cast<XLineDashItem*>(pState->Clone());
     102             :             }
     103             : 
     104         132 :             bUpdate = true;
     105         132 :             Update( pState );
     106             :         }
     107          66 :         else if ( nSID != SID_DASH_LIST )
     108             :         {
     109             :             // no or ambiguous status
     110           0 :             pBox->SetNoSelection();
     111             :         }
     112             :     }
     113         198 : }
     114             : 
     115             : 
     116             : 
     117         132 : void SvxLineStyleToolBoxControl::Update( const SfxPoolItem* pState )
     118             : {
     119         132 :     if ( pState && bUpdate )
     120             :     {
     121         132 :         bUpdate = false;
     122             : 
     123         132 :         SvxLineBox* pBox = static_cast<SvxLineBox*>(GetToolBox().GetItemWindow( GetId() ));
     124             :         DBG_ASSERT( pBox, "Window not found!" );
     125             : 
     126             :         // Since the timer can strike unexpectedly, it may happen that
     127             :         // the LB is not yet filled. A ClearCache() on the control
     128             :         // in DelayHdl () was unsuccessful.
     129         132 :         if( pBox->GetEntryCount() == 0 )
     130           0 :             pBox->FillControl();
     131             : 
     132             :         XLineStyle eXLS;
     133             : 
     134         132 :         if ( pStyleItem )
     135         132 :             eXLS = ( XLineStyle )pStyleItem->GetValue();
     136             :         else
     137           0 :             eXLS = XLINE_NONE;
     138             : 
     139         132 :         switch( eXLS )
     140             :         {
     141             :             case XLINE_NONE:
     142           0 :                 pBox->SelectEntryPos( 0 );
     143           0 :                 break;
     144             : 
     145             :             case XLINE_SOLID:
     146         132 :                 pBox->SelectEntryPos( 1 );
     147         132 :                 break;
     148             : 
     149             :             case XLINE_DASH:
     150             :             {
     151           0 :                 if( pDashItem )
     152             :                 {
     153             :                     OUString aString = SvxUnogetInternalNameForItem(
     154           0 :                         XATTR_LINEDASH, pDashItem->GetName());
     155           0 :                     pBox->SelectEntry( aString );
     156             :                 }
     157             :                 else
     158           0 :                     pBox->SetNoSelection();
     159             :             }
     160           0 :             break;
     161             : 
     162             :             default:
     163             :                 OSL_FAIL( "Unsupported type of line" );
     164           0 :                 break;
     165             :         }
     166             :     }
     167             : 
     168         132 :     if ( pState && ( pState->ISA( SvxDashListItem ) ) )
     169             :     {
     170             :         // The list of line styles has changed
     171           0 :         SvxLineBox* pBox = static_cast<SvxLineBox*>(GetToolBox().GetItemWindow( GetId() ));
     172             :         DBG_ASSERT( pBox, "Window not found!" );
     173             : 
     174           0 :         OUString aString( pBox->GetSelectEntry() );
     175           0 :         pBox->Clear();
     176           0 :         pBox->InsertEntry( SVX_RESSTR(RID_SVXSTR_INVISIBLE) );
     177           0 :         pBox->InsertEntry( SVX_RESSTR(RID_SVXSTR_SOLID) );
     178           0 :         pBox->Fill( static_cast<const SvxDashListItem*>(pState)->GetDashList() );
     179           0 :         pBox->SelectEntry( aString );
     180             :     }
     181         132 : }
     182             : 
     183             : 
     184             : 
     185         126 : vcl::Window* SvxLineStyleToolBoxControl::CreateItemWindow( vcl::Window *pParent )
     186             : {
     187         126 :     return new SvxLineBox( pParent, m_xFrame );
     188             : }
     189             : 
     190         126 : SvxLineWidthToolBoxControl::SvxLineWidthToolBoxControl(
     191             :     sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     192         126 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     193             : {
     194         126 :     addStatusListener( OUString( ".uno:MetricUnit" ));
     195         126 : }
     196             : 
     197             : 
     198             : 
     199         252 : SvxLineWidthToolBoxControl::~SvxLineWidthToolBoxControl()
     200             : {
     201         252 : }
     202             : 
     203             : 
     204             : 
     205         180 : void SvxLineWidthToolBoxControl::StateChanged(
     206             :     sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
     207             : {
     208             :     SvxMetricField* pFld = static_cast<SvxMetricField*>(
     209         180 :                            GetToolBox().GetItemWindow( GetId() ));
     210             :     DBG_ASSERT( pFld, "Window not found" );
     211             : 
     212         180 :     if ( nSID == SID_ATTR_METRIC )
     213             :     {
     214         114 :         pFld->RefreshDlgUnit();
     215             :     }
     216             :     else
     217             :     {
     218          66 :         if ( eState == SfxItemState::DISABLED )
     219             :         {
     220           0 :             pFld->Disable();
     221           0 :             pFld->SetText( "" );
     222             :         }
     223             :         else
     224             :         {
     225          66 :             pFld->Enable();
     226             : 
     227          66 :             if ( eState == SfxItemState::DEFAULT )
     228             :             {
     229             :                 DBG_ASSERT( pState->ISA(XLineWidthItem), "wrong ItemType" );
     230             : 
     231             :                 // Core-Unit handed over to MetricField
     232             :                 // Should not happen in CreateItemWin ()!
     233          66 :                 SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM; // CD!!! GetCoreMetric();
     234          66 :                 pFld->SetCoreUnit( eUnit );
     235             : 
     236          66 :                 pFld->Update( static_cast<const XLineWidthItem*>(pState) );
     237             :             }
     238             :             else
     239           0 :                 pFld->Update( NULL );
     240             :         }
     241             :     }
     242         180 : }
     243             : 
     244             : 
     245             : 
     246         126 : vcl::Window* SvxLineWidthToolBoxControl::CreateItemWindow( vcl::Window *pParent )
     247             : {
     248         126 :     return( new SvxMetricField( pParent, m_xFrame ) );
     249             : }
     250             : 
     251           0 : SvxLineEndWindow::SvxLineEndWindow(
     252             :     sal_uInt16 nSlotId,
     253             :     const Reference< XFrame >& rFrame,
     254             :     const OUString& rWndTitle ) :
     255             :     SfxPopupWindow( nSlotId,
     256             :                     rFrame,
     257             :                     WinBits( WB_STDPOPUP | WB_OWNERDRAWDECORATION ) ),
     258             :     aLineEndSet     ( this, WinBits( WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT ) ),
     259             :     nCols           ( 2 ),
     260             :     nLines          ( 12 ),
     261             :     nLineEndWidth   ( 400 ),
     262             :     bPopupMode      ( true ),
     263             :     mbInResize      ( false ),
     264           0 :     mxFrame         ( rFrame )
     265             : {
     266           0 :     SetText( rWndTitle );
     267           0 :     implInit();
     268           0 : }
     269             : 
     270           0 : SvxLineEndWindow::SvxLineEndWindow(
     271             :     sal_uInt16 nSlotId,
     272             :     const Reference< XFrame >& rFrame,
     273             :     vcl::Window* pParentWindow,
     274             :     const OUString& rWndTitle ) :
     275             :     SfxPopupWindow( nSlotId,
     276             :                     rFrame,
     277             :                     pParentWindow,
     278             :                     WinBits( WB_STDPOPUP | WB_OWNERDRAWDECORATION ) ),
     279             :     aLineEndSet     ( this, WinBits( WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT ) ),
     280             :     nCols           ( 2 ),
     281             :     nLines          ( 12 ),
     282             :     nLineEndWidth   ( 400 ),
     283             :     bPopupMode      ( true ),
     284             :     mbInResize      ( false ),
     285           0 :     mxFrame         ( rFrame )
     286             : {
     287           0 :     SetText( rWndTitle );
     288           0 :     implInit();
     289           0 : }
     290             : 
     291           0 : void SvxLineEndWindow::implInit()
     292             : {
     293           0 :     SfxObjectShell*     pDocSh  = SfxObjectShell::Current();
     294           0 :     const SfxPoolItem*  pItem   = NULL;
     295             : 
     296           0 :     SetHelpId( HID_POPUP_LINEEND );
     297           0 :     aLineEndSet.SetHelpId( HID_POPUP_LINEEND_CTRL );
     298             : 
     299           0 :     if ( pDocSh )
     300             :     {
     301           0 :         pItem = pDocSh->GetItem( SID_LINEEND_LIST );
     302           0 :         if( pItem )
     303           0 :             pLineEndList = static_cast<const SvxLineEndListItem*>( pItem )->GetLineEndList();
     304             : 
     305           0 :         pItem = pDocSh->GetItem( SID_ATTR_LINEEND_WIDTH_DEFAULT );
     306           0 :         if( pItem )
     307           0 :             nLineEndWidth = static_cast<const SfxUInt16Item*>( pItem )->GetValue();
     308             :     }
     309             :     DBG_ASSERT( pLineEndList.is(), "LineEndList not found" );
     310             : 
     311           0 :     aLineEndSet.SetSelectHdl( LINK( this, SvxLineEndWindow, SelectHdl ) );
     312           0 :     aLineEndSet.SetColCount( nCols );
     313             : 
     314             :     // ValueSet fill with entries of LineEndList
     315           0 :     FillValueSet();
     316             : 
     317           0 :     AddStatusListener( OUString( ".uno:LineEndListState" ));
     318             : 
     319             :     //ChangeHelpId( HID_POPUP_LINEENDSTYLE );
     320           0 :     aLineEndSet.Show();
     321           0 : }
     322             : 
     323           0 : SfxPopupWindow* SvxLineEndWindow::Clone() const
     324             : {
     325           0 :     return new SvxLineEndWindow( GetId(), mxFrame, GetText() );
     326             : }
     327             : 
     328             : 
     329             : 
     330           0 : SvxLineEndWindow::~SvxLineEndWindow()
     331             : {
     332           0 : }
     333             : 
     334             : 
     335             : 
     336           0 : IMPL_LINK_NOARG(SvxLineEndWindow, SelectHdl)
     337             : {
     338           0 :     boost::scoped_ptr<XLineEndItem> pLineEndItem;
     339           0 :     boost::scoped_ptr<XLineStartItem> pLineStartItem;
     340           0 :     sal_uInt16                  nId = aLineEndSet.GetSelectItemId();
     341             : 
     342           0 :     if( nId == 1 )
     343             :     {
     344           0 :         pLineStartItem.reset(new XLineStartItem());
     345             :     }
     346           0 :     else if( nId == 2 )
     347             :     {
     348           0 :         pLineEndItem.reset(new XLineEndItem());
     349             :     }
     350           0 :     else if( nId % 2 ) // beginning of line
     351             :     {
     352           0 :         XLineEndEntry* pEntry = pLineEndList->GetLineEnd( ( nId - 1 ) / 2 - 1 );
     353           0 :         pLineStartItem.reset(new XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ));
     354             :     }
     355             :     else // end of line
     356             :     {
     357           0 :         XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nId / 2 - 2 );
     358           0 :         pLineEndItem.reset(new XLineEndItem( pEntry->GetName(), pEntry->GetLineEnd() ));
     359             :     }
     360             : 
     361           0 :     if ( IsInPopupMode() )
     362           0 :         EndPopupMode();
     363             : 
     364           0 :     Sequence< PropertyValue > aArgs( 1 );
     365           0 :     Any a;
     366             : 
     367           0 :     if ( pLineStartItem )
     368             :     {
     369           0 :         aArgs[0].Name = "LineStart";
     370           0 :         pLineStartItem->QueryValue( a );
     371           0 :         aArgs[0].Value = a;
     372             :     }
     373             :     else
     374             :     {
     375           0 :         aArgs[0].Name = "LineEnd";
     376           0 :         pLineEndItem->QueryValue( a );
     377           0 :         aArgs[0].Value = a;
     378             :     }
     379             : 
     380             :     /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
     381             :         This instance may be deleted in the meantime (i.e. when a dialog is opened
     382             :         while in Dispatch()), accessing members will crash in this case. */
     383           0 :     aLineEndSet.SetNoSelection();
     384             : 
     385           0 :     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     386             :                                  OUString( ".uno:LineEndStyle" ),
     387           0 :                                  aArgs );
     388             : 
     389           0 :     return 0;
     390             : }
     391             : 
     392             : 
     393             : 
     394           0 : void SvxLineEndWindow::FillValueSet()
     395             : {
     396           0 :     if( pLineEndList.is() )
     397             :     {
     398           0 :         XLineEndEntry*      pEntry  = NULL;
     399           0 :         VirtualDevice       aVD;
     400             : 
     401           0 :         long nCount = pLineEndList->Count();
     402             : 
     403             :         // First entry: no line end.
     404             :         // An entry is temporarly added to get the UI bitmap
     405           0 :         basegfx::B2DPolyPolygon aNothing;
     406           0 :         pLineEndList->Insert( new XLineEndEntry( aNothing, SVX_RESSTR( RID_SVXSTR_NONE ) ) );
     407           0 :         pEntry = pLineEndList->GetLineEnd( nCount );
     408           0 :         Bitmap aBmp = pLineEndList->GetUiBitmap( nCount );
     409             :         OSL_ENSURE( !aBmp.IsEmpty(), "UI bitmap was not created" );
     410             : 
     411           0 :         aBmpSize = aBmp.GetSizePixel();
     412           0 :         aVD.SetOutputSizePixel( aBmpSize, false );
     413           0 :         aBmpSize.Width() = aBmpSize.Width() / 2;
     414           0 :         Point aPt0( 0, 0 );
     415           0 :         Point aPt1( aBmpSize.Width(), 0 );
     416             : 
     417           0 :         aVD.DrawBitmap( Point(), aBmp );
     418           0 :         aLineEndSet.InsertItem(1, Image(aVD.GetBitmap(aPt0, aBmpSize)), pEntry->GetName());
     419           0 :         aLineEndSet.InsertItem(2, Image(aVD.GetBitmap(aPt1, aBmpSize)), pEntry->GetName());
     420             : 
     421           0 :         delete pLineEndList->Remove( nCount );
     422             : 
     423           0 :         for( long i = 0; i < nCount; i++ )
     424             :         {
     425           0 :             pEntry = pLineEndList->GetLineEnd( i );
     426             :             DBG_ASSERT( pEntry, "Could not access LineEndEntry" );
     427           0 :             aBmp = pLineEndList->GetUiBitmap( i );
     428             :             OSL_ENSURE( !aBmp.IsEmpty(), "UI bitmap was not created" );
     429             : 
     430           0 :             aVD.DrawBitmap( aPt0, aBmp );
     431           0 :             aLineEndSet.InsertItem((sal_uInt16)((i+1L)*2L+1L),
     432           0 :                     Image(aVD.GetBitmap(aPt0, aBmpSize)), pEntry->GetName());
     433           0 :             aLineEndSet.InsertItem((sal_uInt16)((i+2L)*2L),
     434           0 :                     Image(aVD.GetBitmap(aPt1, aBmpSize)), pEntry->GetName());
     435             :         }
     436           0 :         nLines = std::min( (sal_uInt16)(nCount + 1), (sal_uInt16) MAX_LINES );
     437           0 :         aLineEndSet.SetLineCount( nLines );
     438             : 
     439           0 :         SetSize();
     440             :     }
     441           0 : }
     442             : 
     443             : 
     444             : 
     445           0 : void SvxLineEndWindow::Resize()
     446             : {
     447             :     // since we change the size inside this call, check if we
     448             :     // are called recursive
     449           0 :     if( !mbInResize )
     450             :     {
     451           0 :         mbInResize = true;
     452           0 :         if ( !IsRollUp() )
     453             :         {
     454           0 :             aLineEndSet.SetColCount( nCols );
     455           0 :             aLineEndSet.SetLineCount( nLines );
     456             : 
     457           0 :             SetSize();
     458             : 
     459           0 :             Size aSize = GetOutputSizePixel();
     460           0 :             aSize.Width()  -= 4;
     461           0 :             aSize.Height() -= 4;
     462           0 :             aLineEndSet.SetPosSizePixel( Point( 2, 2 ), aSize );
     463             :         }
     464             :         //SfxPopupWindow::Resize();
     465           0 :         mbInResize = false;
     466             :     }
     467           0 : }
     468             : 
     469             : 
     470             : 
     471           0 : void SvxLineEndWindow::Resizing( Size& rNewSize )
     472             : {
     473           0 :     Size aBitmapSize = aBmpSize; // -> Member
     474           0 :     aBitmapSize.Width()  += 6;
     475           0 :     aBitmapSize.Height() += 6;
     476             : 
     477           0 :     Size aItemSize = aLineEndSet.CalcItemSizePixel( aBitmapSize );  // -> Member
     478             :     //Size aOldSize = GetOutputSizePixel(); // for width
     479             : 
     480           0 :     sal_uInt16 nItemCount = aLineEndSet.GetItemCount(); // -> Member
     481             : 
     482             :     // identify columns
     483           0 :     long nItemW = aItemSize.Width();
     484           0 :     long nW = rNewSize.Width();
     485           0 :     nCols = (sal_uInt16) std::max( ( (sal_uIntPtr)(( nW + nItemW ) / ( nItemW * 2 ) )),
     486           0 :                                             (sal_uIntPtr) 1L );
     487           0 :     nCols *= 2;
     488             : 
     489             :     // identify lines
     490           0 :     long nItemH = aItemSize.Height();
     491           0 :     long nH = rNewSize.Height();
     492           0 :     nLines = (sal_uInt16) std::max( ( ( nH + nItemH / 2 ) / nItemH ), 1L );
     493             : 
     494           0 :     sal_uInt16 nMaxCols  = nItemCount / nLines;
     495           0 :     if( nItemCount % nLines )
     496           0 :         nMaxCols++;
     497           0 :     if( nCols > nMaxCols )
     498           0 :         nCols = nMaxCols;
     499           0 :     nW = nItemW * nCols;
     500             : 
     501             :     // No odd number of columns
     502           0 :     if( nCols % 2 )
     503           0 :         nCols--;
     504           0 :     nCols = std::max( nCols, (sal_uInt16) 2 );
     505             : 
     506           0 :     sal_uInt16 nMaxLines  = nItemCount / nCols;
     507           0 :     if( nItemCount % nCols )
     508           0 :         nMaxLines++;
     509           0 :     if( nLines > nMaxLines )
     510           0 :         nLines = nMaxLines;
     511           0 :     nH = nItemH * nLines;
     512             : 
     513           0 :     rNewSize.Width() = nW;
     514           0 :     rNewSize.Height() = nH;
     515           0 : }
     516             : 
     517             : 
     518           0 : void SvxLineEndWindow::StartSelection()
     519             : {
     520           0 :     aLineEndSet.StartSelection();
     521           0 : }
     522             : 
     523             : 
     524             : 
     525           0 : bool SvxLineEndWindow::Close()
     526             : {
     527           0 :     return SfxPopupWindow::Close();
     528             : }
     529             : 
     530             : 
     531             : 
     532           0 : void SvxLineEndWindow::StateChanged(
     533             :     sal_uInt16 nSID, SfxItemState, const SfxPoolItem* pState )
     534             : {
     535           0 :     if ( nSID == SID_LINEEND_LIST )
     536             :     {
     537             :         // The list of line ends (LineEndList) has changed
     538           0 :         if ( pState && pState->ISA( SvxLineEndListItem ))
     539             :         {
     540           0 :             pLineEndList = static_cast<const SvxLineEndListItem*>(pState)->GetLineEndList();
     541             :             DBG_ASSERT( pLineEndList.is(), "LineEndList not found" );
     542             : 
     543           0 :             aLineEndSet.Clear();
     544           0 :             FillValueSet();
     545             : 
     546           0 :             Size aSize = GetOutputSizePixel();
     547           0 :             Resizing( aSize );
     548           0 :             Resize();
     549             :         }
     550             :     }
     551           0 : }
     552             : 
     553             : 
     554             : 
     555           0 : void SvxLineEndWindow::PopupModeEnd()
     556             : {
     557           0 :     if ( IsVisible() )
     558             :     {
     559           0 :         bPopupMode = false;
     560           0 :         SetSize();
     561             :     }
     562           0 :     SfxPopupWindow::PopupModeEnd();
     563           0 : }
     564             : 
     565             : 
     566             : 
     567           0 : void SvxLineEndWindow::SetSize()
     568             : {
     569             :     //if( !bPopupMode )
     570           0 :     if( !IsInPopupMode() )
     571             :     {
     572           0 :         sal_uInt16 nItemCount = aLineEndSet.GetItemCount(); // -> Member
     573           0 :         sal_uInt16 nMaxLines  = nItemCount / nCols; // -> Member ?
     574           0 :         if( nItemCount % nCols )
     575           0 :             nMaxLines++;
     576             : 
     577           0 :         WinBits nBits = aLineEndSet.GetStyle();
     578           0 :         if ( nLines == nMaxLines )
     579           0 :             nBits &= ~WB_VSCROLL;
     580             :         else
     581           0 :             nBits |= WB_VSCROLL;
     582           0 :         aLineEndSet.SetStyle( nBits );
     583             :     }
     584             : 
     585           0 :     Size aSize( aBmpSize );
     586           0 :     aSize.Width()  += 6;
     587           0 :     aSize.Height() += 6;
     588           0 :     aSize = aLineEndSet.CalcWindowSizePixel( aSize );
     589           0 :     aSize.Width()  += 4;
     590           0 :     aSize.Height() += 4;
     591           0 :     SetOutputSizePixel( aSize );
     592           0 :     aSize.Height() = aBmpSize.Height();
     593           0 :     aSize.Height() += 14;
     594             :     //SetMinOutputSizePixel( aSize );
     595           0 : }
     596             : 
     597           0 : void SvxLineEndWindow::GetFocus (void)
     598             : {
     599           0 :     SfxPopupWindow::GetFocus();
     600             :     // Grab the focus to the line ends value set so that it can be controlled
     601             :     // with the keyboard.
     602           0 :     aLineEndSet.GrabFocus();
     603           0 : }
     604             : 
     605         126 : SvxLineEndToolBoxControl::SvxLineEndToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ) :
     606         126 :     SfxToolBoxControl( nSlotId, nId, rTbx )
     607             : {
     608         126 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits( nId ) );
     609         126 :     rTbx.Invalidate();
     610         126 : }
     611             : 
     612             : 
     613             : 
     614         252 : SvxLineEndToolBoxControl::~SvxLineEndToolBoxControl()
     615             : {
     616         252 : }
     617             : 
     618             : 
     619             : 
     620           0 : SfxPopupWindowType SvxLineEndToolBoxControl::GetPopupWindowType() const
     621             : {
     622           0 :     return SFX_POPUPWINDOW_ONCLICK;
     623             : }
     624             : 
     625             : 
     626             : 
     627           0 : SfxPopupWindow* SvxLineEndToolBoxControl::CreatePopupWindow()
     628             : {
     629             :     SvxLineEndWindow* pLineEndWin =
     630           0 :         new SvxLineEndWindow( GetId(), m_xFrame, &GetToolBox(), SVX_RESSTR( RID_SVXSTR_LINEEND ) );
     631           0 :     pLineEndWin->StartPopupMode( &GetToolBox(),
     632             :                                  FLOATWIN_POPUPMODE_GRABFOCUS |
     633             :                                  FLOATWIN_POPUPMODE_ALLOWTEAROFF |
     634           0 :                                  FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE );
     635           0 :     pLineEndWin->StartSelection();
     636           0 :     SetPopupWindow( pLineEndWin );
     637           0 :     return pLineEndWin;
     638             : }
     639             : 
     640             : 
     641             : 
     642          66 : void SvxLineEndToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* )
     643             : {
     644          66 :     sal_uInt16 nId = GetId();
     645          66 :     ToolBox& rTbx = GetToolBox();
     646             : 
     647          66 :     rTbx.EnableItem( nId, SfxItemState::DISABLED != eState );
     648          66 :     rTbx.SetItemState( nId, ( SfxItemState::DONTCARE == eState ) ? TRISTATE_INDET : TRISTATE_FALSE );
     649         660 : }
     650             : 
     651             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10