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

Generated by: LCOV version 1.11