|  | /************************************************************** | 
|  | * | 
|  | * 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 SD_FRAMEWORK_READ_ONLY_MODE_OBSERVER_HXX | 
|  | #define SD_FRAMEWORK_READ_ONLY_MODE_OBSERVER_HXX | 
|  |  | 
|  | #include "MutexOwner.hxx" | 
|  |  | 
|  | #include <com/sun/star/beans/XPropertySet.hpp> | 
|  | #include <com/sun/star/frame/XController.hpp> | 
|  | #include <com/sun/star/frame/XStatusListener.hpp> | 
|  | #include <com/sun/star/frame/XDispatch.hpp> | 
|  | #include <com/sun/star/lang/XEventListener.hpp> | 
|  | #include <com/sun/star/util/XModifyListener.hpp> | 
|  | #include <com/sun/star/drawing/framework/XConfigurationController.hpp> | 
|  | #include <com/sun/star/drawing/framework/XConfigurationChangeListener.hpp> | 
|  | #include <osl/mutex.hxx> | 
|  | #include <cppuhelper/compbase2.hxx> | 
|  | #include <tools/link.hxx> | 
|  | #include <boost/function.hpp> | 
|  | #include <boost/scoped_ptr.hpp> | 
|  | #include <boost/shared_ptr.hpp> | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | typedef ::cppu::WeakComponentImplHelper2 < | 
|  | ::com::sun::star::drawing::framework::XConfigurationChangeListener, | 
|  | ::com::sun::star::frame::XStatusListener | 
|  | > ReadOnlyModeObserverInterfaceBase; | 
|  |  | 
|  | } // end of anonymous namespace. | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | namespace sd { namespace framework { | 
|  |  | 
|  | /** Wait for changes of the read-only mode.  On switching between read-only | 
|  | mode and read-write the registered listeners are called. | 
|  |  | 
|  | This class handles the case that the given controller is not yet | 
|  | connected to a frame and that the dispatcher is not yet set up.  It | 
|  | waits for this to happen and then registers at the .uno:EditDoc command | 
|  | and waits for state changes. | 
|  | */ | 
|  | class ReadOnlyModeObserver | 
|  | : private sd::MutexOwner, | 
|  | public ReadOnlyModeObserverInterfaceBase | 
|  | { | 
|  | public: | 
|  | /** Create a new read-only mode observer for the given controller. | 
|  | */ | 
|  | ReadOnlyModeObserver ( | 
|  | const ::com::sun::star::uno::Reference<com::sun::star::frame::XController>& rxController); | 
|  | virtual ~ReadOnlyModeObserver (void); | 
|  |  | 
|  | virtual void SAL_CALL disposing (void); | 
|  |  | 
|  |  | 
|  | /** Add a status listener that is called when the state of the | 
|  | .uno:EditDoc command changes.  Note that the listener has to take | 
|  | into account both the IsEnabled and the State fields of the | 
|  | FeatureStateEvent.  Only when IsEnabled is true then the State field | 
|  | is valid. | 
|  | */ | 
|  | void AddStatusListener ( | 
|  | const ::com::sun::star::uno::Reference< | 
|  | com::sun::star::frame::XStatusListener>& rxListener); | 
|  |  | 
|  | // XEventListener | 
|  |  | 
|  | virtual void SAL_CALL disposing ( | 
|  | const com::sun::star::lang::EventObject& rEvent) | 
|  | throw (com::sun::star::uno::RuntimeException); | 
|  |  | 
|  |  | 
|  | // frame::XStatusListener | 
|  |  | 
|  | /** Called by slot state change broadcasters. | 
|  | @throws DisposedException | 
|  | */ | 
|  | virtual void SAL_CALL | 
|  | statusChanged ( | 
|  | const ::com::sun::star::frame::FeatureStateEvent& rState) | 
|  | throw (::com::sun::star::uno::RuntimeException); | 
|  |  | 
|  | // XConfigurationChangeListener | 
|  |  | 
|  | virtual void SAL_CALL notifyConfigurationChange ( | 
|  | const ::com::sun::star::drawing::framework::ConfigurationChangeEvent& rEvent) | 
|  | throw (::com::sun::star::uno::RuntimeException); | 
|  |  | 
|  | private: | 
|  | ::com::sun::star::util::URL maSlotNameURL; | 
|  | /** The XController is stored to enable repeated calls to | 
|  | ConnectToDispatch() (get access to the XDispatchProvider. | 
|  | */ | 
|  | ::com::sun::star::uno::Reference<com::sun::star::frame::XController> | 
|  | mxController; | 
|  | ::com::sun::star::uno::Reference<com::sun::star::drawing::framework::XConfigurationController> | 
|  | mxConfigurationController; | 
|  | ::com::sun::star::uno::Reference<com::sun::star::frame::XDispatch> | 
|  | mxDispatch; | 
|  | class ModifyBroadcaster; | 
|  | ::boost::scoped_ptr<ModifyBroadcaster> mpBroadcaster; | 
|  |  | 
|  | /** Listen for the .uno:EditMode command.  Returns <TRUE/> when the connection | 
|  | has been established. | 
|  | */ | 
|  | bool ConnectToDispatch (void); | 
|  | }; | 
|  |  | 
|  | } } // end of namespace sd::framework | 
|  |  | 
|  | #endif |