diff -r 2f8f8080a020 -r ebdbd102c78a phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidgetlayoutmanager.cpp --- a/phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidgetlayoutmanager.cpp Mon May 03 12:31:11 2010 +0300 +++ b/phoneplugins/infowidgetplugin/infowidgetprovider/infowidget/src/infowidgetlayoutmanager.cpp Fri May 14 15:51:57 2010 +0300 @@ -34,10 +34,8 @@ 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_SPNLABEL[] = "spnLabel"; const char LAYOUT_NAME_SATMARQUEEITEM[] = "satMarqueeItem"; -const char LAYOUT_NAME_SATTEXTLABEL[] = "satTextLabel"; const char LAYOUT_NAME_SPNICON[] = "spnIcon"; const char LAYOUT_NAME_MCNICON[] = "mcnIcon"; const char LAYOUT_NAME_SATTEXTICON[] = "satTextIcon"; @@ -140,11 +138,41 @@ if (m_documentLoader) { delete m_documentLoader; } - + DPRINT << ": OUT"; } /*! + InfoWidgetLayoutManager::destroyObjects() + + Call on destruction for freeing + loaded objects. Parent items are deleted + causing deletion of corresponding object tree +*/ +void InfoWidgetLayoutManager::destroyObjects() +{ + DPRINT << ": IN"; + + // Destroy parent items + QGraphicsWidget *contentInfoDisplay = + m_infoDisplayWidgets.value(RoleContent); + if (contentInfoDisplay) { + delete contentInfoDisplay; + m_infoDisplayWidgets.clear(); + } + + QGraphicsWidget *contentSettingsDisplay= + m_settingsDisplayWidgets.value(RoleContent); + if (contentSettingsDisplay) { + delete contentSettingsDisplay; + m_settingsDisplayWidgets.clear(); + } + + DPRINT << ": OUT"; +} + + +/*! InfoWidgetLayoutManager::currentDisplayRole() */ InfoWidgetLayoutManager::DisplayRole InfoWidgetLayoutManager::currentDisplayRole() @@ -347,60 +375,48 @@ QMap &widgetMap) { DPRINT << ": IN"; - bool loadResult(true); + bool loadResult(false); // 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); + Q_ASSERT_X(loaded, "InfoWidgetLayoutManager", "Invalid docml file"); - if (!loaded) { - qWarning() << "Unable to load .docml: " << INFOWIDGET_DOCML_FILE; + DPRINT << ": document " << INFOWIDGET_DOCML_FILE << " loaded successfully"; + + QGraphicsWidget *widget(NULL); + LayoutItemRole currentWidgetRole; + + 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 { + DCRITICAL << ": ERROR, widget not found!"; + } } - 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; - } - } - + + if (widgetMap.count() == displayWidgets.count()) { + DPRINT << ": all widgets loaded"; + loadResult = true; + } else { + DCRITICAL << ": error, all widgets were not loaded"; + } + DPRINT << ": OUT"; return loadResult; } @@ -458,15 +474,9 @@ case RoleSpnLabel: widgetName.append(LAYOUT_NAME_SPNLABEL); break; - case RoleMcnLabel: - widgetName.append(LAYOUT_NAME_MCNLABEL); - break; case RoleSatMarqueeItem: widgetName.append(LAYOUT_NAME_SATMARQUEEITEM); break; - case RoleSatTextLabel: - widgetName.append(LAYOUT_NAME_SATTEXTLABEL); - break; case RoleSpnIcon: widgetName.append(LAYOUT_NAME_SPNICON); break; @@ -501,11 +511,8 @@ } widget = qobject_cast(loader.findWidget(widgetName)); - - if (widget) { - DPRINT << ": widget found: " << widgetName; - } else { - DPRINT << ": ERROR, widget not found!"; + if (!widget) { + DCRITICAL << ": ERROR, widget " << widgetName << " not found!"; } DPRINT << ": OUT"; @@ -524,9 +531,9 @@ QList widgetRoles; + // Fill supported layout item roles for specific display switch (displayRole) { case SettingsDisplay: - // Fill supported layout item roles for settings display widgetRoles.append(RoleContent); widgetRoles.append(RoleSpnCheckBox); widgetRoles.append(RoleMcnCheckBox); @@ -535,7 +542,6 @@ widgetRoles.append(RoleSettingsContainer); break; case InfoDisplay: - // Fill supported layout item roles for info display widgetRoles.append(RoleContent); widgetRoles.append(RoleSpnIcon); widgetRoles.append(RoleSpnLabel);