LCOV - code coverage report
Current view: top level - dbaccess/source/ui/querydesign - limitboxcontroller.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 97 0.0 %
Date: 2014-04-14 Functions: 0 25 0.0 %
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             : 
      10             : #include "limitboxcontroller.hxx"
      11             : 
      12             : #include <com/sun/star/frame/XDispatchProvider.hpp>
      13             : #include <com/sun/star/beans/PropertyValue.hpp>
      14             : 
      15             : #include <vcl/svapp.hxx>
      16             : #include <vcl/window.hxx>
      17             : #include <toolkit/helper/vclunohelper.hxx>
      18             : #include <osl/mutex.hxx>
      19             : #include <comphelper/processfactory.hxx>
      20             : 
      21             : #include "LimitBox.hxx"
      22             : #include "dbu_reghelper.hxx"
      23             : #include "moduledbu.hxx"
      24             : 
      25             : 
      26             : using namespace ::com::sun::star;
      27             : 
      28             : namespace dbaui
      29             : {
      30             : 
      31             : class LimitBoxImpl: public LimitBox
      32             : {
      33             :     public:
      34             :         LimitBoxImpl( Window* pParent, LimitBoxController* pCtrl );
      35             :         virtual ~LimitBoxImpl();
      36             : 
      37             :         virtual bool Notify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
      38             : 
      39             :     private:
      40             :         LimitBoxController* m_pControl;
      41             : };
      42             : 
      43           0 : LimitBoxImpl::LimitBoxImpl( Window* pParent, LimitBoxController* pCtrl )
      44             :     : LimitBox( pParent, WinBits( WB_DROPDOWN | WB_VSCROLL) )
      45           0 :     , m_pControl( pCtrl )
      46             : {
      47           0 : }
      48             : 
      49           0 : LimitBoxImpl::~LimitBoxImpl()
      50             : {
      51           0 : }
      52             : 
      53           0 : bool LimitBoxImpl::Notify( NotifyEvent& rNEvt )
      54             : {
      55           0 :     bool nHandled = false;
      56           0 :     switch ( rNEvt.GetType() )
      57             :     {
      58             :         case EVENT_LOSEFOCUS:
      59             :         {
      60           0 :             nHandled = LimitBox::Notify( rNEvt );
      61           0 :             uno::Sequence< beans::PropertyValue > aArgs( 1 );
      62           0 :             aArgs[0].Name  = "DBLimit.Value";
      63           0 :             aArgs[0].Value = uno::makeAny( GetValue() );
      64           0 :             m_pControl->dispatchCommand( aArgs );
      65           0 :             break;
      66             :         }
      67             :         case EVENT_KEYINPUT:
      68             :         {
      69           0 :             const sal_uInt16 nCode = rNEvt.GetKeyEvent()->GetKeyCode().GetCode();
      70           0 :             switch ( nCode )
      71             :             {
      72             :                 case KEY_ESCAPE:
      73             :                 {
      74           0 :                     Undo();
      75             :                 }
      76             :                 case KEY_RETURN:
      77             :                 {
      78           0 :                     GrabFocusToDocument();
      79           0 :                     nHandled = true;
      80           0 :                     break;
      81             :                 }
      82             :                 case KEY_TAB:
      83             :                 {
      84           0 :                     Select();
      85           0 :                     break;
      86             :                 }
      87             :             }
      88           0 :             break;
      89             :         }
      90             :     }
      91           0 :     return nHandled || LimitBox::Notify( rNEvt );
      92             : }
      93             : 
      94             : 
      95           0 : LimitBoxController::LimitBoxController(
      96             :     const uno::Reference< uno::XComponentContext >& rxContext ) :
      97             :     svt::ToolboxController( rxContext,
      98             :                             uno::Reference< frame::XFrame >(),
      99             :                             OUString( ".uno:DBLimit" ) ),
     100           0 :     m_pLimitBox( NULL )
     101             : {
     102           0 : }
     103             : 
     104           0 : LimitBoxController::~LimitBoxController()
     105             : {
     106           0 : }
     107             : 
     108             : /// XInterface
     109           0 : uno::Any SAL_CALL LimitBoxController::queryInterface( const uno::Type& aType )
     110             : throw (uno::RuntimeException, std::exception)
     111             : {
     112           0 :     uno::Any a = ToolboxController::queryInterface( aType );
     113           0 :     if ( a.hasValue() )
     114           0 :         return a;
     115             : 
     116           0 :     return ::cppu::queryInterface( aType, static_cast< lang::XServiceInfo* >( this ));
     117             : }
     118             : 
     119           0 : void SAL_CALL LimitBoxController::acquire() throw ()
     120             : {
     121           0 :     ToolboxController::acquire();
     122           0 : }
     123             : 
     124           0 : void SAL_CALL LimitBoxController::release() throw ()
     125             : {
     126           0 :     ToolboxController::release();
     127           0 : }
     128             : 
     129             : 
     130             : /// XServiceInfo
     131           0 : IMPLEMENT_SERVICE_INFO_IMPLNAME_STATIC(LimitBoxController, "org.libreoffice.comp.dbu.LimitBoxController")
     132           0 : IMPLEMENT_SERVICE_INFO_SUPPORTS(LimitBoxController)
     133           0 : IMPLEMENT_SERVICE_INFO_GETSUPPORTED1_STATIC(LimitBoxController, "com.sun.star.frame.ToolboxController")
     134             : 
     135             : uno::Reference< uno::XInterface >
     136           0 :     SAL_CALL LimitBoxController::Create(const uno::Reference< css::lang::XMultiServiceFactory >& _rxORB)
     137             : {
     138           0 :     return static_cast< XServiceInfo* >(new LimitBoxController( comphelper::getComponentContext(_rxORB) ));
     139             : }
     140             : 
     141             : /// XComponent
     142           0 : void SAL_CALL LimitBoxController::dispose()
     143             : throw (uno::RuntimeException, std::exception)
     144             : {
     145           0 :     svt::ToolboxController::dispose();
     146             : 
     147           0 :     SolarMutexGuard aSolarMutexGuard;
     148           0 :     delete m_pLimitBox;
     149           0 :     m_pLimitBox = 0;
     150           0 : }
     151             : 
     152             : /// XStatusListener
     153           0 : void SAL_CALL LimitBoxController::statusChanged(
     154             :     const frame::FeatureStateEvent& rEvent )
     155             : throw ( uno::RuntimeException, std::exception )
     156             : {
     157           0 :     if ( m_pLimitBox )
     158             :     {
     159           0 :         SolarMutexGuard aSolarMutexGuard;
     160           0 :         if ( rEvent.FeatureURL.Path == "DBLimit" )
     161             :         {
     162           0 :             if ( rEvent.IsEnabled )
     163             :             {
     164           0 :                 m_pLimitBox->Enable();
     165           0 :                 sal_Int64 nLimit = 0;
     166           0 :                 if ( (rEvent.State >>= nLimit) )
     167             :                 {
     168           0 :                     m_pLimitBox->SetValue( nLimit );
     169             :                 }
     170             :             }
     171             :             else
     172           0 :                 m_pLimitBox->Disable();
     173           0 :         }
     174             :     }
     175           0 : }
     176             : 
     177             : /// XToolbarController
     178           0 : void SAL_CALL LimitBoxController::execute( sal_Int16 /*KeyModifier*/ )
     179             : throw (uno::RuntimeException, std::exception)
     180             : {
     181           0 : }
     182             : 
     183           0 : void SAL_CALL LimitBoxController::click()
     184             : throw (uno::RuntimeException, std::exception)
     185             : {
     186           0 : }
     187             : 
     188           0 : void SAL_CALL LimitBoxController::doubleClick()
     189             : throw (uno::RuntimeException, std::exception)
     190             : {
     191           0 : }
     192             : 
     193           0 : uno::Reference< awt::XWindow > SAL_CALL LimitBoxController::createPopupWindow()
     194             : throw (uno::RuntimeException, std::exception)
     195             : {
     196           0 :     return uno::Reference< awt::XWindow >();
     197             : }
     198             : 
     199           0 : uno::Reference< awt::XWindow > SAL_CALL LimitBoxController::createItemWindow(
     200             :     const uno::Reference< awt::XWindow >& Parent )
     201             :     throw (uno::RuntimeException, std::exception)
     202             : {
     203           0 :     uno::Reference< awt::XWindow > xItemWindow;
     204           0 :     uno::Reference< awt::XWindow > xParent( Parent );
     205             : 
     206           0 :     Window* pParent = VCLUnoHelper::GetWindow( xParent );
     207           0 :     if ( pParent )
     208             :     {
     209           0 :         SolarMutexGuard aSolarMutexGuard;
     210           0 :         m_pLimitBox = new LimitBoxImpl(pParent, this);
     211           0 :         m_pLimitBox->SetSizePixel(m_pLimitBox->CalcBlockSize(6,1));
     212           0 :         xItemWindow = VCLUnoHelper::GetInterface( m_pLimitBox );
     213             :     }
     214             : 
     215           0 :     return xItemWindow;
     216             : }
     217             : 
     218           0 : void LimitBoxController::dispatchCommand(
     219             :     const uno::Sequence< beans::PropertyValue >& rArgs )
     220             : {
     221           0 :     uno::Reference< frame::XDispatchProvider > xDispatchProvider( m_xFrame, uno::UNO_QUERY );
     222           0 :     if ( xDispatchProvider.is() )
     223             :     {
     224           0 :         util::URL                               aURL;
     225           0 :         uno::Reference< frame::XDispatch >      xDispatch;
     226           0 :         uno::Reference< util::XURLTransformer > xURLTransformer = getURLTransformer();
     227             : 
     228           0 :         aURL.Complete = ".uno:DBLimit";
     229           0 :         xURLTransformer->parseStrict( aURL );
     230           0 :         xDispatch = xDispatchProvider->queryDispatch( aURL, OUString(), 0 );
     231           0 :         if ( xDispatch.is() )
     232           0 :             xDispatch->dispatch( aURL, rArgs );
     233           0 :     }
     234           0 : }
     235             : 
     236             : } ///dbaui namespace
     237             : 
     238           0 : extern "C" void SAL_CALL createRegistryInfo_LimitBoxController()
     239             : {
     240           0 :     static ::dbaui::OMultiInstanceAutoRegistration< ::dbaui::LimitBoxController > aAutoRegistration;
     241           0 : }
     242             : 
     243             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10