diff -r 4baee4f15982 -r 6385c4c93049 browserui/browser/FavouritesSrc/BrowserBookmarksEditDialog.cpp --- a/browserui/browser/FavouritesSrc/BrowserBookmarksEditDialog.cpp Thu Aug 19 09:57:56 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,523 +0,0 @@ -/* -* 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 the License "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: -* Implementation of CBrowserBookmarkEditDialog. -* -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include // TUriParser - -#include "BrowserBookmarksEditFormApModel.h" -#include "BrowserBookmarksEditDialog.h" -#include "BrowserFavouritesModel.h" -#include "BrowserDialogs.h" -#include "BrowserAppUi.h" -#include "BrowserAppViewBase.h" -#include "commonconstants.h" -#include "Browser.hrh" -#include "BrowserUtil.h" - -#ifdef __SERIES60_HELP -// Context-Sensitve Help File -#include "BrowserApplication.h" -#include -#endif // __SERIES60_HELP - -// CONSTANTS - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::NewL -// --------------------------------------------------------- -// -CBrowserBookmarkEditDialog* CBrowserBookmarkEditDialog::NewL - ( - CFavouritesItem& aItem, - CBrowserFavouritesModel& aModel, - MApiProvider& aApiProvider, - //MCommsModel& aCommsModel, - TInt aUid /* = KFavouritesNullUid */ - ) - { - CBrowserBookmarkEditDialog* form = - new (ELeave) CBrowserBookmarkEditDialog( - aItem, - aModel, - aApiProvider, - aUid - ); - CleanupStack::PushL( form ); - form->ConstructL( /* aApiProvider.CommsModel() */ ); - CleanupStack::Pop(); // form - return form; - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::~CBrowserBookmarkEditDialog -// --------------------------------------------------------- -// -CBrowserBookmarkEditDialog::~CBrowserBookmarkEditDialog() - { - delete iFormApModel; - delete iNaviDecorator; - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::ProcessCommandL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::ProcessCommandL( TInt aCommandId ) - { - switch ( aCommandId ) - { - case EAknCmdExit: - { - // Custom added commands. Forward to view. - // Note that we respond to EAknCmdExit, not CEikCmdExit; it's - // because we don't get it through the AppUi framework (instead, - // we forward it there now). - CBrowserAppUi::Static()->HandleCommandL(EWmlCmdUserExit); - break; - } - -#ifdef __SERIES60_HELP - - case EAknCmdHelp: - { - CBrowserAppUi::Static()->HandleCommandL(EAknCmdHelp); - break; - } - -#endif //__SERIES60_HELP - - default: - { - // Standard form commands. - CAknForm::ProcessCommandL( aCommandId ); - if ( iExitDialog ) - { - TryExitL( EAknSoftkeyBack ); - } - break; - } - } - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::CBrowserBookmarkEditDialog -// --------------------------------------------------------- -// -CBrowserBookmarkEditDialog::CBrowserBookmarkEditDialog - ( - CFavouritesItem& aItem, - CBrowserFavouritesModel& aModel, - MApiProvider& aApiProvider, - TInt aUid - ) - : iItem( &aItem ), - iModel( &aModel ), - iUid( aUid ), - iExitDialog( EFalse ), - iExitNoteResourceId( 0 ), // By default do not show any note. - iApiProvider( aApiProvider ) - { - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::ConstructL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::ConstructL( /*MCommsModel& aCommsModel*/ ) - { - CAknForm::ConstructL(); - iFormApModel = CBrowserBookmarksEditFormApModel::NewL( ApiProvider().CommsModel()/*aCommsModel*/ ); - } - -// ---------------------------------------------------------------------------- -// CBrowserBookmarkEditDialog::OkToExitL -// ---------------------------------------------------------------------------- -// -TBool CBrowserBookmarkEditDialog::OkToExitL( TInt aButtonId ) - { - TBool ret = CAknForm::OkToExitL( aButtonId ); - if ( ret && iExitNoteResourceId ) - { - // Exiting; show appropriate note if applicable. - TBrowserDialogs::InfoNoteL( - R_BROWSER_INFO_NOTE, iExitNoteResourceId ); - } - //pop empty label from navipane - if ( ret ) - iNaviPane->Pop(); - return ret; - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::SaveFormDataL -// --------------------------------------------------------- -// -TBool CBrowserBookmarkEditDialog::SaveFormDataL() - { - // Of KWmlFavouritesMaxUrlDefine, KWmlFavouritesMaxUsernameDefine, KWmlFavouritesMaxPasswordDefine - // and KWmlFavouritesMaxBookmarkNameDefine the biggest is KWmlFavouritesMaxUrlDefine. - TBuf buf; - - // Get title. - GetEdwinText( buf, EWmlControlEditBmEditTitle ); - iItem->SetNameL( buf.Left(KFavouritesMaxName) ); - - // Get address. - GetEdwinText( buf, EWmlControlEditBmEditAddress ); - HBufC* text = HBufC::NewL(KFavouritesMaxUrlDefine); - - // Do not check return value from Parse(). If the user wants to create a - // badly formed url then let them do so. - TUriParser url; - url.Parse( buf ); - - // Add a default scheme if it is not already present. - if( !url.IsPresent( EUriScheme ) ) - { - _LIT( KBookmarkDefaultScheme, "http://" ); - - text->Des().Copy( KBookmarkDefaultScheme ); - } - // Error prone code. If user enters the whole KFavouritesMaxUrlDefine(1024) amount of - // characters with out the http:// infront, well have a USER:23 here. - // Hack aplied for now and included in FIX: EKDN-7P64KZ - // Needs a proper error raised and a fix. - // - // Check if long enough and append, if not we dont add http:// - // and alert user in SaveItemL() with popup that there must be an url - // NOTICE: THIS NEEDS A PROPER FIX - THIS IS A TEMP WORKAROUND - if( ( buf.Length() + text->Length() ) <= KFavouritesMaxUrlDefine ) - { - text->Des().Append( buf ); - } - else - { - text->Des().Copy( buf ); - } - - - Util::EncodeSpaces(text); - CleanupStack::PushL(text);// push after encode because the pointer may change - iItem->SetUrlL( text->Des() ); - CleanupStack::PopAndDestroy();// text - - // Get username. - GetEdwinText( buf, EWmlControlEditBmEditUsername ); - iItem->SetUserNameL( buf ); - - // Get password. - STATIC_CAST( CEikSecretEditor*, Control( EWmlControlEditBmEditPassword ) ) - ->GetText( buf ); - iItem->SetPasswordL( buf ); - - // Get WAP Access point. - TFavouritesWapAp ap = iFormApModel->CurrentWapAp(); - if ( !ap.IsNull() ) - { - // We set it back only if not NULL. - // AP is NULL if invalid (bookmark was edited, but the ap was not and - // it is left "Invalid". In that case we leave ap as-is. - iItem->SetWapAp( ap ); - } - - return SaveItemL(); - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::DynInitMenuPaneL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::DynInitMenuPaneL -( TInt aResourceId, CEikMenuPane* aMenuPane ) - { - CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane ); - if ( aResourceId == R_AVKON_FORM_MENUPANE ) - { - // Disallow user addition / deletion / labeling. - aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue ); - aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue ); - aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue ); - // Add "Exit". - aMenuPane->AddMenuItemsL - ( R_BROWSER_BOOKMARKS_MENU_PANE_EDIT_BOOKMARK ); - } - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::PreLayoutDynInitL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::PreLayoutDynInitL() - { - LoadFormDataL(); - CAknForm::PreLayoutDynInitL(); - - CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane(); - // Fetch pointer to the default navi pane control - iNaviPane = - (CAknNavigationControlContainer*)sp->ControlL( - TUid::Uid( EEikStatusPaneUidNavi ) ); - iNaviDecorator = iNaviPane->CreateNavigationLabelL( _L("") ); - - // push empty label, to avoid tab group visibility in BookmarkEditor. - iNaviPane->PushL( *iNaviDecorator ); - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::LoadFormDataL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::LoadFormDataL() - { - - // Set title. - const TPtrC tptrcName = iItem->Name(); - STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditTitle ) )-> - SetTextL( &(tptrcName) ); - - // Set address. - const TPtrC tptrcUrl = iItem->Url(); - STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditAddress ) )-> - SetTextL( &(tptrcUrl) ); - - // Set username. - const TPtrC tptrcUserName = iItem->UserName(); - STATIC_CAST( CEikEdwin*, Control( EWmlControlEditBmEditUsername ) )-> - SetTextL( &(tptrcUserName) ); - - // Set password. - STATIC_CAST( CEikSecretEditor*,Control( EWmlControlEditBmEditPassword ) )-> - SetText( iItem->Password() ); - - // Set WAP Access Point popup field's query value. - CAknPopupField* wapApSelector = STATIC_CAST - ( CAknPopupField*, Control( EWmlControlEditBmWapApSelector ) ); - wapApSelector->SetQueryValueL( iFormApModel->QueryValue() ); - // Set current WAP Access Point. - iFormApModel->SetCurrentWapApL( iItem->WapAp() ); - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::SaveItemL -// --------------------------------------------------------- -// -TBool CBrowserBookmarkEditDialog::SaveItemL() - { - TInt res; - CBrowserFavouritesModel::TRenameMode renameMode = - CBrowserFavouritesModel::EDontRename; - - iExitNoteResourceId = 0; // By default, do not show any note. - - if ( !iItem->Name().Length() ) - { - // No title for this item. Make a default name and ensure auto renaming - // to non-conflicting name (without user interaction). - iModel->SetNameToDefaultL( *iItem ); - renameMode = CBrowserFavouritesModel::EAutoRename; - } - - if ( iItem->Url().Length() && iItem->Url() != KHttpString && IsValidUrlHost( iItem->Url() ) ) - { - if ( iUid == KFavouritesNullUid ) - { - // This is a new item. Add it. - res = iModel->AddL( *iItem, /*aDbErrorNote=*/ETrue, renameMode ); - } - else - { - // Editing an existing item. Update now. - res = iModel->UpdateL - ( *iItem, iUid, /*aDbErrorNote=*/ETrue, renameMode ); - } - switch ( res ) - { - case KErrNone: - { - iExitDialog = ETrue; - break; - } - case KErrAlreadyExists: - { - // Name conflicts. Let the user know. - TBrowserDialogs::InfoNoteL - ( - R_BROWSER_INFO_NOTE, - R_BROWSER_BOOKMARKS_NAME_ALREADY_USED - ); - // Set focus to name field and keep editing. - TryChangeFocusToL( EWmlControlEditBmEditTitle ); - // Select all, cursor is at end. - CEikEdwin* nameEditor = STATIC_CAST - ( CEikEdwin*, Control( EWmlControlEditBmEditTitle ) ); - nameEditor->SetSelectionL( nameEditor->TextLength(), 0 ); - nameEditor->DrawDeferred(); - iExitDialog = EFalse; - break; - } - default: - { - iExitDialog = EFalse; - break; - } - } - } - else - { - // No Address. Cannot save this bookmark. - res = TBrowserDialogs::ConfirmQueryYesNoL( - R_BROWSER_BOOKMARKS_TEXT_QUERY_ADDRESS ); - if ( !res /*res == EAknSoftkeyNo*/ ) - { - // User decided not to save the bookmark. Exit now. - iExitNoteResourceId = iModel->StringResourceId - ( *iItem, CBrowserFavouritesModel::ENotSaved ); - iExitDialog = ETrue; - } - else - { - // Set focus to address field and keep editing. - TryChangeFocusToL( EWmlControlEditBmEditAddress ); - CEikEdwin* urlEditor = STATIC_CAST - ( CEikEdwin*, Control( EWmlControlEditBmEditAddress ) ); - // Select none, cursor is at end. - urlEditor->SetSelectionL - ( urlEditor->TextLength(), urlEditor->TextLength() ); - urlEditor->DrawDeferred(); - iExitDialog = EFalse; - } - } - return iExitDialog; - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::IsValidUrlHost -// --------------------------------------------------------- -// -TBool CBrowserBookmarkEditDialog::IsValidUrlHost( const TDesC& aUrl ) - { - TBool isValid = EFalse; - _LIT(KHttpMark, "://"); - // Get the position of end of protocol definition - TInt position = aUrl.Find( KHttpMark ); - if ( position != KErrNotFound ) - { - TPtrC16 url = aUrl.Right( aUrl.Length() - position - KHttpMark().Length() ); - // Locate the next slash which is the end of host part of url - TInt slashLocation = url.Locate('/'); - // We check the total length of host part of url. - // If over 255 we return EFalse - if ( slashLocation == KErrNotFound ) - { - if ( ( url.Length() + position + KHttpMark().Length() ) <= 255 ) - { - isValid = ETrue; - } - } - else - { - if ( ( position + slashLocation + KHttpMark().Length() ) <= 255 ) - { - isValid = ETrue; - } - } - } - return isValid; - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::GetEdwinText -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::GetEdwinText -( TDes& aText, TInt aControlId ) - { - STATIC_CAST( CEikEdwin*, Line( aControlId )->iControl )->GetText( aText ); - } - - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::HandleResourceChange -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::HandleResourceChange( TInt aType ) - { - TRAP_IGNORE( HandleResourceChangeL( aType ) ); - } - -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::HandleResourceChangeL -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::HandleResourceChangeL( TInt aType ) - { - CAknForm::HandleResourceChange(aType); - if (aType == KEikDynamicLayoutVariantSwitch) - { - TRect rect; - if (AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect)) - { - SetRect(rect); - } - } - } - -#ifdef __SERIES60_HELP -// --------------------------------------------------------- -// CBrowserBookmarkEditDialog::GetHelpContext() -// --------------------------------------------------------- -// -void CBrowserBookmarkEditDialog::GetHelpContext( TCoeHelpContext& aContext ) const - { - aContext.iMajor = KUidBrowserApplication; - if ( iUid == KFavouritesNullUid ) - { - // Add bookmark help - aContext.iContext = KOSS_HLP_BM_ADDBM; - } - else - { - // Edit bookmark help - aContext.iContext = KOSS_HLP_BM_EDIT; - } - } -#endif // __SERIES60_HELP - -// End of File