Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sot/formats.hxx>
21 : #include <tools/vcompat.hxx>
22 : #include <svx/xflasit.hxx>
23 : #include <svx/xfillit0.hxx>
24 : #include <svl/itempool.hxx>
25 : #include <svl/whiter.hxx>
26 : #include <svl/itemset.hxx>
27 : #include <svx/xdef.hxx>
28 : #include "svx/xexch.hxx"
29 :
30 :
31 0 : TYPEINIT1_AUTOFACTORY( XFillExchangeData, SvDataCopyStream );
32 :
33 :
34 : /*************************************************************************
35 : |*
36 : |* Default-Ctor (Fuer Assign())
37 : |*
38 : *************************************************************************/
39 0 : XFillExchangeData::XFillExchangeData() :
40 : pXFillAttrSetItem( NULL ),
41 0 : pPool( NULL )
42 : {
43 0 : }
44 :
45 :
46 : /*************************************************************************
47 : |*
48 : |* Ctor
49 : |*
50 : *************************************************************************/
51 0 : XFillExchangeData::XFillExchangeData( const XFillAttrSetItem rXFillAttrSetItem ) :
52 0 : pXFillAttrSetItem( (XFillAttrSetItem*) rXFillAttrSetItem.Clone( rXFillAttrSetItem.GetItemSet().GetPool() ) ),
53 0 : pPool( rXFillAttrSetItem.GetItemSet().GetPool() )
54 : {
55 0 : }
56 :
57 :
58 : /*************************************************************************
59 : |*
60 : |* Dtor
61 : |*
62 : *************************************************************************/
63 0 : XFillExchangeData::~XFillExchangeData()
64 : {
65 0 : delete pXFillAttrSetItem;
66 0 : }
67 :
68 : /******************************************************************************
69 : |*
70 : |* Binaer-Export (z.Z. ohne Versionsverwaltung, da nicht persistent!)
71 : |*
72 : \******************************************************************************/
73 :
74 0 : SvStream& operator<<( SvStream& rOStm, const XFillExchangeData& rData )
75 : {
76 0 : if( rData.pXFillAttrSetItem )
77 : {
78 0 : SfxWhichIter aIter( rData.pXFillAttrSetItem->GetItemSet() );
79 0 : sal_uInt16 nWhich = aIter.FirstWhich();
80 : const SfxPoolItem* pItem;
81 0 : sal_uInt32 nItemCount = 0;
82 0 : sal_Size nFirstPos = rOStm.Tell();
83 :
84 0 : rOStm << nItemCount;
85 :
86 0 : while( nWhich )
87 : {
88 0 : if( SFX_ITEM_SET == rData.pXFillAttrSetItem->GetItemSet().GetItemState( nWhich, sal_False, &pItem ) )
89 : {
90 0 : VersionCompat aCompat( rOStm, STREAM_WRITE );
91 0 : const sal_uInt16 nItemVersion2 = pItem->GetVersion( (sal_uInt16) rOStm.GetVersion() );
92 :
93 0 : rOStm << nWhich << nItemVersion2;
94 0 : pItem->Store( rOStm, nItemVersion2 );
95 :
96 0 : nItemCount++;
97 : }
98 :
99 0 : nWhich = aIter.NextWhich();
100 : }
101 :
102 0 : const sal_uIntPtr nLastPos = rOStm.Tell();
103 0 : rOStm.Seek( nFirstPos );
104 0 : rOStm << nItemCount;
105 0 : rOStm.Seek( nLastPos );
106 : }
107 :
108 0 : return rOStm;
109 : }
110 :
111 :
112 : /******************************************************************************
113 : |*
114 : |* Binaer-Import (z.Z. ohne Versionsverwaltung, da nicht persistent!)
115 : |*
116 : \******************************************************************************/
117 :
118 0 : SvStream& operator>>( SvStream& rIStm, XFillExchangeData& rData )
119 : {
120 : DBG_ASSERT( rData.pPool, "XFillExchangeData has no pool" );
121 :
122 0 : SfxItemSet* pSet = new SfxItemSet ( *rData.pPool, XATTR_FILL_FIRST, XATTR_FILL_LAST );
123 : SfxPoolItem* pNewItem;
124 0 : sal_uInt32 nItemCount = 0;
125 : sal_uInt16 nWhich, nItemVersion;
126 :
127 0 : rIStm >> nItemCount;
128 :
129 0 : if( nItemCount > ( XATTR_FILL_LAST - XATTR_FILL_FIRST + 1 ) )
130 0 : nItemCount = ( XATTR_FILL_LAST - XATTR_FILL_FIRST + 1 );
131 :
132 0 : for( sal_uInt32 i = 0; i < nItemCount; i++ )
133 : {
134 0 : VersionCompat aCompat( rIStm, STREAM_READ );
135 :
136 0 : rIStm >> nWhich >> nItemVersion;
137 :
138 0 : if( nWhich )
139 : {
140 0 : pNewItem = rData.pPool->GetDefaultItem( nWhich ).Create( rIStm, nItemVersion );
141 :
142 0 : if( pNewItem )
143 : {
144 0 : pSet->Put( *pNewItem );
145 0 : delete pNewItem;
146 : }
147 : }
148 0 : }
149 :
150 0 : delete rData.pXFillAttrSetItem;
151 0 : rData.pXFillAttrSetItem = new XFillAttrSetItem( pSet );
152 0 : rData.pPool = rData.pXFillAttrSetItem->GetItemSet().GetPool();
153 :
154 0 : return rIStm;
155 : }
156 :
157 : /*************************************************************************
158 : |*
159 : |* XBitmap& XBitmap::operator=( const XBitmap& rXBmp )
160 : |*
161 : *************************************************************************/
162 :
163 0 : XFillExchangeData& XFillExchangeData::operator=( const XFillExchangeData& rData )
164 : {
165 0 : delete pXFillAttrSetItem;
166 :
167 0 : if( rData.pXFillAttrSetItem )
168 0 : pXFillAttrSetItem = (XFillAttrSetItem*) rData.pXFillAttrSetItem->Clone( pPool = rData.pXFillAttrSetItem->GetItemSet().GetPool() );
169 : else
170 : {
171 0 : pPool = NULL;
172 0 : pXFillAttrSetItem = NULL;
173 : }
174 :
175 0 : return( *this );
176 : }
177 :
178 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|