--- /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.
+ }
+ }