1*353d8f4dSAndrew Rist /**************************************************************
2*353d8f4dSAndrew Rist *
3*353d8f4dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*353d8f4dSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*353d8f4dSAndrew Rist * distributed with this work for additional information
6*353d8f4dSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*353d8f4dSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*353d8f4dSAndrew Rist * "License"); you may not use this file except in compliance
9*353d8f4dSAndrew Rist * with the License. You may obtain a copy of the License at
10*353d8f4dSAndrew Rist *
11*353d8f4dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*353d8f4dSAndrew Rist *
13*353d8f4dSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*353d8f4dSAndrew Rist * software distributed under the License is distributed on an
15*353d8f4dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*353d8f4dSAndrew Rist * KIND, either express or implied. See the License for the
17*353d8f4dSAndrew Rist * specific language governing permissions and limitations
18*353d8f4dSAndrew Rist * under the License.
19*353d8f4dSAndrew Rist *
20*353d8f4dSAndrew Rist *************************************************************/
21*353d8f4dSAndrew Rist
22cdf0e10cSrcweir #ifndef _SFXMACRO_HXX
23cdf0e10cSrcweir #define _SFXMACRO_HXX
24cdf0e10cSrcweir
25cdf0e10cSrcweir //====================================================================
26cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
27cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <tools/string.hxx>
30cdf0e10cSrcweir
31cdf0e10cSrcweir class SfxSlot;
32cdf0e10cSrcweir class SfxShell;
33cdf0e10cSrcweir struct SfxMacro_Impl;
34cdf0e10cSrcweir class SfxMacro;
35cdf0e10cSrcweir
36cdf0e10cSrcweir //====================================================================
37cdf0e10cSrcweir
38cdf0e10cSrcweir class SfxMacroStatement
39cdf0e10cSrcweir {
40cdf0e10cSrcweir sal_uInt16 nSlotId; // ausgef"uhrte Slot-Id oder 0, wenn manuell
41cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue > aArgs; // aktuelle Parameter, falls nSlotId != 0
42cdf0e10cSrcweir String aStatement; // Statement in BASIC-Syntax (ggf. mit CR/LF)
43cdf0e10cSrcweir sal_Bool bDone; // auskommentieren wenn kein Done() gerufen
44cdf0e10cSrcweir void* pDummy; // f"ur alle F"alle zum kompatibel bleiben
45cdf0e10cSrcweir
46cdf0e10cSrcweir #ifdef _SFXMACRO_HXX
47cdf0e10cSrcweir private:
48cdf0e10cSrcweir void GenerateNameAndArgs_Impl( SfxMacro *pMacro,
49cdf0e10cSrcweir const SfxSlot &rSlot,
50cdf0e10cSrcweir sal_Bool bRequestDone,
51cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
52cdf0e10cSrcweir #endif
53cdf0e10cSrcweir
54cdf0e10cSrcweir public:
55cdf0e10cSrcweir SfxMacroStatement( const SfxMacroStatement &rOrig );
56cdf0e10cSrcweir
57cdf0e10cSrcweir SfxMacroStatement( const String &rTarget,
58cdf0e10cSrcweir const SfxSlot &rSlot,
59cdf0e10cSrcweir sal_Bool bRequestDone,
60cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
61cdf0e10cSrcweir
62cdf0e10cSrcweir SfxMacroStatement( const SfxShell &rShell,
63cdf0e10cSrcweir const String &rTarget,
64cdf0e10cSrcweir sal_Bool bAbsolute,
65cdf0e10cSrcweir const SfxSlot &rSlot,
66cdf0e10cSrcweir sal_Bool bRequestDone,
67cdf0e10cSrcweir ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
68cdf0e10cSrcweir
69cdf0e10cSrcweir SfxMacroStatement( const String &rStatment );
70cdf0e10cSrcweir ~SfxMacroStatement();
71cdf0e10cSrcweir
72cdf0e10cSrcweir sal_uInt16 GetSlotId() const;
73cdf0e10cSrcweir const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& GetArgs() const;
74cdf0e10cSrcweir sal_Bool IsDone() const;
75cdf0e10cSrcweir const String& GetStatement() const;
76cdf0e10cSrcweir };
77cdf0e10cSrcweir
78cdf0e10cSrcweir //--------------------------------------------------------------------
79cdf0e10cSrcweir
GetSlotId() const80cdf0e10cSrcweir inline sal_uInt16 SfxMacroStatement::GetSlotId() const
81cdf0e10cSrcweir
82cdf0e10cSrcweir /* [Beschreibung]
83cdf0e10cSrcweir
84cdf0e10cSrcweir Liefert die Slot-Id die das Statement beim Abspielen wieder ausf"uhren
85cdf0e10cSrcweir soll oder 0, falls das Statement manuell (<SFX_SLOT_RECORDMANUAL>)
86cdf0e10cSrcweir aufgezeichnet wurde.
87cdf0e10cSrcweir */
88cdf0e10cSrcweir
89cdf0e10cSrcweir {
90cdf0e10cSrcweir return nSlotId;
91cdf0e10cSrcweir }
92cdf0e10cSrcweir
93cdf0e10cSrcweir //--------------------------------------------------------------------
94cdf0e10cSrcweir
GetArgs() const95cdf0e10cSrcweir inline const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& SfxMacroStatement::GetArgs() const
96cdf0e10cSrcweir
97cdf0e10cSrcweir /* [Beschreibung]
98cdf0e10cSrcweir
99cdf0e10cSrcweir Liefert die Parameter mit denen Statement ausgef"uhrt wurde oder 0,
100cdf0e10cSrcweir falls das Statement manuell (<SFX_SLOT_RECORDMANUAL>) aufgezeichnet
101cdf0e10cSrcweir wurde.
102cdf0e10cSrcweir
103cdf0e10cSrcweir Der R"uckgabewert geh"ort dem SfxMacroStatement und ist nur im
104cdf0e10cSrcweir unmittelbar aufrufenden Stackframe g"ultig.
105cdf0e10cSrcweir */
106cdf0e10cSrcweir
107cdf0e10cSrcweir {
108cdf0e10cSrcweir return aArgs;
109cdf0e10cSrcweir }
110cdf0e10cSrcweir
111cdf0e10cSrcweir //--------------------------------------------------------------------
112cdf0e10cSrcweir
IsDone() const113cdf0e10cSrcweir inline sal_Bool SfxMacroStatement::IsDone() const
114cdf0e10cSrcweir
115cdf0e10cSrcweir /* [Beschreibung]
116cdf0e10cSrcweir
117cdf0e10cSrcweir Liefert TRUE, wenn das Statement wirklich ausgef"uhrt wurde,
118cdf0e10cSrcweir also z.B. nicht vom Benutzer abgebrochen wurde. Wurde es nicht
119cdf0e10cSrcweir wirklich ausgef"uhrt, dann wird es im BASIC-Source auskommentiert.
120cdf0e10cSrcweir */
121cdf0e10cSrcweir
122cdf0e10cSrcweir {
123cdf0e10cSrcweir return bDone;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir
126cdf0e10cSrcweir //--------------------------------------------------------------------
127cdf0e10cSrcweir
128cdf0e10cSrcweir /* [Beschreibung]
129cdf0e10cSrcweir
130cdf0e10cSrcweir Liefert das Statement in BASIC-Syntax. Wurde das Makro manuell erzeugt,
131cdf0e10cSrcweir wird genau der im Konstruktor angegebene String zur"uckgegeben, sonst
132cdf0e10cSrcweir der generierte Source-Code.
133cdf0e10cSrcweir
134cdf0e10cSrcweir Bei beiden Arten ist es m"oglich, da\s mehrere BASIC-Statements, jeweils
135cdf0e10cSrcweir mit CR/LF getrennt in dem String enthalten sind, da ein SFx-Statement
136cdf0e10cSrcweir ggf. in mehrere BASIC-Statements "ubersetzt wird.
137cdf0e10cSrcweir
138cdf0e10cSrcweir Statements f"ur die nicht <SfxRequest::Done()> gerufen wurde, werden
139cdf0e10cSrcweir mit einem vorangestellten 'rem' gekennzeichnet.
140cdf0e10cSrcweir */
141cdf0e10cSrcweir
GetStatement() const142cdf0e10cSrcweir inline const String& SfxMacroStatement::GetStatement() const
143cdf0e10cSrcweir {
144cdf0e10cSrcweir return aStatement;
145cdf0e10cSrcweir }
146cdf0e10cSrcweir
147cdf0e10cSrcweir //====================================================================
148cdf0e10cSrcweir
149cdf0e10cSrcweir enum SfxMacroMode
150cdf0e10cSrcweir
151cdf0e10cSrcweir /* [Beschreibung]
152cdf0e10cSrcweir
153cdf0e10cSrcweir Mit diesem enum wird bestimmt, ob eine <SfxMacro>-Instanz zum
154cdf0e10cSrcweir absoluten oder relativen Recorden erzeugt wurde, oder um ein
155cdf0e10cSrcweir existierendendes Makro zu Referenzieren.
156cdf0e10cSrcweir */
157cdf0e10cSrcweir
158cdf0e10cSrcweir {
159cdf0e10cSrcweir SFX_MACRO_EXISTING, /* es handelt sich um ein bereits
160cdf0e10cSrcweir exitistierendes Makro, welches lediglich
161cdf0e10cSrcweir referenziert wird */
162cdf0e10cSrcweir
163cdf0e10cSrcweir SFX_MACRO_RECORDINGABSOLUTE,/* dieses Makro soll aufgezeichnet werden,
164cdf0e10cSrcweir wobei die betroffenen Objekte m"oglichst
165cdf0e10cSrcweir direkt angesprochen werden sollen
166cdf0e10cSrcweir (Beispiel: "[doc.sdc]") */
167cdf0e10cSrcweir
168cdf0e10cSrcweir SFX_MACRO_RECORDINGRELATIVE/* dieses Makro soll aufgezeichnet werden,
169cdf0e10cSrcweir wobei die betroffenen Objekte so
170cdf0e10cSrcweir angesprochen werden sollen, da\s sich das
171cdf0e10cSrcweir Abspielen auf die dann g"ultige Selektion
172cdf0e10cSrcweir bezieht (Beispiel: "ActiveDocument()") */
173cdf0e10cSrcweir };
174cdf0e10cSrcweir
175cdf0e10cSrcweir //====================================================================
176cdf0e10cSrcweir
177cdf0e10cSrcweir class SfxMacro
178cdf0e10cSrcweir
179cdf0e10cSrcweir /* [Beschreibung]
180cdf0e10cSrcweir
181cdf0e10cSrcweir "Uber diese Klasse (bzw. genaugenommen ihre Subklassen) wird zum
182cdf0e10cSrcweir einen die Lokation einer BASIC-Funktion (also in welcher Library,
183cdf0e10cSrcweir in welchem Modul sowie der Funktions-Name) beschrieben, als auch
184cdf0e10cSrcweir ein aufzuzeichnendes Makro w"ahrend der Aufzeichnung zwischen-
185cdf0e10cSrcweir gespeichert.
186cdf0e10cSrcweir */
187cdf0e10cSrcweir
188cdf0e10cSrcweir {
189cdf0e10cSrcweir SfxMacro_Impl* pImp;
190cdf0e10cSrcweir
191cdf0e10cSrcweir public:
192cdf0e10cSrcweir SfxMacro( SfxMacroMode eMode = SFX_MACRO_RECORDINGRELATIVE );
193cdf0e10cSrcweir virtual ~SfxMacro();
194cdf0e10cSrcweir
195cdf0e10cSrcweir SfxMacroMode GetMode() const;
196cdf0e10cSrcweir void Record( SfxMacroStatement *pStatement );
197cdf0e10cSrcweir void Replace( SfxMacroStatement *pStatement );
198cdf0e10cSrcweir void Remove();
199cdf0e10cSrcweir const SfxMacroStatement*GetLastStatement() const;
200cdf0e10cSrcweir
201cdf0e10cSrcweir String GenerateSource() const;
202cdf0e10cSrcweir };
203cdf0e10cSrcweir
204cdf0e10cSrcweir #endif
205