uifw/eikctl/src/EIKMFNE.CPP
branchRCL_3
changeset 51 fcdfafb36fe7
parent 38 c52421ed5f07
child 55 aecbbf00d063
--- 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