phonebookui/Phonebook/App/src/CPbkGoToURLCmd.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/App/src/CPbkGoToURLCmd.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,156 @@
+/*
+* 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: 
+*      Go to URL command object.Opens browser to the URL address
+*		saved in contact details.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkGoToURLCmd.h"
+#include <CPbkContactItem.h>
+#include <CPbkURLAddressSelect.h>
+#include <PbkView.rsg>
+#include <SchemeHandler.h>
+#include <aknnotewrappers.h>
+#include <pbkdebug.h>
+// ================= MEMBER FUNCTIONS =======================
+
+// Default constructor
+CPbkGoToURLCmd::CPbkGoToURLCmd
+        (const CPbkContactItem& aContact, 
+        const TPbkContactItemField* aFocusedField) :
+		iContact(aContact), 
+        iFocusedField(aFocusedField)
+	{
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkGoToURLCmd::CPbkGoToURLCmd(0x%x)"), this);
+    }
+
+
+// Static constructor
+CPbkGoToURLCmd* CPbkGoToURLCmd::NewL
+        (const CPbkContactItem& aContact, 
+        const TPbkContactItemField* aFocusedField)
+	{
+    CPbkGoToURLCmd* self = new(ELeave)
+		CPbkGoToURLCmd(aContact, aFocusedField);
+    return self;
+    }
+
+// Destructor
+CPbkGoToURLCmd::~CPbkGoToURLCmd()
+    {
+	delete iHandler;
+
+    // Tells ExecuteLD this object has been destroyed
+    if(iDestroyedPtr)
+        {
+		*iDestroyedPtr = ETrue;
+		}
+
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkGoToURLCmd::~CPbkGoToURLCmd(0x%x)"), this);
+	}
+
+void CPbkGoToURLCmd::ExecuteLD()
+    {
+    PBK_DEBUG_PRINT
+        (PBK_DEBUG_STRING("CPbkGoToURLCmd::ExecuteLD(0x%x)"), this); 
+
+   	CleanupStack::PushL(this);
+
+    TBool thisDestroyed = EFalse;
+    iDestroyedPtr = &thisDestroyed;
+
+	// Show URL address selection dialog, if necessary
+	CPbkURLAddressSelect* selectDlg = new(ELeave) CPbkURLAddressSelect;
+	CPbkURLAddressSelect::TParams params(iContact);
+    params.SetFocusedField(iFocusedField);
+    params.SetUseDefaultDirectly(EFalse);	// no defaults in case of URL
+
+    TPtrC address;
+    address.Set(selectDlg->ExecuteLD(params));
+
+    if (address.Length() > 0)
+		{
+        // All ok, launch browser
+		TRAPD(err, DoGoToUrlL(address));
+		switch(err)
+			{
+			case KErrNone:
+				{
+                // Fix cleanup stack, this object is deleted later
+                // in NotifyExit
+                CleanupStack::Pop(); // this
+                break;
+         		}
+
+			case KErrArgument:      // FALLTHROUGH
+            case KErrNotFound:
+				{
+				// The URL was not in valid form
+				CAknNoteWrapper * note = new(ELeave) CAknNoteWrapper;
+				note->ExecuteLD(R_QTN_PHOB_NOTE_INVALID_URL);
+                // Fix cleanup stack
+                if (!thisDestroyed)
+                    {
+                    CleanupStack::PopAndDestroy(); // this
+                    }
+                else
+                    {
+                    CleanupStack::Pop(); // this
+                    }
+				break;
+				}
+
+			default:
+				{
+				// Some other error occurred
+				if (thisDestroyed)
+                    {
+                    // Avoid double deletion
+                    CleanupStack::Pop(); // this
+                    }
+				User::Leave(err);
+                break;
+				}
+			}
+		}
+    else
+        {
+        CleanupStack::PopAndDestroy(this);
+        }
+    }
+
+void CPbkGoToURLCmd::DoGoToUrlL(const TDesC& aUrl)
+	{
+	delete iHandler;
+	iHandler = NULL;
+
+	// Launch browser via SchemeHandler, the following leaves
+	// with KErrArgument if the URL is not in valid form
+	iHandler = CSchemeHandler::NewL(aUrl);
+	iHandler->Observer(this);
+	iHandler->HandleUrlStandaloneL();
+	}
+
+void CPbkGoToURLCmd::HandleServerAppExit(TInt aReason)
+    {
+    MAknServerAppExitObserver::HandleServerAppExit(aReason);
+    delete this;
+    }
+
+//  End of File