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 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_SD_SOURCE_UI_INC_UNOSRCH_HXX 21 #define INCLUDED_SD_SOURCE_UI_INC_UNOSRCH_HXX 22 23 #include <memory> 24 #include <com/sun/star/util/XReplaceable.hpp> 25 #include <com/sun/star/util/XReplaceDescriptor.hpp> 26 #include <com/sun/star/lang/XUnoTunnel.hpp> 27 28 #include <comphelper/servicehelper.hxx> 29 #include <cppuhelper/implbase.hxx> 30 #include <editeng/editdata.hxx> 31 32 namespace com { namespace sun { namespace star { namespace drawing { class XDrawPage; } } } } 33 namespace com { namespace sun { namespace star { namespace drawing { class XShape; } } } } 34 namespace com { namespace sun { namespace star { namespace text { class XTextRange; } } } } 35 namespace com { namespace sun { namespace star { namespace util { class XSearchDescriptor; } } } } 36 37 class SvxItemPropertySet; 38 class SdUnoSearchReplaceDescriptor; 39 40 /** this class implements a search or replace operation on a given page or a given sdrobj */ 41 class SdUnoSearchReplaceShape : public css::util::XReplaceable 42 { 43 protected: 44 css::drawing::XDrawPage* const mpPage; 45 46 css::uno::Reference< css::text::XTextRange > Search( const css::uno::Reference< css::text::XTextRange >& xText, SdUnoSearchReplaceDescriptor* pDescr ); 47 bool Search( const OUString& rText, sal_Int32& nStartPos, sal_Int32& nEndPos, SdUnoSearchReplaceDescriptor* pDescr ) throw(); 48 static ESelection GetSelection( const css::uno::Reference< css::text::XTextRange >& xTextRange ) throw(); 49 static css::uno::Reference< css::drawing::XShape > GetShape( const css::uno::Reference< css::text::XTextRange >& xTextRange ) throw(); 50 css::uno::Reference< css::drawing::XShape > GetNextShape( const css::uno::Reference< css::container::XIndexAccess >& xShapes, const css::uno::Reference< css::drawing::XShape >& xCurrentShape ) throw(); 51 css::uno::Reference< css::drawing::XShape > GetCurrentShape() const throw(); 52 53 public: 54 // danger, this c'tor is only usable if the given shape or page is derived 55 // from this class!!! 56 SdUnoSearchReplaceShape( css::drawing::XDrawPage* xPage ) throw(); 57 virtual ~SdUnoSearchReplaceShape() throw(); 58 59 // XReplaceable 60 virtual css::uno::Reference< css::util::XReplaceDescriptor > SAL_CALL createReplaceDescriptor( ) override; 61 virtual sal_Int32 SAL_CALL replaceAll( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override; 62 63 // XSearchable 64 virtual css::uno::Reference< css::util::XSearchDescriptor > SAL_CALL createSearchDescriptor( ) override; 65 virtual css::uno::Reference< css::container::XIndexAccess > SAL_CALL findAll( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override; 66 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL findFirst( const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override; 67 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL findNext( const css::uno::Reference< css::uno::XInterface >& xStartAt, const css::uno::Reference< css::util::XSearchDescriptor >& xDesc ) override; 68 }; 69 70 /* ================================================================= */ 71 72 /** this class holds the parameters and status of a search or replace operation performed 73 by class SdUnoSearchReplaceShape */ 74 75 class SdUnoSearchReplaceDescriptor : public ::cppu::WeakImplHelper< css::lang::XUnoTunnel, css::util::XReplaceDescriptor > // public css::util::XSearchDescriptor, css::beans::XPropertySet 76 { 77 protected: 78 std::unique_ptr<SvxItemPropertySet> mpPropSet; 79 80 bool mbBackwards; 81 bool mbCaseSensitive; 82 bool mbWords; 83 84 OUString maSearchStr; 85 OUString maReplaceStr; 86 87 public: 88 /// @throws css::uno::RuntimeException 89 SdUnoSearchReplaceDescriptor(); 90 virtual ~SdUnoSearchReplaceDescriptor() throw() override; 91 IsCaseSensitive() const92 bool IsCaseSensitive() const { return mbCaseSensitive; } IsWords() const93 bool IsWords() const { return mbWords; } 94 95 UNO3_GETIMPLEMENTATION_DECL( SdUnoSearchReplaceDescriptor ) 96 97 // XSearchDescriptor 98 virtual OUString SAL_CALL getSearchString( ) override; 99 virtual void SAL_CALL setSearchString( const OUString& aString ) override; 100 101 // XReplaceDescriptor 102 virtual OUString SAL_CALL getReplaceString( ) override; 103 virtual void SAL_CALL setReplaceString( const OUString& aReplaceString ) override; 104 105 // XPropertySet 106 virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override; 107 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override; 108 virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override; 109 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; 110 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; 111 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; 112 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; 113 }; 114 115 /* ================================================================= */ 116 117 /** this class holds a sequence that is a result from a find all and 118 lets people access it through the XIndexAccess Interface. */ 119 class SdUnoFindAllAccess final : public ::cppu::WeakImplHelper< css::container::XIndexAccess > // public css::container::XElementAccess 120 { 121 css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > maSequence; 122 123 public: 124 SdUnoFindAllAccess( css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > const & rSequence ) throw(); 125 virtual ~SdUnoFindAllAccess() throw() override; 126 127 // XIndexAccess 128 virtual sal_Int32 SAL_CALL getCount() override ; 129 virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override; 130 131 // XElementAccess 132 virtual css::uno::Type SAL_CALL getElementType() override; 133 virtual sal_Bool SAL_CALL hasElements() override; 134 }; 135 136 #endif // INCLUDED_SD_SOURCE_UI_INC_UNOSRCH_HXX 137 138 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 139