calendarui/caleneditor/src/caleneditorcustomitem.cpp
changeset 18 c198609911f9
child 23 fd30d51f876b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/src/caleneditorcustomitem.cpp	Fri Apr 16 14:57:40 2010 +0300
@@ -0,0 +1,324 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors: 
+ *
+ * Description: Definition file for class CalenEditorCustomItem.
+ *
+ */
+
+// System includes
+#include <QObject>
+#include <hblistwidget.h>
+#include <hblistwidgetitem.h>
+#include <hbpushbutton.h>
+#include <hblineedit.h>
+#include <hbdataformmodelitem.h>
+#include <hbdialog.h>
+#include <hblabel.h>
+#include <hbaction.h>
+#include <hbdatetimepicker.h>
+#include <hbi18ndef.h>
+#include <HbDataFormModel>
+#include <HbAbstractViewItem>
+#include <HbAbstractItemView>
+#include <QGraphicsLinearLayout>
+#include <QDate>
+#include <QTime>
+
+// User includes
+#include "caleneditorcustomitem.h"
+#include "calendateutils.h"
+#include "caleneditorcommon.h"
+
+/*!
+	\class CalenEditorCustomItem
+	This object creats the custom item for the calendar editor dataform.
+ */
+
+/*!
+	Constructor.
+	\param parent The parent object.
+ */
+CalenEditorCustomItem::CalenEditorCustomItem(QGraphicsItem *parent)
+:HbDataFormViewItem(parent)
+{
+	mMinDate = CalenDateUtils::minTime().date();
+	mMaxDate = CalenDateUtils::maxTime().date();
+	mMinTime.setHMS(0,0,0,0);
+	mMaxTime.setHMS(23,59,59,999);
+	mLocale = HbExtendedLocale::system();
+}
+/*!
+	Destructor.
+ */
+CalenEditorCustomItem::~CalenEditorCustomItem()
+{
+	// Nothing yet.
+}
+/*!
+	Creates a new CalenEditorCustomItem.
+ */
+HbAbstractViewItem* CalenEditorCustomItem::createItem()
+{
+	return new CalenEditorCustomItem(*this);
+}
+/*!
+	Creates the custom widget.
+ */
+HbWidget* CalenEditorCustomItem::createCustomWidget()
+{
+	HbDataFormModelItem::DataItemType itemType =
+			static_cast<HbDataFormModelItem::DataItemType> (modelIndex() .data(
+					HbDataFormModelItem::ItemTypeRole).toInt());
+
+	switch (itemType) {
+		case CustomWidgetFrom:
+		{
+		HbWidget *widgetTop = new HbWidget();
+		QGraphicsLinearLayout *layoutTop =
+									new QGraphicsLinearLayout(Qt::Horizontal);
+		widgetTop->setLayout(layoutTop);
+
+			mPushButtonTime = new HbPushButton();
+			connect(mPushButtonTime, SIGNAL(clicked()),
+									this, SLOT(handleTime()));
+			layoutTop->addItem(mPushButtonTime);
+
+			mPushButtonDate =
+			                new HbPushButton();
+			connect(mPushButtonDate, SIGNAL(clicked()),
+												this, SLOT(handleDate()));
+			layoutTop->addItem(mPushButtonDate);
+			return widgetTop;
+		}
+
+
+		case CustomWidgetTo:
+		{
+		HbWidget *widgetBottom = new HbWidget();
+		QGraphicsLinearLayout *layoutBottom = new QGraphicsLinearLayout(Qt::Horizontal);
+		widgetBottom->setLayout(layoutBottom);
+
+		mPushButtonTime = new HbPushButton(this);
+		connect(mPushButtonTime, SIGNAL(clicked()),
+											this, SLOT(handleTime()));
+		layoutBottom->addItem(mPushButtonTime);
+		
+		mPushButtonDate = new HbPushButton(this);
+		connect(mPushButtonDate, SIGNAL(clicked()),
+												this, SLOT(handleDate()));
+		layoutBottom->addItem(mPushButtonDate);
+		return widgetBottom;
+		}
+		
+		case RepeatUntilOffset:
+		{
+		mRepeatUntilWidget = new HbPushButton(this);
+		return mRepeatUntilWidget;
+		}
+				
+
+		default:
+			return 0;
+	}
+}
+
+void CalenEditorCustomItem::populateDateTime(QDateTime defaultDateTime, bool isFromItem)
+{
+	// Store the date and time to be shown
+    mDate = defaultDateTime.date();
+	mTime = defaultDateTime.time();
+	
+	mIsFromItem = isFromItem;
+	
+    mPushButtonDate->setText(mLocale.format(defaultDateTime.date(), 
+	                                           r_qtn_date_usual_with_zero));
+	mPushButtonTime->setText(mLocale.format(defaultDateTime.time(), 
+	                                           r_qtn_time_usual_with_zero));
+}
+
+void CalenEditorCustomItem::setDateRange(QDate start, QDate end)
+{
+	mMaxDate = end;
+	mMinDate = start;
+	// Check if both are falling on same day
+	// If yea, the disable the button
+	if (mMaxDate.year() == mMinDate.year() &&
+			(mMaxDate.day() == mMinDate.day())) {
+		enableDateButton(false);
+	}
+}
+
+void CalenEditorCustomItem::setTimeRange(QTime start, QTime end)
+{
+	mMaxTime = start;
+	mMinTime = end;
+}
+
+void CalenEditorCustomItem::enableDateButton(bool value)
+{
+	mPushButtonDate->setEnabled(value);
+}
+
+
+
+void CalenEditorCustomItem::handleDate()
+{
+	// Create a date picker
+	mDatePicker = new HbDateTimePicker(mDate, this);
+	mDatePicker->setMinimumDate(mMinDate);
+	mDatePicker->setMaximumDate(mMaxDate);
+
+	// Create a popup with datepicker for the user to select date.
+	HbDialog popUp;
+	popUp.setDismissPolicy(HbDialog::NoDismiss);
+	popUp.setTimeout(HbDialog::NoTimeout);
+	
+	// Set the proper heading
+	if (mIsFromItem) {
+        popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_date")));   
+    }else {
+        popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_date")));
+    }
+
+	popUp.setContentWidget(mDatePicker);
+	HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+	popUp.setPrimaryAction(okAction);
+	connect(okAction, SIGNAL(triggered()), this, SLOT(saveDate()));
+	connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
+	popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel")));
+	popUp.exec();
+}
+
+void CalenEditorCustomItem::handleTime()
+{
+	// Create a time picker.
+	mTimePicker = new HbDateTimePicker(mTime, this);
+	if(mLocale.timeStyle() == HbExtendedLocale::Time12) {
+		mTimePicker->setDisplayFormat("hh:mm ap");	
+	}else {
+		mTimePicker->setDisplayFormat("hh:mm");
+	}
+	mTimePicker->setTime(mTime);
+	// Create a popup with time picker for the user to select time.
+	HbDialog popUp;
+	popUp.setDismissPolicy(HbDialog::NoDismiss);
+	popUp.setTimeout(HbDialog::NoTimeout);
+	
+	// Set the proper heading
+    if (mIsFromItem) {
+        popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_time")));   
+    }else {
+        popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_time")));
+    }
+    
+	popUp.setContentWidget(mTimePicker);
+	HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+	popUp.setPrimaryAction(okAction);
+	connect(okAction, SIGNAL(triggered()), this, SLOT(saveTime()));
+	connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
+	popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), &popUp));
+	popUp.exec();
+}
+
+/*!
+	Save the start date of the event.
+ */
+void CalenEditorCustomItem::saveDate()
+{
+	mDate = mDatePicker->date(); 
+	if (mDate.isValid()) {
+		mDateTime.setDate(mDate);
+		mDateTime.setTime(mTime);
+		mPushButtonDate->setText(mLocale.format(mDate, 
+		                                           r_qtn_date_usual_with_zero));
+		emit dateTimeUpdated(mDateTime);
+		}
+}
+
+/*!
+	Save the start time of the event.
+ */
+void CalenEditorCustomItem::saveTime()
+{
+	mTime = mTimePicker->time();
+	if (mTime.isValid()) {
+		mDateTime.setTime(mTime);
+		mPushButtonTime->setText(mLocale.format(mTime, 
+									r_qtn_time_usual_with_zero));
+
+		mDateTime.setDate(mDate);
+		emit dateTimeUpdated(mDateTime);
+	}
+}
+
+/*!
+	Enable/Desable FromTime filed and update time value
+ */
+void CalenEditorCustomItem::enableFromTimeFieldAndSetTime(bool enableTimeFiles, QDateTime fromDateTime)
+{
+	// Set FromTime filed Read-Only/Editable 
+	mPushButtonTime->setEnabled(enableTimeFiles);
+	
+	// Set FromTime in Editor
+	mPushButtonTime->setText(mLocale.format(fromDateTime.time(),r_qtn_time_usual_with_zero));
+}
+
+/*!
+	Enable/Desable ToTime filed and update time value
+ */
+void CalenEditorCustomItem::enableToTimeFieldAndSetTime(bool enableTimeFiles, QDateTime toDateTime)
+{
+	// Set ToTime filed Read-Only/Editable 
+	mPushButtonTime->setEnabled(enableTimeFiles);
+	
+	// Set ToTime in Editor
+	mPushButtonTime->setText(mLocale.format(toDateTime.time(),r_qtn_time_usual_with_zero));
+}
+
+/*!
+   OverRide from DataFrom
+ */
+bool CalenEditorCustomItem::canSetModelIndex(const QModelIndex &index) const
+{
+    HbDataFormModelItem::DataItemType itemType = 
+        static_cast<HbDataFormModelItem::DataItemType>(
+        index.data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+    if(itemType == CustomWidgetFrom || itemType == CustomWidgetTo || itemType == RepeatUntilOffset) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+void CalenEditorCustomItem::restore()
+{
+    HbDataFormModelItem::DataItemType itemType = 
+        static_cast<HbDataFormModelItem::DataItemType>(
+        modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+    
+    HbDataFormModel *model = 
+    		static_cast<HbDataFormModel *>(
+    		static_cast<HbAbstractViewItem *>(this)->itemView()->model());
+    HbDataFormModelItem *modelItem = model->itemFromIndex(modelIndex());
+    switch(itemType) {
+    	case RepeatUntilOffset:
+    	{
+    		mRepeatUntilWidget->setText(modelItem->contentWidgetData("text").toString());
+    	}
+    	break;
+    }
+}
+
+
+// End of file	--Don't remove this.