idlefw/plugins/shortcutplugin/src/caiscutsettingsbkmlist.cpp
changeset 0 79c6a41cd166
child 1 844b978f8d5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/shortcutplugin/src/caiscutsettingsbkmlist.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2005-2006 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:  Bookmark list for settings listbox
+*
+*/
+
+
+#include <StringLoader.h>
+#include <ActiveFavouritesDbNotifier.h> // For CActiveFavouritesDbNotifier
+
+#include <aiscutsettingsres.rsg>
+#include <aiscuttexts.rsg>
+
+#include "caiscutsettingsmodel.h"
+#include "caiscutsettingsapplist.h"
+#include "caiscutsettingsbkmlist.h"
+#include "taiscutparser.h"
+#include "caiscutsettingsitem.h"
+#include "aiscutdefs.h"
+
+#include "debug.h"
+
+
+_LIT( KText, "bkm=0x%x" );
+const TInt KTBUF16 = 16;
+
+// ======== MEMBER FUNCTIONS ========
+
+CAiScutSettingsBkmList::CAiScutSettingsBkmList(
+    CCoeEnv*                aEnv,
+    CAiScutSettingsModel*   aModel,
+    MAiScutListObserver&    aObserver
+    )
+    : iEnv(aEnv)
+    , iModel(aModel)
+    , iObserver(aObserver)
+{
+}
+
+void CAiScutSettingsBkmList::ConstructL()
+{
+}
+
+CAiScutSettingsBkmList* CAiScutSettingsBkmList::NewL(
+    CCoeEnv* aEnv,
+    CAiScutSettingsModel* aModel,
+    MAiScutListObserver& aObserver)
+{
+    CAiScutSettingsBkmList* self = new (ELeave) CAiScutSettingsBkmList(
+        aEnv, aModel, aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+CAiScutSettingsBkmList::~CAiScutSettingsBkmList()
+{
+    iListItems.ResetAndDestroy();
+    delete iBookmarkDbObserver;
+}
+
+// ---------------------------------------------------------------------------
+// From MDesCArray
+// Returns the number of descriptor elements in a descriptor array.
+// ---------------------------------------------------------------------------
+//
+TInt CAiScutSettingsBkmList::MdcaCount() const
+{
+    return iListItems.Count();
+}
+
+// ---------------------------------------------------------------------------
+// From MDesCArray
+// Indexes into a descriptor array.
+// ---------------------------------------------------------------------------
+//
+TPtrC CAiScutSettingsBkmList::MdcaPoint(TInt aIndex) const
+{
+    if (aIndex < 0 || aIndex >= iListItems.Count())
+    {
+        TPtrC ret(KNullDesC);
+        return ret;
+    }
+    return iListItems[aIndex]->Caption();
+}
+
+// ---------------------------------------------------------------------------
+// Gets bookmark list.
+// ---------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::GetBookmarkListL()
+{
+    iListItems.ResetAndDestroy();
+
+    iModel->ReadBookmarksL();
+
+    TInt count = iModel->BookmarkCount();
+
+    for (TInt i = count - 1; i >= 0; i--) // newest on top
+    {
+        CFavouritesItem* item = iModel->GetBookmark(i);
+
+        TUid  uid  = TUid::Uid(item->Uid());
+        TPtrC name = item->Name();
+
+        AddBookmarkL(uid, name);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// Tells the bookmark list to start or stop observing for changes.
+// ---------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::SetObservingL(TBool aObserving)
+{
+    delete iBookmarkDbObserver;
+    iBookmarkDbObserver = NULL;
+
+    if (aObserving)
+    {
+
+        iBookmarkDbObserver = new (ELeave) CActiveFavouritesDbNotifier(
+            iModel->FavouritesDb(), *this);
+        iBookmarkDbObserver->Start();
+    }
+
+    iObserving = aObserving;
+}
+
+// ---------------------------------------------------------------------------
+// Finds the index of the given settings item in the bookmark list.
+// ---------------------------------------------------------------------------
+//
+TInt CAiScutSettingsBkmList::FindIndex(CAiScutSettingsItem& aItem)
+{
+    TInt index = KErrNotFound;
+
+    TAiScutParser parser;
+    parser.Parse(aItem.Value());
+    TUid uid = parser.ParseUid(parser.Get(EScutDefParamValue));
+
+    for (TInt i = iListItems.Count() - 1; i >= 0; --i)
+    {
+        if (iListItems[i]->Uid() == uid)
+        {
+            index = i;
+            break;
+        }
+    }
+
+    return index;
+}
+
+// ---------------------------------------------------------------------------
+// Returns target bookmark data from the given index.
+// ---------------------------------------------------------------------------
+//
+TInt CAiScutSettingsBkmList::GetDataByIndex(
+    TInt aIndex, TPtrC& aParams, TPtrC& aCaption) const
+{
+    if (aIndex >= 0 && aIndex < iListItems.Count())
+    {
+        CBkmListItem* item = iListItems[aIndex];
+        aParams.Set(item->Params());
+        aCaption.Set(item->Caption());
+        return KErrNone;
+    }
+
+    return KErrNotFound;
+}
+
+// ---------------------------------------------------------------------------
+// Adds an bookmark to the list.
+// ---------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::AddBookmarkL(TUid aUid, const TDesC& aCaption)
+{
+    CBkmListItem* listItem = CBkmListItem::NewLC(aUid, aCaption);
+
+    TBuf<KTBUF16> buf;
+    buf.Format( KText, aUid.iUid );
+
+    listItem->SetParamsL(buf);
+    TLinearOrder<CBkmListItem> sortMethod(CBkmListItem::CompareCaption);
+    User::LeaveIfError(iListItems.InsertInOrderAllowRepeats(listItem, sortMethod));
+    CleanupStack::Pop(listItem);
+}
+
+// ---------------------------------------------------------------------------
+// Updates the bookmark list.
+// ---------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::UpdateBkmListL()
+{
+    GetBookmarkListL();
+    iObserver.HandleScutListEventL(MAiScutListObserver::EBkmListUpdated, EFalse);
+}
+
+// -----------------------------------------------------------------------------
+// From class MFavouritesDbObserver.
+// Handles database event.
+// -----------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::HandleFavouritesDbEventL(RDbNotifier::TEvent aEvent)
+{
+	__PRINT( __DBG_FORMAT( "XAI: CAiScutSettingsBkmList::HandleFavouritesDbEventL aEvent = %d"), aEvent);
+	
+    if (aEvent == RDbNotifier::ECommit)
+    {
+        UpdateBkmListL();
+    }
+}
+
+// ---------------------------------------------------------------------------
+//Nested class to store individual bookmark list items
+// ---------------------------------------------------------------------------
+//
+CAiScutSettingsBkmList::CBkmListItem::CBkmListItem(TUid aUid) : iUid(aUid)
+{
+}
+
+void CAiScutSettingsBkmList::CBkmListItem::ConstructL(const TDesC& aCaption)
+{
+    iCaption = aCaption.AllocL();
+}
+
+CAiScutSettingsBkmList::CBkmListItem* CAiScutSettingsBkmList::CBkmListItem::NewLC(
+    TUid aUid, const TDesC& aCaption)
+{
+    CBkmListItem* self = new (ELeave) CBkmListItem(aUid);
+    CleanupStack::PushL(self);
+    self->ConstructL(aCaption);
+    return self;
+}
+
+CAiScutSettingsBkmList::CBkmListItem::~CBkmListItem()
+{
+    delete iCaption;
+    delete iParams;
+}
+
+// ---------------------------------------------------------------------------
+// Compare method used to add the items to the list in sorted order.
+// ---------------------------------------------------------------------------
+//
+TInt CAiScutSettingsBkmList::CBkmListItem::CompareCaption(const CBkmListItem& aFirst,
+    const CBkmListItem& aSecond)
+{
+    return aFirst.iCaption->Des().CompareC(*aSecond.iCaption);
+}
+
+// ---------------------------------------------------------------------------
+// Returns the item target bookmark uid.
+// ---------------------------------------------------------------------------
+//
+TUid CAiScutSettingsBkmList::CBkmListItem::Uid() const
+{
+    return iUid;
+}
+
+// ---------------------------------------------------------------------------
+// Returns the item target bookmark caption.
+// ---------------------------------------------------------------------------
+//
+TPtrC CAiScutSettingsBkmList::CBkmListItem::Caption() const
+{
+    return TPtrC(*iCaption);
+}
+
+// ---------------------------------------------------------------------------
+// Returns the possible parameters for item target.
+// ---------------------------------------------------------------------------
+//
+TPtrC CAiScutSettingsBkmList::CBkmListItem::Params() const
+{
+    TPtrC params;
+    if (iParams)
+    {
+        params.Set(*iParams);
+    }
+    return params;
+}
+
+// ---------------------------------------------------------------------------
+// Sets the parameters for the item target.
+// ---------------------------------------------------------------------------
+//
+void CAiScutSettingsBkmList::CBkmListItem::SetParamsL(const TDesC& aParams)
+{
+    HBufC* newParams = aParams.AllocL();
+    delete iParams;
+    iParams = newParams;
+}
+
+// End of File.