diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/hsmenuclientplugin/src/hsmenuclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenuclientplugin/src/hsmenuclient.cpp Tue Aug 31 15:06:34 2010 +0300 @@ -0,0 +1,248 @@ +/* + * 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: hsmenuclient.cpp + * + */ + +#include +#include + +#include "hsapp_defs.h" +#include "caquery.h" +#include "caentry.h" +#include "caicondescription.h" +#include "caservice.h" + +#include "hsmenuclient.h" +#include "hsmenuclient_p.h" + + +/*! + \class HsMenuClient + \ingroup group_hsmenuclient + \brief Implements home screen menu api, see @ref page_hsmenuclient for + usage details. + +*/ + +HsMenuClient::HsMenuClient(QObject *parent) + :QObject(parent), m_d(new HsMenuClientPrivate(this)) +{ + +} + +HsMenuClient::~HsMenuClient() +{ + delete m_d; +} + +/*! + Add an Templated Application Entry or Update if entryPreferences contains paramter id see + \ref section_add_parametrized_widget for exmaple usages + \param entryPreference entry prefereneces + \retval true if operation was successful + */ +bool HsMenuClient::add(const QVariantMap &entryPreference) +{ + return m_d->add(entryPreference); +} +/*! + Remove an Templated Application Entry see + \ref section_remove_tapp for exmaple usages + \param entry entry prefereneces + \retval true if operation was successful + */ +bool HsMenuClient::remove(const QVariantMap &entry) const +{ + return m_d->remove(entry); +} +/*! + Get list of Templated Application Entrys see + \ref section_list_tapp for exmaple usages + \param queryPreference prefereneces for query db + \retval QList + */ +QList HsMenuClient::getList(const QVariantMap &queryPreference) +{ + return m_d->getList(queryPreference); +} + +/*! + Constructor + \param publishPublic pointer to public contentPublish + */ +HsMenuClientPrivate::HsMenuClientPrivate(HsMenuClient *publishPublic) : + m_q(publishPublic) +{ + +} + +/*! + destructor + */ +HsMenuClientPrivate::~HsMenuClientPrivate() +{ + +} + +bool HsMenuClientPrivate::add(const QVariantMap &entryPreference) +{ + bool result = false; + QMap pref = entryPreference; + + CaIconDescription iconDesc; + if(pref.contains(hsItemId)) + { + QSharedPointer update_entry = CaService::instance()->getEntry(pref.take(hsItemId).toInt()); + + if(pref.contains(hsItemLocName)) + { + update_entry->setText(pref.take(hsItemLocName).toString(),true); + } + else + { + update_entry->setText(pref.take(hsItemName).toString()); + } + + if(pref.contains(hsItemLocDescription)) + { + update_entry->setDescription(pref.take(hsItemLocDescription).toString(), true); + } + else + { + update_entry->setDescription(pref.take(hsItemDescription).toString()); + } + + iconDesc.setFilename(pref.take(hsIconFileName).toString()); + iconDesc.setSkinId(pref.take(hsIconName).toString()); + iconDesc.setApplicationId(pref.take(hsIconApplicationId).toString()); + update_entry->setIconDescription(iconDesc); + QMapIterator k(pref); + while (k.hasNext()) { + k.next(); + update_entry->setAttribute(k.key(),k.value().toString()); + } + + result = CaService::instance()->updateEntry(*update_entry); + } + else if ((pref.contains(hsItemName) || pref.contains(hsItemLocName)) && pref.contains(hsitemLaunchUri) && pref.contains(hsitemPublisherId)) + { + CaEntry add_entry(ItemEntryRole); + add_entry.setEntryTypeName(Hs::templatedApplicationTypeName); + // mandatory values + if(pref.contains(hsItemLocName)) + { + add_entry.setText(pref.take(hsItemLocName).toString(),true); + } + else + { + add_entry.setText(pref.take(hsItemName).toString()); + } + + iconDesc.setFilename(pref.take(hsIconFileName).toString()); + iconDesc.setSkinId(pref.take(hsIconName).toString()); + iconDesc.setApplicationId(pref.take(hsIconApplicationId).toString()); + add_entry.setIconDescription(iconDesc); + + if(pref.contains(hsItemLocDescription)) + { + add_entry.setDescription(pref.take(hsItemLocDescription).toString(), true); + } + else + { + add_entry.setDescription(pref.take(hsItemDescription).toString()); + } + QMapIterator k(pref); + while (k.hasNext()) { + k.next(); + add_entry.setAttribute(k.key(),k.value().toString()); + } + + add_entry.setFlags(add_entry.flags() & ~RemovableEntryFlag); + + QSharedPointer entry = CaService::instance()->createEntry(add_entry); + if (!entry.isNull()) { + result = true; + } + } + else + { + return false; + } + return result; + + +} +bool HsMenuClientPrivate::remove(const QVariantMap &entry) const +{ + bool result = false; + if (entry.contains(hsItemId)) + { + result = CaService::instance()->removeEntry(entry.value(hsItemId).toInt()); + } + return result; +} + +QList HsMenuClientPrivate::getList(const QVariantMap &queryPreference) +{ + QList list; + QMap map = queryPreference; + + map.remove(hsItemName); + map.remove(hsItemDescription); + + CaQuery query; + // define query + query.setFlagsOn(VisibleEntryFlag); + query.setEntryRoles(ItemEntryRole); + query.setEntryTypeNames(QStringList(Hs::templatedApplicationTypeName)); + + + // add atributes to caquery + QMapIterator k(map); + while (k.hasNext()) { + k.next(); + query.setAttribute(k.key(),k.value().toString()); + } + QList< QSharedPointer > entries = CaService::instance()->getEntries(query); + map.clear(); + if (entries.count()) { + QMap attrMap; + QMapIterator k(attrMap); + //walk trought entrys and extract keys into map + for (int i = 0; i < entries.count(); ++i) { + map[hsItemId] = entries.at(i)->id(); + map[hsItemName] = entries.at(i)->text(); + map[hsItemDescription] = entries.at(i)->description(); + CaIconDescription iconDesc = entries.at(i)->iconDescription(); + map[hsIconFileName] = iconDesc.filename(); + map[hsIconName] = iconDesc.skinId(); + map[hsIconApplicationId] = iconDesc.applicationId(); + + // extract entry atributes + attrMap = entries.at(i)->attributes(); + QMapIterator k(attrMap); + // insert entrys attr into map + while (k.hasNext()) { + k.next(); + map.insert(k.key(),k.value()); + } + list.append(map); //append entry map to list + // clean used maps + map.clear(); + attrMap.clear(); + } + } + return list; +}