1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_basic.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
29*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski #include <basic/sbx.hxx>
32*b1cdbd2cSJim Jagielski #include <basic/sbxfac.hxx>
33*b1cdbd2cSJim Jagielski #include <basic/sbxbase.hxx>
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski // AppData-Struktur fuer SBX:
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR(SbxParams,SbxParamInfo*);
38*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR(SbxFacs,SbxFactory*);
39*b1cdbd2cSJim Jagielski
TYPEINIT0(SbxBase)40*b1cdbd2cSJim Jagielski TYPEINIT0(SbxBase)
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielski // SBX-Daten anfordern oder ggf. anlegen
43*b1cdbd2cSJim Jagielski // wir legen den Bereich einfach an und verzichten auf die Freigabe!
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski SbxAppData* GetSbxData_Impl()
46*b1cdbd2cSJim Jagielski {
47*b1cdbd2cSJim Jagielski SbxAppData** ppData = (SbxAppData**) ::GetAppData( SHL_SBX );
48*b1cdbd2cSJim Jagielski SbxAppData* p = *ppData;
49*b1cdbd2cSJim Jagielski if( !p )
50*b1cdbd2cSJim Jagielski p = *ppData = new SbxAppData;
51*b1cdbd2cSJim Jagielski return p;
52*b1cdbd2cSJim Jagielski }
53*b1cdbd2cSJim Jagielski
~SbxAppData()54*b1cdbd2cSJim Jagielski SbxAppData::~SbxAppData()
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski if( pBasicFormater )
57*b1cdbd2cSJim Jagielski delete pBasicFormater;
58*b1cdbd2cSJim Jagielski }
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski //////////////////////////////// SbxBase /////////////////////////////////
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski DBG_NAME(SbxBase);
64*b1cdbd2cSJim Jagielski
SbxBase()65*b1cdbd2cSJim Jagielski SbxBase::SbxBase()
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski DBG_CTOR( SbxBase, 0 );
68*b1cdbd2cSJim Jagielski nFlags = SBX_READWRITE;
69*b1cdbd2cSJim Jagielski }
70*b1cdbd2cSJim Jagielski
SbxBase(const SbxBase & r)71*b1cdbd2cSJim Jagielski SbxBase::SbxBase( const SbxBase& r )
72*b1cdbd2cSJim Jagielski : SvRefBase( r )
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski DBG_CTOR( SbxBase, 0 );
75*b1cdbd2cSJim Jagielski nFlags = r.nFlags;
76*b1cdbd2cSJim Jagielski }
77*b1cdbd2cSJim Jagielski
~SbxBase()78*b1cdbd2cSJim Jagielski SbxBase::~SbxBase()
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski DBG_DTOR(SbxBase,0);
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski
operator =(const SbxBase & r)83*b1cdbd2cSJim Jagielski SbxBase& SbxBase::operator=( const SbxBase& r )
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
86*b1cdbd2cSJim Jagielski nFlags = r.nFlags;
87*b1cdbd2cSJim Jagielski return *this;
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski
GetType() const90*b1cdbd2cSJim Jagielski SbxDataType SbxBase::GetType() const
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
93*b1cdbd2cSJim Jagielski return SbxEMPTY;
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski
GetClass() const96*b1cdbd2cSJim Jagielski SbxClassType SbxBase::GetClass() const
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
99*b1cdbd2cSJim Jagielski return SbxCLASS_DONTCARE;
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski
Clear()102*b1cdbd2cSJim Jagielski void SbxBase::Clear()
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski
IsFixed() const107*b1cdbd2cSJim Jagielski sal_Bool SbxBase::IsFixed() const
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
110*b1cdbd2cSJim Jagielski return IsSet( SBX_FIXED );
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski
SetModified(sal_Bool b)113*b1cdbd2cSJim Jagielski void SbxBase::SetModified( sal_Bool b )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
116*b1cdbd2cSJim Jagielski if( IsSet( SBX_NO_MODIFY ) )
117*b1cdbd2cSJim Jagielski return;
118*b1cdbd2cSJim Jagielski if( b )
119*b1cdbd2cSJim Jagielski SetFlag( SBX_MODIFIED );
120*b1cdbd2cSJim Jagielski else
121*b1cdbd2cSJim Jagielski ResetFlag( SBX_MODIFIED );
122*b1cdbd2cSJim Jagielski }
123*b1cdbd2cSJim Jagielski
GetError()124*b1cdbd2cSJim Jagielski SbxError SbxBase::GetError()
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski return GetSbxData_Impl()->eSbxError;
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski
SetError(SbxError e)129*b1cdbd2cSJim Jagielski void SbxBase::SetError( SbxError e )
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski SbxAppData* p = GetSbxData_Impl();
132*b1cdbd2cSJim Jagielski if( e && p->eSbxError == SbxERR_OK )
133*b1cdbd2cSJim Jagielski p->eSbxError = e;
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski
IsError()136*b1cdbd2cSJim Jagielski sal_Bool SbxBase::IsError()
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski return sal_Bool( GetSbxData_Impl()->eSbxError != SbxERR_OK );
139*b1cdbd2cSJim Jagielski }
140*b1cdbd2cSJim Jagielski
ResetError()141*b1cdbd2cSJim Jagielski void SbxBase::ResetError()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski GetSbxData_Impl()->eSbxError = SbxERR_OK;
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski
AddFactory(SbxFactory * pFac)146*b1cdbd2cSJim Jagielski void SbxBase::AddFactory( SbxFactory* pFac )
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski SbxAppData* p = GetSbxData_Impl();
149*b1cdbd2cSJim Jagielski const SbxFactory* pTemp = pFac;
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski // AB, 6.3.96: HandleLast-Flag beruecksichtigen
152*b1cdbd2cSJim Jagielski sal_uInt16 nPos = p->aFacs.Count(); // Einfuege-Position
153*b1cdbd2cSJim Jagielski if( !pFac->IsHandleLast() ) // Nur, wenn nicht selbst HandleLast
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski // Neue Factory vor Factories mit HandleLast einordnen
156*b1cdbd2cSJim Jagielski while( nPos > 0 &&
157*b1cdbd2cSJim Jagielski (static_cast<SbxFactory*>(p->aFacs.GetObject( nPos-1 )))->IsHandleLast() )
158*b1cdbd2cSJim Jagielski nPos--;
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski p->aFacs.Insert( pTemp, nPos );
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski
RemoveFactory(SbxFactory * pFac)163*b1cdbd2cSJim Jagielski void SbxBase::RemoveFactory( SbxFactory* pFac )
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski SbxAppData* p = GetSbxData_Impl();
166*b1cdbd2cSJim Jagielski for( sal_uInt16 i = 0; i < p->aFacs.Count(); i++ )
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski if( p->aFacs.GetObject( i ) == pFac )
169*b1cdbd2cSJim Jagielski {
170*b1cdbd2cSJim Jagielski p->aFacs.Remove( i, 1 ); break;
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski
Create(sal_uInt16 nSbxId,sal_uInt32 nCreator)176*b1cdbd2cSJim Jagielski SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski // #91626: Hack to skip old Basic dialogs
179*b1cdbd2cSJim Jagielski // Problem: There does not exist a factory any more,
180*b1cdbd2cSJim Jagielski // so we have to create a dummy SbxVariable instead
181*b1cdbd2cSJim Jagielski if( nSbxId == 0x65 ) // Dialog Id
182*b1cdbd2cSJim Jagielski return new SbxVariable;
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski XubString aEmptyStr;
185*b1cdbd2cSJim Jagielski if( nCreator == SBXCR_SBX )
186*b1cdbd2cSJim Jagielski switch( nSbxId )
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski case SBXID_VALUE: return new SbxValue;
189*b1cdbd2cSJim Jagielski case SBXID_VARIABLE: return new SbxVariable;
190*b1cdbd2cSJim Jagielski case SBXID_ARRAY: return new SbxArray;
191*b1cdbd2cSJim Jagielski case SBXID_DIMARRAY: return new SbxDimArray;
192*b1cdbd2cSJim Jagielski case SBXID_OBJECT: return new SbxObject( aEmptyStr );
193*b1cdbd2cSJim Jagielski case SBXID_COLLECTION: return new SbxCollection( aEmptyStr );
194*b1cdbd2cSJim Jagielski case SBXID_FIXCOLLECTION:
195*b1cdbd2cSJim Jagielski return new SbxStdCollection( aEmptyStr, aEmptyStr );
196*b1cdbd2cSJim Jagielski case SBXID_METHOD: return new SbxMethod( aEmptyStr, SbxEMPTY );
197*b1cdbd2cSJim Jagielski case SBXID_PROPERTY: return new SbxProperty( aEmptyStr, SbxEMPTY );
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski // Unbekanter Typ: �ber die Factories gehen!
200*b1cdbd2cSJim Jagielski SbxAppData* p = GetSbxData_Impl();
201*b1cdbd2cSJim Jagielski SbxBase* pNew = NULL;
202*b1cdbd2cSJim Jagielski for( sal_uInt16 i = 0; i < p->aFacs.Count(); i++ )
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski SbxFactory* pFac = p->aFacs.GetObject( i );
205*b1cdbd2cSJim Jagielski pNew = pFac->Create( nSbxId, nCreator );
206*b1cdbd2cSJim Jagielski if( pNew )
207*b1cdbd2cSJim Jagielski break;
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
210*b1cdbd2cSJim Jagielski if( !pNew )
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski ByteString aMsg( "SBX: Keine Factory fuer SBX-ID " );
213*b1cdbd2cSJim Jagielski aMsg += ByteString::CreateFromInt32(nSbxId);
214*b1cdbd2cSJim Jagielski DbgError( aMsg.GetBuffer() );
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski #endif
217*b1cdbd2cSJim Jagielski return pNew;
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski
CreateObject(const XubString & rClass)220*b1cdbd2cSJim Jagielski SbxObject* SbxBase::CreateObject( const XubString& rClass )
221*b1cdbd2cSJim Jagielski {
222*b1cdbd2cSJim Jagielski SbxAppData* p = GetSbxData_Impl();
223*b1cdbd2cSJim Jagielski SbxObject* pNew = NULL;
224*b1cdbd2cSJim Jagielski for( sal_uInt16 i = 0; i < p->aFacs.Count(); i++ )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski pNew = p->aFacs.GetObject( i )->CreateObject( rClass );
227*b1cdbd2cSJim Jagielski if( pNew )
228*b1cdbd2cSJim Jagielski break;
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
231*b1cdbd2cSJim Jagielski if( !pNew )
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski ByteString aMsg( "SBX: Keine Factory fuer Objektklasse " );
234*b1cdbd2cSJim Jagielski ByteString aClassStr( (const UniString&)rClass, RTL_TEXTENCODING_ASCII_US );
235*b1cdbd2cSJim Jagielski aMsg += aClassStr;
236*b1cdbd2cSJim Jagielski DbgError( (const char*)aMsg.GetBuffer() );
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski #endif
239*b1cdbd2cSJim Jagielski return pNew;
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski static sal_Bool bStaticEnableBroadcasting = sal_True;
243*b1cdbd2cSJim Jagielski
244*b1cdbd2cSJim Jagielski // Sbx-Loesung als Ersatz fuer SfxBroadcaster::Enable()
StaticEnableBroadcasting(sal_Bool bEnable)245*b1cdbd2cSJim Jagielski void SbxBase::StaticEnableBroadcasting( sal_Bool bEnable )
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski bStaticEnableBroadcasting = bEnable;
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski
StaticIsEnabledBroadcasting(void)250*b1cdbd2cSJim Jagielski sal_Bool SbxBase::StaticIsEnabledBroadcasting( void )
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski return bStaticEnableBroadcasting;
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski
Load(SvStream & rStrm)256*b1cdbd2cSJim Jagielski SbxBase* SbxBase::Load( SvStream& rStrm )
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski sal_uInt16 nSbxId, nFlags, nVer;
259*b1cdbd2cSJim Jagielski sal_uInt32 nCreator, nSize;
260*b1cdbd2cSJim Jagielski rStrm >> nCreator >> nSbxId >> nFlags >> nVer;
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski // Eine Dummheit meinerseits korrigieren:
263*b1cdbd2cSJim Jagielski if( nFlags & SBX_RESERVED )
264*b1cdbd2cSJim Jagielski nFlags = ( nFlags & ~SBX_RESERVED ) | SBX_GBLSEARCH;
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski sal_uIntPtr nOldPos = rStrm.Tell();
267*b1cdbd2cSJim Jagielski rStrm >> nSize;
268*b1cdbd2cSJim Jagielski SbxBase* p = Create( nSbxId, nCreator );
269*b1cdbd2cSJim Jagielski if( p )
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski p->nFlags = nFlags;
272*b1cdbd2cSJim Jagielski if( p->LoadData( rStrm, nVer ) )
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski sal_uIntPtr nNewPos = rStrm.Tell();
275*b1cdbd2cSJim Jagielski nOldPos += nSize;
276*b1cdbd2cSJim Jagielski DBG_ASSERT( nOldPos >= nNewPos, "SBX: Zu viele Daten eingelesen" );
277*b1cdbd2cSJim Jagielski if( nOldPos != nNewPos )
278*b1cdbd2cSJim Jagielski rStrm.Seek( nOldPos );
279*b1cdbd2cSJim Jagielski if( !p->LoadCompleted() )
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski // Loeschen des Objekts
282*b1cdbd2cSJim Jagielski SbxBaseRef aRef( p );
283*b1cdbd2cSJim Jagielski p = NULL;
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski }
286*b1cdbd2cSJim Jagielski else
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski rStrm.SetError( SVSTREAM_FILEFORMAT_ERROR );
289*b1cdbd2cSJim Jagielski // Loeschen des Objekts
290*b1cdbd2cSJim Jagielski SbxBaseRef aRef( p );
291*b1cdbd2cSJim Jagielski p = NULL;
292*b1cdbd2cSJim Jagielski }
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski else
295*b1cdbd2cSJim Jagielski rStrm.SetError( SVSTREAM_FILEFORMAT_ERROR );
296*b1cdbd2cSJim Jagielski return p;
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski
299*b1cdbd2cSJim Jagielski // Sbx-Objekt im Stream ueberspringen
Skip(SvStream & rStrm)300*b1cdbd2cSJim Jagielski void SbxBase::Skip( SvStream& rStrm )
301*b1cdbd2cSJim Jagielski {
302*b1cdbd2cSJim Jagielski sal_uInt16 nSbxId, nFlags, nVer;
303*b1cdbd2cSJim Jagielski sal_uInt32 nCreator, nSize;
304*b1cdbd2cSJim Jagielski rStrm >> nCreator >> nSbxId >> nFlags >> nVer;
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski sal_uIntPtr nStartPos = rStrm.Tell();
307*b1cdbd2cSJim Jagielski rStrm >> nSize;
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski rStrm.Seek( nStartPos + nSize );
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski
Store(SvStream & rStrm)312*b1cdbd2cSJim Jagielski sal_Bool SbxBase::Store( SvStream& rStrm )
313*b1cdbd2cSJim Jagielski {
314*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
315*b1cdbd2cSJim Jagielski if( !( nFlags & SBX_DONTSTORE ) )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski rStrm << (sal_uInt32) GetCreator()
318*b1cdbd2cSJim Jagielski << (sal_uInt16) GetSbxId()
319*b1cdbd2cSJim Jagielski << (sal_uInt16) GetFlags()
320*b1cdbd2cSJim Jagielski << (sal_uInt16) GetVersion();
321*b1cdbd2cSJim Jagielski sal_uIntPtr nOldPos = rStrm.Tell();
322*b1cdbd2cSJim Jagielski rStrm << (sal_uInt32) 0L;
323*b1cdbd2cSJim Jagielski sal_Bool bRes = StoreData( rStrm );
324*b1cdbd2cSJim Jagielski sal_uIntPtr nNewPos = rStrm.Tell();
325*b1cdbd2cSJim Jagielski rStrm.Seek( nOldPos );
326*b1cdbd2cSJim Jagielski rStrm << (sal_uInt32) ( nNewPos - nOldPos );
327*b1cdbd2cSJim Jagielski rStrm.Seek( nNewPos );
328*b1cdbd2cSJim Jagielski if( rStrm.GetError() != SVSTREAM_OK )
329*b1cdbd2cSJim Jagielski bRes = sal_False;
330*b1cdbd2cSJim Jagielski if( bRes )
331*b1cdbd2cSJim Jagielski bRes = StoreCompleted();
332*b1cdbd2cSJim Jagielski return bRes;
333*b1cdbd2cSJim Jagielski }
334*b1cdbd2cSJim Jagielski else
335*b1cdbd2cSJim Jagielski return sal_True;
336*b1cdbd2cSJim Jagielski }
337*b1cdbd2cSJim Jagielski
LoadData(SvStream &,sal_uInt16)338*b1cdbd2cSJim Jagielski sal_Bool SbxBase::LoadData( SvStream&, sal_uInt16 )
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
341*b1cdbd2cSJim Jagielski return sal_False;
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski
StoreData(SvStream &) const344*b1cdbd2cSJim Jagielski sal_Bool SbxBase::StoreData( SvStream& ) const
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
347*b1cdbd2cSJim Jagielski return sal_False;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski
LoadPrivateData(SvStream &,sal_uInt16)350*b1cdbd2cSJim Jagielski sal_Bool SbxBase::LoadPrivateData( SvStream&, sal_uInt16 )
351*b1cdbd2cSJim Jagielski {
352*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
353*b1cdbd2cSJim Jagielski return sal_True;
354*b1cdbd2cSJim Jagielski }
355*b1cdbd2cSJim Jagielski
StorePrivateData(SvStream &) const356*b1cdbd2cSJim Jagielski sal_Bool SbxBase::StorePrivateData( SvStream& ) const
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
359*b1cdbd2cSJim Jagielski return sal_True;
360*b1cdbd2cSJim Jagielski }
361*b1cdbd2cSJim Jagielski
LoadCompleted()362*b1cdbd2cSJim Jagielski sal_Bool SbxBase::LoadCompleted()
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
365*b1cdbd2cSJim Jagielski return sal_True;
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski
StoreCompleted()368*b1cdbd2cSJim Jagielski sal_Bool SbxBase::StoreCompleted()
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski DBG_CHKTHIS( SbxBase, 0 );
371*b1cdbd2cSJim Jagielski return sal_True;
372*b1cdbd2cSJim Jagielski }
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski //////////////////////////////// SbxFactory ////////////////////////////////
375*b1cdbd2cSJim Jagielski
Create(sal_uInt16,sal_uInt32)376*b1cdbd2cSJim Jagielski SbxBase* SbxFactory::Create( sal_uInt16, sal_uInt32 )
377*b1cdbd2cSJim Jagielski {
378*b1cdbd2cSJim Jagielski return NULL;
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski
CreateObject(const XubString &)381*b1cdbd2cSJim Jagielski SbxObject* SbxFactory::CreateObject( const XubString& )
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski return NULL;
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski ///////////////////////////////// SbxInfo //////////////////////////////////
387*b1cdbd2cSJim Jagielski
~SbxInfo()388*b1cdbd2cSJim Jagielski SbxInfo::~SbxInfo()
389*b1cdbd2cSJim Jagielski {}
390*b1cdbd2cSJim Jagielski
AddParam(const XubString & rName,SbxDataType eType,sal_uInt16 nFlags)391*b1cdbd2cSJim Jagielski void SbxInfo::AddParam
392*b1cdbd2cSJim Jagielski ( const XubString& rName, SbxDataType eType, sal_uInt16 nFlags )
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski const SbxParamInfo* p = new SbxParamInfo( rName, eType, nFlags );
395*b1cdbd2cSJim Jagielski aParams.Insert( p, aParams.Count() );
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski
AddParam(const SbxParamInfo & r)398*b1cdbd2cSJim Jagielski void SbxInfo::AddParam( const SbxParamInfo& r )
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski const SbxParamInfo* p = new SbxParamInfo
401*b1cdbd2cSJim Jagielski ( r.aName, r.eType, r.nFlags, r.aTypeRef );
402*b1cdbd2cSJim Jagielski aParams.Insert( p, aParams.Count() );
403*b1cdbd2cSJim Jagielski }
404*b1cdbd2cSJim Jagielski
GetParam(sal_uInt16 n) const405*b1cdbd2cSJim Jagielski const SbxParamInfo* SbxInfo::GetParam( sal_uInt16 n ) const
406*b1cdbd2cSJim Jagielski {
407*b1cdbd2cSJim Jagielski if( n < 1 || n > aParams.Count() )
408*b1cdbd2cSJim Jagielski return NULL;
409*b1cdbd2cSJim Jagielski else
410*b1cdbd2cSJim Jagielski return aParams.GetObject( n-1 );
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski
LoadData(SvStream & rStrm,sal_uInt16 nVer)413*b1cdbd2cSJim Jagielski sal_Bool SbxInfo::LoadData( SvStream& rStrm, sal_uInt16 nVer )
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski aParams.Remove( 0, aParams.Count() );
416*b1cdbd2cSJim Jagielski sal_uInt16 nParam;
417*b1cdbd2cSJim Jagielski rStrm.ReadByteString( aComment, RTL_TEXTENCODING_ASCII_US );
418*b1cdbd2cSJim Jagielski rStrm.ReadByteString( aHelpFile, RTL_TEXTENCODING_ASCII_US );
419*b1cdbd2cSJim Jagielski rStrm >> nHelpId >> nParam;
420*b1cdbd2cSJim Jagielski while( nParam-- )
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski XubString aName;
423*b1cdbd2cSJim Jagielski sal_uInt16 nType, nFlags;
424*b1cdbd2cSJim Jagielski sal_uInt32 nUserData = 0;
425*b1cdbd2cSJim Jagielski rStrm.ReadByteString( aName, RTL_TEXTENCODING_ASCII_US );
426*b1cdbd2cSJim Jagielski rStrm >> nType >> nFlags;
427*b1cdbd2cSJim Jagielski if( nVer > 1 )
428*b1cdbd2cSJim Jagielski rStrm >> nUserData;
429*b1cdbd2cSJim Jagielski AddParam( aName, (SbxDataType) nType, nFlags );
430*b1cdbd2cSJim Jagielski SbxParamInfo* p = aParams.GetObject( aParams.Count() - 1 );
431*b1cdbd2cSJim Jagielski p->nUserData = nUserData;
432*b1cdbd2cSJim Jagielski }
433*b1cdbd2cSJim Jagielski return sal_True;
434*b1cdbd2cSJim Jagielski }
435*b1cdbd2cSJim Jagielski
StoreData(SvStream & rStrm) const436*b1cdbd2cSJim Jagielski sal_Bool SbxInfo::StoreData( SvStream& rStrm ) const
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski rStrm.WriteByteString( aComment, RTL_TEXTENCODING_ASCII_US );
439*b1cdbd2cSJim Jagielski rStrm.WriteByteString( aHelpFile, RTL_TEXTENCODING_ASCII_US );
440*b1cdbd2cSJim Jagielski rStrm << nHelpId << aParams.Count();
441*b1cdbd2cSJim Jagielski for( sal_uInt16 i = 0; i < aParams.Count(); i++ )
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski SbxParamInfo* p = aParams.GetObject( i );
444*b1cdbd2cSJim Jagielski rStrm.WriteByteString( p->aName, RTL_TEXTENCODING_ASCII_US );
445*b1cdbd2cSJim Jagielski rStrm << (sal_uInt16) p->eType
446*b1cdbd2cSJim Jagielski << (sal_uInt16) p->nFlags
447*b1cdbd2cSJim Jagielski << (sal_uInt32) p->nUserData;
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski return sal_True;
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski
452