|
S60 3rd Edition SDK for Symbian OS Example Applications Guide |
00001 /* 00002 * ============================================================================== 00003 * Name : LandmarksInfoModel.cpp 00004 * Part of : Landmark Reference Application 00005 * Interface : - 00006 * Description : Implements the CLandmarksInfoModel class 00007 * Version : 1.0 00008 * 00009 * Copyright (c) 2004-2006 Nokia Corporation. 00010 * This material, including documentation and any related 00011 * computer programs, is protected by copyright controlled by 00012 * Nokia Corporation. 00013 * ============================================================================== 00014 */ 00015 00016 // INCLUDE FILES 00017 #include <eikenv.h> 00018 #include <gulicon.h> 00019 #include <AknsUtils.h> 00020 #include <AknsItemID.h> 00021 00022 #include <LbsPosition.h> 00023 #include <EPos_CPosLandmark.h> 00024 #include <EPos_CPosLandmarkCategory.h> 00025 00026 #include <LmRefApp.rsg> 00027 #include "LmRefApp.hrh" 00028 #include "LandmarksInfoModel.h" 00029 #include "LandmarksUtils.h" 00030 #include "LandmarksCommonData.h" 00031 #include "LandmarksApplicationEngine.h" 00032 00033 const TInt KFieldCaptions[] = 00034 { 00035 0, // this slot is not used 00036 R_LMREFAPP_LMNAME_LABEL_SHORT, // ELandmarkNameField 00037 R_LMREFAPP_DESCRIPTION_LABEL_SHORT, // ELandmarkDescField 00038 R_LMREFAPP_CATEGORY_LABEL_SHORT, // ELandmarkCategoryField 00039 R_LMREFAPP_LAT_LABEL_SHORT, // ELandmarkLatitudeField 00040 R_LMREFAPP_LON_LABEL_SHORT, // ELandmarkLongitudeField 00041 R_LMREFAPP_ALT_LABEL_SHORT, // ELandmarkAltitudeField 00042 R_LMREFAPP_HOR_ACC_LABEL_SHORT, // ELandmarkHorAccField 00043 R_LMREFAPP_VER_ACC_LABEL_SHORT, // ELandmarkVerAccField 00044 R_LMREFAPP_RADIUS_LABEL_SHORT, // ELandmarkRadiusField 00045 R_LMREFAPP_STREET_LABEL_SHORT, // ELandmarkStreetField 00046 R_LMREFAPP_POSTAL_LABEL_SHORT, // ELandmarkPostalField 00047 R_LMREFAPP_CITY_LABEL_SHORT, // ELandmarkCityField 00048 R_LMREFAPP_COUNTRY_LABEL_SHORT, // ELandmarkCountryField 00049 }; 00050 00051 // ============================ MEMBER FUNCTIONS =============================== 00052 00053 // ----------------------------------------------------------------------------- 00054 // CLandmarksInfoModel::CLandmarksInfoModel 00055 // C++ constructor can NOT contain any code, that 00056 // might leave. 00057 // ----------------------------------------------------------------------------- 00058 // 00059 CLandmarksInfoModel::CLandmarksInfoModel( 00060 CLandmarksApplicationEngine& aEngine) 00061 : iEngine(aEngine) 00062 { 00063 // Configure real format 00064 const TChar KDecimalChar = '.'; 00065 iRealFormat.iPlaces = KNrOfDecimals; 00066 iRealFormat.iPoint = KDecimalChar; 00067 iRealFormat.iTriLen = 0; 00068 iRealFormat.iWidth = KPosLmMaxTextFieldLength; 00069 iRealFormat.iType = KRealFormatFixed; 00070 } 00071 00072 // Destructor 00073 CLandmarksInfoModel::~CLandmarksInfoModel() 00074 { 00075 } 00076 00077 // ----------------------------------------------------------------------------- 00078 // CLandmarksInfoModel::GetLandmarkInfoL 00079 // 00080 // (other items were commented in a header). 00081 // ----------------------------------------------------------------------------- 00082 // 00083 CDesCArray* CLandmarksInfoModel::GetLandmarkInfoL( 00084 CPosLandmark& aLandmark, 00085 RArray<TInt>& aFieldIds) 00086 { 00087 TPtrC fieldValue; 00088 aFieldIds.Reset(); 00089 00090 const TInt KInfoArrayGranularity = 16; 00091 CDesCArray* infoArray = new (ELeave) CDesCArrayFlat(KInfoArrayGranularity); 00092 00093 // Format landmark name 00094 fieldValue.Set(KNullDesC); 00095 aLandmark.GetLandmarkName(fieldValue); 00096 00097 AddTextFieldL(ELandmarkNameField, fieldValue, *infoArray, aFieldIds); 00098 00099 // Format description 00100 fieldValue.Set(KNullDesC); 00101 aLandmark.GetLandmarkDescription(fieldValue); 00102 00103 AddTextFieldL(ELandmarkDescField, fieldValue, *infoArray, aFieldIds); 00104 00105 // Format categories 00106 AddCategoryFieldsL(aLandmark, *infoArray, aFieldIds); 00107 00108 // Format location fields 00109 TLocality location; 00110 aLandmark.GetPosition(location); 00111 AddLocationFieldsL(location, *infoArray, aFieldIds); 00112 00113 // Format coverage Radius 00114 TReal32 coverageRadius; 00115 TBuf<KPosLmMaxTextFieldLength> radiusBuf; 00116 TInt res = aLandmark.GetCoverageRadius(coverageRadius); 00117 if (res != KErrNotFound) 00118 { 00119 radiusBuf.AppendNum(coverageRadius, iRealFormat); 00120 } 00121 00122 AddTextFieldL(ELandmarkRadiusField, radiusBuf, *infoArray, aFieldIds); 00123 00124 // Format street; 00125 fieldValue.Set(KNullDesC); 00126 aLandmark.GetPositionField(EPositionFieldStreet, fieldValue); 00127 00128 AddTextFieldL(ELandmarkStreetField, fieldValue, *infoArray, aFieldIds); 00129 00130 // Format postalCode; 00131 fieldValue.Set(KNullDesC); 00132 aLandmark.GetPositionField(EPositionFieldPostalCode, fieldValue); 00133 00134 AddTextFieldL(ELandmarkPostalField, fieldValue, *infoArray, aFieldIds); 00135 00136 // Format city; 00137 fieldValue.Set(KNullDesC); 00138 aLandmark.GetPositionField(EPositionFieldCity, fieldValue); 00139 00140 AddTextFieldL(ELandmarkCityField, fieldValue, *infoArray, aFieldIds); 00141 00142 // Format country 00143 fieldValue.Set(KNullDesC); 00144 aLandmark.GetPositionField(EPositionFieldCountry, fieldValue); 00145 00146 AddTextFieldL(ELandmarkCountryField, fieldValue, *infoArray, aFieldIds); 00147 00148 return infoArray; 00149 } 00150 00151 // ----------------------------------------------------------------------------- 00152 // CLandmarksInfoModel::AddTextFieldL 00153 // 00154 // (other items were commented in a header). 00155 // ----------------------------------------------------------------------------- 00156 // 00157 void CLandmarksInfoModel::AddTextFieldL( 00158 TInt aFieldId, 00159 TDesC& aText, 00160 CDesCArray& aArray, 00161 RArray<TInt>& aFieldIds) 00162 { 00163 if (aText.Length()) 00164 { 00165 HBufC* caption = CCoeEnv::Static()-> 00166 AllocReadResourceAsDes16LC(KFieldCaptions[aFieldId]); 00167 00168 const TInt KNumTabsAndOther = 10; 00169 HBufC* item = HBufC::NewLC( 00170 caption->Length() + aText.Length() + KNumTabsAndOther); 00171 00172 _LIT(KItemFormat, "%S\t%S\t\t"); 00173 item->Des().Format(KItemFormat, caption, &aText); 00174 00175 // append new item to the list 00176 aFieldIds.AppendL(aFieldId); 00177 aArray.AppendL(*item); 00178 CleanupStack::PopAndDestroy(2, caption); 00179 } 00180 } 00181 00182 // ----------------------------------------------------------------------------- 00183 // CLandmarksInfoModel::AddLocationFieldsL 00184 // 00185 // (other items were commented in a header). 00186 // ----------------------------------------------------------------------------- 00187 // 00188 void CLandmarksInfoModel::AddLocationFieldsL( 00189 TLocality& aLocation, 00190 CDesCArray& aArray, 00191 RArray<TInt>& aFieldIds) 00192 { 00193 TBuf<KPosLmMaxTextFieldLength> fieldValue; 00194 00195 // Format latitude in deg min sec format 00196 LandmarksUtils::LatLongFloatToDegMinSecDesL(aLocation.Latitude(), fieldValue); 00197 AddTextFieldL(ELandmarkLatitudeField, fieldValue, aArray, aFieldIds); 00198 fieldValue.Zero(); 00199 00200 // Format longitude in deg min sec format 00201 LandmarksUtils::LatLongFloatToDegMinSecDesL(aLocation.Longitude(), fieldValue); 00202 AddTextFieldL(ELandmarkLongitudeField, fieldValue, aArray, aFieldIds); 00203 fieldValue.Zero(); 00204 00205 // Format altitude 00206 LandmarksUtils::FloatToDesL(aLocation.Altitude(), fieldValue, iRealFormat); 00207 AddTextFieldL(ELandmarkAltitudeField, fieldValue, aArray, aFieldIds); 00208 00209 // Format horizontal accuracy 00210 LandmarksUtils::FloatToDesL(aLocation.HorizontalAccuracy(), fieldValue, iRealFormat); 00211 AddTextFieldL(ELandmarkHorAccField, fieldValue, aArray, aFieldIds); 00212 00213 // Format vertical accuracy 00214 LandmarksUtils::FloatToDesL(aLocation.VerticalAccuracy(), fieldValue, iRealFormat); 00215 AddTextFieldL(ELandmarkVerAccField, fieldValue, aArray, aFieldIds); 00216 } 00217 00218 // ----------------------------------------------------------------------------- 00219 // CLandmarksInfoModel::AddCategoryFieldsL 00220 // 00221 // (other items were commented in a header). 00222 // ----------------------------------------------------------------------------- 00223 // 00224 void CLandmarksInfoModel::AddCategoryFieldsL( 00225 CPosLandmark& aLandmark, 00226 CDesCArray& aArray, 00227 RArray<TInt>& aFieldIds) 00228 { 00229 RArray< TPosLmItemId > categories; 00230 CleanupClosePushL(categories); 00231 aLandmark.GetCategoriesL(categories); 00232 TInt nrOfCategories = categories.Count(); 00233 00234 for (TInt i = 0; i < nrOfCategories; i++) 00235 { 00236 TPtrC categoryName; 00237 CPosLandmarkCategory* category = iEngine.CategoryLC(categories[i]); 00238 category->GetCategoryName(categoryName); 00239 00240 AddTextFieldL(ELandmarkCategoryField, categoryName, aArray, aFieldIds); 00241 00242 CleanupStack::PopAndDestroy(category); 00243 } 00244 00245 CleanupStack::PopAndDestroy(&categories); 00246 } 00247 00248 00249 // End of File 00250
|
© Nokia 2006 |