diff -r 4baee4f15982 -r 6385c4c93049 browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp --- a/browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp Thu Aug 19 09:57:56 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,697 +0,0 @@ -/* -* Copyright (c) 2005 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: Encapsulates a edit feed dialog. -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __SERIES60_HELP -// Context-Sensitve Help File -#include -#include -#include "BrowserApplication.h" -#endif // __SERIES60_HELP - -#include "BrowserAppUi.h" -#include "BrowserAppViewBase.h" -#include "Browser.hrh" -#include -#include - -#include "FeedsEditFeedDialog.h" -#define pixelOffset 36 - -//Constants -const TInt KAutoUpdatingOff = 0; -const TInt KFifteen = 15; -const TInt KOneHour = 60; -const TInt KFourHour = 240; -const TInt KDay = 1440; -const TInt KWeek = 10080; - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::NewL -// -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver, - CAknViewAppUi* aAppUi, - const TDesC& aName, const TDesC& aUrl, TInt aFreq) - { - CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, aName, aUrl, aFreq); - CleanupStack::PushL(self); - self->ConstructL(); - self->iSelectedDlgLine = 0; - CleanupStack::Pop(self); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::NewL -// -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver, CAknViewAppUi* aAppUi) - { - CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, KNullDesC, KNullDesC,0); - - CleanupStack::PushL(self); - self->iIsNewFeed = ETrue; - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::CFeedsEditFeedDialog -// -// C++ default constructor. -// ----------------------------------------------------------------------------- -// -CFeedsEditFeedDialog::CFeedsEditFeedDialog (MFeedsEditFeedDialogObserver& aObserver, - CAknViewAppUi* aAppUi, - const TDesC& aName, const TDesC& aUrl, TInt aFreq) - :iObserver(aObserver), iAppUi(aAppUi), iName(aName), iUrl(aUrl),iFreq(aFreq), iActionCancelled(EFalse) - { - iPreviousFreq = iFreq; - } - - - -// ---------------------------------------------------- -// CFeedsEditFeedDialog::OfferKeyEventL -// Keyevent process. -// ---------------------------------------------------- -// -TKeyResponse CFeedsEditFeedDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType) - { - if ((aKeyEvent.iScanCode == EStdKeyDevice3) || (aKeyEvent.iScanCode == EStdKeyEnter)) - { - if ((aType == EEventKey) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId)) - { - HandleFreqCmdL(); - return EKeyWasConsumed; - } - } - return CAknForm::OfferKeyEventL(aKeyEvent, aType); - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::HandlePointerEventL -// --------------------------------------------------------- -// -void CFeedsEditFeedDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - CAknForm::HandlePointerEventL(aPointerEvent); - if ((iSelectedDlgLine != IdOfFocusControl()) && (aPointerEvent.iType == TPointerEvent::EButton1Up)) - { - LineChangedL(IdOfFocusControl()); - } - else - { - if ( aPointerEvent.iType == TPointerEvent::EButton1Down) - { - iPointerEvent = aPointerEvent; - } - else if ( aPointerEvent.iType == TPointerEvent::EDrag ) - { - if((Abs(iPointerEvent.iPosition.iX - aPointerEvent.iPosition.iX) > pixelOffset ) || - (Abs(iPointerEvent.iPosition.iY - aPointerEvent.iPosition.iY) > pixelOffset )) - { - iDrag = ETrue; - } - } - else if ((iSelectedDlgLine == EFeedsEditAutomaticUpdatingId) && (aPointerEvent.iType == TPointerEvent::EButton1Up)) - { - if(!iDrag) - { - HandleFreqCmdL(); - } - else - { - iDrag = EFalse; - } - } - } - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::OkToExitL -// --------------------------------------------------------- -// - -TBool CFeedsEditFeedDialog::OkToExitL( TInt aButtonId ) - { - if (aButtonId == EAknSoftkeyOptions) - { - DisplayMenuL(); - return EFalse; - } - else - if ((aButtonId == EAknSoftkeyChange) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId)) - { - HandleFreqCmdL(); - return EFalse; - } - else - { - return CAknForm::OkToExitL(aButtonId); - } - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::HandleFreqCmdL -// Handles the auto update freuency modification commands -// --------------------------------------------------------- -// -void CFeedsEditFeedDialog::HandleFreqCmdL() - { - TInt currentlySelected = KAutoUpdatingOff; - - // options array - CDesCArrayFlat* values = new( ELeave )CDesCArrayFlat(1); - - CleanupStack::PushL( values ); - HBufC* text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY); - values->AppendL(text->Des()); - CleanupStack::Pop(); - - switch(iFreq) - { - case KAutoUpdatingOff: - currentlySelected = EFeedsEditAutomaticUpdatingOff; - break; - case KFifteen: - currentlySelected = EFeedsEditAutomaticUpdating15min; - break; - case KOneHour: - currentlySelected = EFeedsEditAutomaticUpdatingHourly; - break; - case KFourHour: - currentlySelected = EFeedsEditAutomaticUpdating4hours; - break; - case KDay: - currentlySelected = EFeedsEditAutomaticUpdatingDaily; - break; - case KWeek: - currentlySelected = EFeedsEditAutomaticUpdatingWeekly; - break; - } - - HBufC* title; - title=iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEED); - currentlySelected = ShowRadioButtonSettingPageL(*title,values,currentlySelected); - CleanupStack::PopAndDestroy(); // title - - if(!iActionCancelled) - { - switch(currentlySelected) - { - case EFeedsEditAutomaticUpdatingOff: - iFreq = KAutoUpdatingOff; - break; - case EFeedsEditAutomaticUpdating15min: - iFreq = KFifteen; - break; - case EFeedsEditAutomaticUpdatingHourly: - iFreq = KOneHour; - break; - case EFeedsEditAutomaticUpdating4hours: - iFreq = KFourHour; - break; - case EFeedsEditAutomaticUpdatingDaily: - iFreq = KDay; - break; - case EFeedsEditAutomaticUpdatingWeekly: - iFreq = KWeek; - break; - } - CAknPopupField *freqControl = - static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) ); - switch(iFreq) - { - case KAutoUpdatingOff: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF); - break; - case KFifteen: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN); - break; - case KOneHour: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY); - break; - case KFourHour: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS); - break; - case KDay: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY); - break; - case KWeek: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY); - break; - } - freqControl->SetEmptyTextL(text->Des()); - CleanupStack::Pop(); - SetChangesPending(ETrue); - } - CleanupStack::PopAndDestroy(values); - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::PostLayoutDynInitL -// --------------------------------------------------------- -// - -void CFeedsEditFeedDialog::PostLayoutDynInitL() - { - //Call the Base class LineChangedL() before the form is actually drawn - // Call the LineChangedL to avoid the line clicking error for the first line - LineChangedL(EFeedsEditDialogUrlId); - // Call the base class PostLayoutDynInitL() - CAknForm::PostLayoutDynInitL(); - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::LineChangedL -// Takes any action required when the current line is changed -// to aControlId. -// --------------------------------------------------------- -// -void CFeedsEditFeedDialog::LineChangedL( TInt aControlId ) - { - iSelectedDlgLine = aControlId; - //get the reference to the buttomgroup container - CEikButtonGroupContainer& cba = ButtonGroupContainer(); - //add the 'Change' command - //cba.SetCommandSetL(R_EDIT_FEEDS_CBA_OPTIONS_AUTO_UPDATE_CONTEXT_MENU); - - //now we check where is the control, as 'Change' command is not to be - //shown for the first two form lines - if((aControlId == EFeedsEditDialogUrlId) || - (aControlId == EFeedsEditDialogNameId)) - { - // make the 'Change' button invisible - cba.MakeCommandVisible(EAknSoftkeyChange, EFalse); - CEikEdwin* edwin = NULL; - edwin = static_cast(ControlOrNull(EFeedsEditDialogUrlId)); - if(edwin) - edwin->SetAknEditorFlags(EAknEditorFlagNoT9 | EAknEditorFlagUseSCTNumericCharmap); - } - else if(aControlId == EFeedsEditAutomaticUpdatingId) - { - // make the 'Change' Button visible - cba.MakeCommandVisible(EAknSoftkeyChange, ETrue); - } - else - { - //blank implementation - } - // draw the CBA - cba.DrawNow(); - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::~CFeedsEditFeedDialog -// -// Deconstructor. -// ----------------------------------------------------------------------------- -// -CFeedsEditFeedDialog::~CFeedsEditFeedDialog() - { - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::PreLayoutDynInitL -// -// Called to setup the options menu with the dialog is active. -// ----------------------------------------------------------------------------- -// -void CFeedsEditFeedDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) - { - CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane); - - if (aResourceId == R_AVKON_FORM_MENUPANE) - { - aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue); - aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue); - aMenuPane->SetItemDimmed(EAknFormCmdDelete, ETrue); - - aMenuPane->AddMenuItemsL(R_FEEDS_HELP_EXIT_FEED_MENU); - } - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::SaveFormDataL -// -// Called by the framework whenver the 'Save' menu item is selected. -// ----------------------------------------------------------------------------- -// -TBool CFeedsEditFeedDialog::SaveFormDataL() - { - CEikEdwin* textEditorName; - CEikEdwin* textEditorUrl; - - HBufC* name = NULL; - HBufC* url = NULL; - TBool valid = EFalse; - - // Extract the new name. - textEditorName = static_cast(ControlOrNull(EFeedsEditDialogNameId)); - name = textEditorName->GetTextInHBufL(); - CleanupStack::PushL(name); - - // Extract the url name. - textEditorUrl = static_cast(ControlOrNull(EFeedsEditDialogUrlId)); - url = textEditorUrl->GetTextInHBufL(); - CleanupStack::PushL(url); - - // Notify the observer. - valid = iObserver.IsFeedNameValidL(name, !iIsNewFeed); - - // If invalid force the user to reentry it. - if (!valid) - { - // Change Focus and select the name field. - TryChangeFocusToL( EFeedsEditDialogNameId ); - textEditorName->SelectAllL(); - - iExitDialog = EFalse; - } - - // Otherwise, check the url too. - else - { - valid = iObserver.IsFeedUrlValidL(url); - - // If invalid force the user to reentry it. - if (!valid) - { - // Set focus to url field - TryChangeFocusToL( EFeedsEditDialogUrlId ); - // Position focus to end of char, but not highlight the whole url field - textEditorUrl->SetSelectionL( textEditorUrl->TextLength(), textEditorUrl->TextLength() ); - textEditorUrl->DrawDeferred(); - iExitDialog = EFalse; - } - - // Otherwise pass the new values to the observer. - else - { - if (iIsNewFeed) - { - iObserver.NewFeedL(*name, *url, iFreq); - } - else - { - // If the setting is changed from Off to other values, a confirmation - // query with text: 'Enabling automatic updating may increase your monthly - // phone bill' is shown. - if ((iPreviousFreq == EFeedsEditAutomaticUpdatingOff) && - (iFreq != EFeedsEditAutomaticUpdatingOff) && (iPreviousFreq != iFreq)) - { - HBufC* note = StringLoader::LoadLC( R_FEEDS_DATAQUERY_AUTOUPDATEWARN ); - if(iPreviousFreq == 0) - { - ShowInfoDialogwithOkSoftKeyL(note->Des()); - } - CleanupStack::PopAndDestroy(); // note - iPreviousFreq = iFreq; - } - iObserver.UpdateFeedL(*name, *url, iFreq); - } - - iExitDialog = ETrue; - } - } - - // Clean up. - CleanupStack::PopAndDestroy(url); - CleanupStack::PopAndDestroy(name); - - return valid; - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::PreLayoutDynInitL -// -// Called by the framework before the form is initialised. -// ----------------------------------------------------------------------------- -// -void CFeedsEditFeedDialog::PreLayoutDynInitL() - { - CEikEdwin* textEditor = NULL; - - CAknForm::PreLayoutDynInitL(); - - // Get the name field - textEditor = static_cast(ControlOrNull(EFeedsEditDialogNameId)); - - // If the name was set then set it. - if (iName.Length() > 0) - { - textEditor->SetTextL(&iName); - } - - // Otherwise use the default name. - else - { - HBufC* text = NULL; - - // Load the label - text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_ITEM); - CleanupStack::PushL(text); - - textEditor->SetTextL(text); - SetFormFlag(EUnsavedEdit, ETrue); - - CleanupStack::PopAndDestroy(text); - } - - // Get the url field - textEditor = static_cast(ControlOrNull(EFeedsEditDialogUrlId)); - - textEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode | EAknEditorNumericInputMode ); - - textEditor->SetAknEditorFlags - ( - EAknEditorFlagLatinInputModesOnly | - EAknEditorFlagUseSCTNumericCharmap - ); - textEditor->SetAknEditorPermittedCaseModes( EAknEditorUpperCase | EAknEditorLowerCase ); - - // If the url was set then set it. - if (iUrl.Length() > 0) - { - textEditor->SetTextL(&iUrl); - } - - // Otherwise use the url. - else - { - HBufC* text = NULL; - - // Load the label - text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_URL_ITEM); - CleanupStack::PushL(text); - - textEditor->SetTextL(text); - SetFormFlag(EUnsavedEdit, ETrue); - - CleanupStack::PopAndDestroy(text); - } - CAknPopupField *freqControl = - static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) ); - HBufC* text = NULL; - switch(iFreq) - { - case KAutoUpdatingOff: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF); - break; - case KFifteen: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN); - break; - case KOneHour: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY); - break; - case KFourHour: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS); - break; - case KDay: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY); - break; - case KWeek: - text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY); - break; - } - freqControl->SetEmptyTextL(text->Des()); - CleanupStack::Pop(); - } - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::ProcessCommandL -// -// Called by the framework to process the options menu. -// ----------------------------------------------------------------------------- -// -void CFeedsEditFeedDialog::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()->ActiveView()->ProcessCommandL( aCommandId ); - break; - } - - case EEikCmdExit: - break; - -#ifdef __SERIES60_HELP - case EAknFepCmdPredHelp: - case EAknCmdHelp: - HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), - iAppUi->AppHelpContextL()); - - break; -#endif //__SERIES60_HELP - case EWmlCmdAboutProduct: - { - iAppUi->HandleCommandL( aCommandId ); - break; - } - default: - // Standard form commands. - CAknForm::ProcessCommandL(aCommandId); - - if (iExitDialog) - { - TryExitL(EAknSoftkeyBack); - } - break; - } - } - - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::GetHelpContext -// -// Get help context for the control. -// ----------------------------------------------------------------------------- -// -#ifdef __SERIES60_HELP -void CFeedsEditFeedDialog::GetHelpContext(TCoeHelpContext& aContext) const - { - // This must be the Browser's uid becasue the help texts are under Browser topics. - aContext.iMajor = KUidBrowserApplication; - - if (iIsNewFeed) - { - aContext.iContext = KOSS_HLP_RSS_ADD; - } - else - { - aContext.iContext = KOSS_HLP_RSS_EDIT; - } - } -#endif // __SERIES60_HELP - -// ----------------------------------------------------------------------------- -// CFeedsEditFeedDialog::ShowRadioButtonSettingPageL -// ----------------------------------------------------------------------------- -// -TInt CFeedsEditFeedDialog::ShowRadioButtonSettingPageL( - TDesC& aTitle, - CDesCArrayFlat* aValues, - TInt aCurrentItem ) - { - - // index must be turned upside down, because options list is upside down - //TInt newItem = aCurrentItem = aValues->Count() - 1 - aCurrentItem; - TInt newItem = aCurrentItem; - - // We have everything to create dialog - CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage( - R_RADIO_BUTTON_SETTING_PAGE, newItem, aValues ); - - CleanupStack::PushL( dlg ); - dlg->SetSettingTextL( aTitle ); - CleanupStack::Pop(); // dlg - iActionCancelled = EFalse; - if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - // Changes confirmed - newItem = aCurrentItem; - iActionCancelled = ETrue; - } - //iActionCancelled = EFalse; - - // index must be re-turned upside down, because options list is upside down - return newItem; - } - -// --------------------------------------------------------- -// CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL -// --------------------------------------------------------- -// -void CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL( const TDesC& aNoteText ) - { - CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone,CAknNoteDialog::ENoTimeout); - dlg->SetTextL( aNoteText ); - dlg->PrepareLC( R_FEEDS_EDIT_AUTOUPDATE_INFORMATION_NOTE_DIALOG ); - dlg->RunLD(); - }