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 
MasterPageObserverEvent(EventType eType,SdDrawDocument & rDocument,const String & rMasterPageName)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