⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbmusicapsonginfoeditview.cpp

📁 索爱手机代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
 * @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 + -