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 + -
显示快捷键?