clock2/clockui/uilayer/clockalarmeditor/inc/clockalarmeditorimpl.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 18:37:27 +0300
branchRCL_3
changeset 27 aba12c885d83
parent 0 f979ecb2b13e
child 28 96907930389d
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* Copyright (c) 2008 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 is the header file for the CClockAlarmEditor class.
*
*/

#ifndef __CLOCK_ALARMEDITORIMPL_H__
#define __CLOCK_ALARMEDITORIMPL_H__

// System includes
#include <AknForm.h>
#include <eikedwob.h>
#include <eikcapc.h>
#include <asshdalarm.h>
#include <asclisession.h>

// User includes
#include "clkcommon.h"

// Forward declarations
class CAknView;
class MClkAlarmInfoObserver;

// Class declaration
/**
* @class CClockAlarmEditorImpl
* @brief The object of this class is used to accept the alarm information from the user.
* @dll clockalarmeditor.dll
*/
class CClockAlarmEditorImpl : public CAknForm,
                              public MEikEdwinObserver
	{
    public:             // Constructor and destructor
        
		/**
		* @brief 2-phased constructor.
		* @param aAlarmId The id of the alarm the client wishes to edit.
		* @return CClockAlarmEditor* Pointer to the constructed CClockAlarmEditor object.
		*/
		static CClockAlarmEditorImpl* NewL( TAlarmId& aAlarmId );
		
		/**
		* @brief Destructor
		*/
		~CClockAlarmEditorImpl();
		
	public:             // New functions
		
		/**
		* @brief Gets the previous alarm information from the document class and populates 
		*        the form before displaying it.
		* @param aAlarmInfo AlarmInfo structure.
		* @param aEditAlarm ETrue if the alarm is being reset.
		*/
        void LoadAlarmInformationL( SClkAlarmInfo& aAlarmInfo, TBool aEditAlarm );
		
		/**
		* @brief Calls the form's ExecuteLD to launch the editor.
		* @return TInt the newly set alarm ID, or 0 in case user has cancelled.
		*/
        TInt ExecuteLD();
        
    protected:          // Functions from base classes
        
		/**
		* @brief From CAknForm. Sets the initial current line in the form.
		*        This is implemented so that fields can removed dynamically.
		* @see CAknForm      
		*/
		void SetInitialCurrentLineL();
		
		/**
		* @brief From CAknForm. Saves the data in the form.
		* @return TBool ETrue if save successful.
		*/
		TBool SaveFormDataL();
		
		/**
		* @brief From CEikDialog. Checks if is ok to exit the form.
		* @param aButtonId The ID of the button that was activated.
		* @return ETrue to validate and exit the dialog,
		*         EFalse to keep the dialog active.
		* @see CEikDialog.
		*/
		TBool OkToExitL( TInt aButtonId );

		/**
		* @brief From CEikDialog. Pre-layout dialog initialisation.
		* @see CEikDialog.
		*/
		void PreLayoutDynInitL();
		
		/**
		* @brief From CEikDialog. Post-layout dialog initialisation.
		* @see CEikDialog.
		*/
		void PostLayoutDynInitL();
		
		/**
		* @brief From CEikDialog. Command handling.	
		* @param aCommandId The ID of the command that was activated.
		* @see CEikDialog.
		*/
		void ProcessCommandL( TInt aCommandId );
		
		/**
		* @brief From MEikMenuObserver. Dynamically initializes the menu items.
		* @param aResourceId The resource which triggered the action.
		* @param aMenuPane Pointer to the menupane of type CEikMenuPane.
		*/
		void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
        
    private:            // New functions
        
		/**
		* @brief Performs the 2nd phase of the 2-phase construction.
		*/
        void ConstructL();
        
		/**
		* @brief C++ default constructor.
		* @param aAlarmId The id of the alarm.
		*/
		CClockAlarmEditorImpl( TAlarmId& aAlarmId );
		
		/**
		* @brief Handles the occuracnce item command.
		*/
		void HandleOccuranceCmdL();
				
		/**
		* @brief Handles the alarm day item command.
		*/
		void HandleAlarmDayCmdL();
		
		/**
		* @brief Gets the index of the selected occurance item.
		*/
		void GetSelectedOccIndex();
                
		/**
		* @brief Gets the index of selected alarm day item.
		*/
		void GetSelectedAlmDayIndex();
				
		/**
		* @brief Creates the alarm day selection control dynamically.
		*/
        void CreateAlmDayCtrlL();
                
		/**
		* @brief Deletes the alarm day selection control if it exists.
		*/
        void DeleteAlmDayCtrlL();
                
		
        
		/**
		* @brief Sets the title text.
		* @param aNonDefault If EFalse then the default text will be displayed.
		*/
        void SetTitleL( TBool aNonDefault );
        
		/**
		* @brief Connects to the alarm server and sets the alarm.
		*/
        void SetAlarmL();
        
		/**
		* @brief Checks if the alarm time has gone past the current time and updates the alarm time accordingly.
		* @param aHomeTime The current time.
		* @param aTimeFromForm The time got from the form.
		*/
        void GetActualAlarmTime( const TTime& aHomeTime, TTime& aTimeFromForm );
        
		/**
		* @brief Tries to get the alarm info from alarm server corresponding 
		*        to aExistingAlarmId.
		* @param aExistingAlarmId The existing alarm Id.
		* @param aAlarmInfo Filled up with the alarm details if alarm exists.
		* @return KErrNone if alarm exists, KErrNotFound otherwise.
		*/
        TInt GetAlarmInformationL( TAlarmId aExistingAlarmId, SClkAlarmInfo& aAlarmInfo );
        
		/**
		* @brief Gets the value of alarm time previously set from cenrep.
		* @param aAlarmInfo Filled up with the default alarm info details.
		*/
        void GetPreviousAlarmTimeL( SClkAlarmInfo& aAlarmInfo );
        
        /**
        * @brief Sets the previous alarm time value in cenrep
        * @param aTime The previous alarm time value. 
        */
        void SetPreviousAlarmTimeL( TTime& aTime );
        
        /**
        * @brief Checks if DST changes will be applied in the next 24 hours.
        * @return TBool ETrue if remaining time note has to be displayed.
        */
        TBool CheckForDstChangesL();
        
        /**
        * @brief Displays the remaining time for the alarm to expire.
        */
        void DisplayRemainingTimeL();
        
    private:            // Functions from base classes.
        
		/**
		* @brief From CEikEdwin. Handles the Navigation on the editor control.
		* @param aEdwin The editor in context.
		* @param aEventType The type of event to be handled. 
		*/
        void HandleEdwinEventL( CEikEdwin* aEdwin, TEdwinEvent aEventType );
                
        /**
		* @brief From CCoeControl. Handles key events.
		* @param aKeyEvent The key event.
		* @param aEventCode The event code.
		* @return TKeyResponse The key response.
		*/
        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
                                     TEventCode aType );
                    
	
        
		/**
		* @brief From CCoeControl. Takes necessary changes when control changes from one line to other.
		* @param aControlId The new control line that is focused.
		*/
        void LineChangedL( TInt aControlId );

		//Single click integration
        /**
        * @brief From CEikDialog. Handles state change events from popup fields
        * @param aControlId The control that sent event EEventStateChanged 
        */
        void HandleControlStateChangeL( TInt aControlId );
		/**
        * @brief CurrentValueTextLC from base class        
        */
        virtual HBufC* CurrentValueTextLC(){};
        
    private:            // Data
        
		/**
		* @var iObserver
		* @brief The observer of the alarm information.
		*/
        MClkAlarmInfoObserver*          iObserver;
        
		/**
		* @var iViewId;
		* @brief The id of the view.
		*/
        TUid                            iViewId;
        
		/**
		* @var iAlarmForEditing
		* @brief ETrue if alarm is opened for editing.
		*/
        TBool                           iAlarmForEditing;
        
		/**
		* @var iAlarmInfo
		* @brief The alarm information.
		*/
        SClkAlarmInfo                   iAlarmInfo;
       
        
		/**
		* @var iAlarmId
		* @brief The shared alarm object.
		*/
        TAlarmId&						iAlarmId;
        
		/**
		* @var iOccuranceIndex
		* @brief This indicates the repeat type of the alarm.
		*/
        TInt                            iOccuranceIndex;
        
		/**
		* @var iDayIndex
		* @brief This has the index of the day selected by the user.
		*/
        TInt                            iDayIndex;
        
		/**
		* @var iSelectedControl
		* @brief The index of the control that is selected.
		*/
        TInt                            iSelectedControl;
        
		/**
		* @var iShowAlarmDayControl
		* @brief This indicates wheather the alarm day popup item should be displayed or not.
		*/
        TBool                           iShowAlarmDayControl;
        

		/**
		* @var iOffset
		* @brief The offset of the resource loaded in the memory.
		*/
		TInt							iOffset;
		
		/**
		* @var iAlarmSrvSes
		* @brief Object of alarm server session.
		*/
		RASCliSession                   iAlarmSrvSes;
		CAknQueryValueTextArray*        iAlmDayFieldTextArray;
		CAknQueryValueText*             iAlmDayFieldTextValue;
	};

#endif 			// __CLOCK_ALARMEDITORIMPL_H__

// End of file