diff options
Diffstat (limited to 'forms/source/solar/component')
-rw-r--r-- | forms/source/solar/component/makefile.mk | 51 | ||||
-rw-r--r-- | forms/source/solar/component/navbarcontrol.cxx | 564 | ||||
-rw-r--r-- | forms/source/solar/component/navbarcontrol.hxx | 158 |
3 files changed, 773 insertions, 0 deletions
diff --git a/forms/source/solar/component/makefile.mk b/forms/source/solar/component/makefile.mk new file mode 100644 index 000000000000..06471405a3e2 --- /dev/null +++ b/forms/source/solar/component/makefile.mk @@ -0,0 +1,51 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/..$/.. +PRJINC=$(PRJ)$/source +PRJNAME=forms +TARGET=solarcomponent + +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ---------------------------------- + +.INCLUDE : settings.mk +.INCLUDE: $(PRJ)$/makefile.pmk + +# --- Types ------------------------------------- + +INCPRE+=$(SOLARINCDIR)$/offuh + +# --- Files ------------------------------------- + +SLOFILES= $(SLO)$/navbarcontrol.obj + +# --- Targets ---------------------------------- + +.INCLUDE : target.mk + diff --git a/forms/source/solar/component/navbarcontrol.cxx b/forms/source/solar/component/navbarcontrol.cxx new file mode 100644 index 000000000000..622df5783715 --- /dev/null +++ b/forms/source/solar/component/navbarcontrol.cxx @@ -0,0 +1,564 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_forms.hxx" + +#include "navbarcontrol.hxx" +#include "frm_strings.hxx" +#include "frm_module.hxx" +#include "FormComponent.hxx" +#include "componenttools.hxx" +#include "navtoolbar.hxx" +#include "commandimageprovider.hxx" +#include "commanddescriptionprovider.hxx" + +/** === begin UNO includes === **/ +#include <com/sun/star/awt/XView.hpp> +#include <com/sun/star/awt/PosSize.hpp> +#include <com/sun/star/form/runtime/FormFeature.hpp> +#include <com/sun/star/awt/XControlModel.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> +/** === end UNO includes === **/ + +#include <tools/debug.hxx> +#include <tools/diagnose_ex.h> +#include <vcl/svapp.hxx> + +//-------------------------------------------------------------------------- +extern "C" void SAL_CALL createRegistryInfo_ONavigationBarControl() +{ + static ::frm::OMultiInstanceAutoRegistration< ::frm::ONavigationBarControl > aAutoRegistration; +} + +//......................................................................... +namespace frm +{ +//......................................................................... + + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::beans; + using namespace ::com::sun::star::awt; + using namespace ::com::sun::star::lang; + using namespace ::com::sun::star::frame; + using namespace ::com::sun::star::graphic; + namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; + +#define FORWARD_TO_PEER_1( unoInterface, method, param1 ) \ + Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ + if ( xTypedPeer.is() ) \ + { \ + xTypedPeer->method( param1 ); \ + } + +#define FORWARD_TO_PEER_1_RET( returnType, unoInterface, method, param1 ) \ + returnType aReturn; \ + Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ + if ( xTypedPeer.is() ) \ + { \ + aReturn = xTypedPeer->method( param1 ); \ + } \ + return aReturn; + +#define FORWARD_TO_PEER_3( unoInterface, method, param1, param2, param3 ) \ + Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ + if ( xTypedPeer.is() ) \ + { \ + xTypedPeer->method( param1, param2, param3 ); \ + } + +#define FORWARD_TO_PEER_3_RET( returnType, unoInterface, method, param1, param2, param3 ) \ + returnType aReturn; \ + Reference< unoInterface > xTypedPeer( getPeer(), UNO_QUERY ); \ + if ( xTypedPeer.is() ) \ + { \ + aReturn = xTypedPeer->method( param1, param2, param3 ); \ + } \ + return aReturn; + + //================================================================== + // ONavigationBarControl + //================================================================== + DBG_NAME( ONavigationBarControl ) + //------------------------------------------------------------------ + ONavigationBarControl::ONavigationBarControl( const Reference< XMultiServiceFactory >& _rxORB ) + :UnoControl( _rxORB ) + { + DBG_CTOR( ONavigationBarControl, NULL ); + } + + //------------------------------------------------------------------ + ONavigationBarControl::~ONavigationBarControl() + { + DBG_DTOR( ONavigationBarControl, NULL ); + } + + //------------------------------------------------------------------ + IMPLEMENT_FORWARD_XTYPEPROVIDER2( ONavigationBarControl, UnoControl, ONavigationBarControl_Base ) + + //------------------------------------------------------------------ + Any SAL_CALL ONavigationBarControl::queryAggregation( const Type& _rType ) throw ( RuntimeException ) + { + Any aReturn = UnoControl::queryAggregation( _rType ); + + if ( !aReturn.hasValue() ) + aReturn = ONavigationBarControl_Base::queryInterface( _rType ); + + return aReturn; + } + + //------------------------------------------------------------------ + namespace + { + //.............................................................. + static WinBits lcl_getWinBits_nothrow( const Reference< XControlModel >& _rxModel ) + { + WinBits nBits = 0; + try + { + Reference< XPropertySet > xProps( _rxModel, UNO_QUERY ); + if ( xProps.is() ) + { + sal_Int16 nBorder = 0; + xProps->getPropertyValue( PROPERTY_BORDER ) >>= nBorder; + if ( nBorder ) + nBits |= WB_BORDER; + + sal_Bool bTabStop = sal_False; + if ( xProps->getPropertyValue( PROPERTY_TABSTOP ) >>= bTabStop ) + nBits |= ( bTabStop ? WB_TABSTOP : WB_NOTABSTOP ); + } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + return nBits; + } + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarControl::createPeer( const Reference< XToolkit >& /*_rToolkit*/, const Reference< XWindowPeer >& _rParentPeer ) throw( RuntimeException ) + { + ::vos::OGuard aGuard( Application::GetSolarMutex() ); + + if (!getPeer().is()) + { + mbCreatingPeer = sal_True; + + // determine the VLC window for the parent + Window* pParentWin = NULL; + if ( _rParentPeer.is() ) + { + VCLXWindow* pParentXWin = VCLXWindow::GetImplementation( _rParentPeer ); + if ( pParentXWin ) + pParentWin = pParentXWin->GetWindow(); + DBG_ASSERT( pParentWin, "ONavigationBarControl::createPeer: could not obtain the VCL-level parent window!" ); + } + + // create the peer + ONavigationBarPeer* pPeer = ONavigationBarPeer::Create( maContext.getLegacyServiceFactory(), pParentWin, getModel() ); + DBG_ASSERT( pPeer, "ONavigationBarControl::createPeer: invalid peer returned!" ); + if ( pPeer ) + // by definition, the returned component is aquired once + pPeer->release(); + + // announce the peer to the base class + setPeer( pPeer ); + + // initialize ourself (and thus the peer) with the model properties + updateFromModel(); + + Reference< XView > xPeerView( getPeer(), UNO_QUERY ); + if ( xPeerView.is() ) + { + xPeerView->setZoom( maComponentInfos.nZoomX, maComponentInfos.nZoomY ); + xPeerView->setGraphics( mxGraphics ); + } + + // a lot of initial settings from our component infos + setPosSize( maComponentInfos.nX, maComponentInfos.nY, maComponentInfos.nWidth, maComponentInfos.nHeight, PosSize::POSSIZE ); + + pPeer->setVisible ( maComponentInfos.bVisible && !mbDesignMode ); + pPeer->setEnable ( maComponentInfos.bEnable ); + pPeer->setDesignMode( mbDesignMode ); + + peerCreated(); + + mbCreatingPeer = sal_False; + + OControl::initFormControlPeer( getPeer() ); + } + } + + //------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ONavigationBarControl::getImplementationName() throw( RuntimeException ) + { + return getImplementationName_Static(); + } + + //------------------------------------------------------------------ + Sequence< ::rtl::OUString > SAL_CALL ONavigationBarControl::getSupportedServiceNames() throw( RuntimeException ) + { + return getSupportedServiceNames_Static(); + } + + //------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ONavigationBarControl::getImplementationName_Static() + { + return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.form.ONavigationBarControl" ) ); + } + + //------------------------------------------------------------------ + Sequence< ::rtl::OUString > SAL_CALL ONavigationBarControl::getSupportedServiceNames_Static() + { + Sequence< ::rtl::OUString > aServices( 2 ); + aServices[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControl" ) ); + aServices[ 1 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.form.control.NavigationToolBar" ) ); + return aServices; + } + + //------------------------------------------------------------------ + Reference< XInterface > SAL_CALL ONavigationBarControl::Create( const Reference< XMultiServiceFactory >& _rxFactory ) + { + return *( new ONavigationBarControl( _rxFactory ) ); + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarControl::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) + { + FORWARD_TO_PEER_1( XDispatchProviderInterception, registerDispatchProviderInterceptor, _rxInterceptor ); + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarControl::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& _rxInterceptor ) throw (RuntimeException) + { + FORWARD_TO_PEER_1( XDispatchProviderInterception, releaseDispatchProviderInterceptor, _rxInterceptor ); + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarControl::setDesignMode( sal_Bool _bOn ) throw( RuntimeException ) + { + UnoControl::setDesignMode( _bOn ); + FORWARD_TO_PEER_1( XVclWindowPeer, setDesignMode, _bOn ); + } + + //================================================================== + // ONavigationBarPeer + //================================================================== + DBG_NAME( ONavigationBarPeer ) + //------------------------------------------------------------------ + ONavigationBarPeer* ONavigationBarPeer::Create( const Reference< XMultiServiceFactory >& _rxORB, + Window* _pParentWindow, const Reference< XControlModel >& _rxModel ) + { + DBG_TESTSOLARMUTEX(); + + // the peer itself + ONavigationBarPeer* pPeer = new ONavigationBarPeer( _rxORB ); + pPeer->acquire(); // by definition, the returned object is aquired once + + // the VCL control for the peer + Reference< XModel > xContextDocument( getXModel( _rxModel ) ); + NavigationToolBar* pNavBar = new NavigationToolBar( + _pParentWindow, + lcl_getWinBits_nothrow( _rxModel ), + createDocumentCommandImageProvider( _rxORB, xContextDocument ), + createDocumentCommandDescriptionProvider( _rxORB, xContextDocument ) + ); + + // some knittings + pNavBar->setDispatcher( pPeer ); + pNavBar->SetComponentInterface( pPeer ); + + // we want a faster repeating rate for the slots in this + // toolbox + AllSettings aSettings = pNavBar->GetSettings(); + MouseSettings aMouseSettings = aSettings.GetMouseSettings(); + aMouseSettings.SetButtonRepeat( 10 ); + aSettings.SetMouseSettings( aMouseSettings ); + pNavBar->SetSettings( aSettings, sal_True ); + + // outta here + return pPeer; + } + + //------------------------------------------------------------------ + ONavigationBarPeer::ONavigationBarPeer( const Reference< XMultiServiceFactory >& _rxORB ) + :OFormNavigationHelper( _rxORB ) + { + DBG_CTOR( ONavigationBarPeer, NULL ); + } + + //------------------------------------------------------------------ + ONavigationBarPeer::~ONavigationBarPeer() + { + DBG_DTOR( ONavigationBarPeer, NULL ); + } + + //------------------------------------------------------------------ + IMPLEMENT_FORWARD_XINTERFACE2( ONavigationBarPeer, VCLXWindow, OFormNavigationHelper ) + + //------------------------------------------------------------------ + IMPLEMENT_FORWARD_XTYPEPROVIDER2( ONavigationBarPeer, VCLXWindow, OFormNavigationHelper ) + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarPeer::dispose( ) throw( RuntimeException ) + { + VCLXWindow::dispose(); + OFormNavigationHelper::dispose(); + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarPeer::setProperty( const ::rtl::OUString& _rPropertyName, const Any& _rValue ) throw( RuntimeException ) + { + ::vos::OGuard aGuard( Application::GetSolarMutex() ); + + NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); + if ( !pNavBar ) + { + VCLXWindow::setProperty( _rPropertyName, _rValue ); + return; + } + + bool bVoid = !_rValue.hasValue(); + + sal_Bool bBoolValue = sal_False; + sal_Int32 nColor = COL_TRANSPARENT; + + // TODO: more generic mechanisms for this (the grid control implementation, + // when used herein, will do the same stuff for lot of these) + + if ( _rPropertyName.equals( PROPERTY_BACKGROUNDCOLOR ) ) + { + Wallpaper aTest = pNavBar->GetBackground(); + if ( bVoid ) + { + pNavBar->SetBackground( pNavBar->GetSettings().GetStyleSettings().GetFaceColor() ); + pNavBar->SetControlBackground(); + } + else + { + OSL_VERIFY( _rValue >>= nColor ); + Color aColor( nColor ); + pNavBar->SetBackground( aColor ); + pNavBar->SetControlBackground( aColor ); + } + } + else if ( _rPropertyName.equals( PROPERTY_TEXTLINECOLOR ) ) + { + if ( bVoid ) + { + pNavBar->SetTextLineColor(); + } + else + { + OSL_VERIFY( _rValue >>= nColor ); + Color aColor( nColor ); + pNavBar->SetTextLineColor( nColor ); + } + } + else if ( _rPropertyName.equals( PROPERTY_ICONSIZE ) ) + { + sal_Int16 nInt16Value = 0; + OSL_VERIFY( _rValue >>= nInt16Value ); + pNavBar->SetImageSize( nInt16Value ? NavigationToolBar::eLarge : NavigationToolBar::eSmall ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_POSITION ) ) + { + OSL_VERIFY( _rValue >>= bBoolValue ); + pNavBar->ShowFunctionGroup( NavigationToolBar::ePosition, bBoolValue ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_NAVIGATION ) ) + { + OSL_VERIFY( _rValue >>= bBoolValue ); + pNavBar->ShowFunctionGroup( NavigationToolBar::eNavigation, bBoolValue ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_RECORDACTIONS ) ) + { + OSL_VERIFY( _rValue >>= bBoolValue ); + pNavBar->ShowFunctionGroup( NavigationToolBar::eRecordActions, bBoolValue ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_FILTERSORT ) ) + { + OSL_VERIFY( _rValue >>= bBoolValue ); + pNavBar->ShowFunctionGroup( NavigationToolBar::eFilterSort, bBoolValue ); + } + else + { + VCLXWindow::setProperty( _rPropertyName, _rValue ); + } + } + + //------------------------------------------------------------------ + Any SAL_CALL ONavigationBarPeer::getProperty( const ::rtl::OUString& _rPropertyName ) throw( RuntimeException ) + { + ::vos::OGuard aGuard( Application::GetSolarMutex() ); + + Any aReturn; + NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); + + if ( _rPropertyName.equals( PROPERTY_BACKGROUNDCOLOR ) ) + { + aReturn <<= (sal_Int32)pNavBar->GetControlBackground().GetColor(); + } + else if ( _rPropertyName.equals( PROPERTY_TEXTLINECOLOR ) ) + { + aReturn <<= (sal_Int32)pNavBar->GetTextLineColor().GetColor(); + } + else if ( _rPropertyName.equals( PROPERTY_ICONSIZE ) ) + { + sal_Int16 nIconType = ( NavigationToolBar::eLarge == pNavBar->GetImageSize() ) + ? 1 : 0; + aReturn <<= nIconType; + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_POSITION ) ) + { + aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::ePosition ) ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_NAVIGATION ) ) + { + aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eNavigation ) ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_RECORDACTIONS ) ) + { + aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eRecordActions ) ); + } + else if ( _rPropertyName.equals( PROPERTY_SHOW_FILTERSORT ) ) + { + aReturn <<= (sal_Bool)( pNavBar->IsFunctionGroupVisible( NavigationToolBar::eFilterSort ) ); + } + else + aReturn = VCLXWindow::getProperty( _rPropertyName ); + + return aReturn; + } + + //------------------------------------------------------------------ + void ONavigationBarPeer::interceptorsChanged( ) + { + if ( isDesignMode() ) + // not interested in if we're in design mode + return; + + OFormNavigationHelper::interceptorsChanged(); + } + + //------------------------------------------------------------------ + void ONavigationBarPeer::featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ) + { + // enable this button on the toolbox + NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); + if ( pNavBar ) + { + pNavBar->enableFeature( _nFeatureId, _bEnabled ); + + // is it a feature with additional state information? + if ( _nFeatureId == FormFeature::ToggleApplyFilter ) + { // additional boolean state + pNavBar->checkFeature( _nFeatureId, getBooleanState( _nFeatureId ) ); + } + else if ( _nFeatureId == FormFeature::TotalRecords ) + { + pNavBar->setFeatureText( _nFeatureId, getStringState( _nFeatureId ) ); + } + else if ( _nFeatureId == FormFeature::MoveAbsolute ) + { + pNavBar->setFeatureText( _nFeatureId, String::CreateFromInt32( getIntegerState( _nFeatureId ) ) ); + } + } + + // base class + OFormNavigationHelper::featureStateChanged( _nFeatureId, _bEnabled ); + } + + //------------------------------------------------------------------ + void ONavigationBarPeer::allFeatureStatesChanged( ) + { + // force the control to update it's states + NavigationToolBar* pNavBar = static_cast< NavigationToolBar* >( GetWindow() ); + if ( pNavBar ) + pNavBar->setDispatcher( this ); + + // base class + OFormNavigationHelper::allFeatureStatesChanged( ); + } + + //------------------------------------------------------------------ + bool ONavigationBarPeer::isEnabled( sal_Int16 _nFeatureId ) const + { + if ( const_cast< ONavigationBarPeer* >( this )->isDesignMode() ) + return false; + + return OFormNavigationHelper::isEnabled( _nFeatureId ); + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarPeer::setDesignMode( sal_Bool _bOn ) throw( RuntimeException ) + { + VCLXWindow::setDesignMode( _bOn ); + + if ( _bOn ) + disconnectDispatchers(); + else + connectDispatchers(); + // this will connect if not already connected and just update else + } + + //------------------------------------------------------------------ + void SAL_CALL ONavigationBarPeer::disposing( const EventObject& _rSource ) throw (RuntimeException) + { + VCLXWindow::disposing( _rSource ); + OFormNavigationHelper::disposing( _rSource ); + } + + //------------------------------------------------------------------ + void ONavigationBarPeer::getSupportedFeatures( ::std::vector< sal_Int16 >& _rFeatureIds ) + { + _rFeatureIds.push_back( FormFeature::MoveAbsolute ); + _rFeatureIds.push_back( FormFeature::TotalRecords ); + _rFeatureIds.push_back( FormFeature::MoveToFirst ); + _rFeatureIds.push_back( FormFeature::MoveToPrevious ); + _rFeatureIds.push_back( FormFeature::MoveToNext ); + _rFeatureIds.push_back( FormFeature::MoveToLast ); + _rFeatureIds.push_back( FormFeature::SaveRecordChanges ); + _rFeatureIds.push_back( FormFeature::UndoRecordChanges ); + _rFeatureIds.push_back( FormFeature::MoveToInsertRow ); + _rFeatureIds.push_back( FormFeature::DeleteRecord ); + _rFeatureIds.push_back( FormFeature::ReloadForm ); + _rFeatureIds.push_back( FormFeature::RefreshCurrentControl ); + _rFeatureIds.push_back( FormFeature::SortAscending ); + _rFeatureIds.push_back( FormFeature::SortDescending ); + _rFeatureIds.push_back( FormFeature::InteractiveSort ); + _rFeatureIds.push_back( FormFeature::AutoFilter ); + _rFeatureIds.push_back( FormFeature::InteractiveFilter ); + _rFeatureIds.push_back( FormFeature::ToggleApplyFilter ); + _rFeatureIds.push_back( FormFeature::RemoveFilterAndSort ); + } + +//......................................................................... +} // namespace frm +//......................................................................... diff --git a/forms/source/solar/component/navbarcontrol.hxx b/forms/source/solar/component/navbarcontrol.hxx new file mode 100644 index 000000000000..877aa55aaba2 --- /dev/null +++ b/forms/source/solar/component/navbarcontrol.hxx @@ -0,0 +1,158 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef FORMS_NAVBARCONTROL_HXX +#define FORMS_NAVBARCONTROL_HXX + +#include "formnavigation.hxx" + +/** === begin UNO includes === **/ +#include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> +/** === end UNO includes === **/ + +#include <toolkit/controls/unocontrol.hxx> +#include <toolkit/awt/vclxwindow.hxx> +#include <comphelper/uno3.hxx> +#include <cppuhelper/implbase1.hxx> +#include <tools/wintypes.hxx> + +//......................................................................... +namespace frm +{ +//......................................................................... + + //================================================================== + // ONavigationBarControl + //================================================================== + typedef ::cppu::ImplHelper1 < ::com::sun::star::frame::XDispatchProviderInterception + > ONavigationBarControl_Base; + + class ONavigationBarControl + :public UnoControl + ,public ONavigationBarControl_Base + { + public: + ONavigationBarControl( + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB + ); + + protected: + ~ONavigationBarControl(); + + public: + // XServiceInfo - static version + static ::rtl::OUString SAL_CALL getImplementationName_Static(); + static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(); + static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory ); + + protected: + // UNO + DECLARE_UNO3_AGG_DEFAULTS( ONavigationBarControl, UnoControl ); + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& _rType ) throw ( ::com::sun::star::uno::RuntimeException ); + + // XControl + virtual void SAL_CALL createPeer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& _rParent ) throw( ::com::sun::star::uno::RuntimeException ); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + DECLARE_XTYPEPROVIDER() + + // XVclWindowPeer + virtual void SAL_CALL setDesignMode( sal_Bool _bOn ) throw( ::com::sun::star::uno::RuntimeException ); + + // XDispatchProviderInterception + virtual void SAL_CALL registerDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL releaseDispatchProviderInterceptor( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& Interceptor ) throw (::com::sun::star::uno::RuntimeException); + }; + + //================================================================== + // ONavigationBarPeer + //================================================================== + class ONavigationBarPeer + :public VCLXWindow + ,public OFormNavigationHelper + { + public: + /** factory method + @return + a new ONavigationBarPeer instance, which has been aquired once! + */ + static ONavigationBarPeer* Create( + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, + Window* _pParentWindow, + const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel + ); + + protected: + ONavigationBarPeer( + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB + ); + ~ONavigationBarPeer(); + + public: + // XInterface + DECLARE_XINTERFACE( ) + + // XVclWindowPeer + virtual void SAL_CALL setDesignMode( sal_Bool _bOn ) throw( ::com::sun::star::uno::RuntimeException ); + + // XWindow2 + using VCLXWindow::isEnabled; + + protected: + // XTypeProvider + DECLARE_XTYPEPROVIDER( ) + + // XComponent + void SAL_CALL dispose( ) throw( ::com::sun::star::uno::RuntimeException ); + + // XVclWindowPeer + void SAL_CALL setProperty( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rValue ) throw( ::com::sun::star::uno::RuntimeException ); + ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& _rPropertyName ) throw(::com::sun::star::uno::RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); + + // OFormNavigationHelper overriables + virtual void interceptorsChanged( ); + virtual void featureStateChanged( sal_Int16 _nFeatureId, sal_Bool _bEnabled ); + virtual void allFeatureStatesChanged( ); + virtual void getSupportedFeatures( ::std::vector< sal_Int16 >& /* [out] */ _rFeatureIds ); + + // IFeatureDispatcher overriables + virtual bool isEnabled( sal_Int16 _nFeatureId ) const; + }; + +//......................................................................... +} // namespace frm +//......................................................................... + +#endif // FORMS_NAVBARCONTROL_HXX |