williamr@2: /* williamr@2: * Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Location editors williamr@2: * williamr@2: */ williamr@2: williamr@2: #ifndef AKNLOCATIONED_H williamr@2: #define AKNLOCATIONED_H williamr@2: williamr@2: #include williamr@2: williamr@2: class TPosition; williamr@2: class CLocationStrings; williamr@2: /** williamr@2: * Editor for TPosition type; latitude and longitude editor williamr@2: * williamr@2: * There exists two ways to construct CAknLocationEditor: williamr@2: * williamr@2: * @code williamr@2: * CAknLocationEditor *editor = CAknLocationEditor::NewL(pos, context); williamr@2: * @endcode williamr@2: * williamr@2: * Using resources: williamr@2: * williamr@2: * @code williamr@2: * CAknLocationEditor *editor = new (ELeave) CAknLocationEditor williamr@2: * TResourceReader reader; williamr@2: * iCoeEnv->CreateResourceReaderLC(reader,R_RES_ID_FOR_EDITOR); williamr@2: * editor->ConstructFromResourceL(reader); williamr@2: * editor->Set(pos); williamr@2: * CleanupStack::PopAndDestroy(); williamr@2: * @endcode williamr@2: * williamr@2: * Resource file format is as follows: williamr@2: * @code williamr@2: * LATITUDE_EDITOR williamr@2: * { williamr@2: * flags = ELocationEdFlagLatitude; williamr@2: * latlongresourceid = R_EIK_LATITUDE_AND_LONGITUDE; williamr@2: * }; williamr@2: * @endcode williamr@2: * or: williamr@2: * @code williamr@2: * LONGITUDE_EDITOR williamr@2: * { williamr@2: * flags = ELocationEdFlagLongitude; williamr@2: * latlongresourceid = R_EIK_LATITUDE_AND_LONGITUDE; williamr@2: * }; williamr@2: * @endcode williamr@2: * williamr@2: * @lib eikctl.lib williamr@2: * @lib lbs.lib (for TPosition class) williamr@2: * @since 3.2 williamr@2: * @see TPosition williamr@2: */ williamr@2: class CAknLocationEditor : public CEikMfne williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * TLocationContext determines what part of TPosition class is used for this editor. williamr@2: * ELongitudeOnly means only longitude part of TPosition is used. williamr@2: * ELatitudeOnly means only latitude part of TPosition is used. williamr@2: */ williamr@2: enum TLocationContext williamr@2: { williamr@2: ELongitudeOnly = 0x1, williamr@2: ELatitudeOnly = 0x2 williamr@2: }; williamr@2: /** williamr@2: * Constructor williamr@2: */ williamr@2: IMPORT_C CAknLocationEditor(); williamr@2: /** williamr@2: * Destructor williamr@2: */ williamr@2: IMPORT_C ~CAknLocationEditor(); williamr@2: /** williamr@2: * NewL() williamr@2: * Creates location editor and initializes it's value to value determined by the aValue parameter. williamr@2: * williamr@2: * @param aValue Initial value for location editor. williamr@2: * @param aContext Which part of the TPosition is used for this location editor williamr@2: */ williamr@2: IMPORT_C static CAknLocationEditor* NewL( TPosition &aValue, TLocationContext aContext ); williamr@2: williamr@2: /** williamr@2: * ConstructFromResourceL williamr@2: * Constructs location editor using information from resource files williamr@2: * williamr@2: * @param aResourceReader resource reader williamr@2: */ williamr@2: IMPORT_C void ConstructFromResourceL( TResourceReader& aResourceReader ); williamr@2: williamr@2: /** williamr@2: * DisplayableLocationL() williamr@2: * Converts TPosition into displayable descriptor usable for listboxes williamr@2: * williamr@2: * @param aValue value of the location williamr@2: * @param aContext which part of the TPosition is used williamr@2: */ williamr@2: IMPORT_C static HBufC* DisplayableLocationL( const TPosition &aValue, TLocationContext aContext ); williamr@2: williamr@2: williamr@2: /** williamr@2: * PrepareForFocusLossL() williamr@2: * detects focus changes to validate editor contents williamr@2: */ williamr@2: IMPORT_C virtual void PrepareForFocusLossL(); williamr@2: williamr@2: /** williamr@2: * Set() williamr@2: * Sets either longitude or latitude values of aValue williamr@2: * williamr@2: * @param aValue new value for the editor williamr@2: */ williamr@2: IMPORT_C void Set(const TPosition &aValue); williamr@2: /** williamr@2: * Get() williamr@2: * Gets either longitude or latitude values of aValue williamr@2: * williamr@2: * @param aValue TPosition object that will be modified williamr@2: */ williamr@2: IMPORT_C void Get( TPosition &aValue ) const; williamr@2: /** williamr@2: * OfferKeyEventL() williamr@2: * key event handling of location editor williamr@2: */ williamr@2: IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); williamr@2: private: williamr@2: enum TLocationType williamr@2: { williamr@2: EDD, williamr@2: EDMM, williamr@2: EDMSD williamr@2: }; williamr@2: TLocationType Type() const; williamr@2: static void Split( const TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt &aDegrees, williamr@2: TInt &aDeciDegrees, williamr@2: TInt &aMinutes, williamr@2: TInt &aDeciMinutes, williamr@2: TInt &aSeconds, williamr@2: TInt &aDeciSeconds, williamr@2: TBool &aNeg, williamr@2: TBool &aNan ); williamr@2: static void SplitDD( const TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt &aDegrees, williamr@2: TInt &aDeciDegrees, williamr@2: TBool &aNeg, williamr@2: TBool &aNan ); williamr@2: static void SplitDMM( const TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt &aDegrees, williamr@2: TInt &aMinutes, williamr@2: TInt &aDeciMinutes, williamr@2: TBool &aNeg, williamr@2: TBool &aNan ); williamr@2: static void SplitDMSD( const TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt &aDegrees, williamr@2: TInt &aMinutes, williamr@2: TInt &aSeconds, williamr@2: TInt &aDeciSeconds, williamr@2: TBool &aNeg, williamr@2: TBool &aNan ); williamr@2: static void CombineDD( TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt aDegrees, williamr@2: TInt aDeciDegrees, williamr@2: TBool aNeg, williamr@2: TBool aNan ); williamr@2: static void CombineDMM( TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt aDegrees, williamr@2: TInt aMinutes, williamr@2: TInt aDeciMinutes, williamr@2: TBool aNeg, williamr@2: TBool aNan ); williamr@2: static void CombineDMSD( TPosition &aValue, williamr@2: TLocationContext aContext, williamr@2: TInt aDegrees, williamr@2: TInt aMinutes, williamr@2: TInt aSeconds, williamr@2: TInt aDeciSeconds, williamr@2: TBool aNeg, williamr@2: TBool aNan ); williamr@2: private: williamr@2: void SetUninitialised(TBool aInitialised); williamr@2: void RefreshFromLocale(); williamr@2: void ConstructL( TPosition &aValue, TLocationContext aContext ); williamr@2: public: williamr@2: void HandleCenRepChangedL(TUint32 aKey, TInt aValue); williamr@2: void CreateMfneFieldsL(const TPosition &aValue); williamr@2: private: williamr@2: void LoadStringsL( TInt aResourceId ); williamr@2: williamr@2: /** williamr@2: * Maps logical MFNE field order to correct visual order. williamr@2: * @param aFieldNumber Field position in logical format. williamr@2: * @param aType Used location editor format. williamr@2: * @return Field position in visual format. williamr@2: */ williamr@2: TInt FieldMapping(const TInt aFieldNumber, const TLocationType aType) const; williamr@2: williamr@2: protected: williamr@2: IMPORT_C virtual void* CAknLocationEditor_ExtensionInterface( TUid aInterface ); williamr@2: private: williamr@2: CLocationStrings* iStrings; williamr@2: TLocationContext iContext; williamr@2: }; williamr@2: williamr@2: williamr@2: #endif