--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/inc/calenstatetable.h Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2007 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: Calendar controller
+*
+*/
+
+
+#ifndef CALENSTATES_H
+#define CALENSTATES_H
+
+// INCLUDES
+#include <e32base.h>
+#include <calencommands.hrh>
+#include <calennotificationhandler.h> // TCalenNotification
+
+// ENUMERATIONS
+// Enumeration of the various possible states that the controller can be
+// be in.
+enum TControllerState
+ {
+ EIdle = 1 << 0,
+ EWaitingForInstanceView = 1 << 1,
+ EWaitingForEntryView = 1 << 2,
+ EConstructingNativeViews = 1 << 3,
+ EConstructingPlugins = 1 << 4,
+ EExiting = 1 << 5,
+
+ ESending = 1 << 6,
+ EDeleting = 1 << 7,
+ EEditing = 1 << 8,
+ EViewing = 1 << 9,
+ ESaving = 1 << 10,
+ EPrinting = 1 << 11,
+ EDisplayingSettings = 1 << 12,
+ EDisplayingHelp = 1 << 13
+ };
+
+
+// Each command has an associated state table entry, ( which is a structure
+// than a class in order for it to be used as elements within a constant
+// array by removing the need for a constructor). The state table entry
+// contains details of what states it is valid to call the command in,
+// what the state should be changed to as the command is processed, and
+// what notifications will revert the controller to its previous state if
+// applicable.
+struct TStateTableEntry
+ {
+ // Bit field for what states the command it is valid to call the command
+ TInt iValidStates;
+
+ // The state the contoller should be placed in after the command is called
+ TControllerState iNextState;
+
+ // Bit field containing the notifications that will move the contoller to
+ // its previous state if applicable.
+ TInt iCompleteNotification;
+ };
+
+// CONSTANTS
+
+// Bitmask to represent any notifications
+const TInt KAnyCalenNotification = -1;
+
+const TInt KCalenNoNotification = 0;
+
+// Bitmask representing the four notifications that
+// may be received when the editor is closed.
+const TInt KCalenEditorClosedNotification = ECalenNotifyEntrySaved
+ | ECalenNotifyEntryDeleted
+ | ECalenNotifyInstanceDeleted
+ | ECalenNotifyEntryClosed;
+
+// Bitmask represents completion of a delete command
+const TInt KCalenDeleteComplete = ECalenNotifyEntryDeleted
+ | ECalenNotifyDeleteFailed
+ | ECalenNotifyMultipleEntriesDeleted;
+
+
+// State table entry that represents the controllers idle state
+const TStateTableEntry KControllerIdleState
+ = { EIdle, EIdle, KCalenNoNotification};
+
+// State table entry representing the controller state when the entry view is
+// being created asyncronously.
+const TStateTableEntry KControllerWaitingForEntryView
+ = { EIdle, EWaitingForEntryView, ECalenNotifyViewCreated };
+
+// State table entry representing the controller state when the instance view is
+// being created asyncronously.
+const TStateTableEntry KControllerWaitingForInstanceView
+ = { EIdle, EWaitingForInstanceView, ECalenNotifyViewCreated };
+
+const TInt KCalenLaunchEditorStates
+ = EIdle | EWaitingForInstanceView | EWaitingForEntryView;
+
+// State lookup table for view manager commands
+// It is assumed that all view commands return immediately, therefore they will not
+// change the state of the controller.
+const TStateTableEntry KStateTable[] =
+ {
+ /* ECalenMonthView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenWeekView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenDayView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenTodoView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenForwardsToDayView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenNextView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenPrevView */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenCancelViewCycling */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenShowToolbar */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenHideToolbar */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenUpdateToolbar */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenStartActiveStep */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenGotoToday */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenGotoDate */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ // State lookup table for edit ui commands
+
+ /* ECalenNewMeeting */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewTodo */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewAnniv */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewDayNote */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewReminder */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewMeetingRequest */
+ { KCalenLaunchEditorStates, EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenNewEntry */
+ { KCalenLaunchEditorStates , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenEditCurrentEntry */
+ { EIdle , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenEditSeries */
+ { EIdle , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenEditOccurrence */
+ { EIdle , EEditing, KCalenEditorClosedNotification },
+
+ /* ECalenViewCurrentEntry */
+ { EIdle , EViewing, KCalenEditorClosedNotification },
+
+ /* ECalenNotifyFocusChange */
+ { EIdle , EIdle, KCalenNoNotification },
+
+ /* ECalenCompleteTodo */
+ { EIdle , EIdle, ECalenNotifyEntrySaved | ECalenNotifyCommandFailed },
+
+ /* ECalenRestoreTodo */
+ { EIdle , EIdle, ECalenNotifyEntrySaved | ECalenNotifyCommandFailed },
+
+ /* ECalenSend */
+ { EIdle | EViewing | EEditing, ESending, KAnyCalenNotification },
+
+ // State lookup table for delete Ui commands
+
+ /* ECalenDeleteCurrentEntry */
+ { EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteEntryWithoutQuery */
+ { EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteSeries */
+ { EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteOccurrence */
+ { EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteSingleInstance */
+ {EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteSingleInstanceWithRepeatType */
+ { EIdle | EViewing | EEditing , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteAllEntries */
+ { EIdle , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenDeleteEntriesBeforeDate */
+ { EIdle , EDeleting, KCalenDeleteComplete },
+
+ /* ECalenShowSettings */
+ { EIdle , EDisplayingSettings, ECalenNotifySettingsClosed }
+ };
+
+// The number of commands in each of the state tables can be calculated from the size of the
+// table at compilation.
+const TInt KNumberCommands = sizeof( KStateTable ) / sizeof( TStateTableEntry );
+
+// A TFixedArray wrapper class has been typedef'ed for the four
+// lookup tables for out of bounds safety and readablity of
+// the code.
+typedef TFixedArray< TStateTableEntry, KNumberCommands > TStateTable;
+
+#endif // CALENCONTROLLERSTATES_H
+
+// End of file
+