calendarui/editors/inc/CalenEntryUpdater.h
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 16:01:09 +0000
branchRCL_3
changeset 93 d216ae5a8733
parent 0 f979ecb2b13e
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2002 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:  ?Description
 *
*/


#ifndef __CALENEDITEDENTRY_H__
#define __CALENEDITEDENTRY_H__

#include <e32base.h>
#include <calcommon.h>
#include <calprogresscallback.h>
#include <caleninstanceid.h>

class CCalEntry;
class CCalInstance;
class TCalTime;
class TCalRRule;
class CCalEntryView;
class CCalInstanceView;
class MCalenServices;

/**
 * CCalenEntryUpdater provides method to store, update and delete 
 * whole entry or single instance for Calendar editors.
 */ 
NONSHARABLE_CLASS( CCalenEntryUpdater ) : 
    public CBase
    {
public: // constructors and destructors
    static CCalenEntryUpdater* NewL( MCalenServices& aServices ,RArray<TInt>& aCollectionIds);
    
    /**
     * @brief destructors
     */
    virtual ~CCalenEntryUpdater();

public: // Own methods
    
    /**
     * @brief to update entry with new values
     */
    void UpdateInstanceL( CCalEntry& aEditedEntry,
                          CCalEntry& aOrigEntry,
                          const TCalTime& aOrigInstanceDate,
                          CalCommon::TRecurrenceRange aWhichInstances,
                          const TCalTime& aNewInstanceStartDate,
                          const TCalTime& aNewInstanceEndDate,
                          const TDesC& aFileName );

    /**
     * @brief To delete the entry
     * @param aEntry, to be deleted
     * @param aInstanceId
     */
    void DeleteEntryL( CCalEntry& aEntry, TCalenInstanceId aInstanceId );
    
    /**
     * @brief To delete the instance
     * @param aEntry
     * @param aInstanceId
     */    
    void DeleteInstanceL( CCalEntry& aEntry, TCalenInstanceId aInstanceId );

    /**
     * @brief Attempt to delete the entry, using CCalenCommonUI to prompt the 
     *        user whether to delete the entire series or just the instance.
     * @param aEntry
     * @param aInstanceDate
     * @param aServices
     */
    void TryDeleteInstanceWithUiL( CCalEntry& aEntry, 
                                               const TCalTime& aInstanceDate,
                                               MCalenServices& aServices );
    
    /**
     * @brief Attempt to delete the entry, using CCalenCommonUI. Only delete 
     *        the entry using the repeat type defined in aRepeatType.
     * @param aEntry 
     * @param aInstanceDate
     * @param aRepeatType
     * @param aServices       
     */
    void TryDeleteInstanceWithUiL( CCalEntry& aEntry,
                                    const TCalTime& aInstanceDate,
                                    CalCommon::TRecurrenceRange aRepeatType,
                                    MCalenServices& aServices );

private: 
    
    /**
     * @brief To find the instance of the entry
     * @return The index into aInstances of the instance with the same 
     *         UID as aEntry, at the same date/time as aInstanceDate, or return
     *         KErrNotFound if no match found.
     * @param aEntry 
     * @param aInstanceDate, of the entry instance
     * @param aInstances, Array of instances of the entry        
     */
    TInt FindInstanceL( CCalEntry& aEntry,
                        const TCalTime& aInstanceDate, 
                        RPointerArray<CCalInstance>& aInstances);
    
    /**
     * @brief Updates the RDates and Exception dates of the given entry.
     * @param aEditedEntry
     * @param aOrigEntry to which new RDates and Exception dates should updated
     * @param aOrigInstanceDate
     */
    void UpdateRDatesL( CCalEntry& aEditedEntry, CCalEntry& aOrigEntry,
                        const TCalTime& aOrigInstanceDate );
    
    /**
     * @brief Compares two rrules for differences
     * @param aEditedRule
     * @param aOrigRule
     */
    TBool TypeOrIntervalChangedL( const TCalRRule& aEditedRule, 
                                  const TCalRRule& aOrigRule ) const;
    
    /**
     * @brief If aHasRepeatType is ETrue, use aRepeatType to determine whether to 
     *        delete the entire series or just the instance. If aHasRepeatType is
     *        EFalse, aRepeatType is ignored and the user is prompted to choose.
     */
    void DoTryDeleteInstanceWithUiL( CCalEntry& aEntry,
                                      const TCalTime& aInstanceDate,
                                      TBool aHasRepeatType,
                                      CalCommon::TRecurrenceRange aRepeatType,
                                      MCalenServices& aServices );
                                      
    CCalEntryView&  EntryViewL(TInt colId = -1);
    
    /**
     * @brief Get CalInstanceView from services 
     */
    CCalInstanceView&  InstanceViewL();

private: // constructors
    /**
     * @brief default constructor
     */
    CCalenEntryUpdater( MCalenServices& aServices , RArray<TInt>& aCollectionIds);
    
    /**
     * @brief Two-phase constructor
     */
    void ConstructL(); 
    
private: // data
    
    /**
     * @var iServices
     * @brief referance to MCalenServices
     */
    MCalenServices& iServices; // Not owned, don't release here.
    
    /*
     * @var collection id referance from unified editor
     */
    RArray<TInt>& iCollectionIds;
    };

#endif // __CALENEDITEDENTRY_H__

// End of File