--- /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