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 80 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 95 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 113 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 142 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