xref: /aoo4110/main/sfx2/inc/macro.hxx (revision b1cdbd2c)
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 #ifndef _SFXMACRO_HXX
23 #define _SFXMACRO_HXX
24 
25 //====================================================================
26 #include <com/sun/star/beans/PropertyValue.hpp>
27 #include <com/sun/star/uno/Sequence.hxx>
28 
29 #include <tools/string.hxx>
30 
31 class SfxSlot;
32 class SfxShell;
33 struct SfxMacro_Impl;
34 class SfxMacro;
35 
36 //====================================================================
37 
38 class SfxMacroStatement
39 {
40 	sal_uInt16				nSlotId;	// ausgef"uhrte Slot-Id oder 0, wenn manuell
41     ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue > aArgs;      // aktuelle Parameter, falls nSlotId != 0
42 	String				aStatement; // Statement in BASIC-Syntax (ggf. mit CR/LF)
43 	sal_Bool				bDone;  	// auskommentieren wenn kein Done() gerufen
44 	void*				pDummy;		// f"ur alle F"alle zum kompatibel bleiben
45 
46 #ifdef _SFXMACRO_HXX
47 private:
48 	void				GenerateNameAndArgs_Impl( SfxMacro *pMacro,
49 												  const SfxSlot &rSlot,
50 												  sal_Bool bRequestDone,
51                                                   ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
52 #endif
53 
54 public:
55 						SfxMacroStatement( const SfxMacroStatement &rOrig );
56 
57 						SfxMacroStatement( const String &rTarget,
58 										   const SfxSlot &rSlot,
59 										   sal_Bool bRequestDone,
60                                            ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
61 
62 						SfxMacroStatement( const SfxShell &rShell,
63 										   const String &rTarget,
64 										   sal_Bool bAbsolute,
65 										   const SfxSlot &rSlot,
66 										   sal_Bool bRequestDone,
67                                            ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
68 
69 						SfxMacroStatement( const String &rStatment );
70 						~SfxMacroStatement();
71 
72 	sal_uInt16				GetSlotId() const;
73     const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& GetArgs() const;
74 	sal_Bool				IsDone() const;
75 	const String&		GetStatement() const;
76 };
77 
78 //--------------------------------------------------------------------
79 
GetSlotId() const80 inline sal_uInt16 SfxMacroStatement::GetSlotId() const
81 
82 /*  [Beschreibung]
83 
84 	Liefert die Slot-Id die das Statement beim Abspielen wieder ausf"uhren
85 	soll oder 0, falls das Statement manuell (<SFX_SLOT_RECORDMANUAL>)
86 	aufgezeichnet wurde.
87 */
88 
89 {
90 	return nSlotId;
91 }
92 
93 //--------------------------------------------------------------------
94 
GetArgs() const95 inline const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& SfxMacroStatement::GetArgs() const
96 
97 /*  [Beschreibung]
98 
99 	Liefert die Parameter mit denen Statement ausgef"uhrt wurde oder 0,
100 	falls das Statement	manuell (<SFX_SLOT_RECORDMANUAL>) aufgezeichnet
101 	wurde.
102 
103 	Der R"uckgabewert geh"ort dem SfxMacroStatement und ist nur im
104 	unmittelbar aufrufenden Stackframe g"ultig.
105 */
106 
107 {
108     return aArgs;
109 }
110 
111 //--------------------------------------------------------------------
112 
IsDone() const113 inline sal_Bool	SfxMacroStatement::IsDone() const
114 
115 /*  [Beschreibung]
116 
117 	Liefert TRUE, wenn das Statement wirklich ausgef"uhrt wurde,
118 	also z.B. nicht vom Benutzer abgebrochen wurde. Wurde es nicht
119 	wirklich ausgef"uhrt, dann wird es im BASIC-Source auskommentiert.
120 */
121 
122 {
123 	return bDone;
124 }
125 
126 //--------------------------------------------------------------------
127 
128 /*  [Beschreibung]
129 
130 	Liefert das Statement in BASIC-Syntax. Wurde das Makro manuell erzeugt,
131 	wird genau der im Konstruktor angegebene String zur"uckgegeben, sonst
132 	der generierte Source-Code.
133 
134 	Bei beiden Arten ist es m"oglich, da\s mehrere BASIC-Statements, jeweils
135 	mit CR/LF getrennt in dem String enthalten sind, da ein SFx-Statement
136 	ggf. in mehrere BASIC-Statements "ubersetzt wird.
137 
138 	Statements f"ur die nicht <SfxRequest::Done()> gerufen wurde, werden
139 	mit einem vorangestellten 'rem' gekennzeichnet.
140 */
141 
GetStatement() const142 inline const String& SfxMacroStatement::GetStatement() const
143 {
144 	return aStatement;
145 }
146 
147 //====================================================================
148 
149 enum SfxMacroMode
150 
151 /*	[Beschreibung]
152 
153 	Mit diesem enum wird bestimmt, ob eine <SfxMacro>-Instanz zum
154 	absoluten oder relativen Recorden erzeugt wurde, oder um ein
155 	existierendendes Makro zu Referenzieren.
156 */
157 
158 {
159 	SFX_MACRO_EXISTING,			/*	es handelt sich um ein bereits
160 									exitistierendes Makro, welches lediglich
161 									referenziert wird */
162 
163 	SFX_MACRO_RECORDINGABSOLUTE,/*	dieses Makro soll aufgezeichnet werden,
164 									wobei die betroffenen Objekte m"oglichst
165 									direkt angesprochen werden sollen
166 									(Beispiel: "[doc.sdc]") */
167 
168 	SFX_MACRO_RECORDINGRELATIVE/*   dieses Makro soll aufgezeichnet werden,
169 									wobei die betroffenen Objekte so
170 									angesprochen werden sollen, da\s sich das
171 									Abspielen auf die dann g"ultige Selektion
172 									bezieht (Beispiel: "ActiveDocument()") */
173 };
174 
175 //====================================================================
176 
177 class SfxMacro
178 
179 /*	[Beschreibung]
180 
181 	"Uber diese Klasse (bzw. genaugenommen ihre Subklassen) wird zum
182 	einen die Lokation einer BASIC-Funktion (also in welcher Library,
183 	in welchem Modul sowie der Funktions-Name) beschrieben, als auch
184 	ein aufzuzeichnendes Makro w"ahrend der Aufzeichnung zwischen-
185 	gespeichert.
186 */
187 
188 {
189 	SfxMacro_Impl*			pImp;
190 
191 public:
192                             SfxMacro( SfxMacroMode eMode = SFX_MACRO_RECORDINGRELATIVE );
193 	virtual 				~SfxMacro();
194 
195 	SfxMacroMode			GetMode() const;
196 	void					Record( SfxMacroStatement *pStatement );
197 	void					Replace( SfxMacroStatement *pStatement );
198 	void					Remove();
199 	const SfxMacroStatement*GetLastStatement() const;
200 
201 	String					GenerateSource() const;
202 };
203 
204 #endif
205