--- a/browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,676 +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 <AknPopupFieldText.h>
-#include <aknslider.h>
-#include <avkon.hrh>
-#include <avkon.rsg>
-#include <eikedwin.h>
-#include <eikmenup.h>
-#include <charconv.h>
-#include <aknviewappui.h>
-#include <StringLoader.h>
-
-#ifdef __SERIES60_HELP
-// Context-Sensitve Help File
-#include <hlplch.h>
-#include <csxhelp/browser.hlp.hrh>
-#include "BrowserApplication.h"
-#endif // __SERIES60_HELP
-
-#include "BrowserAppUi.h"
-#include "BrowserAppViewBase.h"
-#include "Browser.hrh"
-#include <BrowserNG.rsg>
-#include <AknRadioButtonSettingPage.h>
-
-#include "FeedsEditFeedDialog.h"
-
-//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)
- {
- if ((iSelectedDlgLine != IdOfFocusControl()) && (aPointerEvent.iType == TPointerEvent::EButton1Up))
- {
- LineChangedL(IdOfFocusControl());
- }
- else
- {
- if ((iSelectedDlgLine == EFeedsEditAutomaticUpdatingId) && (aPointerEvent.iType == TPointerEvent::EButton1Up))
- {
- HandleFreqCmdL();
- }
- else
- {
- CAknForm::HandlePointerEventL(aPointerEvent);
- }
- }
- }
-
-// ---------------------------------------------------------
-// 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);
- }
- 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<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
- name = textEditorName->GetTextInHBufL();
- CleanupStack::PushL(name);
-
- // Extract the url name.
- textEditorUrl = static_cast<CEikEdwin*>(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<CEikEdwin*>(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<CEikEdwin*>(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();
- }