📄 classscheduleappui.cpp
字号:
{
CFileMan *fileman = CFileMan::NewL(CEikonEnv::Static()->FsSession());
CleanupStack::PushL(fileman);
User::LeaveIfError(fileman->Delete(KClassScheduleFileName, 0)); //删除文件,0表示递归处理
CleanupStack::PopAndDestroy(); //fileman
CEikonEnv::Static()->ReadResource(tips, R_STR_DELETE_ALL_TIPS); //从资源文件中获取"全部删除成功"
ShowNotify(tips); //显示提示对话框
delete iDB;
iDB = new(ELeave) CClassScheduleDB(); //定义并分配一个CSyllabusDB 类型的变量
iAppContainer->CreateListBoxL();
}
}
//--------------------------------------------------------------------------
//显示listbox
//--------------------------------------------------------------------------
TInt CClassScheduleAppUi::ShowPopListBox(TInt aTitleResourceId, TInt *aSelectIndex)
{
CAknSinglePopupMenuStyleListBox *list = new(ELeave) CAknSinglePopupMenuStyleListBox; //定义一个CAknSinglePopupMenuStyleListBox类型的列表框变量
CleanupStack::PushL(list);
CAknPopupList *popupList = CAknPopupList::NewL(list, R_AVKON_SOFTKEYS_OK_BACK,AknPopupLayouts::EMenuGraphicWindow);
CleanupStack::PushL(popupList);
list->ConstructL(popupList, CEikListBox::ELeftDownInViewRect);
list->CreateScrollBarFrameL(ETrue);
//创建一个滚动条框架ETrue表示预先分配内存给滚动条
list->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto); //设置滚动条的水平和垂直的值
TBuf<32> noneText;
CEikonEnv::Static()->ReadResource(noneText, R_STR_NONE);
CDesCArray* items = STATIC_CAST( CDesCArray*,list->Model()->ItemTextArray());
TName itemText;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(iDB->iWeekId);
TClassScheduleDBStruct &db = arrayDay->At(iAppContainer->GetCurrentItemIndex());
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_NAME); //获取课程名的信息
itemText.Append(KColon);
if(db.iName.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iName);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_TIME); //获取上课时间的信息
itemText.Append(KColon);
itemText.Append(GetTimeStringFromTInt64(db.iTime));
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_CLASSROOM); //获取上课地点的信息
itemText.Append(KColon);
if(db.iAddr.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iAddr);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_TEACHER); //获取授课教师的信息
itemText.Append(KColon);
if(db.iTeacher.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iTeacher);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_COURSE_REMARK); //获取备注的信息
itemText.Append(KColon);
if(db.iRemark.Length()==0)
itemText.Append(noneText);
else
itemText.Append(db.iRemark);
items->AppendL(itemText);
CEikonEnv::Static()->ReadResource(itemText, R_STR_LESSON_01 + iAppContainer->GetCurrentItemIndex());
popupList->SetTitleL(itemText); //设置对话框文本,(包含新的标题文本)
CEikButtonGroupContainer *iBgc = popupList->ButtonGroupContainer(); //定义按钮组
CEikonEnv::Static()->ReadResource(itemText, aTitleResourceId);
iBgc->SetCommandL(EAknSoftkeyOk, itemText); //设置按钮的文本,改变按钮的文本,通过aCommandId 识别
iBgc->DrawNow();
list->SetCurrentItemIndex(*aSelectIndex); //定置当前项的索引,这个函数改变当前项,但不能重画列表视图或更新选区,参数表示那个项被设置为当前的
TInt popupOk = popupList->ExecuteLD(); //显示列表
*aSelectIndex = list->CurrentItemIndex(); //将返回的当前项的索引好赋给aSelectIndex
CleanupStack::Pop(); // popupList
CleanupStack::PopAndDestroy(); // list
return popupOk;
}
//--------------------------------------------------
//查询信息
//--------------------------------------------------
void CClassScheduleAppUi::CmdSearchForName()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone); //定义一个CAknTextQueryDialog类型的对话框变量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_NAME); //从资源文件获取"课程名"
dlg->SetPromptL(tips); //设置查询的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果输入信息
{
CmdSearchFromDB(ECourseName, name); //从数据库中查找和输入的课程名相同的所有信息并显示
}
}
void CClassScheduleAppUi::CmdSearchForTime()
{
TName name, tips;
TTime value;
value.HomeTime();
CAknTimeQueryDialog* dlg = CAknTimeQueryDialog::NewL( value, CAknQueryDialog::ENoTone ); //定义一个CAknTimeQueryDialog类型的对话框变量
CleanupStack::PushL(dlg);
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_TIME); //从资源文件获取"上课时间"
dlg->SetPromptL(tips); //设置查询的提示文本
CleanupStack::Pop(); //dlg
if(dlg->ExecuteLD( R_DIALOG_TIME_QUERY )) //如果输入一个时间
{
TInt64 time = value.Int64(); //将时间的值赋给time
name.Copy(GetTimeStringFromTInt64(time)); //将时间拷贝到上课时间中
CmdSearchFromDB(ECourseTime, name); //从数据库中查找和输入的上课时间相同的所有信息并显示
}
}
void CClassScheduleAppUi::CmdSearchForAddr()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone);//定义一个CAknTextQueryDialog类型的对话框变量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_CLASSROOM); //从资源文件获取"上课地点"
dlg->SetPromptL(tips); //设置查询的提示文本
CleanupStack::Pop(); //dlg
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果输入一个上课地点
{
CmdSearchFromDB(ECourseAddr, name); //从数据库中查找和输入的上课地点相同的所有信息并显示
}
}
void CClassScheduleAppUi::CmdSearchForTeacher()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone);//定义一个CAknTextQueryDialog类型的对话框变量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_TEACHER); //从资源文件获取“授课教师”
dlg->SetPromptL(tips); //设置查询的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果输入一个授课教师的名字
{
CmdSearchFromDB(ECourseTeacher, name); //从数据库中查找和输入的授课教师名相同的所有信息并显示
}
}
void CClassScheduleAppUi::CmdSearchForRemark()
{
TName name, tips;
CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL(name, CAknQueryDialog::ENoTone); //定义一个CAknTextQueryDialog类型的对话框变量
CEikonEnv::Static()->ReadResource(tips, R_STR_COURSE_REMARK); //从资源文件获取“备注”
dlg->SetPromptL(tips); //设置查询的提示文本
if (dlg->ExecuteLD(R_DIALOG_INPUT)) //如果输入备注的信息
{
CmdSearchFromDB(ECourseRemark, name); //从数据库中查找和输入的备注信息相同的所有信息并显示
}
}
//-----------------------------------------------------------------------
//从数据库中查询
//-----------------------------------------------------------------------
void CClassScheduleAppUi::CmdSearchFromDB(TInt aType, TDesC& aSearchText)
{
TInt weekid = EWeek1;
TInt lessonid = ECourse01;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL;
for(weekid=EWeek1; weekid<=EWeek7; weekid++) //循环从周一到周末
{
arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(weekid); //返回一个元素索引在数组中的位置
for(lessonid=ECourse01;lessonid<=ECourse10;lessonid++) //循环从第一节课到第十节课
{
iIsSearchFlag[weekid][lessonid] = EFalse;
TClassScheduleDBStruct &db = arrayDay->At(lessonid);
switch(aType)
{
case ECourseTime: //按时间查询
{
TBuf<32> time;
time.Copy(GetTimeStringFromTInt64(db.iTime));
if(time.Find(aSearchText)>=0) //如果找到
iIsSearchFlag[weekid][lessonid] = ETrue;
}
break;
case ECourseName: //按课程名查找
if(db.iName.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseAddr: //按上课地点查找
if(db.iAddr.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseTeacher: //按授课教师查找
if(db.iTeacher.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
case ECourseRemark: //按备注查找
if(db.iRemark.Find(aSearchText)>=0)
iIsSearchFlag[weekid][lessonid] = ETrue;
break;
}
}
}
iAppContainer->CreateSearchListBoxL();
}
//-----------------------------------------------------
//查找当前时间的课程
//-----------------------------------------------------
void CClassScheduleAppUi::CheckCurCourse()
{
TTime curTime;
curTime.HomeTime(); //设置时间和日期
TInt lessonid = ECourse01;
TName tips;
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iDB->iArray->At(iDB->iWeekId);//返回一个元素索引在数组中的位置
for(lessonid=ECourse01;lessonid<=ECourse10;lessonid++) //循环从第一节课到第十节课
{
TClassScheduleDBStruct &db = arrayDay->At(lessonid);
TTime dbTime(db.iTime); //从数据库中获取已输入的时间
TInt off = dbTime.DateTime().Hour() - curTime.DateTime().Hour();//输入到数据库的时间与当前时间相减
if(off==0) //如果相等
{
CEikonEnv::Static()->ReadResource(tips, R_STR_HAS_COURSE_TIPS); //从资源文件获取“当前时刻有课”
ShowNotify(tips); //显示提示信息
DetailDB(iDB->iWeekId, lessonid); //显示详细信息
return;
}
}
CEikonEnv::Static()->ReadResource(tips, R_STR_NO_COURSE_TIPS); //如果当前时间无课程从资源文件获取“当前时刻无课程”
ShowNotify(tips); //显示提示信息
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -