diff -r 000000000000 -r 16d8024aca5e src/hbwidgets/widgets/hbdatetimepicker.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hbwidgets/widgets/hbdatetimepicker.cpp Mon Apr 19 14:02:13 2010 +0300 @@ -0,0 +1,492 @@ +/**************************************************************************** +** +** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (developer.feedback@nokia.com) +** +** This file is part of the HbWidgets module of the UI Extensions for Mobile. +** +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at developer.feedback@nokia.com. +** +****************************************************************************/ + +#include "hbdatetimepicker_p.h" +#include "hbdatetimepicker.h" +#include "hbstyleoption.h" + +/*! + @alpha + @hbwidgets + \class HbDateTimePicker + \brief HbDateTimePicker class provides a widget for picking the date, time, date and time. + By default datetime picker will be created, with date functionality only. + For exclusive time or date picker creation, use QTime or QDate variable as parameter for the constructor. + \li Date and Time + \li Date + \li Time + + \snippet{ultimatecodesnippet/ultimatecodesnippet.cpp,51} + + By default, display format is from HbExtendedLocale. User can set the format using \sa setDisplayFormat. + Based on the display format the tumblers or sections will be rearranged. + + HbDateTimePicker provides various date and time range functionalities. + currently the date range is independent of the time range. + \sa setDateRange \sa setTimeRange \sa setDateTimeRange + \sa setMinimumTime \sa setMaximumTime \sa setMinimumDate \sa setMaximumDate + \sa setMinimumDateTime \sa setMaximumDateTime +*/ + +/*! + \fn void dateChanged(const QDate &date) + + This signal is emitted when item selection changes in any of the date pickers in the datetimepicker widget. + \a date selected by the user. + +*/ + +/*! + \fn void timeChanged(const QTime &time) + + This signal is emitted when item selection changes in any of the time pickers in the datetimepicker widget. + \a time selected by the user. + +*/ + +/*! + \fn void dateTimeChanged(const QDateTime &datetime) + + This signal is emitted when item selection changes in any of the pickers in the datetimepicker widget. + \a datetime selected by the user. + +*/ + +/*! + Constructs date picker widget by default. +*/ +HbDateTimePicker::HbDateTimePicker( QGraphicsItem *parent ): +HbWidget(*new HbDateTimePickerPrivate, parent) +{ + Q_D(HbDateTimePicker); + + //no mode passed so it should take date as mode by default + d->init(QVariant::Date); + + setDateTime(QDateTime::currentDateTime()); +} + +/*! + Constructs datetime picker widget. +*/ +HbDateTimePicker::HbDateTimePicker(const QDateTime &datetime, QGraphicsItem *parent ): +HbWidget(*new HbDateTimePickerPrivate, parent) +{ + Q_D(HbDateTimePicker); + + d->init(QVariant::DateTime); + setDateTime(datetime); +} + +/*! + Constructs date picker widget with default locale's date format. +*/ +HbDateTimePicker::HbDateTimePicker(const QDate &date, QGraphicsItem *parent ): +HbWidget(*new HbDateTimePickerPrivate, parent) +{ + Q_D(HbDateTimePicker); + + d->init(QVariant::Date); + setDate(date); +} + +/*! + Constructs time picker widget with default locale's time format. +*/ +HbDateTimePicker::HbDateTimePicker(const QTime &time, QGraphicsItem *pParent ): +HbWidget(*new HbDateTimePickerPrivate, pParent) +{ + Q_D(HbDateTimePicker); + + d->init(QVariant::Time); + setTime(time); +} + +/*! + Internal. Protected constructor for derivations. + the default mode is DateTimeMode, if other mode is required, set the mDateTimeMode variable. + this does not set any default datetime, needs to be explicitly done in the derived constructor. + + \sa setDateTime, setTime, setDate +*/ +HbDateTimePicker::HbDateTimePicker(HbDateTimePickerPrivate &dd, QGraphicsItem *parent): +HbWidget(dd, parent) +{ + Q_D(HbDateTimePicker); + + d->init(QVariant::DateTime); +} + +bool HbDateTimePicker::event(QEvent *e) +{ + Q_D(HbDateTimePicker); + bool result = HbWidget::event(e); + if (e->type()==QEvent::LayoutRequest) { + updatePrimitives(); + d->updateDividers(); + } + return result; +} + +/*! + Destructor. +*/ +HbDateTimePicker::~HbDateTimePicker() +{ +} + +/*! + Returns current display format as QString value. + + \sa setDisplayFormat() + */ +QString HbDateTimePicker::displayFormat() const +{ + Q_D(const HbDateTimePicker); + return d->mFormat; +} + +/*! + Sets the display \a format . eg: DDMMYY, MMDDYY + + These expressions may be used for the format: + + + + + + + + + + + + + +
Expression Output
d The day as a number without a leading zero (1 to 31)
dd The day as a number with a leading zero (01 to 31)
ddd + The abbreviated localized day name (e.g. 'Mon' to 'Sun'). + Uses QDate::shortDayName().
dddd + The long localized day name (e.g. 'Monday' to 'Sunday'). + Uses QDate::longDayName().
M The month as a number without a leading zero (1 to 12)
MM The month as a number with a leading zero (01 to 12)
MMM + The abbreviated localized month name (e.g. 'Jan' to 'Dec'). + Uses QDate::shortMonthName().
MMMM + The long localized month name (e.g. 'January' to 'December'). + Uses QDate::longMonthName().
yy The year as two digit number (00 to 99)
yyyy The year as four digit number. If the year is negative, + a minus sign is prepended in addition.
+ + NOTE:setDisplayFormat works only when the seperators are mentioned in the format like 'dd.mm.yy' or 'dd mm yy', this + will be fixed in the future versions. + + \sa displayFormat() +*/ +void HbDateTimePicker::setDisplayFormat(const QString &format) +{ + Q_D(HbDateTimePicker); + + if(d->isFormatValid(format)){ + d->mFormat = format; + d->parseDisplayFormat(format); + d->rearrangeTumbleViews(); + d->emitDateTimeChange(); + }//End If format is valid +} + +/*! + Returns the current date in QDate format. + + \sa setDate +*/ +QDate HbDateTimePicker::date() const +{ + Q_D(const HbDateTimePicker); + + return d->mDateTime.date(); +} + +/*! + Sets the current \a date in the form of QDate. + + \sa date +*/ +void HbDateTimePicker::setDate(const QDate& date) +{ + Q_D(HbDateTimePicker); + setDateTime(QDateTime(date,d->mDateTime.time())); +} + +/*! + Returns minimum date in QDate format. + + \sa setMinimumDate +*/ +QDate HbDateTimePicker::minimumDate()const +{ + Q_D(const HbDateTimePicker); + return d->mMinimumDate.date(); +} + +/*! + Sets minimum \a date in QDate format. + + \sa minimumDate +*/ +void HbDateTimePicker::setMinimumDate(const QDate& date) +{ + Q_D(HbDateTimePicker); + setMinimumDateTime(QDateTime(date, d->mMinimumDate.time())); +} + +/*! + Returns maximum date in QDate format. + + \sa setMaximumDate +*/ +QDate HbDateTimePicker::maximumDate()const +{ + Q_D(const HbDateTimePicker); + return d->mMaximumDate.date(); +} + +/*! + Sets maximum \a date in QDate format. + + \sa maximumDate +*/ +void HbDateTimePicker::setMaximumDate(const QDate& date) +{ + Q_D(HbDateTimePicker); + setMaximumDateTime(QDateTime(date, d->mMaximumDate.time())); +} + +/*! + Sets minimum \a minDate and maximum \a maxDate dates in QDate format. + + \sa setMinimumDate \sa setMaximumDate +*/ +void HbDateTimePicker::setDateRange(const QDate &minDate, const QDate &maxDate) +{ + Q_D(HbDateTimePicker); + setDateTimeRange(QDateTime(minDate, d->mMinimumDate.time()), + QDateTime(maxDate, d->mMaximumDate.time())); +} + +/*! + Returns the current datetime in QDateTime format. + + \sa setDateTime +*/ +QDateTime HbDateTimePicker::dateTime()const +{ + Q_D(const HbDateTimePicker); + return d->mDateTime; +} + +/*! + Sets the current \a datetime in the form of QDateTime. + + \sa dateTime +*/ +void HbDateTimePicker::setDateTime(const QDateTime &datetime) +{ + Q_D(HbDateTimePicker); + d->setDateTime(datetime); +} + +/*! + Returns minimum date time in QDateTime format. + + \sa setMinimumDateTime +*/ +QDateTime HbDateTimePicker::minimumDateTime()const +{ + Q_D(const HbDateTimePicker); + return d->mMinimumDate; +} + +/*! + Sets minimum \a datetime in QDateTime format. + Note: There's no link between Date and time in this API, using this API as of now + would be similar to using combination of \sa setMinimumDate and \sa setMinimumTime + + \sa minimumDateTime \sa setMinimumDate \sa setMinimumTime +*/ +void HbDateTimePicker::setMinimumDateTime(const QDateTime& datetime) +{ + Q_D(HbDateTimePicker); + d->setMinimumDateTime(datetime); +} + +/*! + Returns maximum date time in QDateTime format. + + \sa setMaximumDate +*/ +QDateTime HbDateTimePicker::maximumDateTime()const +{ + Q_D(const HbDateTimePicker); + return d->mMaximumDate; +} + +/*! + Sets maximum \a datetime in QDateTime format. + + Note: There's no link between Date and time in this API, using this API as of now + would be similar to using combination of \sa setMaximumDate and \sa setMaximumTime + + \sa maximumDateTime \sa setMaximumDate \sa setMaximumTime +*/ +void HbDateTimePicker::setMaximumDateTime(const QDateTime& date) +{ + Q_D(HbDateTimePicker); + d->setMaximumDateTime(date); +} + +/*! + Sets minimum \a minDatetime and maximum \a maxDatetime datetimes in QDateTime format. + + Note: There's no link between Date and time in this API, using this API as of now + would be similar to using combination of \sa setMinimumDate \sa setMaximumTime and + \sa setMinimumTime, \sa setMaximumTime + + \sa setMinimumDateTime \sa setMaximumDateTime \sa setMinimumDate \sa setMaximumDate + \sa setMinimumTime \sa setMaximumTime +*/ +void HbDateTimePicker::setDateTimeRange(const QDateTime &minDateTime, const QDateTime &maxDateTime) +{ + Q_D(HbDateTimePicker); + d->setDateTimeRange(minDateTime, maxDateTime); +} + +/*! + Returns the current time in QTime format. + + \sa setTime +*/ +QTime HbDateTimePicker::time() const +{ + Q_D(const HbDateTimePicker); + return d->mDateTime.time(); +} + +/*! + Sets the current \a time in the form of QTime. + + \sa time +*/ +void HbDateTimePicker::setTime(const QTime &time) +{ + Q_D(HbDateTimePicker); + setDateTime(QDateTime(d->mDateTime.date(), time)); +} + +/*! + Returns minimum time in QTime format. + + \sa setMinimumTime +*/ +QTime HbDateTimePicker::minimumTime()const +{ + Q_D(const HbDateTimePicker); + return d->mMinimumDate.time(); +} + +/*! + Sets minimum \a time in QTime format. + + \sa minimumTime +*/ +void HbDateTimePicker::setMinimumTime(const QTime& time) +{ + Q_D(HbDateTimePicker); + setMinimumDateTime(QDateTime(d->mDateTime.date(),time)); +} + +/*! + Returns maximum time in QTime format. + + \sa setMaximumTime +*/ +QTime HbDateTimePicker::maximumTime()const +{ + Q_D(const HbDateTimePicker); + return d->mMaximumDate.time(); +} + +/*! + Sets maximum \a time in QTime format. + + \sa maximumTime +*/ +void HbDateTimePicker::setMaximumTime(const QTime& time) +{ + Q_D(HbDateTimePicker); + setMaximumDateTime(QDateTime(d->mMaximumDate.date(), time)); +} + +/*! + Sets minimum \a minTime and maximum \a maxTime in QTime format. + + \sa setMinimumTime \sa setMaximumTime +*/ +void HbDateTimePicker::setTimeRange(const QTime &minTime, const QTime &maxTime) +{ + Q_D(HbDateTimePicker); + setDateTimeRange(QDateTime(d->mMinimumDate.date(), minTime), + QDateTime(d->mMinimumDate.date(), maxTime)); +} + +QGraphicsItem *HbDateTimePicker::primitive(HbStyle::Primitive primitive) const +{ + Q_D(const HbDateTimePicker); + switch(primitive) { + case HbStyle::P_DateTimePicker_background: + return d->mBackground; + case HbStyle::P_DateTimePicker_frame: + return d->mFrame; + default: + return HbWidget::primitive(primitive); + } +} + +void HbDateTimePicker::setGeometry(const QRectF &rect) +{ + HbWidget::setGeometry(rect); + updatePrimitives(); +} + +void HbDateTimePicker::updatePrimitives() +{ + Q_D(HbDateTimePicker); + HbStyleOption option; + initStyleOption(&option); + if(d->mBackground) { + style()->updatePrimitive(d->mBackground,HbStyle::P_DateTimePicker_background,&option); + } + if(d->mFrame) { + style()->updatePrimitive(d->mFrame,HbStyle::P_DateTimePicker_frame,&option); + } +} + +#include "moc_hbdatetimepicker.cpp"