landmarksui/uicontrols/src/CLmkEditorCoordinateField.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
equal deleted inserted replaced
16:8173571d354e 17:1fc85118c3ae
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Methods for Landmark editor number field.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 // INCLUDE FILES
       
    25 #include "CLmkEditorCoordinateField.h"
       
    26 #include "MLmkEditorUiBuilder.h"
       
    27 #include "LmkConsts.h"
       
    28 #include "landmarks.hrh"
       
    29 #include <eikcapc.h>
       
    30 #include <e32math.h>
       
    31 #include <lbsposition.h>
       
    32 #include <aknlocationed.h>
       
    33 #include <barsread.h>
       
    34 #include <lmkui.rsg>
       
    35 
       
    36 // CONSTANTS
       
    37 /// Unnamed namespace for local definitions
       
    38 namespace {
       
    39 const TReal KDefaultHorizontalAccuracy = 0.1;
       
    40 }  // namespace
       
    41 
       
    42 // ================= MEMBER FUNCTIONS =======================
       
    43 
       
    44 // ----------------------------------------------------
       
    45 // CLmkEditorCoordinateField::CLmkEditorCoordinateField
       
    46 // ----------------------------------------------------
       
    47 //
       
    48 CLmkEditorCoordinateField::CLmkEditorCoordinateField
       
    49         ( MLmkFieldData& aField,
       
    50 		  MLmkEditorUiBuilder& aUiBuilder ) :
       
    51     CLmkEditorFieldBase( aField, aUiBuilder )
       
    52     {
       
    53     }
       
    54 
       
    55 // ----------------------------------------------------
       
    56 // CLmkEditorCoordinateField::ConstructL
       
    57 // ----------------------------------------------------
       
    58 //
       
    59 void CLmkEditorCoordinateField::ConstructL()
       
    60     {
       
    61     // Create and insert a line in the dialog
       
    62 	//using AVKON's coordinate editor
       
    63 	CreateAvkonCoordinateEditorL();
       
    64     iCaptionedCtrl = iUiBuilder.LineControl( ControlId() );
       
    65     iCaptionedCtrl->SetTakesEnterKey( ETrue );
       
    66     TPosition position;
       
    67 	iControl->Get(position);
       
    68 	if (iIsLatitude)
       
    69 		{
       
    70 		iCurrentValue = position.Latitude();
       
    71 		}
       
    72 	else
       
    73 		{
       
    74 		iCurrentValue = position.Longitude();
       
    75 		}
       
    76     }
       
    77 
       
    78 // ----------------------------------------------------
       
    79 // CLmkEditorCoordinateField::NewL
       
    80 // ----------------------------------------------------
       
    81 //
       
    82 CLmkEditorCoordinateField* CLmkEditorCoordinateField::NewL
       
    83         ( MLmkFieldData& aField,
       
    84 		 MLmkEditorUiBuilder& aUiBuilder )
       
    85     {
       
    86     CLmkEditorCoordinateField* self =
       
    87         new(ELeave) CLmkEditorCoordinateField( aField, aUiBuilder );
       
    88     CleanupStack::PushL( self );
       
    89     self->ConstructL();
       
    90     CleanupStack::Pop( self );
       
    91     return self;
       
    92     }
       
    93 
       
    94 // ----------------------------------------------------
       
    95 // CLmkEditorCoordinateField::~CLmkEditorCoordinateField
       
    96 // ----------------------------------------------------
       
    97 //
       
    98 CLmkEditorCoordinateField::~CLmkEditorCoordinateField()
       
    99     {
       
   100     }
       
   101 
       
   102 // ----------------------------------------------------
       
   103 // CLmkEditorCoordinateField::SaveFieldL
       
   104 // ----------------------------------------------------
       
   105 //
       
   106 TBool CLmkEditorCoordinateField::SaveFieldL()
       
   107     {
       
   108     TPosition position;
       
   109 	iControl->Get(position);
       
   110 	TReal field = LandmarkItemField().DoubleData();
       
   111 	TReal controlData;
       
   112 	if (iIsLatitude)
       
   113 		{
       
   114 		controlData = position.Latitude();
       
   115 		}
       
   116 	else
       
   117 		{
       
   118 		controlData = position.Longitude();
       
   119 		}
       
   120 
       
   121 	if( iCurrentValue != controlData)
       
   122 		{
       
   123 		LandmarkItemField().SetTReal(controlData);
       
   124 		}
       
   125    	return ETrue;
       
   126     }
       
   127 
       
   128 // ----------------------------------------------------
       
   129 // CLmkEditorCoordinateField::ActivateL
       
   130 // ----------------------------------------------------
       
   131 //
       
   132 void CLmkEditorCoordinateField::ActivateL()
       
   133     {
       
   134     iCaptionedCtrl->ActivateL();
       
   135     }
       
   136 
       
   137 // ----------------------------------------------------
       
   138 // CLmkEditorCoordinateField::UpdateL
       
   139 // ----------------------------------------------------
       
   140 //
       
   141 void CLmkEditorCoordinateField::UpdateL()
       
   142     {
       
   143     TReal fieldData = LandmarkItemField().DoubleData();
       
   144 	TPosition position = ConstructPosition(fieldData);
       
   145 	iControl->Set(position);
       
   146 	iControl->DrawDeferred();
       
   147     }
       
   148 
       
   149 // ----------------------------------------------------
       
   150 // CLmkEditorCoordinateField::CreateAvkonCoordinateEditorL
       
   151 // ----------------------------------------------------
       
   152 //
       
   153 void CLmkEditorCoordinateField::CreateAvkonCoordinateEditorL()
       
   154 	{
       
   155 		//using AVKON's coordinate editor
       
   156 	iControl = static_cast<CAknLocationEditor*>( iUiBuilder.CreateLineL(
       
   157             FieldLabel(), LandmarkItemField().UniqueFieldIdentity(),
       
   158             EAknCtLocationEditor));
       
   159     ConstructEditorFromResourceL();
       
   160 
       
   161 	}
       
   162 // ----------------------------------------------------
       
   163 // CLmkEditorCoordinateField::ConstructEditorFromResourceL
       
   164 // ----------------------------------------------------
       
   165 //
       
   166 void CLmkEditorCoordinateField::ConstructEditorFromResourceL()
       
   167 	{
       
   168 
       
   169 	TRealX fieldData;
       
   170 	fieldData.SetNaN();
       
   171 	TInt resId = R_LMK_LONG_EDITOR;
       
   172 	fieldData = LandmarkItemField().DoubleData();
       
   173 	if	(LandmarkItemField().FieldType() == ELatitude )
       
   174 		{
       
   175 		resId = R_LMK_LAT_EDITOR;
       
   176 		iIsLatitude = ETrue;
       
   177 		}
       
   178 	TPosition position = ConstructPosition(fieldData);
       
   179 	TResourceReader reader;
       
   180 	iEnv->CreateResourceReaderLC(reader, resId);
       
   181 	iControl->ConstructFromResourceL(reader);
       
   182 	iControl->Set(position);
       
   183 	CleanupStack::PopAndDestroy(); // reader
       
   184 	}
       
   185 // ----------------------------------------------------
       
   186 // CLmkEditorCoordinateField::ConstructPosition
       
   187 // ----------------------------------------------------
       
   188 //
       
   189 TPosition CLmkEditorCoordinateField::ConstructPosition(const TReal& aValue)
       
   190 	{
       
   191 	TRealX latData;
       
   192 	latData.SetNaN();
       
   193 	TRealX longData;
       
   194 	longData.SetNaN();
       
   195 	TTime time;
       
   196 	time.HomeTime();
       
   197 	if (iIsLatitude)
       
   198 		{
       
   199 		latData = aValue;
       
   200 		}
       
   201 	else
       
   202 		{
       
   203 		longData = aValue;
       
   204 		}
       
   205 	TCoordinate coord(latData, longData);
       
   206 	TLocality loc(coord, KDefaultHorizontalAccuracy);
       
   207 	TPosition position(loc, time);
       
   208 	return position;
       
   209 	}
       
   210 
       
   211 // -----------------------------------------------------------------------------
       
   212 //CLmkEditorFieldBase::FieldValue()
       
   213 // -----------------------------------------------------------------------------
       
   214 //
       
   215 TReal CLmkEditorCoordinateField::FieldValue() const
       
   216 	{
       
   217 	TReal64 number = 0;
       
   218 	if (iControl)
       
   219 		{
       
   220 		TPosition pos;
       
   221         iControl->Get(pos);
       
   222         if (iIsLatitude)
       
   223         	{
       
   224         	number = pos.Latitude();
       
   225         	}
       
   226         else
       
   227         	{
       
   228         	number = pos.Longitude();
       
   229         	}
       
   230 		}
       
   231 	return number;
       
   232 	}
       
   233 
       
   234 // -----------------------------------------------------------------------------
       
   235 //CLmkEditorFieldBase::ResetL()
       
   236 // -----------------------------------------------------------------------------
       
   237 //
       
   238 void CLmkEditorCoordinateField::ResetL()
       
   239 	{
       
   240 	TRealX latData;
       
   241 	latData.SetNaN();
       
   242 	TPosition position = ConstructPosition(latData);
       
   243 	iControl->Set(position);
       
   244 	}
       
   245 // End of File