--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/iraddmanuallystationcontainer.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,961 @@
+/*
+* Copyright (c) 2004 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: Container class for channel list view
+*
+*/
+
+
+#include <akniconutils.h>
+#include <aknindicatorcontainer.h>
+#include <aknutils.h>
+
+#include <akniconarray.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <barsread.h>
+#include <eikenv.h>
+#include <eiklabel.h>
+#include <eikmenub.h>
+#include <eikedwin.h>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <internetradio.rsg>
+#include <internetradio.mbg>
+#include <baclipb.h>
+#include <aknsfld.h> //CAknSearchField
+#include <txtetext.h>
+#include <eikdialg.h>
+#include <akntoolbar.h>
+#include <aknappui.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <aknnotewrappers.h>
+#include <aknpopupfieldtext.h>
+#include <mgfetch.h>
+/* the head file is really uplayer case, so we don't need to change it. */
+#include <AknsConstants.h>
+#include <eikaufty.h>
+#include <hlplch.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "iriconloader.h"
+#include "irfavoritesdb.h"
+#include "irdialoglauncher.h"
+#include "irpreset.h"
+#include "irhistory.h"
+
+#include "irisdspreset.h"
+#include "irchannelserverurl.h"
+#include "irnowplayingwrapper.h"
+#include "iraddmanuallystationview.h"
+#include "iraddmanuallystationcontainer.h"
+#include "irapplication.h"
+#include "iraap.hlp.hrh" //Added to implement HELP option SPP
+#include "irsettings.h" //Added to maintain the IfAnyFav variable in settings
+
+
+const TInt KBeginning = 0;
+const TInt KMaxLength = 100;
+const TInt KbufMaxLength = 10;
+
+_LIT(KUnamedStation,"Unnamed station");
+_LIT(KNullStation,"");
+_LIT(KSpace," ");
+
+const TInt KMaxSize = 256;
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer* CIRAddManuallyStationContainer::NewL(
+ CIRAddManuallyStationView* aView)
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::NewL - Begin" );
+ CIRAddManuallyStationContainer* self = new ( ELeave ) CIRAddManuallyStationContainer(aView);//(aToolbar)
+ CleanupStack::PushL( self );
+ CleanupStack::Pop( self );
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::NewL - Exiting" );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer::CIRAddManuallyStationContainer( CIRAddManuallyStationView* aView):
+ iView(aView)
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::CIRAddManuallyStationContainer" );
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer" );
+ if(iPreset)
+ {
+ delete iPreset;
+ iPreset=NULL;
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::~CIRAddManuallyStationContainer" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Opens help by context.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CIRAddManuallyStationContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::GetHelpContext Begin" );
+ aContext = TCoeHelpContext( KIRMCVUid, KIR_HELP_ADD_URL );
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::GetHelpContext End" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRAddManuallyStationContainer::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::DynInitMenuPaneL - Begin " );
+ CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane );
+ if ( aResourceId == R_AVKON_FORM_MENUPANE ) //R_AVKON_FORM_MENUPANE
+ {
+ aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue);
+ aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue );
+ aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue );
+ aMenuPane->SetItemDimmed( EAknFormCmdSave, ETrue );
+ aMenuPane->SetItemDimmed( EAknFormCmdEdit, ETrue );
+ if(iView->iNowPlayingWrapper->iPlaying)
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+ }
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::DynInitMenuPaneL - Exiting." );
+ }
+
+//-------------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::ProcessCommandL
+// From CAknForm, takes care of command handling.
+// @param aCommand Command to be handled
+//--------------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::ProcessCommandL( TInt aCommand )
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ProcessCommandL - Begin " );
+ CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+ switch(aCommand)
+ {
+ case EGotoNowPlayingViewCmd:
+ {
+ iView->HandleCommandL(EGotoNowPlayingViewCmd);
+ break;
+ }
+ case EHelpCmd:
+ {
+ iView->HandleCommandL(EHelpCmd);
+ break;
+ }
+ case EExitCmd:
+ {
+ iView->HandleCommandL(EExitCmd);
+ break;
+ }
+ default:
+ iView->HandleCommandL( aCommand );
+
+ }
+ CAknForm::ProcessCommandL(aCommand);
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ProcessCommandL - Exiting " );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::OkToExitL
+//
+// -----------------------------------------------------------------------------
+TBool CIRAddManuallyStationContainer::OkToExitL( TInt aButtonId )
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::OkToExitL - Begin " );
+ if ( aButtonId == EAknSoftkeyCancel)
+ {
+ iView->HandleCommandL(EAknSoftkeyBack);
+ }
+ if ( aButtonId == EAknSoftkeyOptions )
+ {
+ DisplayMenuL();
+ }
+ if( aButtonId == EAddExit )
+ {
+ iView->HandleCommandL(EAknSoftkeyBack);
+ return ETrue;
+ }
+ TBool ret = CAknForm::OkToExitL( aButtonId );
+
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::OkToExitL - Exiting " );
+ return ret;
+ }
+
+void CIRAddManuallyStationContainer::PreLayoutDynInitL()
+ {
+ CAknForm::PreLayoutDynInitL();
+ }
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::PostLayoutDynInitL
+//
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::PostLayoutDynInitL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::PostLayoutDynInitL - Begin " );
+ CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+ //for enabling paste button if clipboard contains some data
+ RFs& fs = iEikonEnv->FsSession();
+ CClipboard* clipBoard = CClipboard::NewForReadingLC(fs);
+ TBuf<KMaxLength> pasteData;
+ CPlainText* plainText = CPlainText::NewL();
+ CleanupStack::PushL(plainText);
+ plainText->PasteFromStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning);
+ plainText->Extract(pasteData,KBeginning,KMaxLength);
+ TInt length=pasteData.Length() ;
+ if(length)
+ {
+ iView->iIsCopied=ETrue;
+ iView->SetToolbarItems();
+ }
+ CleanupStack::PopAndDestroy(plainText);
+ CleanupStack::PopAndDestroy(clipBoard);
+ iIsEditStation=iView->iUi->GetEditStation();
+ if(iIsEditStation)
+ {
+ TInt urlCount = iView->iNowPlayingWrapper->iEditStationPreset->GetUrlCount();
+ if (urlCount <= 0)
+ {
+ DefaultVauleL();
+ iView->iIsTextEntered=EFalse;
+ }
+ else
+ {
+ SetEdwinTextL(EAddStaionURL,
+ &iView->iNowPlayingWrapper->iEditStationPreset->GetChannelUrlAtL(0) );
+ TBuf<KMaxSize> unnamedStation(KUnamedStation);
+ TBuf<KMaxSize> stationName = iView->iNowPlayingWrapper->iEditStationPreset->GetName();
+ if(stationName == unnamedStation)
+ {
+ stationName.Copy(KNullStation);
+ }
+ SetEdwinTextL(EAddStaionName,
+ &stationName);
+
+ SetEdwinTextL(EAddStaionDescription,
+ &iView->iNowPlayingWrapper->iEditStationPreset->GetDescription());
+
+ iView->iIsTextEntered=ETrue;
+ }
+ iView->SetAddStationsTitleL();
+ iView->SetToolbarItems();
+ }
+ else
+ {
+ DefaultVauleL();
+ iView->iIsTextEntered=EFalse;
+ iView->SetToolbarItems();
+ }
+
+// CEikDialog::SetTitleL(R_IRAPP_ADDMANUALLY_TITLE)
+ CAknForm::PostLayoutDynInitL();
+ iView->iUi->HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
+ HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::PostLayoutDynInitL - Exiting " );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::DefaultVauleL()
+//
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::DefaultVauleL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::DefaultVauleL - Begin " );
+ HBufC *httpstring = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_HTTP);
+ SetEdwinTextL( EAddStaionURL, httpstring );
+ CleanupStack::PopAndDestroy(httpstring);
+
+ HBufC *unnamedstring = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_NONAME);
+ SetEdwinTextL( EAddStaionName, unnamedstring );
+ CleanupStack::PopAndDestroy(unnamedstring);
+ _LIT(blank,"");
+ TBuf<KbufMaxLength> buf(blank);
+ SetEdwinTextL( EAddStaionDescription,&buf );
+
+ CEikDialog::SetInitialCurrentLine();
+ TryChangeFocusToL(EAddStaionURL);
+
+ CCoeControl* cntrl = CEikDialog::Control(EAddStaionURL);
+ CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( cntrl );
+ TInt txtLength=myEdwin->TextLength();
+ myEdwin->SetCursorPosL (txtLength, EFalse);
+
+ iView->SetAddStationsTitleL();
+
+
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::DefaultVauleL - Exiting " );
+ }
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::CopyData
+//
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::CopyDataL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::CopyDataL - Begin " );
+ RFs& fs = iEikonEnv->FsSession();
+ CClipboard* clipBoard = CClipboard::NewForWritingLC(fs);
+ CPlainText* plainText = CPlainText::NewL();
+ CleanupStack::PushL(plainText);
+ TInt idoffocused = CEikDialog::IdOfFocusControl();
+ CCoeControl* ictrl = CEikDialog::Control(idoffocused);
+ CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( ictrl );
+ TCursorSelection sel=myEdwin->Selection();
+ GetEdwinText( iSelText, idoffocused );
+ TInt txtlength=myEdwin->TextLength();
+ TInt length = sel.Length();
+ if(length)
+ {
+ HBufC* number = HBufC::NewLC( length );
+ TPtr numberPtr = number->Des();
+ TInt pos=sel.LowerPos();
+ if (pos < iSelText.Length())
+ numberPtr.Copy(&iSelText[pos],length);
+ plainText->InsertL(0, *number);
+ plainText->CopyToStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning,
+ plainText->DocumentLength());
+ clipBoard->CommitL();
+ CleanupStack::PopAndDestroy(number);
+ }
+ else
+ {
+ myEdwin->SetSelectionL(0,txtlength);
+ plainText->InsertL(0, iSelText);
+ plainText->CopyToStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning,
+ plainText->DocumentLength());
+ clipBoard->CommitL();
+ }
+ CleanupStack::PopAndDestroy(plainText);
+ CleanupStack::PopAndDestroy(clipBoard);
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::CopyDataL - Exiting " );
+ }
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::PasteData
+//
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::PasteDataL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::PasteDataL - Begin " );
+ RFs& fs = iEikonEnv->FsSession();
+ CClipboard* clipBoard = CClipboard::NewForReadingLC(fs);
+ TBuf<KMaxLength> clipBoardText;
+ CPlainText* plainText = CPlainText::NewL();
+ CleanupStack::PushL(plainText);
+ plainText->PasteFromStoreL(clipBoard->Store(), clipBoard->StreamDictionary(),KBeginning);
+ TInt idOfFocused=CEikDialog::IdOfFocusControl();
+ CCoeControl* ictrl=CEikDialog::Control(idOfFocused);
+ CEikEdwin* myEdwin = static_cast<CEikEdwin*> ( ictrl );
+ TCursorSelection sel=myEdwin->Selection();
+ GetEdwinText( iSelText, idOfFocused );
+ HBufC* number = HBufC::NewLC(KMaxLength);
+ TPtr numberPtr = number->Des();
+ TInt length = sel.Length();
+ TInt txtLength=myEdwin->TextLength();
+ TInt diffLength=KMaxLength-(txtLength-length);
+ plainText->Extract(clipBoardText,KBeginning,diffLength);
+ if (txtLength!=0)
+ {
+ numberPtr.Copy(&iSelText[0],txtLength);
+ if(length!=0)
+ {
+ TInt pos=sel.LowerPos();
+
+ numberPtr.Delete(pos,length);
+ numberPtr.Insert(pos,clipBoardText);
+ SetEdwinTextL( idOfFocused, number );
+ }
+ else
+ {
+ TInt pos=myEdwin->CursorPos();
+ numberPtr.Insert(pos,clipBoardText);
+ SetEdwinTextL( idOfFocused, number );
+ }
+ }
+ else
+ {
+ numberPtr.Insert(KBeginning,clipBoardText);
+ SetEdwinTextL( idOfFocused, number );
+ }
+ TBool enable=ValidateUrlL();
+ if(enable)
+ {
+ iView->iIsTextEntered=ETrue;
+ iView->SetToolbarItems();
+ }
+ else
+ {
+ iView->iIsTextEntered=EFalse;
+ iView->SetToolbarItems();
+ }
+ TInt txtLengthAfterPaste=myEdwin->TextLength();
+ myEdwin->SetSelectionL(0,0);
+ myEdwin->SetCursorPosL (txtLengthAfterPaste, EFalse);
+
+ CleanupStack::PopAndDestroy(number);
+ CleanupStack::PopAndDestroy(plainText);
+ CleanupStack::PopAndDestroy(clipBoard);
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::PasteDataL - Exiting " );
+ }
+
+// -----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::SaveData
+//
+// -----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::SaveDataL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::SaveDataL - Begin " );
+ CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi() );
+ GetEdwinText( iStationURL, EAddStaionURL );
+ GetEdwinText( iStationName, EAddStaionName );
+ GetEdwinText( iStationDescription, EAddStaionDescription );
+
+ ReplaceUglyChar(iStationName);
+ ReplaceUglyChar(iStationDescription);
+
+
+ if(iIsEditStation)
+ {
+ EditStationL();
+ iView->iIsTextEntered=EFalse;
+ }
+
+ if(!iIsEditStation)
+ {
+ TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+ if( !urlStatus )
+ {
+ iIsSpaceEntered=ETrue;
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+ return;
+ }
+ else
+ {
+ AddToFavouritesL();
+ iView->iIsTextEntered=EFalse;
+ iView->SetToolbarItems();
+ DefaultVauleL();
+ }
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::SaveDataL - Exiting " );
+ }
+
+/**
+ * void CIRAddManuallyStationContainer::AddToFavouritesL()
+ *
+ * Description : This method is used to Add the stations to Favourites
+ *
+ * @Algorithm :
+ * Step 1: Validate the Staion name by calling 'ReplaceEmptyName'
+ * method
+ * Step 2: Validate the entered url by calling 'ParseAndPrepareUrl'
+ * method.
+ * Step 3: If Url is incorrect then display an error message, else
+ * goto step4.
+ * Step 4:
+ * Step 5:
+ *
+ * @Param : [IN] Nil
+ * [OUT] Nil
+ *
+ * @Return :
+ *
+ * Example Usage :
+ */
+void CIRAddManuallyStationContainer::AddToFavouritesL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::AddToFavouritesL - Begin " );
+
+ ReplaceEmptyName( iStationName );
+
+ TBool isInvalidChar = HasInvalidCharsInUrl(iStationURL);
+ if( !isInvalidChar)
+ {
+ iIsSpaceEntered=ETrue;
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+ return;
+ }
+
+ /**
+ * Validate the entered URL
+ */
+ TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+
+ /**
+ * If the entered URL is incorrect then display the error message
+ * "Incorrect URL"
+ */
+ if( !urlStatus )
+ {
+ iDialogLauncher = CIRDialogLauncher::NewL();
+ iView->iIsSpaceEntered=ETrue;
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+ delete iDialogLauncher;
+ return;
+ }
+ if(iPreset)
+ {
+ delete iPreset;
+ iPreset=NULL;
+ }
+ iPreset = CIRIsdsPreset::NewL();
+ TInt err(KErrNoMemory);
+ iPreset->SetName(iStationName);
+ iPreset->SetShortDesc(iStationDescription);
+
+ /**
+ * only one url is saved for manually added channel
+ */
+ iPreset->SetUrlCount(1);
+
+ _LIT(KNotAvailable,"NA");
+
+ /**
+ * bitrate set to zero so that it is accessible to all kinds of
+ * bitrate settings
+ */
+ iPreset->SetUrlL(KNotAvailable,iStationURL,0);
+
+ /**
+ * Set the Description
+ */
+ iPreset->SetDescription(iStationDescription);
+
+ /**
+ * Save into the favourites
+ */
+ iView->iUi->iFavPresets->AddPresetL(*iPreset,err);
+
+ /**
+ * If there is no space in favourites display error note.
+ */
+ if (err == KErrNoMemory)
+ {
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ADDFAVOURITES_ERROR, ETrue);
+ }
+ else
+ {
+ if(iUnNamedFlag)
+ {
+ iStationName.Copy(KNullStation);
+ iUnNamedFlag = EFalse;
+ iDialogLauncher->ShowConfirmationNoteL( R_IRAPP_STATION_SAVED,ETrue );
+ }
+ else
+ {
+ iView->iUi->DisplayInformationL(R_IRAPP_STATIONS_POPUP_SAVED, iStationName);
+ }
+ iView->iUi->iIRSettings->SetFlagIfAnyFavL();
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::AddToFavouritesL - Exiting " );
+ }
+
+/**
+ * void CIRAddManuallyStationContainer::EditStationL()
+ *
+ * Description : This method is used to Edit the userdefined stations
+ *
+ * @Algorithm :
+ * Step 1: Validate the entered Url by using 'ParseAndPrepareUrl'
+ * Step 2: If Entered Url is incorrect then display an error
+ * message, else goto step3.
+ * Step3 : calculate the Index of the station to be deleted
+ * Step4 : create an instance of 'CIRIsdsPreset'
+ * Step5 : Set the new name of the station
+ * Step6 : Set the Short description to the station
+ * Step7 : Set the Url
+ * Step8 : Set the Bitrate
+ * Step9 : Set the UniqId of the Station to edited
+ * Step10: Update the station with modifed values in favourites
+ * by calling 'ReplaceUserDefinedPresetL'
+ * Step11: Display a confirmation note that station saved
+ *
+ * @Param : [IN]
+ * [OUT]
+ *
+ * @Return :
+ *
+ * Example Usage :
+ */
+void CIRAddManuallyStationContainer::EditStationL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::EditStationL - Entered" );
+
+ ReplaceUglyChar(iStationName);
+
+ TBool isInvalidChar = HasInvalidCharsInUrl(iStationURL);
+ if( !isInvalidChar)
+ {
+ iIsSpaceEntered=ETrue;
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+ return;
+ }
+
+ TBool urlStatus = iView->iUi->ParseAndPrepareUrl(iStationURL);
+ if( !urlStatus )
+ {
+ iIsSpaceEntered=ETrue;
+ iDialogLauncher->ShowErrorNoteL(R_IRAPP_ERROR_ADDRESS, ETrue);
+ return;
+ }
+ else
+ {
+ TInt deleteIndex ;
+ if (iView->iUi->iLastPlayed->FileExists())
+ {
+ deleteIndex = iView->iUi->iEditStationIndex-1;
+ }
+ else
+ {
+ deleteIndex = iView->iUi->iEditStationIndex;
+ }
+ /**
+ * prepare isdsPreset with the edited values
+ */
+ CIRIsdsPreset* isdsPreset = CIRIsdsPreset::NewL();
+
+ /**
+ * Set the Station Name with new station name
+ */
+ if(iStationName.Length()==0)
+ {
+ ReplaceEmptyName( iStationName );
+ }
+ isdsPreset->SetName(iStationName);
+
+ /**
+ * Set Description with the new Description
+ */
+ isdsPreset->SetShortDesc(iStationDescription);
+
+ /**
+ *only one url is saved for manually added channel
+ */
+ isdsPreset->SetUrlCount(1);
+
+ _LIT(KNotAvailable,"NA");
+
+ /**
+ * bitrate set to zero so that it is accessible to all kinds of
+ * bitrate settings
+ */
+ isdsPreset->SetUrlL(KNotAvailable,iStationURL,0);
+
+ isdsPreset->SetDescription(iStationDescription);
+
+ /**
+ * Set the UniqId of the Station to edit
+ */
+ if (deleteIndex < iView->iUi->iFavPresets->iFavPresetList.Count())
+ isdsPreset->SetUniqId(iView->iUi->iFavPresets->
+ iFavPresetList[deleteIndex]->Id());
+ /**
+ * Replace the preset with the new values
+ */
+ iView->iUi->iFavPresets->ReplaceUserDefinedPresetL(*isdsPreset);
+
+ /**
+ * display a confirmation note
+ */
+ if(iUnNamedFlag)
+ {
+ iStationName.Copy(KNullStation);
+ iUnNamedFlag = EFalse;
+ iDialogLauncher->ShowConfirmationNoteL( R_IRAPP_STATION_SAVED,ETrue );
+ }
+ else
+ {
+ iView->iUi->DisplayInformationL(R_IRAPP_STATIONS_POPUP_SAVED,
+ iStationName);
+ }
+ if (isdsPreset)
+ {
+ delete isdsPreset;
+ isdsPreset = NULL;
+ }
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::EditStationL - Exited " );
+ }
+
+// ----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::ReplaceEmptyName( TDes& aUrlName )
+// Checks whether the url name contains only spaces and if the descriptor really was.
+// empty replaces its content with default name
+// ----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::ReplaceEmptyName( TDes& aUrlName )
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ReplaceEmptyName - Begin " );
+ TBool isEmpty = ETrue;
+ for( TInt i = 0; i < aUrlName.Length() && isEmpty; i++ )
+ {
+ ( static_cast<TChar>( aUrlName[i] ) ).Fold();
+ if ( !( static_cast<TChar>( aUrlName[i] ) ).IsSpace() )
+ {
+ isEmpty = EFalse;
+ }
+ }
+ if ( isEmpty )
+ {
+ StringLoader::Load( aUrlName, R_IRAPP_ADDMANUALLY_NOTEXT );
+ iUnNamedFlag = ETrue;
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ReplaceEmptyName - Exiting " );
+ }
+
+
+void CIRAddManuallyStationContainer::ReplaceUglyChar(TDes& aUrlName)
+ {
+ for(TInt i = 0; i < aUrlName.Length(); i++)
+ {
+ TChar xChar(aUrlName[i]);
+ if (xChar.GetCategory() == TChar::EZpCategory)
+ {
+ aUrlName.Replace(i, 1, KSpace);
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIRAddManuallyStationContainer::HandlePointerEventL(const TPointerEvent&
+// aPointerEvent)
+// This function is used handle pen input events
+// ----------------------------------------------------------------------------
+void CIRAddManuallyStationContainer::HandlePointerEventL(const TPointerEvent &aPointerEvent)
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandlePointerEventL - Begin " );
+ CAknForm::HandlePointerEventL( aPointerEvent );
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandlePointerEventL - Exiting " );
+ }
+
+// ---------------------------------------------------------------------------
+//TBool CIRAddManuallyStationContainer::ValidateUrlL()
+//Validates The entered URL Scheme
+// ---------------------------------------------------------------------------
+TBool CIRAddManuallyStationContainer::ValidateUrlL()
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ValidateUrlL - Begin " );
+ TBool retVal = EFalse;
+ _LIT(KMMSText, "mms://");
+
+ TBuf<KbufMaxLength> iTextBoxValidateUrl;
+ HBufC *httpstring1 = StringLoader::LoadLC(R_IRAPP_ADDMANUALLY_HTTP);
+ iTextBoxValidateUrl = *httpstring1;
+
+ HBufC* mmsString = HBufC::NewLC(KbufMaxLength);
+ *mmsString = KMMSText;
+ TBuf<KbufMaxLength> textBoxValidateMMS(*mmsString);
+
+
+ GetEdwinText( iStationURL, EAddStaionURL );
+
+ CleanupStack::PopAndDestroy(mmsString);
+ CleanupStack::PopAndDestroy(httpstring1);
+
+ if ( iTextBoxValidateUrl.CompareF( iStationURL.Left( iTextBoxValidateUrl.Length()))== 0)
+ {
+ if ( iStationURL.Length() <= iTextBoxValidateUrl.Length() ||
+ iTextBoxValidateUrl.CompareF( iStationURL.Left( iTextBoxValidateUrl.Length() )))
+ {
+ retVal = EFalse;
+ }
+ else
+ {
+ retVal = ETrue;
+ }
+ }
+ else if (textBoxValidateMMS.CompareF( iStationURL.Left( textBoxValidateMMS.Length()))==0)
+ {
+ if ( iStationURL.Length() <= textBoxValidateMMS.Length() ||
+ textBoxValidateMMS.CompareF( iStationURL.Left( textBoxValidateMMS.Length() )))
+ {
+ retVal = EFalse;
+ }
+ else
+ {
+ retVal = ETrue;
+ }
+ }
+
+ else
+ {
+ //nothing
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::ValidateUrlL - Exiting " );
+ return retVal;
+ }
+
+
+// ---------------------------------------------------------------------------
+// void CIRAddManuallyStationContainer::HandleControlEventL(CCoeControl* aControl,
+// TCoeEvent aEventType)
+// To handle key events.
+//
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::HandleControlEventL(
+ CCoeControl* aControl,
+ TCoeEvent aEventType)
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleControlEventL - Begin " );
+ CAknForm::HandleControlEventL(aControl, aEventType);
+ if (aEventType == EEventStateChanged)
+ {
+ if (aControl == Control(EAddStaionURL))
+ {
+ TInt focus=CEikDialog::IdOfFocusControl();
+ CCoeControl* ictrl=CEikDialog::Control(focus);
+ TBool enable=ValidateUrlL();
+ iIsEnable = enable;
+ if(enable)
+ {
+ iView->iIsTextEntered=ETrue;
+ iView->SetToolbarItems();
+ }
+ else
+ {
+ iView->iIsTextEntered=EFalse;
+ iView->SetToolbarItems();
+ }
+ }
+ if (aControl == Control(EAddStaionName))
+ {
+ }
+ }
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleControlEventL - Exiting " );
+ }
+
+
+// ---------------------------------------------------------------------------
+//void CIRAddManuallyStationContainer::HandleResourceChange (TInt aType)
+//
+//
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::HandleResourceChange (TInt /*aType*/)
+ {
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleResourceChange - Begin " );
+ CAknForm::HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+
+ iView->RefreshView();
+
+ SizeChanged();
+ DrawDeferred();
+ IRLOG_DEBUG( "CIRAddManuallyStationContainer::HandleResourceChange - Exiting " );
+ }
+
+// ---------------------------------------------------------------------------
+//void CIRAddManuallyStationContainer::SizeChanged ()
+//
+// ---------------------------------------------------------------------------
+
+void CIRAddManuallyStationContainer::SizeChanged()
+ {
+ CAknForm::SizeChanged();
+ }
+
+// ---------------------------------------------------------------------------
+//TBool CIRAddManuallyStationContainer::HasInvalidCharsInUrl (TDes& aUrl)
+//
+// ---------------------------------------------------------------------------
+
+TBool CIRAddManuallyStationContainer::HasInvalidCharsInUrl(TDes& aUrl)
+ {
+ TBool retVal = EFalse;
+ for(TInt i = 0; i < aUrl.Length(); i++)
+ {
+ TChar xChar(aUrl[i]);
+ switch(xChar.GetCategory())
+ {
+ case TChar::ESeparatorGroup:
+ case TChar::EControlGroup:
+ case TChar::EZpCategory:
+ case TChar::EWhitespace:
+ case TChar::EZlCategory:
+ case TChar::EParagraphSeparator:
+ case TChar::ESegmentSeparator:
+ case TChar::EPsCategory:
+ case TChar::EPeCategory:
+ {
+ retVal = EFalse;
+ }
+ break;
+ default:
+ {
+ retVal = ETrue;
+ }
+ }
+ (static_cast<TChar>( aUrl[i] ) ).Fold();
+ if( ( static_cast<TChar>( aUrl[i] ) ) == '%' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '^' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '"' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '\\'||
+ ( static_cast<TChar>( aUrl[i] ) ) == '`' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '|' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '<' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '>' ||
+ ( static_cast<TChar>( aUrl[i] ) ) == '#' )
+ {
+ retVal = EFalse;
+ }
+
+
+ if(!retVal)
+ {
+ i = aUrl.Length();
+ }
+ }
+ return retVal;
+ }
+