xref: /AOO41X/main/svl/inc/svl/macitem.hxx (revision 39a19a47feaddbaa21988da8c7bf801707fd3d48)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _SFXMACITEM_HXX
24 #define _SFXMACITEM_HXX
25 
26 // class SvxMacroItem ----------------------------------------------------
27 
28 #include "svl/svldllapi.h"
29 #include <svl/poolitem.hxx>
30 #include <tools/rtti.hxx>
31 #include <tools/debug.hxx>
32 #include <tools/string.hxx>
33 
34 #ifndef _TABLE_HXX
35 #include <tools/table.hxx>
36 #endif
37 
38 class SvStream;
39 
40 #define SVX_MACRO_LANGUAGE_JAVASCRIPT "JavaScript"
41 #define SVX_MACRO_LANGUAGE_STARBASIC "StarBasic"
42 #define SVX_MACRO_LANGUAGE_SF "Script"
43 
44 DBG_NAMEEX(SvxMacroItem)
45 
46 // -----------------------------------------------------------------------
47 
48 //Ein Macro
49 
50 enum ScriptType
51 {
52     STARBASIC,
53     JAVASCRIPT,
54     EXTENDED_STYPE
55 };
56 
57 // Basisklasse fuer SjJSbxObject mit virtuellem Destruktor
58 class SjJSbxObjectBase
59 {
60 public:
61     virtual ~SjJSbxObjectBase();
62     virtual SjJSbxObjectBase* Clone( void );
63     //virtual SjJSbxObjectBase& operator=( const SjJSbxObjectBase& rBase );
64 };
65 
66 class SjJSbxObject;
67 
68 class SVL_DLLPUBLIC SvxMacro
69 {
70     String aMacName;
71     String aLibName;
72     // Fuer JavaScript muss ein Function-Objekt gehalten werden
73     SjJSbxObjectBase* pFunctionObject;
74     ScriptType eType;
75 
76 public:
77 
78     SvxMacro( const String &rMacName, const String &rLanguage);
79 
80     SvxMacro( const String &rMacName, const String &rLibName,
81                 ScriptType eType); //  = STARBASIC entfernt
82 
83     SvxMacro( SjJSbxObjectBase* _pFunctionObject, const String &rSource );
84     ~SvxMacro();    // noetig fuer pFunctionObject
85 
GetLibName() const86     const String &GetLibName() const        { return aLibName; }
GetMacName() const87     const String &GetMacName() const        { return aMacName; }
88     String GetLanguage()const;
89 
GetScriptType() const90     ScriptType GetScriptType() const        { return eType; }
91 
HasMacro() const92     sal_Bool HasMacro() const           { return aMacName.Len() ? sal_True : sal_False; }
93 
94 #ifdef SOLAR_JAVA
95     // JavaScript-Function-Objekt holen
96     // ACHTUNG: Implementation in SJ, Source/JScript/sjimpl.cxx
97     SjJSbxObjectBase* GetFunctionObject( SjJSbxObject* pParent );
98 #endif
99 
100     SvxMacro& operator=( const SvxMacro& rBase );
101 };
102 
SvxMacro(const String & rMacName,const String & rLibName,ScriptType eTyp)103 inline SvxMacro::SvxMacro( const String &rMacName, const String &rLibName,
104                             ScriptType eTyp )
105     : aMacName( rMacName ), aLibName( rLibName ), pFunctionObject(NULL), eType( eTyp )
106 {}
107 
SvxMacro(SjJSbxObjectBase * _pFunctionObject,const String & rSource)108 inline SvxMacro::SvxMacro( SjJSbxObjectBase* _pFunctionObject, const String &rSource )
109     : aMacName( rSource ), pFunctionObject( _pFunctionObject ), eType( JAVASCRIPT )
110 {}
111 
112 //Macro Table, zerstoert die Pointer im DTor!
113 
114 DECLARE_TABLE( _SvxMacroTableDtor, SvxMacro* )
115 
116 #define SVX_MACROTBL_VERSION31  0
117 #define SVX_MACROTBL_VERSION40  1
118 
119 #define SVX_MACROTBL_AKTVERSION SVX_MACROTBL_VERSION40
120 
121 class SVL_DLLPUBLIC SvxMacroTableDtor : public _SvxMacroTableDtor
122 {
123 public:
124     inline SvxMacroTableDtor( const sal_uInt16 nInitSz = 0, const sal_uInt16 nReSz = 1 );
SvxMacroTableDtor(const SvxMacroTableDtor & rCpy)125     inline SvxMacroTableDtor( const SvxMacroTableDtor &rCpy ) : _SvxMacroTableDtor() { *this = rCpy; }
~SvxMacroTableDtor()126     inline ~SvxMacroTableDtor() { DelDtor(); }
127     SvxMacroTableDtor& operator=( const SvxMacroTableDtor &rCpy );
128 
129     // loescht alle Eintraege
130     void DelDtor();
131 
132     SvStream&   Read( SvStream &, sal_uInt16 nVersion = SVX_MACROTBL_AKTVERSION );
133     SvStream&   Write( SvStream & ) const;
134 
GetVersion() const135     sal_uInt16 GetVersion() const       { return SVX_MACROTBL_AKTVERSION; }
136 };
137 
SvxMacroTableDtor(const sal_uInt16 nInitSz,const sal_uInt16 nReSz)138 inline SvxMacroTableDtor::SvxMacroTableDtor( const sal_uInt16 nInitSz,
139                                              const sal_uInt16 nReSz)
140     : _SvxMacroTableDtor( nInitSz, nReSz )
141 {}
142 
143 /*
144 [Beschreibung]
145 Dieses Item beschreibt eine Makro-Tabelle.
146 */
147 
148 class SVL_DLLPUBLIC SvxMacroItem: public SfxPoolItem
149 {
150 public:
151     TYPEINFO();
152 
153     inline SvxMacroItem ( const sal_uInt16 nId /*= ITEMID_MACRO*/ );
154 
155     // "pure virtual Methoden" vom SfxPoolItem
156     virtual int             operator==( const SfxPoolItem& ) const;
157     virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
158                                     SfxMapUnit eCoreMetric,
159                                     SfxMapUnit ePresMetric,
160                                     XubString &rText,
161                                     const IntlWrapper * = 0 ) const;
162     virtual SfxPoolItem*    Clone( SfxItemPool *pPool = 0 ) const;
163     virtual SfxPoolItem*    Create(SvStream &, sal_uInt16) const;
164     virtual SvStream&       Store(SvStream &, sal_uInt16 nItemVersion ) const;
165     virtual sal_uInt16          GetVersion( sal_uInt16 nFileFormatVersion ) const;
166 
GetMacroTable() const167     inline const SvxMacroTableDtor& GetMacroTable() const { return aMacroTable;}
SetMacroTable(const SvxMacroTableDtor & rTbl)168     inline void SetMacroTable( const SvxMacroTableDtor& rTbl ) { aMacroTable = rTbl; }
169 
170     inline const SvxMacro& GetMacro( sal_uInt16 nEvent ) const;
171     inline sal_Bool HasMacro( sal_uInt16 nEvent ) const;
172            void SetMacro( sal_uInt16 nEvent, const SvxMacro& );
173     inline sal_Bool DelMacro( sal_uInt16 nEvent );
174 
175 private:
176     SvxMacroTableDtor aMacroTable;
177 
178     inline SvxMacroItem( const SvxMacroItem& );
179     SvxMacroItem &operator=( const SvxMacroItem & );
180 };
181 
SvxMacroItem(const sal_uInt16 nId)182 inline SvxMacroItem::SvxMacroItem( const sal_uInt16 nId )
183     : SfxPoolItem( nId )
184 {}
SvxMacroItem(const SvxMacroItem & rCpy)185 inline SvxMacroItem::SvxMacroItem( const SvxMacroItem &rCpy )
186     : SfxPoolItem( rCpy ),
187     aMacroTable( rCpy.GetMacroTable() )
188 {}
189 
HasMacro(sal_uInt16 nEvent) const190 inline sal_Bool SvxMacroItem::HasMacro( sal_uInt16 nEvent ) const
191 {
192     return aMacroTable.IsKeyValid( nEvent );
193 }
GetMacro(sal_uInt16 nEvent) const194 inline const SvxMacro& SvxMacroItem::GetMacro( sal_uInt16 nEvent ) const
195 {
196     return *(aMacroTable.Get(nEvent));
197 }
DelMacro(sal_uInt16 nEvent)198 inline sal_Bool SvxMacroItem::DelMacro( sal_uInt16 nEvent )
199 {
200     SvxMacro *pMacro = aMacroTable.Remove( nEvent );
201     delete pMacro;
202     return ( pMacro != 0 );
203 }
204 
205 #endif
206