diff -r 000000000000 -r dd21522fd290 browserutilities/browserdialogsprovider/Src/BrowserUploadProgressNote.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/browserdialogsprovider/Src/BrowserUploadProgressNote.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,258 @@ +/* +* 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: +* This class creates a progress dialog, which shows the progress of an upload +* +* +*/ + + +// INCLUDES +#include "BrowserUploadProgressNote.h" +#include "BrowserDialogsProviderObserver.h" + +#include +#include + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::CBrowserUploadProgressNote +// ---------------------------------------------------------------------------- +// +CBrowserUploadProgressNote::CBrowserUploadProgressNote( + TInt aMaxValue, + MBrowserDialogsProviderObserver* aObserver, + CEikDialog** aSelfPtr ) : + CAknProgressDialog( aSelfPtr, ETrue ), // should use EFalse, but doesn't work! + iMaxValue( aMaxValue ), + iObserver( aObserver ) + { + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::~CBrowserUploadProgressNote +// ---------------------------------------------------------------------------- +// +CBrowserUploadProgressNote::~CBrowserUploadProgressNote( ) + { + delete iStrUploaded; + delete iStrUnit; + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::NewL +// ---------------------------------------------------------------------------- +// +CBrowserUploadProgressNote* CBrowserUploadProgressNote::NewL( + TInt aMaxValue, + MBrowserDialogsProviderObserver* aObserver, + CEikDialog** aSelfPtr ) + { + CBrowserUploadProgressNote* self = NewLC( aMaxValue, aObserver, aSelfPtr ); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::NewLC +// ---------------------------------------------------------------------------- +// +CBrowserUploadProgressNote* CBrowserUploadProgressNote::NewLC( + TInt aMaxValue, + MBrowserDialogsProviderObserver* aObserver, + CEikDialog** aSelfPtr ) + { + CBrowserUploadProgressNote* self = + new ( ELeave ) CBrowserUploadProgressNote( + aMaxValue, aObserver, aSelfPtr ); + CleanupStack::PushL( self ); + self->ConstructL( ); + return self; + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::UpdateL +// ---------------------------------------------------------------------------- +// +void CBrowserUploadProgressNote::UpdateL( TInt aChunkSize ) + { + iUploaded+=aChunkSize; // Set the uploaded size. + + // ...Length() + 20 because if we substitute the uploaded, + // and the max upload strings into the + // "Uploaded:\ %U / %U" string, there should be enough space in the buffer. + // The max length of the substituted strings is not more than 8 characters, + // so 20 characters should be enough, and won`t cause errors, if the size + // of the substituted strings slightly changes. + TInt length = iStrUploaded->Des( ).Length() + iStrUnit->Des().Length() + 20; + + // The final string that will be displayed on the progress note. + HBufC* progressNoteText = HBufC::NewLC( length ); + + // Temporary buffer for formatting. + HBufC* tempProgressNoteText = HBufC::NewLC( length ); + + // Temporary pointer needed, for using StringLoader::Format. + TPtr progressNoteTextPtr = progressNoteText->Des(); + + // If we are showing data in kB Units. + if ( iMaxValue < 1000 ) + { + // Convert the uploaded, and max upload size to string. + TBuf<3> strMax,strUploaded; + strMax.AppendNum( iMaxValue ); + strUploaded.AppendNum( iUploaded ); + + // Substitute the first index in the string from .loc file. + StringLoader::Format( progressNoteTextPtr,iStrUploaded->Des(), + 0,strUploaded ); + + // Substitute the second index in the string from .loc file. + tempProgressNoteText->Des( ).Copy( progressNoteTextPtr ); // Copy to a temporary buffer. + // Format and put the fully formatted string into progressNoteText + StringLoader::Format( progressNoteTextPtr,tempProgressNoteText->Des(), + 1,strMax ); + } + // If we are showing data in MB Units. + else + { + // Convert the uploaded, and max upload size to MB units. + HBufC* strMax = DivisionL( iMaxValue,1000 ); + CleanupStack::PushL( strMax ); + HBufC* strUploaded = DivisionL( iUploaded,1000 ); + CleanupStack::PushL( strUploaded ); + + // Substitute the first index in the string from .loc file. + StringLoader::Format( progressNoteTextPtr,iStrUploaded->Des(), + 0,strUploaded->Des() ); + + // Substitute the second index in the string from .loc file. + tempProgressNoteText->Des().Copy( progressNoteTextPtr ); // Copy to a temporary buffer. + // Format and put the fully formatted string into progressNoteText + StringLoader::Format( progressNoteTextPtr,tempProgressNoteText->Des(), + 1,strMax->Des() ); + + CleanupStack::PopAndDestroy( 2 ); // strMax, struploaded + } + + progressNoteText->Des().Append( iStrUnit->Des() ); // Append the unit. + /*iProgressDlg->*/SetTextL( progressNoteText->Des() ); // Set the text of the note. + iProgressInfo->SetAndDraw( iUploaded ); + CleanupStack::PopAndDestroy( 2 ); //progressNoteText, tempProgressNoteText + } + + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::ConstructL +// ---------------------------------------------------------------------------- +// +void CBrowserUploadProgressNote::ConstructL( ) + { + // TO DO: Param should be EFalse, but it fails.... + /*iProgressDlg = new( ELeave ) CAknProgressDialog( + ( REINTERPRET_CAST ( CEikDialog**, &iProgressDlg) ), ETrue );*/ + + iStrUploaded = StringLoader::LoadL( + R_QTN_BROWSER_UPLOAD_PROGRESSNOTE_UPLOADED ); + + // If "kB" unit is needed... + if ( iMaxValue<1000 ) + { + iStrUnit = CCoeEnv::Static()->AllocReadResourceL( + R_QTN_BROWSER_UPLOAD_PROGRESSNOTE_UNIT_KBYTE ); + } + else + { + iStrUnit = CCoeEnv::Static()->AllocReadResourceL( + R_QTN_BROWSER_UPLOAD_PROGRESSNOTE_UNIT_MB ); + } + + PrepareLC( R_UPLOAD_PROGRESSNOTE ); + + iProgressInfo = GetProgressInfoL( ); + iProgressInfo->SetFinalValue( iMaxValue ); + + // Set callback for when dialog is dismissed, handled in DialogDismissedL() + SetCallback( this ); + + // Show the dialog + RunLD(); + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::DivisionL +// ---------------------------------------------------------------------------- +// +HBufC* CBrowserUploadProgressNote::DivisionL( TInt aNumerator,TInt aDenominator ) + { + TLocale locale; + TInt reminder = aNumerator%aDenominator; + // Temporary buffer for the result of the division. + HBufC* tempString = HBufC::NewLC( 50 ); + + // Copy the integer part of the division. + tempString->Des().AppendNum( aNumerator / aDenominator ); + //Copy the decimal separator. + tempString->Des().Append( locale.DecimalSeparator() ); + + // Copy the fraction part, we need 3 decimal fractions. + // Example: 2.00 or 3.50... + for ( TInt i=0;i<3;i++ ) + { + TInt newReminder = ( reminder * 10 ) % aDenominator; + reminder = ( reminder * 10 ) / aDenominator; + tempString->Des().AppendNum( reminder ); + reminder = newReminder; + } + + HBufC* returnString = HBufC::NewLC( 4 ); + + // Only 3 numbers needed in the string. So, if the integer part is bigger + // than 99.9, we chop the reminder part... + // Example 100.342 will be 100 , 158.654 will be 158, + // because of the specification. + + //If the integer value is bigger than 99, then chop... + if ( ( TChar )tempString->Des()[3] == locale.DecimalSeparator() ) + { + returnString->Des().Copy( tempString->Des().Left( 3 ) ); + } + // Or simply copy to the result... + else + { + returnString->Des().Copy( tempString->Des().Left( 4 ) ); + } + + CleanupStack::Pop(); // returnString + CleanupStack::PopAndDestroy(); // tempString + return returnString; + } + +// ---------------------------------------------------------------------------- +// CBrowserUploadProgressNote::DialogDismissedL +// ---------------------------------------------------------------------------- +// +void CBrowserUploadProgressNote::DialogDismissedL( TInt aButtonId ) + { + if ( aButtonId == EAknSoftkeyCancel ) + { + if ( iObserver ) + { + // Indicate to observer that the dialog is now dismissed + iObserver->ReportDialogEventL( + MBrowserDialogsProviderObserver::EUploadProgress, KErrCancel ); + } + } + } + +// END OF FILE