1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SVX_GALTHEME_HXX
#define INCLUDED_SVX_GALTHEME_HXX
#include <svx/svxdllapi.h>
#include <tools/debug.hxx>
#include <tools/urlobj.hxx>
#include <vcl/salctype.hxx>
#include <svl/SfxBroadcaster.hxx>
#include <svl/lstner.hxx>
#include <svtools/transfer.hxx>
#include <svx/svdmodel.hxx>
#include <svx/galmisc.hxx>
#include <vector>
class SotStorage;
class SotStorageStream;
struct GalleryObject
{
INetURLObject aURL;
sal_uInt32 nOffset;
SgaObjKind eObjKind;
bool mbDelete;
//UI visualization buffering
BitmapEx maPreviewBitmapEx;
Size maPreparedSize;
OUString maTitle;
OUString maPath;
};
typedef ::std::vector< GalleryObject* > GalleryObjectList;
class GalleryThemeEntry;
class SgaObject;
class FmFormModel;
class ListBox;
class Gallery;
class GalleryProgress;
namespace unogallery
{
class GalleryTheme;
class GalleryItem;
}
class SVX_DLLPUBLIC GalleryTheme : public SfxBroadcaster
{
friend class Gallery;
friend class GalleryThemeCacheEntry;
friend class ::unogallery::GalleryTheme;
friend class ::unogallery::GalleryItem;
private:
GalleryObjectList aObjectList;
OUString m_aDestDir;
bool m_bDestDirRelative;
tools::SvRef<SotStorage> aSvDrawStorageRef;
Gallery* pParent;
GalleryThemeEntry* pThm;
sal_uIntPtr mnThemeLockCount;
sal_uIntPtr mnBroadcasterLockCount;
sal_uIntPtr nDragPos;
bool bDragging;
bool bAbortActualize;
SAL_DLLPRIVATE void ImplCreateSvDrawStorage();
SgaObject* ImplReadSgaObject( GalleryObject* pEntry );
SAL_DLLPRIVATE bool ImplWriteSgaObject( const SgaObject& rObj, size_t nPos, GalleryObject* pExistentEntry );
SAL_DLLPRIVATE void ImplWrite();
SAL_DLLPRIVATE const GalleryObject* ImplGetGalleryObject( size_t nPos ) const
{ return ( nPos < aObjectList.size() ) ? aObjectList[ nPos ] : nullptr; }
const GalleryObject* ImplGetGalleryObject( const INetURLObject& rURL );
SAL_DLLPRIVATE size_t ImplGetGalleryObjectPos( const GalleryObject* pObj ) const
{
for ( size_t i = 0, n = aObjectList.size(); i < n; ++i )
if ( pObj == aObjectList[ i ] )
return i;
return size_t(-1);
}
SAL_DLLPRIVATE INetURLObject ImplGetURL( const GalleryObject* pObject ) const;
SAL_DLLPRIVATE INetURLObject ImplCreateUniqueURL( SgaObjKind eObjKind, ConvertDataFormat nFormat = ConvertDataFormat::Unknown );
SAL_DLLPRIVATE void ImplSetModified( bool bModified );
SAL_DLLPRIVATE void ImplBroadcast( sal_uIntPtr nUpdatePos );
SAL_DLLPRIVATE GalleryTheme( Gallery* pGallery, GalleryThemeEntry* pThemeEntry );
SAL_DLLPRIVATE virtual ~GalleryTheme();
GalleryTheme(GalleryTheme const &) = delete;
void operator =(GalleryTheme const &) = delete;
public:
SAL_DLLPRIVATE static GalleryThemeEntry* CreateThemeEntry( const INetURLObject& rURL, bool bReadOnly );
SAL_DLLPRIVATE size_t GetObjectCount() const { return aObjectList.size(); }
SgaObject* AcquireObject( size_t nPos );
static void ReleaseObject( SgaObject* pObj );
bool InsertObject( const SgaObject& rObj, sal_uIntPtr nPos = CONTAINER_APPEND );
bool RemoveObject( size_t nPos );
SAL_DLLPRIVATE bool ChangeObjectPos( size_t nOldPos, size_t nNewPos );
const OUString& GetName() const;
SAL_DLLPRIVATE const OUString& GetRealName() const;
// used for building gallery themes during compilation:
SAL_DLLPRIVATE void SetDestDir(const OUString& rDestDir, bool bRelative = true)
{ m_aDestDir = rDestDir; m_bDestDirRelative = bRelative; }
SAL_DLLPRIVATE const INetURLObject& GetThmURL() const;
const INetURLObject& GetSdgURL() const;
SAL_DLLPRIVATE const INetURLObject& GetSdvURL() const;
sal_uInt32 GetId() const;
SAL_DLLPRIVATE void SetId( sal_uInt32 nNewId, bool bResetThemeName );
SAL_DLLPRIVATE void SetDragging( bool bSet ) { bDragging = bSet; }
SAL_DLLPRIVATE bool IsDragging() const { return bDragging; }
SAL_DLLPRIVATE void LockTheme() { ++mnThemeLockCount; }
SAL_DLLPRIVATE bool UnlockTheme();
SAL_DLLPRIVATE void LockBroadcaster() { mnBroadcasterLockCount++; }
void UnlockBroadcaster();
SAL_DLLPRIVATE bool IsBroadcasterLocked() const { return mnBroadcasterLockCount > 0; }
SAL_DLLPRIVATE void SetDragPos( sal_uIntPtr nPos ) { nDragPos = nPos; }
SAL_DLLPRIVATE sal_uIntPtr GetDragPos() const { return nDragPos; }
SAL_DLLPRIVATE bool IsThemeNameFromResource() const;
bool IsReadOnly() const;
bool IsDefault() const;
SAL_DLLPRIVATE bool IsModified() const;
void Actualize( const Link<const INetURLObject&, void>& rActualizeLink, GalleryProgress* pProgress = nullptr );
SAL_DLLPRIVATE void AbortActualize() { bAbortActualize = true; }
SAL_DLLPRIVATE Gallery* GetParent() const { return pParent; }
SAL_DLLPRIVATE const tools::SvRef<SotStorage>& GetSvDrawStorage() const;
public:
SAL_DLLPRIVATE SgaObjKind GetObjectKind( sal_uIntPtr nPos ) const
{
DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" );
return ImplGetGalleryObject( nPos )->eObjKind;
}
SAL_DLLPRIVATE const INetURLObject& GetObjectURL( sal_uIntPtr nPos ) const
{
DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" );
return ImplGetGalleryObject( nPos )->aURL;
}
SAL_DLLPRIVATE bool GetThumb( sal_uIntPtr nPos, BitmapEx& rBmp, bool bProgress = false );
bool GetGraphic( sal_uIntPtr nPos, Graphic& rGraphic, bool bProgress = false );
bool InsertGraphic( const Graphic& rGraphic, sal_uIntPtr nInsertPos = CONTAINER_APPEND );
bool GetModel( sal_uIntPtr nPos, SdrModel& rModel, bool bProgress = false );
bool InsertModel( const FmFormModel& rModel, sal_uIntPtr nInsertPos = CONTAINER_APPEND );
SAL_DLLPRIVATE bool GetModelStream( sal_uIntPtr nPos, tools::SvRef<SotStorageStream>& rModelStreamRef );
SAL_DLLPRIVATE bool InsertModelStream( const tools::SvRef<SotStorageStream>& rModelStream, sal_uIntPtr nInsertPos = CONTAINER_APPEND );
SAL_DLLPRIVATE bool GetURL( sal_uIntPtr nPos, INetURLObject& rURL );
bool InsertURL( const INetURLObject& rURL, sal_uIntPtr nInsertPos = CONTAINER_APPEND );
SAL_DLLPRIVATE bool InsertFileOrDirURL( const INetURLObject& rFileOrDirURL, sal_uIntPtr nInsertPos = CONTAINER_APPEND );
SAL_DLLPRIVATE bool InsertTransferable( const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable, sal_uIntPtr nInsertPos );
SAL_DLLPRIVATE void CopyToClipboard( vcl::Window* pWindow, sal_uIntPtr nPos );
SAL_DLLPRIVATE void StartDrag( vcl::Window* pWindow, sal_uIntPtr nPos );
public:
SAL_DLLPRIVATE SvStream& WriteData( SvStream& rOut ) const;
SAL_DLLPRIVATE SvStream& ReadData( SvStream& rIn );
static void InsertAllThemes( ListBox& rListBox );
// for buffering PreviewBitmaps and strings for object and path
SAL_DLLPRIVATE void GetPreviewBitmapExAndStrings(sal_uIntPtr nPos, BitmapEx& rBitmapEx, Size& rSize, OUString& rTitle, OUString& rPath) const;
SAL_DLLPRIVATE void SetPreviewBitmapExAndStrings(sal_uIntPtr nPos, const BitmapEx& rBitmapEx, const Size& rSize, const OUString& rTitle, const OUString& rPath);
};
SvStream& WriteGalleryTheme( SvStream& rOut, const GalleryTheme& rTheme );
SvStream& ReadGalleryTheme( SvStream& rIn, GalleryTheme& rTheme );
#endif // INCLUDED_SVX_GALTHEME_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|