uifw/eikctl/src/EIKMFNE.CPP
branchRCL_3
changeset 19 aecbbf00d063
parent 18 fcdfafb36fe7
child 20 d48ab3b357f1
equal deleted inserted replaced
18:fcdfafb36fe7 19:aecbbf00d063
   102     {
   102     {
   103     _LIT(KPanicCat,"EIKON-MFNE");
   103     _LIT(KPanicCat,"EIKON-MFNE");
   104     User::Panic(KPanicCat, aPanic);
   104     User::Panic(KPanicCat, aPanic);
   105     }
   105     }
   106 
   106 
   107 NONSHARABLE_CLASS(CEikTimeEditorExtension) : public CBase, 
       
   108 	public CAknExtendedInputCapabilities::MAknEventObserver 
       
   109     {
       
   110 public:
       
   111     static CEikTimeEditorExtension* NewL();
       
   112     virtual ~CEikTimeEditorExtension();
       
   113 private: 
       
   114     CEikTimeEditorExtension();
       
   115 
       
   116     void ConstructL();
       
   117 public:
       
   118     /**
       
   119      * From CAknExtendedInputCapabilities::MAknEventObserver
       
   120      * Handle an event
       
   121      *
       
   122      * @since S60 v9.2
       
   123      * @param aEvent An event, see TInputCapabilitiesEvent
       
   124      * @param aParams Event dependent parameters
       
   125      */
       
   126 
       
   127     void HandleInputCapabilitiesEventL( TInt aEvent, TAny* aParams );
       
   128 public:
       
   129     CEikTimeEditor * iEditor;
       
   130     };
       
   131 
       
   132 CEikTimeEditorExtension* CEikTimeEditorExtension::NewL()
       
   133     {
       
   134 	CEikTimeEditorExtension* self = new (ELeave) CEikTimeEditorExtension();
       
   135     CleanupStack::PushL( self );
       
   136     self->ConstructL();
       
   137     CleanupStack::Pop();
       
   138     return self;
       
   139     }
       
   140 
       
   141 CEikTimeEditorExtension::~CEikTimeEditorExtension()
       
   142     {
       
   143 
       
   144     }
       
   145 
       
   146 CEikTimeEditorExtension::CEikTimeEditorExtension()
       
   147     {
       
   148     }
       
   149 
       
   150 void CEikTimeEditorExtension::ConstructL()
       
   151     {
       
   152     }
       
   153 
       
   154 void CEikTimeEditorExtension::HandleInputCapabilitiesEventL( TInt aEvent, TAny* /*aParams*/ )
       
   155 	{
       
   156     switch ( aEvent )
       
   157         {
       
   158         case CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm:
       
   159         	if ( iEditor )
       
   160 	            {
       
   161         	    iEditor->ChangeAmPm();
       
   162 	            }
       
   163             break;
       
   164         }
       
   165     return;
       
   166 	}
       
   167 
       
   168 
       
   169 NONSHARABLE_CLASS(CEikTimeAndDateEditorExtension) : public CBase, 
       
   170 	public CAknExtendedInputCapabilities::MAknEventObserver 
       
   171     {
       
   172 public:
       
   173     static CEikTimeAndDateEditorExtension* NewL();
       
   174     virtual ~CEikTimeAndDateEditorExtension();
       
   175 private: 
       
   176     CEikTimeAndDateEditorExtension();
       
   177 
       
   178     void ConstructL();
       
   179 public:
       
   180     /**
       
   181      * From CAknExtendedInputCapabilities::MAknEventObserver
       
   182      * Handle an event
       
   183      *
       
   184      * @since S60 v9.2
       
   185      * @param aEvent An event, see TInputCapabilitiesEvent
       
   186      * @param aParams Event dependent parameters
       
   187      */
       
   188 
       
   189     void HandleInputCapabilitiesEventL( TInt aEvent, TAny* aParams );
       
   190 public:
       
   191     CEikTimeAndDateEditor * iEditor;
       
   192     };
       
   193 
       
   194 CEikTimeAndDateEditorExtension* CEikTimeAndDateEditorExtension::NewL()
       
   195     {
       
   196 	CEikTimeAndDateEditorExtension* self = new (ELeave) CEikTimeAndDateEditorExtension();
       
   197     CleanupStack::PushL( self );
       
   198     self->ConstructL();
       
   199     CleanupStack::Pop();
       
   200     return self;
       
   201     }
       
   202 
       
   203 CEikTimeAndDateEditorExtension::~CEikTimeAndDateEditorExtension()
       
   204     {
       
   205 
       
   206     }
       
   207 
       
   208 CEikTimeAndDateEditorExtension::CEikTimeAndDateEditorExtension()
       
   209     {
       
   210     }
       
   211 
       
   212 void CEikTimeAndDateEditorExtension::ConstructL()
       
   213     {
       
   214     }
       
   215 
       
   216 void CEikTimeAndDateEditorExtension::HandleInputCapabilitiesEventL( TInt aEvent, TAny* /*aParams*/ )
       
   217 	{
       
   218     switch ( aEvent )
       
   219         {
       
   220         case CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm:
       
   221         	if ( iEditor )
       
   222 	            {
       
   223         	    iEditor->ChangeAmPm();
       
   224 	            }
       
   225             break;
       
   226         }
       
   227     return;
       
   228 	}
       
   229 NONSHARABLE_CLASS(CEikMfneExtension) : public CBase, public MCoeFepAwareTextEditor 
   107 NONSHARABLE_CLASS(CEikMfneExtension) : public CBase, public MCoeFepAwareTextEditor 
   230     {
   108     {
   231 public:
   109 public:
   232     static CEikMfneExtension* NewL();
   110     static CEikMfneExtension* NewL();
   233     virtual ~CEikMfneExtension();
   111     virtual ~CEikMfneExtension();
   275     CEikMfne* iEditor; // not owned
   153     CEikMfne* iEditor; // not owned
   276     CAknExtendedInputCapabilities::CAknExtendedInputCapabilitiesProvider*
   154     CAknExtendedInputCapabilities::CAknExtendedInputCapabilitiesProvider*
   277         iExtendedInputCapabilitiesProvider;
   155         iExtendedInputCapabilitiesProvider;
   278     TInt iClipGcToRect; // Mainly for 0/1 values
   156     TInt iClipGcToRect; // Mainly for 0/1 values
   279     TInt iDisablePenInput; // Mainly for 0/1 values
   157     TInt iDisablePenInput; // Mainly for 0/1 values
       
   158     TBool iTwiceTap;   
   280     TBool iCursorShown; 
   159     TBool iCursorShown; 
   281     TBool iFingerSupport;
   160     TBool iFingerSupport;
   282     TInt iFingerParam;
   161     TInt iFingerParam;
   283     TBool iHighlightAll; 
   162     TBool iHighlightAll; 
   284     TBool iTouchActivated;
   163     TBool iTouchActivated;
   285     TCallBack iValidateValueCallBack;
   164     TCallBack iValidateValueCallBack;
   286     
   165     
   287     MTouchFeedback* iFeedback;
   166     MTouchFeedback* iFeedback;
   288     TBool iLaunchPenInputAutomatic;
   167     TBool iLaunchPenInputAutomatic;
   289     TBool iPartialScreenInput;
   168     TBool iPartialScreenInput;
   290     TBool iChangeAmPm;
       
   291     };
   169     };
   292 
   170 
   293 // Implementation of the extension
   171 // Implementation of the extension
   294 CEikMfneExtension* CEikMfneExtension::NewL()
   172 CEikMfneExtension* CEikMfneExtension::NewL()
   295     {
   173     {
  1732     const TInt code=aKeyEvent.iCode;
  1610     const TInt code=aKeyEvent.iCode;
  1733 
  1611 
  1734     if ( !ConsumesUpAndDownKeys() && (code==EKeyDownArrow || code==EKeyUpArrow))
  1612     if ( !ConsumesUpAndDownKeys() && (code==EKeyDownArrow || code==EKeyUpArrow))
  1735         return EKeyWasNotConsumed;
  1613         return EKeyWasNotConsumed;
  1736 
  1614 
  1737     if ((aType==EEventKey) && (iCurrentField!=ENullIndex) && iExtension &&
  1615     if ((aType==EEventKey) && (iCurrentField!=ENullIndex) && 
  1738         ( aKeyEvent.iRepeats == 0 || code == EKeyLeftArrow || 
  1616         ( aKeyEvent.iRepeats == 0 || code == EKeyLeftArrow || 
  1739             code == EKeyRightArrow || code == EKeyDownArrow || code == EKeyUpArrow ) )
  1617             code == EKeyRightArrow || code == EKeyDownArrow || code == EKeyUpArrow ) )
  1740         {
  1618         {
  1741         iExtension->iHighlightAll = EFalse;
  1619         iExtension->iHighlightAll = EFalse;
  1742         const CFont& font=*Font();
  1620         const CFont& font=*Font();
  1862 EXPORT_C void CEikMfne::HandleInteraction(TBool aHandleDeHighlight, TInt aNewCurrentField, TInt aOldWidthInPixelsOfOldCurrentField,
  1740 EXPORT_C void CEikMfne::HandleInteraction(TBool aHandleDeHighlight, TInt aNewCurrentField, TInt aOldWidthInPixelsOfOldCurrentField,
  1863                                 CEikMfneField::THighlightType aOldHighlightTypeOfOldCurrentField, TBool& aDataAltered, TBool& aError)
  1741                                 CEikMfneField::THighlightType aOldHighlightTypeOfOldCurrentField, TBool& aDataAltered, TBool& aError)
  1864     {
  1742     {
  1865     const CFont& font=*Font();
  1743     const CFont& font=*Font();
  1866     TBool drawAllFields = ETrue;
  1744     TBool drawAllFields = ETrue;
  1867     if ( aHandleDeHighlight && iExtension )
  1745     if (aHandleDeHighlight)
  1868         {
  1746         {
  1869         iFields[iCurrentField]->HandleDeHighlight(font, *iEikonEnv, aDataAltered, aError);
  1747         iFields[iCurrentField]->HandleDeHighlight(font, *iEikonEnv, aDataAltered, aError);
  1870         iExtension->iValidateValueCallBack.CallBack();
  1748         iExtension->iValidateValueCallBack.CallBack();
  1871         if (aError)
  1749         if (aError)
  1872             aNewCurrentField=iCurrentField;
  1750             aNewCurrentField=iCurrentField;
  1964         if ( err != KErrNone )
  1842         if ( err != KErrNone )
  1965             {
  1843             {
  1966             return;
  1844             return;
  1967             }
  1845             }
  1968         }
  1846         }
  1969     if ( aAlignment >= ELayoutAlignNone )
  1847     if ( aAlignment >= ELayoutAlignNone && iExtension )
  1970         {
  1848         {
  1971         iAlignment = aAlignment;
  1849         iAlignment = aAlignment;
  1972         TUint capabilities = iExtension->
  1850         TUint capabilities = iExtension->
  1973             iExtendedInputCapabilities->Capabilities();
  1851             iExtendedInputCapabilities->Capabilities();
  1974         capabilities &= 
  1852         capabilities &= 
  2051                     {
  1929                     {
  2052                     iExtension->iFingerSupport = ( TBool )( aFeatureParam );
  1930                     iExtension->iFingerSupport = ( TBool )( aFeatureParam );
  2053                     iExtension->iDisablePenInput = !( iExtension->iFingerSupport );                    
  1931                     iExtension->iDisablePenInput = !( iExtension->iFingerSupport );                    
  2054                     iExtension->iFingerParam = aFeatureParam; 
  1932                     iExtension->iFingerParam = aFeatureParam; 
  2055                     iExtension->iHighlightAll = ( iExtension->iFingerSupport &&
  1933                     iExtension->iHighlightAll = ( iExtension->iFingerSupport &&
  2056                         !iExtension->iTouchActivated &&
       
  2057                         aFeatureParam == EnableWithAllHighlight );                  
  1934                         aFeatureParam == EnableWithAllHighlight );                  
  2058                     }
  1935                     }
  2059                 else
  1936                 else
  2060                     {
  1937                     {
  2061                     ret = KErrGeneral;
  1938                     ret = KErrGeneral;
  2081                         caps |= CAknExtendedInputCapabilities::EInputEditorPartialScreen;
  1958                         caps |= CAknExtendedInputCapabilities::EInputEditorPartialScreen;
  2082                         }
  1959                         }
  2083                     else
  1960                     else
  2084                         {
  1961                         {
  2085                         caps &= ~CAknExtendedInputCapabilities::EInputEditorPartialScreen;
  1962                         caps &= ~CAknExtendedInputCapabilities::EInputEditorPartialScreen;
  2086                         }
       
  2087                     iExtension->iExtendedInputCapabilities->SetCapabilities( caps );
       
  2088                     }
       
  2089                 else
       
  2090                     {
       
  2091                     ret = KErrGeneral;
       
  2092                     }
       
  2093                 break;
       
  2094             case EChangeAmPm:
       
  2095                 if ( iExtension )
       
  2096                     {
       
  2097                     iExtension->iChangeAmPm = aFeatureParam;
       
  2098                     TUint caps( iExtension->iExtendedInputCapabilities->Capabilities() );
       
  2099                     if ( aFeatureParam )
       
  2100                         {
       
  2101                         caps |= CAknExtendedInputCapabilities::EInputEditorAmPm;
       
  2102                         }
       
  2103                     else
       
  2104                         {
       
  2105                         caps &= ~CAknExtendedInputCapabilities::EInputEditorAmPm;
       
  2106                         }
  1963                         }
  2107                     iExtension->iExtendedInputCapabilities->SetCapabilities( caps );
  1964                     iExtension->iExtendedInputCapabilities->SetCapabilities( caps );
  2108                     }
  1965                     }
  2109                 else
  1966                 else
  2110                     {
  1967                     {
  2181                 else
  2038                 else
  2182                     {
  2039                     {
  2183                     ret = KErrGeneral;
  2040                     ret = KErrGeneral;
  2184                     }
  2041                     }
  2185                 break;
  2042                 break;
  2186             case EChangeAmPm:
       
  2187                 if ( iExtension )
       
  2188                     {
       
  2189                     aFeatureParam = iExtension->iChangeAmPm;
       
  2190                     }
       
  2191                 else
       
  2192                     {
       
  2193                     ret = KErrGeneral;
       
  2194                     }
       
  2195                 break;
       
  2196             default:
  2043             default:
  2197                 ret = KErrNotSupported;
  2044                 ret = KErrNotSupported;
  2198                 break;
  2045                 break;
  2199             }
  2046             }
  2200         }
  2047         }
  2211         {
  2058         {
  2212         EClipGcToRect,
  2059         EClipGcToRect,
  2213         EDisablePenInput,
  2060         EDisablePenInput,
  2214         EFingerSupport,
  2061         EFingerSupport,
  2215         ELaunchPenInputAutomatic,
  2062         ELaunchPenInputAutomatic,
  2216         EPartialScreenInput,
  2063         EPartialScreenInput
  2217         EChangeAmPm
       
  2218         };
  2064         };
  2219         
  2065         
  2220     TBool ret = EFalse;
  2066     TBool ret = EFalse;
  2221     
  2067     
  2222     for ( TInt i = 0; i < sizeof( supportedFeatures ) / sizeof( TInt ); ++i )
  2068     for ( TInt i = 0; i < sizeof( supportedFeatures ) / sizeof( TInt ); ++i )
  2405                 }
  2251                 }
  2406             leftPositionOfThisField+=widthOfThisFieldInPixels;
  2252             leftPositionOfThisField+=widthOfThisFieldInPixels;
  2407             }
  2253             }
  2408         if (newField==ENullIndex)
  2254         if (newField==ENullIndex)
  2409             newField=iCurrentField;
  2255             newField=iCurrentField;
       
  2256         if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
       
  2257             {
       
  2258             iExtension->iTwiceTap = ( iExtension->iFingerSupport ? ETrue : 
       
  2259                 newField == iCurrentField );            
       
  2260             }
  2410 
  2261 
  2411         if (iExtension && aPointerEvent.iType == TPointerEvent::EButton1Down)
  2262         if (iExtension && aPointerEvent.iType == TPointerEvent::EButton1Down)
  2412             {
  2263             {
  2413             // Edit feedback on down event in current field, 
  2264             // Edit feedback on down event in current field, 
  2414             // Edit feedback when changing fields
  2265             // Edit feedback when changing fields
  2415             TTouchLogicalFeedback feedback = ETouchFeedbackEdit;
  2266             TTouchLogicalFeedback feedback = 
       
  2267                 ( iExtension->iTwiceTap ? ETouchFeedbackEditor : ETouchFeedbackEditor );
  2416             iExtension->iFeedback->InstantFeedback( this, feedback );
  2268             iExtension->iFeedback->InstantFeedback( this, feedback );
  2417             }
  2269             }
  2418         TBool createPopoutIfRequired=((newField==iCurrentField) && aPointerEvent.iType==TPointerEvent::EButton1Down && IsFocused());
  2270         TBool createPopoutIfRequired=((newField==iCurrentField) && aPointerEvent.iType==TPointerEvent::EButton1Down && IsFocused());
  2419         TBool dataAltered=EFalse;
  2271         TBool dataAltered=EFalse;
  2420         TBool error=EFalse;
  2272         TBool error=EFalse;
  2425         ReportEventL( MCoeControlObserver::EEventStateChanged );
  2277         ReportEventL( MCoeControlObserver::EEventStateChanged );
  2426         ReportUpdate();
  2278         ReportUpdate();
  2427         }
  2279         }
  2428     else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
  2280     else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
  2429         {
  2281         {
  2430         if ( iExtension && !iExtension->iDisablePenInput )
  2282         if ( iExtension && !iExtension->iDisablePenInput && iExtension->iTwiceTap )
  2431             {
  2283             {
  2432             iExtension->iFeedback->InstantFeedback( this,
  2284             iExtension->iFeedback->InstantFeedback( this,
  2433                 ETouchFeedbackEdit,
  2285                 ETouchFeedbackEditor,
  2434                 ETouchFeedbackVibra,
  2286                 ETouchFeedbackVibra,
  2435                 aPointerEvent );
  2287                 aPointerEvent );
  2436             LaunchPenInputL();
  2288             LaunchPenInputL();
  2437             }
  2289             }
  2438         }
  2290         }
  2592         TBool focused = IsFocused();
  2444         TBool focused = IsFocused();
  2593         for (TInt i=0; i<=aLastField; ++i)
  2445         for (TInt i=0; i<=aLastField; ++i)
  2594             {
  2446             {
  2595             if (i>=aFirstField)
  2447             if (i>=aFirstField)
  2596                 {
  2448                 {
  2597                 if (focused && iExtension && ( iExtension->iHighlightAll || ( i == iCurrentField 
  2449                 if (focused && ( iExtension->iHighlightAll || ( i == iCurrentField 
  2598                     && iFields[i]->HighlightType() == CEikMfneField::EInverseVideo
  2450                     && iFields[i]->HighlightType() == CEikMfneField::EInverseVideo
  2599                     && iFields[i]->FieldText().Length() > 0 ) ) && !isEmpty )
  2451                     && iFields[i]->FieldText().Length() > 0 ) ) && !isEmpty )
  2600                     {
  2452                     {
  2601                     // Currently no skin effect for the highlighted field drawing
  2453                     // Currently no skin effect for the highlighted field drawing
  2602                     SetGcToInverseVideo(aGc);
  2454                     SetGcToInverseVideo(aGc);
  2603                     }
  2455                     }
  2604                 else 
  2456                 else 
  2605                     {
  2457                     {
  2606 
  2458                     if (IsDimmed())
       
  2459                         SetGcToDimmedVideo(aGc);
       
  2460                     else
       
  2461                         SetGcToNormalVideo(aGc);
  2607 
  2462 
  2608                     // Note!! This is taking responsibility away from the CEikMfne Field for drawing
  2463                     // Note!! This is taking responsibility away from the CEikMfne Field for drawing
  2609                     // Skin background is drawn for the fields here
  2464                     // Skin background is drawn for the fields here
  2610                     if( SkinningBackground() && !iFlags[EUseOverrideColors] )
  2465                     if( SkinningBackground() && !iFlags[EUseOverrideColors] )
  2611                         {
  2466                         {
  2635                                 }
  2490                                 }
  2636                             }
  2491                             }
  2637 
  2492 
  2638                         // Set up null brush GC here for the upcoming draw
  2493                         // Set up null brush GC here for the upcoming draw
  2639                         aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
  2494                         aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
  2640                         }
       
  2641                     // set aGc for drawing field text
       
  2642                     if ( IsDimmed() )
       
  2643                         {
       
  2644                         SetGcToDimmedVideo( aGc );
       
  2645                         }
       
  2646                     else
       
  2647                         {
       
  2648                         SetGcToNormalVideo( aGc );
       
  2649                         }
  2495                         }
  2650                     }
  2496                     }
  2651                 // This draw must only draw the text with a null brush or draw block highlight 
  2497                 // This draw must only draw the text with a null brush or draw block highlight 
  2652                 iFields[i]->Draw(aGc, font, topLeftOfField);
  2498                 iFields[i]->Draw(aGc, font, topLeftOfField);
  2653                 }
  2499                 }
  2855     TPoint cursorPosition( 0, 0 );
  2701     TPoint cursorPosition( 0, 0 );
  2856 
  2702 
  2857     GetCursorInfo( cursorPosition, cursorHeight, cursorWidth, cursorAscent );
  2703     GetCursorInfo( cursorPosition, cursorHeight, cursorWidth, cursorAscent );
  2858 
  2704 
  2859     iEikonEnv->DrawCursor(this, cursorPosition, cursorWidth, cursorAscent, cursorHeight);
  2705     iEikonEnv->DrawCursor(this, cursorPosition, cursorWidth, cursorAscent, cursorHeight);
  2860     if ( iExtension )
  2706     iExtension->iCursorShown = ETrue;
  2861     	{
       
  2862         iExtension->iCursorShown = ETrue;
       
  2863     	}
       
  2864     }
  2707     }
  2865 
  2708 
  2866 void CEikMfne::HideCursor()
  2709 void CEikMfne::HideCursor()
  2867     {
  2710     {
  2868     if ( iExtension && iExtension->iCursorShown )
  2711     if ( iExtension->iCursorShown )
  2869         {
  2712         {
  2870         iEikonEnv->HideCursor(this);
  2713         iEikonEnv->HideCursor(this);
  2871         iExtension->iCursorShown = EFalse;
  2714         iExtension->iCursorShown = EFalse;
  2872         }   
  2715         }   
  2873     }
  2716     }
  3305         TInt aSecondMin,TInt aSecondMax,const CFont& aFont);
  3148         TInt aSecondMin,TInt aSecondMax,const CFont& aFont);
  3306     TTime Time() const;
  3149     TTime Time() const;
  3307     void SetUninitialised(TBool aUninitialised);
  3150     void SetUninitialised(TBool aUninitialised);
  3308     TBool IsUninitialised() const;
  3151     TBool IsUninitialised() const;
  3309     void RefreshFromLocale(const CFont& aFont);
  3152     void RefreshFromLocale(const CFont& aFont);
  3310     void ChangeAmPm();
  3153 
  3311     TBool HasAmPm();
       
  3312 private:
  3154 private:
  3313     void AddAmPmFieldsIfNecessaryL(CEikMfne& aOwner, TAmPm aAmPm, TLocalePos aPos);
  3155     void AddAmPmFieldsIfNecessaryL(CEikMfne& aOwner, TAmPm aAmPm, TLocalePos aPos);
  3314 private:
  3156 private:
  3315     enum // these are needed in case the OS locale changes between NumFieldsRequired and ConstructFieldsL being called
  3157     enum // these are needed in case the OS locale changes between NumFieldsRequired and ConstructFieldsL being called
  3316         {
  3158         {
  3577         (iMinute && iMinute->IsUninitialised()) ||
  3419         (iMinute && iMinute->IsUninitialised()) ||
  3578         (iHour && iHour->IsUninitialised()) ||
  3420         (iHour && iHour->IsUninitialised()) ||
  3579         (iAmPm && iAmPm->IsUninitialised());
  3421         (iAmPm && iAmPm->IsUninitialised());
  3580     }
  3422     }
  3581 
  3423 
  3582 void CTimeEditor::ChangeAmPm()
  3424 
  3583 	{
       
  3584 	if ( iAmPm && HasAmPm() )
       
  3585 		{
       
  3586 	    if ( iAmPm->IdOfCurrentSymbolicItem() == EPm )
       
  3587 	    	{
       
  3588 	        iAmPm->SetCurrentSymbolicItemToId(EAm);
       
  3589 	    	}
       
  3590 	    else
       
  3591 	    	{
       
  3592             iAmPm->SetCurrentSymbolicItemToId(EPm);
       
  3593 	    	}
       
  3594 		}
       
  3595 	}
       
  3596 
       
  3597 TBool CTimeEditor::HasAmPm()
       
  3598 	{
       
  3599 	return iAmPm && ( iFlags&EIn12HourFormat );
       
  3600 	}
       
  3601 // CDateEditor
  3425 // CDateEditor
  3602 
  3426 
  3603 class CDateEditor : public CBase
  3427 class CDateEditor : public CBase
  3604     {
  3428     {
  3605 public:
  3429 public:
  3993     }
  3817     }
  3994 
  3818 
  3995 EXPORT_C CEikTimeEditor::~CEikTimeEditor()
  3819 EXPORT_C CEikTimeEditor::~CEikTimeEditor()
  3996     {
  3820     {
  3997     AKNTASHOOK_REMOVE();
  3821     AKNTASHOOK_REMOVE();
  3998     iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeExtension);
       
  3999     delete iTimeEditor;
  3822     delete iTimeEditor;
  4000     delete iTimeExtension;
       
  4001     }
  3823     }
  4002 
  3824 
  4003 EXPORT_C void CEikTimeEditor::ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags)
  3825 EXPORT_C void CEikTimeEditor::ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags)
  4004     {
  3826     {
  4005     iTimeEditor=new(ELeave) CTimeEditor;
  3827     iTimeEditor=new(ELeave) CTimeEditor;
  4006     //CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aWithoutSecondsField? CTimeEditor::EWithoutSecondsField: 0));
  3828     //CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aWithoutSecondsField? CTimeEditor::EWithoutSecondsField: 0));
  4007     CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aFlags));
  3829     CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aFlags));
  4008     iTimeEditor->ConstructFieldsL(*this, aInitialTime, *Font());
  3830     iTimeEditor->ConstructFieldsL(*this, aInitialTime, *Font());
  4009     iTimeEditor->RefreshFromLocale(*Font());
  3831     iTimeEditor->RefreshFromLocale(*Font());
  4010     DoSetMinimumAndMaximum(aMinimumTime, aMaximumTime);
  3832     DoSetMinimumAndMaximum(aMinimumTime, aMaximumTime);
  4011     iTimeExtension = CEikTimeEditorExtension::NewL();
       
  4012     iTimeExtension->iEditor = this;
       
  4013     iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeExtension);
       
  4014     SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() );
       
  4015     }
  3833     }
  4016 
  3834 
  4017 EXPORT_C void CEikTimeEditor::SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime)
  3835 EXPORT_C void CEikTimeEditor::SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime)
  4018     {
  3836     {
  4019     // __ASSERT_ALWAYS((aMinimumTime>=iMinimumTime) && (aMaximumTime<=iMaximumTime), Panic(EEikPanicTimeEditorBadMinimumAndMaximum1));
  3837     // __ASSERT_ALWAYS((aMinimumTime>=iMinimumTime) && (aMaximumTime<=iMaximumTime), Panic(EEikPanicTimeEditorBadMinimumAndMaximum1));
  4105 EXPORT_C TBool CEikTimeEditor::IsUninitialised() const
  3923 EXPORT_C TBool CEikTimeEditor::IsUninitialised() const
  4106     {
  3924     {
  4107     return iTimeEditor->IsUninitialised();
  3925     return iTimeEditor->IsUninitialised();
  4108     }
  3926     }
  4109 
  3927 
  4110 void CEikTimeEditor::ChangeAmPm( )
       
  4111 	{
       
  4112 	TInt para( 0 );
       
  4113     GetFeature( CEikMfne::EChangeAmPm, para );
       
  4114 	if ( para )
       
  4115 		{
       
  4116 	    iTimeEditor->ChangeAmPm();
       
  4117 	    DrawDeferred();
       
  4118 	    TRAP_IGNORE ( ReportEventL( MCoeControlObserver::EEventStateChanged ) );
       
  4119         ReportUpdate();
       
  4120 		}
       
  4121 	return;
       
  4122 	}
       
  4123 // CEikDateEditor
  3928 // CEikDateEditor
  4124 
  3929 
  4125 EXPORT_C CEikDateEditor::CEikDateEditor()
  3930 EXPORT_C CEikDateEditor::CEikDateEditor()
  4126     {
  3931     {
  4127     __DECLARE_NAME(_S("CEikDateEditor"));
  3932     __DECLARE_NAME(_S("CEikDateEditor"));
  4182 TTime CEikDateEditor::GetTTime() const
  3987 TTime CEikDateEditor::GetTTime() const
  4183     {
  3988     {
  4184     return(Date());
  3989     return(Date());
  4185     }
  3990     }
  4186 
  3991 
  4187 EXPORT_C TKeyResponse CEikDateEditor::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
  3992 EXPORT_C TKeyResponse CEikDateEditor::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
  4188     {
  3993     {
  4189 	TKeyResponse ret = EKeyWasNotConsumed;
  3994     if (iDateEditor->OfferKeyEventL(aKeyEvent, aType)==EKeyWasConsumed)
  4190     if ( iDateEditor->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
  3995         return EKeyWasConsumed;
       
  3996     if ( ( aType==EEventKey)&& 
       
  3997            ( aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow || 
       
  3998              aKeyEvent.iCode == EKeyDownArrow || aKeyEvent.iCode == EKeyUpArrow ) )
  4191     	{
  3999     	{
  4192         ret = EKeyWasConsumed;
  4000         iDateEditor->UpdateMaxDay( *Font() );
  4193     	}
  4001     	}
  4194     else 
  4002 
  4195     	{
  4003     return CEikMfne::OfferKeyEventL(aKeyEvent, aType);
  4196 	    ret = CEikMfne::OfferKeyEventL( aKeyEvent, aType );
       
  4197 	    if ( ( aType == EEventKey ) && 
       
  4198 		     ( aKeyEvent.iCode == EKeyDownArrow || aKeyEvent.iCode == EKeyUpArrow ) )
       
  4199 		    {
       
  4200 		    iDateEditor->UpdateMaxDay( *Font() );
       
  4201 		    this->DrawDeferred();
       
  4202 		    }
       
  4203     	}
       
  4204     return ret;
       
  4205     }
  4004     }
  4206 
  4005 
  4207 EXPORT_C void CEikDateEditor::ConstructFromResourceL(TResourceReader& aResourceReader)
  4006 EXPORT_C void CEikDateEditor::ConstructFromResourceL(TResourceReader& aResourceReader)
  4208     {
  4007     {
  4209     TTime minimumDate=ReadDate(aResourceReader);
  4008     TTime minimumDate=ReadDate(aResourceReader);
  4300     }
  4099     }
  4301 
  4100 
  4302 EXPORT_C CEikTimeAndDateEditor::~CEikTimeAndDateEditor()
  4101 EXPORT_C CEikTimeAndDateEditor::~CEikTimeAndDateEditor()
  4303     {
  4102     {
  4304     AKNTASHOOK_REMOVE();
  4103     AKNTASHOOK_REMOVE();
  4305     iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeDateExtension);
       
  4306     delete iTimeEditor;
  4104     delete iTimeEditor;
  4307     delete iDateEditor;
  4105     delete iDateEditor;
  4308     delete iTimeDateExtension;
       
  4309     }
  4106     }
  4310 
  4107 
  4311 EXPORT_C void CEikTimeAndDateEditor::ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate,
  4108 EXPORT_C void CEikTimeAndDateEditor::ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate,
  4312                                     const TTime& aInitialTimeAndDate,TUint32 aFlags, HBufC* aInterveningText)
  4109                                     const TTime& aInitialTimeAndDate,TUint32 aFlags, HBufC* aInterveningText)
  4313     {
  4110     {
  4349 
  4146 
  4350     DoSetMinimumAndMaximum(aMinimumTimeAndDate, aMaximumTimeAndDate);
  4147     DoSetMinimumAndMaximum(aMinimumTimeAndDate, aMaximumTimeAndDate);
  4351     // do stuff that can only be done when all leaving functions have successfully been done
  4148     // do stuff that can only be done when all leaving functions have successfully been done
  4352     if (aInterveningText)
  4149     if (aInterveningText)
  4353         interveningText->SetText(aInterveningText);
  4150         interveningText->SetText(aInterveningText);
  4354     iTimeDateExtension = CEikTimeAndDateEditorExtension::NewL();
       
  4355     iTimeDateExtension->iEditor = this;
       
  4356     iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeDateExtension);
       
  4357     SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() );
       
  4358     }
  4151     }
  4359 
  4152 
  4360 EXPORT_C void CEikTimeAndDateEditor::SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate)
  4153 EXPORT_C void CEikTimeAndDateEditor::SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate)
  4361     {
  4154     {
  4362     // __ASSERT_ALWAYS((aMinimumTimeAndDate>=iMinimumTimeAndDate) && (aMaximumTimeAndDate<=iMaximumTimeAndDate), Panic(EEikPanicTimeAndDateEditorBadMinimumAndMaximum1));
  4155     // __ASSERT_ALWAYS((aMinimumTimeAndDate>=iMinimumTimeAndDate) && (aMaximumTimeAndDate<=iMaximumTimeAndDate), Panic(EEikPanicTimeAndDateEditorBadMinimumAndMaximum1));
  4492 
  4285 
  4493 EXPORT_C void CEikTimeAndDateEditor::CEikMfne_Reserved()
  4286 EXPORT_C void CEikTimeAndDateEditor::CEikMfne_Reserved()
  4494     {
  4287     {
  4495     }
  4288     }
  4496 
  4289 
  4497 void CEikTimeAndDateEditor::ChangeAmPm( )
       
  4498 	{
       
  4499 	TInt para( 0 );
       
  4500     GetFeature( CEikMfne::EChangeAmPm, para );
       
  4501 	if ( para )
       
  4502 		{
       
  4503 	    iTimeEditor->ChangeAmPm();
       
  4504 	    DrawDeferred();
       
  4505 	    TRAP_IGNORE ( ReportEventL( MCoeControlObserver::EEventStateChanged ) );
       
  4506         ReportUpdate();
       
  4507 		}
       
  4508 	return;
       
  4509 	}
       
  4510 
  4290 
  4511 // CEikDurationEditor
  4291 // CEikDurationEditor
  4512 
  4292 
  4513 EXPORT_C CEikDurationEditor::CEikDurationEditor()
  4293 EXPORT_C CEikDurationEditor::CEikDurationEditor()
  4514     {
  4294     {
  4796     }
  4576     }
  4797 
  4577 
  4798 EXPORT_C void CEikMfne::MakeVisible( TBool aVisible )
  4578 EXPORT_C void CEikMfne::MakeVisible( TBool aVisible )
  4799     {
  4579     {
  4800     CEikBorderedControl::MakeVisible( aVisible );
  4580     CEikBorderedControl::MakeVisible( aVisible );
  4801     if ( !aVisible && iExtension && iExtension->iCursorShown )
  4581     if ( !aVisible && iExtension->iCursorShown )
  4802         {
  4582         {
  4803         HideCursor();
  4583         HideCursor();
  4804         }
       
  4805     
       
  4806     if ( iExtension && !aVisible )
       
  4807         {
       
  4808         TRAP_IGNORE (
       
  4809             iExtension->iExtendedInputCapabilities->ReportEventL( 
       
  4810                 CAknExtendedInputCapabilities::MAknEventObserver::EClosePenInputRequest, 
       
  4811                 0 );
       
  4812             )
       
  4813         }
  4584         }
  4814     }
  4585     }
  4815 
  4586 
  4816 void CEikMfne::SetValidateCallBack( TCallBack aCallBack )
  4587 void CEikMfne::SetValidateCallBack( TCallBack aCallBack )
  4817     {
  4588     {