xref: /trunk/main/sd/source/ui/inc/MasterPageObserver.hxx (revision 6c3f46008062a6f976c36b489e4ef55c817e828c)
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