calendarui/views/dayview/src/calendayhourelement.cpp
branchRCL_3
changeset 65 12af337248b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayhourelement.cpp	Tue Aug 31 15:13:43 2010 +0300
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2010 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:  Day view control of calendar
+ *
+ */
+
+// System includes
+#include <QGraphicsLinearLayout>
+#include <QPainter>
+#include <HbTextItem>
+#include <HbStyle>
+#include <HbColorScheme>
+#include <HbFontSpec>
+#include <HbExtendedLocale>
+
+// User includes
+#include "calendayhourelement.h"
+#include "calendaycontainer.h"
+#include "calendayhourscrollarea.h"
+
+// Constants
+/*!
+ \brief Time format is: [0-9][0-9]:[0-9][0-9]
+ */
+const int KCalenTimeFormatLength = 5;
+
+/*!
+ \class CalenDayHourElement
+ \brief Hour element widget for Calendar's Day View
+ */
+
+/*!
+ \brief Constructor
+ 
+ \param time Time assigned to widget
+ \param parent Widget's parent
+ */
+CalenDayHourElement::CalenDayHourElement(
+    const QTime &time,
+    QGraphicsItem *parent) :
+    HbWidget(parent), mHour(time)
+{
+    // Necessary when widget implements own paint method
+    setFlag(QGraphicsItem::ItemHasNoContents, false);
+
+    HbDeviceProfile deviceProfile;
+    mUnitInPixels = deviceProfile.unitValue();
+
+    // Initialize hour line color
+    mHourLineColor = HbColorScheme::color(KCalenHourLineColor);
+
+    // Create text items
+    HbExtendedLocale systemLocale = HbExtendedLocale::system();
+
+    // Get current time format and (if there's a need) separate time from am/pm text
+    QChar timeSeparator = ' ';
+    QStringList timeTextList = systemLocale.format(time,
+        r_qtn_time_usual_with_zero).split(timeSeparator);
+
+    // If needed, prepend '0' to get proper time format: [0-9][0-9]:[0-9][0-9]
+    QString timeString = timeTextList[0];
+    if (timeString.length() < KCalenTimeFormatLength) {
+        timeString.prepend('0');
+    }
+
+    QString ampmString = "";
+    if (timeTextList.count() > 1) {
+        ampmString = timeTextList[1].toLower();
+    }
+
+    HbTextItem* timeTextItem = new HbTextItem(timeString, this);
+    HbTextItem* ampmTextItem = new HbTextItem(ampmString, this);
+
+    HbStyle::setItemName(timeTextItem, QLatin1String("time"));
+    HbStyle::setItemName(ampmTextItem, QLatin1String("ampm"));
+
+    // Parent container is needed to update widget's time
+    mContainer = static_cast<CalenDayHourScrollArea*> (parent);
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayHourElement::~CalenDayHourElement()
+{
+
+}
+
+/*!
+ \brief Customized paint() function
+ 
+ \param painter Painter
+ \param option Style option
+ \param widget
+ */
+void CalenDayHourElement::paint(
+    QPainter *painter,
+    const QStyleOptionGraphicsItem *option,
+    QWidget *widget)
+{
+    Q_UNUSED(widget);
+
+    painter->save();
+    
+    QRectF drawArea = option->rect;
+
+    // Draw full hour line
+    QPen linePen = QPen(mHourLineColor, KCalenHourLineThickness * mUnitInPixels);
+    painter->setPen(linePen);
+    
+    QLineF fullHourLine(drawArea.bottomLeft(), drawArea.bottomRight());
+    painter->drawLine(fullHourLine);
+
+    // Draw extra line on top for midnight
+    if (mHour.hour() == 0) {
+        fullHourLine = QLineF(drawArea.topLeft(), drawArea.topRight());
+        painter->drawLine(fullHourLine);
+    }
+
+    QDateTime currentDateTime = QDateTime::currentDateTime();
+
+    // Draw the time line in theme color
+    if (mContainer) {
+        QDateTime containersDateTime = mContainer->dateTime();
+
+        if (currentDateTime.date() == containersDateTime.date()
+            && currentDateTime.time().hour() == mHour.hour()) {
+
+            qreal currentTimeY = drawArea.height()
+                * currentDateTime.time().minute() / 60;
+
+            QColor color = HbColorScheme::color(KCalenTimeLineColor);
+            painter->setPen(QPen(color, KCalenCurrentTimeLineThickness
+                * mUnitInPixels, Qt::SolidLine, Qt::FlatCap));
+            QLineF currentTimeline(drawArea.left(), drawArea.top() + currentTimeY,
+                    drawArea.right(), drawArea.top() + currentTimeY);
+            painter->drawLine(currentTimeline);
+        }
+    }
+
+    painter->restore();
+}
+
+/*!
+ \brief Sets time for hour element.
+ 
+ \param time Time to be set for hour element
+ */
+void CalenDayHourElement::setTime(const QTime &time)
+{
+    mHour = time;
+}
+
+/*!
+ \brief Returns time of hour element.
+ 
+ \return Time of hour element
+ */
+QTime CalenDayHourElement::time() const
+{
+    return mHour;
+}
+
+// End of File