landmarksui/uicontrols/inc/CLmkEditorImpl.h
branchRCL_3
changeset 18 870918037e16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/uicontrols/inc/CLmkEditorImpl.h	Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,482 @@
+/*
+ * Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:    This file contains class for landmarks editor and viewer
+ *
+ */
+
+#ifndef CLMKEDITORIMPL_H
+#define CLMKEDITORIMPL_H
+
+//  INCLUDES
+#include "CLmkFields.h"
+#include "MLmkEditorUiBuilder.h"
+#include "MLmkLocationObserver.h"
+#include <AknForm.h>        // CAknForm
+#include <EPos_Landmarks.h> // Lm typedefs, constants etc.
+#include <CLmkEditorDlg.h>  // dialog flags
+#include <AknInfoPopupNoteController.h>
+#include "CLmkLandMarkCategoriesName.h"
+#include "clmkmapnavigationinterface.h"
+#include "mlmkcentralrepositoryobserver.h"
+#include "lmkwaitdlglauncher.h"
+
+// FORWARD DECLARATIONS
+class CPosLandmarkDatabase;
+class CLmkSender;
+class MObjectProvider;
+class CPosLmPartialReadParameters;
+class CLmkUiUtils;
+class CPosLandmark;
+class CLmkEditorFieldArray;
+class CAknNavigationDecorator;
+class CLmkLocationService;
+class TCoeHelpContext;
+class CLmkCallCmd;
+class CLmkGoToURLCmd;
+class MLmkEditorField;
+class CLmkCentralRepository;
+
+// CLASS DECLARATION
+/**
+ * CLmkEditorImpl class
+ */
+class CLmkEditorImpl : public CAknForm,
+        public MLmkEditorUiBuilder,
+        public MLmkLocationObserver,
+        public MLmkListProviderObserver,
+        public MLmkCentralRepositoryObserver,
+        public MLmkWaitDialogLauncherObserver
+    {
+public:
+    // Constructors and destructor
+    /**
+     * Edit or create new landmark
+     * Create new landmark if aLandmarkId = KPosLmNullItemId
+     * Not take ownership CPosLmPartialReadParameters
+     * @param aDb
+     * @param aSender landmark sender reference
+     * @param aAttributes
+     * @param aEditorMode
+     * @param aLandmarkId
+     * @return newly instantiated object
+     */
+    IMPORT_C static CLmkEditorImpl* NewL(CPosLandmarkDatabase& aDb,
+            CLmkSender& aSender, TLmkEditorAttributes aAttributes,
+            TLmkEditorMode aEditorMode, TPosLmItemId aLandmarkId);
+
+    /**
+     * Edit landmark
+     * Not take ownership CPosLandmark or CPosLmPartialReadParameters
+     * @param aDb
+     * @param aSender landmark sender reference
+     * @param aAttributes
+     * @param aEditorFlags
+     * @param aLandmark
+     * @return newly instantiated object
+     */
+    IMPORT_C static CLmkEditorImpl* NewL(CPosLandmarkDatabase& aDb,
+            CLmkSender& aSender, TLmkEditorAttributes aAttributes,
+            TLmkEditorMode aEditorMode, CPosLandmark* aLandmark);
+    IMPORT_C static CLmkEditorImpl* NewL(CPosLandmarkDatabase& aDb,
+            CLmkSender& aSender, TLmkEditorAttributes aAttributes,
+            TLmkEditorMode aEditorMode, TPosLmItemId* aLandmarkId,
+            CPosLandmark* aLandmark);
+    /**
+     * Destructor.
+     */
+    ~CLmkEditorImpl();
+
+public:
+    // New functions
+    /**
+     * Set parent
+     * @param aParent
+     */
+    IMPORT_C void SetMopParent(MObjectProvider* aParent);
+
+    /**
+     * Set help context
+     * @param aContect
+     */
+    IMPORT_C void SetHelpContext(TCoeHelpContext aContext);
+
+    /**
+     * ExecuteLD
+     * @return error code
+     */
+    IMPORT_C TInt ExecuteLD();
+    /**
+     * This function when invoked, disables the Map and Navigation related Menu Options
+     * This needs to be invoked before ExecuteLD().By default, the Map and Navigation
+     * menu options are enabled and are shown.
+     *
+     */
+    IMPORT_C void DisableMapAndNavigationMenuOptions();
+    /**
+     * This function should be invoked only when,from the landmark
+     * view dialog, edit mode dialog and launched and fields are
+     * updated. This function updates the corresponding the fields
+     * in the landmark viewer dialog.
+     */
+    void UpdateViewDlgL();
+
+public:
+    // From CAknForm
+    void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane);
+    void ProcessCommandL(TInt aCommandId);
+    void HandleControlStateChangeL(TInt aControlId);
+    void DoNotSaveFormDataL();
+    TInt EditMode();
+public:
+    //from MLmkWaitDialogLauncherObserver
+    void HandleDialogDismissed(TInt aButtonId);
+
+public:
+    //from CCoeControl
+    void GetHelpContext(TCoeHelpContext& aContext) const;
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+protected:
+    //from MLmkLocationObserver
+    void NotifyL(const TInt aStatus);
+    void NotifyErrorL(TInt aErrorCode);
+
+public:
+    //from CEikDialog
+    SEikControlInfo CreateCustomControlL(TInt aControlType);
+    MEikDialogPageObserver::TFormControlTypes
+    ConvertCustomControlTypeToBaseControlType(TInt aControlType) const;
+
+#ifdef RD_SCALABLE_UI_V2
+protected:
+    // From MEikDialogPageObserver
+    void HandleDialogPageEventL(TInt aEventID);
+#endif //RD_SCALABLE_UI_V2
+    
+    //from MEikDialogPageObserver
+    void LineChangedL(TInt aControlId);
+
+protected:
+    // from CAknForm
+    void PreLayoutDynInitL();
+    void PostLayoutDynInitL();
+
+protected:
+    //from CEikDialog
+    TBool OkToExitL(TInt aKeyCode);
+
+protected:
+    //from MLmkCentralRepositoryObserver
+    void HandleCentralRepositoryChangeL();
+
+protected:
+    // Constructors and destructor
+    /**
+     * C++ default constructor.
+     * @param aDb
+     * @param aSender landmark sender reference
+     * @param aEditorMode
+     * @return newly instantiated object
+     */
+    CLmkEditorImpl(CPosLandmarkDatabase& aDb, CLmkSender& aSender,
+            TLmkEditorMode aEditorMode);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     * @param aLandmarkId, negative if create new
+     * @param aAttiributes
+     */
+    void ConstructL(TPosLmItemId aLandmarkId,
+            TLmkEditorAttributes aAttributes);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     * @param aLandmark, Null if create new
+     * @param aAttributes
+     */
+    void ConstructL(CPosLandmark* aLandmark,
+            TLmkEditorAttributes aAttributes);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     * @param aLandmarkId, negative if create new
+     * @param aAttiributes
+     */
+    void ConstructL(TPosLmItemId* aLandmarkId, CPosLandmark* aLandmark,
+            TLmkEditorAttributes aAttributes);
+
+    /**
+     * Set default things for both other ConstructL() methods.
+     */
+    void CommonConstructL(TLmkEditorAttributes& aAttributes);
+
+    /**
+     * Context menu bar construction
+     */
+    void ConstructContextMenuL();
+
+    /**
+     * Checks Landmarks Coordinate Data Is available or not.
+     */
+    TBool IsLandmarkDataEmptyL(CPosLandmark* aLandmark);
+
+    /**
+     * Check whether Coordinates has to be hidden.
+     */
+    void CheckHideCoordinateL();
+
+private:
+    // from MPbkContactEditorUiBuilder
+    CCoeControl* CreateLineL(const TDesC& aCaption, TInt aControlId,
+            TInt aControlType);
+    CEikCaptionedControl* LineControl(TInt aControlId) const;
+    void DeleteControl(TInt aControlId);
+    void TryChangeFocusL(TInt aControlId);
+    void SetCurrentLineCaptionL(TInt aControlId, const TDesC& aText);
+    CCoeControl* Control(TInt aControlId) const;
+    void SetEditableL(TBool aState);
+    CPosLandmarkDatabase& Database();
+    CPosLandmark* GetCurrentEditedLandmarkL();
+
+private:
+    // New functions
+    void CreateLabelArrayL();
+    void CreateLabelL(TInt iResourceId, TInt iPos);
+    TBool IsNameFieldEmptyL();
+    TBool OkToExitL();
+    void SelectCategoriesCmdL();
+    void CurrentLocationCmdL();
+    void ChangeIconCmdL();
+    void CategoriesCmdL();
+    void CategoriesCmdFromXmlL();
+    void SetCurrentLocationL(const TPosition& aPosition);
+    void ChangeContextImageL();
+    void AttachAIWMenuInterestL();
+
+    void CreateLabelArrayForNormalModeL();
+    void CreateLabelArrayForJapaneseModeL();
+    /**
+     * Gets the length of text fields
+     */
+    TInt GetFieldTextLengthL(MLmkEditorField& afield);
+
+    //New Functions to update the view dialog when
+    //when the landmark fields are changed during the
+    //editing mode
+
+    void UpdateTextEditorControlL(MLmkEditorField* aEditorField,
+            CPosLandmark* aLandmark, MLmkFieldData* fieldData,
+            TUint aFiledType, TInt aPrevControlId, TInt aPos);
+    void UpdateCoordinateEditorControlL(MLmkEditorField* aEditorField,
+            MLmkFieldData* fieldData, TReal aValue, TInt aPrevControlId,
+            TInt aPos);
+    void UpdateCategoryEditorControlL(MLmkEditorField* aEditorField,
+            MLmkFieldData* fieldData, TInt aPrevControlId, TInt aPos,
+            CPosLandmark& aLandmark);
+    void UpdateNumberEditorControlL(MLmkEditorField* aEditorField,
+            MLmkFieldData* fieldData, TReal32 aValue, TInt aPrevControlId,
+            TInt aPos);
+
+    void UpdateNameEditorControlL(MLmkEditorField* aEditorField,
+            CPosLandmark* aLandmark, MLmkFieldData* fieldData);
+    void UpdateDesEditorControlL(MLmkEditorField* aEditorField,
+            CPosLandmark* aLandmark, MLmkFieldData* fieldData,
+            TInt aPrevControlId, TInt aPos);
+    
+    TBool ShowQueryIfLocationFieldsAlreadyFilledL();
+
+    TBool ValidateContentL();
+
+    void DoNotSaveDataL(const TUint16 aFieldType);
+
+    TBool IsFieldEmptyL(const TUint16 aFieldType);
+
+    TBool IsInvalidUriL();
+
+    void LaunchLmkEditorL();
+
+    void DeleteSelfL();
+	
+    void UpdateCatInfoNotePosition();
+	
+    TBool IsCategoryField();
+
+    /**
+     * Clears the lat/long/pos acc/alt acc fields
+     */
+    void ClearPositionInfoL();
+
+protected:
+    /**
+     * Checks if position fields do not have value
+     */
+    TBool ArePositionFieldEmptyL();
+
+private:
+#ifdef RD_SCALABLE_UI_V2
+    /**
+     * Handles touch click command , only for editor
+     */
+    void HandleEditorCommandL();
+#endif //RD_SCALABLE_UI_V2
+    MLmkEditorField* InsertLineL(MLmkFieldData* aFieldData,
+            TInt aPrevControlId);
+    void DeleteLineL(MLmkEditorField* aEditorField, TInt aCtrlId, TInt aPos);
+    MLmkEditorField* AddOrDeleteLineL(MLmkEditorField* aEditorField,
+            MLmkFieldData* aFieldData, TInt aPrevControlId, TInt aCtrlId,
+            TInt aPos);
+    static TInt MessageQueryCallBack(TAny* aPtr);
+
+private:
+    //from MLmkListProviderObserver
+    void HandleListProviderEvent(TLmkListProviderEventType aEvent);
+
+    void HandleListProviderError(TInt aError);
+
+protected:
+    //overriden virtual from CCoeControl
+    virtual void ActivateL();
+	
+public:
+    // Added for category name support
+    void SetCategoryName(const TDesC& aCategoryName);
+    //This function is called when moving from view mode to
+    //edit mode, which field to be focussed/
+    void SetFieldTypeToFocusInEditMode(TUint aFieldType);
+
+    /**
+     * This function checks if the editing dialog is launched
+     * from the lmk viewer dialog
+     */
+    TBool IsDlgEditing();
+
+    /**
+     * This function sets the mode of the editor dialog as
+     * editing, when launched from lmk viewer dialog
+     * This is to avoid crash in ActivateL
+     */
+    void SetDlgEditing(TBool aEditing);
+    // For Landscape Support
+    void HandleResourceChange(TInt aType);
+	
+protected:
+    //for MSK
+    virtual void UpdateMskOnArrowMoveForViewerL();
+    void AddMskCommandL(TInt aResourceId, TLmkAppCmdId aCommandId);
+    void DimmMiddleSoftKey();
+
+protected:
+    // Data
+    /// Reference to database
+    CPosLandmarkDatabase& iDb;
+
+    /// Ref: landmark sender
+    CLmkSender& iSender;
+
+    /// Ref: CPosLmPartialReadParameters
+    CPosLmPartialReadParameters* iPartialLmk;
+
+    /// TInt
+    TInt iResourceOffset;
+
+    /// Own: landmark UI utils
+    CLmkUiUtils* iLmkUiUtils;
+
+    /// Own:
+    CLmkFields* iLmkFields;
+
+    /// Own:
+    RPointerArray<HBufC> iLabelArray;
+
+    /// Own:
+    CLmkEditorFieldArray* iEditorFieldArray;
+
+    TLmkEditorMode iEditorMode;
+
+    ///Own:
+    CLmkLocationService* iLocationService;
+
+    TCoeHelpContext iHelpContext;
+    TBool iCalegorySelectionFlag;
+    RArray<TCategoryName> iCategoryNames;
+
+    ///Ref:
+    // Used to return the created Landmark Id Value.
+    // Don't allocate or delete memory or set to NULL;
+    // The variable might be a local stack variable.
+    // If no landmarks is created then set it to -1 or if successful
+    // then set it to the Landmark Id value.
+    TPosLmItemId* iLandmarkItemId;
+
+    /// Own: context menu bar
+    CEikMenuBar* iContextMenuBar;
+    CLmkGoToURLCmd* iLmkGoToURLCmd;
+    CLmkCallCmd* iLmkCallCmd;
+    // Flag to determine if Map and Navigation options needs to be shown
+    TBool iMapNavFeature;
+    // Current Input language. (Used for Japanese)
+    TBool iJapaneseInputMode;
+    CPosLandmark* iLandmark;
+
+    // Own: Pointer to map and navigation interface
+    CLmkMapNavigationInterface* iMapNavInterface;
+    // Flag which indicates receive state of landmark editor dialog
+    // Set to true for receive mode
+    TBool iIsLmkReceiveMode;
+    TLmkAppCmdId iMskCmdId;
+    TInt iCurrentResourceId;
+
+    // It will be ETrue when coordinates has to be hidden.
+    TBool iIsHideCoordinate;
+
+    // It will be ETrue when help has to be hidden.
+    TBool iIsHideHelp;
+    
+private:
+    // added data members
+    // holds the field type of the current focussed item in the dialog
+    TUint iFieldTypeToFocus;
+    // Set true when editor dialog is launched from view dialog.
+    TBool iIsEditing;
+
+    TBool iBackspaceStartForWebAddressField;
+
+    TBool iResetWebAddrSize;
+
+    CAknInfoPopupNoteController* iCatInfoPopupNote;
+    // Own:
+    CLmkListProviderBase* iListProvider; 
+    
+    CLmkEditorImpl* iEditor;
+
+    CLmkCentralRepository* iRepository;
+
+    /**
+     * Wait dialog launcher
+     * Owns
+     */
+    CLmkWaitDialogLauncher* iWaitDialogLauncher;
+
+    TBool iIsEndKey;
+
+    TBool iIsEditableField;
+
+    // To check the ownership of iLandmark
+    TBool iIsLmOwned;
+    // To Check category selector launched or not
+    TBool iIsCategorySelctorOpen;
+    };
+#endif      // CLMKEDITORIMPL_H
+
+// End of File