📄 smbmusicaplibprogressdialogex.cpp
字号:
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
/*-------------------------------------------------------------------------*/
// FileName:
// SmbMusicAPLibProgressDialogEx.cpp
//
// Description:
// 儈儏乕僕僢僋傾僾儕儔僀僽儔儕奼挘僾儘僌儗僗昞帵僟僀傾儘僌僋儔僗
/*--------------------------------------------------------------------*/
//曄峏棜楌
//擔晅 |曄峏幰 |撪梕
//--------------+-----------+-------------------------------------------
//2006/09/23 |SDNA挿旜 |怴婯嶌惉
#include "SmbMusicAPLibProgressDialogEx.h"
USING_NAMESPACE_SEMCJ
///////////////////////////////////////////////////////////////////////////////
/**
* 僋儔僗僆僽僕僃僋僩惗惉
*
* @param[in] aResourceId SkonDialogBase儕僜乕僗ID
* @return CSmbMusicAPLibProgressDialogEx僆僽僕僃僋僩
*/
EXPORT_C CSmbMusicAPLibProgressDialogEx* CSmbMusicAPLibProgressDialogEx::NewL(TInt aResourceId)
{
CSmbMusicAPLibProgressDialogEx* self = new(ELeave) CSmbMusicAPLibProgressDialogEx();
self->PrepareLC(aResourceId);
CleanupStack::Pop();
return self;
}
EXPORT_C CSmbMusicAPLibProgressDialogEx::~CSmbMusicAPLibProgressDialogEx()
{
delete iTimer;
}
/**
* 帺摦峏怴偡傞恑捇偺嵟戝傪愝掕偡傞丏帺摦峏怴偟偨恑捇偑偙偺嵟戝抣偵払偡傞応崌偼丆恑捇抣偵嵟戝抣傪愝掕偟帺摦峏怴傪掆巭偡傞丏
* 愝掕偡傞抣偺扨埵偼丆CSkonProgressBar()偺恑揥搙偱偁傞丏
*
* 僨僼僅儖僩偼丆CSkonProgressBar::FinalValue()偺栠傝抣丏
*
* @param[in] aFinalValue 帺摦峏怴偡傞恑捇偺嵟戝抣 (柍岠抣: 0)
*/
EXPORT_C void CSmbMusicAPLibProgressDialogEx::SetAutoProgressFinalValue(TUint aFinalValue)
{
iFinalProgressValue = aFinalValue;
}
/**
* 恑捇偺帺摦峏怴傪奐巒偡傞丏
*
* @param[in] aInterval 峏怴娫妘 (扨埵: 儅僀僋儘昩)
* @param[in] aFileSize 僼傽僀儖僒僀僘
* @param[in] aProcessingRate 張棟儗乕僩(in bps)
* @param[in] aMaxProgressValue 張棟儗乕僩(in bps)
* @retval KErrArgument aInterval / aFileSize / aProcessingRate / aMaxProgressValue 偺抣偑0
* @retval KErrNotReady 僞僀儅乕枹惗惉 (CSmbMusicAPLibProgressDialogEx::PrepareLC() 枹幚峴側偳偑尨場)
*/
EXPORT_C TInt CSmbMusicAPLibProgressDialogEx::StartAutoProgress(TTimeIntervalMicroSeconds32 aInterval,
TUint aFileSize, TUint aProcessingRate, TUint aMaxProgressValue)
{
if (aInterval.Int() == 0 || aFileSize == 0 || aProcessingRate == 0 || aMaxProgressValue == 0)
{
return KErrArgument;
}
// 僼傽僀儖僒僀僘偲張棟儗乕僩傛傝丆張棟帪娫(sec)傪媮傔傞
TReal processingSec = static_cast<TReal>(aFileSize * 8) / static_cast<TReal>(aProcessingRate); // 張棟帪娫(sec)
// 僾儘僌儗僗僶乕偺嵟戝抣傪庢摼偡傞
CSkonCompoundProgressLabel* progressLabel = ProgressLabel();
TInt finalValue = (progressLabel != NULL) ? progressLabel->FinalValue() : 100;
// 僀儞僞乕僶儖帪娫偁偨傝偺恑捇棪(1.0 = 100%)傪媮傔傞
TReal progressRatio = (1.0 / processingSec) * (static_cast<TReal>(aInterval.Int()) / 1000000.0);
// 僀儞僞乕僶儖帪娫摉偨傝偺恑捇抣傪媮傔傞
TInt progressValue = static_cast<TReal>(finalValue) * progressRatio;
// 恑捇抣偑嵟戝抣(aMaxProgressValue)丒嵟彫抣(1)偺斖埻撪偵側傞傛偆偵娵傔崬傓
if (progressValue > aMaxProgressValue)
{
progressValue = aMaxProgressValue;
}
else if (progressValue == 0)
{
progressValue = 1;
}
return StartAutoProgress(aInterval, progressValue);
}
/**
* 恑捇偺帺摦峏怴傪奐巒偡傞丏
*
* @param[in] aInterval 峏怴娫妘 (扨埵: 儅僀僋儘昩)
* @param[in] aProgressValue 憹壛偝偣傞恑捇抣
* @retval KErrArgument aInterval / aProgressValue 偺抣偑0
* @retval KErrNotReady 僞僀儅乕枹惗惉 (CSmbMusicAPLibProgressDialogEx::PrepareLC() 枹幚峴側偳偑尨場)
*/
EXPORT_C TInt CSmbMusicAPLibProgressDialogEx::StartAutoProgress(TTimeIntervalMicroSeconds32 aInterval, TUint aProgressValue)
{
if (iTimer == NULL)
{
return KErrNotReady;
}
if (aInterval.Int() == 0 || aProgressValue == 0)
{
return KErrArgument;
}
iProgressValue = aProgressValue;
iTimer->Start(TCallBack(ProgressTimerCallBack, this), aInterval);
return KErrNone;
}
/**
* 僟僀傾儘僌傪暵偠傞僞僀儈儞僌傪巜掕偡傞偙偲偑壜擻丏
* - Close(): 偡偖偵暵偠傞 (CSmbMusicAPLibProgressDialog::Close()偲摨婡擻)
* - Close(ECloseIn200ms): 200ms屻偵暵偠傞 (200ms屻偵CSmbMusicAPLibProgressDialog::Close()傪幚峴)
*
* Close(ECloseIn200ms)偑桳梡側働乕僗傪埲壓偵帵偡丏
* -# 僾儘僌儗僗僶乕偵恑捇棪100%傪愝掕屻偵僟僀傾儘僌傪暵偠傞応崌丆
* Close()偩偲僾儘僌儗僗僶乕偺昞帵偑峏怴偝傟側偄傑傑暵偠傜傟傞偑丆
* Close(ECloseIn200ms)偩偲妋幚偵僾儘僌儗僗僶乕偺昞帵偑斀塮偝傟傞丏
*
* @param[in] aCloseTime ECloseNoTimer: 偡偖偵暵偠傞(僨僼僅儖僩) / ECloseIn200ms: 200ms屻偵暵偠傞
*/
EXPORT_C void CSmbMusicAPLibProgressDialogEx::Close(TCloseTime aCloseTime /*= ECloseNoTimer*/)
{
iTimer->Cancel();
if (aCloseTime != ECloseNoTimer)
{
const TInt KTime200ms = 200000; // Close()屻僟僀傾儘僌偑暵偠傞傑偱偺帪娫(200ms)
// 僞僀儅乕偵愝掕偡傞丏僞僀儅乕廔椆屻丆CloseTimerCallBack()偑屇傃弌偝傟傞)
iTimer->Start(TCallBack(CloseTimerCallBack, this), KTime200ms);
}
else
{
CSmbMusicAPLibProgressDialog::Close();
}
}
/**
* @param[in] aObject 僐乕儖僶僢僋愭僆僽僕僃僋僩
* @retval EStartTimer 僾儘僌儗僗僶乕偺峏怴偁傝
* @retval EStopTimer 僾儘僌儗僗僶乕偺峏怴側偟
*/
TInt CSmbMusicAPLibProgressDialogEx::ProgressTimerCallBack(TAny* aObject)
{
CSmbMusicAPLibProgressDialogEx* dialog = static_cast<CSmbMusicAPLibProgressDialogEx*>(aObject);
TBool isUpdated = dialog->UpdateProgress(); // 僾儘僌儗僗僶乕偺恑捇傪峏怴偡傞
return (isUpdated) ? EStartTimer : EStopTimer; // EStartTimer: 峏怴偁傝 / EStopTimer: 峏怴側偟
}
/**
* @param[in] aObject 僐乕儖僶僢僋愭僆僽僕僃僋僩
* @retval EStopTimer 僾儘僌儗僗僶乕偺峏怴側偟
*/
TInt CSmbMusicAPLibProgressDialogEx::CloseTimerCallBack(TAny* aObject)
{
CSmbMusicAPLibProgressDialog* dialog = static_cast<CSmbMusicAPLibProgressDialog*>(aObject);
// 僟僀傾儘僌傪暵偠傞
dialog->Close();
return EStopTimer;
}
CSmbMusicAPLibProgressDialogEx::CSmbMusicAPLibProgressDialogEx()
: iTimer(NULL), iFinalProgressValue(0), iProgressValue(0)
{
//
}
/**
* 儕僜乕僗偵傛傞僐儞僩儘乕儖弶婜壔
*
* @param[in] aResourceId 儕僜乕僗ID
*/
void CSmbMusicAPLibProgressDialogEx::PrepareLC(TInt aResourceId)
{
CSmbMusicAPLibProgressDialog::PrepareLC(aResourceId);
// 僞僀儅乕傪惗惉偡傞
iTimer = CProgressTimer::NewL(CActive::EPriorityStandard);
}
void CSmbMusicAPLibProgressDialogEx::CProgressTimer::RunL(void)
{
// 僐乕儖僶僢僋娭悢傪屇傃弌偡
TInt result = iCallBack.CallBack();
// 僐乕儖僶僢僋娭悢偺栠傝抣偱峏怴偁傝(EStartTimer)偺応崌丆嵞搙僞僀儅乕傪婲摦偡傞
if (result == EStartTimer)
{
After(iInterval);
}
}
/**
* @param[in] aPriority
*/
CSmbMusicAPLibProgressDialogEx::CProgressTimer* CSmbMusicAPLibProgressDialogEx::CProgressTimer::NewL(TInt aPriority)
{
CProgressTimer* self = new(ELeave) CProgressTimer(aPriority);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(self);
return self;
}
/**
* @param[in] aPriority
*/
CSmbMusicAPLibProgressDialogEx::CProgressTimer::CProgressTimer(TInt aPriority)
: CTimer(aPriority), iInterval(0), iCallBack(NULL)
{
CActiveScheduler::Add(this);
}
CSmbMusicAPLibProgressDialogEx::CProgressTimer::~CProgressTimer()
{
//
}
void CSmbMusicAPLibProgressDialogEx::CProgressTimer::Start(TCallBack aCallBack, TTimeIntervalMicroSeconds32 aInterval)
{
iCallBack = aCallBack;
iInterval = aInterval;
After(iInterval);
}
/**
* @retval ETrue 峏怴偁傝
* @retval EFalse 峏怴側偟
*/
TBool CSmbMusicAPLibProgressDialogEx::UpdateProgress(void)
{
CSkonCompoundProgressLabel* progressLabel = ProgressLabel();
// 僾儘僌儗僗儔儀儖庢摼幐攕偺応崌丆乽峏怴側偟乿傪曉偡
if (progressLabel == NULL)
{
return EFalse;
}
TInt progressValue = progressLabel->CurrentValue(); // 峏怴慜偺尰嵼偺恑捇抣
// 嵟戝抣偑枹掕媊(0)偺応崌偼丆僾儘僌儗僗儔儀儖偺嵟戝抣傪愝掕偡傞
if (iFinalProgressValue == 0)
{
iFinalProgressValue = progressLabel->FinalValue();
}
// 峏怴慜偺恑捇抣(progressValue)偑偡偱偵嵟廔抣(iFinalProgressValue)偵払偟偰偄偨応崌偼丆乽峏怴側偟乿傪曉偡
if (progressValue >= iFinalProgressValue)
{
return EFalse;
}
// 峏怴屻偺恑捇抣(progressValue)偑嵟廔抣(iFinalProgressValue)枹枮偺応崌偼丆
progressValue += iProgressValue;
if (progressValue < iFinalProgressValue)
{
progressLabel->SetAndDraw(progressValue);
return ETrue;
}
else
{
progressLabel->SetAndDraw(iFinalProgressValue);
progressValue = iFinalProgressValue;
return EFalse;
}
}
// end of SmbMusicAPLibProgressDialogEx.cpp
/* Copyright (C) 2006 Sony Ericsson Mobile Communications Japan, Inc. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -