textrendering/texthandling/stext/TXTGLOBL.CPP
changeset 0 1fb32624e06b
child 40 91ef7621b7fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/texthandling/stext/TXTGLOBL.CPP	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include <gdi.h>
+
+#include "TXTFMLYR.H"
+#include "TXTGLOBL.H"
+
+#include "TXTSTD.H"
+
+/**
+@internalAll
+*/
+EXPORT_C void MLayDoc::MLayDoc_Reserved_1() {}
+EXPORT_C void CGlobalText::__DbgTestInvariant()const
+// Class Invariants.
+//
+	{
+#ifdef _DEBUG
+// ASSERT: The global format layers are never null.
+	__ASSERT_DEBUG(iGlobalParaFormatLayer!=NULL,User::Invariant());
+	__ASSERT_DEBUG(iGlobalCharFormatLayer!=NULL,User::Invariant());
+#endif
+	}
+
+
+EXPORT_C CGlobalText* CGlobalText::NewL(const CParaFormatLayer* aGlobalParaLayer,const CCharFormatLayer* aGlobalCharLayer,
+										TDocumentStorage aStorage,TInt aDefaultTextGranularity)
+/** Allocates and constructs an empty global text object with a paragraph and a 
+character format layer. A single end-of-document delimiter is inserted.
+
+@param aGlobalParaLayer Pointer to the paragraph format layer referenced by 
+the text object. Must not be NULL, or a panic occurs. 
+@param aGlobalCharLayer Pointer to the character format layer referenced by 
+the text object. Must not be NULL, or a panic occurs. 
+@param aStorage The type of in-memory buffer to use. Defaults to 
+ESegmentedStorage. 
+@param aDefaultTextGranularity Specifies the granularity of the in-memory buffer. 
+Default is EDefaultTextGranularity bytes (=256). 
+@return Pointer to the global text object. */
+	{
+	__ASSERT_ALWAYS(aGlobalParaLayer!=NULL,Panic(ENullFormatLayerHandle));
+	__ASSERT_ALWAYS(aGlobalCharLayer!=NULL,Panic(ENullFormatLayerHandle));
+
+	CGlobalText* self=new(ELeave) CGlobalText(aGlobalParaLayer,aGlobalCharLayer);
+	CleanupStack::PushL(self);
+	self->ConstructL(aStorage,aDefaultTextGranularity);
+	CleanupStack::Pop();
+	return self;
+	}
+
+EXPORT_C CGlobalText* CGlobalText::NewL(const CStreamStore& aStore,TStreamId aStreamId,
+										const CParaFormatLayer* aGlobalParaLayer,const CCharFormatLayer* aGlobalCharLayer,
+										MTextFieldFactory* aFactory,
+										TDocumentStorage aStorage)
+/** Returns a handle to a new instance of this class, whose textual content is 
+restored from the specified read-stream.  The global text object *uses* (does 
+not own) the supplied global format layers.*/
+	{
+	__ASSERT_ALWAYS(aGlobalParaLayer!=NULL,Panic(ENullFormatLayerHandle));
+	__ASSERT_ALWAYS(aGlobalCharLayer!=NULL,Panic(ENullFormatLayerHandle));
+
+	CGlobalText* self=new(ELeave) CGlobalText(aGlobalParaLayer,aGlobalCharLayer);
+	CleanupStack::PushL(self);
+	self->ConstructL(aStore,aStreamId,aFactory,aStorage);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+EXPORT_C CGlobalText::CGlobalText()
+	{}
+
+
+EXPORT_C CGlobalText::CGlobalText(const CParaFormatLayer* aGlobalParaLayer,const CCharFormatLayer* aGlobalCharLayer):
+	iGlobalParaFormatLayer(aGlobalParaLayer),
+	iGlobalCharFormatLayer(aGlobalCharLayer)
+	{
+	__TEST_INVARIANT;
+	}
+
+EXPORT_C CGlobalText::~CGlobalText()
+/** The destructor is empty, and is present only to cause the virtual function 
+table to be defined in a unique module. */
+	{}
+
+EXPORT_C void CGlobalText::SetGlobalParaFormat(const CParaFormatLayer* aParaFormatLayer)
+/** Replaces the paragraph format layer referenced by the global text object.
+
+@param aParaFormatLayer Pointer to the paragraph format layer to be referenced 
+by the global text object. */
+	{
+	iGlobalParaFormatLayer=aParaFormatLayer;
+	CEditableText::SetHasChanged(ETrue);
+	
+	__TEST_INVARIANT;
+	}
+
+EXPORT_C void CGlobalText::SetGlobalCharFormat(const CCharFormatLayer* aCharFormatLayer)
+/** Replaces the character format layer referenced by the global text object.
+
+@param aCharFormatLayer Pointer to the character format layer to be referenced 
+by the global text object. */
+	{
+	iGlobalCharFormatLayer=aCharFormatLayer;
+	CEditableText::SetHasChanged(ETrue);
+	
+	__TEST_INVARIANT;
+	}
+
+ 
+EXPORT_C void CGlobalText::ApplyParaFormatL(const CParaFormat* aFormat,const TParaFormatMask& aMask,
+											TInt /*aPos*/,TInt /*aLength*/)
+/** Changes the text object's paragraph formatting. The attributes which are 
+set in the mask are read from aFormat into the text object's paragraph format 
+layer. The attributes which are not set in the mask are not changed. Note 
+that the position and length arguments are only used in the rich text 
+implementation of this function.
+
+@param aFormat Contains the paragraph format attribute values to apply. 
+@param aMask Bitmask specifying the paragraph format attributes to change. 
+@param aPos This argument is not used for global text. 
+@param aLength This argument is not used for global text. */
+	{
+ 
+	__TEST_INVARIANT;
+
+	TParaFormatMask applyMask=aMask;
+	CParaFormat* pf=CParaFormat::NewL(*aFormat);
+	CleanupStack::PushL(pf);
+	iGlobalParaFormatLayer->SenseL(pf,applyMask);
+	CONST_CAST(CParaFormatLayer*,iGlobalParaFormatLayer)->SetL(pf,applyMask);
+	CleanupStack::PopAndDestroy();  // pf
+	CEditableText::SetHasChanged(ETrue);
+
+	__TEST_INVARIANT;
+	}
+
+EXPORT_C void CGlobalText::ApplyCharFormatL(const TCharFormat& aFormat,const TCharFormatMask& aMask,
+											TInt /*aPos*/,TInt /*aLength*/)
+/** Changes the text object's character formatting. The attributes which are 
+set in the mask are read from aFormat into the text object's character format 
+layer. The attributes which are not set in the mask are not changed. Note 
+that the position and length arguments are only used in the rich text 
+implementation of this function.
+
+@param aFormat Contains the character format attribute values to apply. 
+@param aMask Bitmask specifying the character format attributes to change. 
+@param aPos This argument is not used for global text. 
+@param aLength This argument is not used for global text. */
+	{
+
+	__TEST_INVARIANT;
+
+	TCharFormatMask applyMask=aMask;
+	TCharFormat cf(aFormat);
+	iGlobalCharFormatLayer->Sense(cf,applyMask);
+	(CONST_CAST(CCharFormatLayer*,iGlobalCharFormatLayer))->SetL(cf,applyMask);
+	CEditableText::SetHasChanged(ETrue);
+
+	__TEST_INVARIANT;
+	}
+
+EXPORT_C TInt CGlobalText::LdDocumentLength()const
+/** Gets the the number of characters in the document.
+
+Note: the count includes all non-printing characters but excludes the end 
+of text paragraph delimiter, so that the smallest return value is always zero.
+
+@return The number of characters contained in the document. */
+   {
+   __TEST_INVARIANT;
+   
+   return CPlainText::DocumentLength();
+   }
+
+EXPORT_C TInt CGlobalText::LdToParagraphStart(TInt& aCurrentPos)const
+/** Gets the document position of the start of the paragraph containing a 
+specified document position.
+
+@param aCurrentPos Specifies a document position: must be valid or a panic 
+occurs. On return, specifies the document position of the first character 
+in the paragraph in which it is located. 
+@return The number of characters skipped in scanning to the start of the 
+paragraph. */
+	{
+	__TEST_INVARIANT;
+
+	return CPlainText::ToParagraphStart(aCurrentPos);
+	}
+
+EXPORT_C TBool CGlobalText::EnquirePageBreak(TInt aPos,TInt aLength)const
+/** Tests whether a page break occurs within a range of characters. Returns 
+false if no page table has been set up: see CPlainText::SetPageTable(). The 
+start and end of the range must be valid document positions, or a panic occurs.
+
+@param aPos The document position from which to begin searching for a page 
+break. 
+@param aLength The number of characters to search for a page break, beginning 
+at aPos. The default is zero. 
+@return ETrue if a page break occurs within the specified range, otherwise 
+EFalse. */
+	{
+	__TEST_INVARIANT;
+
+	return PageContainingPos(aPos+aLength)>PageContainingPos(aPos);
+	}
+
+EXPORT_C void CGlobalText::GetChars(TPtrC& aView,TCharFormat& aFormat,TInt aStartPos)const
+/** Gets a constant pointer descriptor to a portion of the text object. The 
+portion starts at document position aStartPos, and ends at the end of the 
+document, or the end of the segment, if segmented storage is being used. Also 
+fills a character format object with the text object's effective character 
+formatting. The start position must be valid, or a panic occurs.
+
+@param aView On return, a constant pointer to a portion of the text. 
+@param aFormat On return, contains the text object's effective character 
+formatting. 
+@param aStartPos The start position for the view. */
+	{
+	__ASSERT_ALWAYS(aStartPos>=0 && aStartPos<=DocumentLength(),Panic(ECharPosBeyondDocument));
+
+	aView.Set(Read(aStartPos));
+	iGlobalCharFormatLayer->SenseEffective(aFormat);
+	OverrideFormatOfInlineTextIfApplicable(aView,aFormat,aStartPos);
+	}
+
+EXPORT_C void CGlobalText::GetParagraphFormatL(CParaFormat* aFormat,TInt /*aPos*/) const
+/** Gets the text object's effective paragraph formatting. The aPos value is 
+only used in the rich text implementation of this function.
+
+@param aFormat On return, filled with the text object's effective paragraph 
+formatting. 
+@param aPos This argument is not used for global text. */
+	{
+	// Get the paragraph format. Global text has a single unvarying character format so aPos is ignored.
+	iGlobalParaFormatLayer->SenseEffectiveL(aFormat);
+	}
+
+ 
+EXPORT_C void CGlobalText::GetParaFormatL(CParaFormat* aFormat,TParaFormatMask& aVaries,TInt /*aPos*/,TInt /*aLength*/,
+										  CParaFormat::TParaFormatGetMode aMode) const
+/** Gets the the global text object's effective paragraph formatting. Note that 
+the position and length arguments are only used in the rich text implementation 
+of this function.
+
+@param aFormat Must not be NULL or a panic occurs. On return, contains the 
+effective paragraph formatting for the global text object. 
+@param aVaries On return, a bitmask indicating which paragraph format attributes 
+vary over the range of characters selected. This is only relevant for rich 
+text, so for global text returns a value of zero for all attributes. 
+@param aPos This argument is not used for global text. 
+@param aLength This argument is not used for global text. 
+@param aMode The default, EAllAttributes indicates that values for all paragraph 
+format attributes are written to aFormat. EFixedAttributes indicates that 
+tabs, bullets and borders are not written to aFormat. */
+	{
+	iGlobalParaFormatLayer->SenseEffectiveL(aFormat,aMode);
+	aVaries.ClearAll();
+	}
+
+
+
+EXPORT_C void CGlobalText::GetCharFormat(TCharFormat& aFormat,TCharFormatMask& aVaries,
+										 TInt /*aPos*/,TInt /*aLength*/) const
+/** Gets the global text object's effective character formatting. Note that the 
+last three arguments are not relevant to the global text implementation of 
+this function.
+
+@param aFormat On return, contains the effective character formatting for 
+the global text object. 
+@param aVaries On return, a bitmask indicating which character format attributes 
+vary over the range of characters selected. This is only relevant for rich 
+text, so for global text returns a value of zero for all attributes. 
+@param aPos This argument is not used for global text. 
+@param aLength This argument is not used for global text. */
+	{
+	iGlobalCharFormatLayer->SenseEffective(aFormat);
+	aVaries.ClearAll();
+	}
+
+EXPORT_C CPicture* CGlobalText::PictureHandleL(TInt /*aPos*/,MLayDoc::TForcePictureLoad /*aForceLoad*/) const
+/**  Global text provides no support for pictures, so this implementation
+of the function returns NULL. */
+	{
+	// Global text provides no support for pictures.
+	return NULL;
+	}
+
+EXPORT_C TInt CGlobalText::GetPictureSizeInTwips(TSize& /*aSize*/, TInt /*aPos*/) const
+/** Global text provides no support for pictures, so this implementation
+of the function returns KErrNotFound. */	
+	{
+	// Global text provides no support for pictures.
+	return KErrNotFound;
+	}
+
+EXPORT_C TBool CGlobalText::SelectParagraphLabel(TInt /*aPos*/)
+/** Global text does not support paragraph labels, so this function
+returns EFalse. */	
+    {
+	return EFalse;
+	}
+
+EXPORT_C void CGlobalText::CancelSelectLabel()
+/** Not supported. */
+	{
+	}