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 } |
107 NONSHARABLE_CLASS(CEikMfneExtension) : public CBase, public MCoeFepAwareTextEditor |
229 NONSHARABLE_CLASS(CEikMfneExtension) : public CBase, public MCoeFepAwareTextEditor |
108 { |
230 { |
109 public: |
231 public: |
110 static CEikMfneExtension* NewL(); |
232 static CEikMfneExtension* NewL(); |
111 virtual ~CEikMfneExtension(); |
233 virtual ~CEikMfneExtension(); |
163 TCallBack iValidateValueCallBack; |
285 TCallBack iValidateValueCallBack; |
164 |
286 |
165 MTouchFeedback* iFeedback; |
287 MTouchFeedback* iFeedback; |
166 TBool iLaunchPenInputAutomatic; |
288 TBool iLaunchPenInputAutomatic; |
167 TBool iPartialScreenInput; |
289 TBool iPartialScreenInput; |
|
290 TBool iChangeAmPm; |
168 }; |
291 }; |
169 |
292 |
170 // Implementation of the extension |
293 // Implementation of the extension |
171 CEikMfneExtension* CEikMfneExtension::NewL() |
294 CEikMfneExtension* CEikMfneExtension::NewL() |
172 { |
295 { |
1928 { |
2051 { |
1929 iExtension->iFingerSupport = ( TBool )( aFeatureParam ); |
2052 iExtension->iFingerSupport = ( TBool )( aFeatureParam ); |
1930 iExtension->iDisablePenInput = !( iExtension->iFingerSupport ); |
2053 iExtension->iDisablePenInput = !( iExtension->iFingerSupport ); |
1931 iExtension->iFingerParam = aFeatureParam; |
2054 iExtension->iFingerParam = aFeatureParam; |
1932 iExtension->iHighlightAll = ( iExtension->iFingerSupport && |
2055 iExtension->iHighlightAll = ( iExtension->iFingerSupport && |
|
2056 !iExtension->iTouchActivated && |
1933 aFeatureParam == EnableWithAllHighlight ); |
2057 aFeatureParam == EnableWithAllHighlight ); |
1934 } |
2058 } |
1935 else |
2059 else |
1936 { |
2060 { |
1937 ret = KErrGeneral; |
2061 ret = KErrGeneral; |
1957 caps |= CAknExtendedInputCapabilities::EInputEditorPartialScreen; |
2081 caps |= CAknExtendedInputCapabilities::EInputEditorPartialScreen; |
1958 } |
2082 } |
1959 else |
2083 else |
1960 { |
2084 { |
1961 caps &= ~CAknExtendedInputCapabilities::EInputEditorPartialScreen; |
2085 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; |
1962 } |
2106 } |
1963 iExtension->iExtendedInputCapabilities->SetCapabilities( caps ); |
2107 iExtension->iExtendedInputCapabilities->SetCapabilities( caps ); |
1964 } |
2108 } |
1965 else |
2109 else |
1966 { |
2110 { |
2446 // Currently no skin effect for the highlighted field drawing |
2601 // Currently no skin effect for the highlighted field drawing |
2447 SetGcToInverseVideo(aGc); |
2602 SetGcToInverseVideo(aGc); |
2448 } |
2603 } |
2449 else |
2604 else |
2450 { |
2605 { |
|
2606 |
|
2607 |
2451 // Note!! This is taking responsibility away from the CEikMfne Field for drawing |
2608 // Note!! This is taking responsibility away from the CEikMfne Field for drawing |
2452 // Skin background is drawn for the fields here |
2609 // Skin background is drawn for the fields here |
2453 if( SkinningBackground() && !iFlags[EUseOverrideColors] ) |
2610 if( SkinningBackground() && !iFlags[EUseOverrideColors] ) |
2454 { |
2611 { |
2455 // Note that in case EUseOverrideColors is up, there is no need |
2612 // Note that in case EUseOverrideColors is up, there is no need |
3148 TInt aSecondMin,TInt aSecondMax,const CFont& aFont); |
3305 TInt aSecondMin,TInt aSecondMax,const CFont& aFont); |
3149 TTime Time() const; |
3306 TTime Time() const; |
3150 void SetUninitialised(TBool aUninitialised); |
3307 void SetUninitialised(TBool aUninitialised); |
3151 TBool IsUninitialised() const; |
3308 TBool IsUninitialised() const; |
3152 void RefreshFromLocale(const CFont& aFont); |
3309 void RefreshFromLocale(const CFont& aFont); |
3153 |
3310 void ChangeAmPm(); |
|
3311 TBool HasAmPm(); |
3154 private: |
3312 private: |
3155 void AddAmPmFieldsIfNecessaryL(CEikMfne& aOwner, TAmPm aAmPm, TLocalePos aPos); |
3313 void AddAmPmFieldsIfNecessaryL(CEikMfne& aOwner, TAmPm aAmPm, TLocalePos aPos); |
3156 private: |
3314 private: |
3157 enum // these are needed in case the OS locale changes between NumFieldsRequired and ConstructFieldsL being called |
3315 enum // these are needed in case the OS locale changes between NumFieldsRequired and ConstructFieldsL being called |
3158 { |
3316 { |
3419 (iMinute && iMinute->IsUninitialised()) || |
3577 (iMinute && iMinute->IsUninitialised()) || |
3420 (iHour && iHour->IsUninitialised()) || |
3578 (iHour && iHour->IsUninitialised()) || |
3421 (iAmPm && iAmPm->IsUninitialised()); |
3579 (iAmPm && iAmPm->IsUninitialised()); |
3422 } |
3580 } |
3423 |
3581 |
3424 |
3582 void CTimeEditor::ChangeAmPm() |
|
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 } |
3425 // CDateEditor |
3601 // CDateEditor |
3426 |
3602 |
3427 class CDateEditor : public CBase |
3603 class CDateEditor : public CBase |
3428 { |
3604 { |
3429 public: |
3605 public: |
3817 } |
3993 } |
3818 |
3994 |
3819 EXPORT_C CEikTimeEditor::~CEikTimeEditor() |
3995 EXPORT_C CEikTimeEditor::~CEikTimeEditor() |
3820 { |
3996 { |
3821 AKNTASHOOK_REMOVE(); |
3997 AKNTASHOOK_REMOVE(); |
|
3998 iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeExtension); |
3822 delete iTimeEditor; |
3999 delete iTimeEditor; |
|
4000 delete iTimeExtension; |
3823 } |
4001 } |
3824 |
4002 |
3825 EXPORT_C void CEikTimeEditor::ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags) |
4003 EXPORT_C void CEikTimeEditor::ConstructL(const TTime& aMinimumTime, const TTime& aMaximumTime, const TTime& aInitialTime, TUint32 aFlags) |
3826 { |
4004 { |
3827 iTimeEditor=new(ELeave) CTimeEditor; |
4005 iTimeEditor=new(ELeave) CTimeEditor; |
3828 //CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aWithoutSecondsField? CTimeEditor::EWithoutSecondsField: 0)); |
4006 //CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aWithoutSecondsField? CTimeEditor::EWithoutSecondsField: 0)); |
3829 CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aFlags)); |
4007 CreateFieldArrayL(iTimeEditor->NumFieldsRequired(aFlags)); |
3830 iTimeEditor->ConstructFieldsL(*this, aInitialTime, *Font()); |
4008 iTimeEditor->ConstructFieldsL(*this, aInitialTime, *Font()); |
3831 iTimeEditor->RefreshFromLocale(*Font()); |
4009 iTimeEditor->RefreshFromLocale(*Font()); |
3832 DoSetMinimumAndMaximum(aMinimumTime, aMaximumTime); |
4010 DoSetMinimumAndMaximum(aMinimumTime, aMaximumTime); |
|
4011 iTimeExtension = CEikTimeEditorExtension::NewL(); |
|
4012 iTimeExtension->iEditor = this; |
|
4013 iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeExtension); |
|
4014 SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() ); |
3833 } |
4015 } |
3834 |
4016 |
3835 EXPORT_C void CEikTimeEditor::SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime) |
4017 EXPORT_C void CEikTimeEditor::SetMinimumAndMaximum(const TTime& aMinimumTime, const TTime& aMaximumTime) |
3836 { |
4018 { |
3837 // __ASSERT_ALWAYS((aMinimumTime>=iMinimumTime) && (aMaximumTime<=iMaximumTime), Panic(EEikPanicTimeEditorBadMinimumAndMaximum1)); |
4019 // __ASSERT_ALWAYS((aMinimumTime>=iMinimumTime) && (aMaximumTime<=iMaximumTime), Panic(EEikPanicTimeEditorBadMinimumAndMaximum1)); |
3923 EXPORT_C TBool CEikTimeEditor::IsUninitialised() const |
4105 EXPORT_C TBool CEikTimeEditor::IsUninitialised() const |
3924 { |
4106 { |
3925 return iTimeEditor->IsUninitialised(); |
4107 return iTimeEditor->IsUninitialised(); |
3926 } |
4108 } |
3927 |
4109 |
|
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 } |
3928 // CEikDateEditor |
4123 // CEikDateEditor |
3929 |
4124 |
3930 EXPORT_C CEikDateEditor::CEikDateEditor() |
4125 EXPORT_C CEikDateEditor::CEikDateEditor() |
3931 { |
4126 { |
3932 __DECLARE_NAME(_S("CEikDateEditor")); |
4127 __DECLARE_NAME(_S("CEikDateEditor")); |
4105 } |
4300 } |
4106 |
4301 |
4107 EXPORT_C CEikTimeAndDateEditor::~CEikTimeAndDateEditor() |
4302 EXPORT_C CEikTimeAndDateEditor::~CEikTimeAndDateEditor() |
4108 { |
4303 { |
4109 AKNTASHOOK_REMOVE(); |
4304 AKNTASHOOK_REMOVE(); |
|
4305 iExtension->iExtendedInputCapabilities->UnregisterObserver(iTimeDateExtension); |
4110 delete iTimeEditor; |
4306 delete iTimeEditor; |
4111 delete iDateEditor; |
4307 delete iDateEditor; |
|
4308 delete iTimeDateExtension; |
4112 } |
4309 } |
4113 |
4310 |
4114 EXPORT_C void CEikTimeAndDateEditor::ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate, |
4311 EXPORT_C void CEikTimeAndDateEditor::ConstructL(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate, |
4115 const TTime& aInitialTimeAndDate,TUint32 aFlags, HBufC* aInterveningText) |
4312 const TTime& aInitialTimeAndDate,TUint32 aFlags, HBufC* aInterveningText) |
4116 { |
4313 { |
4152 |
4349 |
4153 DoSetMinimumAndMaximum(aMinimumTimeAndDate, aMaximumTimeAndDate); |
4350 DoSetMinimumAndMaximum(aMinimumTimeAndDate, aMaximumTimeAndDate); |
4154 // do stuff that can only be done when all leaving functions have successfully been done |
4351 // do stuff that can only be done when all leaving functions have successfully been done |
4155 if (aInterveningText) |
4352 if (aInterveningText) |
4156 interveningText->SetText(aInterveningText); |
4353 interveningText->SetText(aInterveningText); |
|
4354 iTimeDateExtension = CEikTimeAndDateEditorExtension::NewL(); |
|
4355 iTimeDateExtension->iEditor = this; |
|
4356 iExtension->iExtendedInputCapabilities->RegisterObserver(iTimeDateExtension); |
|
4357 SetFeature( CEikMfne::EChangeAmPm, iTimeEditor->HasAmPm() ); |
4157 } |
4358 } |
4158 |
4359 |
4159 EXPORT_C void CEikTimeAndDateEditor::SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate) |
4360 EXPORT_C void CEikTimeAndDateEditor::SetMinimumAndMaximum(const TTime& aMinimumTimeAndDate, const TTime& aMaximumTimeAndDate) |
4160 { |
4361 { |
4161 // __ASSERT_ALWAYS((aMinimumTimeAndDate>=iMinimumTimeAndDate) && (aMaximumTimeAndDate<=iMaximumTimeAndDate), Panic(EEikPanicTimeAndDateEditorBadMinimumAndMaximum1)); |
4362 // __ASSERT_ALWAYS((aMinimumTimeAndDate>=iMinimumTimeAndDate) && (aMaximumTimeAndDate<=iMaximumTimeAndDate), Panic(EEikPanicTimeAndDateEditorBadMinimumAndMaximum1)); |