homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuentryremovedhandler.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuentryremovedhandler.cpp Wed Aug 18 09:40:07 2010 +0300
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2010 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: Photos image fetcher client.
+*
+*/
+
+#include <QList>
+
+#include <caservice.h>
+#include <canotifier.h>
+#include <canotifierfilter.h>
+
+#include "hsmenuentryremovedhandler.h"
+/*!
+ \class HsMenuEntryRemovedHandler
+ Listens for entry removal notifications and calls a callback.
+ \ingroup group_hsutils
+ \brief
+*/
+
+/*!
+ Constructor.
+ \param entryId identifies entry which removal is to be observed.
+ \param receiver object which \a callback is to be called on requested entry
+ removal. If \receiver is passed 0 no action will be taken on the entry removal.
+ \param callback signal or slot that will be called on entry removal. The \a callback
+ signature should correspond to void (*)(int, ChangeType) signal otherwise
+ runtime warning will be provided. If \a callback is 0 no action will be
+ taken on the entry removal.
+*/
+HsMenuEntryRemovedHandler::HsMenuEntryRemovedHandler(
+ int entryId,
+ QObject *receiver,
+ const char *callback):
+ mNotifier(0)
+{
+ if (receiver != 0 && callback != 0) {
+ connect(this, SIGNAL(notify()), receiver, callback);
+ subscribe(entryId);
+ }
+};
+
+/*!
+ Destructor.
+*/
+HsMenuEntryRemovedHandler::~HsMenuEntryRemovedHandler() {};
+
+/*!
+ Subscribes the observer for notifications for a given entryId and
+ makes sure the \a HsMenuEntryRemovedObserver::entryChagned will be called
+ on any notification for the entry.
+ \param entryId identifier of the entry to be observed.
+
+*/
+void HsMenuEntryRemovedHandler::subscribe(int entryId)
+{
+ // create notifier for a given entryId
+ CaNotifierFilter filter;
+ QList<int> entryIds;
+ entryIds.append(entryId);
+ filter.setIds(entryIds);
+ mNotifier.reset(CaService::instance()->createNotifier(filter));
+
+ connect(mNotifier.data(),
+ SIGNAL(entryChanged(int, ChangeType)),
+ this,
+ SLOT(entryChanged(int, ChangeType)),
+ Qt::UniqueConnection);
+}
+
+
+/*!
+ Handles notification about entry change
+ \param entryId ignored as the observer is subscribed for exactly one entry.
+ \param changeType notified change type.
+ */
+void HsMenuEntryRemovedHandler::entryChanged(int entryId,
+ ChangeType changeType)
+{
+ Q_UNUSED(entryId); // CaNotifier should care about matching id, skip it here
+
+ if (changeType == RemoveChangeType) {
+ mNotifier.reset(0);
+ emit notify();
+ }
+}