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