calendarui/views/dayview/src/calendayutils.cpp
changeset 45 b6db4fd4947b
child 55 2c54b51f39c4
child 58 ef813d54df51
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayutils.cpp	Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,234 @@
+/*
+* 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:  CalenDayUtils utility class implementation.
+*
+*/
+
+// System includes
+#include <hbdeviceprofile.h>
+#include <hbstyle.h>
+#include <hbinstance.h>
+#include <qdatetime.h>
+
+// User includes
+#include "calendayutils.h"
+#include "calendaycommonheaders.h"
+#include "agendaentry.h"
+#include "calendateutils.h"
+
+// Initialization of static member
+CalenDayUtils* CalenDayUtils::mInstance = 0;
+
+/*!
+ \class CalenDayUtils
+ \brief Singleton utility class.
+ 
+ Class cannot be used in console applications.
+ 
+ Provided functionalities (getters):
+ - screen width of device
+ - default width of hour element
+ - default height of hour element
+ - default width of content area
+ - current orientation of screen
+ - pointer to the main window of application
+ */
+
+/*!
+ \brief Returns the instance of CalenDayUtils class
+ */
+CalenDayUtils *CalenDayUtils::instance()
+{
+    if (!mInstance) {
+        mInstance = new CalenDayUtils();
+    }
+    return mInstance;
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayUtils::~CalenDayUtils()
+{
+    
+}
+
+/*!
+ \brief screenWidth
+ 
+ \return Width of main window's screen
+ */
+qreal CalenDayUtils::screenWidth() const
+{
+    ASSERT(mMainWindow);
+    
+    return mMainWindow->layoutRect().width();
+}
+
+/*!
+ \brief hourElementWidth
+ 
+ \return Width of hour element
+ */
+qreal CalenDayUtils::hourElementWidth() const
+{
+    return mHourElementWidth;
+}
+
+/*!
+ \brief hourElementHeight
+ 
+ \return Height of hour element
+ */
+qreal CalenDayUtils::hourElementHeight() const
+{
+    return mHourElementHeight;
+}
+
+/*!
+ \brief contentWidth
+ 
+ \return Width of content area
+ */
+qreal CalenDayUtils::contentWidth() const
+{
+    return (screenWidth() - mHourElementWidth);
+}
+
+/*!
+ \brief orientation
+ 
+ \return Orientation of main window
+ */
+Qt::Orientation CalenDayUtils::orientation() const
+{
+    ASSERT(mMainWindow);
+        
+    return mMainWindow->orientation();
+}
+
+/*!
+ \brief mainWindow
+ 
+ \return Pointer to main window of application
+ */
+HbMainWindow* CalenDayUtils::mainWindow()
+{
+    ASSERT(mMainWindow);
+    
+    return mMainWindow;
+}
+
+/*!
+ \brief isHorizontalSwipe
+ 
+ \return TRUE if horizontal swipe was recognized (angle in specific range)
+ */
+bool CalenDayUtils::isHorizontalSwipe(qreal angle) const
+{
+    bool isHSwipe = false;
+    if ((angle < KCalenSwipeAngle) || 
+        ((angle > 180 - KCalenSwipeAngle) && (angle < 180 + KCalenSwipeAngle)) ||
+        (angle > 360 - KCalenSwipeAngle)) {
+        isHSwipe = true;
+    }
+    
+    return isHSwipe;
+}
+
+/*!
+ \brief getEventValidStartEndTime
+ \brief Get event's valid start/end time from agenda entry.
+ */
+void CalenDayUtils::getEventValidStartEndTime( QDateTime& start, QDateTime& end, 
+                                    AgendaEntry& entry, QDateTime& currentDate )
+{
+    start = entry.startTime();
+    end = entry.endTime();
+    
+    if ( !CalenDateUtils::onSameDay( start, currentDate ) ) {
+        start = CalenDateUtils::beginningOfDay( currentDate );
+    }
+    
+    if ( !CalenDateUtils::onSameDay( end, currentDate ) ) {
+       QDateTime tommorrow( currentDate.addDays( 1 ));
+       end = CalenDateUtils::beginningOfDay( tommorrow ).addSecs( -60 );
+    }
+}
+
+/*!
+ \brief Constructor
+ */
+CalenDayUtils::CalenDayUtils() : mMainWindow(NULL)
+{
+    if (HbInstance::instance()->allMainWindows().count() > 0) {
+        mMainWindow = HbInstance::instance()->allMainWindows().first();
+    }
+    mHourElementWidth = calculateHourElementWidth();
+    mHourElementHeight = calculateHourElementHeight();
+}
+
+/*!
+ \brief Calculates the width of hour element according to UI spec.
+ 
+ \return Calculated width of hour element
+ */
+qreal CalenDayUtils::calculateHourElementWidth() const
+{
+    HbStyle style;
+    HbDeviceProfile deviceProfile;
+    qreal unitInPixels = deviceProfile.unitValue();
+
+    // Calculate element's preferred width
+    qreal prefWidth = 0.0;
+    qreal textWidth = 0.0;
+    qreal horizontalSpacing = 0.0;
+    
+    textWidth = 8.04 * unitInPixels; // pix (according to UI spec)   
+    style.parameter(QString("hb-param-margin-gene-middle-horizontal"), 
+        horizontalSpacing, deviceProfile);
+    prefWidth = horizontalSpacing * 2 + textWidth;
+    
+    return prefWidth;
+}
+
+/*!
+ \brief Calculates the height of hour element according to UI spec.
+ 
+ \return Calculated height of hour element
+ */
+qreal CalenDayUtils::calculateHourElementHeight() const
+{
+    HbStyle style;
+    HbDeviceProfile deviceProfile;
+    
+    qreal unitInPixels = deviceProfile.unitValue();
+    
+    // Calculate element's preferred height
+    qreal prefHeight = 0.0;
+    qreal textHeight = 0.0;
+    qreal verticalSpacing = 0.0;
+        
+    qreal bottomSpacer = 3.0 * unitInPixels;
+    style.parameter(QString("hb-param-text-height-secondary"), textHeight, 
+        deviceProfile);
+    style.parameter(QString("hb-param-margin-gene-middle-vertical"), 
+        verticalSpacing, deviceProfile);
+
+    prefHeight = textHeight * 2; //time + ampm
+    prefHeight += verticalSpacing * 2;
+    prefHeight += bottomSpacer;
+    
+    return prefHeight;
+}