diff -r aabf2c525e0f -r 9f56a4e1b8ab uifw/EikStd/coctlsrc/EikCcpu.cpp --- a/uifw/EikStd/coctlsrc/EikCcpu.cpp Fri Mar 12 15:43:43 2010 +0200 +++ b/uifw/EikStd/coctlsrc/EikCcpu.cpp Mon Mar 15 12:41:34 2010 +0200 @@ -25,10 +25,40 @@ #include #include #include -const TInt ELeftSoftkeyIndex = 0; -const TInt ERightSoftkeyIndex = 2; -const TInt ENullCommandId = -1; +const TInt KLeftSoftkeyIndex = 0; +const TInt KRightSoftkeyIndex = 2; +const TInt KNullCommandId = -1; + +/** +* Internal extension class for CAknCcpuSupport. +* +* @since 9.2 +* +* @internal +*/ +NONSHARABLE_CLASS( CAknCcpuSupportExtension ) : public CBase + { +public: // Construction and destruction + CAknCcpuSupportExtension(); + ~CAknCcpuSupportExtension(); + +public: // Data + TBool iIsCbaEmded; + // Owned + CEikButtonGroupContainer* iCba; + // not owned + CEikButtonGroupContainer* iDialogCba; + }; + +CAknCcpuSupportExtension::CAknCcpuSupportExtension() + { + } + +CAknCcpuSupportExtension::~CAknCcpuSupportExtension() + { + delete iCba; + } // // CAknCcpuSupport @@ -39,77 +69,85 @@ EFocused }; -EXPORT_C CAknCcpuSupport::CAknCcpuSupport(MEikCcpuEditor* aEditor) -: iEditor(aEditor) +EXPORT_C CAknCcpuSupport::CAknCcpuSupport( MEikCcpuEditor* aEditor ) +: iEditor( aEditor ) { } EXPORT_C CAknCcpuSupport::~CAknCcpuSupport() { - if (iMenu) + if ( iMenu ) + { iMenu->RemoveEditMenuObserver(this); - //delete iCba; - TRAP_IGNORE(DeleteCBAL()); - iEikonEnv->EikAppUi()->RemoveFromStack(this); + } + TRAP_IGNORE( DeleteCBAL() ); + iEikonEnv->EikAppUi()->RemoveFromStack( this ); + delete iExtention; } EXPORT_C void CAknCcpuSupport::ConstructL() { - iEikonEnv->EikAppUi()->AddToStackL(this, ECoeStackPriorityFep-1, ECoeStackFlagRefusesFocus); + iExtention = new ( ELeave ) CAknCcpuSupportExtension; + iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityFep-1, ECoeStackFlagRefusesFocus ); HandleFocusChangeL(); } EXPORT_C void CAknCcpuSupport::HandleSelectionChangeL() { - if (iCba) + if ( iExtention->iCba ) + { UpdateCBALabelsL(); + } } EXPORT_C void CAknCcpuSupport::HandleFocusChangeL() { TBool focused = iEditor->CcpuIsFocused(); - if (COMPARE_BOOLS(focused, iFlags[EFocused])) + if ( COMPARE_BOOLS( focused, iFlags[EFocused] ) ) + { return; + } - iFlags.Assign(EFocused, focused); + iFlags.Assign( EFocused, focused ); - if (focused) + if ( focused ) { - MopGetObject(iMenu); - - if (iMenu) - iMenu->SetEditMenuObserver(this); + MopGetObject( iMenu ); + if ( iMenu ) + { + iMenu->SetEditMenuObserver( this ); + } } else { - if (iMenu) + if ( iMenu ) { - iMenu->RemoveEditMenuObserver(this); + iMenu->RemoveEditMenuObserver( this ); iMenu = NULL; } } - if (iCba && !focused) + if ( iExtention->iCba && !focused ) { // something has caused loss of focus while shift is pressed - drop everything. - //delete iCba; - //iCba = NULL; DeleteCBAL(); } } -EXPORT_C TKeyResponse CAknCcpuSupport::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) +EXPORT_C TKeyResponse CAknCcpuSupport::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) { - if (!iFlags[EFocused]) + if ( !iFlags[EFocused] ) + { return EKeyWasNotConsumed; + } - if (aKeyEvent.iCode == EKeyF21) // FEP generates F21 on long shift press + if ( aKeyEvent.iCode == EKeyF21 ) // FEP generates F21 on long shift press { - if (aType == EEventKey) + if ( aType == EEventKey ) { DeleteCBAL(); CEikAppUi* eikAppUi = (CEikAppUi *)CCoeEnv::Static()->AppUi(); - if( eikAppUi!= NULL && eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl() ) + if( eikAppUi && eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl() ) { CEikDialog* dlg = eikAppUi->TopFocusedControl()->MopGetObject( dlg ); if ( dlg ) @@ -121,76 +159,81 @@ CEikCba* dlgcba = static_cast( currentCba->ButtonGroup() ); TUint flags( 0 ); flags |= CEikButtonGroupContainer::EIsEmbedded | CEikButtonGroupContainer::EAddToStack; - iCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal, + iExtention->iCba = CEikButtonGroupContainer::NewL( + CEikButtonGroupContainer::ECba, + CEikButtonGroupContainer::EHorizontal, this, R_AVKON_SOFTKEYS_EMPTY, flags ); CEikCba* cba = static_cast( - iCba->ButtonGroup() ); + iExtention->iCba->ButtonGroup() ); - if( ! isCbaEmded ) + if( !iExtention->iIsCbaEmded ) { - currentCba->AddCommandToStackL(ELeftSoftkeyIndex, -1, _L(""), NULL, NULL); - currentCba->AddCommandToStackL(ERightSoftkeyIndex, -1, _L(""), NULL, NULL); + currentCba->AddCommandToStackL( KLeftSoftkeyIndex, -1, KNullDesC, NULL, NULL ); + currentCba->AddCommandToStackL( KRightSoftkeyIndex, -1, KNullDesC, NULL, NULL ); currentCba->ActivateL(); currentCba->DrawNow(); - iDialogCba = currentCba; - isCbaEmded = ETrue; + iExtention->iDialogCba = currentCba; + iExtention->iIsCbaEmded = ETrue; } - cba->SetButtonGroupFlags( ~(EEikCbaFlagTransparent | EEikCbaFlagOutlineFont) ); + cba->SetButtonGroupFlags( ~( EEikCbaFlagTransparent | EEikCbaFlagOutlineFont ) ); TRect dlgRect(dlg->Rect()); TRect cbaRect(currentCba->Rect()); - iCba->SetRect( currentCba->Rect()); - iCba->SetPosition(TPoint(dlg->DrawableWindow()->Position().iX,dlg->DrawableWindow()->Position().iY + dlgRect.Height() - cbaRect.Height())); - iCba->SetBoundingRect( dlg->Rect()); + iExtention->iCba->SetRect( currentCba->Rect()); + iExtention->iCba->SetPosition( + TPoint( dlg->DrawableWindow()->Position().iX, + dlg->DrawableWindow()->Position().iY + dlgRect.Height() - cbaRect.Height() ) ); + iExtention->iCba->SetBoundingRect( dlg->Rect() ); - } - - } - + } + } } - if(iCba == NULL)//if iCba was not create in the above branch but was deleted by DeleteCBA + if( !iExtention->iCba )//if iCba was not create in the above branch but was deleted by DeleteCBA { - iCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal, this, R_AVKON_SOFTKEYS_EMPTY); - iCba->SetBoundingRect(iEikonEnv->EikAppUi()->ApplicationRect()); + iExtention->iCba = CEikButtonGroupContainer::NewL( + CEikButtonGroupContainer::ECba, + CEikButtonGroupContainer::EHorizontal, + this, R_AVKON_SOFTKEYS_EMPTY ); + iExtention->iCba->SetBoundingRect( iEikonEnv->EikAppUi()->ApplicationRect() ); } UpdateCBALabelsL(); } return EKeyWasConsumed; } - else if (aType == EEventKey && - aKeyEvent.iCode == EKeyF18 && - (aKeyEvent.iModifiers & EModifierCtrl)) + else if ( aType == EEventKey && + aKeyEvent.iCode == EKeyF18 && + ( aKeyEvent.iModifiers & EModifierCtrl ) ) { // FEP requests Ccpu actions with CTRL + F18 // Requested action is encoded in iScanCode. - ProcessCommandL(aKeyEvent.iScanCode); + ProcessCommandL( aKeyEvent.iScanCode ); return EKeyWasConsumed; } - else if ((aKeyEvent.iScanCode == EStdKeyLeftShift || aKeyEvent.iScanCode == EStdKeyRightShift) && aType == EEventKeyUp) + else if ( ( aKeyEvent.iScanCode == EStdKeyLeftShift || + aKeyEvent.iScanCode == EStdKeyRightShift ) && + aType == EEventKeyUp ) { - //delete iCba; - //iCba = NULL; DeleteCBAL(); } return EKeyWasNotConsumed; } -EXPORT_C void CAknCcpuSupport::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) +EXPORT_C void CAknCcpuSupport::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ) { - if (aResourceId == R_AVKON_EDIT_MODE_MENU || - aResourceId == R_AVKON_EDIT_TEXT_MENU) + if ( aResourceId == R_AVKON_EDIT_MODE_MENU || + aResourceId == R_AVKON_EDIT_TEXT_MENU ) { - aMenuPane->SetItemDimmed(EEikCmdEditCut,!iEditor->CcpuCanCut()); - aMenuPane->SetItemDimmed(EEikCmdEditCopy,!iEditor->CcpuCanCopy()); - aMenuPane->SetItemDimmed(EEikCmdEditPaste,!iEditor->CcpuCanPaste()); + aMenuPane->SetItemDimmed( EEikCmdEditCut,!iEditor->CcpuCanCut() ); + aMenuPane->SetItemDimmed( EEikCmdEditCopy,!iEditor->CcpuCanCopy() ); + aMenuPane->SetItemDimmed( EEikCmdEditPaste,!iEditor->CcpuCanPaste() ); } } -EXPORT_C void CAknCcpuSupport::ProcessCommandL(TInt aCommandId) +EXPORT_C void CAknCcpuSupport::ProcessCommandL( TInt aCommandId ) { - switch (aCommandId) + switch ( aCommandId ) { case EEikCmdEditCut: iEditor->CcpuCutL(); @@ -213,41 +256,49 @@ { TBool change = EFalse; - if (iEditor->CcpuCanCopy()) - change = UpdateCBALabelL(ELeftSoftkeyIndex, EEikCmdEditCopy, R_TEXT_SOFTKEY_COPY) || change; + if ( iEditor->CcpuCanCopy() ) + { + change = UpdateCBALabelL( KLeftSoftkeyIndex, EEikCmdEditCopy, R_TEXT_SOFTKEY_COPY ) || change; + } else - change = UpdateCBALabelL(ELeftSoftkeyIndex, ENullCommandId, R_TEXT_SOFTKEY_EMPTY) || change; + { + change = UpdateCBALabelL( KLeftSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY ) || change; + } - if (iEditor->CcpuCanPaste()) - change = UpdateCBALabelL(ERightSoftkeyIndex, EEikCmdEditPaste, R_TEXT_SOFTKEY_PASTE) || change; + if ( iEditor->CcpuCanPaste() ) + { + change = UpdateCBALabelL( KRightSoftkeyIndex, EEikCmdEditPaste, R_TEXT_SOFTKEY_PASTE ) || change; + } else - change = UpdateCBALabelL(ERightSoftkeyIndex, ENullCommandId, R_TEXT_SOFTKEY_EMPTY) || change; + { + change = UpdateCBALabelL( KRightSoftkeyIndex, KNullCommandId, R_TEXT_SOFTKEY_EMPTY ) || change; + } - if (change) + if ( change ) { - iCba->DrawNow(); + iExtention->iCba->DrawNow(); } } -TBool CAknCcpuSupport::UpdateCBALabelL(TInt aPosition, TInt aCommandId, TInt aTextResId) +TBool CAknCcpuSupport::UpdateCBALabelL( TInt aPosition, TInt aCommandId, TInt aTextResId ) { - if (iCba->ButtonGroup()->CommandId(aPosition) != aCommandId) + if ( iExtention->iCba->ButtonGroup()->CommandId(aPosition) != aCommandId ) { - HBufC* buf = iEikonEnv->AllocReadResourceLC(aTextResId); - iCba->SetCommandL(aPosition, aCommandId, *buf); - CleanupStack::PopAndDestroy(buf); + HBufC* buf = iEikonEnv->AllocReadResourceLC( aTextResId ); + iExtention->iCba->SetCommandL( aPosition, aCommandId, *buf ); + CleanupStack::PopAndDestroy( buf ); return ETrue; } return EFalse; } -void CAknCcpuSupport::SetEmphasis(CCoeControl* /*aMenuControl*/,TBool /*aEmphasis*/) +void CAknCcpuSupport::SetEmphasis( CCoeControl* /*aMenuControl*/, TBool /*aEmphasis*/ ) { } -EXPORT_C void CAknCcpuSupport::HandlePointerEventL(const TPointerEvent& aPointerEvent) +EXPORT_C void CAknCcpuSupport::HandlePointerEventL( const TPointerEvent& aPointerEvent ) { - CAknControl::HandlePointerEventL(aPointerEvent); + CAknControl::HandlePointerEventL( aPointerEvent ); } EXPORT_C void* CAknCcpuSupport::ExtensionInterface( TUid /*aInterface*/ ) @@ -256,35 +307,32 @@ } void CAknCcpuSupport::DeleteCBAL() { - if ( iCba != NULL ) + if ( iExtention->iCba ) { - delete iCba; - iCba = NULL; + delete iExtention->iCba; + iExtention->iCba = NULL; } - if (isCbaEmded) + if ( iExtention->iIsCbaEmded ) { CEikAppUi* eikAppUi = (CEikAppUi *)CCoeEnv::Static()->AppUi(); - if( eikAppUi!= NULL && eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl() ) - { - CEikDialog* dlg = eikAppUi->TopFocusedControl()->MopGetObject( dlg ); - if ( dlg ) - { - CEikButtonGroupContainer* currentCba = dlg->MopGetObject( currentCba ); - CEikCba* dlgcba = static_cast( - currentCba->ButtonGroup() ); - if ( currentCba && iDialogCba == currentCba ) - { - currentCba->RemoveCommandFromStack(ELeftSoftkeyIndex,-1); - currentCba->RemoveCommandFromStack(ERightSoftkeyIndex,-1); - - //dlgcba->UpdateCbaLabels(EFalse); - currentCba->DrawNow(); - currentCba->ActivateL(); - iDialogCba = NULL; - isCbaEmded = EFalse; - } - } - } + if( eikAppUi && eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl() ) + { + CEikDialog* dlg = eikAppUi->TopFocusedControl()->MopGetObject( dlg ); + if ( dlg ) + { + CEikButtonGroupContainer* currentCba = dlg->MopGetObject( currentCba ); + CEikCba* dlgcba = static_cast( + currentCba->ButtonGroup() ); + if ( currentCba && iExtention->iDialogCba == currentCba ) + { + currentCba->RemoveCommandFromStack( KLeftSoftkeyIndex, -1 ); + currentCba->RemoveCommandFromStack( KRightSoftkeyIndex, -1 ); + currentCba->DrawNow(); + currentCba->ActivateL(); + iExtention->iDialogCba = NULL; + iExtention->iIsCbaEmded = EFalse; + } + } + } } - }