textrendering/word/SRC/WPAPPUI.CPP
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/word/SRC/WPAPPUI.CPP	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,1325 @@
+/*
+* Copyright (c) 1997-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 <s32mem.h>
+
+#include <txtrich.h>
+
+#include <frmprint.h>
+
+#include <badesca.h>
+
+#include <coedef.h>
+#include <coeinput.h>
+
+#include <prnsetup.h>
+
+#include <techview/eikprtdg.h>
+#include <techview/eikmenup.h>
+#include <techview/eiktbar.h>
+#include <techview/eikbtgpc.h>
+#include <techview/eikclb.h>
+#include <techview/eikon.rsg>
+#include <eikon.mbg>
+#include <techview/eiktxlbm.h>
+
+#include "WPAPPUI.H"
+#include "WPDIALGS.H"
+#include "WPDOC.H"
+#include "WPLBOX.H"
+#include "WPSTYLE.H"
+#include "WPDEF.H"
+#include "WPTEST.H"
+#include <word.rsg>
+
+#include "WORD.HRH"
+
+
+const TUid KUidSheet={0x10003A7D};
+const TUid KUidPaintApp={0x1000007D};
+// the next four are strictly temporary items!
+_LIT(KSketchDllName,"PAINT.APP");
+_LIT(KSheetDllName,"SHEET.APP");
+
+CWordAppUi::CWordAppUi()
+   	:iAlignment(RTmParFormat::EAlignNormal)
+	{
+	}
+
+CWordAppUi::~CWordAppUi()
+    {
+	if (iDoorObserver)
+		{
+		MApaEmbeddedDocObserver::TExitMode exitMode=MApaEmbeddedDocObserver::EKeepChanges;
+		if (!DocHasChanged())
+			exitMode=MApaEmbeddedDocObserver::ENoChanges;
+		if (Document()->Model()->Text()->DocumentLength()==0)
+			exitMode=MApaEmbeddedDocObserver::EEmpty;
+		iDoorObserver->NotifyExit(exitMode);
+		}
+	if (iRichEd)
+		RemoveFromStack(iRichEd);
+	delete iBullet;
+	delete iToolBarUpdate;
+	delete iRichEd;
+	delete iTwipsList;
+	delete iPopoutListBox;
+	delete iConfirmationText;
+	delete iTest;
+	}
+
+void CWordAppUi::ConstructL()
+    {
+	Document()->SetChanged(FALSE);
+	//
+	BaseConstructL();
+	//
+	iModel=Document()->Model();
+	ResetPrint();  // initialise print related components
+	CreateEdwinL();  // create & initialise edwin components (may use print data if in wysiwyg)
+	UpdateToolbarsL();  // set the remainder components of the word view
+	//
+	iToolBarUpdate=CWordToolBarUpdate::NewL(*this);
+	//
+	iEikonEnv->AppUiFactory()->ToolBand()->ActivateL();
+	iEikonEnv->AppUiFactory()->ToolBar()->ActivateL();
+	iEikonEnv->AppUiFactory()->ToolBand()->DrawNow();
+	iEikonEnv->AppUiFactory()->ToolBar()->DrawNow();
+	iCoeEnv->WsSession().Flush();
+	iConfirmationText = iEikonEnv->AllocReadResourceAsDes8L(R_WORD_CONFIRMATION_TEXTS);
+	SetPaginationOutOfDate(TRUE);
+	iRichEd->SetBookmark();
+    }
+
+TKeyResponse CWordAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	if (iRichEd->IsReadOnly())
+		{
+		iRichEd->CEikRichTextEditor::OfferKeyEventL(aKeyEvent, aType);
+		return EKeyWasConsumed;
+		}
+	const TBool eventKey(aType == EEventKey);
+	const TBool isEnter(aKeyEvent.iCode == EKeyEnter || aKeyEvent.iCode == EKeyLineFeed);
+	const TCursorSelection selection = iRichEd->Selection();
+	if (eventKey && (aKeyEvent.iModifiers & EModifierCtrl) && (aKeyEvent.iModifiers & EModifierFunc))
+		{// Paragraph style hot key
+		TChar key = ((aKeyEvent.iCode >= 1) && (aKeyEvent.iCode <= 26))
+			? aKeyEvent.iCode + 'A' - 1	// an alphabetic key was pressed.
+			: aKeyEvent.iCode;			// a non-alphabetic key was pressed
+		if (ProcessStyleHotKeyL(key) == EKeyWasConsumed)
+			return EKeyWasConsumed;
+		}
+	if (eventKey && isEnter && (aKeyEvent.iModifiers & EModifierCtrl))
+		{// Insert a breaking character
+		InsertCharacterL(CEditableText::EPageBreak);
+		return EKeyWasConsumed;
+		}
+
+	if ((aKeyEvent.iCode==EKeySpace || isEnter) && iRichEd->CheckForObjectL())
+		{
+		return EKeyWasConsumed;
+		}
+
+	// Allow the test harness to apply a custom keyboard map.
+	TChar c;
+	TKeyResponse r = iTest->OfferKeyEventL(aKeyEvent,aType,c);
+	if (r == EKeyWasConsumed)
+		{
+		if (c != 0xFFFF)
+			InsertCharacterL(c);
+		return EKeyWasConsumed;
+		}
+
+	/*
+	Handle all non-system keycodes via the unified editing interface, (except for space and enter
+	on an embedded object, which allow it to be edited).
+	*/
+	if (eventKey && (aKeyEvent.iCode < 0xF700 || aKeyEvent.iCode >= 0xF900))
+		{
+		if (aKeyEvent.iCode == EKeyBackspace)
+			iRichEd->DeleteLeftL();
+		else if (aKeyEvent.iCode == EKeyDelete)
+			iRichEd->DeleteRightL();
+		else if (aKeyEvent.iCode == EKeySpace && (aKeyEvent.iModifiers & EModifierShift))
+			InsertCharacterL(CEditableText::ENonBreakingSpace);
+		else if (isEnter)
+			{
+			InsertCharacterL((aKeyEvent.iModifiers & EModifierShift)?
+				CEditableText::ELineBreak : CEditableText::EParagraphDelimiter);
+			}
+		else
+			InsertCharacterL(aKeyEvent.iCode);
+		return EKeyWasConsumed;
+		}
+	iRichEd->CEikRichTextEditor::OfferKeyEventL(aKeyEvent, aType);
+	if (eventKey && (iEikonEnv->AppUiFactory()->ToolBar()->IsVisible() || iEikonEnv->AppUiFactory()->ToolBand()->IsVisible()))
+		{
+		if ((aKeyEvent.iCode == EKeyBackspace || aKeyEvent.iCode == EKeyDelete) && selection.Length())
+			iToolBarUpdate->Start(CWordToolBarUpdate::EFullUpdate);
+		else if (isEnter && !(aKeyEvent.iModifiers & EModifierShift))
+			iToolBarUpdate->Start(CWordToolBarUpdate::EFullUpdate);
+		}
+	return EKeyWasConsumed;
+	}
+
+TKeyResponse CWordAppUi::ProcessStyleHotKeyL(const TChar& aKey)
+// Look up the specified key in the style short cut list.
+// Apply the relevant style if found.
+//
+	{
+	const CParagraphStyle* styleToApply=NULL;
+	if (aKey==iModel->NormalStyleShortCut())
+		styleToApply=REINTERPRET_CAST(const CParagraphStyle*,Text()->GlobalParaFormatLayer());
+	else
+		{
+		const CStyleShortCutList* shortCutList=iModel->StyleShortCutList();
+		const TInt count=(shortCutList) ? shortCutList->Count() : 0;
+		TInt index=0;
+		TBool matched=FALSE;
+		while (index<count && !matched)
+			{
+			TChar match=(*shortCutList)[index];
+			if (match==aKey)
+				break;
+			index++;
+			}
+		if (index>=count)
+			return EKeyWasNotConsumed;  // checked all hotkeys in the list and not matched any of them.
+		//there could be a shortcut that hasnt a style
+		if ( index > iModel->StyleList()->Count() )
+			return EKeyWasNotConsumed; 
+		styleToApply=iModel->StyleList()->At(index).iStyle;
+		}
+	TCursorSelection selection=iRichEd->Selection();
+	Text()->ApplyParagraphStyleL(*styleToApply,selection.LowerPos(),selection.Length(),KApplyParaStyleMode);
+	ReformatDueToStateChangeL();
+	iRichEd->UpdateScrollBarsL();
+	return EKeyWasConsumed;
+	}
+
+
+void CWordAppUi::SetAndDrawFocus(TBool aFocus)
+	{
+	if (iRichEd)
+		iRichEd->SetFocus(aFocus,EDrawNow);
+	}
+
+
+TCoeInputCapabilities CWordAppUi::InputCapabilities() const
+	{
+	TCoeInputCapabilities inputCapabilities=CEikAppUi::InputCapabilities();
+	if ((iRichEd!=NULL) && iRichEd->IsFocused() && !iRichEd->IsReadOnly())
+		{
+		inputCapabilities.MergeWith(iRichEd->InputCapabilities());
+		}
+	return inputCapabilities;
+	}
+
+TBool CWordAppUi::DocHasChanged() const
+	{
+	if (iDocument->HasChanged())
+		return ETrue;
+	if (iRichEd->IsAtBookmark())
+		return EFalse;
+	return ETrue;
+	}
+
+void CWordAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EEikCmdExit:
+		GetUiData(Document()->UiData());
+		if (DocHasChanged() && !iContainerAppUi)
+			CmdFileSaveL();
+		Exit();
+		break;
+	case EEikCmdFileNew:
+	case EEikCmdFileOpen:
+	case EEikCmdFileSave:
+	case EEikCmdFileSaveAs:
+	case EEikCmdFileRevert:
+	case EWordCmdFileSaveAsTemplate:
+	case EWordCmdFileDeleteTemplate:
+		if (iContainerAppUi)
+			break;
+		else
+			{
+			switch (aCommand)
+				{
+			case (EEikCmdFileNew):
+				CmdFileNewL();
+		        break;
+			case (EEikCmdFileOpen):
+				CmdFileOpenL();
+				break;
+			case (EEikCmdFileSave):
+				CmdFileSaveL();
+				break;
+			case (EEikCmdFileSaveAs):
+		        CmdFileSaveAsL();
+			    break;
+			case (EEikCmdFileRevert):
+		        CmdFileRevertL();
+			    break;
+			case (EWordCmdFileSaveAsTemplate):
+				CmdFileSaveAsTemplateL();
+				break;
+			case (EWordCmdFileDeleteTemplate):
+				CmdFileDeleteTemplateL();
+				break;
+				}
+			}
+		break;
+	case EEikCmdEditCopy:
+		iRichEd->ClipboardCopyL();
+		break;
+	case EEikCmdFileExport:
+		CmdFileTextExportL();
+		break;
+	case EWordCmdPageSetup:
+		RunPageSetupDialogL();
+		break;
+	case EEikCmdPrintPaginate:
+		RunPaginationDialogL();
+		break;
+	case EEikCmdPrintPrint:
+	case EEikCmdPrintSetup:
+	case EEikCmdPrintPreview:										    
+	case EWordCmdGoTo:	
+		{
+		TBool cancel=FALSE;
+ 		if (PaginationOutOfDate())
+			cancel=RunPaginationDialogL();
+		if (cancel)
+			break;
+		switch (aCommand)
+			{
+			case EEikCmdPrintSetup:
+				{
+				TInt pages=iModel->PageTable()->Count();
+				RunPrintRangeDialogL(iPrintSetup,pages);
+				break;
+				}
+			case EEikCmdPrintPrint:
+				RunPrintDialogL();
+				break;
+			case EEikCmdPrintPreview:
+				RunPreviewDialogL();
+				break;
+			case EWordCmdGoTo:
+				RunGoToDialogL();
+				break;
+			}
+		break;
+		}
+	case EEikCmdSearchFind:
+		iRichEd->RunFindDialogL();
+		break;
+	case EEikCmdSearchFindAgain:
+		iRichEd->RunFindAgainDialogL();
+		break;
+	case EEikCmdEditSelectAll:
+		{
+		const TInt docLength=iRichEd->TextLength();
+		if (docLength)
+			iRichEd->SetSelectionL(docLength,0);
+		break;
+		}
+	case EWordCmdReEditObject:
+		iRichEd->ReEditObjectL();
+		break;
+	case EWordCmdToolbar:
+	case EWordCmdToolband:
+		UpdateToolBarAndBandL(aCommand);
+		break;
+	case EWordCmdWrapToScreen:
+		CmdWrapToScreenL();
+		break;
+	case EWordCmdViewPreferences:
+		RunViewPreferencesDialogL();
+		break;
+	case EWordCmdCount:
+		iEikonEnv->InfoMsg(R_WORD_NO_WORDS,(iRichEd->CountWords()));	
+		break;
+	case EEikCmdZoomIn:
+	case EEikCmdZoomOut:
+		ZoomL(aCommand);
+		break;
+	case EWordCmdZoomSet:
+		{
+		TInt zoomFactor=iAppZoom.ZoomFactor();
+		CEikDialog* dialog=new(ELeave) CWordTempManualZoomDialog(zoomFactor);
+		if (dialog->ExecuteLD(R_WORD_DIALOG_ZOOM_SET))
+			{
+			iAppZoom.SetZoomFactor(zoomFactor);
+			CFbsBitmap* lineCursor=iEikonEnv->CreateBitmapL(TPtrC(),EMbmEikonLncusr1);
+			iRichEd->SetLineCursorBitmapL(lineCursor);
+			iRichEd->NotifyNewFormatL();
+			iRichEd->UpdateScrollBarsL();
+			}
+		break;
+		}
+	case EWordCmdOutline:
+		RunOutlineDialogL();
+		break;
+	//
+	// State changing commands
+	// disallow when read-only
+	//
+	// FILE HANDLING
+	case EEikCmdFileImport:
+	case EWordCmdHtmlImport:
+	//
+	// CLIPBOARDING
+	case EEikCmdEditCut:
+	case EEikCmdEditPaste:
+	//
+	// CHARACTER FORMATTING
+	case EEikCmdFontBold:
+	case EEikCmdFontItalic:
+	case EEikCmdFontUnderline:
+	case EEikCmdFontChange:
+	case EEikCmdInsertSymbol:
+	//
+	// PARAGRAPH FORMATTING
+	case EEikCmdParaBorder:
+	case EEikCmdParaSpacing:
+	case EEikCmdParaIndent:
+	case EEikCmdParaTabs:
+	case EEikCmdParaAlign:
+	case EWordCmdAlignLeft:
+	case EWordCmdAlignRight:
+	case EWordCmdAlignCenter:
+	case EWordCmdAlignJustify:
+	case EWordCmdFormatBullet:
+	//
+	// EDIT
+	case EEikCmdSearchReplace:
+	case EEikCmdEditPictureFormat:
+	case EWordCmdInsertSketch:
+	case EWordCmdInsertSheet:
+	case EWordCmdInsertObject:
+	case EWordCmdInsertPageBreak:
+	case EWordCmdInsertLineBreak:
+	case EEikCmdEditUndo:
+	case EEikCmdEditRedo:
+	//
+	// TOOLS
+	case EWordCmdObjectPreferences:
+	//
+	// TOP TOOLBAND
+	case EWordButtonStyle:
+	case EWordButtonFont:
+	case EWordButtonFontSize:		
+	case EWordButtonAlign:
+	case EWordButtonBorders:
+	case EWordCmdInsertBullet:
+	case EWordButtonBullets:
+	//
+	// STYLES
+	case EWordCmdRevertToStylePara:
+	case EWordCmdRevertToStyleChar:
+	case EWordCmdStyleGallery:
+		{
+		const TBool readOnly=(iContainerAppUi)? iEmbeddedAndReadOnly : !(iDocument->AppFileMode()&EFileWrite);
+		if (readOnly)
+			{
+			iEikonEnv->InfoMsg(R_WORD_FILE_READ_ONLY);  // feedback this is a readonly file
+			if (aCommand==EEikCmdFontBold || aCommand==EEikCmdFontItalic || aCommand==EEikCmdFontUnderline)
+				UpdateCharFormatButtonsL();  // undo the pressing of the emphasis buttons.
+			break;
+			}
+		switch (aCommand)
+			{
+		//
+		// FILE HANDLING
+			case EEikCmdFileImport:
+				CmdFileTextImportL();
+				break;
+			case EWordCmdHtmlImport:
+				CmdFileHtmlImportL();
+				break;			
+		//
+		// CLIPBOARDING
+			case EEikCmdEditCut:
+				iRichEd->ClipboardCutL();
+				UpdateToolbandButtonsL();
+				break;
+			case EEikCmdEditPaste:
+				if (KErrNotFound == iRichEd->ClipboardPasteL())
+					iEikonEnv->InfoMsg(R_WORD_NO_TEXT_TO_PASTE);
+				else
+					UpdateToolbandButtonsL();
+				break;
+		//
+		// CHARACTER FORMATTING
+			case EEikCmdFontBold:
+				iRichEd->BoldItalicUnderlineEventL(CEikGlobalTextEditor::EBold); 
+				break;
+			case EEikCmdFontItalic:
+				iRichEd->BoldItalicUnderlineEventL(CEikGlobalTextEditor::EItalic); 
+				break;
+			case EEikCmdFontUnderline:
+				iRichEd->BoldItalicUnderlineEventL(CEikGlobalTextEditor::EUnderline); 
+				break;
+			case EEikCmdFontChange:
+				iRichEd->RunFontDialogL(EGulNoSymbolFonts, iCoeEnv->ScreenDevice());
+				UpdateCharFormatButtonsL();
+				break;
+			case EEikCmdInsertSymbol:
+				iRichEd->RunCharMapDialogL();
+				break;
+		//
+		// PARAGRAPH FORMATTING
+			case EEikCmdParaBorder:
+			case EEikCmdParaSpacing:
+				iRichEd->RunParaDialogsL(aCommand);
+				break;
+			case EEikCmdParaIndent:
+			case EEikCmdParaTabs:
+				{
+				TPageSpec pageSpec=iPrintSetup->PrinterDevice()->CurrentPageSpecInTwips();
+				TInt width=pageSpec.iPortraitPageSize.iWidth;
+				if (pageSpec.iOrientation==TPageSpec::ELandscape)
+					width=pageSpec.iPortraitPageSize.iHeight;
+				width-=(iPrintSetup->iPageMarginsInTwips.iMargins.iLeft+iPrintSetup->iPageMarginsInTwips.iMargins.iRight);
+				if (aCommand==EEikCmdParaIndent)
+					iRichEd->RunIndentsDialogL(width);
+				else
+					iRichEd->RunTabsDialogL(width);
+				break;
+				}
+			case EEikCmdParaAlign:
+				CmdChangeAlignmentL();
+				break;
+			case EWordCmdAlignLeft:
+			case EWordCmdAlignRight:
+			case EWordCmdAlignCenter:
+			case EWordCmdAlignJustify:
+				{
+				SetParaAlignmentL(aCommand);	
+				RTmParFormat::TAlignment alignment = RTmParFormat::EAlignNormal;
+				switch (aCommand)
+					{
+					case EWordCmdAlignLeft:
+						alignment = RTmParFormat::EAlignNormal;
+						break;
+					case EWordCmdAlignRight:
+						alignment = RTmParFormat::EAlignReverse;
+						break;
+					case EWordCmdAlignCenter:
+						alignment = RTmParFormat::EAlignCenter;
+						break;
+					case EWordCmdAlignJustify:
+						alignment = RTmParFormat::EAlignJustify;
+						break;
+					}
+				UpdateAlignButtonL(alignment);
+				break;
+				}
+			case EWordCmdFormatBullet:
+				RunSelectBulletDialogL();
+				break;
+		//
+		// EDIT
+			case EEikCmdSearchReplace:
+				iRichEd->RunReplaceDialogL();
+				break;
+			case EEikCmdEditPictureFormat:
+				iRichEd->EditPictureFormatL();
+				break;
+			case EWordCmdInsertSketch:
+				iRichEd->InsertObjectL(KSketchDllName,KUidPaintApp,(SketchAsGlass())?CEikRichTextEditor::EGlassIfPossible : CEikRichTextEditor::EAlwaysIconic);
+				break;
+			case EWordCmdInsertSheet:
+				iRichEd->InsertObjectL(KSheetDllName,KUidSheet,(GraphAsGlass())?CEikRichTextEditor::EGlassIfPossible : CEikRichTextEditor::EAlwaysIconic);
+				break;
+			case EWordCmdInsertObject:
+				iRichEd->InsertObjectL(CEikRichTextEditor::EGlassIfPossible);
+				break;
+			case EWordCmdInsertPageBreak:
+			case EWordCmdInsertLineBreak:
+				InsertCharacterL((aCommand==EWordCmdInsertPageBreak)
+					? CEditableText::EPageBreak
+					: CEditableText::ELineBreak);
+				break;
+			case EEikCmdEditUndo:
+				iRichEd->UndoL();
+				break;
+			case EEikCmdEditRedo:
+				iRichEd->RedoL();
+				break;
+		//
+		// TOOLS
+			case EWordCmdObjectPreferences:
+				RunObjectPreferencesDialogL();
+				break;
+		//
+		// TOP TOOLBAND
+			case EWordButtonStyle:
+				LaunchStylesPopupL();
+				break;
+			case EWordButtonFont:
+				LaunchFontsPopupL();
+				break;
+			case EWordButtonFontSize:		
+				LaunchFontHeightsPopupL();
+				break; 
+			case EWordButtonAlign:
+				LaunchAlignPopupL();
+				break;
+			case EWordButtonBorders:
+				LaunchBordersPopupL();
+				break;
+			case EWordCmdInsertBullet:
+				{
+				if (REINTERPRET_CAST(CEikButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonBullets))->State() == CEikButtonBase::EClear)
+					UpdateToolBandButton(EWordButtonBullets,CEikButtonBase::ESet); 
+				else
+					UpdateToolBandButton(EWordButtonBullets,CEikButtonBase::EClear);
+				}  // drops into next case with a purpose
+			case EWordButtonBullets:
+				SetBulletL();
+				break;
+		//
+		// STYLES
+			case EWordCmdRevertToStylePara:
+				{
+				TCursorSelection selection=iRichEd->Selection();
+				Text()->RemoveSpecificParaFormatL(selection.LowerPos(),selection.Length());
+				ReformatDueToStateChangeL();
+				break;
+				}
+			case EWordCmdRevertToStyleChar:
+				{
+				TCursorSelection selection=iRichEd->Selection();
+				Text()->RemoveSpecificCharFormatL(selection.LowerPos(),selection.Length());
+				ReformatDueToStateChangeL();
+				break;
+				}
+			case EWordCmdStyleGallery:
+				{
+				TBool close=FALSE;
+				CRichText* originalText=Text();
+				const TCursorSelection selection=iRichEd->Selection();
+				TChar& normalStyleShortCut=iModel->NormalStyleShortCut();
+				TWordStyleGalleryData data(*originalText,*iModel->StyleList(),*iModel->StyleShortCutList(),
+					normalStyleShortCut,*iPrintSetup,close,selection,*iRichEd);
+
+				CEikDialog* dialog=CWordStyleGallery::NewL(data);
+				dialog->ExecuteLD(R_WORD_DIALOG_STYLE_GALLERY);
+				if (!close)
+					break;
+				ReformatDueToStateChangeL();
+				SetDocChanged();
+				break;
+				}
+			}
+
+		break;
+		}
+
+		// test commands
+		case EWordCmdHighlight:
+			iRichEd->ToggleHighlightL(TTmCharFormat::EBackground);
+			break;
+		case EWordCmdShadow:
+			iRichEd->ToggleHighlightL(TTmCharFormat::EShadow);
+			break;
+		case EWordCmdCustomHighlight:
+			iRichEd->ToggleHighlightL((TUint)TFontPresentation::EFontHighlightFirstCustomStyle << TTmCharFormat::EUserDefinedShift);
+			break;
+		case EWordCmdStandardKeyboard:
+			iTest->SetKeyboardL(CWordTest::EStandardKeyboard);
+			break;
+		case EWordCmdArabicKeyboard:
+			iTest->SetKeyboardL(CWordTest::EArabicKeyboard);
+			break;
+		case EWordCmdGreekKeyboard:
+			iTest->SetKeyboardL(CWordTest::EGreekKeyboard);
+			break;
+		case EWordCmdRussianKeyboard:
+			iTest->SetKeyboardL(CWordTest::ERussianKeyboard);
+			break;
+		case EWordCmdChineseOn:
+		    {
+			const TUid KUidTFepChinese = { 0x1028716D };
+			iEikonEnv->InstallFepL(KUidTFepChinese);
+		    }
+		break;
+		case EWordCmdChineseOff:
+			iEikonEnv->InstallFepL(KNullUid);			
+			break;	
+		case EWordCmdRuledPaper:
+			iTest->SetRuledPaperL(iRichEd,!iTest->RuledPaper());
+			break;
+		case EWordCmdBackgroundBitmap:
+			iTest->SetBackgroundBitmapL(iRichEd,!iTest->BackgroundBitmap());
+			break;
+		case EWordCmdUpperCase:
+			iTest->ToggleCaseL(iRichEd);
+			break;
+		case EWordCmdBenchmark:
+			iTest->BenchmarkL();
+			break;
+		case EWordCmdTruncateWithEllipsis:
+			iTest->SetTruncateWithEllipsisL(iRichEd,!iTest->TruncateWithEllipsis());
+			break;
+		case EWordCmdPictureAlignTop:
+			iTest->SetPictureAlignmentL(iRichEd,TFontPresentation::EAlignTop);
+			break;
+		case EWordCmdPictureAlignBottom:
+			iTest->SetPictureAlignmentL(iRichEd,TFontPresentation::EAlignBottom);
+			break;
+		case EWordCmdPictureAlignCenter:
+			iTest->SetPictureAlignmentL(iRichEd,TFontPresentation::EAlignCentered);
+			break;
+		case EWordCmdPictureAlignBaseline:
+			iTest->SetPictureAlignmentL(iRichEd,TFontPresentation::EAlignBaseLine);
+			break;
+		case EWordCmdWrapOn:
+			iTest->SetWrapL(iRichEd,TRUE);
+			break;
+		case EWordCmdWrapOff:
+			iTest->SetWrapL(iRichEd,FALSE);
+			break;
+		case EWordCmdInsertPicture:
+			{
+			iTest->InsertPictureL(iRichEd);
+			Document()->SetChanged(ETrue);
+			break;	
+			}		
+		case EWordCmdCursorStyleFlash:
+			iTest->ToggleCursorFlash();
+			break;
+		case EWordCmdCursorStyleVertical:
+			iTest->SetCursorPlacement(ECursorVertical);
+			break;
+		case EWordCmdCursorStyleUnderlineNext:
+			iTest->SetCursorPlacement(ECursorUnderlineNext);
+			break;
+		case EWordCmdCursorStyleUnderlinePrev:
+			iTest->SetCursorPlacement(ECursorUnderlinePrev);
+			break;
+		case EWordCmdCursorStyleHeavy:
+			iTest->SetCursorWeight(iTest->CursorWeight() == 3 ? 1 : 3);
+			break;
+		case EWordCmdCursorStyleRed:
+			iTest->SetCursorXorColor(iTest->CursorXorColor() == KRgbWhite ? KRgbCyan : KRgbWhite);
+			break;
+		case EWordCmdUndoTestNotUndoable:
+			iRichEd->TestRunNotUndoableCommandL();
+			break;
+		case EWordCmdPositioningHintNeutral:
+			iTest->SetCursorPositioningHintL(TCursorPosition::EPosHintUndefined);
+			break;
+		case EWordCmdPositioningHintInsertLeftToRight:
+			iTest->SetCursorPositioningHintL(TCursorPosition::EInsertStrongL2R);
+			break;
+		case EWordCmdPositioningHintInsertRightToLeft:
+			iTest->SetCursorPositioningHintL(TCursorPosition::EInsertStrongR2L);
+			break;
+		case EWordCmdSelectionHighlightNormal:
+			iRichEd->TextView()->SetSelectionVisibilityL(EFalse);
+			iTest->SetSelectionHighlightStyle(0);
+			iRichEd->TextView()->SetSelectionVisibilityL(ETrue);
+			break;
+		case EWordCmdSelectionHighlightCustom1:
+			iRichEd->TextView()->SetSelectionVisibilityL(EFalse);
+			iTest->SetSelectionHighlightStyle(1);
+			iRichEd->TextView()->SetSelectionVisibilityL(ETrue);
+			break;
+		case EWordCmdSelectionHighlightCustom2:
+			iRichEd->TextView()->SetSelectionVisibilityL(EFalse);
+			iTest->SetSelectionHighlightStyle(2);
+			iRichEd->TextView()->SetSelectionVisibilityL(ETrue);
+			break;
+		}
+	}
+
+void CWordAppUi::DynInitMenuPaneL(TInt aMenuId,CEikMenuPane* aMenuPane)
+	{
+	TBool readOnly=iRichEd->IsReadOnly();
+	switch (aMenuId)
+		{
+	//
+	//
+	case R_WORD_FILE_MENU:
+		{
+		if (iContainerAppUi)
+			{
+			aMenuPane->DeleteMenuItem(EEikCmdFileNew);
+			aMenuPane->DeleteMenuItem(EEikCmdFileOpen);
+			}
+		break;
+		}
+	//
+	//
+	case R_WORD_FILEOPTIONS_MENU:
+		{
+		if (iContainerAppUi)
+			{
+			aMenuPane->DeleteMenuItem(EEikCmdFileSave);
+			aMenuPane->DeleteMenuItem(EEikCmdFileSaveAs);
+			aMenuPane->DeleteMenuItem(EEikCmdFileRevert);
+			aMenuPane->DeleteMenuItem(EWordCmdFileSaveAsTemplate);
+			aMenuPane->DeleteMenuItem(EWordCmdFileDeleteTemplate);
+			}
+		else if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EEikCmdFileSave,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdFileRevert,TRUE);
+			}
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EEikCmdFileImport,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdHtmlImport,ETrue);
+			}
+		break;
+		}
+	//
+	//
+	case R_WORD_EDIT_MENU:
+		{// read-only dependancies
+		if (readOnly || (!iRichEd->CanUndo()) )
+			aMenuPane->SetItemDimmed(EEikCmdEditUndo,TRUE);
+		if (readOnly || (!iRichEd->CanRedo()) )
+			aMenuPane->SetItemDimmed(EEikCmdEditRedo,TRUE);
+		TInt selection=iRichEd->Selection().Length();
+		if (selection==0)
+			aMenuPane->SetItemDimmed(EEikCmdEditCopy,TRUE);
+		if (readOnly || selection==0)
+			aMenuPane->SetItemDimmed(EEikCmdEditCut,TRUE);
+		if (readOnly)
+			aMenuPane->SetItemDimmed(EEikCmdEditPaste,TRUE);
+		break;
+		}
+	//
+	//
+	case R_WORD_EDITFIND_MENU:
+		{
+		TInt documentLength=iRichEd->TextLength();
+		if (documentLength==0)
+			{
+			aMenuPane->SetItemDimmed(EEikCmdSearchFind,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdSearchFindAgain,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdGoTo,TRUE);
+			}
+		if (documentLength==0 || readOnly)
+			aMenuPane->SetItemDimmed(EEikCmdSearchReplace,TRUE);
+		break;
+		}
+	//
+	//
+	case R_WORD_EDITOPTIONS_MENU:
+		if (readOnly)
+			aMenuPane->SetItemDimmed(EEikCmdEditPictureFormat,TRUE);
+		break;
+	//
+	//
+	case R_WORD_VIEW_MENU:
+		{// No read-only dependant menu options here
+		if (!WysiwygModeIsSet())
+			aMenuPane->SetItemButtonState(EWordCmdWrapToScreen, EEikMenuItemSymbolOn);
+		if (iEikonEnv->AppUiFactory()->ToolBand()->IsVisible())
+			aMenuPane->SetItemButtonState(EWordCmdToolband, EEikMenuItemSymbolOn);
+		if (iEikonEnv->AppUiFactory()->ToolBar()->IsVisible())
+			aMenuPane->SetItemButtonState(EWordCmdToolbar, EEikMenuItemSymbolOn);
+		break;
+		}
+	//
+	//
+	case R_WORD_INSERT_MENU:
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdInsertSketch,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdInsertSheet,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdInsertObject,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdInsertPageBreak,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdInsertLineBreak,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdInsertSymbol,TRUE);
+			}
+		break;
+	//
+	//
+	case R_WORD_TEXT_MENU:
+		{
+		TCharFormat charFormat;
+		TCharFormatMask charUndeterminedMask;
+		((CRichText*)iRichEd->Text())->GetCharFormat(charFormat,charUndeterminedMask,iRichEd->CursorPos(),0);
+
+		if (charFormat.iFontSpec.iFontStyle.StrokeWeight()==EStrokeWeightBold)
+			aMenuPane->SetItemButtonState(EEikCmdFontBold,EEikMenuItemSymbolOn);
+		if (charFormat.iFontSpec.iFontStyle.Posture()==EPostureItalic)
+			aMenuPane->SetItemButtonState(EEikCmdFontItalic,EEikMenuItemSymbolOn);
+		if (charFormat.iFontPresentation.iUnderline==EUnderlineOn)
+			aMenuPane->SetItemButtonState(EEikCmdFontUnderline,EEikMenuItemSymbolOn);
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EEikCmdFontBold,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdFontItalic,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdFontUnderline,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdFontChange,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdRevertToStyleChar,TRUE);
+			}
+		break;
+		}
+	//
+	//
+	case R_WORD_PARAGRAPH_MENU:
+		{
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdRevertToStylePara,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdParaIndent,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdParaTabs,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdParaSpacing,TRUE);
+			aMenuPane->SetItemDimmed(EEikCmdParaBorder,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdStyleGallery,TRUE);
+			}
+		break;
+		}
+	//
+	//
+	case R_WORD_PARA_ALIGNMENT_MENU:
+		{
+		CParaFormat* paraFormat=CParaFormat::NewLC();
+		TParaFormatMask paraUndeterminedMask;
+		const TCursorSelection selection=iRichEd->Selection();
+		Text()->GetParaFormatL(paraFormat,paraUndeterminedMask,selection.LowerPos(),selection.Length());
+		if (!paraUndeterminedMask.AttribIsSet(EAttAlignment))
+			{
+			switch (paraFormat->iHorizontalAlignment)
+				{
+			case CParaFormat::ELeftAlign:
+				aMenuPane->SetItemButtonState(EWordCmdAlignLeft,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(0);
+				break;
+			case CParaFormat::ERightAlign:
+				aMenuPane->SetItemButtonState(EWordCmdAlignRight,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(1);
+				break;
+			case CParaFormat::ECenterAlign:	
+				aMenuPane->SetItemButtonState(EWordCmdAlignCenter,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(2);
+				break;
+			case CParaFormat::EJustifiedAlign:
+				aMenuPane->SetItemButtonState(EWordCmdAlignJustify,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(3);
+				break;
+			default:
+				break;
+				}
+			}
+		CleanupStack::PopAndDestroy();
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdAlignLeft,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdAlignRight,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdAlignCenter,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdAlignJustify,TRUE);
+			}
+		break;
+		}
+	//
+	//
+	case R_WORD_PARA_BULLETS_MENU:
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdInsertBullet,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdFormatBullet,TRUE);
+			}
+		break;
+	//
+	//
+	case R_WORD_TOOLS_MENU:
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdObjectPreferences,TRUE);
+			}
+		break;
+	//
+	//
+	case R_EIK_SIDEBAR_IRDA_MENU:
+	case R_WORD_TOOLS_INFRARED:
+		aMenuPane->SetItemDimmed(EEikCmdIrdaReceive, TRUE);
+		aMenuPane->SetItemDimmed(EEikCmdIrdaSend, TRUE);
+		break;
+	//
+	//
+	case R_EIK_SIDEBAR_EDIT_MENU:
+		{
+		TInt selection=iRichEd->Selection().Length();
+		if (selection==0)
+			aMenuPane->SetItemDimmed(EEikCmdEditCopy,TRUE);
+		if (readOnly || selection==0)
+			aMenuPane->SetItemDimmed(EEikCmdEditCut,TRUE);
+		if (readOnly)
+			aMenuPane->SetItemDimmed(EEikCmdEditPaste,TRUE);
+		}
+		break;
+
+	case R_WORD_TEST_MENU:
+		{
+		TPtrC text;
+		TCharFormat format;
+		iRichEd->RichText()->GetChars(text,format,iRichEd->Selection().LowerPos());
+		TFontPresentation::TFontHighlightStyle highlight = format.iFontPresentation.iHighlightStyle;
+		if (highlight == TFontPresentation::EFontHighlightNormal)
+			aMenuPane->SetItemButtonState(EWordCmdHighlight,EEikMenuItemSymbolOn);
+		else if (highlight == TFontPresentation::EFontHighlightShadow)
+			aMenuPane->SetItemButtonState(EWordCmdShadow,EEikMenuItemSymbolOn);
+		else if (highlight == TFontPresentation::EFontHighlightFirstCustomStyle)
+			aMenuPane->SetItemButtonState(EWordCmdCustomHighlight,EEikMenuItemSymbolOn);
+		if (iTest->RuledPaper())
+			aMenuPane->SetItemButtonState(EWordCmdRuledPaper,EEikMenuItemSymbolOn);
+		if (iTest->BackgroundBitmap())
+			aMenuPane->SetItemButtonState(EWordCmdBackgroundBitmap,EEikMenuItemSymbolOn);
+		if (text.Length() && TChar(text[0]).IsUpper())
+			aMenuPane->SetItemButtonState(EWordCmdUpperCase,EEikMenuItemSymbolOn);
+		if (iTest->TruncateWithEllipsis())
+			aMenuPane->SetItemButtonState(EWordCmdTruncateWithEllipsis,EEikMenuItemSymbolOn);
+		}
+		break;
+
+	case R_WORD_PICTURE_ALIGNMENT_MENU:
+		{
+		TCharFormat format;
+		TCursorSelection sel = iRichEd->Selection();
+		TCharFormatMask varies;
+		Text()->GetCharFormat(format,varies,sel.LowerPos(),sel.Length());
+		if (!varies.AttribIsSet(EAttFontPictureAlignment))
+			{
+			switch (format.iFontPresentation.iPictureAlignment)
+				{
+				case TFontPresentation::EAlignTop:
+					aMenuPane->SetItemButtonState(EWordCmdPictureAlignTop,EEikMenuItemSymbolOn);
+					aMenuPane->SetSelectedItem(0);
+					break;
+				case TFontPresentation::EAlignBottom:
+					aMenuPane->SetItemButtonState(EWordCmdPictureAlignBottom,EEikMenuItemSymbolOn);
+					aMenuPane->SetSelectedItem(1);
+					break;
+				case TFontPresentation::EAlignCentered:	
+					aMenuPane->SetItemButtonState(EWordCmdPictureAlignCenter,EEikMenuItemSymbolOn);
+					aMenuPane->SetSelectedItem(2);
+					break;
+				case TFontPresentation::EAlignBaseLine:
+					aMenuPane->SetItemButtonState(EWordCmdPictureAlignBaseline,EEikMenuItemSymbolOn);
+					aMenuPane->SetSelectedItem(3);
+					break;
+				default:
+					break;
+				}
+			}
+		if (readOnly)
+			{
+			aMenuPane->SetItemDimmed(EWordCmdPictureAlignTop,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdPictureAlignBottom,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdPictureAlignCenter,TRUE);
+			aMenuPane->SetItemDimmed(EWordCmdPictureAlignBaseline,TRUE);
+			}
+		break;
+		}
+
+	case R_WORD_KEYBOARD_MENU:
+		switch (iTest->Keyboard())
+			{
+			case CWordTest::EStandardKeyboard:
+				aMenuPane->SetItemButtonState(EWordCmdStandardKeyboard,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(0);
+				break;
+			case CWordTest::EGreekKeyboard:
+				aMenuPane->SetItemButtonState(EWordCmdGreekKeyboard,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(1);
+				break;
+			case CWordTest::ERussianKeyboard:
+				aMenuPane->SetItemButtonState(EWordCmdRussianKeyboard,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(2);
+				break;
+			case CWordTest::EArabicKeyboard:
+				aMenuPane->SetItemButtonState(EWordCmdArabicKeyboard,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(3);
+				break;
+			}
+		break;
+
+	case R_WORD_CURSOR_STYLE_MENU:
+		if (iTest->CursorFlashing())
+			aMenuPane->SetItemButtonState(EWordCmdCursorStyleFlash,EEikMenuItemSymbolOn);
+		if (iTest->CursorWeight() >= 3)
+			aMenuPane->SetItemButtonState(EWordCmdCursorStyleHeavy,EEikMenuItemSymbolOn);
+		if (iTest->CursorXorColor() == KRgbCyan)
+			aMenuPane->SetItemButtonState(EWordCmdCursorStyleRed,EEikMenuItemSymbolOn);
+		switch (iTest->CursorPlacement())
+			{
+			case ECursorVertical:
+				aMenuPane->SetItemButtonState(EWordCmdCursorStyleVertical,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(1);
+				break;
+			case ECursorUnderlineNext:
+				aMenuPane->SetItemButtonState(EWordCmdCursorStyleUnderlineNext,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(2);
+				break;
+			case ECursorUnderlinePrev:
+				aMenuPane->SetItemButtonState(EWordCmdCursorStyleUnderlinePrev,EEikMenuItemSymbolOn);
+				aMenuPane->SetSelectedItem(3);
+				break;
+			}
+		break;
+	case R_WORD_SELECTION_HIGHLIGHT_MENU:
+		aMenuPane->SetItemButtonState(
+			aMenuPane->MenuItemCommandId(iTest->SelectionHighlightStyle()),
+			EEikMenuItemSymbolOn);
+		break;
+
+	case R_WORD_POSITIONING_HINT_TEST_MENU:
+		switch(iTest->CursorPositioningHint())
+			{
+		case TCursorPosition::EPosHintUndefined:
+			aMenuPane->SetItemButtonState(
+				EWordCmdPositioningHintNeutral,
+				EEikMenuItemSymbolOn);
+			aMenuPane->SetSelectedItem(1);
+			break;
+		case TCursorPosition::EInsertStrongL2R:
+			aMenuPane->SetItemButtonState(
+				EWordCmdPositioningHintInsertLeftToRight,
+				EEikMenuItemSymbolOn);
+			aMenuPane->SetSelectedItem(2);
+			break;
+		case TCursorPosition::EInsertStrongR2L:
+			aMenuPane->SetItemButtonState(
+				EWordCmdPositioningHintInsertRightToLeft,
+				EEikMenuItemSymbolOn);
+			aMenuPane->SetSelectedItem(3);
+			break;
+			}
+		break;
+	default:
+		break;
+		}
+	}
+	
+void CWordAppUi::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
+	{
+	if (iWordFlags&EFNameBoxPopped && (aEventType==EEventRequestCancel ||aEventType==EEventRequestExit))
+		{
+		if (aEventType==EEventRequestExit)
+			{
+			TCharFormatMask charFormatMask;
+			TCharFormat charFormat;
+			const TCursorSelection selection=iRichEd->Selection();
+			Text()->GetCharFormat(charFormat,charFormatMask,selection.LowerPos(),selection.Length());
+			TInt index=iPopoutListBox->CurrentItemIndex();
+			charFormat.iFontSpec.iTypeface.iName=iPopoutListBox->Model()->ItemText(index);
+
+			charFormat.iFontSpec.iTypeface.SetAttributes(FontUtils::TypefaceAttributes(*iCoeEnv->ScreenDevice(),charFormat.iFontSpec.iTypeface.iName));
+
+			iTwipsList=new(ELeave) CArrayFixFlat<TInt>(4);
+			FontUtils::GetAvailableHeightsInTwipsL(*iCoeEnv->ScreenDevice(),charFormat.iFontSpec.iTypeface.iName,*iTwipsList);
+			index=FontUtils::IndexOfNearestHeight(*iTwipsList,charFormat.iFontSpec.iHeight);
+			charFormat.iFontSpec.iHeight=(*iTwipsList)[index];
+			charFormatMask.ClearAll();
+			charFormatMask.SetAttrib(EAttFontTypeface);	 
+			iRichEd->ApplyCharFormatL(charFormat,charFormatMask);
+			//
+			// Sense format of lower pos of selection to display appropriate info on toolband button labels
+			Text()->GetCharFormat(charFormat,charFormatMask,selection.LowerPos(),selection.Length());
+			UpdateToolBandFontNameButtonL(charFormat.iFontSpec.iTypeface.iName);
+			UpdateToolBandFontHeightButtonL(charFormat.iFontSpec.iHeight);
+			SetPaginationOutOfDate(TRUE);
+			}
+		iWordFlags&=~EFNameBoxPopped;
+		DestroyPopoutLBox();
+		return;
+		}
+	else if (iWordFlags&EStyleBoxPopped && (aEventType==EEventRequestCancel ||aEventType==EEventRequestExit))
+		{
+		if (aEventType==EEventRequestExit)
+			{
+			const TCursorSelection selection=iRichEd->Selection();
+			TInt index=iPopoutListBox->CurrentItemIndex();
+			TParagraphStyleName name;
+			iCoeEnv->ReadResource(name, R_WORD_NORMAL);
+			CDesCArray* array=(CDesCArray*)(iPopoutListBox->Model()->ItemTextArray());
+			if (name==(*array)[index])
+				Text()->ApplyParagraphStyleL(*(CParagraphStyle*)Text()->GlobalParaFormatLayer(),selection.LowerPos(),selection.Length(),KApplyParaStyleMode);
+			else
+				{
+				const CParagraphStyle& paraStyle=*(Text()->StyleList()->PtrByName((*array)[index])->iStyle);
+		   		Text()->ApplyParagraphStyleL(paraStyle,selection.LowerPos(),selection.Length(),KApplyParaStyleMode);
+				}
+			ReformatDueToStateChangeL();
+			}
+		iWordFlags&=~EStyleBoxPopped;
+		DestroyPopoutLBox();
+		return;
+		}
+	else if (iWordFlags&EAlignBoxPopped && (aEventType==EEventRequestCancel ||aEventType==EEventRequestExit))
+		{
+		if (aEventType==EEventRequestExit)
+			{
+			const TInt index = iBitmapPopout->CurrentItemIndex();
+			SetParaAlignmentL(index);
+			ReformatDueToStateChangeL();
+			}
+		iWordFlags&=~EAlignBoxPopped;
+		DestroyPopoutLBox();
+		return;
+		}
+	else if (iWordFlags&EFHeightBoxPopped && (aEventType==EEventRequestCancel ||aEventType==EEventRequestExit))
+		{
+		if (aEventType==EEventRequestExit)
+			{
+			TCharFormatMask charFormatMask;
+			TCharFormat charFormat;
+			TInt index=iPopoutListBox->CurrentItemIndex();
+			charFormatMask.SetAttrib(EAttFontHeight);	 
+			charFormat.iFontSpec.iHeight=(*iTwipsList)[index];
+			iRichEd->ApplyCharFormatL(charFormat,charFormatMask);
+			UpdateToolBandFontHeightButtonL(charFormat.iFontSpec.iHeight);
+			}
+		iWordFlags&=~EFHeightBoxPopped;
+		DestroyPopoutLBox();
+		return;
+		}
+	else if (iWordFlags&EBordersPopped && (aEventType==EEventRequestCancel ||aEventType==EEventRequestExit))
+		{
+		if (aEventType==EEventRequestExit)
+			{
+			TParaBorder top;
+			TParaBorder bottom;
+			TParaBorder left;
+			TParaBorder right;
+			const TInt index=iMcBitmapPopout->CurrentItemIndex();
+			switch (index)
+				{
+			case (ESingleFull-ESingleFull):
+				top.iThickness=KThinBorderThicknessInTwips;
+				bottom.iThickness=KThinBorderThicknessInTwips;
+				left.iThickness=KThinBorderThicknessInTwips;
+				right.iThickness=KThinBorderThicknessInTwips;
+				break;
+			case (ESingleTop-ESingleFull):
+				top.iThickness=KThinBorderThicknessInTwips;
+				break;
+			case (ESingleBottom-ESingleFull):
+				bottom.iThickness=KThinBorderThicknessInTwips;
+				break;
+			case (ESingleTopAndBottom-ESingleFull):
+				top.iThickness=KThinBorderThicknessInTwips;
+				bottom.iThickness=KThinBorderThicknessInTwips;
+				break;
+			case (EDoubleFull-ESingleFull):
+				top.iThickness=KThickBorderThicknessInTwips;
+				bottom.iThickness=KThickBorderThicknessInTwips;
+				left.iThickness=KThickBorderThicknessInTwips;
+				right.iThickness=KThickBorderThicknessInTwips;
+				break;
+			case (EDoubleTop-ESingleFull):
+				top.iThickness=KThickBorderThicknessInTwips;
+				break;
+			case (EDoubleBottom-ESingleFull):
+				bottom.iThickness=KThickBorderThicknessInTwips;
+				break;
+				}
+			switch (index)
+				{
+			case (ESingleFull-ESingleFull):
+			case (EDoubleFull-ESingleFull):
+				top.iLineStyle=TParaBorder::ESolid;
+				bottom.iLineStyle=TParaBorder::ESolid;
+				left.iLineStyle=TParaBorder::ESolid;
+				right.iLineStyle=TParaBorder::ESolid;
+				break;
+			case (ESingleTop-ESingleFull):
+			case (EDoubleTop-ESingleFull):
+				top.iLineStyle=TParaBorder::ESolid;
+				break;
+			case (ESingleBottom-ESingleFull):
+			case (EDoubleBottom-ESingleFull):
+				bottom.iLineStyle=TParaBorder::ESolid;
+				break;
+			case (ESingleTopAndBottom-ESingleFull):
+				top.iLineStyle=TParaBorder::ESolid;
+				bottom.iLineStyle=TParaBorder::ESolid;
+				break;
+				}
+			TParaFormatMask mask;
+			mask.SetAttrib(EAttTopBorder);
+			mask.SetAttrib(EAttBottomBorder);
+			mask.SetAttrib(EAttLeftBorder);
+			mask.SetAttrib(EAttRightBorder);
+			CParaFormat* paraFormat=CParaFormat::NewLC();
+			paraFormat->SetParaBorderL(CParaFormat::EParaBorderTop,top);
+			paraFormat->SetParaBorderL(CParaFormat::EParaBorderBottom,bottom);
+			paraFormat->SetParaBorderL(CParaFormat::EParaBorderLeft,left);
+			paraFormat->SetParaBorderL(CParaFormat::EParaBorderRight,right);
+			iRichEd->ApplyParaFormatL(paraFormat,mask);
+			CleanupStack::PopAndDestroy(); // paraFormat
+			}
+		iWordFlags&=~EBordersPopped;
+		DestroyPopoutLBox();
+		return;
+		}
+    if (aEventType==EEventStateChanged)
+		{
+		SetPaginationOutOfDate(TRUE);
+		if (aControl==iRichEd)
+			iToolBarUpdate->Start(CWordToolBarUpdate::ECharFormatUpdate);
+		}
+	if (iPaginateDialogCalled && aEventType==EEventRequestExit)
+		{ // !! possibly better - the dialog should define its own observer class
+		delete aControl;
+		SetPaginationOutOfDate(FALSE);
+		iPaginateDialogCalled=FALSE;
+		return;
+		}  
+	}
+
+
+void CWordAppUi::HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType)
+	{
+	if (aEdwin==iRichEd && (aEventType==MEikEdwinObserver::EEventFormatChanged || 
+							aEventType==MEikEdwinObserver::EEventNavigation))
+		{
+		if (aEventType==MEikEdwinObserver::EEventFormatChanged)
+			{
+			SetPaginationOutOfDate(TRUE);
+			SetDocChanged();
+			}
+		if (iEikonEnv->AppUiFactory()->ToolBar()->IsVisible() || iEikonEnv->AppUiFactory()->ToolBand()->IsVisible())
+			iToolBarUpdate->Start(CWordToolBarUpdate::EFullUpdate);
+		}
+	}
+
+void CWordAppUi::RunPageSetupDialogL()
+	{
+	if (CEikPageSetupDialog::RunDlgLD(iPrintSetup))
+		{
+		CTextPageRegionPrinter& printer=PageRegionPrinter();
+		printer.SetPageMarginsInTwips(iPrintSetup->iPageMarginsInTwips.iMargins);
+		printer.SetPageSpecInTwips(iPrintSetup->PrinterDevice()->CurrentPageSpecInTwips());
+		SetPaginationOutOfDate(TRUE);
+		SetDocChanged();
+		UpdatePageLayoutL();
+		iRichEd->DrawNow();  // need to display any page breaks immediatley.
+		}
+	}