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