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