47 // |
52 // |
48 // --------------------------------------------------------------------------- |
53 // --------------------------------------------------------------------------- |
49 // |
54 // |
50 EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs) |
55 EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs) |
51 { |
56 { |
52 TRACE_ENTRY_POINT; |
57 OstTraceFunctionEntry0( CCALENSOLARTERMS_NEWL_ENTRY ); |
53 |
|
54 CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs); |
58 CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs); |
55 CleanupStack::PushL( self ); |
59 CleanupStack::PushL( self ); |
56 self->ConstructL(); |
60 self->ConstructL(); |
57 CleanupStack::Pop( self ); |
61 CleanupStack::Pop( self ); |
58 |
62 |
59 TRACE_EXIT_POINT; |
63 OstTraceFunctionExit0( CCALENSOLARTERMS_NEWL_EXIT ); |
60 return self; |
64 return self; |
61 } |
65 } |
62 |
66 |
63 |
67 |
64 // --------------------------------------------------------------------------- |
68 // --------------------------------------------------------------------------- |
65 // |
69 // |
66 // --------------------------------------------------------------------------- |
70 // --------------------------------------------------------------------------- |
67 // |
71 // |
68 EXPORT_C CCalenSolarTerms::~CCalenSolarTerms() |
72 EXPORT_C CCalenSolarTerms::~CCalenSolarTerms() |
69 { |
73 { |
70 TRACE_ENTRY_POINT; |
74 OstTraceFunctionEntry0( CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY ); |
71 TRACE_EXIT_POINT; |
75 OstTraceFunctionExit0( CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT ); |
72 } |
76 } |
73 |
77 |
74 |
78 |
75 // --------------------------------------------------------------------------- |
79 // --------------------------------------------------------------------------- |
76 // |
80 // |
77 // --------------------------------------------------------------------------- |
81 // --------------------------------------------------------------------------- |
78 // |
82 // |
79 EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate ) |
83 EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate ) |
80 { |
84 { |
81 TRACE_ENTRY_POINT; |
85 OstTraceFunctionEntry0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_ENTRY ); |
82 |
|
83 ReadSolarTermsL( aDate ); |
86 ReadSolarTermsL( aDate ); |
84 if ( HasSolarTermDataAvailable( aDate ) ) |
87 if ( HasSolarTermDataAvailable( aDate ) ) |
85 { |
88 { |
86 // Solar festival data is available for this date |
89 // Solar festival data is available for this date |
87 for (TInt i(0); i < KSolarTermCount; i++) |
90 for (TInt i(0); i < KSolarTermCount; i++) |
101 // to |
104 // to |
102 // Li Chun (~4.2.), ..., ..., Da Han (~22.1) |
105 // Li Chun (~4.2.), ..., ..., Da Han (~22.1) |
103 i += KSolarTermCount - 2; |
106 i += KSolarTermCount - 2; |
104 TInt foundIndex = i % KSolarTermCount; |
107 TInt foundIndex = i % KSolarTermCount; |
105 |
108 |
106 TRACE_EXIT_POINT; |
109 OstTraceFunctionExit0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
107 return foundIndex; |
110 return foundIndex; |
108 } |
111 } |
109 } |
112 } |
110 TRACE_EXIT_POINT; |
113 OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
111 return KErrNotFound; |
114 return KErrNotFound; |
112 } |
115 } |
113 else |
116 else |
114 { |
117 { |
115 // Solar festival data is NOT available for this date |
118 // Solar festival data is NOT available for this date |
116 TRACE_EXIT_POINT; |
119 OstTraceFunctionExit0( DUP2_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT ); |
117 return KErrNotSupported; |
120 return KErrNotSupported; |
118 } |
121 } |
119 } |
122 } |
120 |
123 |
121 |
124 |
124 // ?description_if_needed |
127 // ?description_if_needed |
125 // --------------------------------------------------------------------------- |
128 // --------------------------------------------------------------------------- |
126 // |
129 // |
127 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs ) |
130 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs ) |
128 { |
131 { |
129 TRACE_ENTRY_POINT; |
132 OstTraceFunctionEntry0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY ); |
130 TRACE_EXIT_POINT; |
133 OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT ); |
131 } |
134 } |
132 |
135 |
133 |
136 |
134 // --------------------------------------------------------------------------- |
137 // --------------------------------------------------------------------------- |
135 // ?description_if_needed |
138 // ?description_if_needed |
136 // --------------------------------------------------------------------------- |
139 // --------------------------------------------------------------------------- |
137 // |
140 // |
138 void CCalenSolarTerms::ConstructL() |
141 void CCalenSolarTerms::ConstructL() |
139 { |
142 { |
140 TRACE_ENTRY_POINT; |
143 OstTraceFunctionEntry0( CCALENSOLARTERMS_CONSTRUCTL_ENTRY ); |
141 TRACE_EXIT_POINT; |
144 OstTraceFunctionExit0( CCALENSOLARTERMS_CONSTRUCTL_EXIT ); |
142 } |
145 } |
143 |
146 |
144 |
147 |
145 // --------------------------------------------------------------------------- |
148 // --------------------------------------------------------------------------- |
146 // ?description_if_needed |
149 // ?description_if_needed |
147 // --------------------------------------------------------------------------- |
150 // --------------------------------------------------------------------------- |
148 // |
151 // |
149 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const |
152 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const |
150 { |
153 { |
151 TRACE_ENTRY_POINT; |
154 OstTraceFunctionEntry0( CCALENSOLARTERMS_HASSOLARTERMDATAAVAILABLE_ENTRY ); |
152 |
|
153 // Note: day parameter for TDateTime starts from 0, not from 1 |
155 // Note: day parameter for TDateTime starts from 0, not from 1 |
154 const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 ); |
156 const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 ); |
155 const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 ); |
157 const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 ); |
156 |
158 |
157 TRACE_EXIT_POINT; |
|
158 return TTime(KMinAvailable) <= TTime(aDate) && |
159 return TTime(KMinAvailable) <= TTime(aDate) && |
159 TTime(aDate) <= TTime(KMaxAvailable); |
160 TTime(aDate) <= TTime(KMaxAvailable); |
160 } |
161 } |
161 |
162 |
162 |
163 |
165 // from "SolarItems" file |
166 // from "SolarItems" file |
166 // --------------------------------------------------------- |
167 // --------------------------------------------------------- |
167 // |
168 // |
168 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate) |
169 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate) |
169 { |
170 { |
170 TRACE_ENTRY_POINT; |
171 OstTraceFunctionEntry0( CCALENSOLARTERMS_READSOLARTERMSL_ENTRY ); |
171 |
|
172 // Caches one year of solar items |
172 // Caches one year of solar items |
173 if ( ! HasSolarTermDataAvailable( aDate ) ) |
173 if ( ! HasSolarTermDataAvailable( aDate ) ) |
174 { |
174 { |
|
175 OstTraceFunctionExit0( CCALENSOLARTERMS_READSOLARTERMSL_EXIT ); |
175 return; |
176 return; |
176 } |
177 } |
177 |
178 |
178 TInt year = aDate.Year(); |
179 TInt year = aDate.Year(); |
179 |
180 |