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
10c45d927aSAndrew Rist  *
11c45d927aSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12c45d927aSAndrew Rist  *
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.
19c45d927aSAndrew Rist  *
20c45d927aSAndrew Rist  *************************************************************/
21c45d927aSAndrew Rist 
22c45d927aSAndrew Rist 
23cdf0e10cSrcweir 
247a32b0c8SAndre Fischer #ifndef SD_SIDEBAR_PANELS_RECENTLY_USED_MASTER_PAGES_HXX
257a32b0c8SAndre Fischer #define SD_SIDEBAR_PANELS_RECENTLY_USED_MASTER_PAGES_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "tools/SdGlobalResourceContainer.hxx"
28cdf0e10cSrcweir #include <osl/mutex.hxx>
29cdf0e10cSrcweir #include <tools/link.hxx>
30cdf0e10cSrcweir #include <vcl/image.hxx>
31cdf0e10cSrcweir #include <vector>
32cdf0e10cSrcweir #include <tools/string.hxx>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include "DrawDocShell.hxx"
35cdf0e10cSrcweir #include "MasterPageContainer.hxx"
36cdf0e10cSrcweir #include <com/sun/star/uno/XInterface.hpp>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir class SdPage;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir namespace sd {
41cdf0e10cSrcweir class MasterPageObserverEvent;
42cdf0e10cSrcweir }
43cdf0e10cSrcweir 
44cdf0e10cSrcweir 
457a32b0c8SAndre Fischer namespace sd { namespace sidebar {
46cdf0e10cSrcweir 
47cdf0e10cSrcweir /** This singleton holds a list of the most recently used master pages.
48cdf0e10cSrcweir */
49cdf0e10cSrcweir class RecentlyUsedMasterPages
50cdf0e10cSrcweir     : public SdGlobalResource
51cdf0e10cSrcweir {
52cdf0e10cSrcweir public:
53cdf0e10cSrcweir     /** Return the single instance of this class.
54cdf0e10cSrcweir     */
55cdf0e10cSrcweir     static RecentlyUsedMasterPages& Instance (void);
56cdf0e10cSrcweir 
57cdf0e10cSrcweir     void AddEventListener (const Link& rEventListener);
58cdf0e10cSrcweir     void RemoveEventListener (const Link& rEventListener);
59cdf0e10cSrcweir 
60cdf0e10cSrcweir     int GetMasterPageCount (void) const;
61cdf0e10cSrcweir     MasterPageContainer::Token GetTokenForIndex (sal_uInt32 nIndex) const;
62cdf0e10cSrcweir 
63cdf0e10cSrcweir private:
64cdf0e10cSrcweir     /** The single instance of this class.  It is created on demand when
65cdf0e10cSrcweir         Instance() is called for the first time.
66cdf0e10cSrcweir     */
67cdf0e10cSrcweir     static RecentlyUsedMasterPages* mpInstance;
68cdf0e10cSrcweir 
69cdf0e10cSrcweir     ::std::vector<Link> maListeners;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     class MasterPageList;
72cdf0e10cSrcweir     ::std::auto_ptr<MasterPageList> mpMasterPages;
73cdf0e10cSrcweir     unsigned long int mnMaxListSize;
74cdf0e10cSrcweir     ::boost::shared_ptr<MasterPageContainer> mpContainer;
75cdf0e10cSrcweir 
76cdf0e10cSrcweir     RecentlyUsedMasterPages (void);
77cdf0e10cSrcweir     virtual ~RecentlyUsedMasterPages (void);
78cdf0e10cSrcweir 
79cdf0e10cSrcweir     /** Call this method after a new object has been created.
80cdf0e10cSrcweir     */
81cdf0e10cSrcweir     void LateInit (void);
82cdf0e10cSrcweir 
83cdf0e10cSrcweir     /// The copy constructor is not implemented.  Do not use!
84cdf0e10cSrcweir     RecentlyUsedMasterPages (const RecentlyUsedMasterPages&);
85cdf0e10cSrcweir 
86cdf0e10cSrcweir     /// The assignment operator is not implemented.  Do not use!
87cdf0e10cSrcweir     RecentlyUsedMasterPages& operator= (const RecentlyUsedMasterPages&);
88cdf0e10cSrcweir 
89cdf0e10cSrcweir     void SendEvent (void);
90cdf0e10cSrcweir     DECL_LINK(MasterPageChangeListener, MasterPageObserverEvent*);
91cdf0e10cSrcweir     DECL_LINK(MasterPageContainerChangeListener, MasterPageContainerChangeEvent*);
92cdf0e10cSrcweir 
93cdf0e10cSrcweir     /** Add a descriptor for the specified master page to the end of the
94cdf0e10cSrcweir         list of most recently used master pages.  When the page is already a
95cdf0e10cSrcweir         member of that list the associated descriptor is moved to the end of
96cdf0e10cSrcweir         the list to make it the most recently used entry.
97cdf0e10cSrcweir         @param bMakePersistent
98cdf0e10cSrcweir             When <TRUE/> is given then the new list of recently used master
99cdf0e10cSrcweir             pages is written back into the configuration to make it
100cdf0e10cSrcweir             persistent.  Giving <FALSE/> to ommit this is used while loading
101cdf0e10cSrcweir             the persistent list from the configuration.
102cdf0e10cSrcweir     */
103cdf0e10cSrcweir     void AddMasterPage (
104cdf0e10cSrcweir         MasterPageContainer::Token aToken,
105cdf0e10cSrcweir         bool bMakePersistent = true);
106cdf0e10cSrcweir 
107cdf0e10cSrcweir     /** Load the list of recently used master pages from the registry where
108cdf0e10cSrcweir         it was saved to make it persistent.
109cdf0e10cSrcweir     */
110cdf0e10cSrcweir     void LoadPersistentValues (void);
111cdf0e10cSrcweir 
112cdf0e10cSrcweir     /** Save the list of recently used master pages to the registry to make
113cdf0e10cSrcweir         it presistent.
114cdf0e10cSrcweir     */
115cdf0e10cSrcweir     void SavePersistentValues (void);
116cdf0e10cSrcweir 
117cdf0e10cSrcweir     void ResolveList (void);
118cdf0e10cSrcweir };
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 
1227a32b0c8SAndre Fischer } } // end of namespace sd::sidebar
123cdf0e10cSrcweir 
124cdf0e10cSrcweir #endif
125