1*38d50f7bSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*38d50f7bSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*38d50f7bSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*38d50f7bSAndrew Rist * distributed with this work for additional information 6*38d50f7bSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*38d50f7bSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*38d50f7bSAndrew Rist * "License"); you may not use this file except in compliance 9*38d50f7bSAndrew Rist * with the License. You may obtain a copy of the License at 10*38d50f7bSAndrew Rist * 11*38d50f7bSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*38d50f7bSAndrew Rist * 13*38d50f7bSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*38d50f7bSAndrew Rist * software distributed under the License is distributed on an 15*38d50f7bSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*38d50f7bSAndrew Rist * KIND, either express or implied. See the License for the 17*38d50f7bSAndrew Rist * specific language governing permissions and limitations 18*38d50f7bSAndrew Rist * under the License. 19*38d50f7bSAndrew Rist * 20*38d50f7bSAndrew Rist *************************************************************/ 21*38d50f7bSAndrew Rist 22*38d50f7bSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef SC_EDITUTIL_HXX 25cdf0e10cSrcweir #define SC_EDITUTIL_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "scdllapi.h" 28cdf0e10cSrcweir #include "address.hxx" 29cdf0e10cSrcweir #include <editeng/editeng.hxx> 30cdf0e10cSrcweir #include <svx/pageitem.hxx> 31cdf0e10cSrcweir #include <tools/date.hxx> 32cdf0e10cSrcweir #include <tools/time.hxx> 33cdf0e10cSrcweir #include <tools/gen.hxx> 34cdf0e10cSrcweir #include <tools/fract.hxx> 35cdf0e10cSrcweir 36cdf0e10cSrcweir 37cdf0e10cSrcweir class OutputDevice; 38cdf0e10cSrcweir class ScDocument; 39cdf0e10cSrcweir class ScPatternAttr; 40cdf0e10cSrcweir class ScEditEngineDefaulter; 41cdf0e10cSrcweir 42cdf0e10cSrcweir class ScEditUtil 43cdf0e10cSrcweir { 44cdf0e10cSrcweir ScDocument* pDoc; 45cdf0e10cSrcweir SCCOL nCol; 46cdf0e10cSrcweir SCROW nRow; 47cdf0e10cSrcweir SCTAB nTab; 48cdf0e10cSrcweir Point aScrPos; 49cdf0e10cSrcweir OutputDevice* pDev; // MapMode muss eingestellt sein 50cdf0e10cSrcweir double nPPTX; 51cdf0e10cSrcweir double nPPTY; 52cdf0e10cSrcweir Fraction aZoomX; 53cdf0e10cSrcweir Fraction aZoomY; 54cdf0e10cSrcweir 55cdf0e10cSrcweir static const char __FAR_DATA pCalcDelimiters[]; 56cdf0e10cSrcweir 57cdf0e10cSrcweir public: 58cdf0e10cSrcweir static String ModifyDelimiters( const String& rOld ); 59cdf0e10cSrcweir 60cdf0e10cSrcweir /// Retrieves string with paragraphs delimited by spaces 61cdf0e10cSrcweir static String GetSpaceDelimitedString( const EditEngine& rEngine ); 62cdf0e10cSrcweir 63cdf0e10cSrcweir /// Retrieves string with paragraphs delimited by new lines ('\n'). 64cdf0e10cSrcweir static String GetMultilineString( const EditEngine& rEngine ); 65cdf0e10cSrcweir 66cdf0e10cSrcweir public: ScEditUtil(ScDocument * pDocument,SCCOL nX,SCROW nY,SCTAB nZ,const Point & rScrPosPixel,OutputDevice * pDevice,double nScaleX,double nScaleY,const Fraction & rX,const Fraction & rY)67cdf0e10cSrcweir ScEditUtil( ScDocument* pDocument, SCCOL nX, SCROW nY, SCTAB nZ, 68cdf0e10cSrcweir const Point& rScrPosPixel, 69cdf0e10cSrcweir OutputDevice* pDevice, double nScaleX, double nScaleY, 70cdf0e10cSrcweir const Fraction& rX, const Fraction& rY ) : 71cdf0e10cSrcweir pDoc(pDocument),nCol(nX),nRow(nY),nTab(nZ), 72cdf0e10cSrcweir aScrPos(rScrPosPixel),pDev(pDevice), 73cdf0e10cSrcweir nPPTX(nScaleX),nPPTY(nScaleY),aZoomX(rX),aZoomY(rY) {} 74cdf0e10cSrcweir 75cdf0e10cSrcweir Rectangle GetEditArea( const ScPatternAttr* pPattern, sal_Bool bForceToTop ); 76cdf0e10cSrcweir }; 77cdf0e10cSrcweir 78cdf0e10cSrcweir 79cdf0e10cSrcweir class ScEditAttrTester 80cdf0e10cSrcweir { 81cdf0e10cSrcweir ScEditEngineDefaulter* pEngine; 82cdf0e10cSrcweir SfxItemSet* pEditAttrs; 83cdf0e10cSrcweir sal_Bool bNeedsObject; 84cdf0e10cSrcweir sal_Bool bNeedsCellAttr; 85cdf0e10cSrcweir 86cdf0e10cSrcweir public: 87cdf0e10cSrcweir ScEditAttrTester( ScEditEngineDefaulter* pEng ); 88cdf0e10cSrcweir ~ScEditAttrTester(); 89cdf0e10cSrcweir NeedsObject() const90cdf0e10cSrcweir sal_Bool NeedsObject() const { return bNeedsObject; } NeedsCellAttr() const91cdf0e10cSrcweir sal_Bool NeedsCellAttr() const { return bNeedsCellAttr; } GetAttribs() const92cdf0e10cSrcweir const SfxItemSet& GetAttribs() const { return *pEditAttrs; } 93cdf0e10cSrcweir }; 94cdf0e10cSrcweir 95cdf0e10cSrcweir 96cdf0e10cSrcweir // construct pool before constructing EditEngine, destroy pool after EditEngine 97cdf0e10cSrcweir class ScEnginePoolHelper 98cdf0e10cSrcweir { 99cdf0e10cSrcweir protected: 100cdf0e10cSrcweir SfxItemPool* pEnginePool; 101cdf0e10cSrcweir SfxItemSet* pDefaults; 102cdf0e10cSrcweir sal_Bool bDeleteEnginePool; 103cdf0e10cSrcweir sal_Bool bDeleteDefaults; 104cdf0e10cSrcweir 105cdf0e10cSrcweir ScEnginePoolHelper( SfxItemPool* pEnginePool, 106cdf0e10cSrcweir sal_Bool bDeleteEnginePool = sal_False ); 107cdf0e10cSrcweir ScEnginePoolHelper( const ScEnginePoolHelper& rOrg ); 108cdf0e10cSrcweir virtual ~ScEnginePoolHelper(); 109cdf0e10cSrcweir }; 110cdf0e10cSrcweir 111cdf0e10cSrcweir 112cdf0e10cSrcweir class SC_DLLPUBLIC ScEditEngineDefaulter : public ScEnginePoolHelper, public EditEngine 113cdf0e10cSrcweir { 114cdf0e10cSrcweir private: 115cdf0e10cSrcweir using EditEngine::SetText; 116cdf0e10cSrcweir 117cdf0e10cSrcweir public: 118cdf0e10cSrcweir /// bDeleteEnginePool: Engine becomes the owner of the pool 119cdf0e10cSrcweir /// and deletes it on destruction 120cdf0e10cSrcweir ScEditEngineDefaulter( SfxItemPool* pEnginePool, 121cdf0e10cSrcweir sal_Bool bDeleteEnginePool = sal_False ); 122cdf0e10cSrcweir /// If rOrg.bDeleteEnginePool: pool gets cloned and will be 123cdf0e10cSrcweir /// deleted on destruction. Defaults are not set. 124cdf0e10cSrcweir ScEditEngineDefaulter( const ScEditEngineDefaulter& rOrg ); 125cdf0e10cSrcweir virtual ~ScEditEngineDefaulter(); 126cdf0e10cSrcweir 127cdf0e10cSrcweir /// Creates a copy of SfxItemSet if bRememberCopy set 128cdf0e10cSrcweir void SetDefaults( const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True ); 129cdf0e10cSrcweir 130cdf0e10cSrcweir /// Becomes the owner of the SfxItemSet if bTakeOwnership set 131cdf0e10cSrcweir void SetDefaults( SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True ); 132cdf0e10cSrcweir 133cdf0e10cSrcweir /// Set the item in the default ItemSet which is created 134cdf0e10cSrcweir /// if it doesn't exist yet. 135cdf0e10cSrcweir /// The default ItemSet is then applied to each paragraph. 136cdf0e10cSrcweir void SetDefaultItem( const SfxPoolItem& rItem ); 137cdf0e10cSrcweir 138cdf0e10cSrcweir /// Returns the stored defaults, used to find non-default character attributes 139cdf0e10cSrcweir const SfxItemSet& GetDefaults(); 140cdf0e10cSrcweir 141cdf0e10cSrcweir /// Overwritten method to be able to apply defaults already set 142cdf0e10cSrcweir void SetText( const EditTextObject& rTextObject ); 143cdf0e10cSrcweir /// Current defaults are not applied, new defaults are applied 144cdf0e10cSrcweir void SetTextNewDefaults( const EditTextObject& rTextObject, 145cdf0e10cSrcweir const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True ); 146cdf0e10cSrcweir /// Current defaults are not applied, new defaults are applied 147cdf0e10cSrcweir void SetTextNewDefaults( const EditTextObject& rTextObject, 148cdf0e10cSrcweir SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True ); 149cdf0e10cSrcweir 150cdf0e10cSrcweir /// Overwritten method to be able to apply defaults already set 151cdf0e10cSrcweir void SetText( const String& rText ); 152cdf0e10cSrcweir /// Current defaults are not applied, new defaults are applied 153cdf0e10cSrcweir void SetTextNewDefaults( const String& rText, 154cdf0e10cSrcweir const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True ); 155cdf0e10cSrcweir /// Current defaults are not applied, new defaults are applied 156cdf0e10cSrcweir void SetTextNewDefaults( const String& rText, 157cdf0e10cSrcweir SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True ); 158cdf0e10cSrcweir 159cdf0e10cSrcweir /// Paragraph attributes that are not defaults are copied to 160cdf0e10cSrcweir /// character attributes and all paragraph attributes reset 161cdf0e10cSrcweir void RemoveParaAttribs(); 162cdf0e10cSrcweir 163cdf0e10cSrcweir /// Re-apply existing defaults if set, same as in SetText, 164cdf0e10cSrcweir /// but without EnableUndo/SetUpdateMode. 165cdf0e10cSrcweir void RepeatDefaults(); 166cdf0e10cSrcweir }; 167cdf0e10cSrcweir 168cdf0e10cSrcweir 169cdf0e10cSrcweir // 1/100 mm 170cdf0e10cSrcweir class SC_DLLPUBLIC ScTabEditEngine : public ScEditEngineDefaulter 171cdf0e10cSrcweir { 172cdf0e10cSrcweir private: 173cdf0e10cSrcweir void Init(const ScPatternAttr& rPattern); 174cdf0e10cSrcweir public: 175cdf0e10cSrcweir ScTabEditEngine( ScDocument* pDoc ); // Default 176cdf0e10cSrcweir // pEnginePool = ScDocument.GetEnginePool() 177cdf0e10cSrcweir // pTextObjectPool = ScDocument.GetEditPool() 178cdf0e10cSrcweir ScTabEditEngine( const ScPatternAttr& rPattern, 179cdf0e10cSrcweir SfxItemPool* pEnginePool, 180cdf0e10cSrcweir SfxItemPool* pTextObjectPool = NULL ); 181cdf0e10cSrcweir }; 182cdf0e10cSrcweir 183cdf0e10cSrcweir 184cdf0e10cSrcweir struct ScHeaderFieldData 185cdf0e10cSrcweir { 186cdf0e10cSrcweir String aTitle; // Titel oder Dateiname wenn kein Titel 187cdf0e10cSrcweir String aLongDocName; // Pfad und Dateiname 188cdf0e10cSrcweir String aShortDocName; // nur Dateiname 189cdf0e10cSrcweir String aTabName; 190cdf0e10cSrcweir Date aDate; 191cdf0e10cSrcweir Time aTime; 192cdf0e10cSrcweir long nPageNo; 193cdf0e10cSrcweir long nTotalPages; 194cdf0e10cSrcweir SvxNumType eNumType; 195cdf0e10cSrcweir 196cdf0e10cSrcweir ScHeaderFieldData(); 197cdf0e10cSrcweir }; 198cdf0e10cSrcweir 199cdf0e10cSrcweir 200cdf0e10cSrcweir // fuer Feldbefehle in der Tabelle 201cdf0e10cSrcweir class SC_DLLPUBLIC ScFieldEditEngine : public ScEditEngineDefaulter 202cdf0e10cSrcweir { 203cdf0e10cSrcweir private: 204cdf0e10cSrcweir sal_Bool bExecuteURL; 205cdf0e10cSrcweir 206cdf0e10cSrcweir public: 207cdf0e10cSrcweir // pEnginePool = ScDocument.GetEnginePool() 208cdf0e10cSrcweir // pTextObjectPool = ScDocument.GetEditPool() 209cdf0e10cSrcweir ScFieldEditEngine( SfxItemPool* pEnginePool, 210cdf0e10cSrcweir SfxItemPool* pTextObjectPool = NULL, 211cdf0e10cSrcweir sal_Bool bDeleteEnginePool = sal_False ); 212cdf0e10cSrcweir SetExecuteURL(sal_Bool bSet)213cdf0e10cSrcweir void SetExecuteURL(sal_Bool bSet) { bExecuteURL = bSet; } 214cdf0e10cSrcweir 215cdf0e10cSrcweir virtual void FieldClicked( const SvxFieldItem& rField, sal_uInt16, sal_uInt16 ); 216cdf0e10cSrcweir virtual String CalcFieldValue( const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, Color*& rTxtColor, Color*& rFldColor ); 217cdf0e10cSrcweir }; 218cdf0e10cSrcweir 219cdf0e10cSrcweir 220cdf0e10cSrcweir // for headers/footers with fields 221cdf0e10cSrcweir class SC_DLLPUBLIC ScHeaderEditEngine : public ScEditEngineDefaulter 222cdf0e10cSrcweir { 223cdf0e10cSrcweir private: 224cdf0e10cSrcweir ScHeaderFieldData aData; 225cdf0e10cSrcweir 226cdf0e10cSrcweir public: 227cdf0e10cSrcweir ScHeaderEditEngine( SfxItemPool* pEnginePool, sal_Bool bDeleteEnginePool = sal_False ); 228cdf0e10cSrcweir virtual String CalcFieldValue( const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, Color*& rTxtColor, Color*& rFldColor ); 229cdf0e10cSrcweir SetTitle(const String & rNew)230cdf0e10cSrcweir void SetTitle(const String& rNew) { aData.aTitle = rNew; } SetLongDocName(const String & rNew)231cdf0e10cSrcweir void SetLongDocName(const String& rNew) { aData.aLongDocName = rNew; } SetShortDocName(const String & rNew)232cdf0e10cSrcweir void SetShortDocName(const String& rNew) { aData.aShortDocName = rNew; } SetTabName(const String & rNew)233cdf0e10cSrcweir void SetTabName(const String& rNew) { aData.aTabName = rNew; } SetDate(const Date & rNew)234cdf0e10cSrcweir void SetDate(const Date& rNew) { aData.aDate = rNew; } SetTime(const Time & rNew)235cdf0e10cSrcweir void SetTime(const Time& rNew) { aData.aTime = rNew; } SetPageNo(long nNew)236cdf0e10cSrcweir void SetPageNo(long nNew) { aData.nPageNo = nNew; } SetTotalPages(long nNew)237cdf0e10cSrcweir void SetTotalPages(long nNew) { aData.nTotalPages = nNew; } SetNumType(SvxNumType eNew)238cdf0e10cSrcweir void SetNumType(SvxNumType eNew) { aData.eNumType = eNew; } SetData(const ScHeaderFieldData & rNew)239cdf0e10cSrcweir void SetData(const ScHeaderFieldData& rNew) { aData = rNew; } 240cdf0e10cSrcweir }; 241cdf0e10cSrcweir 242cdf0e10cSrcweir // for Note text objects. 243cdf0e10cSrcweir class ScNoteEditEngine : public ScEditEngineDefaulter 244cdf0e10cSrcweir { 245cdf0e10cSrcweir 246cdf0e10cSrcweir public: 247cdf0e10cSrcweir // pEnginePool = ScDocument.GetEnginePool() 248cdf0e10cSrcweir // pTextObjectPool = ScDocument.GetEditPool() 249cdf0e10cSrcweir ScNoteEditEngine( SfxItemPool* pEnginePool, 250cdf0e10cSrcweir SfxItemPool* pTextObjectPool = NULL, 251cdf0e10cSrcweir sal_Bool bDeleteEnginePool = sal_False ); 252cdf0e10cSrcweir 253cdf0e10cSrcweir }; 254cdf0e10cSrcweir 255cdf0e10cSrcweir // SvxFieldData-Ableitungen sind nach Svx verschoben 256cdf0e10cSrcweir 257cdf0e10cSrcweir 258cdf0e10cSrcweir #endif 259cdf0e10cSrcweir 260cdf0e10cSrcweir 261