📄 smbmusicapsonginfoeditview.cpp
字号:
* @leave KErrArgument 崁栚偺庬暿偑憐掕奜偺抣偺応崌
*/
void CSmbMusicAPSongInfoEditView::SetUnsignedNumEditValueL(TInt aIndex)
{
TUint editValue = 0;
switch(iItemStatusArray[aIndex])
{
case EItemStatusOrigin:
{
editValue = iEditResource->UnsignedDetailNumL(aIndex);
}
break;
case EItemStatusEdit:
{
TInt controlVal;
CSkonNumBox* numBox = NumBox(aIndex);
TBool numValid = numBox->GetValue(controlVal);
// NumBox偺昞帵偑桳岠偺憐掕偱偡
__ASSERT_DEBUG(EFalse != numValid, User::Panic(KPanicCategory, EInvlalidControlItemStatus));
editValue = STATIC_CAST(TUint, controlVal);
}
break;
case EItemStatusReset:
{
editValue = iEditResource->UnsignedResetNumL(aIndex);
}
break;
default:
{
//儘僌弌椡
SmbMusicAPSongInfoLog::OutputLog(iLog, ESongInfoLogNo271, ELogLevelLow, KErrArgument, KSmbMusicAPSongInfoLogEditItemStatusErr);
//儕乕僽張棟
User::Leave(KErrArgument);
}
break;
}
iEditResource->SetUnsignedEditNumL(aIndex, editValue);
}
/**
* 僉乕傪懄帪嵞昤夋偡傞
*/
void CSmbMusicAPSongInfoEditView::DrawNow()
{
if(NULL == iContainer)
{
KeyGuidance()->DrawNow();
}
else
{
iContainer->KeyGuidance()->DrawNowWithParent();
}
}
/**
* 曇廤夋柺偺僉乕傪僙僢僩偡傞
*
* @param[in] aKeyType 曇廤僉乕偺僞僀僾
* @leave KErrArgument 僉乕偺庬暿偑憐掕奜偺抣偺応崌
*/
void CSmbMusicAPSongInfoEditView::EditReplaceKeyGuidanceL(const TSmbMusicAPSongInfoEditKey aKeyType)
{
CSakKeyGuidance* keyGuidance = KeyGuidance();
TBool drawNow = ETrue;
switch (aKeyType)
{
case EEditKeyInEdit:
{
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyLeft, ETrue); // 拞巭
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRight, ETrue); // 姰椆
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSelectKey, ETrue); // 慖戰
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRightBottom, ETrue); // 儕僙僢僩
if(KNumBoxNotOperation != iOperationNumBoxIndex)
{
drawNow = EFalse;
}
}
break;
case EEditKeyInStart:
{
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyLeft, ETrue); // 拞巭
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRight, EFalse); // 姰椆
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSelectKey, ETrue); // 慖戰
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRightBottom, EFalse); // 儕僙僢僩
}
break;
case EEditKeyInFinish:
{
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyLeft, EFalse); // 拞巭
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRight, EFalse); // 姰椆
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSelectKey, EFalse); // 慖戰
keyGuidance->MakeVisibleKey(ESkonKeyGuidanceSoftKeyRightBottom, EFalse); // 儕僙僢僩
}
break;
default:
{
//儘僌弌椡
SmbMusicAPSongInfoLog::OutputLog(iLog, ESongInfoLogNo240, ELogLevelLow, aKeyType, KSmbMusicAPSongInfoLogEditViewReplaceKeyTypeErr);
//儕乕僽張棟
User::Leave(KErrArgument);
}
break;
}
if(drawNow)
{
DrawNow();
}
}
/**
* 僥僉僗僩Box偺僐儞僩儘乕儖傪庢摼偡傞
*
* @param[in] aIndex 庢摼偡傞崁栚偺僐儞僩儘乕儖偺僀儞僨僢僋僗
* @return 巜掕偟偨崁栚偺僥僉僗僩Box
* @panic KPanicCategory EInvalidArgument 堷悢僀儞僨僢僋僗偑惓忢偺斖埻奜偺応崌
*/
CSkonTextBox* CSmbMusicAPSongInfoEditView::TextBox(TInt aIndex)
{
__ASSERT_DEBUG(EEditTextItem == iEditResource->ItemType(aIndex), User::Panic(KPanicCategory, EInvalidArgument));
return STATIC_CAST(CSkonTextBox*, iControlArray[aIndex]);
}
/**
* NumBox偺僐儞僩儘乕儖傪庢摼偡傞
*
* @param[in] aIndex 庢摼偡傞崁栚偺僐儞僩儘乕儖偺僀儞僨僢僋僗
* @return 巜掕偟偨崁栚偺NumBox
* @panic KPanicCategory EInvalidArgument 堷悢僀儞僨僢僋僗偑惓忢偺斖埻奜偺応崌
*/
CSkonNumBox* CSmbMusicAPSongInfoEditView::NumBox(TInt aIndex)
{
__ASSERT_DEBUG(EEditNumItem == iEditResource->ItemType(aIndex), User::Panic(KPanicCategory, EInvalidArgument));
return STATIC_CAST(CSkonNumBox*, iControlArray[aIndex]);
}
/**
* 巜掕偟偨崁栚偺僥僉僗僩傪愝掕偡傞
*
* @param[in] aIndex 愝掕偡傞崁栚偺僐儞僩儘乕儖偺僀儞僨僢僋僗
* @param[in] aText 巜掕偟偨崁栚偵愝掕偡傞僥僉僗僩
*/
void CSmbMusicAPSongInfoEditView::SetTextBoxValueL(TInt aIndex, const TDesC& aText)
{
TextBox(aIndex)->SetTextL(aText);
}
/**
* 巜掕偟偨崁栚偺抣傪愝掕偡傞
* 抣偑柍岠偺応崌偼丄柍岠昞帵偵愝掕偡傞
*
* @param[in] aIndex 愝掕偡傞崁栚偺僐儞僩儘乕儖偺僀儞僨僢僋僗
* @param[in] aValue 巜掕偟偨崁栚偵愝掕偡傞悢帤
*/
void CSmbMusicAPSongInfoEditView::SetNumBoxValue(TInt aIndex, TInt aValue)
{
if (iEditResource->IsNumValueValid(aValue))
{
NumBox(aIndex)->SetValue(aValue);
}
else
{
NumBox(aIndex)->SetDisableView(ETrue);
}
}
/**
* 僼僅乕僇僗偺僐儞僩儘乕儖偺僀儞僨僢僋僗
*
* @return 僐儞僩儘乕儖偺僀儞僨僢僋僗
*/
TInt CSmbMusicAPSongInfoEditView::CurrentFocusedIndex()
{
return iContainer->IndexOfComponentControl(iContainer->CurrentFocusedControl());
}
/**
* FEP偺弌傞偨傔偵丄僐儞僩儘乕儖僐儅儞僪偺張棟
*
* @param[in] aCommandId 僐儅儞僪ID
*/
void CSmbMusicAPSongInfoEditView::ProcessCommandL(TInt aCommandId)
{
switch(aCommandId)
{
case ECmdMgrTitleEditFep:
case ECmdMusicTitleEditFep:
case ECmdArtistEditFep:
case ECmdAlbumEditFep:
case ECmdGenreEditFep:
case ECmdCommentEditFep:
{
TInt indexc = CurrentFocusedIndex();
CSkonTextBox* textBox = TextBox(indexc);
textBox->StartFepEditRequestL();
}
break;
case ECmdYearEditNumBox:
case ECmdTrackNumEditNumBox:
case ECmdTotalTrackEditNumBox:
{
// NumBox偑僼僅乕僇僗傪庢摼屻丄偡偖偵僆儁儗乕僔儑儞偲側傞
MoveCurrentNumBoxFocusPos();
}
break;
default:
{
//儘僌弌椡
SmbMusicAPSongInfoLog::OutputLog(iLog, ESongInfoLogNo264, ELogLevelLow, aCommandId, KSmbMusicAPSongInfoLogUnexpectCommandErr);
}
break;
}
}
/**
* 價儏乕僐儞僥僫弶婜壔帪張棟
* @leave KErrArgument 崁栚偺庬暿偑憐掕奜偺抣偺応崌
*/
void CSmbMusicAPSongInfoEditView::DoConstructContainerL()
{
//悅捈曽岦僐儞僥僫傪梡堄偡傞
iContainer = new(ELeave)CSkonVerticalContainer;
iContainer->SetContainerWindowL(*this);
//儕僜乕僗傪撉傒崬傓
TResourceReader reader;
iCoeEnv->CreateResourceReaderLC(reader, R_SONGINFO_EDITVIEW_CONTAINER);
iContainer->ConstructFromResourceL(reader);
CleanupStack::PopAndDestroy(); //reader
iContainer->SetExtent(TPoint(KSmbLayout_BASE_X,KSmbLayout_TBAR_H), TSize(KSmbLayout_WIN_W,KSmbLayout_WIN_TBAR_H));
//僒僀僋儕僢僋傪ON偵愝掕偡傞
iContainer->SetOverlapEnable(ETrue);
//僐儞僥僫偺栴報忣曬偺採嫙幰傪僙僢僩偡傞
iContainerArrowStateProvider = new(ELeave) CSmbMusicAPSongInfoArrowStateProvider;
iContainerArrowStateProvider->SetArrowStateProvider(iContainer);
iContainer->KeyGuidance()->SetArrowStateProvider(iContainerArrowStateProvider);
iEditResource = new(ELeave)CSmbMusicAPSongInfoEditResource(iModel, iLog);
iEditResource->ConstructL();
TInt itemCount = iEditResource->EditItemCount();
for(TInt index = 0; index < itemCount; index++)
{
CSkonHorizontalContainer* creatorH = STATIC_CAST(CSkonHorizontalContainer *, iContainer->ControlByIndex(index));
CSkonCommandLabel* commandLabel = STATIC_CAST(CSkonCommandLabel*, creatorH->LeftControl());
commandLabel->SetCommandObserver(this);
TSmbMusicAPSongInfoEditItemType itemType = iEditResource->ItemType(index);
switch(itemType)
{
case EEditTextItem:
{
CSkonTextBox* textBox = STATIC_CAST(CSkonTextBox*, creatorH->RightControl());
creatorH->Layout();
textBox->SetTextBoxObserver(this);
iControlArray.Append(textBox);
}
break;
case EEditNumItem:
{
CSkonNumBox* numBox = STATIC_CAST(CSkonNumBox*, creatorH->RightControl());
// NumBox偑僼僅乕僇僗傪庢摼屻丄偡偖偵僆儁儗乕僔儑儞偲側傞
numBox->SetFocusType(CSkonNumBox::ETxtBoxOperationOnly);
numBox->SetObserver(this);
creatorH->Layout();
iControlArray.Append(numBox);
}
break;
default:
{
//儘僌弌椡
SmbMusicAPSongInfoLog::OutputLog(iLog, ESongInfoLogNo265, ELogLevelLow, itemType, KSmbMusicAPSongInfoLogEditItemTypeErr);
//儕乕僽張棟
User::Leave(KErrArgument);
}
break;
}
iItemStatusArray.Append(EItemStatusOrigin);
}
// 悅捈曽岦僐儞僥僫屻張棟
AddControlL(iContainer, iContainer->KeyGuidance());
iContainer->Layout();
ActivateL();
//儌僨儖僆僽僓乕僶傊搊榐偡傞
iModel.SetModelObserver(this);
}
/**
* 儌僨儖曄峏捠抦張棟
*
* @param[in] aReason 儌僨儖曄峏棟桼
*/
void CSmbMusicAPSongInfoEditView::HandleChangeModelL(TSmbMusicAPSongInfoChangeModelReason aReason)
{
switch(aReason)
{
//徻嵶忣曬曇廤椞堟偺庢摼偑姰椆偟偨
case EGetEditInfo:
{
//曇廤椞堟偺庢摼傪姰椆
iEditResource->CompleteGetEditInfoL();
EditReplaceKeyGuidanceL(EEditKeyInEdit);
}
break;
//曇廤斀塮姰椆
case EReflectEditInfo:
{
//曇廤偟偨崁栚敾掕梡價僢僩偺壛偊傞
iModel.CombineEditPattern(iEditPattern);
//PropAgent偵捠抦
TRAPD(error, iAppUi.SetSongInfoEditIndicationL());
if(KErrNone != error)
{
//儘僌弌椡
SmbMusicAPSongInfoLog::OutputLog(iLog, ESongInfoLogNo280, ELogLevelLow, error, KSmbMusicAPSongInfoLogAppUiSetSongInfoEditIndecationLErr);
//儕乕僽張棟
User::Leave(error);
}
//抬操忣曬傪曄峏偟傑偟偨
ConfirmShowL(R_SONGINFO_EDIT_CONFIRM_FINISH);
//慜夋柺傊栠傞
BackToDetailViewL();
}
break;
default:
{
// 枹懳墳偺曄峏捠抦偵懳偟偰丄張棟偑壗傕偟側偄
}
break;
}
}
/**
* 價儏乕傾僋僥傿僽姰椆帪偺僐乕儖僶僢僋娭悢撪張棟
*
* @param[in] aPrevViewId 屇傃弌偟尦價儏乕ID
* @param[in] aCustomMessageId 儊僢僙乕僕ID
* @param[in] aCustomMessage 儊僢僙乕僕僶僢僼傽
*/
void CSmbMusicAPSongInfoEditView::DoViewActivatedL(const TVwsViewId& /*aPrevViewId*/,
TUid aCustomMessageId,
const TDesC8& /*aCustomMessage*/)
{
//儘乕僇儖UID偺応崌偺張棟
if(KSmbMusicAPSongInfoLocalUid == aCustomMessageId)
{
//僐儅儞僪梷惂夝彍僐儅儞僪傪敪峴偡傞
iAppUi.HandleCommandL(ECmdReleaseCommand);
//曇廤椞堟偑側偐偭偨応崌偼丄曇廤椞堟偺庢摼梫媮傪敪峴
iEditResource->StartGetEditInfoL();
//僐儞僩儘乕儖偺抣傪僙僢僩偡傞
TInt itemCount = iEditResource->EditItemCount();
for(TInt index = 0; index < itemCount; index++)
{
SetControlDetailValueL(index);
}
//僼僅乕僇僗傪僙僢僩
if(itemCount > 0)
{
iContainer->SetFocusControl(iContainer->ControlByIndex(0));
}
//僼儔僢僌傪儕僙僢僩
SetFinishState(EFalse);
iClearInFinishEvent = EFalse;
//僉乕傪儕僙僢僩
if (EFalse == iEditResource->HasEditInfo())
{
EditReplaceKeyGuidanceL(EEditKeyInStart);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -