textrendering/textformatting/test/src/TCustomWrap.cpp
changeset 0 1fb32624e06b
child 37 6be019398652
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TCustomWrap.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2001-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 "TCustomWrap.h"
+#include <basched.h>
+#include <coecntrl.h>
+#include <coeccntx.h>
+#include <coemain.h>
+#include <e32keys.h>
+#include <techview/eikon.hrh>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikenv.h>
+#include <techview/eikrted.h>
+#include <techview/eikedwin.h>
+#include <eikdef.h>
+#include <eikstart.h>
+#include <txtrich.h>
+#include "TCustomWrap.hrh"
+#include <tcustomwrap.rsg>
+
+// 
+// ---------------- CCustomWrapAppControl  (a simple Edwin control) -----------
+
+class CCustomWrapAppControl : public CCoeControl, public MCoeControlObserver
+	{
+public:
+	~CCustomWrapAppControl();
+	void ConstructL();
+	void SetCustomWrapOnL();
+	void SetCustomWrapCustomL();
+	void SetCustomWrapOffL();
+	void ReformatL();
+
+private: // framework
+	void Draw(const TRect& aRect) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); // from the MCoeControlObserverInterface
+//	void ActivateL();
+	virtual TInt CountComponentControls() const;
+	virtual CCoeControl* ComponentControl(TInt aIndex) const;    
+	// the two functions above are needed in order for the control to work correctly.
+
+
+private:
+	void CreateEdwinL();
+	
+
+private:
+	CCoeControl* iFocusControl; // The control that is currently in focus. 
+	CEikEdwin* iEdwin; // I still need a focus control, even if just one EikEdwin...
+	const MFormCustomWrap* iStandardCustomWrap;
+	TTestCustomWrap iCustomCustomWrap;
+	};
+
+CCustomWrapAppControl::~CCustomWrapAppControl()
+	{
+	delete iEdwin;
+	}
+
+void CCustomWrapAppControl::ConstructL()
+	{
+	CreateWindowL();
+    Window().SetShadowDisabled(ETrue);
+	CreateEdwinL();
+	iStandardCustomWrap = iEdwin->TextLayout()->CustomWrap();
+	iFocusControl=iEdwin;
+	SetExtentToWholeScreen();
+	ActivateL();
+	iFocusControl->SetFocus(ETrue);
+	}
+
+//void CCustomWrapAppControl::ActivateL()
+//	{
+//	CCoeControl::ActivateL();
+//	iEdwin->ActivateL();
+//	}
+
+void CCustomWrapAppControl::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
+	{
+	if (aEventType==EEventRequestFocus)
+		{
+		iFocusControl=aControl;
+		iFocusControl->SetFocus(ETrue,EDrawNow);
+		}
+	} 
+
+TInt CCustomWrapAppControl::CountComponentControls() const
+	{
+	return 1;
+	}
+
+CCoeControl* CCustomWrapAppControl::ComponentControl(TInt /*aIndex*/) const
+	{
+	return iEdwin;
+	}
+
+void CCustomWrapAppControl::CreateEdwinL()
+	{
+	const TSize screenSize(iCoeEnv->ScreenDevice()->SizeInPixels());
+	// Rich text editor.
+	iEdwin=new(ELeave) CEikRichTextEditor;
+	STATIC_CAST(CEikRichTextEditor*,iEdwin)->ConstructL(this,0,0,EEikEdwinCustomWrap);
+	//STATIC_CAST(CEikRichTextEditor*,iEdwin)->ConstructL(this,0,0,EEikEdwinInclusiveSizeFixed);
+	iEdwin->SetObserver(this);
+	iEdwin->CreateScrollBarFrameL();
+	iEdwin->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOn);
+	iEdwin->SetExtent(TPoint(screenSize.iWidth/5,screenSize.iHeight/8),TSize(screenSize.iWidth/3,screenSize.iHeight*3/5));
+	}
+
+TKeyResponse CCustomWrapAppControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	if (aType==EEventKey)
+		{
+		iEdwin->OfferKeyEventL(aKeyEvent, aType);
+		}
+	return(EKeyWasConsumed);
+	}
+
+void CCustomWrapAppControl::Draw(const TRect& aRect) const
+	{
+	CWindowGc& gc=SystemGc();
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbWhite);
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.DrawRect(aRect);
+	}
+
+
+void CCustomWrapAppControl::SetCustomWrapOnL()
+	{
+	iEdwin->TextLayout()->SetCustomWrap(iStandardCustomWrap);
+	ReformatL();
+	}
+
+void CCustomWrapAppControl::SetCustomWrapCustomL()
+	{
+	iEdwin->TextLayout()->SetCustomWrap(&iCustomCustomWrap);
+	ReformatL();
+	}
+
+void CCustomWrapAppControl::SetCustomWrapOffL()
+	{
+	iEdwin->TextLayout()->SetCustomWrap(0);
+	ReformatL();
+	}
+
+void CCustomWrapAppControl::ReformatL()
+	{
+	iEdwin->NotifyNewFormatL();
+	}
+
+// 
+//  ---------------------- CCustomWrapAppView definition ---------------- 
+//
+
+class CCustomWrapAppUi : public CEikAppUi
+	{
+public:
+	void ConstructL();
+	~CCustomWrapAppUi();
+private: // from CEikAppUi -- framework
+	void HandleCommandL(TInt aCommand);
+private: 
+	CCustomWrapAppControl* iCustomWrapAppControl;
+	
+	};
+
+void CCustomWrapAppUi::ConstructL()
+	{
+	BaseConstructL();
+	iCustomWrapAppControl=new(ELeave) CCustomWrapAppControl;
+	iCustomWrapAppControl->ConstructL();
+	AddToStackL(iCustomWrapAppControl);
+	}
+
+CCustomWrapAppUi::~CCustomWrapAppUi()
+	{
+	RemoveFromStack(iCustomWrapAppControl);
+	delete iCustomWrapAppControl;
+	}
+
+void CCustomWrapAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch(aCommand)
+		{
+		case EAppCmdExit:
+			CBaActiveScheduler::Exit();
+			break;
+		case EAppCmdWrap0:
+			iCustomWrapAppControl->SetCustomWrapOffL();
+			break;
+		case EAppCmdWrap1:
+			iCustomWrapAppControl->SetCustomWrapOnL();
+			break;
+		case EAppCmdWrap2:
+			iCustomWrapAppControl->SetCustomWrapCustomL();
+			break;
+		default:
+			break;
+		}
+	} 
+
+//
+//  --------------------- CCustomWrapAppDoc class Definition ------------ 
+//
+
+class CCustomWrapAppDoc : public CEikDocument
+	{
+public:
+	CCustomWrapAppDoc(CEikApplication& aApp);
+private:
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+CCustomWrapAppDoc::CCustomWrapAppDoc(CEikApplication& aApp):CEikDocument(aApp)
+	{
+	// Nothing else to do, just call the base class constructor
+	//
+	}
+
+CEikAppUi* CCustomWrapAppDoc::CreateAppUiL()
+	{
+	return new (ELeave) CCustomWrapAppUi;
+	}
+//
+//  ------------------------------ CCustomWrapApp ----------------------- 
+//
+
+
+const TUid KCustomWrapUid = {0x10005d2f};
+
+class CCustomWrapApp : public CEikApplication
+	{
+private:
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+
+	};
+
+TUid CCustomWrapApp::AppDllUid() const 
+	{
+	return KCustomWrapUid;
+	}
+
+CApaDocument* CCustomWrapApp::CreateDocumentL()
+	{
+	return new (ELeave) CCustomWrapAppDoc(*this);
+	}
+
+
+////////////////////////////////////////////////////////////////////////////////////////////
+//
+
+	static CApaApplication* NewApplication()
+		{
+		return new CCustomWrapApp;
+		}
+
+	TInt E32Main()
+		{
+		return EikStart::RunApplication(&NewApplication);
+		}
+
+