--- a/alarmengines/missedalarmstore/rom/missedalarmstore.iby Tue May 11 16:12:24 2010 +0300
+++ b/alarmengines/missedalarmstore/rom/missedalarmstore.iby Tue May 25 12:41:10 2010 +0300
@@ -23,8 +23,6 @@
file=ABI_DIR\BUILD_DIR\missedalarmstore.dll SHARED_LIB_DIR\missedalarmstore.dll
-data = DATAZ_\private\10202be9\2001111B.txt Private\10202be9\2001111B.txt
-
#endif // MISSEDALARMSTORE_IBY
--- a/alarmui/group/AknAlarmService.mmp Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/group/AknAlarmService.mmp Tue May 25 12:41:10 2010 +0300
@@ -88,6 +88,9 @@
LIBRARY remconextensionapi.lib
LIBRARY platformenv.lib
LIBRARY featmgr.lib
+LIBRARY ws32.lib
+
+
//MPIN-73VCR2
// For cover display support:
LIBRARY eikdlg.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/group/alarmui_silence.rul Tue May 25 12:41:10 2010 +0300
@@ -0,0 +1,23 @@
+<script xmlns="http://www.nokia.com/ns/cep/script/1.0/" xmlns:cep="http://www.nokia.com/ns/cep/1.0/">
+ <!-- If alarm is not active, nothing needs to be done -->
+ <if>
+ <equals>
+ <contextRef source='Alarm' type='Status.Active' value='false'/>
+ </equals>
+ <actions>
+ <!-- Do nothing -->
+ </actions>
+ </if>
+
+ <!-- Silence alarm if 'silence' command is received -->
+ <elseIf>
+ <!-- ...and we got a new stop command -->
+ <contextUpdated>
+ <contextRef source='AlarmUI' type='Command' value='Silence'/>
+ </contextUpdated>
+ <actions>
+ <!-- silence the alarm -->
+ <AlarmUI.Silence/>
+ </actions>
+ </elseIf>
+</script>
\ No newline at end of file
--- a/alarmui/group/alarmui_snooze.rul Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/group/alarmui_snooze.rul Tue May 25 12:41:10 2010 +0300
@@ -11,9 +11,26 @@
<!-- Snooze alarm when device is turned upside down -->
<elseIf>
- <contextChanged>
- <contextRef source='Sensor' type='Event.Orientation' value='DisplayDownwards'/>
- </contextChanged>
+ <and>
+ <!-- Check that turning interaction is set -->
+ <equals>
+ <contextRef source='Sensor' type='Setting.TurningInteraction.SilenceAlarm'/>
+ <string>On</string>
+ </equals>
+ <!-- ...and previous orientation is not 'Undefined' ... -->
+ <notEqual>
+ <contextRef source='Sensor' type='Event.Orientation.Previous'/>
+ <string>Undefined</string>
+ </notEqual>
+ <!-- ...and we receive a new orientation event from sensors... -->
+ <contextChanged>
+ <contextRef source='Sensor' type='Event.Orientation'/>
+ </contextChanged>
+ <equals>
+ <contextRef source='Sensor' type='Event.Orientation'/>
+ <string>DisplayDownwards</string>
+ </equals>
+ </and>
<actions>
<!-- snooze the alarm -->
<AlarmUI.Snooze/>
--- a/alarmui/group/bld.inf Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/group/bld.inf Tue May 25 12:41:10 2010 +0300
@@ -42,6 +42,9 @@
alarmui_stop.rul /epoc32/release/winscw/udeb/z/private/10282bc4/rules/alarmui_stop.rul
alarmui_stop.rul /epoc32/release/winscw/urel/z/private/10282bc4/rules/alarmui_stop.rul
alarmui_stop.rul /epoc32/data/z/private/10282bc4/rules/alarmui_stop.rul
+alarmui_silence.rul /epoc32/data/z/private/10282bc4/rules/alarmui_silence.rul
+alarmui_silence.rul /epoc32/release/winscw/urel/z/private/10282bc4/rules/alarmui_silence.rul
+alarmui_silence.rul /epoc32/release/winscw/udeb/z/private/10282bc4/rules/alarmui_silence.rul
// alarm tones
--- a/alarmui/inc/AlmAlarmControl.h Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/inc/AlmAlarmControl.h Tue May 25 12:41:10 2010 +0300
@@ -105,6 +105,11 @@
* @since 5.0
**/
TBool CanSnooze();
+ /**
+ * Returns handle to alarmutils
+ * @since TB9.2
+ **/
+ CAlarmUtils* AlarmUtils() const;
private: // New functions
/**
* Alarm UI Panic.
--- a/alarmui/inc/alarmcontextfwsupport.h Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/inc/alarmcontextfwsupport.h Tue May 25 12:41:10 2010 +0300
@@ -201,7 +201,13 @@
* @since S60 5.0
*/
void PublishAlarmResultL(const TAlarmSourceResultValues aResult);
-
+
+private: // methods
+ /**
+ *
+ * @since TB9.2
+ */
+ void SilenceAlarm();
private: // constructors
/**
--- a/alarmui/inc/alarmsourcecontextdef.h Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/inc/alarmsourcecontextdef.h Tue May 25 12:41:10 2010 +0300
@@ -88,14 +88,18 @@
_S( "Stop" ),
// command to snooze an active alarm
- _S( "Snooze" )
+ _S( "Snooze" ),
+
+ // command to silence an active alarm
+ _S( "Silence" )
};
// Enumerations for accessing values array
enum TAlarmSourceCommandValues
{
ECommandAlarmStop,
- ECommandAlarmSnooze
+ ECommandAlarmSnooze,
+ ECommandAlarmSilence
};
//-----------------------------------------------------------------------------
@@ -157,6 +161,9 @@
// stop the active alarm
_S( "AlarmUI.Stop" ),
+ // stop the active alarm
+ _S( "AlarmUI.Silence" ),
+
// print a debug string
_S( "AlarmUI.Debug" )
@@ -167,6 +174,7 @@
{
EActionSnooze,
EActionStop,
+ EActionSilence,
EDebug
};
--- a/alarmui/inc/alarmutils.h Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/inc/alarmutils.h Tue May 25 12:41:10 2010 +0300
@@ -260,7 +260,11 @@
* @since S60 3.2
**/
void DoSnooze();
-
+ /**
+ * Silence the active alarm.
+ * @since tb9.2
+ **/
+ void DoSilence();
/**
* Checks if this alarm can be shown in "alarm" or in "charging" state.
* @since S60 3.2
--- a/alarmui/rom/AlmAlert.iby Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/rom/AlmAlert.iby Tue May 25 12:41:10 2010 +0300
@@ -40,6 +40,7 @@
data=\epoc32\data\Z\private\10282BC4\Rules\alarmui_snooze.rul private\10282BC4\Rules\alarmui_snooze.rul
data=\epoc32\data\Z\private\10282BC4\Rules\alarmui_activate.rul private\10282BC4\Rules\alarmui_activate.rul
data=\epoc32\data\Z\private\10282BC4\Rules\alarmui_stop.rul private\10282BC4\Rules\alarmui_stop.rul
+data=\epoc32\data\Z\private\10282BC4\Rules\alarmui_silence.rul private\10282BC4\Rules\alarmui_silence.rul
#endif // RD_CONTEXT_FRAMEWORK
--- a/alarmui/sis/alarmui.pkg Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/sis/alarmui.pkg Tue May 25 12:41:10 2010 +0300
@@ -33,7 +33,11 @@
"\epoc32\release\armv5\urel\AlmAlert.dll" - "!:\sys\bin\AlmAlert.dll"
"\epoc32\release\armv5\urel\AknAlarmService.dll" - "!:\sys\bin\AknAlarmService.dll"
-"\epoc32\data\Z\private\10282BC4\Rules\alarmuisnooze.rul" - "!:\private\10282BC4\Rules\alarmuisnooze.rul"
+"\epoc32\data\Z\private\10282BC4\Rules\alarmui_snooze.rul" - "!:\private\10282BC4\Rules\alarmui_snooze.rul"
+"\epoc32\data\Z\private\10282BC4\Rules\alarmui_stop.rul" - "!:\private\10282BC4\Rules\alarmui_stop.rul"
+"\epoc32\data\Z\private\10282BC4\Rules\alarmui_activate.rul" - "!:\private\10282BC4\Rules\alarmui_activate.rul"
+"\epoc32\data\Z\private\10282BC4\Rules\alarmui_silence.rul" - "!:\private\10282BC4\Rules\alarmui_silence.rul"
+
"\epoc32\data\z\resource\AlmAlert.rsc" - "!:\resource\AlmAlert.rsc"
"\epoc32\data\z\resource\AlmAlert.r01" - "!:\resource\AlmAlert.r01"
--- a/alarmui/src/AlmAlarmControl.cpp Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/src/AlmAlarmControl.cpp Tue May 25 12:41:10 2010 +0300
@@ -1323,4 +1323,9 @@
return iStopFromContextFw;
}
-// End of File
+ CAlarmUtils* CAlmAlarmControl::AlarmUtils() const
+ {
+ return iAlarmUtils;
+ }
+ // End of File
+
--- a/alarmui/src/alarmcontextfwsupport.cpp Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/src/alarmcontextfwsupport.cpp Tue May 25 12:41:10 2010 +0300
@@ -32,6 +32,7 @@
// USER INCLUDE
#include "alarmcontextfwsupport.h"
#include "AlmAlarmControl.h"
+#include "alarmutils.h"
#include "pim_trace.h"
@@ -87,9 +88,11 @@
{
// snooze alarm
if(iAlarmControl->CanSnooze())
- {
- iAlarmControl->ExternalSnoozeAlarm();
- }
+ iAlarmControl->ExternalSnoozeAlarm();
+ }
+ else if( contextObject.Value() == TPtrC( KAlarmUISourceCommandValues[ECommandAlarmSilence] ) )
+ {
+ SilenceAlarm();
}
else
{
@@ -114,9 +117,13 @@
if( aActionToExecute.Identifier() == TPtrC( KAlarmUIActions[EActionSnooze] ) )
{
// snooze the alarm
- if(iAlarmControl->CanSnooze())
- iAlarmControl->ExternalSnoozeAlarm();
+ if(iAlarmControl->CanSnooze())
+ iAlarmControl->ExternalSnoozeAlarm();
}
+ else if( aActionToExecute.Identifier() == TPtrC( KAlarmUIActions[EActionSilence] ) )
+ {
+ SilenceAlarm();
+ }
else if( aActionToExecute.Identifier() == TPtrC( KAlarmUIActions[EActionStop] ) )
{
//Do not stop the alarm internally but force the user to stop the alarm manually.
@@ -183,6 +190,7 @@
// define actions(s)
DefineActionL( EActionSnooze );
+ DefineActionL( EActionSilence );
//Stop action definition should not be defined as the alarm component should not automatically stop the alarm on observing context events
// but continue to expire the alarm and force the user to manually stop the alarm
@@ -299,6 +307,7 @@
// subscribe for action(s)
SubscribeActionL( EActionSnooze );
+ SubscribeActionL( EActionSilence );
//Subscription to stop action definition from the context events should not be defined as the alarm component should not automatically stop the alarm on observing context events
// but continue to expire the alarm and force the user to manually stop the alarm
@@ -451,5 +460,11 @@
TRACE_EXIT_POINT;
}
-
+void CAlarmContextFwSupport::SilenceAlarm()
+ {
+ if( iAlarmControl->AlarmUtils() )
+ {
+ iAlarmControl->AlarmUtils()->DoSilence();
+ }
+ }
// End of File
--- a/alarmui/src/alarmutils.cpp Tue May 11 16:12:24 2010 +0300
+++ b/alarmui/src/alarmutils.cpp Tue May 25 12:41:10 2010 +0300
@@ -32,6 +32,7 @@
#include "alarmcontextfwsupport.h"
#endif // RD_ALMALERT__SENSOR_SUPPORT
+#include <w32std.h>
#include <almconst.h>
#include <eikenv.h>
#include <AknCapServer.h>
@@ -1668,4 +1669,51 @@
return iCalendarAlarmViewer;
}
+// ---------------------------------------------------------
+// Silence the notifying alarm
+// ---------------------------------------------------------
+//
+void CAlarmUtils::DoSilence()
+ {
+ TRACE_ENTRY_POINT;
+
+ // silence only if snoozing is possible
+ // this way user must hear the last "call"
+ if( CanSnooze() )
+ {
+ delete iAlarmPlayer;
+ iAlarmPlayer = NULL;
+ SetBackLight( EFalse );
+
+ if( IsCalendarAlarm() )
+ {
+
+ // calendar alarm needs extra handling due to having stop - silence
+ //simulate right softkey pressing
+ RWsSession wsSession=CCoeEnv::Static()->WsSession();
+ TKeyEvent keyEvent;
+ keyEvent.iCode = EKeyCBA2;
+ keyEvent.iScanCode = EStdKeyDevice1;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 0;
+ wsSession.SimulateKeyEvent( keyEvent );
+ wsSession.Flush();
+ }
+ // clockalarm
+ else
+ {
+ StartAutoSnoozeTimer();
+ }
+
+ #if defined( RD_ALMALERT__SENSOR_SUPPORT )
+ // notify the result through the context framework
+ if( iCFSupport )
+ {
+ PIM_TRAPD_ASSERT( iCFSupport->PublishAlarmResultL( EResultAlarmSilenced ); )
+ }
+ #endif // RD_ALMALERT__SENSOR_SUPPORT
+ }
+ TRACE_EXIT_POINT;
+ }
+
// End of File
--- a/calendarui/controller/inc/calenviewmanager.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/inc/calenviewmanager.h Tue May 25 12:41:10 2010 +0300
@@ -205,6 +205,12 @@
*/
void ActivateViewOnFakeExitL(TUid aDefView);
+ /**
+ * Activate the local view if application already in back ground
+ * @param aDefView current default view which needs to be activated.
+ */
+ void ActivateLocalViewL(TUid aDefView);
+
private: // New functions
/**
--- a/calendarui/controller/src/calenattachmentui.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calenattachmentui.cpp Tue May 25 12:41:10 2010 +0300
@@ -441,6 +441,7 @@
if( KErrNone != err )
{
// if any error in opening file then return EFalse
+ CleanupStack::PopAndDestroy(filename);
return EFalse;
}
@@ -673,9 +674,17 @@
attachment->SetMimeTypeL(attachmentInfo->DataType().Des8());
entry->AddAttachmentL(*attachment);
CleanupStack::Pop(attachment);
- }
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(data);
+ }
}
- CleanupStack::PopAndDestroy(&fileHandle);
+ else
+ {
+ CleanupStack::PopAndDestroy(data);
+ }
+ CleanupStack::PopAndDestroy(&fileHandle);
}
}
@@ -845,11 +854,11 @@
{
aProtection = ETrue;
- //DRM protected file: can't attach the DRM protected file
- CAknInformationNote* note = new ( ELeave ) CAknInformationNote(ETrue);
+ //DRM protected file: can't attach the DRM protected file
HBufC* cannotAttach = StringLoader::LoadLC(
R_QTN_CALEN_INFO_CANNOT_OPEN, CCoeEnv::Static() );
- note->ExecuteLD( *cannotAttach );
+ CAknInformationNote* note = new ( ELeave ) CAknInformationNote(ETrue);
+ note->ExecuteLD( *cannotAttach );
CleanupStack::PopAndDestroy( cannotAttach );
}
else
--- a/calendarui/controller/src/calenbackgroundstate.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calenbackgroundstate.cpp Tue May 25 12:41:10 2010 +0300
@@ -102,6 +102,9 @@
switch( cmd )
{
case ECalenDayView:
+ case ECalenTodoView:
+ case ECalenMonthView:
+ case ECalenWeekView:
SetCurrentState(aStateMachine,CCalenStateMachine::ECalenIdleState);
cmdUsed = ETrue;
break;
--- a/calendarui/controller/src/calencmdlinelauncher.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calencmdlinelauncher.cpp Tue May 25 12:41:10 2010 +0300
@@ -262,9 +262,11 @@
}
else
{
- iController.ViewManager().ActivateDefaultViewL( viewUid );
- }
-
+ iController.ViewManager().ActivateDefaultViewL( viewUid );
+ // Comment the following line when the the calendar.exe file is removed
+ // from the startup list.
+ iController.ViewManager().ActivateLocalViewL(viewUid);
+ }
}
break;
--- a/calendarui/controller/src/calenlocationui.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calenlocationui.cpp Tue May 25 12:41:10 2010 +0300
@@ -77,6 +77,15 @@
CCalenLocationUi::~CCalenLocationUi()
{
TRACE_ENTRY_POINT;
+ if(iMapView)
+ {
+ iMapView->Cancel();
+ iMapView->ResetLandmarksToShow();
+ delete iMapView;
+ iMapView = NULL;
+ }
+ ReleaseLandmarkResources();
+
if(iLocationSelector)
{
delete iLocationSelector;
@@ -252,6 +261,16 @@
case ECalenNotifyCancelMapLaunch:
{
// Cancel any pending async requests
+
+ if(iMapView)
+ {
+ iMapView->Cancel();
+ iMapView->ResetLandmarksToShow();
+ delete iMapView;
+ iMapView = NULL;
+ }
+ ReleaseLandmarkResources();
+
iLocationSelector->DoCancel();
if(iProvider)
{
--- a/calendarui/controller/src/calenmultipledbui.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calenmultipledbui.cpp Tue May 25 12:41:10 2010 +0300
@@ -770,7 +770,7 @@
keyBuff.Zero();
keyBuff.AppendNum( ESyncStatus );
TPckgC<TBool> pckgSyncStatusValue(syncstatus);
- pckgSyncStatusValue.Set(iCalendarInfoEdited->PropertyValueL( keyBuff ));
+ TRAP_IGNORE(pckgSyncStatusValue.Set(iCalendarInfoEdited->PropertyValueL( keyBuff )));
iCalendarInfoOriginal->SetPropertyL( keyBuff, pckgSyncStatusValue );
iDbEditor = CCalenMultiDBEditor::NewL(*this,*iCalendarInfoEdited, iController,
@@ -875,7 +875,7 @@
TPckgC<TBool> pckgSyncStatusValueOriginal(syncstatusOriginal);
pckgSyncStatusValueOriginal.Set(aCalendarInfoOriginal.PropertyValueL( keyBuff ));
TPckgC<TBool> pckgSyncStatusValueModified(syncstatusModified);
- pckgSyncStatusValueModified.Set(aCalendarInfoModified.PropertyValueL( keyBuff ));
+ TRAP_IGNORE(pckgSyncStatusValueModified.Set(aCalendarInfoModified.PropertyValueL( keyBuff )));
syncstatusOriginal = pckgSyncStatusValueOriginal();
syncstatusModified = pckgSyncStatusValueModified();
if (editedName->Compare(aCalendarInfoOriginal.NameL())
--- a/calendarui/controller/src/calenviewmanager.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/controller/src/calenviewmanager.cpp Tue May 25 12:41:10 2010 +0300
@@ -540,6 +540,10 @@
iPreviousToDayView.iViewUid = KNullUid;
}
RequestActivationL( KUidCalenDayView, KCalenDummyUid, KNullDesC8() );
+ if(iController.IsLaunchFromExternalApp())
+ {
+ iAvoidRepopulation = ETrue;
+ }
}
break;
case ECalenTodoView:
@@ -1797,4 +1801,13 @@
TRACE_EXIT_POINT;
}
+
+// -----------------------------------------------------------------------------
+// CCalenViewManager::ActivateLocalViewL
+// Activate the local view if application already in back ground
+// -----------------------------------------------------------------------------
+void CCalenViewManager::ActivateLocalViewL(TUid aDefView)
+ {
+ iAppUi.ActivateLocalViewL( aDefView );
+ }
// End of file
--- a/calendarui/editors/inc/calenunifiededitor.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/editors/inc/calenunifiededitor.h Tue May 25 12:41:10 2010 +0300
@@ -356,6 +356,11 @@
public:
/**
+ * @brief Gets the iServices reference.
+ */
+ MCalenServices& GetServices();
+
+ /**
* @brief Inserts dialog line (form field) defined by aResourceId
* and aControlId after existing dialog line aPrevControlId.
* @resourceId dialog line resource
--- a/calendarui/editors/src/calendbfield.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/editors/src/calendbfield.cpp Tue May 25 12:41:10 2010 +0300
@@ -304,7 +304,16 @@
RPointerArray<CCalCalendarInfo> calendarInfoList;
iServices->GetAllCalendarInfoL(calendarInfoList);
CleanupClosePushL( calendarInfoList );
- TInt pos = iDbNamesTextValues->CurrentValueIndex();
+ TInt pos;
+ if( calendarInfoList.Count() == 1 )
+ {
+ pos = 0;
+ }
+ else
+ {
+ pos = iDbNamesTextValues->CurrentValueIndex();
+ }
+
HBufC* calendarFileName = calendarInfoList[pos]->FileNameL().AllocLC();
iCurrentColId = iServices->SessionL(*calendarFileName).CollectionIdL();
CleanupStack::PopAndDestroy(calendarFileName);
--- a/calendarui/editors/src/calenunifiededitor.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/editors/src/calenunifiededitor.cpp Tue May 25 12:41:10 2010 +0300
@@ -1285,8 +1285,7 @@
aMenuPane->AddMenuItemsL( R_CALEN_UNIFIED_EDITOR_DEFAULT_MENUPANE );
- if( ( ctrlid != ECalenEditorPlace ) ||
- ( !CCalenLocationUtil::IsMapProviderAvailableL() ) )
+ if( !CCalenLocationUtil::IsMapProviderAvailableL() )
{
aMenuPane->DeleteMenuItem( ECalenGetLocation );
}
@@ -2599,7 +2598,8 @@
void CCalenUnifiedEditor::UpdateLocationInfoToFormL()
{
TRACE_ENTRY_POINT;
-
+ // set the focus to location field as the address is inserted/updated to location field.
+ TryChangeFocusToL(ECalenEditorPlace);
// Get location details from context
MCalenContext& context = iServices->Context();
CPosLandmark* landmark = context.GetLandMark();
@@ -3274,6 +3274,16 @@
Edited().AttachmentNamesL(aAttachmentNames);
}
}
+
+// -----------------------------------------------------------------------------
+// CCalenUnifiedEditor::GetServices
+// Gets services reference
+// -----------------------------------------------------------------------------
+//
+MCalenServices& CCalenUnifiedEditor::GetServices()
+ {
+ return *iServices;
+ }
// -----------------------------------------------------------------------------
// CMapsIconPicture::CMapsIconPicture
--- a/calendarui/editors/src/calenunifiededitorcontrol.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/editors/src/calenunifiededitorcontrol.cpp Tue May 25 12:41:10 2010 +0300
@@ -329,7 +329,15 @@
iRepeatField->InitRepetFieldLayoutL();
}
- iDbField->InitDbFieldLayoutL();
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iUnifiedEditor.GetServices().GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL( calendarInfoList );
+ if( calendarInfoList.Count() > 1 )
+ {
+ iDbField->InitDbFieldLayoutL();
+ }
+ CleanupStack::PopAndDestroy( &calendarInfoList );
+
iDescription->InitDescritpionFieldLayoutL();
TRACE_EXIT_POINT;
@@ -344,10 +352,27 @@
{
TRACE_ENTRY_POINT;
// event type, subject, date & year,more details
-
- iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
- ECalenEditorStartDate, ECalenEditorSubject );
+
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iUnifiedEditor.GetServices().GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL( calendarInfoList );
+
+ if( calendarInfoList.Count() > 1 )
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ ECalenEditorDBName, ECalenEditorSubject );
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
+ ECalenEditorStartDate, ECalenEditorDBName );
+ }
+ else
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
+ ECalenEditorStartDate, ECalenEditorSubject );
+ }
+
+ CleanupStack::PopAndDestroy( &calendarInfoList );
+
// "Start Date" Label should be "Date of Birth" for Birthday
iUnifiedEditor.SetControlCaptionL( ECalenEditorStartDate,
R_QTN_CALEN_EDITOR_DATE_OF_BIRTH );
@@ -359,13 +384,13 @@
ECalenEditorPlace, ECalenEditorReminder );
/* iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_PEOPLE_ITEM,
ECalenEditorPeople, ECalenEditorPlace );
-*/ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
- ECalenEditorDBName, ECalenEditorPlace );
+*/ /* iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ ECalenEditorDBName, ECalenEditorPlace );*/
// TODO: Uncomment this when enabling attachment support
// Replace ECalenEditorDBName with ECalenEditorAttachment in the next statement
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_ATTACHMENT_ITEM,
- ECalenEditorAttachment, ECalenEditorDBName );
+ ECalenEditorAttachment, ECalenEditorPlace );
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DESCRIPTION_ITEM,
ECalenEditorDescription, ECalenEditorAttachment );
@@ -388,10 +413,26 @@
// all day event
// subject,event type,all day,start date,end date,place,more details
-
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iUnifiedEditor.GetServices().GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL( calendarInfoList );
+
+ if( calendarInfoList.Count() > 1 )
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ ECalenEditorDBName, ECalenEditorSubject );
+
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_ALL_DAY_ITEM,
+ ECalenEditorAllDayItem, ECalenEditorDBName );
+ }
+ else
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_ALL_DAY_ITEM,
ECalenEditorAllDayItem, ECalenEditorSubject );
+ }
+ CleanupStack::PopAndDestroy( &calendarInfoList );
+
if( !iUnifiedEditor.Edited().IsAllDayEvent() )
{
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_TIME_ITEM,
@@ -418,13 +459,13 @@
/*iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_PEOPLE_ITEM,
ECalenEditorPeople, ECalenEditorRepeat );
*/
- iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ /* iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
ECalenEditorDBName, ECalenEditorRepeat );
-
+ */
// TODO: Uncomment this when enabling attachment support
// Replace ECalenEditorDBName with ECalenEditorAttachment in the next statement
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_ATTACHMENT_ITEM,
- ECalenEditorAttachment, ECalenEditorDBName );
+ ECalenEditorAttachment, ECalenEditorRepeat );
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DESCRIPTION_ITEM,
ECalenEditorDescription, ECalenEditorAttachment );
@@ -441,9 +482,25 @@
{
TRACE_ENTRY_POINT;
// event type,subject,due date,more details
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iUnifiedEditor.GetServices().GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL( calendarInfoList );
+
+ if( calendarInfoList.Count() > 1 )
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ ECalenEditorDBName, ECalenEditorSubject );
+
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
+ ECalenEditorStartDate, ECalenEditorDBName );
+ }
+ else
+ {
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
+ ECalenEditorStartDate, ECalenEditorSubject );
+ }
- iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
- ECalenEditorStartDate, ECalenEditorSubject );
+ CleanupStack::PopAndDestroy( &calendarInfoList );
// "Start Date" Label should be "Due date" for To-Do
iUnifiedEditor.SetControlCaptionL( ECalenEditorStartDate,
@@ -455,13 +512,13 @@
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_PRIORITY_ITEM,
ECalenEditorPriority, ECalenEditorReminder );
- iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
- ECalenEditorDBName, ECalenEditorPriority );
+ /*iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DB_NAME_ITEM,
+ ECalenEditorDBName, ECalenEditorPriority );*/
// TODO: Uncomment this when enabling attachment support
// Replace ECalenEditorDBName with ECalenEditorAttachment in the next statement
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_ATTACHMENT_ITEM,
- ECalenEditorAttachment, ECalenEditorDBName );
+ ECalenEditorAttachment, ECalenEditorPriority );
iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_DESCRIPTION_ITEM,
ECalenEditorDescription, ECalenEditorAttachment );
@@ -868,8 +925,11 @@
iUnifiedEditor.DeleteLine( ECalenEditorPeople );
}
*/
- iUnifiedEditor.DeleteLine( ECalenEditorDBName );
-
+ CCoeControl* dbNameCtrl = iUnifiedEditor.ControlOrNull( ECalenEditorDBName );
+ if( dbNameCtrl )
+ {
+ iUnifiedEditor.DeleteLine( ECalenEditorDBName );
+ }
// TODO: Uncomment this when enabling attachment support
iUnifiedEditor.DeleteLine( ECalenEditorAttachment );
@@ -1283,9 +1343,13 @@
case CCalEntry::EAnniv:
{
iUnifiedEditor.DeleteLine( ECalenEditorStartDate, EFalse );
- iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_BIRTHDAY_YEAR_ITEM,
+ iUnifiedEditor.InsertFieldL( R_CALEN_EDITOR_START_DATE_ITEM,
ECalenEditorStartDate, ECalenEditorEventType );
+ // "Start Date" Label should be "Date of Birth" for Birthday
+ iUnifiedEditor.SetControlCaptionL( ECalenEditorStartDate,
+ R_QTN_CALEN_EDITOR_DATE_OF_BIRTH );
+
}
break;
--- a/calendarui/globaldata/group/CalenGlobalData.mmp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/globaldata/group/CalenGlobalData.mmp Tue May 25 12:41:10 2010 +0300
@@ -46,6 +46,7 @@
APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE ../../../inc //organizer include
SYSTEMINCLUDE /epoc32/include/ecom
+SYSTEMINCLUDE ../../../alarmengines/inc
LIBRARY euser.lib
LIBRARY ecom.lib
@@ -69,6 +70,7 @@
LIBRARY lbs.lib
LIBRARY calencommonutils.lib
LIBRARY centralrepository.lib
+LIBRARY missedalarmstore.lib flogger.lib
CAPABILITY CAP_GENERAL_DLL
--- a/calendarui/globaldata/inc/calendbchangenotifier.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/globaldata/inc/calendbchangenotifier.h Tue May 25 12:41:10 2010 +0300
@@ -27,6 +27,7 @@
// FORWARD DECLARATIONS
class CCalSession; //Calendar session
class CCalenGlobalData; //Calendar global data
+class CMissedAlarm;
// CLASS DECLARATION
@@ -126,6 +127,14 @@
* Cancels iNotificationTimer if started
*/
void DoCancel();
+ void HandleMissedAlarmsL(const RArray<TCalChangeEntry>& aChangeItems);
+ class TCalLuidFilename
+ {
+ public:
+ TCalLocalUid iLuid;
+ TFileName iFilename;
+ };
+ static TBool DoFindEntryByLuid(const TCalLuidFilename* aLuidFilename,const CMissedAlarm& aCalendarInfo);
private: // Data
--- a/calendarui/globaldata/src/calendbchangenotifier.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/globaldata/src/calendbchangenotifier.cpp Tue May 25 12:41:10 2010 +0300
@@ -21,9 +21,14 @@
#include "calendarui_debug.h"
// INCLUDE FILES
+#include "CleanupResetAndDestroy.h"
#include "calendbchangenotifier.h" // CCalenDbChangeNotifier
#include "calenglobaldata.h" // Calendar global data
#include <calsession.h> // CalSession
+#include <missedalarm.h>
+#include <missedalarmstore.h>
+#include <missedalarmstorecrkeys.h>
+#include <calcalendarinfo.h>
// -----------------------------------------------------------------------------
// KTimerResolution limits the number of notifications sent to registered
@@ -148,10 +153,11 @@
// to the one we are currently using.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
-void CCalenDbChangeNotifier::CalChangeNotification( RArray<TCalChangeEntry>& /*aChangeItems*/ )
+void CCalenDbChangeNotifier::CalChangeNotification( RArray<TCalChangeEntry>& aChangeItems )
{
TRACE_ENTRY_POINT;
+ TRAP_IGNORE(HandleMissedAlarmsL(aChangeItems));
// Always update the last notification time, even if we don't notify
// our observers
iLastDbChangeNotification.UniversalTime();
@@ -168,6 +174,52 @@
TRACE_EXIT_POINT;
}
+void CCalenDbChangeNotifier::HandleMissedAlarmsL(const RArray<TCalChangeEntry>& aChangeItems)
+ {
+ TRACE_ENTRY_POINT
+ CRepository* missedAlarmStoreRepository = CRepository::NewL(
+ KCRUidMissedAlarmStore);
+ // Create missed alarm store
+ CMissedAlarmStore* missedAlarmStore = CMissedAlarmStore::NewL(
+ *missedAlarmStoreRepository);
+ CleanupStack::PushL(missedAlarmStore);
+ RPointerArray<CMissedAlarm> missedAlarmStorelist;
+ CleanupResetAndDestroyPushL(missedAlarmStorelist);
+ missedAlarmStore->GetL(missedAlarmStorelist);
+ CCalCalendarInfo* calendarInfo = iSession.CalendarInfoL();
+ CleanupStack::PushL(calendarInfo);
+ CCalenDbChangeNotifier::TCalLuidFilename calLuidFilename;
+ calLuidFilename.iFilename = calendarInfo->FileNameL();
+ if (missedAlarmStorelist.Count())
+ {
+ for (TInt idx = 0; idx < aChangeItems.Count(); idx++)
+ {
+ if (aChangeItems[idx].iChangeType == EChangeDelete)
+ {
+ calLuidFilename.iLuid = aChangeItems[idx].iEntryId;
+ TInt index = missedAlarmStorelist.Find(
+ calLuidFilename,CCalenDbChangeNotifier::DoFindEntryByLuid);
+ if(index != KErrNotFound)
+ {
+ CMissedAlarm* missedAlarm = missedAlarmStorelist[index];
+ missedAlarmStore->RemoveL(*missedAlarm);
+ }
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(calendarInfo);
+ CleanupStack::PopAndDestroy(&missedAlarmStorelist);
+ CleanupStack::PopAndDestroy(missedAlarmStore);
+ TRACE_EXIT_POINT
+ }
+TBool CCalenDbChangeNotifier::DoFindEntryByLuid(
+ const TCalLuidFilename* aLuidFilename,const CMissedAlarm& aMissedAlarm)
+ {
+ TRACE_ENTRY_POINT
+ TRACE_EXIT_POINT
+ return (aLuidFilename->iLuid == aMissedAlarm.iLuid
+ && !aLuidFilename->iFilename.CompareF(aMissedAlarm.iCalFileName));
+ }
// -----------------------------------------------------------------------------
// CCalenDbChangeNotifier::RegisterObserverL
--- a/calendarui/globaldata/src/calenglobaldata.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/globaldata/src/calenglobaldata.cpp Tue May 25 12:41:10 2010 +0300
@@ -58,8 +58,7 @@
_LIT(KPersonal,"Personal");
-_LIT(KFamily,"Family");
-_LIT(KFriends,"Friends");
+
_LIT( KMissedAlarmResourceFile, "z:\\resource\\CalenSvrMissedAlarmManagerResource.rsc"); // changes done
// ============================ MEMBER FUNCTIONS ===============================
@@ -1524,24 +1523,7 @@
iCalendarInfoList[index]->SetNameL(*personalCalendar);
CleanupStack::PopAndDestroy( personalBuffer );
}
- else if(calendarNamePtr.Compare(KFamily) == 0)
- {
- HBufC8* familyBuffer=resourceFile.AllocReadLC( R_CALE_DB_FAMILY );
- const TPtrC16 ptrFBuffer(( TText16*) familyBuffer->Ptr(),
- ( familyBuffer->Length()+1 )>>1 );
- HBufC *familyCalendar = ptrFBuffer.AllocL();
- iCalendarInfoList[index]->SetNameL(*familyCalendar);
- CleanupStack::PopAndDestroy( familyBuffer );
- }
- else if(calendarNamePtr.Compare(KFriends) == 0)
- {
- HBufC8* friendsBuffer = resourceFile.AllocReadLC( R_CALE_DB_FRIENDS );
- const TPtrC16 ptrFrBuffer(( TText16*) friendsBuffer->Ptr(),
- ( friendsBuffer->Length()+1 )>>1 );
- HBufC *friendsCalendar = ptrFrBuffer.AllocL();
- iCalendarInfoList[index]->SetNameL(*friendsCalendar);
- CleanupStack::PopAndDestroy( friendsBuffer );
- }
+
aCalendarInfoList.AppendL(iCalendarInfoList[index]);
--- a/calendarui/multicaluidialog/src/multicaluidialogmodel.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/multicaluidialog/src/multicaluidialogmodel.cpp Tue May 25 12:41:10 2010 +0300
@@ -22,11 +22,15 @@
#include <CalenInterimUtils2.h>
#include <calcalendarinfo.h>
#include <calcalendariterator.h>
+#include <calenmulticaluids.hrh>
+
// user include.
#include "multicaluidialogmodel.h"
#include "calendarui_debug.h"
#include "cleanupresetanddestroy.h"
+const TInt KBuffLength = 24;
+
// ----------------------------------------------------------------------------
// CMultiCalUiDialogModel::CMultiCalUiDialogModel
// Constructor
@@ -304,11 +308,29 @@
CCalCalendarIterator* calIter = CCalCalendarIterator::NewL(
*iCalendarsSession);
CleanupStack::PushL(calIter);
- CCalCalendarInfo* calendarInfo = calIter->FirstL();
- while (calendarInfo)
+
+ for( CCalCalendarInfo* calendarInfo = calIter->FirstL();
+ calendarInfo!=NULL;calendarInfo = calIter->NextL())
{
- aCalendarInfoList.AppendL(calendarInfo);
- calendarInfo = calIter->NextL();
+ TBuf8<KBuffLength> keyBuff;
+ // Mark the meta property as SoftDeleted
+ keyBuff.Zero();
+ keyBuff.AppendNum(EMarkAsDelete);
+ TBool softDelete = EFalse;
+ TPckgC<TBool> pkgSoftDelete( softDelete );
+ TRAPD(err,pkgSoftDelete.Set(calendarInfo->PropertyValueL(keyBuff)));
+ if( KErrNone == err )
+ {
+ softDelete = pkgSoftDelete();
+ }
+ if(!softDelete)
+ {
+ aCalendarInfoList.Append(calendarInfo);
+ }
+ else
+ {
+ delete calendarInfo;
+ }
}
CleanupStack::PopAndDestroy(calIter);
--- a/calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameselocalizer.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameselocalizer.cpp Tue May 25 12:41:10 2010 +0300
@@ -137,8 +137,8 @@
day.Num( TInt64(aInfo.iLunarDate.iDay ));
CPtrCArray* monthAndDaySubs = new (ELeave) CPtrCArray(2);
CleanupStack::PushL( monthAndDaySubs );
+ monthAndDaySubs->AppendL(day);
monthAndDaySubs->AppendL(month);
- monthAndDaySubs->AppendL(day);
HBufC* tmp = StringLoader::LoadLC( dateResource, *monthAndDaySubs );
aLocInfo->iLunarMonthAndDay = *tmp;
--- a/calendarui/server/CalenSvr/src/CalenServer.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/server/CalenSvr/src/CalenServer.cpp Tue May 25 12:41:10 2010 +0300
@@ -53,8 +53,7 @@
const TInt KComma( ',' );
_LIT(KPersonal,"Personal");
-_LIT(KFamily,"Family");
-_LIT(KFriends,"Friends");
+
// ================= MEMBER FUNCTIONS =======================
//
@@ -382,15 +381,7 @@
aCalendarNames.AppendL( personalBuffer->Des() );
CleanupStack::PopAndDestroy( personalBuffer );
- // famliy
- HBufC* familyBuffer = KFamily().AllocLC();
- aCalendarNames.AppendL( familyBuffer->Des() );
- CleanupStack::PopAndDestroy( familyBuffer );
-
- //friends
- HBufC* friendBuffer = KFriends().AllocLC();
- aCalendarNames.AppendL( friendBuffer->Des() );
- CleanupStack::PopAndDestroy( friendBuffer );
+
TRACE_EXIT_POINT;
--- a/calendarui/views/inc/calendaylistbox.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/inc/calendaylistbox.h Tue May 25 12:41:10 2010 +0300
@@ -98,7 +98,7 @@
* From CCoeControl Draws itself
*/
void Draw(const TRect& aRect) const;
-
+
/**
* From CCoeControl Handle global resource change
*/
--- a/calendarui/views/inc/caleneventview.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/inc/caleneventview.h Tue May 25 12:41:10 2010 +0300
@@ -152,6 +152,11 @@
*/
void AddToolbarButtonsL();
+ /**
+ * Updates the toolbar buttons on the existing toolbar for event viewer
+ */
+ void UpdateToolbarButtonsL();
+
private:
TVwsViewId iPreviousViewId;
--- a/calendarui/views/inc/caleneventviewcontainer.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/inc/caleneventviewcontainer.h Tue May 25 12:41:10 2010 +0300
@@ -499,15 +499,6 @@
*/
void AddCalendarInfoFieldL();
- /*
- * @brief Find calendarinfo object based on calendar name
- *
- * @param aName calendar filename
- * @param aCalendarInfo referance for calendarinfo
- * @return TBool find status
- */
- static TBool CalendarInfoIdentifierL(const HBufC* aName,
- const CCalCalendarInfo& aCalendarInfo);
/**
* Adds the attachment field in the viewer
*/
@@ -547,6 +538,16 @@
* To stop the alarm in auto snooze case.and to open the event viewer in normal mode.
*/
void HandleStopCommandL();
+
+ /*
+ * @brief Find calendarinfo object based on calendar name
+ *
+ * @param aName calendar filename
+ * @param aCalendarInfo referance for calendarinfo
+ * @return TBool find status
+ */
+ static TBool CalendarInfoIdentifierL(const HBufC* aName,
+ const CCalCalendarInfo& aCalendarInfo);
protected:
--- a/calendarui/views/inc/calenweekcontainer.h Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/inc/calenweekcontainer.h Tue May 25 12:41:10 2010 +0300
@@ -127,8 +127,9 @@
/**
* Set Active context based on currently focused cell.
+ * @param aInstAvailable Flag to find instance available
*/
- void SetActiveContextFromHighlightL();
+ void SetActiveContextFromHighlightL(TBool aInstAvailable = ETrue);
/**
* Step 1 of construction of grid data.
--- a/calendarui/views/src/calendaylistbox.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/calendaylistbox.cpp Tue May 25 12:41:10 2010 +0300
@@ -388,6 +388,8 @@
}
+
+
TKeyResponse CCalenDayListBox::HandleDownwardLoopingL(const TKeyEvent& aKeyEvent)
{
TRACE_ENTRY_POINT;
--- a/calendarui/views/src/calendayview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/calendayview.cpp Tue May 25 12:41:10 2010 +0300
@@ -185,7 +185,6 @@
{
iShowBackButtonOnCba = EFalse;
}
- iDayContainer->UpdateContainerL();
//UpdateCbaL();
iEventViewCommandHandled = EFalse;
--- a/calendarui/views/src/caleneventview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/caleneventview.cpp Tue May 25 12:41:10 2010 +0300
@@ -25,6 +25,8 @@
#include <calencommands.hrh> // Calendar commands
#include <calencontext.h>
#include <CalenStatusPaneUtils.h>
+#include <calcalendarinfo.h>
+#include <caleninstanceid.h>
// user includes
#include "caleneventview.h"
@@ -157,6 +159,7 @@
{
cnt->CompletePopulationL();
RedrawStatusPaneL();
+ UpdateToolbarButtonsL();
nextStep = CCalenView::EDone;
}
break;
@@ -465,12 +468,23 @@
{
TRACE_ENTRY_POINT;
CCalenEventViewContainer* cnt = static_cast<CCalenEventViewContainer*>( iContainer );
+ TCalCollectionId colId = iServices.Context().InstanceId().iColId;
+ // get multiple db data from services
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iServices.GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL(calendarInfoList);
+
+ HBufC* calendarFileName = iServices.GetCalFileNameForCollectionId(colId).AllocLC();
+ TInt index = calendarInfoList.Find( *calendarFileName,
+ CCalenEventViewContainer::CalendarInfoIdentifierL);
+ CleanupStack::PopAndDestroy(calendarFileName);
switch(aResourceId)
{
case R_CALEN_EVENT_VIEW_MENUPANE:
case R_CALEN_EVENT_VIEW_LONGTAP_MENUPANE:
{
CCalenEntryUtil* eventViewData = cnt->GetEventViewData();
+
if(eventViewData)
{
if(eventViewData->EntryType() == CCalEntry::ETodo)
@@ -515,6 +529,14 @@
aMenuPane->DeleteMenuItem( ECalenGetLocationAndReplace );
aMenuPane->DeleteMenuItem( ECalenShowLocation );
}
+ if(!(calendarInfoList[index]->Enabled()))
+ {
+ aMenuPane->DeleteMenuItem(ECalenSend);
+ aMenuPane->DeleteMenuItem(ECalenCmdPromptThenEdit);
+ aMenuPane->DeleteMenuItem(ECalenDeleteCurrentEntry);
+ }
+
+
break;
}
default:
@@ -523,7 +545,7 @@
}
break;
}
-
+ CleanupStack::PopAndDestroy(&calendarInfoList);
TRACE_EXIT_POINT;
}
@@ -762,5 +784,44 @@
TRACE_EXIT_POINT;
return button;
- }
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenEventView::UpdateToolbarButtonsL
+// Updates the toolbar buttons on the existing toolbar for event viewer
+// ----------------------------------------------------------------------------
+//
+
+void CCalenEventView::UpdateToolbarButtonsL()
+ {
+ // Get the existing toolbar from MCalenservices
+ MCalenToolbar* toolbarImpl = iServices.ToolbarOrNull();
+ CAknToolbar& toolbar = toolbarImpl->Toolbar();
+ TCalCollectionId colId = iServices.Context().InstanceId().iColId;
+
+ // get multiple db data from services
+ RPointerArray<CCalCalendarInfo> calendarInfoList;
+ iServices.GetAllCalendarInfoL(calendarInfoList);
+ CleanupClosePushL(calendarInfoList);
+
+ HBufC* calendarFileName = iServices.GetCalFileNameForCollectionId(colId).AllocLC();
+ TInt index = calendarInfoList.Find( *calendarFileName,
+ CCalenEventViewContainer::CalendarInfoIdentifierL);
+ CleanupStack::PopAndDestroy(calendarFileName);
+
+
+ if(!(calendarInfoList[index]->Enabled()))
+ {
+ toolbar.SetItemDimmed( ECalenSend, ETrue, ETrue );
+ toolbar.SetItemDimmed( ECalenDeleteCurrentEntry, ETrue, ETrue );
+ toolbar.SetItemDimmed( ECalenEditCurrentEntry, ETrue, ETrue );
+ }
+ else
+ {
+ toolbar.SetItemDimmed( ECalenSend, EFalse, ETrue );
+ toolbar.SetItemDimmed( ECalenDeleteCurrentEntry, EFalse, ETrue );
+ toolbar.SetItemDimmed( ECalenEditCurrentEntry, EFalse, ETrue );
+ }
+ CleanupStack::PopAndDestroy(&calendarInfoList);
+ }
//end of file
--- a/calendarui/views/src/calenmissedalarmscontainer.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/calenmissedalarmscontainer.cpp Tue May 25 12:41:10 2010 +0300
@@ -917,7 +917,9 @@
TCalenInstanceId missedAlarm = iMissedAlarmsArray[aIndex];
CCalEntry* entry = iServices.EntryViewL(missedAlarm.iColId)->FetchL( missedAlarm.iEntryLocalUid );
- User::LeaveIfNull( entry );
+ //User::LeaveIfNull( entry );
+ if (entry)
+ {
CleanupStack::PushL( entry );
TTime instanceTime;
@@ -933,6 +935,7 @@
context.SetInstanceIdL( id, context.ViewId() );
CleanupStack::PopAndDestroy( entry );
+ }
TRACE_EXIT_POINT;
}
--- a/calendarui/views/src/calennativeview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/calennativeview.cpp Tue May 25 12:41:10 2010 +0300
@@ -707,6 +707,7 @@
notificationArray.Append(ECalenNotifyStopAlarm);
notificationArray.Append(ECalenNotifyDeleteFailed);
notificationArray.Append(ECalenNotifyEntryDeleted);
+ notificationArray.Append(ECalenNotifyResourceChanged);
iServices.RegisterForNotificationsL( this,notificationArray);
@@ -1164,6 +1165,19 @@
}
}
break;
+ case ECalenNotifyResourceChanged:
+ {
+ if(iContainer )
+ {
+ CAknAppUi* Appui = (CAknAppUi*)CEikonEnv::Static()->EikAppUi();
+ //handle this event when the app is in background
+ if(!Appui->IsForeground())
+ {
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+ }
+ }
+ break;
default:
ASSERT( 0 ); // should never get here
break;
--- a/calendarui/views/src/calenweekcontainer.cpp Tue May 11 16:12:24 2010 +0300
+++ b/calendarui/views/src/calenweekcontainer.cpp Tue May 25 12:41:10 2010 +0300
@@ -402,7 +402,7 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-void CCalenWeekContainer::SetActiveContextFromHighlightL()
+void CCalenWeekContainer::SetActiveContextFromHighlightL(TBool aInstAvailable)
{
TRACE_ENTRY_POINT;
@@ -424,7 +424,7 @@
// * Focus on instanceId and datetime
// 2. Timed item, 1-n for each cell, on same/ different day
// * Focus on datetime
- if( itemInfo.HasInstance() )
+ if( itemInfo.HasInstance() && aInstAvailable)
{
TCalenInstanceId instId = TCalenInstanceId::CreateL( *itemInfo.iInstance );
if( !itemInfo.IsTimed() ) // todo/anniv/memo
@@ -438,13 +438,8 @@
{
TTime focusTime = CalenDateUtils::BeginningOfDay( iTime ) + itemInfo.iStartTime;
currentDayCalTime.SetTimeLocalL( focusTime );
- // context.SetFocusDateAndTimeL( currentDayCalTime,
- // TVwsViewId( KUidCalendar, KUidCalenWeekView ) );
context.SetFocusDateAndTimeAndInstanceL( currentDayCalTime, instId,
- TVwsViewId( KUidCalendar, KUidCalenWeekView ) );
-
- TDateTime focusTimeTemp = focusTime.DateTime();
-
+ TVwsViewId( KUidCalendar, KUidCalenWeekView ) );
}
}
else if( itemInfo.iStartTime.Int() == KErrNotFound ) // empty non-timed cell
@@ -2067,32 +2062,32 @@
{
TInt direction(0);
if(aEventID == EAknNaviDecoratorEventLeftTabArrow)
- {
- if(AknLayoutUtils::LayoutMirrored())
- {
- direction = 1;
- }
- else
- {
- direction = -1;
- }
- }
-
- else if(aEventID == EAknNaviDecoratorEventRightTabArrow)
- {
- if(AknLayoutUtils::LayoutMirrored())
- {
- direction = -1;
- }
- else
- {
- direction = 1;
- }
- }
+ {
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ direction = 1;
+ }
+ else
+ {
+ direction = -1;
+ }
+ }
+ else if(aEventID == EAknNaviDecoratorEventRightTabArrow)
+ {
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ direction = -1;
+ }
+ else
+ {
+ direction = 1;
+ }
+ }
else
return;
+
HorizontalWeekMoveL(direction);
- SetActiveContextFromHighlightL();
+ SetActiveContextFromHighlightL(EFalse);
WeekView().SetStatusPaneFromActiveContextL();
iView->BeginRepopulationL();
}
--- a/clock2/clockui/plugins/clockindicatorpaneplugin/data/clockindicatorpaneplugin.rss Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/plugins/clockindicatorpaneplugin/data/clockindicatorpaneplugin.rss Tue May 25 12:41:10 2010 +0300
@@ -46,7 +46,7 @@
//
RESOURCE TBUF r_qtn_clk_stylus_popup_alarms_set
{
- buf = "%0U at %1U"; // TODO: Replace with logical string once CR is approved.
+ buf = qtn_clk_stylus_popup_alarms_set;
}
// End of file
--- a/clock2/clockui/uilayer/clkdatetimeview/group/clkdatetimeview.mmp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clkdatetimeview/group/clkdatetimeview.mmp Tue May 25 12:41:10 2010 +0300
@@ -81,5 +81,6 @@
LIBRARY eiksrv.lib
LIBRARY ecom.lib
LIBRARY clockecomlistener.lib
+LIBRARY mediafilelist.lib
// End of file
--- a/clock2/clockui/uilayer/clkdatetimeview/src/clkdatetimeview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clkdatetimeview/src/clkdatetimeview.cpp Tue May 25 12:41:10 2010 +0300
@@ -56,6 +56,7 @@
#include <AknGlobalNote.h>
#include <featdiscovery.h>
#include <ProfileEngineDomainCRKeys.h>
+#include <mediafilelist.h>
// User Includes
#include "clkuiclksrvmodel.h"
@@ -2437,39 +2438,31 @@
// Set the flag to indicate that the tone selection list is in use.
iExtension->SetAlarmToneListInUse( ETrue );
- // Open the resource file.
- RConeResourceLoader resourceLoader( *( CCoeEnv::Static() ) );
- OpenFileListResourceLC( resourceLoader );
+ CMediaFileList* list = CMediaFileList::NewL();
+ CleanupStack::PushL( list );
+
+ TInt nullItem( KErrNotFound );
- // Launch filelist using your custom resource.
- CFLDFileListContainer* alarmToneList = CFLDFileListContainer::NewLC( R_FILELIST_MODEL_NOVIDEO );
+ // default tone
+ list->SetNullItemL( iDefaultToneTxt->Des(), iDefaultAlarmToneName,
+ CMediaFileList::EMediaFileTypeAudio,
+ CMediaFileList::ENullItemIconDefaultTone );
- // Populate the list with "Default" and "Off" strings.
- alarmToneList->InsertNullItemL( iDefaultToneTxt->Des(), iDefaultAlarmToneName );
- alarmToneList->InsertEndNullItemL( iSoundOffTxt->Des(), iExtension->GetSilentToneStr()->Des() );
- // Do not show videos.
- alarmToneList->AddExclusiveMediaTypeL( ECLFMediaTypeVideo );
- alarmToneList->SetAutomatedType( CDRMHelper::EAutomatedTypeClockAlarm );
- // Do not show items over the file size limit, if configured.
- if ( CFeatureDiscovery::IsFeatureSupportedL(
- KFeatureIdFfLimitedMessageAndAlarmToneSize ) )
- {
- // Max file size allowed (in KB). 0 == no limit.
- TInt fileSizeLimit = 0;
- CRepository* profilesCenRep = CRepository::NewLC( KCRUidProfileEngine );
+ // off
+ list->SetNullItemL( iSoundOffTxt->Des(), iExtension->GetSilentToneStr()->Des(),
+ CMediaFileList::EMediaFileTypeAudio,
+ CMediaFileList::ENullItemIconOff );
+
- // Reading the repository should not fail, but if it does, the default
- // value we have for the file size limit is acceptable.
- profilesCenRep->Get( KProEngRingingToneMaxSize, fileSizeLimit ); // codescanner::crepository
- CleanupStack::PopAndDestroy( profilesCenRep );
+ list->SetAttrL( CMediaFileList::EAttrAutomatedType, CDRMHelper::EAutomatedTypeClockAlarm );
+ list->SetAttrL( CMediaFileList::EAttrExcludeFolder, CMediaFileList::EMediaFileTypeVideo );
+
+ // Launch the list. ETrue is returned if OK is pressed. EFalse otherwise.
+ TBool ok( list->ShowMediaFileListL( &iAlarmToneName, &nullItem, NULL, NULL ) );
- if ( fileSizeLimit > 0 )
- {
- alarmToneList->SetMaxFileSize( fileSizeLimit * KKilo );
- }
- }
- // Launch the list. ETrue is returned if OK is pressed. EFalse otherwise.
- if( alarmToneList->LaunchL( iAlarmToneName, *iToneListHeader ) )
+ // Cleanup.
+ CleanupStack::PopAndDestroy( list );
+ if( ok )
{
// User has selected the tone and pressed OK.
// Holder for the old alarm tone.
@@ -2489,12 +2482,7 @@
// Cleanup.
CleanupStack::PopAndDestroy( cenRep );
}
- // User pressed Cancel.
- iExtension->SetAlarmToneListInUse( EFalse );
-
- // Cleanup.
- CleanupStack::PopAndDestroy( alarmToneList );
- CleanupStack::PopAndDestroy( &resourceLoader );
+ iExtension->SetAlarmToneListInUse( EFalse );
}
// ---------------------------------------------------------
--- a/clock2/clockui/uilayer/clockalarmeditor/data/clockalarmeditor.ra Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockalarmeditor/data/clockalarmeditor.ra Tue May 25 12:41:10 2010 +0300
@@ -94,7 +94,6 @@
items =
{
LBUF { txt = qtn_clk_alarm_occ_once; },
- LBUF { txt = qtn_clk_alarm_24h; },
LBUF { txt = text_calendar_every_day; },
LBUF { txt = qtn_clk_alarm_occ_workd; },
LBUF { txt = text_calendar_every_week; }
--- a/clock2/clockui/uilayer/clockalarmeditor/src/clockalarmeditorimpl.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockalarmeditor/src/clockalarmeditorimpl.cpp Tue May 25 12:41:10 2010 +0300
@@ -45,13 +45,10 @@
const TInt KZerothDay( 0 );
const TInt KDaysInWeek( 7 );
const TInt KFirstLine( 1 );
-const TInt KNextDayIndex( 1 );
const TInt KRepeatOnceIndex( 0 );
-const TInt KWithIn24HoursIndex( 1 );
-const TInt KDailyIndex( 2 );
-const TInt KWorkdaysIndex( 3 );
-const TInt KWeeklyIndex( 4 );
-const TInt KCurrentDayIndex( 0 );
+const TInt KDailyIndex( 1 );
+const TInt KWorkdaysIndex( 2 );
+const TInt KWeeklyIndex( 3 );
const TInt KMaxCharsInNote( 32 );
const TInt KZerothRule( 0 );
const TInt KOneMinuteInMicrosecond( 1000000 * 60 );
@@ -123,7 +120,7 @@
// The Description is "Alarm" by default too.
if( !iAlarmForEditing )
{
- iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatNext24Hours;
+ iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatOnce;
// Here we have to load the default description.
HBufC* defaultDescription = StringLoader::LoadLC( R_QTN_CLOCK_ALARM_EDITOR_DESC_DEFAULT, iCoeEnv );
@@ -188,8 +185,7 @@
// We don't display the alarm day selection item for repeated alarms of type daily, next 24 hours and
// workdays. So when this functions is called, we check for the type and update the form accordingly.
- if( KWithIn24HoursIndex == iOccuranceIndex ||
- KDailyIndex == iOccuranceIndex ||
+ if( KDailyIndex == iOccuranceIndex ||
KWorkdaysIndex == iOccuranceIndex )
{
DeleteAlmDayCtrlL();
@@ -246,33 +242,23 @@
case KRepeatOnceIndex:
{
iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatOnce;
+ break;
}
- break;
-
- case KWithIn24HoursIndex:
- {
- iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatNext24Hours;
- }
- break;
-
case KDailyIndex:
{
iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatDaily;
- }
break;
-
+ }
+ case KWorkdaysIndex:
+ {
+ iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatWorkday;
+ break;
+ }
case KWeeklyIndex:
{
iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatWeekly;
- }
break;
-
- case KWorkdaysIndex:
- {
- iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatWorkday;
- }
- break;
-
+ }
default:
{
// No implementation yet.
@@ -424,8 +410,7 @@
// We don't display the alarm day selection item for repeated alarms of type daily, next 24 hours and
// workdays. So when this functions is called, we check for the type and update the form accordingly.
- if( KWithIn24HoursIndex == iOccuranceIndex ||
- KDailyIndex == iOccuranceIndex ||
+ if( KDailyIndex == iOccuranceIndex ||
KWorkdaysIndex == iOccuranceIndex )
{
DeleteAlmDayCtrlL();
@@ -543,11 +528,7 @@
// Do not show Delete option when editing an alarm.
// Do not show Discard changes option if its a new alarm.
- if( iAlarmForEditing )
- {
- aMenuPane->SetItemDimmed( EClockAlarmDelete, ETrue );
- }
- else
+ if( !iAlarmForEditing )
{
aMenuPane->SetItemDimmed( EClockAlarmDiscardChanges, ETrue );
}
@@ -655,12 +636,6 @@
}
break;
- case KWithIn24HoursIndex:
- {
- iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatNext24Hours;
- }
- break;
-
case KDailyIndex:
{
iAlarmInfo.iRepeat = EAlarmRepeatDefintionRepeatDaily;
@@ -691,8 +666,7 @@
// We don't display the alarm day selection item for repeated alarms of type daily, next 24 hours and
// workdays. So when this functions is called, we check for the type and update the form accordingly.
- if( KWithIn24HoursIndex == iOccuranceIndex ||
- KDailyIndex == iOccuranceIndex ||
+ if( KDailyIndex == iOccuranceIndex ||
KWorkdaysIndex == iOccuranceIndex )
{
DeleteAlmDayCtrlL();
@@ -742,13 +716,6 @@
iOccuranceIndex = KRepeatOnceIndex;
}
break;
-
- case EAlarmRepeatDefintionRepeatNext24Hours:
- {
- iOccuranceIndex = KWithIn24HoursIndex;
- }
- break;
-
case EAlarmRepeatDefintionRepeatDaily:
{
iOccuranceIndex = KDailyIndex;
@@ -985,8 +952,8 @@
// Get the current day of the week.
TInt currentDay( aHomeTime.DayNoInWeek() );
- if( ( EAlarmRepeatDefintionRepeatOnce == iOccuranceIndex ) ||
- ( EAlarmRepeatDefintionRepeatWeekly == iOccuranceIndex ) )
+ if( ( KRepeatOnceIndex == iOccuranceIndex ) ||
+ ( KWeeklyIndex == iOccuranceIndex ) )
{
TInt dateOffset( KZerothDay );
@@ -1013,16 +980,6 @@
}
aTimeFromForm += TTimeIntervalDays( dateOffset );
}
- else if( EAlarmRepeatDefintionRepeatNext24Hours == iOccuranceIndex )
- {
- TInt dayIndex( KCurrentDayIndex );
- if( aTimeFromForm < aHomeTime )
- {
- dayIndex = KNextDayIndex;
- }
- aTimeFromForm += TTimeIntervalDays( dayIndex );
- }
-
__PRINTS( "CClockAlarmEditorImpl::GetActualAlarmTime - Exit" );
}
@@ -1341,7 +1298,6 @@
// Choose the appropriate Repeat type.
switch( iAlarmInfo.iRepeat )
{
- case EAlarmRepeatDefintionRepeatNext24Hours:
case EAlarmRepeatDefintionRepeatOnce:
{
if( oneDayDifference )
--- a/clock2/clockui/uilayer/clockmainview/inc/clockalarmarray.h Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/inc/clockalarmarray.h Tue May 25 12:41:10 2010 +0300
@@ -126,6 +126,8 @@
* @param aAlarmInfo The information of the alarm at aIndex in the list.
*/
void GetInActiveAlarmInfo(TInt aIndex, TAlarmId& aAlarmId, SClkAlarmInfo& aAlarmInfo ) const;
+
+ HBufC* NewAlarmText() const;
private: // New functions
--- a/clock2/clockui/uilayer/clockmainview/inc/clockmaincontainer.h Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/inc/clockmaincontainer.h Tue May 25 12:41:10 2010 +0300
@@ -36,9 +36,10 @@
class CAknDoubleStyleListBox;
class CClockMarqueeLabel;
+class CAknButton;
// Constants
-const TInt KZeroAlarms( 1 );
+const TInt KZeroAlarms( 0 );
// Class declaration
/**
@@ -47,7 +48,8 @@
* @exe clock.exe
*/
class CClockMainContainer : public CCoeControl,
- public MEikListBoxObserver
+ public MEikListBoxObserver,
+ public MCoeControlObserver
{
public: // Constructor and destructor
@@ -103,6 +105,8 @@
* may be obtained by accessing the list box itself.
*/
void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+ void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
public: // New functions
@@ -146,6 +150,16 @@
* @brief Reconstructs the marquee label and prepares it for marqueeing again.
*/
void ResetMarqueeLabelL();
+
+ /**
+ * @brief Calculates correct rect and sets if ro NewAlarmButton
+ */
+ void SetCorrectRectForNewAlarmButton();
+
+ /**
+ * @brief Switches clock type
+ */
+ void SwitchClockTypeL();
private: // Functions from base classes
@@ -316,6 +330,10 @@
* @brief Holds the date.
*/
HBufC* iDateString;
+
+ CAknButton* iNewAlarmButton;
+
+ TTime iPreviousClockTypeSwitch;
};
--- a/clock2/clockui/uilayer/clockmainview/inc/clockmainview.h Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/inc/clockmainview.h Tue May 25 12:41:10 2010 +0300
@@ -121,7 +121,12 @@
* @return CClockAppUi The pointer to the clock application ui.
*/
CClockAppUi* ClockApplicationUi();
-
+
+ /**
+ * @brief Gives tactile feedback on user touch action
+ */
+ void GiveVibes();
+
protected: // From base classes
/**
@@ -154,12 +159,23 @@
* @brief Displays the alarm editor for the user to set the alarm.
*/
void SetNewAlarmL();
-
+
+ /**
+ * @brief Deletes the selected alarm.
+ * @param aAlarmId the id of the alarm to be deleted
+ */
+ void RemoveAlarmL( TAlarmId aAlarmId );
+
/**
* @brief Deletes the selected alarm.
*/
void RemoveAlarmL();
-
+
+ /**
+ * @brief Remove the snooze on an expired alarm put on snooze
+ */
+ void RemoveSnoozeL();
+
/**
* @brief Activates the focused alarm item in the list.
*/
@@ -175,6 +191,11 @@
*/
void ResetAlarmL();
+ /**
+ * @brief Switches clock type between analog and digital
+ */
+ void SwitchClockTypeL();
+
/**
* @brief Checks if DST changes will be applied in the next 24 hours.
* @return TBool ETrue if remaining time note has to be displayed.
--- a/clock2/clockui/uilayer/clockmainview/src/clockalarmarray.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/src/clockalarmarray.cpp Tue May 25 12:41:10 2010 +0300
@@ -30,8 +30,7 @@
// Constants
const TInt KTimeStringLength( 25 );
-const TInt KFirstAlarmIndex( 1 );
-const TInt KNewAlarmIndex( 0 );
+const TInt KFirstAlarmIndex( 0 );
// Literals
_LIT( KFieldSeparator, "\t" );
@@ -151,35 +150,6 @@
TPtrC16 CClockAlarmArray::MdcaPoint( TInt aIndex ) const
{
__PRINTS( "CClockAlarmArray::MdcaPoint - Entry" );
-
- // Set "New Alarm" as the first index of the listitem.
- if( KNewAlarmIndex == aIndex )
- {
- iListBoxEntry->Des().Zero();
-
- TPtr listEntryPtr = iListBoxEntry->Des();
-
- listEntryPtr.Append( KFieldSeparator );
-
- //Single click integration
- listEntryPtr.Append( iNewAlarmText->Des() );
-
- listEntryPtr.Append( KFieldSeparator );
-
-
- listEntryPtr.Append( KFieldSeparator );
-
- listEntryPtr.AppendNum( EBlankIconIndex );
-
- listEntryPtr.Append( KFieldSeparator );
-
- listEntryPtr.AppendNum( EBlankIconIndex );
-
- __PRINTS( "CClockAlarmArray::MdcaPoint - Exit" );
-
- return listEntryPtr;
- }
-
SClkAlarmInfo alarmInfo;
TBuf< KTimeStringLength > timeString;
TAlarmId alarmId;
@@ -258,13 +228,13 @@
case EAlarmRepeatDefintionRepeatDaily:
{
- listEntryPtr.Append( ( *iOccuranceList )[ 2 ] );
+ listEntryPtr.Append( ( *iOccuranceList )[ 1 ] );
}
break;
case EAlarmRepeatDefintionRepeatWorkday:
{
- listEntryPtr.Append( ( *iOccuranceList )[ 3 ]);
+ listEntryPtr.Append( ( *iOccuranceList )[ 2 ]);
}
break;
@@ -491,8 +461,6 @@
// Get the ids from alarmserver.
iAlarmModel->GetClkAlarmIds( iAlarmIdArray );
- // Add a dummy index for "New Alarm" Option as first item in the Id array.
- iAlarmIdArray.Insert( KNewAlarmIndex, KNewAlarmIndex );
SClkAlarmInfo alarmInfo;
TInt alarmCount( iAlarmIdArray.Count() );
@@ -548,7 +516,7 @@
TInt enabledAlarmCount( GetEnabledAlarmCount() );
// If info of an active alarm is needed.
- if( aIndex <= enabledAlarmCount )
+ if( aIndex < enabledAlarmCount )
{
GetActiveAlarmInfo( aIndex, aAlarmId , aAlarmInfo );
}
@@ -612,21 +580,22 @@
iAlarmModel->GetClkAlarmIds( alarmIdArray );
TInt alarmIdCount( alarmIdArray.Count() );
- TInt alarmIndex( NULL );
+ TInt alarmIndex( 0 );
- for( TInt index( NULL ); index < alarmIdCount; index++ )
+ for( TInt index( 0 ); index < alarmIdCount; index++ )
{
// Get information of each alarm.
SClkAlarmInfo alarmInfo;
TInt errorValue( iAlarmModel->ClockAlarmInfo( alarmIdArray[ index ], alarmInfo ) );
- if( ( KErrNone == errorValue ) &&
+ if( !( ( KErrNone == errorValue ) &&
( EAlarmStateInPreparation != alarmInfo.iState &&
EAlarmStateNotified != alarmInfo.iState &&
- EAlarmStatusEnabled == alarmInfo.iStatus ) )
+ EAlarmStatusEnabled == alarmInfo.iStatus ) ) )
{
- alarmIndex++;
+ continue;
}
+
if( aIndex == alarmIndex )
{
// We have a match, return the values.
@@ -637,8 +606,9 @@
// Break the loop.
return;
}
- }
- }
+ alarmIndex++;
+ }
+ }
// ---------------------------------------------------------
// CClockAlarmArray::GetInActiveAlarmInfo
@@ -655,19 +625,19 @@
// Get the alarms which are enabled and active.
TInt enabledAlarmCount = GetEnabledAlarmCount();
-
- for( TInt index( NULL ); index < alarmIdCount; index++ )
+
+ for( TInt index( 0 ); index < alarmIdCount; index++ )
{
// Get information of each alarm.
SClkAlarmInfo alarmInfo;
TInt errorValue( iAlarmModel->ClockAlarmInfo( alarmIdArray[ index ], alarmInfo ) );
- if( ( KErrNone == errorValue ) &&
+ if( !( ( KErrNone == errorValue ) &&
( EAlarmStateInPreparation != alarmInfo.iState &&
EAlarmStateNotified != alarmInfo.iState &&
- EAlarmStatusEnabled != alarmInfo.iStatus ) )
+ EAlarmStatusEnabled != alarmInfo.iStatus ) ) )
{
- alarmIndex++;
+ continue;
}
// Disabled alarms are always indexed after the enabled alarms.
if( ( enabledAlarmCount + alarmIndex ) == aIndex )
@@ -679,6 +649,7 @@
// Break the loop.
return;
}
+ alarmIndex++;
}
}
@@ -758,4 +729,8 @@
return returnValue;
}
+HBufC* CClockAlarmArray::NewAlarmText() const
+ {
+ return iNewAlarmText;
+ }
// End of file
--- a/clock2/clockui/uilayer/clockmainview/src/clockmaincontainer.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/src/clockmaincontainer.cpp Tue May 25 12:41:10 2010 +0300
@@ -38,6 +38,7 @@
#include <tzlocalizer.h>
#include <tzlocalizationdatatypes.h>
#include <vtzrules.h>
+#include <aknbutton.h>
// User includes
#include "clockmaincontainer.h"
@@ -68,6 +69,8 @@
R_QTN_WEEK_LONG_SUNDAY
};
+TInt const KSwitchDelay = 200*1000;
+
// Literals
_LIT( KIconFileName, "\\resource\\apps\\clockapp.mif" );
_LIT( KPlusGMT, " \x202A+" );
@@ -155,7 +158,9 @@
delete iTimeZoneString;
iTimeZoneString = NULL;
}
-
+
+ delete iNewAlarmButton;
+ iNewAlarmButton = NULL;
__PRINTS( "CClockMainContainer::~CClockMainContainer - Exit" );
}
@@ -189,12 +194,78 @@
if( EKeyUpArrow == aKeyEvent.iCode ||
EKeyDownArrow == aKeyEvent.iCode )
{
- if( iListBox )
+
+ TInt itemCount = iListBox->Model()->ItemTextArray()->MdcaCount();
+ // if neither has focus just then select button to be focused
+ if( !iNewAlarmButton->IsFocused() && !iListBox->IsFocused() )
+ {
+ iListBox->View()->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
+ iNewAlarmButton->SetFocus( ETrue );
+ DrawDeferred();
+ retVal = EKeyWasConsumed;
+ }
+ // button not focused and no list items -> set focus to button
+ else if( itemCount == 0 && !iNewAlarmButton->IsFocused() )
+ {
+ iListBox->View()->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
+ iListBox->SetFocus( EFalse );
+ iNewAlarmButton->SetFocus( ETrue );
+ DrawDeferred();
+ retVal = EKeyWasConsumed;
+ }
+ // button focused and listbox has items
+ else if( iNewAlarmButton->IsFocused() && itemCount > 0 )
{
-
-
+ iListBox->View()->ItemDrawer()->ClearFlags( CListItemDrawer::EDisableHighlight );
+ iNewAlarmButton->SetFocus( EFalse );
+ iListBox->SetFocus( ETrue );
+ if( EKeyDownArrow == aKeyEvent.iCode )
+ {
+ iListBox->SetCurrentItemIndex( itemCount - 1 );
+ }
+ else
+ {
+ iListBox->SetCurrentItemIndex( 0 );
+ }
+ retVal = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+ // listbox focused
+ else if( iListBox->IsFocused() && itemCount > 0 )
+ {
+ // first item when only one item in the list
+ if( iListBox->CurrentItemIndex() == 0 && itemCount == 1 )
+ {
+ iListBox->View()->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
+ iListBox->SetFocus( EFalse );
+ iNewAlarmButton->SetFocus( ETrue );
+ DrawDeferred();
+ retVal = EKeyWasConsumed;
+ }
+ // first item
+ else if( iListBox->CurrentItemIndex() == 0 && EKeyUpArrow == aKeyEvent.iCode )
+ {
+ iListBox->View()->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
+ iListBox->SetFocus( EFalse );
+ iNewAlarmButton->SetFocus( ETrue );
+ DrawDeferred();
+ retVal = EKeyWasConsumed;
+ }
+ //last item
+ else if( iListBox->CurrentItemIndex() == ( itemCount - 1 )
+ && EKeyDownArrow == aKeyEvent.iCode )
+ {
+ iListBox->View()->ItemDrawer()->SetFlags( CListItemDrawer::EDisableHighlight );
+ iListBox->SetFocus( EFalse);
+ iNewAlarmButton->SetFocus( ETrue );
+ DrawDeferred();
+ retVal = EKeyWasConsumed;
+ }
// Send the event to the listbox to handle the event.
- retVal = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ else
+ {
+ iListBox->View()->ItemDrawer()->ClearFlags( CListItemDrawer::EDisableHighlight );
+ retVal = iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
}
}
@@ -203,7 +274,7 @@
{
// Handle backspace command. Deletes the selected alarm.
//Single click integration
- if ( iView->MenuBar()->ItemSpecificCommandsEnabled() )
+ if ( iListBox->IsFocused() && iView->MenuBar()->ItemSpecificCommandsEnabled() )
{
// if highlighted
iView->HandleCommandL( EClockRemoveAlarm );
@@ -215,8 +286,27 @@
//Single click integration
if ( aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter )
{
- // Send the event to the listbox to handle the event.
- iListBox->OfferKeyEventL( aKeyEvent, aType );
+ // Send the event to the listbox to handle the event
+ // if listbox is focused
+ if( iListBox->IsFocused() && iListBox->Model()->ItemTextArray()->MdcaCount() > 0 )
+ {
+ iListBox->OfferKeyEventL( aKeyEvent, aType );
+ retVal = EKeyWasConsumed;
+ }
+ else
+ {
+ // default action for the enter is button press
+ TKeyEvent keyEvent;
+ keyEvent.iCode = EKeyOK;
+ keyEvent.iScanCode = EStdKeyDevice3;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 0;
+ iNewAlarmButton->OfferKeyEventL( keyEvent, EEventKeyDown );
+ iNewAlarmButton->OfferKeyEventL( keyEvent, EEventKey );
+ iNewAlarmButton->OfferKeyEventL( keyEvent, EEventKeyUp );
+ retVal = EKeyWasConsumed;
+
+ }
}
}
@@ -280,11 +370,6 @@
{
__PRINTS( "CClockMainContainer::FocusChanged - Entry" );
- if( iListBox )
- {
- iListBox->SetFocus( IsFocused() );
- }
-
__PRINTS( "CClockMainContainer::FocusChanged - Exit" );
}
@@ -304,10 +389,28 @@
return;
}
-
- // Let the listbox handle the event.
- iListBox->HandlePointerEventL( aPointerEvent );
-
+
+ // to get the vibes let's handle skinnable clock as a special case
+ // no need to to delegate pointer events to it
+ if( iSkinnableClock && iSkinnableClock->Rect().Contains( aPointerEvent.iPosition ) )
+ {
+ if( aPointerEvent.iType == TPointerEvent::EButton1Down )
+ {
+ TTime now;
+ now.HomeTime();
+ TInt64 launchFreq = now.MicroSecondsFrom( iPreviousClockTypeSwitch ).Int64();
+ if( launchFreq > MAKE_TINT64( 0, KSwitchDelay ) )
+ {
+ iView->GiveVibes();
+ iView->HandleCommandL( EClockSwitchClockType );
+ iPreviousClockTypeSwitch.HomeTime();
+ }
+ }
+ }
+ else
+ {
+ CCoeControl::HandlePointerEventL( aPointerEvent );
+ }
__PRINTS( "CClockMainContainer::HandlePointerEventL - Exit" );
}
@@ -319,42 +422,15 @@
void CClockMainContainer::HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType )
{
__PRINTS( "CClockMainContainer::HandleListBoxEventL - Entry" );
-
if( aListBox == iListBox &&
- aEventType == EEventItemSingleClicked )
+ ( aEventType == EEventItemSingleClicked || aEventType == EEventEnterKeyPressed ) )
{
// Check if the user has double clicked on the list item.
if( !iView->IsAlarmEditorOpen() )
{
- // If the user has selected the first item, launch alarm editor.
- if( KErrNone == aListBox->CurrentItemIndex() )
- {
- iView->HandleCommandL( EClockNewAlarm );
- }
- else
- {
- //Single click integration
- iView->HandleCommandL( EClockResetAlarm );
-
- }
+ iView->HandleCommandL( EClockResetAlarm );
}
}
- //Single click integration
- else if ( aListBox == iListBox && aEventType == EEventEnterKeyPressed )
- {
- if( !iView->IsAlarmEditorOpen() )
- {
- if ( iListBox->CurrentItemIndex() == 0 )
- {
- iView->HandleCommandL( EClockNewAlarm );
- }
- else
- {
- iView->HandleCommandL( EClockResetAlarm );
- }
- }
- }
-
__PRINTS( "CClockMainContainer::HandleListBoxEventL - Entry" );
}
@@ -378,7 +454,8 @@
// Update the listbox.
iListBox->ScrollToMakeItemVisible( itemIndex );
iListBox->SetCurrentItemIndexAndDraw( itemIndex );
-
+ SetCorrectRectForNewAlarmButton();
+ iNewAlarmButton->DrawDeferred();
__PRINTS( "CClockMainContainer::UpdateAlarmListL - Exit" );
}
@@ -393,27 +470,34 @@
// Reinitialize the alarm list.
iAlarmArray->InitIdList();
+ TInt count = iListBox->Model()->ItemTextArray()->MdcaCount();
- if( ( KZeroAlarms <= aIndex ) &&
- ( aIndex == iListBox->Model()->ItemTextArray()->MdcaCount() ) )
+ //SetCorrectRectForNewAlarmButton();
+
+ // if only one item
+ if( ( KZeroAlarms == aIndex ) && ( aIndex == count ) )
+ {
+ iListBox->SetCurrentItemIndex( KZeroAlarms );
+ SetCorrectRectForNewAlarmButton();
+ }
+ // last item when more than one exists
+ else if( ( KZeroAlarms < aIndex ) && ( aIndex == count ) )
{
// Last alarm in the list is deleted hence set the previous alarm.
iListBox->ScrollToMakeItemVisible( aIndex - 1 );
iListBox->SetCurrentItemIndexAndDraw( aIndex - 1 );
-
-
+ iListBox->HandleItemRemovalL();
+ DrawNow();
}
- else if( ( KZeroAlarms <= aIndex ) &&
- ( KZeroAlarms < iListBox->Model()->ItemTextArray()->MdcaCount() ) )
+ // not last item
+ else if( ( KZeroAlarms <= aIndex ) && ( aIndex < count ) )
{
// Highlight the alarm item replacing the deleted element
iListBox->ScrollToMakeItemVisible( aIndex );
iListBox->SetCurrentItemIndexAndDraw( aIndex );
+ iListBox->HandleItemRemovalL();
+ DrawNow();
}
-
- // Update the listbox.
- iListBox->HandleItemRemovalL();
- DrawNow();
__PRINTS( "CClockMainContainer::RemoveAlarmL - Exit" );
}
@@ -768,6 +852,8 @@
AknLayoutScalable_Apps::popup_clock_analogue_window_cp03( KVGAPortraitVariant ).LayoutLine() );
}
+ SetCorrectRectForNewAlarmButton();
+
// Update the skinnable clock.
iSkinnableClock->SetExtent( skinClockRect.Rect().iTl, skinClockRect.Rect().Size() );
iSkinnableClock->UpdateDisplay();
@@ -789,7 +875,7 @@
__PRINTS( "CClockMainContainer::CountComponentControls - Exit" );
- return 2;
+ return 3;
}
// ---------------------------------------------------------
@@ -813,6 +899,14 @@
case 1:
{
+ __PRINTS( "CClockMainContainer::ComponentControl - Exit" );
+
+ // Return the new alarm button.
+ return iNewAlarmButton;
+ }
+
+ case 2:
+ {
__PRINTS( "CClockMainContainer::ComponentControl - Exit" );
// Return the listbox.
@@ -863,6 +957,13 @@
{
iSkinnableClock->HandleResourceChange( aType );
}
+
+ // Allow the listbox to handle the resource change.
+ if( iNewAlarmButton )
+ {
+ iNewAlarmButton->HandleResourceChange( aType );
+ }
+
// Allow the listbox to handle the resource change.
if( iListBox )
{
@@ -1202,7 +1303,21 @@
// Cleanup.
CleanupStack::Pop( iconArray );
-
+
+ // construct the "New Alarm" button
+ iNewAlarmButton = CAknButton::NewL( NULL, NULL, NULL, NULL,
+ iAlarmArray->NewAlarmText()->Des(),iAlarmArray->NewAlarmText()->Des(), 0, 0 );
+ iNewAlarmButton->SetParent( this );
+ iNewAlarmButton->SetContainerWindowL( *this );
+ //TAknLayoutRect newAlarmButtonRect;
+ // Get the skinnable clock rect.
+ //newAlarmButtonRect.LayoutRect( listRect.Rect(),
+ // AknLayoutScalable_Apps::main_clock2_btn_pane( layoutOrientation ).LayoutLine() );
+
+ //iNewAlarmButton->SetRect( newAlarmButtonRect.Rect() );
+ SetCorrectRectForNewAlarmButton();
+ iNewAlarmButton->SetObserver( this );
+ iNewAlarmButton->ActivateL();
// Add the icon for DST indicator.
AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
KAknsIIDQgnIndiDstAdd,
@@ -1479,4 +1594,80 @@
return timeUpdateOn;
}
+void CClockMainContainer::HandleControlEventL( CCoeControl* aControl,
+ TCoeEvent aEventType )
+ {
+ if ( aControl == iNewAlarmButton && aEventType == MCoeControlObserver::EEventStateChanged )
+ {
+ iView->HandleCommandL( EClockNewAlarm );
+ }
+ }
+
+void CClockMainContainer::SetCorrectRectForNewAlarmButton()
+ {
+ if( iNewAlarmButton )
+ {
+ TRect paneRect = this->Rect();
+ TAknLayoutRect newAlarmButtonRect;
+ TAknLayoutRect mainRect;
+ TInt displayOrientation( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 );
+ // Get the layout for the main rect.
+ mainRect.LayoutRect( paneRect,
+ AknLayoutScalable_Apps::main_clock2_pane().LayoutLine() );
+ if( displayOrientation )
+ {
+ // landscape
+ TInt alarmCount( 0 );
+ if( iListBox )
+ {
+ alarmCount = iListBox->Model()->ItemTextArray()->MdcaCount();
+ }
+ if( alarmCount > 0 )
+ {
+ if( iListBox )
+ {
+ iListBox->MakeVisible( ETrue );
+ }
+ // landscape if not empty alarm list
+ newAlarmButtonRect.LayoutRect( mainRect.Rect(),
+ AknLayoutScalable_Apps::main_clock2_btn_pane( displayOrientation ).LayoutLine() );
+ }
+ else
+ {
+ // landscape if empty alarm list
+ if( iListBox )
+ {
+ iListBox->MakeVisible( EFalse );
+ }
+ newAlarmButtonRect.LayoutRect( mainRect.Rect(),
+ AknLayoutScalable_Apps::main_clock2_btn_pane_cp01( displayOrientation ).LayoutLine() );
+ }
+ }
+ else
+ {
+ // portrait
+ if( iListBox )
+ {
+ iListBox->MakeVisible( ETrue );
+ }
+ newAlarmButtonRect.LayoutRect( mainRect.Rect(),
+ AknLayoutScalable_Apps::main_clock2_btn_pane( displayOrientation ).LayoutLine() );
+ }
+ iNewAlarmButton->SetRect( newAlarmButtonRect.Rect() );
+ }
+
+ }
+
+void CClockMainContainer::SwitchClockTypeL()
+ {
+ TRect skinClockRect = iSkinnableClock->Rect();
+ delete iSkinnableClock;
+ iSkinnableClock = NULL;
+ // Construct the skinnable clock.
+ iSkinnableClock = CAknSkinnableClock::NewL( this, ETrue, EFalse );
+ // Set the size of the clock.
+ iSkinnableClock->SetExtent( skinClockRect.iTl, skinClockRect.Size() );
+ iSkinnableClock->ActivateL();
+ iSkinnableClock->DrawDeferred();
+ }
// End of file
--- a/clock2/clockui/uilayer/clockmainview/src/clockmainview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockmainview/src/clockmainview.cpp Tue May 25 12:41:10 2010 +0300
@@ -26,6 +26,7 @@
#include <vtzrules.h>
#include <clockalarmeditor.h>
#include <hlplch.h>
+#include <touchfeedback.h>
// User includes
#include "clockmainview.h"
@@ -228,6 +229,73 @@
}
// ---------------------------------------------------------
+//papercut clock2 Remove_Snooze Start - rajender
+// CClockMainView::RemoveSnoozeL
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void CClockMainView::RemoveSnoozeL()
+ {
+ __PRINTS( "CClockMainView::RemoveSnoozeL - Entry" );
+ // First get the index of the selected item in the list.
+ TInt itemIndex( iContainer->ListBox()->CurrentItemIndex() );
+
+ if( KErrNone > itemIndex )
+ {
+ __PRINTS( "CClockMainView::RemoveSnoozeL - Exit" );
+ return;
+ }
+
+ SClkAlarmInfo alarmInfo;
+ TAlarmId alarmId;
+ // Get the alarm id from alarm model.
+ iAlarmArray->GetSortedAlmIdInfo( itemIndex, alarmId, alarmInfo );
+
+ // Delete the alarm.
+ User::LeaveIfError( iAlarmModel->AlarmRemoveSnooze( alarmId ) );
+
+ // Update the container.
+ iContainer->ListBox()->HandleItemAdditionL();
+
+ // Display the confirmation note to the user about alarm deletion.
+ //CAknConfirmationNote* confNote = new( ELeave ) CAknConfirmationNote;
+ //HBufC* confNoteText = StringLoader::LoadLC( R_QTN_CLOCK_SNOOZE_NOTE_REMOVED, iCoeEnv );
+ // Display the note.
+ //confNote->ExecuteLD( *confNoteText );
+ // Cleanup.
+ //CleanupStack::PopAndDestroy( confNoteText );
+
+ __PRINTS( "CClockMainView::RemoveSnoozeL - Exit" );
+
+ }
+
+// ---------------------------------------------------------
+// CClockMainView::RemoveAlarmL
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void CClockMainView::RemoveAlarmL( TAlarmId aAlarmId )
+ {
+ __PRINTS( "CClockMainView::RemoveAlarmL - Entry" );
+
+ // First get the index of the selected item in the list.
+ TInt itemIndex( iAlarmArray->ListBoxIndex( aAlarmId ) );
+
+ if( KErrNone > itemIndex )
+ {
+ __PRINTS( "CClockMainView::RemoveAlarmL - Exit" );
+
+ return;
+ }
+ // Delete the alarm.
+ User::LeaveIfError( iAlarmModel->DeleteClockAlarm( aAlarmId ) );
+ // Update the container.
+ iContainer->RemoveAlarmL( itemIndex );
+
+ __PRINTS( "CClockMainView::RemoveAlarmL - Exit" );
+ }
+
+// ---------------------------------------------------------
// CClockMainView::RemoveAlarmL
// rest of the details are commented in the header
// ---------------------------------------------------------
@@ -239,7 +307,7 @@
// First get the index of the selected item in the list.
TInt itemIndex( iContainer->ListBox()->CurrentItemIndex() );
- if( KErrNone >= itemIndex )
+ if( KErrNone > itemIndex )
{
__PRINTS( "CClockMainView::RemoveAlarmL - Exit" );
@@ -254,15 +322,6 @@
// Delete the alarm.
User::LeaveIfError( iAlarmModel->DeleteClockAlarm( alarmId ) );
-
- // Display the confirmation note to the user about alarm deletion.
- CAknConfirmationNote* confNote = new( ELeave ) CAknConfirmationNote;
- HBufC* confNoteText = StringLoader::LoadLC( R_QTN_CLOCK_ALARM_NOTE_DELETED, iCoeEnv );
- // Display the note.
- confNote->ExecuteLD( *confNoteText );
- // Cleanup.
- CleanupStack::PopAndDestroy( confNoteText );
-
// Update the container.
iContainer->RemoveAlarmL( itemIndex );
@@ -365,7 +424,25 @@
// Show the navigation pane again.
appUi->MakeNavigationPaneVisible( ETrue, EClockAppMainViewId );
+
+ if( EClockAlarmDelete == iAlarmId )
+ {
+ // Mark the alarm editor as closed.
+ iAlarmEditorOpen = EFalse;
+ if( alarmEditor )
+ {
+ delete alarmEditor;
+ alarmEditor = NULL;
+ }
+ __PRINTS( "CClockMainView::ResetAlarmL:EClockAlarmDelete - Exit" );
+
+ // do the removing of the alarm
+ RemoveAlarmL( alarmId );
+
+ return;
+ }
+
if( EClockAlarmExit == iAlarmId )
{
// Mark the alarm editor as closed.
@@ -555,7 +632,15 @@
clockAppUi->MakeNavigationPaneVisible( ETrue, EClockAppMainViewId );
// Activate the container.
- iContainer->ActivateL();
+ if( clockAppUi->TransitionOngoing() )
+ {
+ //clockAppUi->DoAppearTransition( iContainer );
+ iContainer->ActivateL();
+ }
+ else
+ {
+ iContainer->ActivateL();
+ }
__PRINTS( "CClockMainView::DoActivateL - Exit" );
}
@@ -575,7 +660,11 @@
if( iContainer )
{
-
+ CClockAppUi* clockAppUi( static_cast< CClockAppUi* > ( AppUi() ) );
+ if( clockAppUi->TransitionOngoing() )
+ {
+ //clockAppUi->DoDisappearTransition( iContainer );
+ }
// First remove the container from the control stack
( AppUi() )->RemoveFromStack( iContainer );
// And then destroy it.
@@ -600,14 +689,7 @@
//Single click integration
case EClockSelect:
{
- if ( iContainer->ListBox()->CurrentItemIndex() == 0 )
- {
- SetNewAlarmL();
- }
- else
- {
- ResetAlarmL();
- }
+ ResetAlarmL();
}
break;
@@ -645,7 +727,18 @@
RemoveAlarmL();
}
break;
-
+ case EClockRemoveSnooze:
+ {
+ // Remove snooze on the selected alarm
+ RemoveSnoozeL();
+ }
+ break;
+ case EClockSwitchClockType:
+ {
+ // Switches clock type
+ SwitchClockTypeL();
+ }
+ break;
case EClockSettings:
{
// Let the appui handle the command.
@@ -705,7 +798,14 @@
if( KErrNotFound == currentlyFocussedItem )
{
TInt itemCount = iContainer->ListBox()->Model()->ItemTextArray()->MdcaCount();
- iContainer->ListBox()->SetCurrentItemIndexAndDraw( itemCount -1 );
+ if( itemCount > 0 )
+ {
+ iContainer->ListBox()->SetCurrentItemIndexAndDraw( itemCount -1 );
+ }
+ else
+ {
+ iContainer->ListBox()->SetCurrentItemIndexAndDraw( KZeroAlarms );
+ }
}
@@ -741,16 +841,17 @@
TInt alarmCount = iAlarmArray->MdcaCount();
+ TBool deleteRemoveSnooze( EFalse );
- // There are no alarms set or the current focussed listitem is "New Alarm" then remove alarm specific options
- if( KZeroAlarms >= alarmCount || ( KErrNone == iContainer->ListBox()->CurrentItemIndex() ) )
+ // There are no alarms set
+ if( KZeroAlarms >= alarmCount )
{
// There are no alarms set. Remove the irrelevant options from the menu.
- aMenuPane->DeleteMenuItem( EClockNewAlarm );
aMenuPane->DeleteMenuItem( EClockResetAlarm );
aMenuPane->DeleteMenuItem( EClockRemoveAlarm );
aMenuPane->DeleteMenuItem( EClockActivateAlarm );
aMenuPane->DeleteMenuItem( EClockDeactivateAlarm );
+ deleteRemoveSnooze = ETrue;
}
else
{
@@ -773,16 +874,26 @@
{
// Alarm is not recurring. Remove the deactivate option from the menu.
aMenuPane->DeleteMenuItem( EClockDeactivateAlarm );
+ // no snooze removing needed for not recurring
+ deleteRemoveSnooze = ETrue;
+ }
+ // if the alarm is not snoozed, Remove the 'Remove snooze' option
+ if (alarmInfo.iState != EAlarmStateSnoozed )
+ {
+ deleteRemoveSnooze = ETrue;
}
}
else
{
// Alarm is already inactive. Remove the deactivate option from the menu.
aMenuPane->DeleteMenuItem( EClockDeactivateAlarm );
+ deleteRemoveSnooze = ETrue;
}
}
-
-
+ if( deleteRemoveSnooze )
+ {
+ aMenuPane->DeleteMenuItem( EClockRemoveSnooze );
+ }
__PRINTS( "CClockMainView::DynInitMenuPaneL - Exit" );
}
@@ -1231,4 +1342,27 @@
return returnValue;
}
+void CClockMainView::GiveVibes()
+ {
+ CClockAppUi* clockAppUi( static_cast< CClockAppUi* > ( AppUi() ) );
+ if ( clockAppUi->GetFeedback() &&
+ clockAppUi->GetFeedback()->TouchFeedbackSupported() )
+ {
+ clockAppUi->GetFeedback()->InstantFeedback( ETouchFeedbackBasic );
+ }
+ }
+
+void CClockMainView::SwitchClockTypeL()
+ {
+ TLocale phoneLocale;
+ // Set the new clock format with the locale.
+ phoneLocale.SetClockFormat( ( EClockAnalog == phoneLocale.ClockFormat() )
+ ? EClockDigital : EClockAnalog );
+ phoneLocale.Set();
+ if( iContainer )
+ {
+ iContainer->SwitchClockTypeL();
+ }
+ }
+
// End of file
--- a/clock2/clockui/uilayer/clockworldview/src/clockworldview.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/clockworldview/src/clockworldview.cpp Tue May 25 12:41:10 2010 +0300
@@ -592,7 +592,15 @@
}
// Activate the container.
- iContainer->ActivateL();
+ if( ClockApplicationUi()->TransitionOngoing() )
+ {
+ //ClockApplicationUi()->DoAppearTransition( iContainer );
+ iContainer->ActivateL();
+ }
+ else
+ {
+ iContainer->ActivateL();
+ }
iContainer->SetRect( ClientRect() );
@@ -937,7 +945,6 @@
return;
}
- HBufC* queryText( NULL );
TInt currentListItem( iContainer->ListBox()->CurrentItemIndex() );
// Get information about the city selected.
--- a/clock2/clockui/uilayer/data/clock.rss Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/data/clock.rss Tue May 25 12:41:10 2010 +0300
@@ -128,6 +128,12 @@
txt = qtn_clk_activate_alarm;
flags = EEikMenuItemSpecific;
},
+ MENU_ITEM
+ {
+ command = EClockRemoveSnooze;
+ txt = qtn_clk_remove_snooze;
+ flags = EEikMenuItemSpecific;
+ },
MENU_ITEM
{
command = EClockRemoveAlarm;
@@ -590,5 +596,15 @@
#include "clkdatetimeview.ra"
#include "clockalarmeditor.ra"
#include "clockcityselectionlist.ra"
+// Resource definitions
+// ---------------------------------------------------------
+// r_qtn_clock_alarm_note_deleted
+// Resource for string "Alarm deleted from Alarm view"
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_qtn_clock_snooze_note_removed
+ {
+ buf = qtn_clk_snooze_note_removed;
+ }
// End of file
--- a/clock2/clockui/uilayer/group/clock.mmp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/group/clock.mmp Tue May 25 12:41:10 2010 +0300
@@ -164,7 +164,9 @@
LIBRARY hlplch.lib
LIBRARY iaupdateapi.lib
LIBRARY featmgr.lib
-
-LIBRARY thumbnailmanager.lib
+LIBRARY gfxtrans.lib // effect manager
+LIBRARY thumbnailmanager.lib
+LIBRARY ws32.lib
+LIBRARY touchfeedback.lib
// End of file
--- a/clock2/clockui/uilayer/inc/clock.hrh Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/inc/clock.hrh Tue May 25 12:41:10 2010 +0300
@@ -29,8 +29,11 @@
EClockSettings,
EClockMainViewHelp,
EClockMainViewExit,
+ EClockSwitchClockType,
//single click integration
- EClockSelect
+ EClockSelect,
+//remove snooze
+ EClockRemoveSnooze
};
/** Menu item command ids for world view */
--- a/clock2/clockui/uilayer/inc/clockappui.h Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/inc/clockappui.h Tue May 25 12:41:10 2010 +0300
@@ -36,6 +36,8 @@
class CAknNavigationDecorator;
class CIAUpdate;
class CIAUpdateParameters;
+class CTransitionEffectManager;
+class MTouchFeedback;
// Class declaration
/**
@@ -47,6 +49,16 @@
public MAknTabObserver,
public MIAUpdateObserver
{
+
+ public: // enums
+
+ enum TTransitionDirection
+ {
+ ETransitionUndefined = 0,
+ ETransitionLeft,
+ ETransitionRight
+ };
+
public: // Constructor and destructor
/**
@@ -145,6 +157,23 @@
*/
TBool IsAppExitHidden();
+ TBool TransitionOngoing() const;
+
+ void SetTransitionOngoing( TBool aTransitionOngoing );
+
+ TInt TransitionGroupId() const;
+
+ void SetTransitionGroupId( TInt aId );
+
+ TTransitionDirection TransitionDirection() const;
+
+ void SetTransitionDirection( TTransitionDirection aId );
+
+ void DoDisappearTransition( CCoeControl* aControl );
+
+ void DoAppearTransition( CCoeControl* aControl );
+
+
/**
* @brief Hides or Un-hides the navigation pane.
* @param aVisible ETrue, pane will be visible. EFalse will be hidden.
@@ -156,6 +185,14 @@
* @brief Handles IAD related updates.
*/
void HandleIADUpdateL();
+
+
+ //papercut Ana/Digital No24Rpeat Start- rajender
+ /**
+ * @brief returns handle to tactile feedback.
+ */
+ MTouchFeedback* GetFeedback();
+ //papercut Ana/Digital No24Rpeat End- rajender
private: // New functions
@@ -237,6 +274,13 @@
* @brief Object of CIAUpdateParameters class.
*/
CIAUpdateParameters* iParameters;
+
+ TBool iTransitionOngoing;
+ TInt iTransitionGroupId;
+ TBool iTactileFeedbackSupported;
+ TTransitionDirection iTransitionDirection;
+
+ MTouchFeedback* iFeedback;
};
#endif // __CLOCK_APPUI_H__
--- a/clock2/clockui/uilayer/loc/clockapp.loc Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/loc/clockapp.loc Tue May 25 12:41:10 2010 +0300
@@ -340,5 +340,17 @@
//r: 5.1
//
#define qtn_clk_note_location_max "Unable to add more.Remove some locations."
+//d: Used in Alarm Clock view. Used in confirmation note of deleting a snooze.
+//l: popup_note_window
+//w:
+//r: tb9.2
+//
+#define qtn_clk_remove_snooze "Remove Snooze"
+//d: In Alarm's view while removing the snooze.
+//l: popup_note_window
+//w:
+//r: tb9.2
+//
+#define qtn_clk_snooze_note_removed "Snooze removed"
// End of file
--- a/clock2/clockui/uilayer/src/clockappui.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uilayer/src/clockappui.cpp Tue May 25 12:41:10 2010 +0300
@@ -29,6 +29,8 @@
#include <featmgr.h>
#include <e32property.h>
#include <startupdomainpskeys.h>
+#include <touchfeedback.h>
+#include <gfxtranseffect/gfxtranseffect.h>
// User includes
#include "clock.h"
@@ -53,6 +55,13 @@
EChangesFreeMemory |
EChangesOutOfMemory );
+// constants for control effects
+const TInt KGfxControlPageSwitchDisappear = 4;
+const TInt KGfxControlPageSwitchAppear = 3;
+
+const TUid KControlUid1 = {0x2000B47C};
+const TUid KControlUid2 = {0x2000B47D};
+
// Literals
_LIT( KIconFileName, "\\resource\\apps\\clockapp_tab.mif" );
_LIT( KIAParamExec, "clock.exe" );
@@ -133,7 +142,9 @@
CClkDateTimeView* dateTimeView = CClkDateTimeView::NewLC( KClockAppMainViewId, ETrue );
AddViewL( dateTimeView );
CleanupStack::Pop( dateTimeView );
-
+
+ iTactileFeedbackSupported = FeatureManager::FeatureSupported( KFeatureIdTactileFeedback );
+
// Start the model.
alarmModel->Start();
@@ -296,6 +307,8 @@
case EClockAppMainViewId:
{
// The main view.
+ iTransitionOngoing = ETrue;
+ iTransitionDirection = ETransitionLeft;
ActivateLocalViewL( KClockAppMainViewId );
}
break;
@@ -303,6 +316,8 @@
case EClockAppWorldViewId:
{
// The clockworld view.
+ iTransitionOngoing = ETrue;
+ iTransitionDirection = ETransitionRight;
ActivateLocalViewL( KClockAppWorldViewId );
}
break;
@@ -504,7 +519,10 @@
{
// Set the title pane text first
SetTitlePaneTextL( R_CLOCK_TITLE_SETTINGS );
-
+
+ // Activate the date and time settings view
+ ActivateLocalViewL( KClkDateTimeViewId );
+
// Don't display the navigation pane when switching to settings view.
if( iNavigationDecorator )
{
@@ -546,9 +564,16 @@
viewId.iViewUid = KClockAppMainViewId;
// Switch to the main view
- // ActivateLocalViewL( KClockAppMainViewId, KClockAppMainViewId, KNullDesC8() );
- TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( viewId, TUid::Uid(KClockHideInBackground), KNullDesC8 ) ) ;
-
+ if( iTabGroup->ActiveTabId() == EClockAppWorldViewId )
+ {
+ ActivateLocalViewL( KClockAppMainViewId, TUid::Uid(KClockHideInBackground), KNullDesC8() );
+ //TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( viewId, TUid::Uid(KClockHideInBackground), KNullDesC8 ) ) ;
+ }
+ else
+ {
+ // ActivateLocalViewL( KClockAppMainViewId, KClockAppMainViewId, KNullDesC8() );
+ TRAP_IGNORE( CAknViewAppUi::CreateActivateViewEventL( viewId, TUid::Uid(KClockHideInBackground), KNullDesC8 ) ) ;
+ }
// Update the tab.
iTabGroup->SetActiveTabById( EClockAppMainViewId );
}
@@ -697,4 +722,84 @@
}
__PRINTS( "CClockAppUi::HandleIADUpdateL - Exit" );
}
+
+TBool CClockAppUi::TransitionOngoing() const
+ {
+ return iTransitionOngoing;
+ }
+
+void CClockAppUi::SetTransitionOngoing( TBool aTransitionOngoing )
+ {
+ iTransitionOngoing = aTransitionOngoing;
+ }
+
+void CClockAppUi::SetTransitionGroupId( TInt aId )
+ {
+ iTransitionGroupId = aId;
+ }
+
+TInt CClockAppUi::TransitionGroupId() const
+ {
+ return iTransitionGroupId;
+ }
+
+CClockAppUi::TTransitionDirection CClockAppUi::TransitionDirection() const
+ {
+ return iTransitionDirection;
+ }
+
+void CClockAppUi::SetTransitionDirection( CClockAppUi::TTransitionDirection aDirection )
+ {
+ iTransitionDirection = aDirection;
+ }
+
+void CClockAppUi::DoDisappearTransition( CCoeControl* aControl )
+ {
+ if( aControl && iTransitionOngoing )
+ {
+ if( iTransitionDirection == ETransitionLeft )
+ {
+ GfxTransEffect::Register( aControl, KControlUid2 );
+ }
+ else
+ {
+ GfxTransEffect::Register( aControl, KControlUid1 );
+ }
+ GfxTransEffect::Begin( aControl, KGfxControlPageSwitchDisappear );
+ aControl->MakeVisible( EFalse );
+ GfxTransEffect::SetDemarcation( aControl, aControl->Rect() );
+ GfxTransEffect::End( aControl );
+ GfxTransEffect::EndGroup( iTransitionGroupId );
+ iTransitionOngoing = EFalse;
+ }
+ }
+
+void CClockAppUi::DoAppearTransition( CCoeControl* aControl )
+ {
+ if( aControl && iTransitionOngoing )
+ {
+ if( iTransitionDirection == ETransitionLeft )
+ {
+ GfxTransEffect::Register( aControl, KControlUid2 );
+ }
+ else
+ {
+ GfxTransEffect::Register( aControl, KControlUid1 );
+ }
+ iTransitionGroupId = GfxTransEffect::BeginGroup();
+ GfxTransEffect::Begin( aControl, KGfxControlPageSwitchAppear );
+ aControl->MakeVisible( ETrue );
+ GfxTransEffect::SetDemarcation( aControl, aControl->Rect() );
+ GfxTransEffect::End( aControl );
+ }
+ }
+
+MTouchFeedback* CClockAppUi::GetFeedback()
+ {
+ if( !iFeedback && iTactileFeedbackSupported )
+ {
+ iFeedback = MTouchFeedback::Instance();
+ }
+ return iFeedback;
+ }
// End of file
--- a/clock2/clockui/uimodel/bwins/clkuimodelu.def Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uimodel/bwins/clkuimodelu.def Tue May 25 12:41:10 2010 +0300
@@ -43,4 +43,5 @@
?SetModelObserver@CClkUiModelBase@@QAEXPAVMClkModelObserver@@@Z @ 42 NONAME ; void CClkUiModelBase::SetModelObserver(class MClkModelObserver *)
?Start@CClkUiModelBase@@QAEXXZ @ 43 NONAME ; void CClkUiModelBase::Start(void)
?Stop@CClkUiModelBase@@QAEXXZ @ 44 NONAME ; void CClkUiModelBase::Stop(void)
+ ?AlarmRemoveSnooze@CClkUiAlarmModel@@QAEHH@Z @ 45 NONAME ; int CClkUiAlarmModel::AlarmRemoveSnooze(int)
--- a/clock2/clockui/uimodel/eabi/clkuimodelu.def Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uimodel/eabi/clkuimodelu.def Tue May 25 12:41:10 2010 +0300
@@ -70,4 +70,5 @@
_ZTV29CClkUiMdlIntermediateObserver @ 69 NONAME ; #<VT>#
_ZThn4_N18CClkUiIdleObserver13HandleUpdateLEi @ 70 NONAME ; #<thunk>#
_ZThn4_N29CClkUiMdlIntermediateObserver13HandleUpdateLEi @ 71 NONAME ; #<thunk>#
+ _ZN16CClkUiAlarmModel17AlarmRemoveSnoozeEi @ 72 NONAME
--- a/clock2/clockui/uimodel/inc/clkuialarmmodel.h Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uimodel/inc/clkuialarmmodel.h Tue May 25 12:41:10 2010 +0300
@@ -71,6 +71,13 @@
IMPORT_C TInt DeleteClockAlarm( TAlarmId aAlarmId );
/**
+ * @brief Deletes a clock alarm with
+ * @param aAlarmId The id of the alarm to be deleted.
+ * @return TInt Symbian OS error code.
+ */
+ IMPORT_C TInt AlarmRemoveSnooze ( TAlarmId aAlarmId );
+
+ /**
* @brief Enable or disable a clock alarm.
* @param aAlarmId The id of the clock alarm.
* @param aState The status to which the alarm has to be changed.
--- a/clock2/clockui/uimodel/src/clkuialarmmodel.cpp Tue May 11 16:12:24 2010 +0300
+++ b/clock2/clockui/uimodel/src/clkuialarmmodel.cpp Tue May 25 12:41:10 2010 +0300
@@ -101,6 +101,32 @@
}
// ---------------------------------------------------------
+// CClkUiAlarmModel::StopClockAlarm
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::AlarmRemoveSnooze ( TAlarmId aAlarmId )
+ {
+
+ TInt returnVal( KErrNone );
+ SClkAlarmInfo alarmInfo;
+ returnVal = ClockAlarmInfo( aAlarmId, alarmInfo);
+ if ( returnVal != KErrNone )
+ {
+ return returnVal;
+ }
+ returnVal = iAlarmSrvSes.AlarmDelete( aAlarmId );
+ if ( returnVal != KErrNone )
+ {
+ return returnVal;
+ }
+ alarmInfo.iState = EAlarmStateInPreparation;
+ alarmInfo.iAlarmTime = alarmInfo.iOrigExpiryTime;
+ return ClockAlarmSet( alarmInfo );
+
+ }
+
+// ---------------------------------------------------------
// CClkUiAlarmModel::ClockAlarmEnable
// rest of the details are commented in the header
// ---------------------------------------------------------
--- a/notepad/notepad1/LibData/NpdLib.rss Tue May 11 16:12:24 2010 +0300
+++ b/notepad/notepad1/LibData/NpdLib.rss Tue May 25 12:41:10 2010 +0300
@@ -442,17 +442,17 @@
// 'Send' is added by SendUi.
MENU_ITEM
{
- command = ENotepadCmdAdd;
- txt = qtn_nmake_om_add_new;
+ command = ENotepadCmdDelete;
+ txt = qtn_nmake_om_delete_memo;
+ flags = EEikMenuItemSpecific;
},
MENU_ITEM
{
- command = ENotepadCmdDelete;
- txt = qtn_nmake_om_delete_memo;
- flags = EEikMenuItemSpecific;
- }
+ command = ENotepadCmdAdd;
+ txt = qtn_nmake_om_add_new;
+ },
// START CSW change
- ,MENU_ITEM
+ MENU_ITEM
{
command = ENotepadCmdPrint; // Same ID as in interest.
txt = ""; // AIW plugin will set the text.
--- a/notepad/notepad1/LibSrc/NpdListDialog.cpp Tue May 11 16:12:24 2010 +0300
+++ b/notepad/notepad1/LibSrc/NpdListDialog.cpp Tue May 25 12:41:10 2010 +0300
@@ -965,6 +965,11 @@
// this must after InsertSendMenuItemAfterL
aMenuPane->DeleteMenuItem(ENotepadCmdOpen);
}
+ if ( markCount >= 1 )
+ {
+ aMenuPane->SetItemSpecific( ENotepadCmdSend, EFalse );
+ aMenuPane->SetItemSpecific( ENotepadCmdDelete, EFalse );
+ }
if ( iListBox->CurrentItemIndex() == 0 && IsNotepad() && memoCount > 0)
{
aMenuPane->SetItemDimmed( ENotepadCmdDelete, ETrue );
--- a/notepad/notepad1/LibSrc/NpdViewerDialog.cpp Tue May 11 16:12:24 2010 +0300
+++ b/notepad/notepad1/LibSrc/NpdViewerDialog.cpp Tue May 25 12:41:10 2010 +0300
@@ -38,6 +38,7 @@
#include <centralrepository.h>
#include <CommonUiInternalCRKeys.h>
#include <akntitle.h>
+#include <touchfeedback.h>
#include <NpdLib.rsg>
#include "NpdLib.hrh"
@@ -106,6 +107,7 @@
}
delete iFilename;
delete iSendUi;
+ iAutoFinder->SetItemFinderObserverL (0);
delete iAutoFinder;
delete iFindMenu;
if( iNotifier )
@@ -234,7 +236,7 @@
iEditor->SetAmountToFormat(iEditor->Text()->DocumentLength());
iEditor->HandleTextChangedL();
iAutoFinder->SetEditor((CEikRichTextEditor**)&iEditor);
-
+ iAutoFinder->SetItemFinderObserverL( this );
RefreshTitleL();
}
@@ -252,7 +254,7 @@
iEditor->SetAmountToFormat(iEditor->Text()->DocumentLength());
iEditor->HandleTextChangedL();
iAutoFinder->SetEditor((CEikRichTextEditor**)&iEditor);
-
+ iAutoFinder->SetItemFinderObserverL( this );
RefreshTitleL();
if( error != KErrNone)
{
@@ -363,6 +365,7 @@
case EAknSoftkeyContextOptions:
{
iFlags |= ENotepadMenuByOkKey;
+ iFlags &= ~EMenuByItemActication;
DisplayMenuL();
isOk= EFalse;
}
@@ -377,6 +380,7 @@
case EAknSoftkeyOptions:
iTaskSwapperFlag = ETrue;
default:
+ iFlags &= ~EMenuByItemActication;
isOk = CAknDialog::OkToExitL(aButtonId);
break;
}
@@ -530,7 +534,9 @@
iEditor->SetAmountToFormat(iContent.Length()); // Will ensure first Format in SetTextL is in correct mode
iEditor->HandleTextChangedL();
iAutoFinder->SetEditor((CEikRichTextEditor**)&iEditor);
+ iAutoFinder->SetItemFinderObserverL( this );
RefreshTitleL();
+ iEditor->EnableKineticScrollingL( ETrue );
}
}
@@ -577,6 +583,17 @@
return keyResponse;
}
+void CNotepadViewerDialog::HandleFindItemEventL(
+ const CItemFinder::CFindItemExt& aItem,
+ MAknItemFinderObserver::TEventFlag aEvent,
+ TUint aFlags)
+ {
+ if ( MAknItemFinderObserver::EPointerEvent == aEvent )
+ {
+ iFlags |= ENotepadMenuByOkKey;
+ }
+ iFlags |= EMenuByItemActication;
+ }
// -----------------------------------------------------------------------------
// CNotepadViewerDialog::HandleDialogPointerEventL
// from CoeControl
@@ -588,17 +605,40 @@
{
return;
}
-
- if( aPointerEvent.iType == TPointerEvent::EButton1Up )
- {
- TRect rect = iEditor->Rect();
- if ( !iAutoFinder->ItemWasTappedL( aPointerEvent.iPosition - rect.iTl ) )
- {
- return;
- }
-
- DisplayMenuL();
- }
+ if( CItemFinder::ENoneSelected == iAutoFinder->CurrentItemExt().iItemType )
+ {
+ // when you selected is not item, return
+ return;
+ }
+ MTouchFeedback* feedback = MTouchFeedback::Instance();
+ TTouchLogicalFeedback fbLogicalType;
+ TTouchFeedbackType fbType;
+ switch( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ fbLogicalType = ETouchFeedbackBasic;
+ fbType = TTouchFeedbackType( ETouchFeedbackAudio|ETouchFeedbackVibra );
+ }
+ break;
+ case TPointerEvent::EButton1Up:
+ {
+ fbLogicalType = ETouchFeedbackIncreasingPopUp;
+ fbType = ETouchFeedbackVibra;
+ }
+ break;
+ default:
+ return;
+ }
+ if ( feedback )
+ {
+ feedback->InstantFeedback( this,
+ fbLogicalType, fbType, TPointerEvent() );
+ if( ETouchFeedbackVibra == fbType )
+ {
+ DisplayMenuL();
+ }
+ }
}
// -----------------------------------------------------------------------------
@@ -689,7 +729,24 @@
{
if ( iFindMenu->CommandIsValidL(aCommandId) ) // can't really leave
{
+ TBool selectionVisibility ( ETrue );
+ if ( aCommandId == EFindItemCmdCopy && iAutoFinder && iEditor && iEditor->TextView() )
+ {
+ selectionVisibility = iEditor->TextView()->SelectionVisible();
+ iEditor->TextView()->SetSelectionVisibilityL( EFalse );
+ const CItemFinder::CFindItemExt& item = iAutoFinder->CurrentItemExt();
+ iEditor->SetSelectionL( item.iStart, item.iEnd + 1 );
+ }
+
iFindMenu->HandleItemFinderCommandL(aCommandId);
+
+ if ( aCommandId == EFindItemCmdCopy && iAutoFinder && iEditor && iEditor->TextView() )
+ {
+ iEditor->TextView()->SetSelectionVisibilityL( selectionVisibility );
+ iEditor->ClearSelectionL();
+ iEditor->DrawDeferred(); // sometimes editor does not update itself
+ }
+
return;
}
CNotepadDialogBase::ProcessCommandL(aCommandId);
@@ -710,6 +767,16 @@
__ASSERT_DEBUG(aResourceId > 0, Panic(ENotepadLibraryPanicNoMenuResource));
__ASSERT_DEBUG(aMenuPane, Panic(ENotepadLibraryPanicNullMenuPane));
__ASSERT_DEBUG(iEditor, Panic(ENotepadLibraryPanicNoEdwin));
+
+ const TBool activatedByItemActication = iFlags & EMenuByItemActication;
+ if ( !activatedByItemActication && iEditor && iAutoFinder
+ && iEditor->SelectionLength() !=
+ ( iAutoFinder->CurrentItemExt().iEnd -
+ iAutoFinder->CurrentItemExt().iStart + 1 ) )
+ {
+ iAutoFinder->ResetCurrentItem(); // do not show item specific commands
+ }
+
TInt index;
switch ( aResourceId )
{
--- a/notepad/notepad1/inc/NpdViewerDialog.h Tue May 11 16:12:24 2010 +0300
+++ b/notepad/notepad1/inc/NpdViewerDialog.h Tue May 25 12:41:10 2010 +0300
@@ -24,6 +24,7 @@
#include "NpdDialogBase.h"
#include <centralrepository.h>
#include <cenrepnotifyhandler.h>
+#include <itemfinderobserver.h>
// FORWARD DECLARATIONS
class CNotepadRichTextEditor;
@@ -41,7 +42,9 @@
* @see CNotepadDialogBase
*/
class CNotepadViewerDialog : public CNotepadDialogBase,
- public MCenRepNotifyHandlerCallback
+ public MCenRepNotifyHandlerCallback,
+ public MAknItemFinderObserver
+
{
public: // Constructor and destructor
@@ -214,6 +217,12 @@
void SizeChanged();
public:
void HandleDialogPointerEventL( const TPointerEvent& aPointerEvent );
+
+ void HandleFindItemEventL(
+ const CItemFinder::CFindItemExt& aItem,
+ MAknItemFinderObserver::TEventFlag aEvent,
+ TUint aFlags );
+
private: // New function
@@ -307,7 +316,8 @@
enum TNotepadViewerFlags
{
- ENotepadMenuByOkKey = 0x02
+ ENotepadMenuByOkKey = 0x02,
+ EMenuByItemActication = 0x04
};
CNotepadRichTextEditor* iEditor; // not own (dialog own)
HBufC* iFilename; // own
--- a/pimappservices/calendar/client/src/calentryimpl.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/client/src/calentryimpl.cpp Tue May 25 12:41:10 2010 +0300
@@ -615,11 +615,11 @@
const TAgnRpt* KRpt = KRptDef->RRule();
// get the DTSTART property
- if (SimpleEntry()->Type() == CCalEntry::ETodo)
- {
- aRule.SetDtStart(EndTimeL());
- }
- else
+// if (SimpleEntry()->Type() == CCalEntry::ETodo)
+// {
+// aRule.SetDtStart(EndTimeL());
+// }
+// else
{
aRule.SetDtStart(StartTimeL());
}
--- a/pimappservices/calendar/server/src/agsentrymodel.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/server/src/agsentrymodel.cpp Tue May 25 12:41:10 2010 +0300
@@ -85,6 +85,10 @@
iAttachmentIndex = new (ELeave) CAgnAttachmentIndex;
CreateAlarmForServerL();
}
+
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError( iFs.ShareProtected() );
+
iIndexFileIsDirty = ETrue; // for safety assume that the index
// file is out of date. We can correct this
// when we read the file
@@ -113,6 +117,7 @@
delete iModelStreamIdSet;
delete iEntryManager;
delete iCalConverter;
+ iFs.Close();
}
const CAgnServFile& CAgnEntryModel::AgnServFile()
@@ -1415,12 +1420,8 @@
if (!GenerateIndexFileName(idxfilename))
{
User::Leave(KErrBadName);
- }
-
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
- iFs.Delete(idxfilename); // ignore return as there is nothing we can do with it
+ }
+ iFs.Delete(idxfilename); // ignore return as there is nothing we can do with it
}
iIndexFileIsDirty = ETrue;
}
@@ -1455,9 +1456,6 @@
User::Leave(KErrBadName);
}
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
RFile idxFile;
TInt errReadIdx = idxFile.Open(iFs, idxfilename, EFileRead);
CleanupClosePushL(idxFile);
@@ -1531,10 +1529,7 @@
{
User::Leave(KErrBadName);
}
-
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
+
RFile idxFile;
TInt errReadIdx = idxFile.Open(iFs, idxfilename, EFileRead);
CleanupClosePushL(idxFile);
@@ -1558,9 +1553,7 @@
{
User::Leave(KErrBadName);
}
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
+
RFile idxFile;
TInt errWriteIdx = idxFile.Replace(iFs, idxfilename, EFileWrite);
User::LeaveIfError(errWriteIdx);
@@ -2712,6 +2705,15 @@
NotifyingL(MCalChangeCallBack2::EChangeModify, aEntry, instanceInfoBefore);
+ if(iChangeFilter && iTzRuleIndex)
+ {
+ //Remove the tz rule from tz rule index
+ //we have to do it after CAgnEntryModel::NotifyingL that is indirectly using the
+ //tz rule in oldEntry.
+ iTzRuleIndex->RemoveTzRuleL(*oldEntry);
+ }
+
+
CleanupStack::PopAndDestroy(instanceInfoBefore);
CleanupStack::PopAndDestroy(oldEntry);
--- a/pimappservices/calendar/server/src/agstzruleindex.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/server/src/agstzruleindex.cpp Tue May 25 12:41:10 2010 +0300
@@ -592,7 +592,7 @@
@param aOldEntry reference to the original entry to be updated.
@param aNewEntry reference to the entry containing updated content.
*/
-void CAgnTzRuleIndex::UpdateTzRuleL(CAgnEntry& aOldEntry, CAgnEntry& aNewEntry)
+void CAgnTzRuleIndex::UpdateTzRuleL(CAgnEntry& /*aOldEntry*/, CAgnEntry& aNewEntry)
{
CAgnTzRules* newTzZone = GetTzRulesFromEntry(aNewEntry);
if (newTzZone != NULL && newTzZone->HasValidTzZoneStreamId())
@@ -620,7 +620,6 @@
AddTzRuleL(aNewEntry);
}
- RemoveTzRuleL(aOldEntry);
}
void CAgnTzRuleIndex::UpdateItemsInStoreL(
--- a/pimappservices/calendar/shared/src/agmcalendarinfo.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmcalendarinfo.cpp Tue May 25 12:41:10 2010 +0300
@@ -121,8 +121,9 @@
EXPORT_C CDesC8Array* CAgnCalendarInfo::PropertyKeysL() const
{
const TInt KPropertyCount(iProperties.Count());
+ const TInt propertyCount = KPropertyCount==0 ? 1 : KPropertyCount;
- CDesC8Array* propertyKeys = new(ELeave) CDesC8ArrayFlat(KPropertyCount);
+ CDesC8Array* propertyKeys = new(ELeave) CDesC8ArrayFlat(propertyCount);
CleanupStack::PushL(propertyKeys);
for (TInt i(0) ; i < KPropertyCount ; ++i)
--- a/pimappservices/calendar/shared/src/agmrptdef.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmrptdef.cpp Tue May 25 12:41:10 2010 +0300
@@ -2700,8 +2700,16 @@
@internalComponent
*/
{
- delete iRRule;
- delete iTimeZone;
+ if (iRRule)
+ {
+ delete iRRule;
+ iRRule = NULL;
+ }
+ if (iTimeZone)
+ {
+ delete iTimeZone;
+ iTimeZone = NULL;
+ }
ClearTimeArray(iSporadicDates);
ClearTimeArray(iExceptions);
@@ -3885,7 +3893,14 @@
@return The start date expressed as Current System Local Time.
*/
{
- return iOwningEntry.EntryTime();
+ if (iOwningEntry.Type() == CCalEntry::ETodo)
+ {
+ return iOwningEntry.StartTime();
+ }
+ else
+ {
+ return iOwningEntry.EntryTime();
+ }
}
EXPORT_C void CAgnRptDef::SetUntilTime(const TAgnCalendarTime& aUntilTime)
--- a/pimappservices/calendar/shared/src/agmsimpleentry.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmsimpleentry.cpp Tue May 25 12:41:10 2010 +0300
@@ -67,7 +67,11 @@
@internalComponent
*/
{
- delete iRptDef;
+ if (iRptDef)
+ {
+ delete iRptDef;
+ iRptDef = NULL;
+ }
}
@@ -394,8 +398,15 @@
// Ensure that the start date actually falls on a repeating instance. For example,
// if the repeat rule is every Wednesday, and the DtStart is a Monday, it should be
// nudged forwards to the Wednesday of that week.
-
- TTime startTimeUtc = EntryTime().UtcL();
+ TTime startTimeUtc;
+ if (Type() == CCalEntry::ETodo)
+ {
+ startTimeUtc = StartTime().UtcL();
+ }
+ else
+ {
+ startTimeUtc = EntryTime().UtcL();
+ }
startTimeUtc -= TTimeIntervalMicroSeconds(1);
TTime firstInstanceUtc;
@@ -428,7 +439,7 @@
TTime startTime = aNewEntryTimeLocal;
if (Type() == CCalEntry::ETodo)
{
- startTime = DurationMinusL(startTime);
+ //startTime = DurationMinusL(startTime);
}
TAgnCalendarTime startAgnTime;
TAgnCalendarTime endAgnTime;
--- a/pimappservices/calendar/tsrc/instance_iterator/tcal_fetchinstance.cpp Tue May 11 16:12:24 2010 +0300
+++ b/pimappservices/calendar/tsrc/instance_iterator/tcal_fetchinstance.cpp Tue May 25 12:41:10 2010 +0300
@@ -435,8 +435,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance1->Time().TimeLocalL() == instanceTime1.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance1->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance1->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance1->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ TTime newEndTime(endTime.TimeLocalL());
+ TTimeIntervalMinutes deltaMinutes;
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ TTimeIntervalMicroSeconds deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance1->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance1->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance1);
@@ -448,8 +464,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance2->Time().TimeLocalL() == instanceTime2.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance2->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance2->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance2->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance2->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance2->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance2);
@@ -461,8 +493,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance3->Time().TimeLocalL() == instanceTime3.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance3->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance3->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance3->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance3->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance3->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance3);
@@ -474,8 +522,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance4->Time().TimeLocalL() == instanceTime4.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance4->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance4->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance4->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance4->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance4->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance4);
@@ -486,8 +550,24 @@
test.Printf(_L("test the instance time"));
test(rDateInstance->Time().TimeLocalL() == rDateTime.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(rDateInstance->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(rDateInstance->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(rDateInstance->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(rDateInstance->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(rDateInstance->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(rDateInstance);