xref: /trunk/main/svx/inc/svx/galtheme.hxx (revision 6dd94783)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVX_GALTHEME_HXX_
25 #define _SVX_GALTHEME_HXX_
26 
27 #include "svx/svxdllapi.h"
28 
29 #define ENABLE_BYTESTRING_STREAM_OPERATORS
30 
31 #include <tools/debug.hxx>
32 #include <tools/urlobj.hxx>
33 #include <vcl/salctype.hxx>
34 #include <svl/brdcst.hxx>
35 #include <svl/lstner.hxx>
36 #include <svtools/transfer.hxx>
37 #include <sot/storage.hxx>
38 #include <svx/svdmodel.hxx>
39 //#include <svx/galobj.hxx>
40 #include <svx/galmisc.hxx>
41 //#include <svx/gallery1.hxx>
42 
43 // -----------------
44 // - GalleryObject -
45 // -----------------
46 // --------------
47 // - SgaObjKind -
48 // --------------
49 
50 struct GalleryObject
51 {
52 	INetURLObject	aURL;
53 	sal_uInt32		nOffset;
54 	SgaObjKind		eObjKind;
55 	sal_Bool			bDummy;
56 };
57 
58 DECLARE_LIST( GalleryObjectList, GalleryObject* )
59 
60 class GalleryThemeEntry;
61 class SgaObject;
62 class FmFormModel;
63 class ListBox;
64 
65 // -----------------
66 // - GalDragParams -
67 // -----------------
68 
69 struct GalDragParams
70 {
71 	Region		aDragRegion;
72 	sal_uIntPtr		nDragObjPos;
73 	String		aThemeName;
74 	String		aFileName;
75 	SgaObjKind	eObjKind;
76 };
77 
78 // ----------------
79 // - GalleryTheme -
80 // ----------------
81 
82 class Gallery;
83 class GalleryProgress;
84 namespace unogallery
85 {
86 	class GalleryTheme;
87 	class GalleryItem;
88 }
89 
90 class GalleryTheme : public SfxBroadcaster
91 {
92 	friend class Gallery;
93 	friend class GalleryThemeCacheEntry;
94 	friend class ::unogallery::GalleryTheme;
95 	friend class ::unogallery::GalleryItem;
96 
97 private:
98 
99 	GalleryObjectList			aObjectList;
100 	String						aImportName;
101 	String						m_aDestDir;
102 	SotStorageRef				aSvDrawStorageRef;
103 	Gallery*					pParent;
104 	GalleryThemeEntry*			pThm;
105     sal_uIntPtr                       mnThemeLockCount;
106 	sal_uIntPtr						mnBroadcasterLockCount;
107 	sal_uIntPtr						nDragPos;
108 	sal_Bool						bDragging;
109 	sal_Bool						bAbortActualize;
110 
111 	void						ImplCreateSvDrawStorage();
112 	SVX_DLLPUBLIC SgaObject*					ImplReadSgaObject( GalleryObject* pEntry );
113 	sal_Bool						ImplWriteSgaObject( const SgaObject& rObj, sal_uIntPtr nPos, GalleryObject* pExistentEntry );
114 	void						ImplRead();
115 	void						ImplWrite();
116 	const GalleryObject*		ImplGetGalleryObject( sal_uIntPtr nPos ) const { return aObjectList.GetObject( nPos ); }
117 	SVX_DLLPUBLIC const GalleryObject*		ImplGetGalleryObject( const INetURLObject& rURL );
118 	sal_uIntPtr						ImplGetGalleryObjectPos( const GalleryObject* pObj ) const { return aObjectList.GetPos( pObj ); }
119 	INetURLObject				ImplGetURL( const GalleryObject* pObject ) const;
120     INetURLObject               ImplCreateUniqueURL( SgaObjKind eObjKind, sal_uIntPtr nFormat = CVT_UNKNOWN );
121 	void						ImplSetModified( sal_Bool bModified );
122 	void						ImplBroadcast( sal_uIntPtr nUpdatePos );
123 
124 								GalleryTheme();
125 								GalleryTheme( Gallery* pGallery, GalleryThemeEntry* pThemeEntry );
126 								~GalleryTheme();
127 
128 public:
129 
130 	static GalleryThemeEntry*	CreateThemeEntry( const INetURLObject& rURL, sal_Bool bReadOnly );
131 
132 	sal_uIntPtr					GetObjectCount() const { return aObjectList.Count(); }
133 
134 	SVX_DLLPUBLIC SgaObject*					AcquireObject( sal_uIntPtr nPos );
135 	SVX_DLLPUBLIC void						ReleaseObject( SgaObject* pObj );
136 
137 	SVX_DLLPUBLIC sal_Bool						InsertObject( const SgaObject& rObj, sal_uIntPtr nPos = LIST_APPEND );
138 	SVX_DLLPUBLIC sal_Bool						RemoveObject( sal_uIntPtr nPos );
139 	sal_Bool						ChangeObjectPos( sal_uIntPtr nOldPos, sal_uIntPtr nNewPos );
140 
141 	SVX_DLLPUBLIC const String&	GetName() const;
142 	const String&				GetRealName() const;
143 	const String&				GetImportName() const { return aImportName; }
144 	void						SetImportName(const String& rImportName) { aImportName = rImportName; }
145 
146 	const String&				GetDestDir() const { return m_aDestDir; }
147 	void						SetDestDir(const String& rDestDir) { m_aDestDir = rDestDir; }
148 
149 	const INetURLObject&		GetThmURL() const;
150 	SVX_DLLPUBLIC const INetURLObject&		GetSdgURL() const;
151 	const INetURLObject&		GetSdvURL() const;
152 
153 	SVX_DLLPUBLIC sal_uInt32		GetId() const;
154 	void						SetId( sal_uInt32 nNewId, sal_Bool bResetThemeName );
155 
156 	void						SetDragging( sal_Bool bSet ) { bDragging = bSet; }
157 	sal_Bool						IsDragging() const { return bDragging; }
158 
159     void                        LockTheme() { ++mnThemeLockCount; }
160     sal_Bool                        UnlockTheme();
161 
162 	void						LockBroadcaster() { mnBroadcasterLockCount++; }
163 	SVX_DLLPUBLIC void			UnlockBroadcaster( sal_uIntPtr nUpdatePos = 0 );
164 	sal_Bool						IsBroadcasterLocked() const { return mnBroadcasterLockCount > 0; }
165 
166 	void						SetDragPos( sal_uIntPtr nPos ) { nDragPos = nPos; }
167 	sal_uIntPtr						GetDragPos() const { return nDragPos; }
168 
169 	sal_Bool						IsThemeNameFromResource() const;
170 
171 	SVX_DLLPUBLIC sal_Bool			IsImported() const;
172 	SVX_DLLPUBLIC sal_Bool			IsReadOnly() const;
173 	SVX_DLLPUBLIC sal_Bool			IsDefault() const;
174 	sal_Bool						IsModified() const;
175 
176 	SVX_DLLPUBLIC void						Actualize( const Link& rActualizeLink, GalleryProgress* pProgress = NULL );
177 	void						AbortActualize() { bAbortActualize = sal_True; }
178 
179 	Gallery*					GetParent() const { return pParent; }
180 	SotStorageRef				GetSvDrawStorage() const { return aSvDrawStorageRef; }
181 
182 public:
183 
184 	SgaObjKind					GetObjectKind( sal_uIntPtr nPos ) const
185 								{
186 									DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" );
187 									return ImplGetGalleryObject( nPos )->eObjKind;
188 								}
189 
190 
191 	const INetURLObject&		GetObjectURL( sal_uIntPtr nPos ) const
192 								{
193 									DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" );
194 									return ImplGetGalleryObject( nPos )->aURL;
195 								}
196 
197 	sal_Bool						GetThumb( sal_uIntPtr nPos, BitmapEx& rBmp, sal_Bool bProgress = sal_False );
198 
199 	SVX_DLLPUBLIC sal_Bool						GetGraphic( sal_uIntPtr nPos, Graphic& rGraphic, sal_Bool bProgress = sal_False );
200 	SVX_DLLPUBLIC sal_Bool						InsertGraphic( const Graphic& rGraphic, sal_uIntPtr nInsertPos = LIST_APPEND );
201 
202 	SVX_DLLPUBLIC sal_Bool						GetModel( sal_uIntPtr nPos, SdrModel& rModel, sal_Bool bProgress = sal_False );
203 	SVX_DLLPUBLIC sal_Bool						InsertModel( const FmFormModel& rModel, sal_uIntPtr nInsertPos = LIST_APPEND );
204 
205 	sal_Bool						GetModelStream( sal_uIntPtr nPos, SotStorageStreamRef& rModelStreamRef, sal_Bool bProgress = sal_False );
206 	sal_Bool						InsertModelStream( const SotStorageStreamRef& rModelStream, sal_uIntPtr nInsertPos = LIST_APPEND );
207 
208 	sal_Bool						GetURL( sal_uIntPtr nPos, INetURLObject& rURL, sal_Bool bProgress = sal_False );
209 	SVX_DLLPUBLIC sal_Bool						InsertURL( const INetURLObject& rURL, sal_uIntPtr nInsertPos = LIST_APPEND );
210     sal_Bool                        InsertFileOrDirURL( const INetURLObject& rFileOrDirURL, sal_uIntPtr nInsertPos = LIST_APPEND );
211 
212 	sal_Bool						InsertTransferable( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxTransferable, sal_uIntPtr nInsertPos );
213 
214 	void						CopyToClipboard( Window* pWindow, sal_uIntPtr nPos );
215 	void						StartDrag( Window* pWindow, sal_uIntPtr nPos );
216 
217 public:
218 
219 	SvStream&					WriteData( SvStream& rOut ) const;
220 	SvStream&					ReadData( SvStream& rIn );
221 	static SVX_DLLPUBLIC void	InsertAllThemes( ListBox& rListBox );
222 };
223 
224 SvStream& operator<<( SvStream& rOut, const GalleryTheme& rTheme );
225 SvStream& operator>>( SvStream& rIn, GalleryTheme& rTheme );
226 
227 #endif
228