/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 . */ #include #include #include //------------------------------------------------------------------------ TYPEINIT1( SvxEditSourceHint, TextHint ); SvxEditSourceHint::SvxEditSourceHint( sal_uLong _nId ) : TextHint( _nId ), mnStart( 0 ), mnEnd( 0 ) { } SvxEditSourceHint::SvxEditSourceHint( sal_uLong _nId, sal_uLong nValue, sal_uLong nStart, sal_uLong nEnd ) : TextHint( _nId, nValue ), mnStart( nStart), mnEnd( nEnd ) { } sal_uLong SvxEditSourceHint::GetValue() const { return TextHint::GetValue(); } sal_uLong SvxEditSourceHint::GetStartValue() const { return mnStart; } sal_uLong SvxEditSourceHint::GetEndValue() const { return mnEnd; } //------------------------------------------------------------------------ ::std::auto_ptr SvxEditSourceHelper::EENotification2Hint( EENotify* aNotify ) { if( aNotify ) { switch( aNotify->eNotificationType ) { case EE_NOTIFY_TEXTMODIFIED: return ::std::auto_ptr( new TextHint( TEXT_HINT_MODIFIED, aNotify->nParagraph ) ); case EE_NOTIFY_PARAGRAPHINSERTED: return ::std::auto_ptr( new TextHint( TEXT_HINT_PARAINSERTED, aNotify->nParagraph ) ); case EE_NOTIFY_PARAGRAPHREMOVED: return ::std::auto_ptr( new TextHint( TEXT_HINT_PARAREMOVED, aNotify->nParagraph ) ); case EE_NOTIFY_PARAGRAPHSMOVED: return ::std::auto_ptr( new SvxEditSourceHint( EDITSOURCE_HINT_PARASMOVED, aNotify->nParagraph, aNotify->nParam1, aNotify->nParam2 ) ); case EE_NOTIFY_TEXTHEIGHTCHANGED: return ::std::auto_ptr( new TextHint( TEXT_HINT_TEXTHEIGHTCHANGED, aNotify->nParagraph ) ); case EE_NOTIFY_TEXTVIEWSCROLLED: return ::std::auto_ptr( new TextHint( TEXT_HINT_VIEWSCROLLED ) ); case EE_NOTIFY_TEXTVIEWSELECTIONCHANGED: return ::std::auto_ptr( new SvxEditSourceHint( EDITSOURCE_HINT_SELECTIONCHANGED ) ); case EE_NOTIFY_BLOCKNOTIFICATION_START: return ::std::auto_ptr( new TextHint( TEXT_HINT_BLOCKNOTIFICATION_START, 0 ) ); case EE_NOTIFY_BLOCKNOTIFICATION_END: return ::std::auto_ptr( new TextHint( TEXT_HINT_BLOCKNOTIFICATION_END, 0 ) ); case EE_NOTIFY_INPUT_START: return ::std::auto_ptr( new TextHint( TEXT_HINT_INPUT_START, 0 ) ); case EE_NOTIFY_INPUT_END: return ::std::auto_ptr( new TextHint( TEXT_HINT_INPUT_END, 0 ) ); default: OSL_FAIL( "SvxEditSourceHelper::EENotification2Hint unknown notification" ); break; } } return ::std::auto_ptr( new SfxHint() ); } sal_Bool SvxEditSourceHelper::GetAttributeRun( sal_uInt16& nStartIndex, sal_uInt16& nEndIndex, const EditEngine& rEE, sal_uInt16 nPara, sal_uInt16 nIndex ) { std::vector aCharAttribs; rEE.GetCharAttribs( nPara, aCharAttribs ); // find closest index in front of nIndex sal_uInt16 nCurrIndex; sal_Int32 nClosestStartIndex = 0; for(std::vector::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i) { nCurrIndex = i->nStart; if( nCurrIndex > nIndex ) break; // aCharAttribs array is sorted in increasing order for nStart values else if( nCurrIndex > nClosestStartIndex ) { nClosestStartIndex = nCurrIndex; } } // find closest index behind of nIndex sal_Int32 nClosestEndIndex = rEE.GetTextLen(nPara); for(std::vector::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i) { nCurrIndex = i->nEnd; if( nCurrIndex > nIndex && nCurrIndex < nClosestEndIndex ) nClosestEndIndex = nCurrIndex; } nStartIndex = static_cast( nClosestStartIndex ); nEndIndex = static_cast( nClosestEndIndex ); return sal_True; } Point SvxEditSourceHelper::EEToUserSpace( const Point& rPoint, const Size& rEESize, bool bIsVertical ) { return bIsVertical ? Point( -rPoint.Y() + rEESize.Height(), rPoint.X() ) : rPoint; } Point SvxEditSourceHelper::UserSpaceToEE( const Point& rPoint, const Size& rEESize, bool bIsVertical ) { return bIsVertical ? Point( rPoint.Y(), -rPoint.X() + rEESize.Height() ) : rPoint; } Rectangle SvxEditSourceHelper::EEToUserSpace( const Rectangle& rRect, const Size& rEESize, bool bIsVertical ) { return bIsVertical ? Rectangle( EEToUserSpace(rRect.BottomLeft(), rEESize, bIsVertical), EEToUserSpace(rRect.TopRight(), rEESize, bIsVertical) ) : rRect; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */