diff -r 92ab7f8d0eab -r 6bb1b21d2484 phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidgetlayoutmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidgetlayoutmanager.cpp Fri Apr 16 14:58:25 2010 +0300 @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2009 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: + * + */ + +#include "infowidgetlayoutmanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "infowidgetlogging.h" + + +const char INFOWIDGET_DOCML_FILE[] = ":/resource/infowidget.docml"; + +// Docml widget name mappings +const char LAYOUT_PREFIX_INFO_DISPLAY[] = "id:"; +const char LAYOUT_PREFIX_SETTINGS_DISPLAY[] = "sd:"; +const char LAYOUT_NAME_CONTENT[] = "content"; +const char LAYOUT_NAME_MCNMARQUEEITEM[] = "mcnMarqueeItem"; +const char LAYOUT_NAME_MCNLABEL[] = "mcnLabel"; +const char LAYOUT_NAME_HOMEZONELABEL[] = "homeZoneLabel"; +const char LAYOUT_NAME_ACTIVELINELABEL[] = "activeLineLabel"; +const char LAYOUT_NAME_SATTEXTLABEL[] = "satTextLabel"; +const char LAYOUT_NAME_HOMEZONEICON[] = "homeZoneIcon"; +const char LAYOUT_NAME_MCNICON[] = "mcnIcon"; +const char LAYOUT_NAME_ACTIVELINEICON[] = "activeLineIcon"; +const char LAYOUT_NAME_SATTEXTICON[] = "satTextIcon"; +const char LAYOUT_NAME_HOMEZONECHECKBOX[] = "homeZoneCheckBox"; +const char LAYOUT_NAME_MCNCHECKBOX[] = "mcnCheckBox"; +const char LAYOUT_NAME_ACTIVELINECHECKBOX[] = "activeLineCheckBox"; +const char LAYOUT_NAME_SATTEXTCHECKBOX[] = "satTextCheckBox"; +const char LAYOUT_NAME_OKBUTTON[] = "okButton"; +const char LAYOUT_NAME_CONTAINER[] = "container"; +const char LAYOUT_NAME_SETTINGSCONTAINER[] = "settingsContainer"; + + +/*! + InfoWidgetDocumentLoader::InfoWidgetDocumentLoader() + */ +InfoWidgetDocumentLoader::InfoWidgetDocumentLoader() +{ +} + +/*! + InfoWidgetDocumentLoader::createObject() + */ +QObject *InfoWidgetDocumentLoader::createObject( + const QString &type, + const QString &name) +{ + DPRINT << ": IN"; + + DPRINT << ": type: "<< type; + DPRINT << ": name: "<< name; + + if ( type == HbMarqueeItem::staticMetaObject.className() ) { + DPRINT << ": HbMarqueeItem"; + QObject *object = new HbMarqueeItem; + object->setObjectName(name); + DPRINT << ": HbMarqueeitem found, OUT"; + return object; + } + + DPRINT << ": OUT"; + + return HbDocumentLoader::createObject(type, name); +} + +/*! + */ +InfoWidgetLayoutManager::InfoWidgetLayoutManager(QObject *parent) +: QObject(parent), + m_documentLoader(NULL), + m_displayRole(InfoDisplay), + m_layoutRows(0) +{ + DPRINT << ": IN"; + + // Fill supported layout item roles for info display + QList displayWidgetRoles = widgetRoles(InfoDisplay); + + // Try to load all widgets in list by widget role + bool loadResult = loadWidgets(InfoDisplay, + displayWidgetRoles, + m_infoDisplayWidgets); + DPRINT << ": info display widget load result: " << loadResult; + + // Fill supported layout item roles for settings display + displayWidgetRoles = widgetRoles(SettingsDisplay); + + // Try to load all widgets in list by widget role + loadResult = loadWidgets(SettingsDisplay, + displayWidgetRoles, + m_settingsDisplayWidgets); + DPRINT << ": settings display widget load result: " << loadResult; + + DPRINT << ": OUT"; +} + +/*! + */ +InfoWidgetLayoutManager::~InfoWidgetLayoutManager() +{ + DPRINT << ": IN"; + + if (m_documentLoader) { + delete m_documentLoader; + } + + DPRINT << ": OUT"; +} + +/*! + */ +InfoWidgetLayoutManager::DisplayRole InfoWidgetLayoutManager::currentDisplayRole() +{ + DPRINT; + return m_displayRole; +} + +/*! + */ +QList InfoWidgetLayoutManager::currentWidgetRoles() +{ + DPRINT; + return m_widgets.keys(); +} + +int InfoWidgetLayoutManager::layoutRows() const +{ + DPRINT; + return m_layoutRows; +} + +void InfoWidgetLayoutManager::setLayoutRows(int rows) +{ + DPRINT; + m_layoutRows = rows; +} + +/*! + InfoWidgetLayoutManager::contentWidget() +*/ +QGraphicsWidget* InfoWidgetLayoutManager::contentWidget() +{ + DPRINT; + return getWidget(RoleContent); +} + +/*! + InfoWidgetLayoutManager::getWidget(); +*/ +QGraphicsWidget* InfoWidgetLayoutManager::getWidget(LayoutItemRole itemRole) +{ + DPRINT << ": item role: " << itemRole; + + QGraphicsWidget *widget = m_widgets.value(itemRole); + if (widget) { + DPRINT << ": widget: " << widget; + } + + return widget; +} + +/*! + InfoWidgetLayoutManager::hideWidget(); +*/ +void InfoWidgetLayoutManager::hideWidget(LayoutItemRole itemRole) +{ + DPRINT << ": item role: " << itemRole; + + QGraphicsWidget *widget = m_widgets.value(itemRole); + if (widget) { + DPRINT << ": hiding widget: " << widget; + widget->hide(); + } +} + +/*! + InfoWidgetLayoutManager::hideAll(); +*/ +void InfoWidgetLayoutManager::hideAll() +{ + DPRINT << ": IN"; + + QMapIterator iterator(m_widgets); + while (iterator.hasNext()) { + iterator.next(); + QGraphicsWidget *widget = iterator.value(); + if (widget) { + widget->hide(); + } + } + + DPRINT << ": OUT"; +} + + +/*! + InfoWidgetLayoutManager::showAll(); +*/ +void InfoWidgetLayoutManager::showAll() +{ + DPRINT << ": IN"; + + QMapIterator iterator(m_widgets); + while (iterator.hasNext()) { + iterator.next(); + QGraphicsWidget *widget = iterator.value(); + if (widget) { + widget->show(); + } + } + + DPRINT << ": OUT"; +} + +/*! + InfoWidgetLayoutManager::layoutInfoDisplay() +*/ +QGraphicsLayout* InfoWidgetLayoutManager::layoutInfoDisplay() +{ + DPRINT << ": IN"; + + hideAll(); + + m_displayRole = InfoDisplay; + m_widgets = m_infoDisplayWidgets; + + QGraphicsLayout *activeLayout(NULL); + DPRINT << ": getting content item and using its layout for activeLayout"; + QGraphicsWidget *content = getWidget(RoleContent); + if (content) { + DPRINT << ": content found, getting layout"; + activeLayout = content->layout(); + } + + DPRINT << ": OUT"; + return activeLayout; +} + +/*! + InfoWidgetLayoutManager::layoutSettingsDisplay() +*/ +QGraphicsLayout* InfoWidgetLayoutManager::layoutSettingsDisplay() +{ + DPRINT << ": IN"; + + hideAll(); + + m_displayRole = SettingsDisplay; + m_widgets = m_settingsDisplayWidgets; + + QGraphicsLayout *activeLayout(NULL); + DPRINT << ": getting content item and using its layout for activeLayout"; + QGraphicsWidget *content = getWidget(RoleContent); + if (content) { + DPRINT << ": content found, getting layout"; + activeLayout = content->layout(); + } + + DPRINT << ": OUT"; + return activeLayout; +} + +/*! + InfoWidgetLayoutManager::loadWidgets() +*/ +bool InfoWidgetLayoutManager::loadWidgets(const DisplayRole displayRole, + const QList &displayWidgets, + QMap &widgetMap) +{ + DPRINT << ": IN"; + bool loadResult(true); + + // Cleanup previously loaded content in case of any data + widgetMap.clear(); + + if (!m_documentLoader) { + m_documentLoader = new InfoWidgetDocumentLoader; + } + + Q_ASSERT(m_documentLoader); + + bool loaded = false; + m_documentLoader->load(INFOWIDGET_DOCML_FILE, &loaded); + + if (!loaded) { + qWarning() << "Unable to load .docml: " << INFOWIDGET_DOCML_FILE; + } + else { + DPRINT << ": document " << INFOWIDGET_DOCML_FILE << " loaded successfully"; + + QGraphicsWidget *widget(NULL); + LayoutItemRole currentWidgetRole; + bool allWidgetsLoaded(true); + + foreach (currentWidgetRole, displayWidgets) { + DPRINT << ": iterating displayWidgets, current role: " << static_cast(currentWidgetRole); + + widget = loadWidget(*m_documentLoader, displayRole, currentWidgetRole); + if (widget) { + DPRINT << ": widget found, inserting to widget map"; + widgetMap.insert(currentWidgetRole, widget); + widget = NULL; + } else { + allWidgetsLoaded = false; + DPRINT << ": ERROR, widget not found!"; + } + } + + DPRINT << ": allWidgetsLoaded: " << allWidgetsLoaded; + + int widgetCount = widgetMap.count(); + DPRINT << ": loaded widgets count: " << widgetCount; + if (widgetCount == displayWidgets.count()) { + DPRINT << ": all widgets loaded"; + loadResult = true; + } else { + DPRINT << ": error, all widgets were not loaded"; + loadResult = false; + } + } + + DPRINT << ": OUT"; + return loadResult; +} + +/*! + InfoWidgetLayoutManager::loadWidget() + + Initialize loader with corresponding document file before calling this single widget loader utility +*/ +QGraphicsWidget* InfoWidgetLayoutManager::loadWidget(InfoWidgetDocumentLoader &loader, + DisplayRole displayRole, + LayoutItemRole widgetRole) +{ + DPRINT << ": IN"; + + QString widgetPrefix; + if (displayRole == InfoDisplay) { + widgetPrefix = LAYOUT_PREFIX_INFO_DISPLAY; + } else if (displayRole == SettingsDisplay) { + widgetPrefix = LAYOUT_PREFIX_SETTINGS_DISPLAY; + } + + QGraphicsWidget *widget(NULL); + QString widgetName = widgetPrefix; + + switch (widgetRole) + { + case RoleContent: + widgetName.append(LAYOUT_NAME_CONTENT); + break; + case RoleMcnMarqueeItem: + widgetName.append(LAYOUT_NAME_MCNMARQUEEITEM); + break; + case RoleHomeZoneLabel: + widgetName.append(LAYOUT_NAME_HOMEZONELABEL); + break; + case RoleMcnLabel: + widgetName.append(LAYOUT_NAME_MCNLABEL); + break; + case RoleActiveLineLabel: + widgetName.append(LAYOUT_NAME_ACTIVELINELABEL); + break; + case RoleSatTextLabel: + widgetName.append(LAYOUT_NAME_SATTEXTLABEL); + break; + case RoleHomeZoneIcon: + widgetName.append(LAYOUT_NAME_HOMEZONEICON); + break; + case RoleMcnIcon: + widgetName.append(LAYOUT_NAME_MCNICON); + break; + case RoleActiveLineIcon: + widgetName.append(LAYOUT_NAME_ACTIVELINEICON); + break; + case RoleSatTextIcon: + widgetName.append(LAYOUT_NAME_SATTEXTICON); + break; + case RoleHomeZoneCheckBox: + widgetName.append(LAYOUT_NAME_HOMEZONECHECKBOX); + break; + case RoleMcnCheckBox: + widgetName.append(LAYOUT_NAME_MCNCHECKBOX); + break; + case RoleActiveLineCheckBox: + widgetName.append(LAYOUT_NAME_ACTIVELINECHECKBOX); + break; + case RoleSatTextCheckBox: + widgetName.append(LAYOUT_NAME_SATTEXTCHECKBOX); + break; + case RoleOkButton: + widgetName.append(LAYOUT_NAME_OKBUTTON); + break; + case RoleContainer: + widgetName.append(LAYOUT_NAME_CONTAINER); + break; + case RoleSettingsContainer: + widgetName.append(LAYOUT_NAME_SETTINGSCONTAINER); + break; + + case RoleUndefined: // Fall through + default: + break; + } + + widget = qobject_cast(loader.findWidget(widgetName)); + + if (widget) { + DPRINT << ": widget found: " << widgetName; + } else { + DPRINT << ": ERROR, widget not found!"; + } + + DPRINT << ": OUT"; + return widget; +} + +/*! + InfoWidgetLayoutManager::widgetRoles() + + Returns supported widget roles for specific display +*/ +const QList InfoWidgetLayoutManager::widgetRoles( + DisplayRole displayRole) const +{ + DPRINT << ": IN"; + + QList widgetRoles; + + switch (displayRole) { + case SettingsDisplay: + // Fill supported layout item roles for settings display + widgetRoles.append(RoleContent); + widgetRoles.append(RoleHomeZoneLabel); + widgetRoles.append(RoleMcnLabel); + widgetRoles.append(RoleActiveLineLabel); + widgetRoles.append(RoleSatTextLabel); + widgetRoles.append(RoleHomeZoneIcon); + widgetRoles.append(RoleMcnIcon); + widgetRoles.append(RoleActiveLineIcon); + widgetRoles.append(RoleSatTextIcon); + widgetRoles.append(RoleHomeZoneCheckBox); + widgetRoles.append(RoleMcnCheckBox); + widgetRoles.append(RoleActiveLineCheckBox); + widgetRoles.append(RoleSatTextCheckBox); + widgetRoles.append(RoleOkButton); + widgetRoles.append(RoleSettingsContainer); + break; + case InfoDisplay: + // Fill supported layout item roles for info display + widgetRoles.append(RoleContent); + widgetRoles.append(RoleHomeZoneLabel); + widgetRoles.append(RoleMcnMarqueeItem); + widgetRoles.append(RoleActiveLineLabel); + widgetRoles.append(RoleSatTextLabel); + widgetRoles.append(RoleHomeZoneIcon); + widgetRoles.append(RoleMcnIcon); + widgetRoles.append(RoleActiveLineIcon); + widgetRoles.append(RoleSatTextIcon); + widgetRoles.append(RoleSettingsContainer); + break; + + default: + break; + } + + DPRINT << ": widgetRoles.count() : " << widgetRoles.count(); + DPRINT << ": OUT"; + return widgetRoles; +} + +// End of File. + +