1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef SW_EXPFLD_HXX
#define SW_EXPFLD_HXX
#include <svl/svarray.hxx>
#include "swdllapi.h"
#include <fldbas.hxx>
#include <cellfml.hxx>
class SfxPoolItem;
class SwTxtNode;
class SwFrm;
struct SwPosition;
class SwTxtFld;
class SwDoc;
class SwFmtFld;
class _SetGetExpFlds;
class SwEditShell;
// Forward declaration: get "BodyTxtNode" for exp.fld in Fly's headers/footers/footnotes.
const SwTxtNode* GetBodyTxtNode( const SwDoc& pDoc, SwPosition& rPos,
const SwFrm& rFrm );
void ReplacePoint(String& sTmpName, sal_Bool bWithCommandType = sal_False);
struct _SeqFldLstElem
{
String sDlgEntry;
sal_uInt16 nSeqNo;
_SeqFldLstElem( const String& rStr, sal_uInt16 nNo )
: sDlgEntry( rStr ), nSeqNo( nNo )
{}
};
SV_DECL_PTRARR_DEL( _SwSeqFldList, _SeqFldLstElem*, 10, 10 )
class SW_DLLPUBLIC SwSeqFldList : public _SwSeqFldList
{
public:
SwSeqFldList() : _SwSeqFldList( 10, 10 ) {}
sal_Bool InsertSort( _SeqFldLstElem* );
sal_Bool SeekEntry( const _SeqFldLstElem& , sal_uInt16* pPos = 0 );
};
class SwGetExpFieldType : public SwValueFieldType
{
public:
SwGetExpFieldType(SwDoc* pDoc);
virtual SwFieldType* Copy() const;
// Overlay, because get-field cannot be changed and therefore
// does not need to be updated. Update at changing of set-values!
protected:
virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew );
};
class SW_DLLPUBLIC SwGetExpField : public SwFormulaField
{
String sExpand;
sal_Bool bIsInBodyTxt;
sal_uInt16 nSubType;
bool bLateInitialization; // #i82544#
virtual String Expand() const;
virtual SwField* Copy() const;
public:
SwGetExpField( SwGetExpFieldType*, const String& rFormel,
sal_uInt16 nSubType = nsSwGetSetExpType::GSE_EXPR, sal_uLong nFmt = 0);
virtual void SetValue( const double& rVal );
virtual void SetLanguage(sal_uInt16 nLng);
inline const String& GetExpStr() const;
inline void ChgExpStr(const String& rExpand);
// Called by formating.
inline sal_Bool IsInBodyTxt() const;
// Set by UpdateExpFlds where node position is known.
inline void ChgBodyTxtFlag( sal_Bool bIsInBody );
// For fields in header/footer/footnotes/flys:
// Only called by formating!!
void ChangeExpansion( const SwFrm&, const SwTxtFld& );
virtual String GetFieldName() const;
// Change formula.
virtual String GetPar2() const;
virtual void SetPar2(const String& rStr);
virtual sal_uInt16 GetSubType() const;
virtual void SetSubType(sal_uInt16 nType);
virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
static sal_uInt16 GetReferenceTextPos( const SwFmtFld& rFmt, SwDoc& rDoc);
// #i82544#
void SetLateInitialization() { bLateInitialization = true;}
};
inline void SwGetExpField::ChgExpStr(const String& rExpand)
{ sExpand = rExpand;}
inline const String& SwGetExpField::GetExpStr() const
{ return sExpand; }
// Called by formating.
inline sal_Bool SwGetExpField::IsInBodyTxt() const
{ return bIsInBodyTxt; }
// Set by UpdateExpFlds where node position is known.
inline void SwGetExpField::ChgBodyTxtFlag( sal_Bool bIsInBody )
{ bIsInBodyTxt = bIsInBody; }
class SwSetExpField;
class SW_DLLPUBLIC SwSetExpFieldType : public SwValueFieldType
{
String sName;
const SwNode* pOutlChgNd;
String sDelim;
sal_uInt16 nType;
sal_uInt8 nLevel;
sal_Bool bDeleted;
protected:
virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew );
public:
SwSetExpFieldType( SwDoc* pDoc, const String& rName,
sal_uInt16 nType = nsSwGetSetExpType::GSE_EXPR );
virtual SwFieldType* Copy() const;
virtual const String& GetName() const;
inline void SetType(sal_uInt16 nTyp);
inline sal_uInt16 GetType() const;
void SetSeqFormat(sal_uLong nFormat);
sal_uLong GetSeqFormat();
sal_Bool IsDeleted() const { return bDeleted; }
void SetDeleted( sal_Bool b ) { bDeleted = b; }
// Overlay, because set-field takes care for its being updated by itself.
inline const String& GetSetRefName() const;
sal_uInt16 SetSeqRefNo( SwSetExpField& rFld );
sal_uInt16 GetSeqFldList( SwSeqFldList& rList );
String MakeSeqName( sal_uInt16 nSeqNo );
// Number sequence fields chapterwise if required.
const String& GetDelimiter() const { return sDelim; }
void SetDelimiter( const String& s ) { sDelim = s; }
sal_uInt8 GetOutlineLvl() const { return nLevel; }
void SetOutlineLvl( sal_uInt8 n ) { nLevel = n; }
void SetChapter( SwSetExpField& rFld, const SwNode& rNd );
// Member only for SwDoc::UpdateExpFld.
// It is needed only at runtime of sequence field types!
const SwNode* GetOutlineChgNd() const { return pOutlChgNd; }
void SetOutlineChgNd( const SwNode* p ) { pOutlChgNd = p; }
virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
};
inline void SwSetExpFieldType::SetType( sal_uInt16 nTyp )
{
nType = nTyp;
EnableFormat( !(nType & (nsSwGetSetExpType::GSE_SEQ|nsSwGetSetExpType::GSE_STRING)));
}
inline sal_uInt16 SwSetExpFieldType::GetType() const
{ return nType; }
inline const String& SwSetExpFieldType::GetSetRefName() const
{ return sName; }
class SW_DLLPUBLIC SwSetExpField : public SwFormulaField
{
String sExpand;
String aPText;
String aSeqText;
sal_Bool bInput;
sal_uInt16 nSeqNo;
sal_uInt16 nSubType;
virtual String Expand() const;
virtual SwField* Copy() const;
public:
SwSetExpField(SwSetExpFieldType*, const String& rFormel, sal_uLong nFmt = 0);
virtual void SetValue( const double& rVal );
inline const String& GetExpStr() const;
inline void ChgExpStr( const String& rExpand );
inline void SetPromptText(const String& rStr);
inline const String& GetPromptText() const;
inline void SetInputFlag(sal_Bool bInp);
inline sal_Bool GetInputFlag() const;
virtual String GetFieldName() const;
virtual sal_uInt16 GetSubType() const;
virtual void SetSubType(sal_uInt16 nType);
inline sal_Bool IsSequenceFld() const;
// Logical number, sequence fields.
inline void SetSeqNumber( sal_uInt16 n ) { nSeqNo = n; }
inline sal_uInt16 GetSeqNumber() const { return nSeqNo; }
// Query name only.
virtual const String& GetPar1() const;
// Query formula.
virtual String GetPar2() const;
virtual void SetPar2(const String& rStr);
virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
};
inline const String& SwSetExpField::GetExpStr() const
{ return sExpand; }
inline void SwSetExpField::ChgExpStr( const String& rExpand )
{ sExpand = rExpand; }
inline void SwSetExpField::SetPromptText(const String& rStr)
{ aPText = rStr; }
inline const String& SwSetExpField::GetPromptText() const
{ return aPText; }
inline void SwSetExpField::SetInputFlag(sal_Bool bInp)
{ bInput = bInp; }
inline sal_Bool SwSetExpField::GetInputFlag() const
{ return bInput; }
inline sal_Bool SwSetExpField::IsSequenceFld() const
{ return 0 != (nsSwGetSetExpType::GSE_SEQ & ((SwSetExpFieldType*)GetTyp())->GetType()); }
class SwInputFieldType : public SwFieldType
{
SwDoc* pDoc;
public:
SwInputFieldType( SwDoc* pDoc );
virtual SwFieldType* Copy() const;
SwDoc* GetDoc() const { return pDoc; }
};
class SW_DLLPUBLIC SwInputField : public SwField
{
String aContent;
String aPText;
String aHelp;
String aToolTip;
sal_uInt16 nSubType;
virtual String Expand() const;
virtual SwField* Copy() const;
public:
// Direct input via dialog; delete old value.
SwInputField(SwInputFieldType*, const String& rContent ,
const String& rPrompt, sal_uInt16 nSubType = 0,
sal_uLong nFmt = 0);
virtual String GetFieldName() const;
// Content
virtual const String& GetPar1() const;
virtual void SetPar1(const String& rStr);
// aPromptText
virtual String GetPar2() const;
virtual void SetPar2(const String& rStr);
virtual String GetHelp() const;
virtual void SetHelp(const String & rStr);
virtual String GetToolTip() const;
virtual void SetToolTip(const String & rStr);
virtual sal_Bool isFormField() const;
virtual sal_uInt16 GetSubType() const;
virtual void SetSubType(sal_uInt16 nSub);
virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
};
/*--------------------------------------------------------------------
Description: Sorted list of input fields and DropDown fields
--------------------------------------------------------------------*/
class SwInputFieldList
{
public:
SwInputFieldList( SwEditShell* pShell, sal_Bool bBuildTmpLst = sal_False );
~SwInputFieldList();
sal_uInt16 Count() const;
SwField* GetField(sal_uInt16 nId);
void GotoFieldPos(sal_uInt16 nId);
void PushCrsr();
void PopCrsr();
// Put all that are new into SortLst for updating. Returns count.
// (For Glossary: only update its input-fields).
// Compare TmpLst with current fields.
sal_uInt16 BuildSortLst();
void RemoveUnselectedFlds();
private:
SwEditShell* pSh;
_SetGetExpFlds* pSrtLst;
SvPtrarr aTmpLst;
};
// Implementation in tblcalc.cxx.
class SwTblFieldType : public SwValueFieldType
{
public:
SwTblFieldType(SwDoc* pDocPtr);
virtual SwFieldType* Copy() const;
};
class SwTblField : public SwValueField, public SwTableFormula
{
String sExpand;
sal_uInt16 nSubType;
virtual String Expand() const;
virtual SwField* Copy() const;
// Search TextNode containing the field.
virtual const SwNode* GetNodeOfFormula() const;
String GetCommand();
public:
SwTblField( SwTblFieldType*, const String& rFormel,
sal_uInt16 nSubType = 0, sal_uLong nFmt = 0);
virtual void SetValue( const double& rVal );
virtual sal_uInt16 GetSubType() const;
virtual void SetSubType(sal_uInt16 nType);
const String& GetExpStr() const { return sExpand; }
void ChgExpStr(const String& rStr) { sExpand = rStr; }
void CalcField( SwTblCalcPara& rCalcPara );
virtual String GetFieldName() const;
// The formula.
virtual String GetPar2() const;
virtual void SetPar2(const String& rStr);
virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
};
#endif // SW_EXPFLD_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|