1*c45d927aSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*c45d927aSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*c45d927aSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*c45d927aSAndrew Rist * distributed with this work for additional information 6*c45d927aSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*c45d927aSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*c45d927aSAndrew Rist * "License"); you may not use this file except in compliance 9*c45d927aSAndrew Rist * with the License. You may obtain a copy of the License at 10*c45d927aSAndrew Rist * 11*c45d927aSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*c45d927aSAndrew Rist * 13*c45d927aSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*c45d927aSAndrew Rist * software distributed under the License is distributed on an 15*c45d927aSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*c45d927aSAndrew Rist * KIND, either express or implied. See the License for the 17*c45d927aSAndrew Rist * specific language governing permissions and limitations 18*c45d927aSAndrew Rist * under the License. 19*c45d927aSAndrew Rist * 20*c45d927aSAndrew Rist *************************************************************/ 21*c45d927aSAndrew Rist 22*c45d927aSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef SD_VIEW_MASTER_PAGE_OBSERVER_HXX 25cdf0e10cSrcweir #define SD_VIEW_MASTER_PAGE_OBSERVER_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "tools/SdGlobalResourceContainer.hxx" 28cdf0e10cSrcweir #include <osl/mutex.hxx> 29cdf0e10cSrcweir #include <tools/link.hxx> 30cdf0e10cSrcweir #include <memory> 31cdf0e10cSrcweir #include <set> 32cdf0e10cSrcweir 33cdf0e10cSrcweir class SdDrawDocument; 34cdf0e10cSrcweir class String; 35cdf0e10cSrcweir 36cdf0e10cSrcweir namespace sd { 37cdf0e10cSrcweir 38cdf0e10cSrcweir /** This singleton observes all registered documents for changes in the used 39cdf0e10cSrcweir master pages and in turn informs its listeners about it. One such 40cdf0e10cSrcweir listener is the master page selector control in the tool panel that 41cdf0e10cSrcweir shows the recently used master pages. 42cdf0e10cSrcweir */ 43cdf0e10cSrcweir class MasterPageObserver 44cdf0e10cSrcweir : public SdGlobalResource 45cdf0e10cSrcweir { 46cdf0e10cSrcweir public: 47cdf0e10cSrcweir typedef ::std::set<String> MasterPageNameSet; 48cdf0e10cSrcweir 49cdf0e10cSrcweir /** Return the single instance of this class. 50cdf0e10cSrcweir */ 51cdf0e10cSrcweir static MasterPageObserver& Instance (void); 52cdf0e10cSrcweir 53cdf0e10cSrcweir /** The master page observer will listen to events of this document and 54cdf0e10cSrcweir detect changes of the use of master pages. 55cdf0e10cSrcweir */ 56cdf0e10cSrcweir void RegisterDocument (SdDrawDocument& rDocument); 57cdf0e10cSrcweir 58cdf0e10cSrcweir /** The master page observer will stop to listen to events of this 59cdf0e10cSrcweir document. 60cdf0e10cSrcweir */ 61cdf0e10cSrcweir void UnregisterDocument (SdDrawDocument& rDocument); 62cdf0e10cSrcweir 63cdf0e10cSrcweir /** Add a listener that is informed of master pages that are newly 64cdf0e10cSrcweir assigned to slides or become unassigned. 65cdf0e10cSrcweir @param rEventListener 66cdf0e10cSrcweir The event listener to call for future events. Call 67cdf0e10cSrcweir RemoveEventListener() before the listener is destroyed. 68cdf0e10cSrcweir */ 69cdf0e10cSrcweir void AddEventListener (const Link& rEventListener); 70cdf0e10cSrcweir 71cdf0e10cSrcweir /** Remove the given listener from the list of listeners. 72cdf0e10cSrcweir @param rEventListener 73cdf0e10cSrcweir After this method returns the given listener is not called back 74cdf0e10cSrcweir from this object. Passing a listener that has not 75cdf0e10cSrcweir been registered before is safe and is silently ignored. 76cdf0e10cSrcweir */ 77cdf0e10cSrcweir void RemoveEventListener (const Link& rEventListener); 78cdf0e10cSrcweir 79cdf0e10cSrcweir private: 80cdf0e10cSrcweir static ::osl::Mutex maMutex; 81cdf0e10cSrcweir 82cdf0e10cSrcweir class Implementation; 83cdf0e10cSrcweir ::std::auto_ptr<Implementation> mpImpl; 84cdf0e10cSrcweir 85cdf0e10cSrcweir MasterPageObserver (void); 86cdf0e10cSrcweir virtual ~MasterPageObserver (void); 87cdf0e10cSrcweir 88cdf0e10cSrcweir /// The copy constructor is not implemented. Do not use! 89cdf0e10cSrcweir MasterPageObserver (const MasterPageObserver&); 90cdf0e10cSrcweir 91cdf0e10cSrcweir /// The assignment operator is not implemented. Do not use! 92cdf0e10cSrcweir MasterPageObserver& operator= (const MasterPageObserver&); 93cdf0e10cSrcweir }; 94cdf0e10cSrcweir 95cdf0e10cSrcweir 96cdf0e10cSrcweir 97cdf0e10cSrcweir 98cdf0e10cSrcweir /** Objects of this class are sent to listeners of the MasterPageObserver 99cdf0e10cSrcweir singleton when the list of master pages of one document has changed. 100cdf0e10cSrcweir */ 101cdf0e10cSrcweir class MasterPageObserverEvent 102cdf0e10cSrcweir { 103cdf0e10cSrcweir public: 104cdf0e10cSrcweir enum EventType { 105cdf0e10cSrcweir /// Master page already exists when document is registered. 106cdf0e10cSrcweir ET_MASTER_PAGE_EXISTS, 107cdf0e10cSrcweir /// Master page has been added to a document. 108cdf0e10cSrcweir ET_MASTER_PAGE_ADDED, 109cdf0e10cSrcweir /// Master page has been removed from to a document. 110cdf0e10cSrcweir ET_MASTER_PAGE_REMOVED 111cdf0e10cSrcweir }; 112cdf0e10cSrcweir 113cdf0e10cSrcweir EventType meType; 114cdf0e10cSrcweir SdDrawDocument& mrDocument; 115cdf0e10cSrcweir const String& mrMasterPageName; 116cdf0e10cSrcweir 117cdf0e10cSrcweir MasterPageObserverEvent ( 118cdf0e10cSrcweir EventType eType, 119cdf0e10cSrcweir SdDrawDocument& rDocument, 120cdf0e10cSrcweir const String& rMasterPageName) 121cdf0e10cSrcweir : meType(eType), 122cdf0e10cSrcweir mrDocument(rDocument), 123cdf0e10cSrcweir mrMasterPageName(rMasterPageName) 124cdf0e10cSrcweir {} 125cdf0e10cSrcweir 126cdf0e10cSrcweir }; 127cdf0e10cSrcweir 128cdf0e10cSrcweir } // end of namespace sd 129cdf0e10cSrcweir 130cdf0e10cSrcweir #endif 131