summaryrefslogtreecommitdiff
path: root/sw/inc/expfld.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/inc/expfld.hxx')
-rw-r--r--sw/inc/expfld.hxx411
1 files changed, 411 insertions, 0 deletions
diff --git a/sw/inc/expfld.hxx b/sw/inc/expfld.hxx
new file mode 100644
index 000000000000..a565244b89ba
--- /dev/null
+++ b/sw/inc/expfld.hxx
@@ -0,0 +1,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: */