xref: /aoo4110/main/svl/source/items/macitem.cxx (revision b1cdbd2c)
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_svl.hxx"
26*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #ifndef GCC
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <svl/macitem.hxx>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski // STATIC DATA -----------------------------------------------------------
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski DBG_NAME(SvxMacroItem);
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski TYPEINIT1_FACTORY(SvxMacroItem, SfxPoolItem, new SvxMacroItem(0));
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 
~SjJSbxObjectBase()44*b1cdbd2cSJim Jagielski SjJSbxObjectBase::~SjJSbxObjectBase()
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski }
47*b1cdbd2cSJim Jagielski 
Clone(void)48*b1cdbd2cSJim Jagielski SjJSbxObjectBase* SjJSbxObjectBase::Clone( void )
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski 	return NULL;
51*b1cdbd2cSJim Jagielski }
52*b1cdbd2cSJim Jagielski 
SvxMacro(const String & rMacName,const String & rLanguage)53*b1cdbd2cSJim Jagielski SvxMacro::SvxMacro( const String &rMacName, const String &rLanguage)
54*b1cdbd2cSJim Jagielski 	: aMacName( rMacName ), aLibName( rLanguage),
55*b1cdbd2cSJim Jagielski 	  pFunctionObject(NULL), eType( EXTENDED_STYPE)
56*b1cdbd2cSJim Jagielski {
57*b1cdbd2cSJim Jagielski 	if (rLanguage.EqualsAscii(SVX_MACRO_LANGUAGE_STARBASIC))
58*b1cdbd2cSJim Jagielski 		eType=STARBASIC;
59*b1cdbd2cSJim Jagielski 	else if (rLanguage.EqualsAscii(SVX_MACRO_LANGUAGE_JAVASCRIPT))
60*b1cdbd2cSJim Jagielski 		eType=JAVASCRIPT;
61*b1cdbd2cSJim Jagielski }
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski 
~SvxMacro()64*b1cdbd2cSJim Jagielski SvxMacro::~SvxMacro()
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski 	delete pFunctionObject;
67*b1cdbd2cSJim Jagielski }
68*b1cdbd2cSJim Jagielski 
GetLanguage() const69*b1cdbd2cSJim Jagielski String SvxMacro::GetLanguage()const
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski 	if(eType==STARBASIC)
72*b1cdbd2cSJim Jagielski 	{
73*b1cdbd2cSJim Jagielski 		return UniString::CreateFromAscii(
74*b1cdbd2cSJim Jagielski 			       RTL_CONSTASCII_STRINGPARAM(SVX_MACRO_LANGUAGE_STARBASIC));
75*b1cdbd2cSJim Jagielski 	}
76*b1cdbd2cSJim Jagielski 	else if(eType==JAVASCRIPT)
77*b1cdbd2cSJim Jagielski 	{
78*b1cdbd2cSJim Jagielski 		return UniString::CreateFromAscii(
79*b1cdbd2cSJim Jagielski 			       RTL_CONSTASCII_STRINGPARAM(SVX_MACRO_LANGUAGE_JAVASCRIPT));
80*b1cdbd2cSJim Jagielski 	}
81*b1cdbd2cSJim Jagielski 	else if(eType==EXTENDED_STYPE)
82*b1cdbd2cSJim Jagielski 	{
83*b1cdbd2cSJim Jagielski 		return UniString::CreateFromAscii(
84*b1cdbd2cSJim Jagielski 			       RTL_CONSTASCII_STRINGPARAM(SVX_MACRO_LANGUAGE_SF));
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 	}
87*b1cdbd2cSJim Jagielski 	return aLibName;
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 
operator =(const SvxMacro & rBase)92*b1cdbd2cSJim Jagielski SvxMacro& SvxMacro::operator=( const SvxMacro& rBase )
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski 	if( this != &rBase )
95*b1cdbd2cSJim Jagielski 	{
96*b1cdbd2cSJim Jagielski 		aMacName = rBase.aMacName;
97*b1cdbd2cSJim Jagielski 		aLibName = rBase.aLibName;
98*b1cdbd2cSJim Jagielski 		delete pFunctionObject;
99*b1cdbd2cSJim Jagielski 		pFunctionObject = rBase.pFunctionObject ? rBase.pFunctionObject->Clone() : NULL;
100*b1cdbd2cSJim Jagielski 		eType = rBase.eType;
101*b1cdbd2cSJim Jagielski 	}
102*b1cdbd2cSJim Jagielski 	return *this;
103*b1cdbd2cSJim Jagielski }
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 
operator =(const SvxMacroTableDtor & rTbl)106*b1cdbd2cSJim Jagielski SvxMacroTableDtor& SvxMacroTableDtor::operator=( const SvxMacroTableDtor& rTbl )
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski 	DelDtor();
109*b1cdbd2cSJim Jagielski 	SvxMacro* pTmp = ((SvxMacroTableDtor&)rTbl).First();
110*b1cdbd2cSJim Jagielski 	while( pTmp )
111*b1cdbd2cSJim Jagielski 	{
112*b1cdbd2cSJim Jagielski 		SvxMacro *pNew = new SvxMacro( *pTmp );
113*b1cdbd2cSJim Jagielski 		Insert( rTbl.GetCurKey(), pNew );
114*b1cdbd2cSJim Jagielski 		pTmp = ((SvxMacroTableDtor&)rTbl).Next();
115*b1cdbd2cSJim Jagielski 	}
116*b1cdbd2cSJim Jagielski 	return *this;
117*b1cdbd2cSJim Jagielski }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 
Read(SvStream & rStrm,sal_uInt16 nVersion)120*b1cdbd2cSJim Jagielski SvStream& SvxMacroTableDtor::Read( SvStream& rStrm, sal_uInt16 nVersion )
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski 	if( SVX_MACROTBL_VERSION40 <= nVersion )
123*b1cdbd2cSJim Jagielski 		rStrm >> nVersion;
124*b1cdbd2cSJim Jagielski 	short nMacro;
125*b1cdbd2cSJim Jagielski 	rStrm >> nMacro;
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 	for( short i = 0; i < nMacro; ++i )
128*b1cdbd2cSJim Jagielski 	{
129*b1cdbd2cSJim Jagielski 		sal_uInt16 nCurKey, eType = STARBASIC;
130*b1cdbd2cSJim Jagielski 		String aLibName, aMacName;
131*b1cdbd2cSJim Jagielski 		rStrm >> nCurKey;
132*b1cdbd2cSJim Jagielski 		SfxPoolItem::readByteString(rStrm, aLibName);
133*b1cdbd2cSJim Jagielski 		SfxPoolItem::readByteString(rStrm, aMacName);
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		if( SVX_MACROTBL_VERSION40 <= nVersion )
136*b1cdbd2cSJim Jagielski 			rStrm >> eType;
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 		SvxMacro* pNew = new SvxMacro( aMacName, aLibName, (ScriptType)eType );
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 		SvxMacro *pOld = Get( nCurKey );
141*b1cdbd2cSJim Jagielski 		if( pOld )
142*b1cdbd2cSJim Jagielski 		{
143*b1cdbd2cSJim Jagielski 			delete pOld;
144*b1cdbd2cSJim Jagielski 			Replace( nCurKey, pNew );
145*b1cdbd2cSJim Jagielski 		}
146*b1cdbd2cSJim Jagielski 		else
147*b1cdbd2cSJim Jagielski 			Insert( nCurKey, pNew );
148*b1cdbd2cSJim Jagielski 	}
149*b1cdbd2cSJim Jagielski 	return rStrm;
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 
Write(SvStream & rStream) const153*b1cdbd2cSJim Jagielski SvStream& SvxMacroTableDtor::Write( SvStream& rStream ) const
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski 	sal_uInt16 nVersion = SOFFICE_FILEFORMAT_31 == rStream.GetVersion()
156*b1cdbd2cSJim Jagielski 									? SVX_MACROTBL_VERSION31
157*b1cdbd2cSJim Jagielski 									: SVX_MACROTBL_AKTVERSION;
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	if( SVX_MACROTBL_VERSION40 <= nVersion )
160*b1cdbd2cSJim Jagielski 		rStream << nVersion;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	rStream << (sal_uInt16)Count();
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	SvxMacro* pMac = ((SvxMacroTableDtor*)this)->First();
165*b1cdbd2cSJim Jagielski 	while( pMac && rStream.GetError() == SVSTREAM_OK )
166*b1cdbd2cSJim Jagielski 	{
167*b1cdbd2cSJim Jagielski 		rStream << (short)GetCurKey();
168*b1cdbd2cSJim Jagielski 		SfxPoolItem::writeByteString(rStream, pMac->GetLibName());
169*b1cdbd2cSJim Jagielski 		SfxPoolItem::writeByteString(rStream, pMac->GetMacName());
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 		if( SVX_MACROTBL_VERSION40 <= nVersion )
172*b1cdbd2cSJim Jagielski 			rStream << (sal_uInt16)pMac->GetScriptType();
173*b1cdbd2cSJim Jagielski 		pMac = ((SvxMacroTableDtor*)this)->Next();
174*b1cdbd2cSJim Jagielski 	}
175*b1cdbd2cSJim Jagielski 	return rStream;
176*b1cdbd2cSJim Jagielski }
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
179*b1cdbd2cSJim Jagielski 
DelDtor()180*b1cdbd2cSJim Jagielski void SvxMacroTableDtor::DelDtor()
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski 	SvxMacro* pTmp = First();
183*b1cdbd2cSJim Jagielski 	while( pTmp )
184*b1cdbd2cSJim Jagielski 	{
185*b1cdbd2cSJim Jagielski 		delete pTmp;
186*b1cdbd2cSJim Jagielski 		pTmp = Next();
187*b1cdbd2cSJim Jagielski 	}
188*b1cdbd2cSJim Jagielski 	Clear();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski 
operator ==(const SfxPoolItem & rAttr) const193*b1cdbd2cSJim Jagielski int SvxMacroItem::operator==( const SfxPoolItem& rAttr ) const
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski 	DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 	const SvxMacroTableDtor& rOwn = aMacroTable;
198*b1cdbd2cSJim Jagielski 	const SvxMacroTableDtor& rOther = ( (SvxMacroItem&) rAttr ).aMacroTable;
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 	// Anzahl unterschiedlich => auf jeden Fall ungleich
201*b1cdbd2cSJim Jagielski 	if ( rOwn.Count() != rOther.Count() )
202*b1cdbd2cSJim Jagielski 		return sal_False;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 	// einzeln verleichen; wegen Performance ist die Reihenfolge wichtig
205*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 nNo = 0; nNo < rOwn.Count(); ++nNo )
206*b1cdbd2cSJim Jagielski 	{
207*b1cdbd2cSJim Jagielski 		const SvxMacro *pOwnMac = rOwn.GetObject(nNo);
208*b1cdbd2cSJim Jagielski 		const SvxMacro *pOtherMac = rOther.GetObject(nNo);
209*b1cdbd2cSJim Jagielski 		if ( 	rOwn.GetKey(pOwnMac) != rOther.GetKey(pOtherMac)  ||
210*b1cdbd2cSJim Jagielski 				pOwnMac->GetLibName() != pOtherMac->GetLibName() ||
211*b1cdbd2cSJim Jagielski 				pOwnMac->GetMacName() != pOtherMac->GetMacName() )
212*b1cdbd2cSJim Jagielski 			return sal_False;
213*b1cdbd2cSJim Jagielski 	}
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	return sal_True;
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
219*b1cdbd2cSJim Jagielski 
Clone(SfxItemPool *) const220*b1cdbd2cSJim Jagielski SfxPoolItem* SvxMacroItem::Clone( SfxItemPool* ) const
221*b1cdbd2cSJim Jagielski {
222*b1cdbd2cSJim Jagielski 	return new SvxMacroItem( *this );
223*b1cdbd2cSJim Jagielski }
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
226*b1cdbd2cSJim Jagielski 
GetPresentation(SfxItemPresentation,SfxMapUnit,SfxMapUnit,XubString & rText,const IntlWrapper *) const227*b1cdbd2cSJim Jagielski SfxItemPresentation SvxMacroItem::GetPresentation
228*b1cdbd2cSJim Jagielski (
229*b1cdbd2cSJim Jagielski 	SfxItemPresentation /*ePres*/,
230*b1cdbd2cSJim Jagielski 	SfxMapUnit			/*eCoreUnit*/,
231*b1cdbd2cSJim Jagielski 	SfxMapUnit			/*ePresUnit*/,
232*b1cdbd2cSJim Jagielski 	XubString& 			rText,
233*b1cdbd2cSJim Jagielski     const IntlWrapper *
234*b1cdbd2cSJim Jagielski )	const
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski /*!!!
237*b1cdbd2cSJim Jagielski 	SvxMacroTableDtor& rTbl = (SvxMacroTableDtor&)GetMacroTable();
238*b1cdbd2cSJim Jagielski 	SvxMacro* pMac = rTbl.First();
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	while ( pMac )
241*b1cdbd2cSJim Jagielski 	{
242*b1cdbd2cSJim Jagielski 		rText += pMac->GetLibName();
243*b1cdbd2cSJim Jagielski 		rText += cpDelim;
244*b1cdbd2cSJim Jagielski 		rText += pMac->GetMacName();
245*b1cdbd2cSJim Jagielski 		pMac = rTbl.Next();
246*b1cdbd2cSJim Jagielski 		if ( pMac )
247*b1cdbd2cSJim Jagielski 			rText += cpDelim;
248*b1cdbd2cSJim Jagielski 	}
249*b1cdbd2cSJim Jagielski */
250*b1cdbd2cSJim Jagielski 	rText.Erase();
251*b1cdbd2cSJim Jagielski 	return SFX_ITEM_PRESENTATION_NONE;
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
255*b1cdbd2cSJim Jagielski 
Store(SvStream & rStrm,sal_uInt16) const256*b1cdbd2cSJim Jagielski SvStream& SvxMacroItem::Store( SvStream& rStrm , sal_uInt16 ) const
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski 	return aMacroTable.Write( rStrm );
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
262*b1cdbd2cSJim Jagielski 
Create(SvStream & rStrm,sal_uInt16 nVersion) const263*b1cdbd2cSJim Jagielski SfxPoolItem* SvxMacroItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
264*b1cdbd2cSJim Jagielski {
265*b1cdbd2cSJim Jagielski 	SvxMacroItem* pAttr = new SvxMacroItem( Which() );
266*b1cdbd2cSJim Jagielski 	pAttr->aMacroTable.Read( rStrm, nVersion );
267*b1cdbd2cSJim Jagielski 	return pAttr;
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
271*b1cdbd2cSJim Jagielski 
SetMacro(sal_uInt16 nEvent,const SvxMacro & rMacro)272*b1cdbd2cSJim Jagielski void SvxMacroItem::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski 	SvxMacro *pMacro;
275*b1cdbd2cSJim Jagielski 	if ( 0 != (pMacro=aMacroTable.Get(nEvent)) )
276*b1cdbd2cSJim Jagielski 	{
277*b1cdbd2cSJim Jagielski 		delete pMacro;
278*b1cdbd2cSJim Jagielski 		aMacroTable.Replace(nEvent, new SvxMacro( rMacro ) );
279*b1cdbd2cSJim Jagielski 	}
280*b1cdbd2cSJim Jagielski 	else
281*b1cdbd2cSJim Jagielski 		aMacroTable.Insert(nEvent, new SvxMacro( rMacro ) );
282*b1cdbd2cSJim Jagielski }
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
285*b1cdbd2cSJim Jagielski 
GetVersion(sal_uInt16 nFileFormatVersion) const286*b1cdbd2cSJim Jagielski sal_uInt16 SvxMacroItem::GetVersion( sal_uInt16 nFileFormatVersion ) const
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski 	return SOFFICE_FILEFORMAT_31 == nFileFormatVersion
289*b1cdbd2cSJim Jagielski 				? 0 : aMacroTable.GetVersion();
290*b1cdbd2cSJim Jagielski }
291*b1cdbd2cSJim Jagielski 
292