calendarui/caleneditor/src/caleneditorcustomitem.cpp
changeset 18 c198609911f9
child 23 fd30d51f876b
equal deleted inserted replaced
0:f979ecb2b13e 18:c198609911f9
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors: 
       
    13  *
       
    14  * Description: Definition file for class CalenEditorCustomItem.
       
    15  *
       
    16  */
       
    17 
       
    18 // System includes
       
    19 #include <QObject>
       
    20 #include <hblistwidget.h>
       
    21 #include <hblistwidgetitem.h>
       
    22 #include <hbpushbutton.h>
       
    23 #include <hblineedit.h>
       
    24 #include <hbdataformmodelitem.h>
       
    25 #include <hbdialog.h>
       
    26 #include <hblabel.h>
       
    27 #include <hbaction.h>
       
    28 #include <hbdatetimepicker.h>
       
    29 #include <hbi18ndef.h>
       
    30 #include <HbDataFormModel>
       
    31 #include <HbAbstractViewItem>
       
    32 #include <HbAbstractItemView>
       
    33 #include <QGraphicsLinearLayout>
       
    34 #include <QDate>
       
    35 #include <QTime>
       
    36 
       
    37 // User includes
       
    38 #include "caleneditorcustomitem.h"
       
    39 #include "calendateutils.h"
       
    40 #include "caleneditorcommon.h"
       
    41 
       
    42 /*!
       
    43 	\class CalenEditorCustomItem
       
    44 	This object creats the custom item for the calendar editor dataform.
       
    45  */
       
    46 
       
    47 /*!
       
    48 	Constructor.
       
    49 	\param parent The parent object.
       
    50  */
       
    51 CalenEditorCustomItem::CalenEditorCustomItem(QGraphicsItem *parent)
       
    52 :HbDataFormViewItem(parent)
       
    53 {
       
    54 	mMinDate = CalenDateUtils::minTime().date();
       
    55 	mMaxDate = CalenDateUtils::maxTime().date();
       
    56 	mMinTime.setHMS(0,0,0,0);
       
    57 	mMaxTime.setHMS(23,59,59,999);
       
    58 	mLocale = HbExtendedLocale::system();
       
    59 }
       
    60 /*!
       
    61 	Destructor.
       
    62  */
       
    63 CalenEditorCustomItem::~CalenEditorCustomItem()
       
    64 {
       
    65 	// Nothing yet.
       
    66 }
       
    67 /*!
       
    68 	Creates a new CalenEditorCustomItem.
       
    69  */
       
    70 HbAbstractViewItem* CalenEditorCustomItem::createItem()
       
    71 {
       
    72 	return new CalenEditorCustomItem(*this);
       
    73 }
       
    74 /*!
       
    75 	Creates the custom widget.
       
    76  */
       
    77 HbWidget* CalenEditorCustomItem::createCustomWidget()
       
    78 {
       
    79 	HbDataFormModelItem::DataItemType itemType =
       
    80 			static_cast<HbDataFormModelItem::DataItemType> (modelIndex() .data(
       
    81 					HbDataFormModelItem::ItemTypeRole).toInt());
       
    82 
       
    83 	switch (itemType) {
       
    84 		case CustomWidgetFrom:
       
    85 		{
       
    86 		HbWidget *widgetTop = new HbWidget();
       
    87 		QGraphicsLinearLayout *layoutTop =
       
    88 									new QGraphicsLinearLayout(Qt::Horizontal);
       
    89 		widgetTop->setLayout(layoutTop);
       
    90 
       
    91 			mPushButtonTime = new HbPushButton();
       
    92 			connect(mPushButtonTime, SIGNAL(clicked()),
       
    93 									this, SLOT(handleTime()));
       
    94 			layoutTop->addItem(mPushButtonTime);
       
    95 
       
    96 			mPushButtonDate =
       
    97 			                new HbPushButton();
       
    98 			connect(mPushButtonDate, SIGNAL(clicked()),
       
    99 												this, SLOT(handleDate()));
       
   100 			layoutTop->addItem(mPushButtonDate);
       
   101 			return widgetTop;
       
   102 		}
       
   103 
       
   104 
       
   105 		case CustomWidgetTo:
       
   106 		{
       
   107 		HbWidget *widgetBottom = new HbWidget();
       
   108 		QGraphicsLinearLayout *layoutBottom = new QGraphicsLinearLayout(Qt::Horizontal);
       
   109 		widgetBottom->setLayout(layoutBottom);
       
   110 
       
   111 		mPushButtonTime = new HbPushButton(this);
       
   112 		connect(mPushButtonTime, SIGNAL(clicked()),
       
   113 											this, SLOT(handleTime()));
       
   114 		layoutBottom->addItem(mPushButtonTime);
       
   115 		
       
   116 		mPushButtonDate = new HbPushButton(this);
       
   117 		connect(mPushButtonDate, SIGNAL(clicked()),
       
   118 												this, SLOT(handleDate()));
       
   119 		layoutBottom->addItem(mPushButtonDate);
       
   120 		return widgetBottom;
       
   121 		}
       
   122 		
       
   123 		case RepeatUntilOffset:
       
   124 		{
       
   125 		mRepeatUntilWidget = new HbPushButton(this);
       
   126 		return mRepeatUntilWidget;
       
   127 		}
       
   128 				
       
   129 
       
   130 		default:
       
   131 			return 0;
       
   132 	}
       
   133 }
       
   134 
       
   135 void CalenEditorCustomItem::populateDateTime(QDateTime defaultDateTime, bool isFromItem)
       
   136 {
       
   137 	// Store the date and time to be shown
       
   138     mDate = defaultDateTime.date();
       
   139 	mTime = defaultDateTime.time();
       
   140 	
       
   141 	mIsFromItem = isFromItem;
       
   142 	
       
   143     mPushButtonDate->setText(mLocale.format(defaultDateTime.date(), 
       
   144 	                                           r_qtn_date_usual_with_zero));
       
   145 	mPushButtonTime->setText(mLocale.format(defaultDateTime.time(), 
       
   146 	                                           r_qtn_time_usual_with_zero));
       
   147 }
       
   148 
       
   149 void CalenEditorCustomItem::setDateRange(QDate start, QDate end)
       
   150 {
       
   151 	mMaxDate = end;
       
   152 	mMinDate = start;
       
   153 	// Check if both are falling on same day
       
   154 	// If yea, the disable the button
       
   155 	if (mMaxDate.year() == mMinDate.year() &&
       
   156 			(mMaxDate.day() == mMinDate.day())) {
       
   157 		enableDateButton(false);
       
   158 	}
       
   159 }
       
   160 
       
   161 void CalenEditorCustomItem::setTimeRange(QTime start, QTime end)
       
   162 {
       
   163 	mMaxTime = start;
       
   164 	mMinTime = end;
       
   165 }
       
   166 
       
   167 void CalenEditorCustomItem::enableDateButton(bool value)
       
   168 {
       
   169 	mPushButtonDate->setEnabled(value);
       
   170 }
       
   171 
       
   172 
       
   173 
       
   174 void CalenEditorCustomItem::handleDate()
       
   175 {
       
   176 	// Create a date picker
       
   177 	mDatePicker = new HbDateTimePicker(mDate, this);
       
   178 	mDatePicker->setMinimumDate(mMinDate);
       
   179 	mDatePicker->setMaximumDate(mMaxDate);
       
   180 
       
   181 	// Create a popup with datepicker for the user to select date.
       
   182 	HbDialog popUp;
       
   183 	popUp.setDismissPolicy(HbDialog::NoDismiss);
       
   184 	popUp.setTimeout(HbDialog::NoTimeout);
       
   185 	
       
   186 	// Set the proper heading
       
   187 	if (mIsFromItem) {
       
   188         popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_date")));   
       
   189     }else {
       
   190         popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_date")));
       
   191     }
       
   192 
       
   193 	popUp.setContentWidget(mDatePicker);
       
   194 	HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
       
   195 	popUp.setPrimaryAction(okAction);
       
   196 	connect(okAction, SIGNAL(triggered()), this, SLOT(saveDate()));
       
   197 	connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
       
   198 	popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel")));
       
   199 	popUp.exec();
       
   200 }
       
   201 
       
   202 void CalenEditorCustomItem::handleTime()
       
   203 {
       
   204 	// Create a time picker.
       
   205 	mTimePicker = new HbDateTimePicker(mTime, this);
       
   206 	if(mLocale.timeStyle() == HbExtendedLocale::Time12) {
       
   207 		mTimePicker->setDisplayFormat("hh:mm ap");	
       
   208 	}else {
       
   209 		mTimePicker->setDisplayFormat("hh:mm");
       
   210 	}
       
   211 	mTimePicker->setTime(mTime);
       
   212 	// Create a popup with time picker for the user to select time.
       
   213 	HbDialog popUp;
       
   214 	popUp.setDismissPolicy(HbDialog::NoDismiss);
       
   215 	popUp.setTimeout(HbDialog::NoTimeout);
       
   216 	
       
   217 	// Set the proper heading
       
   218     if (mIsFromItem) {
       
   219         popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_time")));   
       
   220     }else {
       
   221         popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_time")));
       
   222     }
       
   223     
       
   224 	popUp.setContentWidget(mTimePicker);
       
   225 	HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
       
   226 	popUp.setPrimaryAction(okAction);
       
   227 	connect(okAction, SIGNAL(triggered()), this, SLOT(saveTime()));
       
   228 	connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
       
   229 	popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), &popUp));
       
   230 	popUp.exec();
       
   231 }
       
   232 
       
   233 /*!
       
   234 	Save the start date of the event.
       
   235  */
       
   236 void CalenEditorCustomItem::saveDate()
       
   237 {
       
   238 	mDate = mDatePicker->date(); 
       
   239 	if (mDate.isValid()) {
       
   240 		mDateTime.setDate(mDate);
       
   241 		mDateTime.setTime(mTime);
       
   242 		mPushButtonDate->setText(mLocale.format(mDate, 
       
   243 		                                           r_qtn_date_usual_with_zero));
       
   244 		emit dateTimeUpdated(mDateTime);
       
   245 		}
       
   246 }
       
   247 
       
   248 /*!
       
   249 	Save the start time of the event.
       
   250  */
       
   251 void CalenEditorCustomItem::saveTime()
       
   252 {
       
   253 	mTime = mTimePicker->time();
       
   254 	if (mTime.isValid()) {
       
   255 		mDateTime.setTime(mTime);
       
   256 		mPushButtonTime->setText(mLocale.format(mTime, 
       
   257 									r_qtn_time_usual_with_zero));
       
   258 
       
   259 		mDateTime.setDate(mDate);
       
   260 		emit dateTimeUpdated(mDateTime);
       
   261 	}
       
   262 }
       
   263 
       
   264 /*!
       
   265 	Enable/Desable FromTime filed and update time value
       
   266  */
       
   267 void CalenEditorCustomItem::enableFromTimeFieldAndSetTime(bool enableTimeFiles, QDateTime fromDateTime)
       
   268 {
       
   269 	// Set FromTime filed Read-Only/Editable 
       
   270 	mPushButtonTime->setEnabled(enableTimeFiles);
       
   271 	
       
   272 	// Set FromTime in Editor
       
   273 	mPushButtonTime->setText(mLocale.format(fromDateTime.time(),r_qtn_time_usual_with_zero));
       
   274 }
       
   275 
       
   276 /*!
       
   277 	Enable/Desable ToTime filed and update time value
       
   278  */
       
   279 void CalenEditorCustomItem::enableToTimeFieldAndSetTime(bool enableTimeFiles, QDateTime toDateTime)
       
   280 {
       
   281 	// Set ToTime filed Read-Only/Editable 
       
   282 	mPushButtonTime->setEnabled(enableTimeFiles);
       
   283 	
       
   284 	// Set ToTime in Editor
       
   285 	mPushButtonTime->setText(mLocale.format(toDateTime.time(),r_qtn_time_usual_with_zero));
       
   286 }
       
   287 
       
   288 /*!
       
   289    OverRide from DataFrom
       
   290  */
       
   291 bool CalenEditorCustomItem::canSetModelIndex(const QModelIndex &index) const
       
   292 {
       
   293     HbDataFormModelItem::DataItemType itemType = 
       
   294         static_cast<HbDataFormModelItem::DataItemType>(
       
   295         index.data(HbDataFormModelItem::ItemTypeRole).toInt());
       
   296 
       
   297     if(itemType == CustomWidgetFrom || itemType == CustomWidgetTo || itemType == RepeatUntilOffset) {
       
   298         return true;
       
   299     } else {
       
   300         return false;
       
   301     }
       
   302 }
       
   303 
       
   304 void CalenEditorCustomItem::restore()
       
   305 {
       
   306     HbDataFormModelItem::DataItemType itemType = 
       
   307         static_cast<HbDataFormModelItem::DataItemType>(
       
   308         modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
       
   309     
       
   310     HbDataFormModel *model = 
       
   311     		static_cast<HbDataFormModel *>(
       
   312     		static_cast<HbAbstractViewItem *>(this)->itemView()->model());
       
   313     HbDataFormModelItem *modelItem = model->itemFromIndex(modelIndex());
       
   314     switch(itemType) {
       
   315     	case RepeatUntilOffset:
       
   316     	{
       
   317     		mRepeatUntilWidget->setText(modelItem->contentWidgetData("text").toString());
       
   318     	}
       
   319     	break;
       
   320     }
       
   321 }
       
   322 
       
   323 
       
   324 // End of file	--Don't remove this.