calendarui/views/dayview/src/calendaymodelmanager.cpp
author hgs
Mon, 28 Jun 2010 15:22:02 +0530
changeset 45 b6db4fd4947b
child 57 bb2d3e476f29
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: Model manager holds models for three day views
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <calenservices.h>
hgs
parents:
diff changeset
    19
#include <calencontext.h>
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include "calendaymodelmanager.h"
hgs
parents:
diff changeset
    22
#include "calendaymodel.h"
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
/*!
hgs
parents:
diff changeset
    25
	BC Model Manager constructor. Model manager use calendar context to
hgs
parents:
diff changeset
    26
	populate models with proper events.
hgs
parents:
diff changeset
    27
	\a services is handle to organizer services \a emptyModels if true created models
hgs
parents:
diff changeset
    28
	are not populated with events \a parent
hgs
parents:
diff changeset
    29
 */
hgs
parents:
diff changeset
    30
CalenDayModelManager::CalenDayModelManager(MCalenServices &services, bool emptyModels,
hgs
parents:
diff changeset
    31
												QObject *parent)
hgs
parents:
diff changeset
    32
							: QObject(parent), mServices (services)
hgs
parents:
diff changeset
    33
{
hgs
parents:
diff changeset
    34
	if (emptyModels)
hgs
parents:
diff changeset
    35
		{
hgs
parents:
diff changeset
    36
		mCurrentDayTime = QDateTime();
hgs
parents:
diff changeset
    37
		}
hgs
parents:
diff changeset
    38
	else
hgs
parents:
diff changeset
    39
		{
hgs
parents:
diff changeset
    40
		mCurrentDayTime = mServices.Context().focusDateAndTime();
hgs
parents:
diff changeset
    41
		}
hgs
parents:
diff changeset
    42
	createAllModels();
hgs
parents:
diff changeset
    43
}
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
CalenDayModelManager::~CalenDayModelManager()
hgs
parents:
diff changeset
    46
{
hgs
parents:
diff changeset
    47
	// not needed now
hgs
parents:
diff changeset
    48
}
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
void CalenDayModelManager::viewsScrollingFinished(CalenScrollDirection scrollTo)
hgs
parents:
diff changeset
    52
	{
hgs
parents:
diff changeset
    53
	if (scrollTo == ECalenScrollToNext)
hgs
parents:
diff changeset
    54
		{
hgs
parents:
diff changeset
    55
		moveForeward();
hgs
parents:
diff changeset
    56
		}
hgs
parents:
diff changeset
    57
	else
hgs
parents:
diff changeset
    58
		{
hgs
parents:
diff changeset
    59
		moveBackward();
hgs
parents:
diff changeset
    60
		}
hgs
parents:
diff changeset
    61
	}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
/*!
hgs
parents:
diff changeset
    65
	Reorganize models after move to previous day.  
hgs
parents:
diff changeset
    66
 */
hgs
parents:
diff changeset
    67
void CalenDayModelManager::moveBackward()
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
	mCurrentDayTime = mServices.Context().focusDateAndTime();
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
	CalenDayModel* tmp = mModels[NextDay];
hgs
parents:
diff changeset
    72
	tmp->refreshModel( mCurrentDayTime.addDays(-1));
hgs
parents:
diff changeset
    73
	
hgs
parents:
diff changeset
    74
	mModels[NextDay] = mModels[CurrentDay];
hgs
parents:
diff changeset
    75
	mModels[CurrentDay] = mModels[PreviousDay];
hgs
parents:
diff changeset
    76
	mModels[PreviousDay] = tmp;
hgs
parents:
diff changeset
    77
}
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
/*!
hgs
parents:
diff changeset
    80
	Reorganize models after move to next day. 
hgs
parents:
diff changeset
    81
 */
hgs
parents:
diff changeset
    82
void CalenDayModelManager::moveForeward()
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
	mCurrentDayTime = mServices.Context().focusDateAndTime();
hgs
parents:
diff changeset
    85
	
hgs
parents:
diff changeset
    86
	CalenDayModel* tmp = mModels[PreviousDay];
hgs
parents:
diff changeset
    87
	tmp->refreshModel( mCurrentDayTime.addDays(1));
hgs
parents:
diff changeset
    88
	
hgs
parents:
diff changeset
    89
	mModels[PreviousDay] = mModels[CurrentDay];
hgs
parents:
diff changeset
    90
	mModels[CurrentDay] = mModels[NextDay];
hgs
parents:
diff changeset
    91
	mModels[NextDay] = tmp;
hgs
parents:
diff changeset
    92
}
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
/*!
hgs
parents:
diff changeset
    95
	Returns given model
hgs
parents:
diff changeset
    96
	/a day defines model, can be (PreviousDay, CurrentDay, NextDay) only.  
hgs
parents:
diff changeset
    97
 */
hgs
parents:
diff changeset
    98
QAbstractItemModel &CalenDayModelManager::getModel(ModelDay day)
hgs
parents:
diff changeset
    99
{
hgs
parents:
diff changeset
   100
	return *(mModels[day]);
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
/*!
hgs
parents:
diff changeset
   104
	Creates all models objects durring construction.  
hgs
parents:
diff changeset
   105
 */
hgs
parents:
diff changeset
   106
void CalenDayModelManager::createAllModels()
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
	
hgs
parents:
diff changeset
   109
	mModels[CurrentDay] = new CalenDayModel(mCurrentDayTime, mServices, this);
hgs
parents:
diff changeset
   110
	
hgs
parents:
diff changeset
   111
	QDateTime previousDayTime; 
hgs
parents:
diff changeset
   112
	QDateTime nextDayTime;
hgs
parents:
diff changeset
   113
	
hgs
parents:
diff changeset
   114
	if (mCurrentDayTime.isValid())
hgs
parents:
diff changeset
   115
		{
hgs
parents:
diff changeset
   116
		previousDayTime = mCurrentDayTime.addDays(-1);
hgs
parents:
diff changeset
   117
		nextDayTime = mCurrentDayTime.addDays(1);
hgs
parents:
diff changeset
   118
		}
hgs
parents:
diff changeset
   119
		
hgs
parents:
diff changeset
   120
	mModels[PreviousDay] = new CalenDayModel(previousDayTime, mServices, this);
hgs
parents:
diff changeset
   121
	mModels[NextDay] = new CalenDayModel(nextDayTime, mServices, this);
hgs
parents:
diff changeset
   122
}
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
/*!
hgs
parents:
diff changeset
   126
	Refetch data for all models. Context calendar is used to fill models
hgs
parents:
diff changeset
   127
	with correct events. Should be used for full (three days) repopulation.
hgs
parents:
diff changeset
   128
 */
hgs
parents:
diff changeset
   129
void CalenDayModelManager::refreshAllModels()
hgs
parents:
diff changeset
   130
	{
hgs
parents:
diff changeset
   131
	mCurrentDayTime = mServices.Context().focusDateAndTime();
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
	mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(-1));
hgs
parents:
diff changeset
   134
	mModels[CurrentDay]->refreshModel(mCurrentDayTime);
hgs
parents:
diff changeset
   135
	mModels[NextDay]->refreshModel(mCurrentDayTime.addDays(1));
hgs
parents:
diff changeset
   136
	}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
/*!
hgs
parents:
diff changeset
   139
	Refetch data given day model. Context calendar is used to fill model
hgs
parents:
diff changeset
   140
	with correct events.
hgs
parents:
diff changeset
   141
	/a day defines model, can be (PreviousDay, CurrentDay, NextDay) only.  
hgs
parents:
diff changeset
   142
 */
hgs
parents:
diff changeset
   143
void CalenDayModelManager::refreshSingleModel(CalenDayModelManager::ModelDay day)
hgs
parents:
diff changeset
   144
	{
hgs
parents:
diff changeset
   145
	switch (day)
hgs
parents:
diff changeset
   146
		{
hgs
parents:
diff changeset
   147
		case PreviousDay:
hgs
parents:
diff changeset
   148
			{
hgs
parents:
diff changeset
   149
			mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(-1));
hgs
parents:
diff changeset
   150
			}
hgs
parents:
diff changeset
   151
			break;
hgs
parents:
diff changeset
   152
		case CurrentDay:
hgs
parents:
diff changeset
   153
			{
hgs
parents:
diff changeset
   154
			mModels[CurrentDay]->refreshModel(mCurrentDayTime);
hgs
parents:
diff changeset
   155
			}
hgs
parents:
diff changeset
   156
			break;
hgs
parents:
diff changeset
   157
		case NextDay:
hgs
parents:
diff changeset
   158
			{
hgs
parents:
diff changeset
   159
			mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(1));		
hgs
parents:
diff changeset
   160
			}
hgs
parents:
diff changeset
   161
			break;
hgs
parents:
diff changeset
   162
		default:
hgs
parents:
diff changeset
   163
			break;
hgs
parents:
diff changeset
   164
		}
hgs
parents:
diff changeset
   165
	}
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// End of File