messagingappbase/smartmessaging/wmlbc/src/WmlBMSubItem30.cpp
changeset 0 72b543305e3a
child 2 0bf1d54f37d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/smartmessaging/wmlbc/src/WmlBMSubItem30.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2002 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:  
+*     Class includes information about one bookmark. 
+*     It has handle to Bookmark engine for adding bookmark.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "WmlBMSubItem30.h"               // CWmlBMSubItem
+#include "WmlBMUtils30.h"                 // WmlBMUtils
+#include "WMLBC.hrh"
+#include "WmlBioControl.pan"
+#include "WmlLog.h"
+
+#include <FavouritesItemList.h>
+#include <WMLBC.rsg>                    // resource identifiers
+#include <StringLoader.h>               // StringLoader
+#include <msgnamevalue.h>               // CMsgNameValue
+#include <MsgBioUtils.h>
+
+// LOCAL CONSTANTS AND MACROS
+
+const TInt KWmlBookmarkFieldCount = 2;
+const TInt KUrlMaxLength = 255;
+const TInt KNameMaxLength = 50;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::NewL
+// ---------------------------------------------------------
+//
+CWmlBMSubItem* CWmlBMSubItem::NewL()
+    {
+    CWmlBMSubItem* self = new ( ELeave ) CWmlBMSubItem();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CWmlBMSubItem::~CWmlBMSubItem()
+    {
+    delete iBMItem;
+    iBookmarkDb.Close();
+    iSession.Close();
+	if ( iItemList ) // itemlist is created only when bookmark is saved.
+		{
+		delete iItemList;
+		}
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::AddFieldL
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::AddFieldL( 
+    const TDesC& aFieldValue, 
+    const TInt aFieldEnum )
+    {
+    // Note: Any max length checks are not done in bio control.
+    // If the data passes the parser then we accept it.
+    // And we depend to the FavouritesDatabase consistency checks.
+
+    TInt length = aFieldValue.Length();
+
+    switch ( aFieldEnum )
+        {
+        case EWappURL:
+            {
+            if (iBMItem->Url().Length() == 0 && // no existing URL
+                length > 0 &&                   // URL is longer than 0 chars
+                length <= KUrlMaxLength)        // URL is no longer than max length
+                {
+                iBMItem->SetUrlL( aFieldValue );
+                iIsValid = ETrue; // url makes bookmark valid.
+                }
+            break;
+            }
+        case EWappName:
+            {
+            // Name is added if:
+            // - There's not already a name.
+            // - Given name is not empty.
+            if ( iBMItem->Name().Length() == 0 && length > 0 )
+                {
+                // If the name exceeds the maximum name length the name is shortened
+                // to the maximum value.
+                if (length > KNameMaxLength)
+                    {
+
+                    iBMItem->SetNameL( aFieldValue.Left(KNameMaxLength) );    
+                    }
+                else
+                    {
+                    iBMItem->SetNameL( aFieldValue );
+                    }
+                }
+            break;    
+            }
+        default:
+            {
+            // Internal error, trying to add wrong fields to this item.
+            Panic( EIllegalCommandInCurrentState );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::FieldCount
+// ---------------------------------------------------------
+//
+TInt CWmlBMSubItem::FieldCount() const
+    {
+    return KWmlBookmarkFieldCount;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::GetFieldDataAtLC
+// ---------------------------------------------------------
+//
+CMsgNameValue* CWmlBMSubItem::GetFieldDataAtLC( const TInt aIndex )
+    {
+    HBufC* label = NULL;
+    HBufC* value = NULL;
+
+    switch ( aIndex ) 
+        {
+        case EBookmarkNameFieldIndex:
+            {
+            label = StringLoader::LoadLC( R_QTN_SM_BM_TITLE );
+            value = iBMItem->Name().AllocLC();
+            break;
+            }    
+        case EBookmarkAddressFieldIndex:
+            {
+            label = StringLoader::LoadLC( R_QTN_SM_BM_ADDRESS );
+            value = iBMItem->Url().AllocLC();
+            break;
+            }
+        default:
+            {
+            // Internal error, trying to add wrong fields to this item.
+            Panic( EIllegalCommandInCurrentState );
+            break;
+            }
+        }
+    CMsgNameValue* textPair = CMsgNameValue::NewL( label, value ); 
+    CleanupStack::Pop( 2 ); // value, label
+    CleanupStack::PushL( textPair );
+    return textPair;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::IsValidL
+// ---------------------------------------------------------
+//
+TBool CWmlBMSubItem::IsValidL()
+    {
+    return iIsValid;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::DoInitialize
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::DoInitialize()
+    {
+	if ( iItemList )
+		{
+		delete iItemList;
+		iItemList = NULL;
+		}
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::NameMaxLength
+//
+// ---------------------------------------------------------
+//
+TInt CWmlBMSubItem::NameMaxLength()
+    {
+    return KNameMaxLength;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::NameLC
+// ---------------------------------------------------------
+//
+HBufC* CWmlBMSubItem::NameLC()
+    {
+    const TDesC& name = iBMItem->Name();
+    HBufC* nameBuf = name.AllocL();
+    CleanupStack::PushL( nameBuf );
+    return nameBuf;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::SetNameL
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::SetNameL( const TDesC& aName )
+    {
+    iBMItem->SetNameL( aName );
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::DefaultNameLC
+// ---------------------------------------------------------
+//
+HBufC* CWmlBMSubItem::DefaultNameLC()
+    {
+    return StringLoader::LoadLC( R_QTN_SM_BOOKMARK_NAME );
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::DoQueryNewNameLC
+// ---------------------------------------------------------
+//
+HBufC* CWmlBMSubItem::DoQueryNewNameLC( const TDesC& aName )
+    {
+    TBuf<KNameMaxLength> nameBuf( aName );
+    MsgBioUtils::TextQueryL(R_WMLBC_QUERY_BM_NAME, nameBuf); 
+    HBufC* name = nameBuf.AllocL();
+    CleanupStack::PushL( name );
+    return name;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::DoRenameQueryL
+// ---------------------------------------------------------
+//
+TBool CWmlBMSubItem::DoRenameQueryL( const TDesC& aName )
+    {
+    HBufC* query = StringLoader::LoadL( R_QTN_FLDR_RENAME_QUERY, aName );
+    CleanupStack::PushL( query );
+    TBool result = MsgBioUtils::ConfirmationQueryOkCancelL( *query );
+    CleanupStack::PopAndDestroy( query );
+    return result;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::IsNameValidL
+// ---------------------------------------------------------
+//
+TBool CWmlBMSubItem::IsNameValidL( const TDesC& aName, TBool aUpdateList )
+    {
+	// Update the item list when it's NULL or direction to update it is given
+	if ( iItemList == NULL || aUpdateList )
+		{
+		if ( iItemList )
+			{
+			delete iItemList; // Delete the old itemlist
+			iItemList = NULL;
+			}
+		iItemList = WmlBMUtils::CreateItemListLC(BookmarkDb2L());
+		CleanupStack::Pop( iItemList );
+		}
+
+    TInt isUnique = EFalse;
+    if (WmlBMUtils::Exists(aName, *iItemList) == KErrNotFound)
+        {   
+        isUnique = ETrue;    
+        }
+    return isUnique;
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::PreStoreL
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::PreStoreL( const TBool /*aShowPreferredQuery*/ )
+    {
+	LOG("CWmlBMSubItem::PreStoreL start");
+	if ( iItemList == NULL ) // No itemlist exists, create it.
+		{
+		LOG("CWmlBMSubItem::PreStoreL creating itemlist");
+		iItemList = WmlBMUtils::CreateItemListLC(BookmarkDb2L());
+		CleanupStack::Pop( iItemList );
+		LOG("CWmlBMSubItem::PreStoreL creating itemlist DONE");
+		}
+	LOG("CWmlBMSubItem::PreStoreL end");
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::StoreL
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::StoreL()
+    {
+	LOG("CWmlBMSubItem::StoreL start");	
+	User::LeaveIfError( WmlBMUtils::DoStoreL( BookmarkDb2L(), *iBMItem ) );
+	LOG("CWmlBMSubItem::StoreL end");
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::PostStoreL
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::PostStoreL( const TBool aShowNote, 
+    const TInt /*aPreferredInformation*/,
+    const TBool /*aCreateBookmarkIfNotSetAsDefault*/)
+    {
+	LOG("CWmlBMSubItem::PostStoreL start");
+
+    if ( iItemList )
+		{
+		delete iItemList;
+		iItemList = NULL;
+		}
+
+    // Show note only if required.
+    if ( aShowNote )
+        {
+        MsgBioUtils::ConfirmationNoteL( R_QTN_SM_NOTE_BOOKMARK_COPIED );    
+        }
+	LOG("CWmlBMSubItem::PreStoreL end");
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::ConstructL.
+// ---------------------------------------------------------
+//
+void CWmlBMSubItem::ConstructL()
+    {
+	iBMItem = CFavouritesItem::NewL(); // initializes itself using "Default" AP
+    iBMItem->SetType( CFavouritesItem::EItem );
+    iBMItem->SetParentFolder( KFavouritesRootUid );
+    User::LeaveIfError( iSession.Connect() );
+    User::LeaveIfError( iBookmarkDb.Open( iSession, KBrowserBookmarks ) );
+    }
+
+// ---------------------------------------------------------
+// CWmlBMSubItem::BookmarkDb2L
+// ---------------------------------------------------------
+//
+RFavouritesDb& CWmlBMSubItem::BookmarkDb2L()
+    {
+    return iBookmarkDb;
+    }
+
+//  End of File  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+