src/hbcore/utils/hbdeviceprofile.cpp
changeset 0 16d8024aca5e
child 1 f7ac710697a9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbcore/utils/hbdeviceprofile.cpp	Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,310 @@
+/****************************************************************************
+**
+** 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 HbCore 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 "hbdeviceprofile.h"
+#include "hbdeviceprofiledatabase_p.h"
+#include "hbinstance_p.h"
+#include "hbmemorymanager_p.h"
+#include "hbtheme_p.h"
+#include <hbmainwindow.h>
+#include "hbmainwindow_p.h"
+
+// To store the pointer to the deviceProfiles at the client side.
+static HbDeviceProfileList *deviceProfilesList = NULL;
+
+/*!
+	@stable
+    @hbcore
+    \class HbDeviceProfile
+    \brief HbDeviceProfile holds read-only device parameters. 
+    
+    Instances of this class hold both concrete device specific information 
+    (e.g. physical display size) and aspects that have been configured for 
+    a specific device (e.g. orientation, unit value).
+   
+*/
+
+/*!
+    Default constructor, a null profile.
+*/
+HbDeviceProfile::HbDeviceProfile(): d_ptr(new HbDeviceProfilePrivate)
+{
+}
+
+/*!
+    Copy constructor.
+    \param other source profile.
+*/
+HbDeviceProfile::HbDeviceProfile(const HbDeviceProfile &other)
+{
+    d_ptr = other.d_ptr;
+}
+
+/*!
+    Constructor for information based on profile name.
+    If profile with specified name is not found, then default
+    constructed instance is provided.
+
+    \param name name of the profile
+    \sa profileNames()
+*/
+HbDeviceProfile::HbDeviceProfile(const QString &name) : d_ptr(new HbDeviceProfilePrivate)
+{
+    if (d_ptr->deviceProfiles()) {
+        int count = deviceProfilesList->count();
+        for (int i = 0; i < count; i++) {
+            if (deviceProfilesList->at(i).mName == name) {
+                d_ptr->mProfile = deviceProfilesList->at(i);
+                break;
+            }
+        }
+    }
+}
+
+
+/*!
+    Destructor.
+*/
+HbDeviceProfile::~HbDeviceProfile()
+{
+}
+
+/*!
+    Assignment operator.
+    \param other source profile.
+    \return reference to this profile.
+*/
+HbDeviceProfile &HbDeviceProfile::operator=(const HbDeviceProfile &other)
+{
+    if (this != &other) {
+        d_ptr = other.d_ptr;
+    }
+    return *this;
+}
+
+/*!
+    Returns \c true if this profile is a null profile (default constructed profile).
+*/
+bool HbDeviceProfile::isNull() const
+{
+    return d_ptr->mProfile.mName.isEmpty();
+}
+
+/*!
+    Returns name of this profile.
+    Note: name is supposed to be unique.
+*/
+QString HbDeviceProfile::name() const
+{
+    return d_ptr->mProfile.mName;
+}
+
+/*!
+    Returns logical screen size in pixels.
+*/
+QSize HbDeviceProfile::logicalSize() const
+{
+    return d_ptr->mProfile.mLogicalSize;
+}
+
+/*!
+    Returns physical screen size in mm.
+*/
+QSizeF HbDeviceProfile::physicalSize() const
+{
+    return d_ptr->mProfile.mPhysicalSize;
+}
+
+/*!
+    Returns logical orientation (\c Qt::Vertical for portrait, \c Qt::Horizontal for landscape).
+*/
+Qt::Orientation HbDeviceProfile::orientation() const
+{
+    return d_ptr->mProfile.mOrientation;
+}
+
+/*!
+    Returns the amount of rotation in degrees for the transformed orientation.
+    Supported ones are 0 (no rotate transform), 90 and 270.
+*/
+qreal HbDeviceProfile::orientationAngle() const
+{
+    return d_ptr->mProfile.mOrientationAngle;
+}
+/*!
+  Returns the type of the screen: touch or non-touch
+ */
+bool HbDeviceProfile::touch() const
+{
+    return d_ptr->mProfile.mTouch;
+}
+
+/*!
+    Returns name of alternate profile. 
+    
+    Currently this holds information of the profile which is activated
+    on layout switch. Use this information if you need to optimize
+    layout switch.
+*/
+QString HbDeviceProfile::alternateProfileName() const
+{
+    return d_ptr->mProfile.mAltName;
+}
+
+/*!
+    Returns standard unit value (denoted by 'un').
+
+    The unit value is a display-specific multiplier. It is used in intenal
+    layout calculation. 
+*/
+qreal HbDeviceProfile::unitValue() const
+{
+    if (d_ptr->mProfile.mUnitValue <= 1) {
+        return 6.7;
+    }
+    return d_ptr->mProfile.mUnitValue;
+}
+
+/*!
+    Returns pixels per millimeter value.
+*/
+qreal HbDeviceProfile::ppmValue() const
+{
+    // Assuming square pixels
+    if (d_ptr->mProfile.mPhysicalSize.width() != 0) {
+        return d_ptr->mProfile.mLogicalSize.width() / d_ptr->mProfile.mPhysicalSize.width();
+    }
+    return 0.0;
+}
+
+/*!
+    Returns current global profile reflecting properties of primary display.
+    
+    Usually, you should not use this method. Instead, use one of \c profile
+    methods.
+*/
+HbDeviceProfile HbDeviceProfile::current()
+{
+    return HbInstancePrivate::d_ptr()->profile();
+}
+
+/*!
+    Returns current profile for this window.
+*/
+HbDeviceProfile HbDeviceProfile::profile(const HbMainWindow *window)
+{
+    if (!window) {
+        return current();
+    }
+    HbMainWindow *wnd = const_cast<HbMainWindow *>(window);
+    HbDeviceProfile profile = HbMainWindowPrivate::d_ptr(wnd)->profile();
+    if (profile.isNull()) {
+        profile = HbMainWindowPrivate::d_ptr(wnd)->adjustedProfile(current());
+    }
+    return profile;
+}
+
+/*!
+    Returns current profile for this graphics item.
+    
+    Graphics item must be tied to a scene and scene needs to be part of
+    main window. Otherwise, value returned by \c current is provided.
+
+    \param item item of which profile is needed.
+    \return device profile.
+*/
+HbDeviceProfile HbDeviceProfile::profile(const QGraphicsItem *item)
+{
+    if (!item) {
+        return current();
+    }
+    QGraphicsScene *scene = item->scene();
+    if (!scene) {
+        return current();
+    }
+    QList<QGraphicsView *> views = scene->views();
+    foreach(QGraphicsView *view, views) {
+        HbMainWindow *window = qobject_cast<HbMainWindow *>(view);
+        if (window) {
+            HbDeviceProfile profile = 
+                HbMainWindowPrivate::d_ptr(window)->profile();
+
+            if (!profile.isNull()) {
+                return profile;
+            } else {
+                return HbMainWindowPrivate::d_ptr(window)->adjustedProfile(current());
+            }
+        }
+    }
+    return current();
+}
+
+/*!
+    Returns a list of profile names (each representing a basic configuration).
+*/
+QStringList HbDeviceProfile::profileNames()
+{
+    return HbDeviceProfilePrivate::profileNames();
+}
+
+QStringList HbDeviceProfilePrivate::profileNames()
+{
+    QStringList profileNames;
+    if(deviceProfiles()){
+        int profilesCount = deviceProfilesList->count();
+        for(int i = 0;i < profilesCount ; i++) {
+            profileNames.append(deviceProfilesList->at(i).mName);
+        }
+    }
+    return profileNames;
+}
+
+HbDeviceProfilePrivate::HbDeviceProfilePrivate()
+{
+}
+
+HbDeviceProfilePrivate::~HbDeviceProfilePrivate()
+{
+}
+
+HbDeviceProfileList *HbDeviceProfilePrivate::deviceProfiles()
+{
+    if(!deviceProfilesList) {
+	// Will result in IPC call. gets the shared memory offset from themeserver.
+        deviceProfilesList = HbThemeClient::global()->deviceProfiles();
+    }
+       
+    if(!deviceProfilesList) {
+        // This is fall back.Create/Get the HbDeviceProfileDatabase Instance at
+        // the client side and read the deviceProfilesList.
+        qDebug()<<"DeviceProfile offset not returned by themeserver .. working in fallback mode";
+        HbDeviceProfileDatabase *deviceProfileDataBase =
+                HbDeviceProfileDatabase::instance(HbMemoryManager::HeapMemory);
+        deviceProfilesList = HbMemoryUtils::getAddress<HbDeviceProfileList>(HbMemoryManager::HeapMemory,
+                                 deviceProfileDataBase->deviceProfilesOffset());
+    }
+    return deviceProfilesList;
+}
+// end of file