blob: 9a96ba7c0e82fb4dfdadd5aa589e6c4b4e18bebe [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SMARTTAGMGR_HXX
#define _SMARTTAGMGR_HXX
#include <cppuhelper/implbase2.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/util/XModifyListener.hpp>
#include <com/sun/star/util/XChangesListener.hpp>
#include "svx/svxdllapi.h"
#include <vector>
#include <map>
#include <set>
namespace com { namespace sun { namespace star { namespace uno {
class XComponentContext;
} } } }
namespace com { namespace sun { namespace star { namespace smarttags {
class XSmartTagRecognizer;
class XSmartTagAction;
} } } }
namespace com { namespace sun { namespace star { namespace text {
class XTextMarkup;
class XTextRange;
} } } }
namespace com { namespace sun { namespace star { namespace i18n {
class XBreakIterator;
} } } }
namespace com { namespace sun { namespace star { namespace lang {
struct Locale;
struct EventObject;
struct ChangesEvent;
class XMultiServiceFactory;
} } } }
namespace com { namespace sun { namespace star { namespace beans {
class XPropertySet;
} } } }
namespace com { namespace sun { namespace star { namespace frame {
class XController;
} } } }
/** A reference to a smart tag action
An action service can support various actions. Therefore an ActionReference
consists of a reference to the service and and index.
*/
struct ActionReference
{
com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > mxSmartTagAction;
sal_Int32 mnSmartTagIndex;
ActionReference( com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > xSmartTagAction, sal_Int32 nSmartTagIndex )
: mxSmartTagAction( xSmartTagAction), mnSmartTagIndex( nSmartTagIndex ) {}
};
/** The smart tag manager maintains all installed action and recognizer services
This class organizes the available smarttag libraries and provides access functions
to these libraries. The smart tag manager is a singleton.
*/
class SVX_DLLPUBLIC SmartTagMgr : public cppu::WeakImplHelper2< ::com::sun::star::util::XModifyListener,
::com::sun::star::util::XChangesListener >
{
private:
const rtl::OUString maApplicationName;
std::vector< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagRecognizer > > maRecognizerList;
std::vector< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > maActionList;
std::set< rtl::OUString > maDisabledSmartTagTypes;
std::multimap < rtl::OUString, ActionReference > maSmartTagMap;
mutable com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator > mxBreakIter;
com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > mxMSF;
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext> mxContext;
com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > mxConfigurationSettings;
bool mbLabelTextWithSmartTags;
/** Checks for installed smart tag recognizers/actions and stores them in
maRecognizerList and maActionList.
*/
void LoadLibraries();
/** Prepare configuration access.
*/
void PrepareConfiguration( const rtl::OUString& rConfigurationGroupName );
/** Reads the configuration data.
*/
void ReadConfiguration( bool bExcludedTypes, bool bRecognize );
/** Registeres the smart tag manager as listener at the package manager.
*/
void RegisterListener();
/** Sets up a map that maps smart tag type names to actions references.
*/
void AssociateActionsWithRecognizers();
void CreateBreakIterator() const;
public:
SmartTagMgr( const rtl::OUString& rApplicationName );
virtual ~SmartTagMgr();
/** Triggeres configuration reading, library loading and listener registration
NOTE: MUST BE CALLED AFTER CONSTRUCTION!
*/
void Init( const rtl::OUString& rConfigurationGroupName );
/** Dispatches the recognize call to all installed smart tag recognizers
@param rText
The string to be scanned by the recognizers.
@param xMarkup
The object allows the recognizers to store any found smart tags.
@param xController
The current controller of the document.
@param rLocale
The locale of rText.
@param nStart
The start offset of the text to be scanned in rText.
@param nLen
The length of the text to be scanned.
*/
void RecognizeString( const rtl::OUString& rText,
const com::sun::star::uno::Reference< com::sun::star::text::XTextMarkup > xMarkup,
const com::sun::star::uno::Reference< com::sun::star::frame::XController > xController,
const com::sun::star::lang::Locale& rLocale,
sal_uInt32 nStart, sal_uInt32 nLen ) const;
void RecognizeTextRange(const com::sun::star::uno::Reference< com::sun::star::text::XTextRange> xRange,
const com::sun::star::uno::Reference< com::sun::star::text::XTextMarkup > xMarkup,
const com::sun::star::uno::Reference< com::sun::star::frame::XController > xController) const;
/** Returns all action references associated with a given list of smart tag types
@param rSmartTagTypes
The list of types
@param rActionComponentsSequence
Output parameter
@param rActionIndicesSequence
Output parameter
*/
void GetActionSequences( com::sun::star::uno::Sequence < rtl::OUString >& rSmartTagTypes,
com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > >& rActionComponentsSequence,
com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< sal_Int32 > >& rActionIndicesSequence ) const;
/** Returns the caption for a smart tag type.
@param rSmartTagType
The given smart tag type.
@param rLocale
The locale.
*/
rtl::OUString GetSmartTagCaption( const rtl::OUString& rSmartTagType, const com::sun::star::lang::Locale& rLocale ) const;
/** Returns true if the given smart tag type is enabled.
*/
bool IsSmartTagTypeEnabled( const rtl::OUString& rSmartTagType ) const;
/** Enable or disable smart tags.
*/
bool IsLabelTextWithSmartTags() const { return mbLabelTextWithSmartTags; }
/** Returns the number of registered recognizers.
*/
sal_uInt32 NumberOfRecognizers() const { return maRecognizerList.size(); }
/** Returns a recognizer.
*/
com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagRecognizer >
GetRecognizer( sal_uInt32 i ) const { return maRecognizerList[i]; }
/** Is smart tag recognization active?
*/
bool IsSmartTagsEnabled() const { return 0 != NumberOfRecognizers() &&
IsLabelTextWithSmartTags(); }
/** Writes configuration settings.
*/
void WriteConfiguration( const bool* bLabelTextWithSmartTags,
const std::vector< rtl::OUString >* pDisabledTypes ) const;
/** Returns the name of the application this instance has been created by.
*/
const rtl::OUString GetApplicationName() const { return maApplicationName; }
// ::com::sun::star::lang::XEventListener
virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
// ::com::sun::star::util::XModifyListener
virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException);
// ::com::sun::star::util::XChangesListener
virtual void SAL_CALL changesOccurred( const ::com::sun::star::util::ChangesEvent& Event ) throw(::com::sun::star::uno::RuntimeException);
};
#endif