agenda.cpp

来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· C++ 代码 · 共 2,012 行 · 第 1/4 页

CPP
2,012
字号
		User::Leave(KOplErrInvalidArgs);

	CAgnRptDef *rptDef = CAgnRptDef::NewL();
	CleanupStack::PushL(rptDef);

	switch (type)
		{
	case EDaily:			// i,e. repeat every x days 
		{
		TAgnDailyRpt& rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(interval);
		if (count==0)
			rpt.SetRepeatForever(ETrue);
		else
			rpt.();
		rptDef->SetDaily(rpt);
		}
		break;
	case EWeekly:			// i.e.	repeat every x weeks on days Monday and Thursday with Tuesday as the first day of the week
		{
		TAgnWeeklyRpt& rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(interval);
		rpt.SetRepeatForever(ETrue);
		rptDef->SetWeekly(rpt);
		}
		break;
	case EMonthlyByDates:	// i.e. repeat every x months on the 3rd, 5th and 9th
		{
		TAgnMonthlyByDatesRpt& rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(1);
		rpt.SetRepeatForever(ETrue);
		rptDef->SetMonthlyByDates(rpt);
		}
		break;
	case EMonthlyByDays:	// i.e. repeat every x months on Tuesday of the 1st week of the month and Wednesday of the 3rd week
		{
		TAgnMonthlyByDaysRpt& rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(1);
		rpt.SetRepeatForever(ETrue);
		rptDef->SetMonthlyByDays(rpt);
		}
		break;
	case EYearlyByDate:		// i.e. repeat every year on the 3rd of October
		{
		TAgnYearlyByDateRpt rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(1);
		rpt.SetRepeatForever(ETrue);
		rptDef->SetYearlyByDay(rpt);
		}
	case EYearlyByDay:		// i.e. repeat every year on Wednesday of the 4th week of November
		{
		TAgnYearlyByDayRpt& rpt;
		rpt.SetStartDate(date);
		rpt.SetInterval(1);
		rpt.SetRepeatForever(ETrue);
		rptDef->SetMonthlyByDays(rpt);
		}
	default:
		User::Leave(KOplErrInvalidArgs);
		break;
	}

	entry->SetRptDefL(rptDef);

	CleanupStack::PopAndDestroy();		// CAgnRptDef

	aAPI.Push(0.0);
	}
#endif
	
/* ----------------------------------------------------------------------
	Get the ID of an entry
	OPL parameters:
		Handle of entry
	OPL return value:
		Id of entry
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetIdL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	aAPI.Push((TInt32)entry->EntryId().Value());
	}

/* ----------------------------------------------------------------------
	Get the type of an entry
	OPL parameters:
		Handle of entry
	OPL return value:
		Type of entry:
			0=appt
			1=todo
			2=event
			3=anniv		
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetTypeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	aAPI.Push((TInt16)entry->Type());
	}

/* ----------------------------------------------------------------------
	Get the text for an entry
	OPL parameters:
		Handle of entry
		String text
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetTextL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();
	TBuf<256> text;
	CRichText *rText;
	TInt len;

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	rText = entry->RichTextL();
	len = rText->DocumentLength();
	if (len>255)
		len=255;
	if (rText) rText->Extract(text,0,rText->DocumentLength());

	aAPI.PushL(text);
	}

/* ----------------------------------------------------------------------
	Get the year symbol for an entry
	OPL parameters:
		Handle of entry
	OPL return value:
		Symbol
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetSymbolL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();
	
	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);
	TBuf<1> symbol;
	if (entry->HasEntrySymbol())
		symbol.Append(symbol);
	aAPI.PushL(symbol);
	}
	
/* ----------------------------------------------------------------------
	Get the alarm details of an entry
	OPL parameters:
		Handle of entry
		Days warning
		Hour
		Minute
	OPL return value:
		Sound name
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetAlarmL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TAny* minute=aAPI.PopPtrInt32();
	TAny* hour=aAPI.PopPtrInt32();
	TAny* days=aAPI.PopPtrInt32();

	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	if (entry->HasAlarm())
		{
		TTimeIntervalDays d=entry->AlarmDaysWarning();
		TTimeIntervalMinutes m=entry->AlarmTime();
		TPtrC name=entry->AlarmSoundName();
		TInt hr, mn;

		hr = m.Int()/60;
		mn = m.Int()-hr*60;

		aAPI.PutLong(minute,mn);
		aAPI.PutLong(hour,hr);
		aAPI.PutLong(days,d.Int());

		aAPI.PushL(name);
		}
	else
		{
		aAPI.PutLong(minute,-1);
		aAPI.PutLong(hour,-1);
		aAPI.PutLong(days,-1);

		aAPI.PushL(KNullDesC);
		}
	}
	
/* ----------------------------------------------------------------------
	Return whether the entry is crossed out
	OPL parameters:
		Handle of entry
	OPL return value:
		1 if crossed out
		0 if not crossed out
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetCrossOutL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	if (entry->IsCrossedOut())
		aAPI.Push((TInt16)1);
	else
		aAPI.Push((TInt16)0);
	}
	
/* ----------------------------------------------------------------------
	Check whether entry is marked as tentative
	OPL parameters:
		Handle of entry
	OPL return value:
		1 if tentative
		0 if not tentative
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetTentativeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	if (entry->IsTentative())
		aAPI.Push((TInt16)1);
	else
		aAPI.Push((TInt16)0);
	}
	
/* ----------------------------------------------------------------------
	Check status of an entry
	OPL parameters:
		Handle of entry
	OPL return value:
		0 open
		1 private
		2 restricted
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnGetStatusL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);

	aAPI.Push((TInt16)entry->ReplicationData().Status());
	}
	
/* ----------------------------------------------------------------------
	Free an entry
	i.e. Delete the entry object
	OPL parameters:
		Handle of entry
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::EnFreeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	CAgnEntry* entry = (CAgnEntry*)aAPI.PopInt32();

	if (entry==NULL)
		User::Leave(KOplErrInvalidArgs);
	
	delete entry;

	aAPI.Push(0.0);
	}

/* ----------------------------------------------------------------------
	Set the start time of an appointment
	OPL parameters:
		Handle of appointment
		Start Year
		Start Month
		Start Day
		Start Hour
		Start Minute
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::ApSetStartTimeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TInt32 minute	= aAPI.PopInt32();
	TInt32 hour 	= aAPI.PopInt32();
	TInt32 day		= aAPI.PopInt32();
	TInt32 month	= aAPI.PopInt32();
	TInt32 year		= aAPI.PopInt32();

	CAgnAppt* appt = (CAgnAppt*)aAPI.PopInt32();

	CheckEntryType(appt, CAgnEntry::EAppt);

	if (year<1980 || year>2100 || month<1 || month>12 || day<1 || day>31 || hour<0 || hour>24 || minute<0 || minute>60)
		User::Leave(KOplErrInvalidArgs);

	TDateTime date(year, (TMonth)(month-1), day-1, hour, minute, 0, 0);

	appt->SetStartAndEndDateTime(date);

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Set the end time of an appointment
	OPL parameters:
		Handle of appointment
		End Year
		End Month
		End Day
		End Hour
		End Minute
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::ApSetEndTimeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TInt32 minute	= aAPI.PopInt32();
	TInt32 hour 	= aAPI.PopInt32();
	TInt32 day		= aAPI.PopInt32();
	TInt32 month	= aAPI.PopInt32();
	TInt32 year		= aAPI.PopInt32();

	CAgnAppt* appt = (CAgnAppt*)aAPI.PopInt32();

	CheckEntryType(appt, CAgnEntry::EAppt);

	if (year<1980 || year>2100 || month<1 || month>12 || day<1 || day>31 || hour<0 || hour>24 || minute<0 || minute>60)
		User::Leave(KOplErrInvalidArgs);

	TDateTime date(year, (TMonth)(month-1), day-1, hour, minute, 0, 0);

	appt->SetStartAndEndDateTime(appt->StartDateTime(), date);

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Get the start time of an appointment
	OPL parameters:
		Handle of appointment
		Year
		Month
		Day
		Hour
		Minute
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::ApGetStartTimeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TAny* minute=aAPI.PopPtrInt32();
	TAny* hour=aAPI.PopPtrInt32();
	TAny* day=aAPI.PopPtrInt32();
	TAny* month=aAPI.PopPtrInt32();
	TAny* year=aAPI.PopPtrInt32();

	CAgnAppt* appt = (CAgnAppt*)aAPI.PopInt32();

	CheckEntryType(appt, CAgnEntry::EAppt);

	TDateTime d=appt->StartDateTime().DateTime();

	aAPI.PutLong(year,d.Year());
	aAPI.PutLong(month,d.Month()+1);
	aAPI.PutLong(day,d.Day()+1);
	aAPI.PutLong(hour,d.Hour());
	aAPI.PutLong(minute,d.Minute());

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Get the end time of an appointment
	OPL parameters:
		Handle of appointment
		Year
		Month
		Day
		Hour
		Minute
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::ApGetEndTimeL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TAny* minute=aAPI.PopPtrInt32();
	TAny* hour=aAPI.PopPtrInt32();
	TAny* day=aAPI.PopPtrInt32();
	TAny* month=aAPI.PopPtrInt32();
	TAny* year=aAPI.PopPtrInt32();

	CAgnAppt* appt = (CAgnAppt*)aAPI.PopInt32();

	CheckEntryType(appt, CAgnEntry::EAppt);

	TDateTime d=appt->EndDateTime().DateTime();

	aAPI.PutLong(year,d.Year());
	aAPI.PutLong(month,d.Month()+1);
	aAPI.PutLong(day,d.Day()+1);
	aAPI.PutLong(hour,d.Hour());
	aAPI.PutLong(minute,d.Minute());

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Find existing todo in given todo list
	OPL parameters:
		handle of todo list
		index of todo entry, first is 0
	OPL return value:
		handle of todo
   ---------------------------------------------------------------------- */
void CAgendaOpx::TdAtL(OplAPI& aAPI,CAgendaOpx& aOpx)
	{
	TInt32 index = aAPI.PopInt32();
	CAgnTodoList* list = (CAgnTodoList*)aAPI.PopInt32();

	if (list==NULL)
		User::Leave(KOplErrInvalidArgs);

	if (index>=0 && index<list->Count())
		{
		TAgnEntryId todoId = list->At(index);
		CAgnEntry* entry = aOpx.iModel->FetchEntryL(todoId);
		aAPI.Push(CastEntryL(entry));
		}
	else
		aAPI.Push((TInt32)0);
	}


/* ----------------------------------------------------------------------
	Set the list to which a todo belongs
	OPL parameters:
		Handle of todo
		todo list id
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::TdSetListL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TInt32 id = aAPI.PopInt32();

	CAgnTodo* todo = (CAgnTodo*)aAPI.PopInt32();

	CheckEntryType(todo, CAgnEntry::ETodo);

	todo->SetTodoListId(TAgnTodoListId(id));

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Set the priority of a todo
	OPL parameters:
		Handle of todo
		todo priority
	OPL return value:
		None
   ---------------------------------------------------------------------- */
void CAgendaOpx::TdSetPriorityL(OplAPI& aAPI,CAgendaOpx& /*aOpx*/)
	{
	TInt32 pri = aAPI.PopInt32();

	CAgnTodo* todo = (CAgnTodo*)aAPI.PopInt32();

	CheckEntryType(todo, CAgnEntry::ETodo);

	if (pri<1 || pri>9)
		User::Leave(KOplErrInvalidArgs);

	todo->SetPriority(pri);

	aAPI.Push(0.0);
	}
	
/* ----------------------------------------------------------------------
	Set the due date and time of a todo
	OPL parameters:
		Handle of todo
		Year
		Month

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?