LCOV - code coverage report
Current view: top level - svx/source/form - tbxform.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 20 161 12.4 %
Date: 2015-06-13 12:38:46 Functions: 12 45 26.7 %
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             : #include <svl/intitem.hxx>
      22             : #include <svl/eitem.hxx>
      23             : #include <svl/stritem.hxx>
      24             : #include <sfx2/dispatch.hxx>
      25             : #include <vcl/toolbox.hxx>
      26             : #include <vcl/fixed.hxx>
      27             : #include <vcl/settings.hxx>
      28             : #include "fmitems.hxx"
      29             : #include "formtoolbars.hxx"
      30             : 
      31             : 
      32             : #include <svx/dialmgr.hxx>
      33             : #include <svx/dialogs.hrc>
      34             : #include "svx/tbxctl.hxx"
      35             : #include "tbxform.hxx"
      36             : #include "svx/fmresids.hrc"
      37             : #include "fmhelp.hrc"
      38             : #include <sfx2/viewfrm.hxx>
      39             : #include <sfx2/viewsh.hxx>
      40             : #include <sfx2/imagemgr.hxx>
      41             : #include <com/sun/star/beans/XPropertySet.hpp>
      42             : 
      43             : using namespace ::com::sun::star::uno;
      44             : using namespace ::com::sun::star::beans;
      45             : using namespace ::com::sun::star::frame;
      46             : using ::com::sun::star::beans::XPropertySet;
      47             : 
      48           0 : SvxFmAbsRecWin::SvxFmAbsRecWin( vcl::Window* _pParent, SfxToolBoxControl* _pController )
      49             :     :NumericField( _pParent, WB_BORDER )
      50           0 :     ,m_pController(_pController)
      51             : {
      52           0 :     SetMin(1);
      53           0 :     SetFirst(1);
      54           0 :     SetSpinSize(1);
      55           0 :     SetSizePixel( Size(70,19) );
      56             : 
      57           0 :     SetDecimalDigits(0);
      58           0 :     SetStrictFormat(true);
      59           0 : }
      60             : 
      61             : 
      62           0 : void SvxFmAbsRecWin::FirePosition( bool _bForce )
      63             : {
      64           0 :     if ( _bForce || IsValueChangedFromSaved() )
      65             :     {
      66           0 :         sal_Int64 nRecord = GetValue();
      67           0 :         if (nRecord < GetMin() || nRecord > GetMax())
      68             :         {
      69           0 :             return;
      70             :         }
      71             : 
      72           0 :         SfxInt32Item aPositionParam( FN_PARAM_1, static_cast<sal_Int32>(nRecord) );
      73             : 
      74           0 :         Any a;
      75           0 :         Sequence< PropertyValue > aArgs( 1 );
      76           0 :         aArgs[0].Name = "Position";
      77           0 :         aPositionParam.QueryValue( a );
      78           0 :         aArgs[0].Value = a;
      79             :         m_pController->Dispatch( OUString( ".uno:AbsoluteRecord" ),
      80           0 :                                  aArgs );
      81           0 :         m_pController->updateStatus();
      82             : 
      83           0 :         SaveValue();
      84             :     }
      85             : }
      86             : 
      87             : 
      88           0 : void SvxFmAbsRecWin::LoseFocus()
      89             : {
      90           0 :     FirePosition( false );
      91           0 : }
      92             : 
      93             : 
      94           0 : void SvxFmAbsRecWin::KeyInput( const KeyEvent& rKeyEvent )
      95             : {
      96           0 :     if( rKeyEvent.GetKeyCode() == KEY_RETURN && !GetText().isEmpty() )
      97           0 :         FirePosition( true );
      98             :     else
      99           0 :         NumericField::KeyInput( rKeyEvent );
     100           0 : }
     101             : 
     102             : 
     103             : // class SvxFmTbxCtlConfig
     104             : 
     105             : 
     106             : struct MapSlotToCmd
     107             : {
     108             :     sal_uInt16      nSlotId;
     109             :     const char* pCommand;
     110             : };
     111             : 
     112             : static const MapSlotToCmd SlotToCommands[] =
     113             : {
     114             :     { SID_FM_PUSHBUTTON,        ".uno:Pushbutton"       },
     115             :     { SID_FM_RADIOBUTTON,       ".uno:RadioButton"      },
     116             :     { SID_FM_CHECKBOX,          ".uno:CheckBox"         },
     117             :     { SID_FM_FIXEDTEXT,         ".uno:Label"            },
     118             :     { SID_FM_GROUPBOX,          ".uno:GroupBox"         },
     119             :     { SID_FM_LISTBOX,           ".uno:ListBox"          },
     120             :     { SID_FM_COMBOBOX,          ".uno:ComboBox"         },
     121             :     { SID_FM_EDIT,              ".uno:Edit"             },
     122             :     { SID_FM_DBGRID,            ".uno:Grid"             },
     123             :     { SID_FM_IMAGEBUTTON,       ".uno:Imagebutton"      },
     124             :     { SID_FM_IMAGECONTROL,      ".uno:ImageControl"     },
     125             :     { SID_FM_FILECONTROL,       ".uno:FileControl"      },
     126             :     { SID_FM_DATEFIELD,         ".uno:DateField"        },
     127             :     { SID_FM_TIMEFIELD,         ".uno:TimeField"        },
     128             :     { SID_FM_NUMERICFIELD,      ".uno:NumericField"     },
     129             :     { SID_FM_CURRENCYFIELD,     ".uno:CurrencyField"    },
     130             :     { SID_FM_PATTERNFIELD,      ".uno:PatternField"     },
     131             :     { SID_FM_DESIGN_MODE,       ".uno:SwitchControlDesignMode" },
     132             :     { SID_FM_FORMATTEDFIELD,    ".uno:FormattedField"   },
     133             :     { SID_FM_SCROLLBAR,         ".uno:ScrollBar"        },
     134             :     { SID_FM_SPINBUTTON,        ".uno:SpinButton"       },
     135             :     { 0,                        ""                      }
     136             : };
     137             : 
     138         177 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlConfig, SfxUInt16Item );
     139             : 
     140             : 
     141          63 : SvxFmTbxCtlConfig::SvxFmTbxCtlConfig( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     142             :     : SfxToolBoxControl( nSlotId, nId, rTbx )
     143          63 :     ,nLastSlot( 0 )
     144             : {
     145          63 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
     146          63 : }
     147             : 
     148             : 
     149          92 : void SvxFmTbxCtlConfig::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
     150             : {
     151          92 :     if (nSID == SID_FM_CONFIG)
     152             :     {
     153          92 :         sal_uInt16 nSlot   = 0;
     154          92 :         if (eState >= SfxItemState::DEFAULT)
     155          92 :             nSlot = static_cast<const SfxUInt16Item*>(pState)->GetValue();
     156             : 
     157          92 :         switch( nSlot )
     158             :         {
     159             :             case SID_FM_PUSHBUTTON:
     160             :             case SID_FM_RADIOBUTTON:
     161             :             case SID_FM_CHECKBOX:
     162             :             case SID_FM_FIXEDTEXT:
     163             :             case SID_FM_GROUPBOX:
     164             :             case SID_FM_LISTBOX:
     165             :             case SID_FM_COMBOBOX:
     166             :             case SID_FM_NAVIGATIONBAR:
     167             :             case SID_FM_EDIT:
     168             :             case SID_FM_DBGRID:
     169             :             case SID_FM_IMAGEBUTTON:
     170             :             case SID_FM_IMAGECONTROL:
     171             :             case SID_FM_FILECONTROL:
     172             :             case SID_FM_DATEFIELD:
     173             :             case SID_FM_TIMEFIELD:
     174             :             case SID_FM_NUMERICFIELD:
     175             :             case SID_FM_CURRENCYFIELD:
     176             :             case SID_FM_PATTERNFIELD:
     177             :             case SID_FM_DESIGN_MODE:
     178             :             case SID_FM_FORMATTEDFIELD:
     179             :             case SID_FM_SCROLLBAR:
     180             :             case SID_FM_SPINBUTTON:
     181             :             {   // set a new image, matching to this slot
     182           0 :                 OUString aSlotURL = "slot:" + OUString::number( nSlot);
     183           0 :                 Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
     184           0 :                 GetToolBox().SetItemImage( GetId(), aImage );
     185           0 :                 nLastSlot = nSlot;
     186             :             }
     187           0 :             break;
     188             :         }
     189             :     }
     190          92 :     SfxToolBoxControl::StateChanged( nSID, eState,pState );
     191          92 : }
     192             : 
     193             : 
     194           0 : SfxPopupWindowType SvxFmTbxCtlConfig::GetPopupWindowType() const
     195             : {
     196           0 :     return( nLastSlot == 0 ? SfxPopupWindowType::ONCLICK : SfxPopupWindowType::ONTIMEOUT );
     197             : }
     198             : 
     199             : 
     200           0 : VclPtr<SfxPopupWindow> SvxFmTbxCtlConfig::CreatePopupWindow()
     201             : {
     202           0 :     if ( GetSlotId() == SID_FM_CONFIG )
     203             :     {
     204           0 :         ::svxform::FormToolboxes aToolboxes( m_xFrame );
     205           0 :         createAndPositionSubToolBar( aToolboxes.getToolboxResourceName( SID_FM_CONFIG ) );
     206             :     }
     207           0 :     return NULL;
     208             : }
     209             : 
     210             : 
     211           0 : void SvxFmTbxCtlConfig::Select( sal_uInt16 /*nSelectModifier*/ )
     212             : {
     213             : 
     214             :     // Click auf den Button SID_FM_CONFIG in der ObjectBar
     215           0 :     if ( nLastSlot )
     216             :     {
     217           0 :         sal_uInt16 n = 0;
     218           0 :         while( SlotToCommands[n].nSlotId > 0 )
     219             :         {
     220           0 :             if ( SlotToCommands[n].nSlotId == nLastSlot )
     221           0 :                 break;
     222           0 :             n++;
     223             :         }
     224             : 
     225           0 :         if ( SlotToCommands[n].nSlotId > 0 )
     226             :         {
     227           0 :             Sequence< PropertyValue > aArgs;
     228             :             Dispatch( OUString::createFromAscii( SlotToCommands[n].pCommand ),
     229           0 :                       aArgs );
     230             :         }
     231             :     }
     232           0 : }
     233             : 
     234         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlAbsRec, SfxInt32Item );
     235             : 
     236           0 : SvxFmTbxCtlAbsRec::SvxFmTbxCtlAbsRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     237           0 :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     238             : {
     239           0 : }
     240             : 
     241             : 
     242           0 : SvxFmTbxCtlAbsRec::~SvxFmTbxCtlAbsRec()
     243             : {
     244           0 : }
     245             : 
     246             : 
     247           0 : void SvxFmTbxCtlAbsRec::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
     248             : {
     249           0 :     sal_uInt16              nId = GetId();
     250           0 :     ToolBox*            pToolBox = &GetToolBox();
     251           0 :     SvxFmAbsRecWin*     pWin = static_cast<SvxFmAbsRecWin*>( pToolBox->GetItemWindow(nId) );
     252             : 
     253             :     assert(pWin && "Control not found!");
     254             : 
     255           0 :     if (pState)
     256             :     {
     257           0 :         const SfxInt32Item* pItem = PTR_CAST( SfxInt32Item, pState );
     258             :         DBG_ASSERT( pItem, "SvxFmTbxCtlAbsRec::StateChanged: invalid item!" );
     259           0 :         pWin->SetValue( pItem ? pItem->GetValue() : -1 );
     260             :     }
     261             : 
     262           0 :     bool bEnable = SfxItemState::DISABLED != eState && pState;
     263           0 :     if (!bEnable)
     264           0 :         pWin->SetText(OUString());
     265             : 
     266             : 
     267             :     // Enablen/disablen des Fensters
     268           0 :     pToolBox->EnableItem(nId, bEnable);
     269           0 :     SfxToolBoxControl::StateChanged( nSID, eState,pState );
     270           0 : }
     271             : 
     272             : 
     273           0 : VclPtr<vcl::Window> SvxFmTbxCtlAbsRec::CreateItemWindow( vcl::Window* pParent )
     274             : {
     275           0 :     VclPtrInstance<SvxFmAbsRecWin> pWin( pParent, this );
     276           0 :     pWin->SetUniqueId( UID_ABSOLUTE_RECORD_WINDOW );
     277           0 :     return pWin.get();
     278             : }
     279             : 
     280         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecText, SfxBoolItem );
     281             : 
     282           0 : SvxFmTbxCtlRecText::SvxFmTbxCtlRecText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     283           0 :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     284             : {
     285           0 : }
     286             : 
     287             : 
     288           0 : SvxFmTbxCtlRecText::~SvxFmTbxCtlRecText()
     289             : {
     290           0 : }
     291             : 
     292             : 
     293           0 : VclPtr<vcl::Window> SvxFmTbxCtlRecText::CreateItemWindow( vcl::Window* pParent )
     294             : {
     295           0 :     OUString aText(SVX_RESSTR(RID_STR_REC_TEXT));
     296           0 :     VclPtrInstance<FixedText> pFixedText( pParent );
     297           0 :     Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
     298           0 :     pFixedText->SetText( aText );
     299           0 :     aSize.Width() += 6;
     300           0 :     pFixedText->SetSizePixel( aSize );
     301           0 :     pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
     302             : 
     303           0 :     return pFixedText;
     304             : }
     305             : 
     306         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
     307             : 
     308           0 : SvxFmTbxCtlRecFromText::SvxFmTbxCtlRecFromText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     309           0 :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     310             : {
     311           0 : }
     312             : 
     313             : 
     314           0 : SvxFmTbxCtlRecFromText::~SvxFmTbxCtlRecFromText()
     315             : {
     316           0 : }
     317             : 
     318             : 
     319           0 : VclPtr<vcl::Window> SvxFmTbxCtlRecFromText::CreateItemWindow( vcl::Window* pParent )
     320             : {
     321           0 :     OUString aText(SVX_RESSTR(RID_STR_REC_FROM_TEXT));
     322           0 :     VclPtrInstance<FixedText> pFixedText( pParent, WB_CENTER );
     323           0 :     Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
     324           0 :     aSize.Width() += 12;
     325           0 :     pFixedText->SetText( aText );
     326           0 :     pFixedText->SetSizePixel( aSize );
     327           0 :     pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
     328           0 :     return pFixedText.get();
     329             : }
     330             : 
     331         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecTotal, SfxStringItem );
     332             : 
     333             : 
     334           0 : SvxFmTbxCtlRecTotal::SvxFmTbxCtlRecTotal( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     335             :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     336           0 :     ,pFixedText( NULL )
     337             : {
     338           0 : }
     339             : 
     340             : 
     341           0 : SvxFmTbxCtlRecTotal::~SvxFmTbxCtlRecTotal()
     342             : {
     343           0 : }
     344             : 
     345             : 
     346           0 : VclPtr<vcl::Window> SvxFmTbxCtlRecTotal::CreateItemWindow( vcl::Window* pParent )
     347             : {
     348           0 :     pFixedText.reset(VclPtr<FixedText>::Create( pParent ));
     349           0 :     OUString aSample("123456");
     350           0 :     Size aSize( pFixedText->GetTextWidth( aSample ), pFixedText->GetTextHeight( ) );
     351           0 :     aSize.Width() += 12;
     352           0 :     pFixedText->SetSizePixel( aSize );
     353           0 :     pFixedText->SetBackground();
     354           0 :     pFixedText->SetPaintTransparent(true);
     355           0 :     return pFixedText;
     356             : }
     357             : 
     358             : 
     359           0 : void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
     360             : {
     361             : 
     362             :     // Setzen des FixedTextes
     363           0 :     if (GetSlotId() != SID_FM_RECORD_TOTAL)
     364           0 :         return;
     365             : 
     366           0 :     OUString aText;
     367           0 :     if (pState)
     368           0 :         aText = static_cast<const SfxStringItem*>(pState)->GetValue();
     369             :     else
     370           0 :         aText = "?";
     371             : 
     372           0 :     pFixedText->SetText( aText );
     373           0 :     pFixedText->Update();
     374           0 :     pFixedText->Flush();
     375             : 
     376           0 :     SfxToolBoxControl::StateChanged( nSID, eState,pState );
     377             : }
     378             : 
     379         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxNextRec, SfxBoolItem );
     380             : 
     381             : 
     382           0 : SvxFmTbxNextRec::SvxFmTbxNextRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     383           0 :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     384             : {
     385           0 :     rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | ToolBoxItemBits::REPEAT);
     386             : 
     387           0 :     AllSettings aSettings = rTbx.GetSettings();
     388           0 :     MouseSettings aMouseSettings = aSettings.GetMouseSettings();
     389           0 :     aMouseSettings.SetButtonRepeat(aMouseSettings.GetButtonRepeat() / 4);
     390           0 :     aSettings.SetMouseSettings(aMouseSettings);
     391           0 :     rTbx.SetSettings(aSettings, true);
     392           0 : }
     393             : 
     394         114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxPrevRec, SfxBoolItem );
     395             : 
     396             : 
     397           0 : SvxFmTbxPrevRec::SvxFmTbxPrevRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     398           0 :     :SfxToolBoxControl( nSlotId, nId, rTbx )
     399             : {
     400           0 :     rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | ToolBoxItemBits::REPEAT);
     401         390 : }
     402             : 
     403             : 
     404             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11