/************************************************************************* * * $RCSfile: specialdispatchers.cxx,v $ * * $Revision: 1.2 $ * * last change: $Author: rt $ $Date: 2004-05-07 16:15:24 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef FORMS_SOURCE_RICHTEXT_SPECIALDISPATCHERS_HXX #include "specialdispatchers.hxx" #endif #ifndef _MyEDITENG_HXX #include #endif #ifndef _MyEDITVIEW_HXX #include #endif #ifndef _SVX_SVXIDS_HRC #include #endif #define ITEMID_SCRIPTSPACE SID_ATTR_PARA_SCRIPTSPACE #ifndef _SVX_SRIPTSPACEITEM_HXX #include #endif //........................................................................ namespace frm { //........................................................................ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::util; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::beans; //==================================================================== //= OSelectAllDispatcher //==================================================================== //-------------------------------------------------------------------- OSelectAllDispatcher::OSelectAllDispatcher( EditView& _rView, const URL& _rURL ) :ORichTextFeatureDispatcher( _rView, _rURL ) { } //-------------------------------------------------------------------- OSelectAllDispatcher::~OSelectAllDispatcher( ) { if ( !isDisposed() ) { acquire(); dispose(); } } //-------------------------------------------------------------------- void SAL_CALL OSelectAllDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArguments ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OSelectAllDispatcher::dispatch: invalid URL!" ); checkDisposed(); EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; OSL_ENSURE( pEngine, "OSelectAllDispatcher::dispatch: no edit engine - but not yet disposed?" ); if ( !pEngine ) return; USHORT nParagraphs = pEngine->GetParagraphCount(); if ( nParagraphs ) { USHORT nLastParaNumber = nParagraphs - 1; xub_StrLen nParaLen = pEngine->GetTextLen( nLastParaNumber ); getEditView()->SetSelection( ESelection( 0, 0, nLastParaNumber, nParaLen ) ); } } //-------------------------------------------------------------------- FeatureStateEvent OSelectAllDispatcher::buildStatusEvent() const { FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); aEvent.IsEnabled = sal_True; return aEvent; } //==================================================================== //= OParagraphDirectionDispatcher //==================================================================== //-------------------------------------------------------------------- OParagraphDirectionDispatcher::OParagraphDirectionDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, IMultiAttributeDispatcher* _pMasterDispatcher ) :OAttributeDispatcher( _rView, _nAttributeId, _rURL, _pMasterDispatcher ) { } //-------------------------------------------------------------------- FeatureStateEvent OParagraphDirectionDispatcher::buildStatusEvent() const { FeatureStateEvent aEvent( OAttributeDispatcher::buildStatusEvent() ); EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; OSL_ENSURE( pEngine, "OParagraphDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); if ( pEngine && pEngine->IsVertical() ) aEvent.IsEnabled = sal_False; return aEvent; } //==================================================================== //= OTextDirectionDispatcher //==================================================================== //-------------------------------------------------------------------- OTextDirectionDispatcher::OTextDirectionDispatcher( EditView& _rView, const URL& _rURL ) :ORichTextFeatureDispatcher( _rView, _rURL ) { } //-------------------------------------------------------------------- void SAL_CALL OTextDirectionDispatcher::dispatch( const URL& _rURL, const Sequence< PropertyValue >& _rArguments ) throw (RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); OSL_ENSURE( _rURL.Complete == getFeatureURL().Complete, "OTextDirectionDispatcher::dispatch: invalid URL!" ); checkDisposed(); EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; OSL_ENSURE( pEngine, "OTextDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); if ( !pEngine ) return; pEngine->SetVertical( !pEngine->IsVertical() ); } //-------------------------------------------------------------------- FeatureStateEvent OTextDirectionDispatcher::buildStatusEvent() const { FeatureStateEvent aEvent( ORichTextFeatureDispatcher::buildStatusEvent() ); EditEngine* pEngine = getEditView() ? getEditView()->GetEditEngine() : NULL; OSL_ENSURE( pEngine, "OTextDirectionDispatcher::dispatch: no edit engine - but not yet disposed?" ); aEvent.IsEnabled = sal_True; aEvent.State <<= (sal_Bool)( pEngine && pEngine->IsVertical() ); return aEvent; } //==================================================================== //= OAsianFontLayoutDispatcher //==================================================================== //-------------------------------------------------------------------- OAsianFontLayoutDispatcher::OAsianFontLayoutDispatcher( EditView& _rView, AttributeId _nAttributeId, const URL& _rURL, IMultiAttributeDispatcher* _pMasterDispatcher ) :OParametrizedAttributeDispatcher( _rView, _nAttributeId, _rURL, _pMasterDispatcher ) { } //-------------------------------------------------------------------- const SfxPoolItem* OAsianFontLayoutDispatcher::convertDispatchArgsToItem( const Sequence< PropertyValue >& _rArguments ) { // look for the "Enable" parameter const PropertyValue* pLookup = _rArguments.getConstArray(); const PropertyValue* pLookupEnd = _rArguments.getConstArray() + _rArguments.getLength(); while ( pLookup != pLookupEnd ) { if ( pLookup->Name.equalsAscii( "Enable" ) ) break; ++pLookup; } if ( pLookup != pLookupEnd ) { sal_Bool bEnable = sal_True; OSL_VERIFY( pLookup->Value >>= bEnable ); if ( m_nAttributeId == SID_ATTR_PARA_SCRIPTSPACE ) return new SvxScriptSpaceItem( bEnable, (WhichId)m_nAttributeId ); return new SfxBoolItem( (WhichId)m_nAttributeId, bEnable ); } OSL_ENSURE( sal_False, "OAsianFontLayoutDispatcher::convertDispatchArgsToItem: did not find the one and only argument!" ); return NULL; } //........................................................................ } // namespace frm //........................................................................