idlefw/plugins/shortcutplugin/src/caiscutsettingsbkmlist.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
child 1 844b978f8d5e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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.