LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - itemwin.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 24 264 9.1 %
Date: 2015-06-13 12:38:46 Functions: 8 33 24.2 %
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 <com/sun/star/drawing/FillStyle.hpp>
      21             : 
      22             : #include <sfx2/dispatch.hxx>
      23             : #include <sfx2/objsh.hxx>
      24             : #include <sfx2/viewsh.hxx>
      25             : #include <sfx2/module.hxx>
      26             : #include <tools/urlobj.hxx>
      27             : 
      28             : #include <vcl/svapp.hxx>
      29             : #include <vcl/settings.hxx>
      30             : #include <vcl/builderfactory.hxx>
      31             : 
      32             : #include <svx/dialogs.hrc>
      33             : 
      34             : #define DELAY_TIMEOUT           100
      35             : 
      36             : #include <svx/xlnclit.hxx>
      37             : #include <svx/xlnwtit.hxx>
      38             : #include <svx/xlineit0.hxx>
      39             : #include <svx/xlndsit.hxx>
      40             : #include <svx/xtable.hxx>
      41             : #include "svx/drawitem.hxx"
      42             : #include <svx/dialmgr.hxx>
      43             : #include "svx/dlgutil.hxx"
      44             : #include <svx/itemwin.hxx>
      45             : #include "svx/linectrl.hxx"
      46             : #include <svtools/colorcfg.hxx>
      47             : 
      48             : using namespace ::com::sun::star;
      49             : using namespace ::com::sun::star::uno;
      50             : using namespace ::com::sun::star::frame;
      51             : using namespace ::com::sun::star::util;
      52             : using namespace ::com::sun::star::lang;
      53             : using namespace ::com::sun::star::beans;
      54             : 
      55           0 : SvxLineBox::SvxLineBox( vcl::Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits ) :
      56             :     LineLB( pParent, nBits ),
      57             :     nCurPos     ( 0 ),
      58             :     aLogicalSize(40,140),
      59             :     bRelease    ( true ),
      60             :     mpSh        ( NULL ),
      61           0 :     mxFrame     ( rFrame )
      62             : {
      63           0 :     SetSizePixel( LogicToPixel( aLogicalSize, MAP_APPFONT ));
      64           0 :     Show();
      65             : 
      66           0 :     aDelayTimer.SetTimeout( DELAY_TIMEOUT );
      67           0 :     aDelayTimer.SetTimeoutHdl( LINK( this, SvxLineBox, DelayHdl_Impl ) );
      68           0 :     aDelayTimer.Start();
      69           0 : }
      70             : 
      71             : 
      72             : 
      73           0 : IMPL_LINK_NOARG_TYPED(SvxLineBox, DelayHdl_Impl, Timer *, void)
      74             : {
      75           0 :     if ( GetEntryCount() == 0 )
      76             :     {
      77           0 :         mpSh = SfxObjectShell::Current();
      78           0 :         FillControl();
      79             :     }
      80           0 : }
      81             : 
      82             : 
      83             : 
      84           0 : void SvxLineBox::Select()
      85             : {
      86             :     // Call the parent's Select() member to trigger accessibility events.
      87           0 :     LineLB::Select();
      88             : 
      89           0 :     if ( !IsTravelSelect() )
      90             :     {
      91             :         drawing::LineStyle eXLS;
      92           0 :         sal_Int32 nPos = GetSelectEntryPos();
      93             : 
      94           0 :         switch ( nPos )
      95             :         {
      96             :             case 0:
      97           0 :                 eXLS = drawing::LineStyle_NONE;
      98           0 :                 break;
      99             : 
     100             :             case 1:
     101           0 :                 eXLS = drawing::LineStyle_SOLID;
     102           0 :                 break;
     103             : 
     104             :             default:
     105             :             {
     106           0 :                 eXLS = drawing::LineStyle_DASH;
     107             : 
     108           0 :                 if ( nPos != LISTBOX_ENTRY_NOTFOUND &&
     109           0 :                      SfxObjectShell::Current()  &&
     110           0 :                      SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) )
     111             :                 {
     112             :                     // LineDashItem will only be sent if it also has a dash.
     113             :                     // Notify cares!
     114             :                     SvxDashListItem aItem( *static_cast<const SvxDashListItem*>(
     115           0 :                         SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) ) );
     116             :                     XLineDashItem aLineDashItem( GetSelectEntry(),
     117           0 :                         aItem.GetDashList()->GetDash( nPos - 2 )->GetDash() );
     118             : 
     119           0 :                     Any a;
     120           0 :                     Sequence< PropertyValue > aArgs( 1 );
     121           0 :                     aArgs[0].Name = "LineDash";
     122           0 :                     aLineDashItem.QueryValue ( a );
     123           0 :                     aArgs[0].Value = a;
     124           0 :                     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     125             :                                                  OUString( ".uno:LineDash" ),
     126           0 :                                                  aArgs );
     127             :                 }
     128             :             }
     129           0 :             break;
     130             :         }
     131             : 
     132           0 :         XLineStyleItem aLineStyleItem( eXLS );
     133           0 :         Any a;
     134           0 :         Sequence< PropertyValue > aArgs( 1 );
     135           0 :         aArgs[0].Name = "XLineStyle";
     136           0 :         aLineStyleItem.QueryValue ( a );
     137           0 :         aArgs[0].Value = a;
     138           0 :         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     139             :                                      OUString( ".uno:XLineStyle" ),
     140           0 :                                      aArgs );
     141             : 
     142           0 :         nCurPos = GetSelectEntryPos();
     143           0 :         ReleaseFocus_Impl();
     144             :     }
     145           0 : }
     146             : 
     147             : 
     148             : 
     149           0 : bool SvxLineBox::PreNotify( NotifyEvent& rNEvt )
     150             : {
     151           0 :     MouseNotifyEvent nType = rNEvt.GetType();
     152             : 
     153           0 :     switch(nType)
     154             :     {
     155             :         case MouseNotifyEvent::MOUSEBUTTONDOWN:
     156             :         case MouseNotifyEvent::GETFOCUS:
     157           0 :             nCurPos = GetSelectEntryPos();
     158           0 :         break;
     159             :         case MouseNotifyEvent::LOSEFOCUS:
     160           0 :             SelectEntryPos(nCurPos);
     161           0 :         break;
     162             :         case MouseNotifyEvent::KEYINPUT:
     163             :         {
     164           0 :             const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     165           0 :             if( pKEvt->GetKeyCode().GetCode() == KEY_TAB)
     166             :             {
     167           0 :                 bRelease = false;
     168           0 :                 Select();
     169             :             }
     170             :         }
     171           0 :         break;
     172             :         default:
     173           0 :         break;
     174             :     }
     175           0 :     return LineLB::PreNotify( rNEvt );
     176             : }
     177             : 
     178             : 
     179             : 
     180           0 : bool SvxLineBox::Notify( NotifyEvent& rNEvt )
     181             : {
     182           0 :     bool nHandled = LineLB::Notify( rNEvt );
     183             : 
     184           0 :     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     185             :     {
     186           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     187             : 
     188           0 :         switch ( pKEvt->GetKeyCode().GetCode() )
     189             :         {
     190             :             case KEY_RETURN:
     191           0 :                 Select();
     192           0 :                 nHandled = true;
     193           0 :                 break;
     194             : 
     195             :             case KEY_ESCAPE:
     196           0 :                 SelectEntryPos( nCurPos );
     197           0 :                 ReleaseFocus_Impl();
     198           0 :                 nHandled = true;
     199           0 :                 break;
     200             :         }
     201             :     }
     202           0 :     return nHandled;
     203             : }
     204             : 
     205             : 
     206             : 
     207           0 : void SvxLineBox::ReleaseFocus_Impl()
     208             : {
     209           0 :     if(!bRelease)
     210             :     {
     211           0 :         bRelease = true;
     212           0 :         return;
     213             :     }
     214             : 
     215           0 :     if( SfxViewShell::Current() )
     216             :     {
     217           0 :         vcl::Window* pShellWnd = SfxViewShell::Current()->GetWindow();
     218             : 
     219           0 :         if ( pShellWnd )
     220           0 :             pShellWnd->GrabFocus();
     221             :     }
     222             : }
     223             : 
     224           0 : void SvxLineBox::DataChanged( const DataChangedEvent& rDCEvt )
     225             : {
     226           0 :     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
     227           0 :          (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     228             :     {
     229           0 :         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
     230             :     }
     231             : 
     232           0 :     LineLB::DataChanged( rDCEvt );
     233           0 : }
     234             : 
     235           0 : void SvxLineBox::FillControl()
     236             : {
     237             :     // FillStyles();
     238           0 :     if ( !mpSh )
     239           0 :         mpSh = SfxObjectShell::Current();
     240             : 
     241           0 :     if( mpSh )
     242             :     {
     243           0 :         const SvxDashListItem* pItem = static_cast<const SvxDashListItem*>( mpSh->GetItem( SID_DASH_LIST ) );
     244           0 :         if ( pItem )
     245           0 :             Fill( pItem->GetDashList() );
     246             :     }
     247           0 : }
     248             : 
     249           0 : SvxMetricField::SvxMetricField(
     250             :     vcl::Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits )
     251             :     : MetricField(pParent, nBits)
     252             :     , aCurTxt()
     253             :     , ePoolUnit(SFX_MAPUNIT_CM)
     254           0 :     , mxFrame(rFrame)
     255             : {
     256           0 :     Size aSize = Size(GetTextWidth( OUString("99,99mm") ),GetTextHeight());
     257           0 :     aSize.Width() += 20;
     258           0 :     aSize.Height() += 6;
     259           0 :     SetSizePixel( aSize );
     260           0 :     aLogicalSize = PixelToLogic(aSize, MAP_APPFONT);
     261           0 :     SetUnit( FUNIT_MM );
     262           0 :     SetDecimalDigits( 2 );
     263           0 :     SetMax( 5000 );
     264           0 :     SetMin( 0 );
     265           0 :     SetLast( 5000 );
     266           0 :     SetFirst( 0 );
     267             : 
     268           0 :     eDlgUnit = SfxModule::GetModuleFieldUnit( mxFrame );
     269           0 :     SetFieldUnit( *this, eDlgUnit, false );
     270           0 :     Show();
     271           0 : }
     272             : 
     273             : 
     274             : 
     275           0 : void SvxMetricField::Update( const XLineWidthItem* pItem )
     276             : {
     277           0 :     if ( pItem )
     278             :     {
     279           0 :         if ( pItem->GetValue() != GetCoreValue( *this, ePoolUnit ) )
     280           0 :             SetMetricValue( *this, pItem->GetValue(), ePoolUnit );
     281             :     }
     282             :     else
     283           0 :         SetText( "" );
     284           0 : }
     285             : 
     286             : 
     287             : 
     288           0 : void SvxMetricField::Modify()
     289             : {
     290           0 :     MetricField::Modify();
     291           0 :     long nTmp = GetCoreValue( *this, ePoolUnit );
     292           0 :     XLineWidthItem aLineWidthItem( nTmp );
     293             : 
     294           0 :     Any a;
     295           0 :     Sequence< PropertyValue > aArgs( 1 );
     296           0 :     aArgs[0].Name = "LineWidth";
     297           0 :     aLineWidthItem.QueryValue( a );
     298           0 :     aArgs[0].Value = a;
     299           0 :     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     300             :                                  OUString( ".uno:LineWidth" ),
     301           0 :                                  aArgs );
     302           0 : }
     303             : 
     304             : 
     305             : 
     306           0 : void SvxMetricField::ReleaseFocus_Impl()
     307             : {
     308           0 :     if( SfxViewShell::Current() )
     309             :     {
     310           0 :         vcl::Window* pShellWnd = SfxViewShell::Current()->GetWindow();
     311           0 :         if ( pShellWnd )
     312           0 :             pShellWnd->GrabFocus();
     313             :     }
     314           0 : }
     315             : 
     316           0 : void SvxMetricField::Down()
     317             : {
     318           0 :     MetricField::Down();
     319           0 : }
     320             : 
     321           0 : void SvxMetricField::Up()
     322             : {
     323           0 :     MetricField::Up();
     324           0 : }
     325             : 
     326           0 : void SvxMetricField::SetCoreUnit( SfxMapUnit eUnit )
     327             : {
     328           0 :     ePoolUnit = eUnit;
     329           0 : }
     330             : 
     331           0 : void SvxMetricField::RefreshDlgUnit()
     332             : {
     333           0 :     FieldUnit eTmpUnit = SfxModule::GetModuleFieldUnit( mxFrame );
     334           0 :     if ( eDlgUnit != eTmpUnit )
     335             :     {
     336           0 :         eDlgUnit = eTmpUnit;
     337           0 :         SetFieldUnit( *this, eDlgUnit, false );
     338             :     }
     339           0 : }
     340             : 
     341           0 : bool SvxMetricField::PreNotify( NotifyEvent& rNEvt )
     342             : {
     343           0 :     MouseNotifyEvent nType = rNEvt.GetType();
     344             : 
     345           0 :     if ( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
     346           0 :         aCurTxt = GetText();
     347             : 
     348           0 :     return MetricField::PreNotify( rNEvt );
     349             : }
     350             : 
     351             : 
     352             : 
     353           0 : bool SvxMetricField::Notify( NotifyEvent& rNEvt )
     354             : {
     355           0 :     bool nHandled = MetricField::Notify( rNEvt );
     356             : 
     357           0 :     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     358             :     {
     359           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     360           0 :         const vcl::KeyCode& rKey = pKEvt->GetKeyCode();
     361           0 :         SfxViewShell* pSh = SfxViewShell::Current();
     362             : 
     363           0 :         if ( rKey.GetModifier() && rKey.GetGroup() != KEYGROUP_CURSOR && pSh )
     364           0 :             (void)pSh->KeyInput( *pKEvt );
     365             :         else
     366             :         {
     367           0 :             bool bHandled = false;
     368             : 
     369           0 :             switch ( rKey.GetCode() )
     370             :             {
     371             :                 case KEY_RETURN:
     372           0 :                     Reformat();
     373           0 :                     bHandled = true;
     374           0 :                     break;
     375             : 
     376             :                 case KEY_ESCAPE:
     377           0 :                     SetText( aCurTxt );
     378           0 :                     bHandled = true;
     379           0 :                     break;
     380             :             }
     381             : 
     382           0 :             if ( bHandled )
     383             :             {
     384           0 :                 nHandled = true;
     385           0 :                 Modify();
     386           0 :                 ReleaseFocus_Impl();
     387             :             }
     388             :         }
     389             :     }
     390           0 :     return nHandled;
     391             : }
     392             : 
     393           0 : void SvxMetricField::DataChanged( const DataChangedEvent& rDCEvt )
     394             : {
     395           0 :     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
     396           0 :          (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     397             :     {
     398           0 :         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
     399             :     }
     400             : 
     401           0 :     MetricField::DataChanged( rDCEvt );
     402           0 : }
     403             : 
     404          51 : SvxFillTypeBox::SvxFillTypeBox( vcl::Window* pParent, WinBits nBits ) :
     405             :     FillTypeLB( pParent, nBits | WB_TABSTOP ),
     406             :     nCurPos ( 0 ),
     407             :     bSelect ( false ),
     408          51 :     bRelease( true )
     409             : {
     410          51 :     SetSizePixel( LogicToPixel( Size(40, 40 ),MAP_APPFONT ));
     411          51 :     Fill();
     412          51 :     SelectEntryPos( drawing::FillStyle_SOLID );
     413          51 :     Show();
     414          51 : }
     415             : 
     416           1 : VCL_BUILDER_FACTORY(SvxFillTypeBox)
     417             : 
     418           0 : bool SvxFillTypeBox::PreNotify( NotifyEvent& rNEvt )
     419             : {
     420           0 :     MouseNotifyEvent nType = rNEvt.GetType();
     421             : 
     422           0 :     if ( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
     423           0 :         nCurPos = GetSelectEntryPos();
     424           0 :     else if ( MouseNotifyEvent::LOSEFOCUS == nType
     425           0 :         && Application::GetFocusWindow()
     426           0 :         && !IsWindowOrChild( Application::GetFocusWindow(), true ) )
     427             :     {
     428           0 :         if ( !bSelect )
     429           0 :             SelectEntryPos( nCurPos );
     430             :         else
     431           0 :             bSelect = false;
     432             :     }
     433             : 
     434           0 :     return FillTypeLB::PreNotify( rNEvt );
     435             : }
     436             : 
     437             : 
     438             : 
     439         102 : bool SvxFillTypeBox::Notify( NotifyEvent& rNEvt )
     440             : {
     441         102 :     bool nHandled = FillTypeLB::Notify( rNEvt );
     442             : 
     443         102 :     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     444             :     {
     445           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     446           0 :         switch ( pKEvt->GetKeyCode().GetCode() )
     447             :         {
     448             :             case KEY_RETURN:
     449           0 :                 nHandled = true;
     450           0 :                 ( (Link<>&)GetSelectHdl() ).Call( this );
     451           0 :             break;
     452             :             case KEY_TAB:
     453           0 :                 bRelease = false;
     454           0 :                 ( (Link<>&)GetSelectHdl() ).Call( this );
     455           0 :                 bRelease = true;
     456           0 :                 break;
     457             : 
     458             :             case KEY_ESCAPE:
     459           0 :                 SelectEntryPos( nCurPos );
     460           0 :                 ReleaseFocus_Impl();
     461           0 :                 nHandled = true;
     462           0 :                 break;
     463             :         }
     464             :     }
     465         102 :     return nHandled;
     466             : }
     467             : 
     468             : 
     469             : 
     470           0 : void SvxFillTypeBox::ReleaseFocus_Impl()
     471             : {
     472           0 :     if( SfxViewShell::Current() )
     473             :     {
     474           0 :         vcl::Window* pShellWnd = SfxViewShell::Current()->GetWindow();
     475             : 
     476           0 :         if ( pShellWnd )
     477           0 :             pShellWnd->GrabFocus();
     478             :     }
     479           0 : }
     480             : 
     481          51 : SvxFillAttrBox::SvxFillAttrBox( vcl::Window* pParent, WinBits nBits ) :
     482             :     FillAttrLB( pParent, nBits | WB_TABSTOP ),
     483             :     nCurPos( 0 ),
     484          51 :     bRelease( true )
     485             : 
     486             : {
     487          51 :     SetPosPixel( Point( 90, 0 ) );
     488          51 :     SetSizePixel( LogicToPixel( Size(50, 80 ), MAP_APPFONT ));
     489          51 :     Show();
     490          51 : }
     491             : 
     492           1 : VCL_BUILDER_FACTORY(SvxFillAttrBox)
     493             : 
     494           0 : bool SvxFillAttrBox::PreNotify( NotifyEvent& rNEvt )
     495             : {
     496           0 :     MouseNotifyEvent nType = rNEvt.GetType();
     497             : 
     498           0 :     if ( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
     499           0 :         nCurPos = GetSelectEntryPos();
     500             : 
     501           0 :     return FillAttrLB::PreNotify( rNEvt );
     502             : }
     503             : 
     504             : 
     505             : 
     506         102 : bool SvxFillAttrBox::Notify( NotifyEvent& rNEvt )
     507             : {
     508         102 :     bool nHandled = FillAttrLB::Notify( rNEvt );
     509             : 
     510         102 :     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     511             :     {
     512           0 :         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
     513             : 
     514           0 :         switch ( pKEvt->GetKeyCode().GetCode() )
     515             :         {
     516             :             case KEY_RETURN:
     517           0 :                 ( (Link<>&)GetSelectHdl() ).Call( this );
     518           0 :                 nHandled = true;
     519           0 :             break;
     520             :             case KEY_TAB:
     521           0 :                 bRelease = false;
     522           0 :                 GetSelectHdl().Call( this );
     523           0 :                 bRelease = true;
     524           0 :             break;
     525             :             case KEY_ESCAPE:
     526           0 :                 SelectEntryPos( nCurPos );
     527           0 :                 ReleaseFocus_Impl();
     528           0 :                 nHandled = true;
     529           0 :                 break;
     530             :         }
     531             :     }
     532         102 :     return nHandled;
     533             : }
     534             : 
     535             : 
     536             : 
     537           0 : void SvxFillAttrBox::Select()
     538             : {
     539           0 :     FillAttrLB::Select();
     540           0 : }
     541             : 
     542             : 
     543             : 
     544           0 : void SvxFillAttrBox::ReleaseFocus_Impl()
     545             : {
     546           0 :     if( SfxViewShell::Current() )
     547             :     {
     548           0 :         vcl::Window* pShellWnd = SfxViewShell::Current()->GetWindow();
     549             : 
     550           0 :         if ( pShellWnd )
     551           0 :             pShellWnd->GrabFocus();
     552             :     }
     553         390 : }
     554             : 
     555             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11