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

Generated by: LCOV version 1.10