LCOV - code coverage report
Current view: top level - forms/source/solar/control - navtoolbar.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 236 301 78.4 %
Date: 2014-11-03 Functions: 34 45 75.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             : 
      21             : #include "navtoolbar.hxx"
      22             : #include "frm_resource.hxx"
      23             : #include "featuredispatcher.hxx"
      24             : #include "frm_resource.hrc"
      25             : #include "commandimageprovider.hxx"
      26             : #include "commanddescriptionprovider.hxx"
      27             : 
      28             : #include <com/sun/star/uno/Any.hxx>
      29             : #include <com/sun/star/form/runtime/FormFeature.hpp>
      30             : 
      31             : #include <sfx2/imgmgr.hxx>
      32             : #include <vcl/fixed.hxx>
      33             : 
      34             : #include <sal/macros.h>
      35             : 
      36             : #define LID_RECORD_LABEL    1000
      37             : #define LID_RECORD_FILLER   1001
      38             : 
      39             : 
      40             : namespace frm
      41             : {
      42             : 
      43             : 
      44             :     using ::com::sun::star::uno::makeAny;
      45             :     namespace FormFeature = ::com::sun::star::form::runtime::FormFeature;
      46             : 
      47             : 
      48             : 
      49             :     namespace
      50             :     {
      51        2646 :         static bool isArtificialItem( sal_Int16 _nFeatureId )
      52             :         {
      53             :             return ( _nFeatureId == LID_RECORD_LABEL )
      54        2646 :                 || ( _nFeatureId == LID_RECORD_FILLER );
      55             :         }
      56             : 
      57         348 :         static OUString getLabelString( sal_uInt16 _nResId )
      58             :         {
      59         348 :             OUString sLabel( " " );
      60         348 :             sLabel += FRM_RES_STRING( _nResId );
      61         348 :             sLabel += " ";
      62         348 :             return sLabel;
      63             :         }
      64             : 
      65        2394 :         OUString lcl_getCommandURL( const sal_Int16 _nFormFeature )
      66             :         {
      67        2394 :             const sal_Char* pAsciiCommandName = NULL;
      68        2394 :             switch ( _nFormFeature )
      69             :             {
      70         126 :                 case FormFeature::MoveAbsolute          : pAsciiCommandName = "AbsoluteRecord";     break;
      71         126 :                 case FormFeature::TotalRecords          : pAsciiCommandName = "RecTotal";           break;
      72         126 :                 case FormFeature::MoveToFirst           : pAsciiCommandName = "FirstRecord";        break;
      73         126 :                 case FormFeature::MoveToPrevious        : pAsciiCommandName = "PrevRecord";         break;
      74         126 :                 case FormFeature::MoveToNext            : pAsciiCommandName = "NextRecord";         break;
      75         126 :                 case FormFeature::MoveToLast            : pAsciiCommandName = "LastRecord";         break;
      76         126 :                 case FormFeature::SaveRecordChanges     : pAsciiCommandName = "RecSave";            break;
      77         126 :                 case FormFeature::UndoRecordChanges     : pAsciiCommandName = "RecUndo";            break;
      78         126 :                 case FormFeature::MoveToInsertRow       : pAsciiCommandName = "NewRecord";          break;
      79         126 :                 case FormFeature::DeleteRecord          : pAsciiCommandName = "DeleteRecord";       break;
      80         126 :                 case FormFeature::ReloadForm            : pAsciiCommandName = "Refresh";            break;
      81         126 :                 case FormFeature::RefreshCurrentControl : pAsciiCommandName = "RefreshFormControl"; break;
      82         126 :                 case FormFeature::SortAscending         : pAsciiCommandName = "Sortup";             break;
      83         126 :                 case FormFeature::SortDescending        : pAsciiCommandName = "SortDown";           break;
      84         126 :                 case FormFeature::InteractiveSort       : pAsciiCommandName = "OrderCrit";          break;
      85         126 :                 case FormFeature::AutoFilter            : pAsciiCommandName = "AutoFilter";         break;
      86         126 :                 case FormFeature::InteractiveFilter     : pAsciiCommandName = "FilterCrit";         break;
      87         126 :                 case FormFeature::ToggleApplyFilter     : pAsciiCommandName = "FormFiltered";       break;
      88         126 :                 case FormFeature::RemoveFilterAndSort   : pAsciiCommandName = "RemoveFilterSort";   break;
      89             :             }
      90        2394 :             if ( pAsciiCommandName != NULL )
      91        2394 :                 return OUString( ".uno:" ) + OUString::createFromAscii( pAsciiCommandName );
      92             : 
      93             :             OSL_FAIL( "lcl_getCommandURL: unknown FormFeature!" );
      94           0 :             return OUString();
      95             :         }
      96             :     }
      97             : 
      98          72 :     class ImplNavToolBar : public ToolBox
      99             :     {
     100             :     protected:
     101             :         const IFeatureDispatcher*   m_pDispatcher;
     102             : 
     103             :     public:
     104          36 :         ImplNavToolBar( vcl::Window* _pParent )
     105             :             :ToolBox( _pParent, WB_3DLOOK )
     106          36 :             ,m_pDispatcher( NULL )
     107             :         {
     108          36 :         }
     109             : 
     110         270 :         void setDispatcher( const IFeatureDispatcher* _pDispatcher )
     111             :         {
     112         270 :             m_pDispatcher = _pDispatcher;
     113         270 :         }
     114             : 
     115             :     protected:
     116             :         // ToolBox overridables
     117             :         virtual void        Select() SAL_OVERRIDE;
     118             : 
     119             :     };
     120             : 
     121             : 
     122           0 :     void ImplNavToolBar::Select()
     123             :     {
     124           0 :         if ( m_pDispatcher )
     125             :         {
     126           0 :             if ( !m_pDispatcher->isEnabled( GetCurItemId() ) )
     127             :                 // the toolbox is a little bit buggy: With ToolBoxItemBits::REPEAT, it sometimes
     128             :                 // happens that a select is reported, even though the respective
     129             :                 // item has just been disabled.
     130           0 :                 return;
     131           0 :             m_pDispatcher->dispatch( GetCurItemId() );
     132             :         }
     133             :     }
     134             : 
     135          36 :     NavigationToolBar::NavigationToolBar( vcl::Window* _pParent, WinBits _nStyle, const PCommandImageProvider& _pImageProvider,
     136             :             const PCommandDescriptionProvider& _pDescriptionProvider )
     137             :         :Window( _pParent, _nStyle )
     138             :         ,m_pDispatcher( NULL )
     139             :         ,m_pImageProvider( _pImageProvider )
     140             :         ,m_pDescriptionProvider( _pDescriptionProvider )
     141             :         ,m_eImageSize( eSmall )
     142          36 :         ,m_pToolbar( NULL )
     143             :     {
     144          36 :         implInit( );
     145          36 :     }
     146             : 
     147             : 
     148         108 :     NavigationToolBar::~NavigationToolBar( )
     149             :     {
     150         540 :         for (   ::std::vector< vcl::Window* >::iterator loopChildWins = m_aChildWins.begin();
     151         360 :                 loopChildWins != m_aChildWins.end();
     152             :                 ++loopChildWins
     153             :             )
     154             :         {
     155         144 :             delete *loopChildWins;
     156             :         }
     157          36 :         delete m_pToolbar;
     158          72 :     }
     159             : 
     160             : 
     161         270 :     void NavigationToolBar::setDispatcher( const IFeatureDispatcher* _pDispatcher )
     162             :     {
     163         270 :         m_pDispatcher = _pDispatcher;
     164             : 
     165         270 :         m_pToolbar->setDispatcher( _pDispatcher );
     166             : 
     167         270 :         RecordPositionInput* pPositionWindow = static_cast< RecordPositionInput* >( m_pToolbar->GetItemWindow( FormFeature::MoveAbsolute ) );
     168             :         OSL_ENSURE( pPositionWindow, "NavigationToolBar::setDispatcher: can't forward the dispatcher to the position window!" );
     169         270 :         if ( pPositionWindow )
     170         270 :             pPositionWindow->setDispatcher( _pDispatcher );
     171             : 
     172         270 :         updateFeatureStates( );
     173         270 :     }
     174             : 
     175             : 
     176         270 :     void NavigationToolBar::updateFeatureStates( )
     177             :     {
     178        6480 :         for ( sal_uInt16 nPos = 0; nPos < m_pToolbar->GetItemCount(); ++nPos )
     179             :         {
     180        6210 :             sal_uInt16 nItemId = m_pToolbar->GetItemId( nPos );
     181             : 
     182        6210 :             if ( ( nItemId == LID_RECORD_LABEL ) || ( nItemId == LID_RECORD_FILLER ) )
     183         540 :                 continue;
     184             : 
     185             :             // is this item enabled?
     186        5670 :             bool bEnabled = m_pDispatcher && m_pDispatcher->isEnabled( nItemId );
     187        5670 :             implEnableItem( nItemId, bEnabled );
     188             :         }
     189         270 :     }
     190             : 
     191             : 
     192        5670 :     void NavigationToolBar::implEnableItem( sal_uInt16 _nItemId, bool _bEnabled )
     193             :     {
     194        5670 :         m_pToolbar->EnableItem( _nItemId, _bEnabled );
     195             : 
     196        5670 :         if ( _nItemId == FormFeature::MoveAbsolute )
     197         270 :             m_pToolbar->EnableItem( LID_RECORD_LABEL, _bEnabled );
     198             : 
     199        5670 :         if ( _nItemId == FormFeature::TotalRecords )
     200         270 :             m_pToolbar->EnableItem( LID_RECORD_FILLER, _bEnabled );
     201        5670 :     }
     202             : 
     203             : 
     204           0 :     void NavigationToolBar::enableFeature( sal_Int16 _nFeatureId, bool _bEnabled )
     205             :     {
     206             :         DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND,
     207             :             "NavigationToolBar::enableFeature: invalid id!" );
     208             : 
     209           0 :         implEnableItem( (sal_uInt16)_nFeatureId, _bEnabled );
     210           0 :     }
     211             : 
     212             : 
     213           0 :     void NavigationToolBar::checkFeature( sal_Int16 _nFeatureId, bool _bEnabled )
     214             :     {
     215             :         DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND,
     216             :             "NavigationToolBar::checkFeature: invalid id!" );
     217             : 
     218           0 :         m_pToolbar->CheckItem( (sal_uInt16)_nFeatureId, _bEnabled );
     219           0 :     }
     220             : 
     221             : 
     222           0 :     void NavigationToolBar::setFeatureText( sal_Int16 _nFeatureId, const OUString& _rText )
     223             :     {
     224             :         DBG_ASSERT( m_pToolbar->GetItemPos( (sal_uInt16)_nFeatureId ) != TOOLBOX_ITEM_NOTFOUND,
     225             :             "NavigationToolBar::checkFeature: invalid id!" );
     226             : 
     227           0 :         vcl::Window* pItemWindow = m_pToolbar->GetItemWindow( (sal_uInt16)_nFeatureId );
     228           0 :         if ( pItemWindow )
     229           0 :             pItemWindow->SetText( _rText );
     230             :         else
     231           0 :             m_pToolbar->SetItemText( (sal_uInt16)_nFeatureId, _rText );
     232           0 :     }
     233             : 
     234             : 
     235          36 :     void NavigationToolBar::implInit( )
     236             :     {
     237          36 :         m_pToolbar = new ImplNavToolBar( this );
     238          36 :         m_pToolbar->SetOutStyle( TOOLBOX_STYLE_FLAT );
     239          36 :         m_pToolbar->Show();
     240             : 
     241             :         // need the SfxApplication for retrieving information about our
     242             :         // items. We could duplicate all the information here in our lib
     243             :         // (such as the item text and the image), but why should we?
     244             : 
     245             :         struct FeatureDescription
     246             :         {
     247             :             sal_uInt16      nId;
     248             :             bool        bRepeat;
     249             :             bool        bItemWindow;
     250             :         } aSupportedFeatures[] =
     251             :         {
     252             :             { LID_RECORD_LABEL,                     false, true },
     253             :             { FormFeature::MoveAbsolute,            false, true },
     254             :             { LID_RECORD_FILLER,                    false, true },
     255             :             { FormFeature::TotalRecords,            false, true },
     256             :             { FormFeature::MoveToFirst,             true,  false },
     257             :             { FormFeature::MoveToPrevious,          true,  false },
     258             :             { FormFeature::MoveToNext,              true,  false },
     259             :             { FormFeature::MoveToLast,              true,  false },
     260             :             { FormFeature::MoveToInsertRow,         false, false },
     261             :             { 0, false, false },
     262             :             { FormFeature::SaveRecordChanges,       false, false },
     263             :             { FormFeature::UndoRecordChanges,       false, false },
     264             :             { FormFeature::DeleteRecord,            false, false },
     265             :             { FormFeature::ReloadForm,              false, false },
     266             :             { FormFeature::RefreshCurrentControl,   false, false },
     267             :             { 0, false, false },
     268             :             { FormFeature::SortAscending,           false, false },
     269             :             { FormFeature::SortDescending,          false, false },
     270             :             { FormFeature::InteractiveSort,         false, false },
     271             :             { FormFeature::AutoFilter,              false, false },
     272             :             { FormFeature::InteractiveFilter,       false, false },
     273             :             { FormFeature::ToggleApplyFilter,       false, false },
     274             :             { FormFeature::RemoveFilterAndSort,     false, false },
     275          36 :         };
     276             : 
     277          36 :         size_t nSupportedFeatures = SAL_N_ELEMENTS( aSupportedFeatures );
     278          36 :         FeatureDescription* pSupportedFeatures = aSupportedFeatures;
     279          36 :         FeatureDescription* pSupportedFeaturesEnd = aSupportedFeatures + nSupportedFeatures;
     280         864 :         for ( ; pSupportedFeatures < pSupportedFeaturesEnd; ++pSupportedFeatures )
     281             :         {
     282         828 :             if ( pSupportedFeatures->nId )
     283             :             {   // it's _not_ a separator
     284             : 
     285             :                 // insert the entry
     286         756 :                 m_pToolbar->InsertItem( pSupportedFeatures->nId, OUString(), pSupportedFeatures->bRepeat ? ToolBoxItemBits::REPEAT : ToolBoxItemBits::NONE );
     287         756 :                 m_pToolbar->SetQuickHelpText( pSupportedFeatures->nId, OUString() );  // TODO
     288             : 
     289         756 :                 if ( !isArtificialItem( pSupportedFeatures->nId ) )
     290             :                 {
     291         684 :                     OUString sCommandURL( lcl_getCommandURL( pSupportedFeatures->nId ) );
     292         684 :                     m_pToolbar->SetItemCommand( pSupportedFeatures->nId, sCommandURL );
     293         684 :                     if ( m_pDescriptionProvider )
     294         684 :                         m_pToolbar->SetQuickHelpText( pSupportedFeatures->nId, m_pDescriptionProvider->getCommandDescription( sCommandURL ) );
     295             :                 }
     296             : 
     297         756 :                 if ( pSupportedFeatures->bItemWindow )
     298             :                 {
     299         144 :                     vcl::Window* pItemWindow = NULL;
     300         144 :                     if ( FormFeature::MoveAbsolute == pSupportedFeatures->nId )
     301             :                     {
     302          36 :                         pItemWindow = new RecordPositionInput( m_pToolbar );
     303          36 :                         static_cast< RecordPositionInput* >( pItemWindow )->setDispatcher( m_pDispatcher );
     304             :                     }
     305         108 :                     else if ( LID_RECORD_FILLER == pSupportedFeatures->nId )
     306             :                     {
     307          36 :                         pItemWindow = new FixedText( m_pToolbar, WB_CENTER | WB_VCENTER );
     308          36 :                         pItemWindow->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
     309             :                     }
     310             :                     else
     311             :                     {
     312          72 :                         pItemWindow = new FixedText( m_pToolbar, WB_VCENTER );
     313          72 :                         pItemWindow->SetBackground();
     314          72 :                         pItemWindow->SetPaintTransparent(true);
     315             :                     }
     316         144 :                     m_aChildWins.push_back( pItemWindow );
     317             : 
     318         144 :                     switch ( pSupportedFeatures->nId )
     319             :                     {
     320             :                     case LID_RECORD_LABEL:
     321          36 :                         pItemWindow->SetText( getLabelString( RID_STR_LABEL_RECORD ) );
     322          36 :                         break;
     323             : 
     324             :                     case LID_RECORD_FILLER:
     325          36 :                         pItemWindow->SetText( getLabelString( RID_STR_LABEL_OF ) );
     326          36 :                         break;
     327             :                     }
     328             : 
     329         144 :                     m_pToolbar->SetItemWindow( pSupportedFeatures->nId, pItemWindow );
     330             :                 }
     331             :             }
     332             :             else
     333             :             {   // a separator
     334          72 :                 m_pToolbar->InsertSeparator( );
     335             :             }
     336             :         }
     337             : 
     338          36 :         forEachItemWindow( &NavigationToolBar::adjustItemWindowWidth, NULL );
     339             : 
     340          36 :         implUpdateImages();
     341          36 :     }
     342             : 
     343             : 
     344          90 :     void NavigationToolBar::implUpdateImages()
     345             :     {
     346             :         OSL_ENSURE( m_pImageProvider, "NavigationToolBar::implUpdateImages: no image provider => no images!" );
     347          90 :         if ( !m_pImageProvider )
     348          90 :             return;
     349             : 
     350          90 :         const sal_uInt16 nItemCount = m_pToolbar->GetItemCount();
     351             : 
     352             :         // collect the FormFeatures in the toolbar
     353             :         typedef ::std::vector< sal_Int16 >  FormFeatures;
     354          90 :         FormFeatures aFormFeatures;
     355          90 :         aFormFeatures.reserve( nItemCount );
     356             : 
     357        2160 :         for ( sal_uInt16 i=0; i<nItemCount; ++i )
     358             :         {
     359        2070 :             sal_uInt16 nId = m_pToolbar->GetItemId( i );
     360        2070 :             if ( ( TOOLBOXITEM_BUTTON == m_pToolbar->GetItemType( i ) ) && !isArtificialItem( nId ) )
     361        1710 :                 aFormFeatures.push_back( nId );
     362             :         }
     363             : 
     364             :         // translate them into command URLs
     365         180 :         CommandURLs aCommandURLs( aFormFeatures.size() );
     366        5400 :         for (   FormFeatures::const_iterator formFeature = aFormFeatures.begin();
     367        3600 :                 formFeature != aFormFeatures.end();
     368             :                 ++formFeature
     369             :             )
     370             :         {
     371        1710 :             aCommandURLs[ formFeature - aFormFeatures.begin() ] = lcl_getCommandURL( *formFeature );
     372             :         }
     373             : 
     374             :         // retrieve the images for the command URLs
     375         180 :         CommandImages aCommandImages = m_pImageProvider->getCommandImages( aCommandURLs, m_eImageSize == eLarge );
     376             : 
     377             :         // and set them at the toolbar
     378          90 :         CommandImages::const_iterator commandImage = aCommandImages.begin();
     379        5400 :         for (   FormFeatures::const_iterator formFeature = aFormFeatures.begin();
     380        3600 :                 formFeature != aFormFeatures.end();
     381             :                 ++formFeature, ++commandImage
     382             :             )
     383             :         {
     384        1710 :             m_pToolbar->SetItemImage( *formFeature, *commandImage );
     385             :         }
     386             : 
     387             :         // parts of our layout is dependent on the size of our icons
     388         180 :         Resize();
     389             :     }
     390             : 
     391             : 
     392          52 :     void NavigationToolBar::implSetImageSize( ImageSize _eSize )
     393             :     {
     394          52 :         if ( _eSize != m_eImageSize )
     395             :         {
     396          18 :             m_eImageSize = _eSize;
     397          18 :             implUpdateImages();
     398             :         }
     399          52 :     }
     400             : 
     401             : 
     402          52 :     void NavigationToolBar::SetImageSize( ImageSize _eSize )
     403             :     {
     404          52 :         implSetImageSize( _eSize );
     405          52 :     }
     406             : 
     407             : 
     408         208 :     void NavigationToolBar::ShowFunctionGroup( FunctionGroup _eGroup, bool _bShow )
     409             :     {
     410         208 :         const sal_uInt16* pGroupIds = NULL;
     411             : 
     412         208 :         switch ( _eGroup )
     413             :         {
     414             :         case ePosition:
     415             :         {
     416             :             static const sal_uInt16 aPositionIds[] = {
     417             :                 LID_RECORD_LABEL, FormFeature::MoveAbsolute, LID_RECORD_FILLER, FormFeature::TotalRecords, 0
     418             :             };
     419          52 :             pGroupIds = aPositionIds;
     420             :         }
     421          52 :         break;
     422             :         case eNavigation:
     423             :         {
     424             :             static const sal_uInt16 aNavigationIds[] = {
     425             :                 FormFeature::MoveToFirst, FormFeature::MoveToPrevious, FormFeature::MoveToNext, FormFeature::MoveToLast, FormFeature::MoveToInsertRow, 0
     426             :             };
     427          52 :             pGroupIds = aNavigationIds;
     428             :         }
     429          52 :         break;
     430             :         case eRecordActions:
     431             :         {
     432             :             static const sal_uInt16 aActionIds[] = {
     433             :                 FormFeature::SaveRecordChanges, FormFeature::UndoRecordChanges, FormFeature::DeleteRecord, FormFeature::ReloadForm, FormFeature::RefreshCurrentControl, 0
     434             :             };
     435          52 :             pGroupIds = aActionIds;
     436             :         }
     437          52 :         break;
     438             :         case eFilterSort:
     439             :         {
     440             :             static const sal_uInt16 aFilterSortIds[] = {
     441             :                 FormFeature::SortAscending, FormFeature::SortDescending, FormFeature::InteractiveSort, FormFeature::AutoFilter, FormFeature::InteractiveFilter, FormFeature::ToggleApplyFilter, FormFeature::RemoveFilterAndSort, 0
     442             :             };
     443          52 :             pGroupIds = aFilterSortIds;
     444             :         }
     445          52 :         break;
     446             :         default:
     447             :             OSL_FAIL( "NavigationToolBar::ShowFunctionGroup: invalid group id!" );
     448             :         }
     449             : 
     450         208 :         if ( pGroupIds )
     451        1508 :             while ( *pGroupIds )
     452        1092 :                 m_pToolbar->ShowItem( *pGroupIds++, _bShow );
     453         208 :     }
     454             : 
     455             : 
     456           0 :     bool NavigationToolBar::IsFunctionGroupVisible( FunctionGroup _eGroup )
     457             :     {
     458           0 :         sal_uInt16 nIndicatorItem = 0;
     459           0 :         switch ( _eGroup )
     460             :         {
     461           0 :         case ePosition      : nIndicatorItem = LID_RECORD_LABEL;    break;
     462           0 :         case eNavigation    : nIndicatorItem = FormFeature::MoveToFirst; break;
     463           0 :         case eRecordActions : nIndicatorItem = FormFeature::SaveRecordChanges;  break;
     464           0 :         case eFilterSort    : nIndicatorItem = FormFeature::SortAscending;       break;
     465             :         default:
     466             :             OSL_FAIL( "NavigationToolBar::IsFunctionGroupVisible: invalid group id!" );
     467             :         }
     468             : 
     469           0 :         return m_pToolbar->IsItemVisible( nIndicatorItem );
     470             :     }
     471             : 
     472             : 
     473         614 :     void NavigationToolBar::StateChanged( StateChangedType nType )
     474             :     {
     475         614 :         Window::StateChanged( nType );
     476             : 
     477         614 :         switch ( nType )
     478             :         {
     479             :             case StateChangedType::ZOOM:
     480             : //                m_pToolbar->SetZoom( GetZoom() );
     481             : //                forEachItemWindow( setItemWindowZoom, NULL );
     482             :                 // the ToolBox class is not zoomable at the moment, so
     483             :                 // we better have no zoom at all instead of only half a zoom ...
     484           0 :                 break;
     485             : 
     486             :             case StateChangedType::CONTROLFONT:
     487         102 :                 forEachItemWindow( &NavigationToolBar::setItemControlFont, NULL );
     488         102 :                 forEachItemWindow( &NavigationToolBar::adjustItemWindowWidth, NULL );
     489         102 :                 break;
     490             : 
     491             :             case StateChangedType::CONTROLFOREGROUND:
     492           0 :                 forEachItemWindow( &NavigationToolBar::setItemControlForeground, NULL );
     493           0 :                 break;
     494             : 
     495             :             case StateChangedType::MIRRORING:
     496             :             {
     497          90 :                 sal_Bool bIsRTLEnabled( IsRTLEnabled() );
     498          90 :                 m_pToolbar->EnableRTL( bIsRTLEnabled );
     499          90 :                 forEachItemWindow( &NavigationToolBar::enableItemRTL, &bIsRTLEnabled );
     500          90 :                 Resize();
     501             :             }
     502          90 :             break;
     503             :             default:;
     504             :         }
     505         614 :     }
     506             : 
     507             : 
     508         213 :     void NavigationToolBar::Resize()
     509             :     {
     510             :         // resize/position the toolbox as a whole
     511         213 :         sal_Int32 nToolbarHeight = m_pToolbar->CalcWindowSizePixel().Height();
     512             : 
     513         213 :         sal_Int32 nMyHeight = GetOutputSizePixel().Height();
     514         213 :         m_pToolbar->SetPosSizePixel( Point( 0, ( nMyHeight - nToolbarHeight ) / 2 ),
     515         426 :                                      Size( GetSizePixel().Width(), nToolbarHeight ) );
     516             : 
     517         213 :         Window::Resize();
     518         213 :     }
     519             : 
     520             : 
     521          36 :     void NavigationToolBar::SetControlBackground()
     522             :     {
     523          36 :         Window::SetControlBackground();
     524          36 :         m_pToolbar->SetControlBackground();
     525          36 :         forEachItemWindow( &NavigationToolBar::setItemBackground, NULL );
     526             : 
     527          36 :         implUpdateImages();
     528          36 :     }
     529             : 
     530             : 
     531           0 :     void NavigationToolBar::SetControlBackground( const Color& _rColor )
     532             :     {
     533           0 :         Window::SetControlBackground( _rColor );
     534           0 :         m_pToolbar->SetControlBackground( _rColor );
     535           0 :         forEachItemWindow( &NavigationToolBar::setItemBackground, &_rColor );
     536             : 
     537           0 :         implUpdateImages();
     538           0 :     }
     539             : 
     540             : 
     541          36 :     void NavigationToolBar::SetTextLineColor( )
     542             :     {
     543          36 :         Window::SetTextLineColor( );
     544          36 :         m_pToolbar->SetTextLineColor( );
     545          36 :         forEachItemWindow( &NavigationToolBar::setTextLineColor, NULL );
     546          36 :     }
     547             : 
     548             : 
     549           0 :     void NavigationToolBar::SetTextLineColor( const Color& _rColor )
     550             :     {
     551           0 :         Window::SetTextLineColor( _rColor );
     552           0 :         m_pToolbar->SetTextLineColor( _rColor );
     553           0 :         forEachItemWindow( &NavigationToolBar::setTextLineColor, &_rColor );
     554           0 :     }
     555             : 
     556             : 
     557         402 :     void NavigationToolBar::forEachItemWindow( ItemWindowHandler _handler, const void* _pParam )
     558             :     {
     559        9648 :         for ( sal_uInt16 item = 0; item < m_pToolbar->GetItemCount(); ++item )
     560             :         {
     561        9246 :             sal_uInt16 nItemId = m_pToolbar->GetItemId( item );
     562        9246 :             vcl::Window* pItemWindow = m_pToolbar->GetItemWindow( nItemId );
     563        9246 :             if ( pItemWindow )
     564        1608 :                 (this->*_handler)( nItemId, pItemWindow, _pParam );
     565             :         }
     566         402 :     }
     567             : 
     568             : 
     569         144 :     void NavigationToolBar::setItemBackground( sal_uInt16 /* _nItemId */, vcl::Window* _pItemWindow, const void* _pColor ) const
     570             :     {
     571         144 :         if ( _pColor )
     572           0 :             _pItemWindow->SetControlBackground( *static_cast< const Color* >( _pColor ) );
     573             :         else
     574         144 :             _pItemWindow->SetControlBackground();
     575         144 :     }
     576             : 
     577             : 
     578         144 :     void NavigationToolBar::setTextLineColor( sal_uInt16 /* _nItemId */, vcl::Window* _pItemWindow, const void* _pColor ) const
     579             :     {
     580         144 :         if ( _pColor )
     581           0 :             _pItemWindow->SetTextLineColor( *static_cast< const Color* >( _pColor ) );
     582             :         else
     583         144 :             _pItemWindow->SetTextLineColor();
     584         144 :     }
     585             : #if 0
     586             : 
     587             :     void NavigationToolBar::setItemWindowZoom( sal_uInt16 /* _nItemId */, vcl::Window* _pItemWindow, const void* /* _pParam */ ) const
     588             :     {
     589             :         _pItemWindow->SetZoom( GetZoom() );
     590             :         _pItemWindow->SetZoomedPointFont( IsControlFont() ? GetControlFont() : GetPointFont() );
     591             :     }
     592             : #endif
     593             : 
     594         408 :     void NavigationToolBar::setItemControlFont( sal_uInt16 /* _nItemId */, vcl::Window* _pItemWindow, const void* /* _pParam */ ) const
     595             :     {
     596         408 :         if ( IsControlFont() )
     597         408 :             _pItemWindow->SetControlFont( GetControlFont() );
     598             :         else
     599           0 :             _pItemWindow->SetControlFont( );
     600         408 :     }
     601             : 
     602             : 
     603           0 :     void NavigationToolBar::setItemControlForeground( sal_uInt16 /* _nItemId */, vcl::Window* _pItemWindow, const void* /* _pParam */ ) const
     604             :     {
     605           0 :         if ( IsControlForeground() )
     606           0 :             _pItemWindow->SetControlForeground( GetControlForeground() );
     607             :         else
     608           0 :             _pItemWindow->SetControlForeground( );
     609           0 :         _pItemWindow->SetTextColor( GetTextColor() );
     610           0 :     }
     611             : 
     612             : 
     613         552 :     void NavigationToolBar::adjustItemWindowWidth( sal_uInt16 _nItemId, vcl::Window* _pItemWindow, const void* /* _pParam */ ) const
     614             :     {
     615         552 :         OUString sItemText;
     616         552 :         switch ( _nItemId )
     617             :         {
     618             :         case LID_RECORD_LABEL:
     619         138 :             sItemText = getLabelString( RID_STR_LABEL_RECORD );
     620         138 :             break;
     621             : 
     622             :         case LID_RECORD_FILLER:
     623         138 :             sItemText = getLabelString( RID_STR_LABEL_OF );
     624         138 :             break;
     625             : 
     626             :         case FormFeature::MoveAbsolute:
     627         138 :             sItemText = "12345678";
     628         138 :             break;
     629             : 
     630             :         case FormFeature::TotalRecords:
     631         138 :             sItemText = "123456";
     632         138 :             break;
     633             :         }
     634             : 
     635         552 :         Size aSize( _pItemWindow->GetTextWidth( sItemText ), /* _pItemWindow->GetSizePixel( ).Height() */ _pItemWindow->GetTextHeight() + 4 );
     636         552 :         aSize.Width() += 6;
     637         552 :         _pItemWindow->SetSizePixel( aSize );
     638             : 
     639         552 :         m_pToolbar->SetItemWindow( _nItemId, _pItemWindow );
     640         552 :     }
     641             : 
     642             : 
     643         360 :     void NavigationToolBar::enableItemRTL( sal_uInt16 /*_nItemId*/, vcl::Window* _pItemWindow, const void* _pIsRTLEnabled ) const
     644             :     {
     645         360 :         _pItemWindow->EnableRTL( *static_cast< const sal_Bool* >( _pIsRTLEnabled ) );
     646         360 :     }
     647             : 
     648          36 :     RecordPositionInput::RecordPositionInput( vcl::Window* _pParent )
     649             :         :NumericField( _pParent, WB_BORDER | WB_VCENTER )
     650          36 :         ,m_pDispatcher( NULL )
     651             :     {
     652          36 :         SetMin( 1 );
     653          36 :         SetFirst( 1 );
     654          36 :         SetSpinSize( 1 );
     655          36 :         SetDecimalDigits( 0 );
     656          36 :         SetStrictFormat( true );
     657          36 :         SetBorderStyle( WindowBorderStyle::MONO );
     658          36 :     }
     659             : 
     660             : 
     661          72 :     RecordPositionInput::~RecordPositionInput()
     662             :     {
     663          72 :     }
     664             : 
     665             : 
     666         306 :     void RecordPositionInput::setDispatcher( const IFeatureDispatcher* _pDispatcher )
     667             :     {
     668         306 :         m_pDispatcher = _pDispatcher;
     669         306 :     }
     670             : 
     671             : 
     672           0 :     void RecordPositionInput::FirePosition( bool _bForce )
     673             :     {
     674           0 :         if ( _bForce || IsValueChangedFromSaved() )
     675             :         {
     676           0 :             sal_Int64 nRecord = GetValue();
     677           0 :             if ( nRecord < GetMin() || nRecord > GetMax() )
     678           0 :                 return;
     679             : 
     680           0 :             if ( m_pDispatcher )
     681           0 :                 m_pDispatcher->dispatchWithArgument( FormFeature::MoveAbsolute, "Position", makeAny( (sal_Int32)nRecord ) );
     682             : 
     683           0 :             SaveValue();
     684             :         }
     685             :     }
     686             : 
     687             : 
     688           0 :     void RecordPositionInput::LoseFocus()
     689             :     {
     690           0 :         FirePosition( false );
     691           0 :     }
     692             : 
     693             : 
     694           0 :     void RecordPositionInput::KeyInput( const KeyEvent& rKeyEvent )
     695             :     {
     696           0 :         if( rKeyEvent.GetKeyCode() == KEY_RETURN && !GetText().isEmpty() )
     697           0 :             FirePosition( true );
     698             :         else
     699           0 :             NumericField::KeyInput( rKeyEvent );
     700           0 :     }
     701             : 
     702             : 
     703             : 
     704         192 : }   // namespace frm
     705             : 
     706             : 
     707             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10