textrendering/textformatting/test/src/TTranspEditor.cpp
changeset 0 1fb32624e06b
child 37 6be019398652
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TTranspEditor.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,391 @@
+/*
+* Copyright (c) 2004-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: 
+* TTranspEditor test source file. A base set of classes, neeeded for transparent editors
+* functionality testing, is defined here.
+* It is an "APP" test, where you can run TTranspEditor test application and check how the 
+* trransparency/opaque drawing works. Currently you may see the effect of opaque drawing
+* applied on texts, pictures, selections.
+*
+*/
+
+
+#include <coecntrl.h>
+#include <coeccntx.h>
+#include <coemain.h>
+#include <techview/eikon.hrh>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikenv.h>
+#include <eikdef.h>
+#include <txtrich.h>
+#include <frmtview.h>
+#include <eikstart.h>
+#include "TTranspEditor.h"
+#include "TTranspEditor.hrh"
+#include <ttranspeditor.rsg>
+
+const TUid KAppUid = {0x13579ACE};
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//Picture
+//CTestPicture's instances can be inserted and displayed into the transparent text view,
+//used in the test.
+
+CTestPicture* CTestPicture::NewL()
+	{
+	CTestPicture* self = new (ELeave) CTestPicture;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTestPicture::~CTestPicture()
+	{
+	delete iBitmap;
+	}
+
+CTestPicture::CTestPicture()
+	{
+	}
+
+void CTestPicture::ConstructL()
+	{
+	_LIT(KDataMbmFile, "z:\\system\\data\\TTrEdData.mbm");
+	iBitmap = new (ELeave) CFbsBitmap;
+	User::LeaveIfError(iBitmap->Load(KDataMbmFile, 0));	
+	}
+
+void CTestPicture::Draw(CGraphicsContext& aGc, const TPoint&, const TRect& aRc, MGraphicsDeviceMap*) const
+	{
+	aGc.DrawBitmap(aRc, iBitmap, aRc);
+	}
+
+void CTestPicture::ExternalizeL(RWriteStream&) const
+	{
+	}
+
+void CTestPicture::GetOriginalSizeInTwips(TSize& aSize) const
+	{
+	aSize = iBitmap->SizeInTwips();
+	}
+
+TInt CTestPicture::ScaleFactorWidth() const
+	{
+	return CPicture::ScaleFactorWidth() * 6;
+	}
+
+TInt CTestPicture::ScaleFactorHeight() const
+	{
+	return CPicture::ScaleFactorHeight() * 6;
+	}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//Application
+
+CApaDocument* CTranspEditorApp::CreateDocumentL()
+	{
+	return new (ELeave) CTranspEditorDoc(*this);
+	}
+
+TUid CTranspEditorApp::AppDllUid() const
+	{
+	return KAppUid;
+	}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//View1
+//It is used to create and display a background bitmap, needed for asserting opaque drawing
+//functionality.
+
+CTranspEditorView1* CTranspEditorView1::NewL()
+	{
+	CTranspEditorView1* self = new (ELeave) CTranspEditorView1;
+	CleanupStack::PushL(self);
+	self->ContructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTranspEditorView1::~CTranspEditorView1()
+	{
+	delete iBitmap;
+	}
+
+void CTranspEditorView1::ContructL()
+	{
+	_LIT(KDilbertMbmFile, "z:\\system\\data\\TTrEdDilbert.mbm");
+	iBitmap = new (ELeave) CFbsBitmap;
+	User::LeaveIfError(iBitmap->Load(KDilbertMbmFile, 0));
+
+	CreateWindowL();
+	TSize size = iEikonEnv->ScreenDevice()->SizeInPixels();
+	const TRect KViewRect(size);
+	SetRect(KViewRect);
+	ActivateL();
+	}
+
+void CTranspEditorView1::Draw(const TRect&) const
+	{
+	CWindowGc& gc = SystemGc();
+	TRect rc = Rect();
+	TRect rc2(rc.iTl.iX + 1, rc.iTl.iY + 1, rc.iBr.iX - 1, rc.iBr.iY - 1);
+
+	gc.Clear();
+
+	TRgb cl(0xFF, 0x50, 0x00);
+	gc.SetPenColor(cl);
+	gc.DrawRect(rc);
+
+	gc.DrawBitmap(rc2, iBitmap);
+	}
+
+/////////////////////////////////////////////////////////////////////////////////////////////
+//View2
+//Transparent text view.
+
+CTranspEditorView2* CTranspEditorView2::NewL()
+	{
+	CTranspEditorView2* self = new (ELeave) CTranspEditorView2;
+	CleanupStack::PushL(self);
+	self->ContructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CTranspEditorView2::~CTranspEditorView2()
+	{
+	delete iTextView;
+	delete iLayout;
+	delete iRichText;
+	}
+
+//Correspond to EAppCmdInsertText user interface command.
+//Insert a text chunk into the transparent text view.
+void CTranspEditorView2::InsertTextL()
+	{
+	_LIT(KText, "ABC123");
+	iRichText->InsertL(iRichText->DocumentLength(), KText);
+
+	TViewYPosQualifier a1;
+	a1.SetFillScreen();
+	a1.SetMakeLineFullyVisible();
+	iTextView->HandleGlobalChangeL(a1);
+	}
+
+//Correspond to EAppCmdSwitchOpaque user interface command.
+//Switch on/off opaque drawing mode.
+void CTranspEditorView2::SwitchOpaque()
+	{
+	iOpaque = !iOpaque;
+	iTextView->SetOpaque(iOpaque);
+	DrawNow();
+	}
+
+//Correspond to EAppCmdSwitchSelect user interface command.
+//Switch on/off text selection.
+void CTranspEditorView2::SwitchSelectL()
+	{
+	iSelect = !iSelect;
+	if(iSelect)
+		{
+		TTmDocPosSpec docPosSpec(10, TTmDocPosSpec::ELeftToRight);
+		TTmPosInfo2 posInfo;
+		TBool res = iTextView->FindDocPosL(docPosSpec, posInfo);
+		if(res)
+			{
+			TCursorSelection sel(posInfo.iDocPos.iPos, 0);
+			iTextView->SetSelectionL(sel);
+			DrawNow();
+			}
+		}
+	else
+		{
+		iTextView->ClearSelectionL();
+		DrawNow();
+		}
+	}
+
+//Correspond to EAppCmdInsertPicture user interface command.
+//Create and insert a picture into the transparent text view.
+void CTranspEditorView2::InsertPictureL()
+	{
+	CTestPicture* pic = CTestPicture::NewL();
+	CleanupStack::PushL(pic);
+
+	TSize size;
+	pic->GetOriginalSizeInTwips(size);
+
+	TPictureHeader pictheader;
+	pictheader.iSize = size;
+	pictheader.iPicture = pic;
+
+	iRichText->InsertL(iRichText->DocumentLength(), pictheader);
+	CleanupStack::Pop(pic);
+
+	TViewYPosQualifier a1;
+	a1.SetFillScreen();
+	a1.SetMakeLineFullyVisible();
+	iTextView->HandleGlobalChangeL(a1);
+	}
+
+//Correspond to EAppCmdSetCharFormat user interface command.
+//Change the format of the selected text.
+void CTranspEditorView2::SetCharFormatL()
+	{
+	TCharFormat charFormat;
+	TCharFormatMask charFormatMask;
+	charFormat.iFontSpec.iFontStyle.SetPosture(EPostureItalic);
+	charFormatMask.SetAttrib(EAttFontPosture);
+	TCursorSelection select = iTextView->Selection();
+	if(select.Length() != 0)
+		{
+		iRichText->ApplyCharFormatL(charFormat, charFormatMask, select.LowerPos(), select.Length());
+		iTextView->HandleRangeFormatChangeL(select);
+		}
+	else
+		{
+		iRichText->SetInsertCharFormatL(charFormat, charFormatMask, select.iCursorPos);
+		}
+	}
+
+//Construct a transparent text view, which is displayed on top of the background bitmap, 
+//which makes the transparency effect very well visible.
+void CTranspEditorView2::ContructL()
+	{
+	CreateWindowL(); 
+	TSize size = iEikonEnv->ScreenDevice()->SizeInPixels();
+	const TRect KViewRect(15, 15, size.iWidth - 15, size.iHeight - 15);
+	SetRect(KViewRect);
+
+	iRichText = CRichText::NewL(iEikonEnv->SystemParaFormatLayerL(), iEikonEnv->SystemCharFormatLayerL());
+	iLayout = CTextLayout::NewL(iRichText, KViewRect.Width() - 2);
+
+	TRect rc(KViewRect);
+	rc.Shrink(1, 1);
+	rc.Move(-rc.iTl.iX + 1, -rc.iTl.iY + 1);
+	iTextView = CTextView::NewL(iLayout, 
+								rc, 
+								iEikonEnv->ScreenDevice(),
+								iEikonEnv->ScreenDevice(),
+								&Window(), 
+								&iEikonEnv->RootWin(), 
+								&iEikonEnv->WsSession());
+
+	iTextView->EnablePictureFrameL(ETrue);
+	const TRgb KTransparencyColor(85, 85, 85);
+	Window().SetTransparencyFactor(KTransparencyColor);
+
+	ActivateL();
+	}
+
+void CTranspEditorView2::Draw(const TRect&) const
+	{
+	CWindowGc& gc = SystemGc();
+	TRect rc = Rect();
+	TRect rc2(rc.iTl.iX + 1, rc.iTl.iY + 1, rc.iBr.iX - 1, rc.iBr.iY - 1);
+
+	gc.Clear();
+
+	const TRgb KPenColor(0x00, 0x00, 0xFF);
+	gc.SetPenColor(KPenColor);
+	gc.DrawRect(rc);
+
+	TRAPD(err, iTextView->DrawL(rc2));
+    if(err != KErrNone)
+		{
+		SystemGc().Clear(rc2);
+		iEikonEnv->NotifyIdleErrorWhileRedrawing(err);
+		}
+	}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//Document
+
+CTranspEditorDoc::CTranspEditorDoc(CEikApplication& aApp) :
+	CEikDocument(aApp)
+	{
+	}
+
+CEikAppUi* CTranspEditorDoc::CreateAppUiL()
+	{
+	return new (ELeave) CTranspEditorUi;
+	}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//UI
+
+void CTranspEditorUi::ConstructL()
+	{
+	BaseConstructL();
+
+	iTranspEditorView1 = CTranspEditorView1::NewL();
+	AddToStackL(iTranspEditorView1);
+
+	iTranspEditorView2 = CTranspEditorView2::NewL();
+	AddToStackL(iTranspEditorView2);
+	}
+
+CTranspEditorUi::~CTranspEditorUi()
+	{
+	RemoveFromStack(iTranspEditorView2);
+	delete iTranspEditorView2;
+
+	RemoveFromStack(iTranspEditorView1);
+	delete iTranspEditorView1;
+	}
+
+void CTranspEditorUi::HandleCommandL(TInt aCommand)
+	{
+	switch(aCommand)
+		{
+		case EAppCmdExit:
+			CBaActiveScheduler::Exit();
+			break;
+		case EAppCmdInsertText:
+			iTranspEditorView2->InsertTextL();
+			break;
+		case EAppCmdSwitchOpaque:
+			iTranspEditorView2->SwitchOpaque();
+			break;
+		case EAppCmdSwitchSelect:
+			iTranspEditorView2->SwitchSelectL();
+			break;
+		case EAppCmdInsertPicture:
+			iTranspEditorView2->InsertPictureL();
+			break;
+		case EAppCmdSetCharFormat:
+			iTranspEditorView2->SetCharFormatL();
+			break;
+		default:
+			break;
+		}
+	}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//
+
+	static CApaApplication* NewApplication()
+		{
+		return new CTranspEditorApp;
+		}
+
+	TInt E32Main()
+		{
+		return EikStart::RunApplication(&NewApplication);
+		}
+
+