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

Generated by: LCOV version 1.11