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 SW_DBFLD_HXX 24 #define SW_DBFLD_HXX 25 26 #include "swdllapi.h" 27 #include "fldbas.hxx" 28 #include "swdbdata.hxx" 29 30 class SwDoc; 31 class SwTxtFld; 32 class SwFrm; 33 34 /*-------------------------------------------------------------------- 35 Beschreibung: Datenbankfeld 36 --------------------------------------------------------------------*/ 37 38 class SW_DLLPUBLIC SwDBFieldType : public SwValueFieldType 39 { 40 SwDBData aDBData; // 41 String sName; // only used in ::GetName() ! 42 String sColumn; 43 long nRefCnt; 44 45 public: 46 47 SwDBFieldType(SwDoc* pDocPtr, const String& rColumnName, const SwDBData& rDBData); 48 ~SwDBFieldType(); 49 50 virtual const String& GetName() const; 51 virtual SwFieldType* Copy() const; 52 53 inline void AddRef() { nRefCnt++; } 54 void ReleaseRef(); 55 56 const String& GetColumnName() const {return sColumn;} 57 const SwDBData& GetDBData() const {return aDBData;} 58 59 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 60 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 61 }; 62 63 /*-------------------------------------------------------------------- 64 Beschreibung: 65 von SwFields abgeleitete Klassen. Sie ueberlagern die Expand-Funktion. 66 Der Inhalt wird entsprechend dem Format, soweit vorhanden, formatiert. 67 --------------------------------------------------------------------*/ 68 69 class SW_DLLPUBLIC SwDBField : public SwValueField 70 { 71 String aContent; 72 String sFieldCode; // contains Word's field code 73 sal_uInt16 nSubType; 74 sal_Bool bIsInBodyTxt : 1; 75 sal_Bool bValidValue : 1; 76 sal_Bool bInitialized : 1; 77 78 virtual String Expand() const; 79 virtual SwField* Copy() const; 80 81 public: 82 SwDBField(SwDBFieldType*, sal_uLong nFmt = 0); 83 virtual ~SwDBField(); 84 85 virtual SwFieldType* ChgTyp( SwFieldType* ); 86 87 // Der aktuelle Text 88 inline void SetExpansion(const String& rStr); 89 90 virtual sal_uInt16 GetSubType() const; 91 virtual void SetSubType(sal_uInt16 nType); 92 93 virtual String GetFieldName() const; 94 95 // fuer Berechnungen in Ausdruecken 96 void ChgValue( double d, sal_Bool bVal ); 97 98 // Evaluierung ueber den DBMgr String rauspulen 99 void Evaluate(); 100 101 // Evaluierung fuer Kopf und Fusszeilen 102 void ChangeExpansion( const SwFrm*, const SwTxtFld* ); 103 void InitContent(); 104 void InitContent(const String& rExpansion); 105 106 inline void ChgBodyTxtFlag( sal_Bool bIsInBody ); 107 108 inline sal_Bool IsInitialized() const { return bInitialized; } 109 inline void ClearInitialized() { bInitialized = sal_False; } 110 inline void SetInitialized() { bInitialized = sal_True; } 111 112 // Name erfragen 113 virtual const String& GetPar1() const; 114 115 // access to the command string 116 const String& GetFieldCode() const 117 { return sFieldCode;} 118 void SetFieldCode(const String& rStr) 119 { sFieldCode = rStr; } 120 121 // DBName 122 inline const SwDBData& GetDBData() const { return ((SwDBFieldType*)GetTyp())->GetDBData(); } 123 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 124 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 125 }; 126 127 inline void SwDBField::SetExpansion(const String& rStr) 128 { aContent = rStr; } 129 130 // wird von UpdateExpFlds gesetzt (dort ist die Node-Position bekannt) 131 inline void SwDBField::ChgBodyTxtFlag( sal_Bool bIsInBody ) 132 { bIsInBodyTxt = bIsInBody; } 133 134 /*-------------------------------------------------------------------- 135 Beschreibung: Basisklasse fuer alle weiteren Datenbankfelder 136 --------------------------------------------------------------------*/ 137 138 class SW_DLLPUBLIC SwDBNameInfField : public SwField 139 { 140 SwDBData aDBData; 141 sal_uInt16 nSubType; 142 143 protected: 144 const SwDBData& GetDBData() const {return aDBData;} 145 SwDBData& GetDBData() {return aDBData;} 146 147 SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFmt = 0); 148 149 public: 150 // DBName 151 inline const SwDBData& GetRealDBData() { return aDBData; } 152 153 SwDBData GetDBData(SwDoc* pDoc); 154 void SetDBData(const SwDBData& rDBData); // #111840# 155 156 virtual String GetFieldName() const; 157 158 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 159 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 160 virtual sal_uInt16 GetSubType() const; 161 virtual void SetSubType(sal_uInt16 nType); 162 }; 163 164 165 /*-------------------------------------------------------------------- 166 Beschreibung: Datenbankfeld Naechster Satz 167 --------------------------------------------------------------------*/ 168 169 class SW_DLLPUBLIC SwDBNextSetFieldType : public SwFieldType 170 { 171 public: 172 SwDBNextSetFieldType(); 173 174 virtual SwFieldType* Copy() const; 175 }; 176 177 178 /*-------------------------------------------------------------------- 179 Beschreibung: Naechsten Datensatz mit Bedingung 180 --------------------------------------------------------------------*/ 181 182 class SW_DLLPUBLIC SwDBNextSetField : public SwDBNameInfField 183 { 184 String aCond; 185 sal_Bool bCondValid; 186 187 public: 188 SwDBNextSetField( SwDBNextSetFieldType*, 189 const String& rCond, const String& rDummy, const SwDBData& rDBData); 190 191 virtual String Expand() const; 192 virtual SwField* Copy() const; 193 194 void Evaluate(SwDoc*); 195 inline void SetCondValid(sal_Bool bCond); 196 inline sal_Bool IsCondValid() const; 197 198 // Condition 199 virtual const String& GetPar1() const; 200 virtual void SetPar1(const String& rStr); 201 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 202 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 203 }; 204 205 inline sal_Bool SwDBNextSetField::IsCondValid() const 206 { return bCondValid; } 207 208 inline void SwDBNextSetField::SetCondValid(sal_Bool bCond) 209 { bCondValid = bCond; } 210 211 /*-------------------------------------------------------------------- 212 Beschreibung: Datenbankfeld Naechster Satz 213 --------------------------------------------------------------------*/ 214 215 class SwDBNumSetFieldType : public SwFieldType 216 { 217 public: 218 SwDBNumSetFieldType(); 219 220 virtual SwFieldType* Copy() const; 221 }; 222 223 224 /*-------------------------------------------------------------------- 225 Beschreibung: Datensatz mit Nummer xxx 226 Die Nummer steht in nFormat 227 ! kleiner Missbrauch 228 --------------------------------------------------------------------*/ 229 230 class SwDBNumSetField : public SwDBNameInfField 231 { 232 String aCond; 233 String aPar2; 234 sal_Bool bCondValid; 235 236 public: 237 SwDBNumSetField(SwDBNumSetFieldType*, const String& rCond, const String& rDBNum, const SwDBData& rDBData); 238 239 virtual String Expand() const; 240 virtual SwField* Copy() const; 241 242 inline sal_Bool IsCondValid() const; 243 inline void SetCondValid(sal_Bool bCond); 244 void Evaluate(SwDoc*); 245 246 // Condition 247 virtual const String& GetPar1() const; 248 virtual void SetPar1(const String& rStr); 249 250 // Datensatznummer 251 virtual String GetPar2() const; 252 virtual void SetPar2(const String& rStr); 253 254 // Die Datensatznummer steht in nFormat !! 255 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 256 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 257 }; 258 259 inline sal_Bool SwDBNumSetField::IsCondValid() const 260 { return bCondValid; } 261 262 inline void SwDBNumSetField::SetCondValid(sal_Bool bCond) 263 { bCondValid = bCond; } 264 265 /*-------------------------------------------------------------------- 266 Beschreibung: Datenbankname 267 --------------------------------------------------------------------*/ 268 269 class SwDBNameFieldType : public SwFieldType 270 { 271 SwDoc *pDoc; 272 public: 273 SwDBNameFieldType(SwDoc*); 274 275 String Expand(sal_uLong) const; 276 virtual SwFieldType* Copy() const; 277 }; 278 279 /*-------------------------------------------------------------------- 280 Beschreibung: Datenbankfeld 281 --------------------------------------------------------------------*/ 282 283 class SW_DLLPUBLIC SwDBNameField : public SwDBNameInfField 284 { 285 public: 286 SwDBNameField(SwDBNameFieldType*, const SwDBData& rDBData, sal_uLong nFmt = 0); 287 288 virtual String Expand() const; 289 virtual SwField* Copy() const; 290 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 291 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 292 }; 293 294 /*-------------------------------------------------------------------- 295 Beschreibung: Datensatznummer 296 --------------------------------------------------------------------*/ 297 298 class SW_DLLPUBLIC SwDBSetNumberFieldType : public SwFieldType 299 { 300 public: 301 SwDBSetNumberFieldType(); 302 303 virtual SwFieldType* Copy() const; 304 }; 305 306 /*-------------------------------------------------------------------- 307 Beschreibung: Datenbankfeld 308 --------------------------------------------------------------------*/ 309 310 class SW_DLLPUBLIC SwDBSetNumberField : public SwDBNameInfField 311 { 312 long nNumber; 313 314 public: 315 SwDBSetNumberField(SwDBSetNumberFieldType*, const SwDBData& rDBData, sal_uLong nFmt = 0); 316 317 virtual String Expand() const; 318 virtual SwField* Copy() const; 319 void Evaluate(SwDoc*); 320 321 inline long GetSetNumber() const; 322 inline void SetSetNumber(long nNum); 323 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; 324 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); 325 }; 326 327 inline long SwDBSetNumberField::GetSetNumber() const 328 { return nNumber; } 329 330 inline void SwDBSetNumberField::SetSetNumber(long nNum) 331 { nNumber = nNum; } 332 333 334 #endif // SW_DBFLD_HXX 335