diff -r a1caeb42b3a3 -r fcdfafb36fe7 uifw/eikctl/src/EIKMFNE.CPP --- a/uifw/eikctl/src/EIKMFNE.CPP Thu Jul 15 18:56:19 2010 +0300 +++ b/uifw/eikctl/src/EIKMFNE.CPP Thu Aug 19 10:11:06 2010 +0300 @@ -104,6 +104,128 @@ User::Panic(KPanicCat, aPanic); } +NONSHARABLE_CLASS(CEikTimeEditorExtension) : public CBase, + public CAknExtendedInputCapabilities::MAknEventObserver + { +public: + static CEikTimeEditorExtension* NewL(); + virtual ~CEikTimeEditorExtension(); +private: + CEikTimeEditorExtension(); + + void ConstructL(); +public: + /** + * From CAknExtendedInputCapabilities::MAknEventObserver + * Handle an event + * + * @since S60 v9.2 + * @param aEvent An event, see TInputCapabilitiesEvent + * @param aParams Event dependent parameters + */ + + void HandleInputCapabilitiesEventL( TInt aEvent, TAny* aParams ); +public: + CEikTimeEditor * iEditor; + }; + +CEikTimeEditorExtension* CEikTimeEditorExtension::NewL() + { + CEikTimeEditorExtension* self = new (ELeave) CEikTimeEditorExtension(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CEikTimeEditorExtension::~CEikTimeEditorExtension() + { + + } + +CEikTimeEditorExtension::CEikTimeEditorExtension() + { + } + +void CEikTimeEditorExtension::ConstructL() + { + } + +void CEikTimeEditorExtension::HandleInputCapabilitiesEventL( TInt aEvent, TAny* /*aParams*/ ) + { + switch ( aEvent ) + { + case CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm: + if ( iEditor ) + { + iEditor->ChangeAmPm(); + } + break; + } + return; + } + + +NONSHARABLE_CLASS(CEikTimeAndDateEditorExtension) : public CBase, + public CAknExtendedInputCapabilities::MAknEventObserver + { +public: + static CEikTimeAndDateEditorExtension* NewL(); + virtual ~CEikTimeAndDateEditorExtension(); +private: + CEikTimeAndDateEditorExtension(); + + void ConstructL(); +public: + /** + * From CAknExtendedInputCapabilities::MAknEventObserver + * Handle an event + * + * @since S60 v9.2 + * @param aEvent An event, see TInputCapabilitiesEvent + * @param aParams Event dependent parameters + */ + + void HandleInputCapabilitiesEventL( TInt aEvent, TAny* aParams ); +public: + CEikTimeAndDateEditor * iEditor; + }; + +CEikTimeAndDateEditorExtension* CEikTimeAndDateEditorExtension::NewL() + { + CEikTimeAndDateEditorExtension* self = new (ELeave) CEikTimeAndDateEditorExtension(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CEikTimeAndDateEditorExtension::~CEikTimeAndDateEditorExtension() + { + + } + +CEikTimeAndDateEditorExtension::CEikTimeAndDateEditorExtension() + { + } + +void CEikTimeAndDateEditorExtension::ConstructL() + { + } + +void CEikTimeAndDateEditorExtension::HandleInputCapabilitiesEventL( TInt aEvent, TAny* /*aParams*/ ) + { + switch ( aEvent ) + { + case CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm: + if ( iEditor ) + { + iEditor->ChangeAmPm(); + } + break; + } + return; + } NONSHARABLE_CLASS(CEikMfneExtension) : public CBase, public MCoeFepAwareTextEditor { public: @@ -165,6 +287,7 @@ MTouchFeedback* iFeedback; TBool iLaunchPenInputAutomatic; TBool iPartialScreenInput; + TBool iChangeAmPm; }; // Implementation of the extension @@ -1930,6 +2053,7 @@ iExtension->iDisablePenInput = !( iExtension->iFingerSupport ); iExtension->iFingerParam = aFeatureParam; iExtension->iHighlightAll = ( iExtension->iFingerSupport && + !iExtension->iTouchActivated && aFeatureParam == EnableWithAllHighlight ); } else @@ -1967,6 +2091,26 @@ ret = KErrGeneral; } break; + case EChangeAmPm: + if ( iExtension ) + { + iExtension->iChangeAmPm = aFeatureParam; + TUint caps( iExtension->iExtendedInputCapabilities->Capabilities() ); + if ( aFeatureParam ) + { + caps |= CAknExtendedInputCapabilities::EInputEditorAmPm; + } + else + { + caps &= ~CAknExtendedInputCapabilities::EInputEditorAmPm; + } + iExtension->iExtendedInputCapabilities->SetCapabilities( caps ); + } + else + { + ret = KErrGeneral; + } + break; default: ret = KErrNotSupported; break; @@ -2039,6 +2183,16 @@ ret = KErrGeneral; } break; + case EChangeAmPm: + if ( iExtension ) + { + aFeatureParam = iExtension->iChangeAmPm; + } + else + { + ret = KErrGeneral; + } + break; default: ret = KErrNotSupported; break; @@ -2059,7 +2213,8 @@ EDisablePenInput, EFingerSupport, ELaunchPenInputAutomatic, - EPartialScreenInput + EPartialScreenInput, + EChangeAmPm }; TBool ret = EFalse; @@ -2448,6 +2603,8 @@ } else { + + // Note!! This is taking responsibility away from the CEikMfne Field for drawing // Skin background is drawn for the fields here if( SkinningBackground() && !iFlags[EUseOverrideColors] ) @@ -3150,7 +3307,8 @@ void SetUninitialised(TBool aUninitialised); TBool IsUninitialised() const; void RefreshFromLocale(const CFont& aFont); - + void ChangeAmPm(); + TBool HasAmPm(); private: void AddAmPmFieldsIfNecessaryL(CEikMfne& aOwner, TAmPm aAmPm, TLocalePos aPos); private: @@ -3421,7 +3579,25 @@ (iAmPm && iAmPm->IsUninitialised()); } - +void CTimeEditor::ChangeAmPm() + { + if ( iAmPm && HasAmPm() ) + { + if ( iAmPm->IdOfCurrentSymbolicItem() == EPm ) + { + iAmPm->SetCurrentSymbolicItemToId(EAm); + } + else + { + iAmPm->SetCurrentSymbolicItemToId(EPm); + } + } + } + +TBool CTimeEditor::HasAmPm() + { + return iAmPm && ( iFlags&EIn12HourFormat ); + } // CDateEditor class CDateEditor : public CBase @@ -3819,7 +3995,9 @@ EXPORT_C CEikTimeEditor::~CEikTimeEditor() { AKNTASHOOK_REMOVE(); + iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeExtension); delete iTimeEditor; + delete iTimeExtension; } EXPORT_C void CEikTimeEditor::ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags) @@ -3830,6 +4008,10 @@ iTimeEditor->ConstructFieldsL(*this, aInitialTime, *Font()); iTimeEditor->RefreshFromLocale(*Font()); DoSetMinimumAndMaximum(aMinimumTime, aMaximumTime); + iTimeExtension = CEikTimeEditorExtension::NewL(); + iTimeExtension->iEditor = this; + iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeExtension); + SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() ); } EXPORT_C void CEikTimeEditor::SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime) @@ -3925,6 +4107,19 @@ return iTimeEditor->IsUninitialised(); } +void CEikTimeEditor::ChangeAmPm( ) + { + TInt para( 0 ); + GetFeature( CEikMfne::EChangeAmPm, para ); + if ( para ) + { + iTimeEditor->ChangeAmPm(); + DrawDeferred(); + TRAP_IGNORE ( ReportEventL( MCoeControlObserver::EEventStateChanged ) ); + ReportUpdate(); + } + return; + } // CEikDateEditor EXPORT_C CEikDateEditor::CEikDateEditor() @@ -4107,8 +4302,10 @@ EXPORT_C CEikTimeAndDateEditor::~CEikTimeAndDateEditor() { AKNTASHOOK_REMOVE(); + iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeDateExtension); delete iTimeEditor; delete iDateEditor; + delete iTimeDateExtension; } EXPORT_C void CEikTimeAndDateEditor::ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate, @@ -4154,6 +4351,10 @@ // do stuff that can only be done when all leaving functions have successfully been done if (aInterveningText) interveningText->SetText(aInterveningText); + iTimeDateExtension = CEikTimeAndDateEditorExtension::NewL(); + iTimeDateExtension->iEditor = this; + iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeDateExtension); + SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() ); } EXPORT_C void CEikTimeAndDateEditor::SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate) @@ -4293,6 +4494,19 @@ { } +void CEikTimeAndDateEditor::ChangeAmPm( ) + { + TInt para( 0 ); + GetFeature( CEikMfne::EChangeAmPm, para ); + if ( para ) + { + iTimeEditor->ChangeAmPm(); + DrawDeferred(); + TRAP_IGNORE ( ReportEventL( MCoeControlObserver::EEventStateChanged ) ); + ReportUpdate(); + } + return; + } // CEikDurationEditor