homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuentryremovedhandler.cpp
changeset 77 4b195f3bea29
child 96 458d8c8d9580
--- /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();
+    }
+}